[
  {
    "name": "Artifact",
    "group": "Components",
    "sourceFile": "src/components/artifact.tsx",
    "props": [
      {
        "name": "src",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "URL the preview iframe frames."
      },
      {
        "name": "files",
        "type": "undefined | { path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\"; additions?: undefined | number; deletions?: undefined | number; status?: undefined | \"added\" | \"modified\" | \"deleted\" | \"renamed\" | \"untracked\" }[]",
        "displayType": "undefined | { path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\"; additions?: undefined | number; deletions?: undefined | number; status?: undefined | \"added\" | \"modified\" | \"deleted\" | \"renamed\" | \"untracked\" }[]",
        "optional": true,
        "scalar": false,
        "description": "Files for the Code tab's tree (+ each file's preview `url`)."
      },
      {
        "name": "tab",
        "type": "undefined | \"preview\" | \"code\"",
        "displayType": "undefined | \"preview\" | \"code\"",
        "optional": true,
        "scalar": true,
        "description": "Controlled active tab — when set, the artifact follows it (re-asserted on every change). When undefined the tab is uncontrolled (see `defaultTab`)."
      },
      {
        "name": "defaultTab",
        "type": "undefined | \"preview\" | \"code\"",
        "displayType": "undefined | \"preview\" | \"code\"",
        "optional": true,
        "scalar": true,
        "description": "Uncontrolled INITIAL tab (used only when `tab` is undefined). The user can then freely switch tabs; defaults to `preview`."
      },
      {
        "name": "activeFile",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Selected file path (syncs tree highlight + Code source + preview)."
      },
      {
        "name": "sandbox",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "iframe `sandbox` override. Default `allow-scripts allow-forms`."
      },
      {
        "name": "iframeTitle",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Accessible iframe title.",
        "default": "'Artifact preview'"
      },
      {
        "name": "maximized",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Controlled maximize view-state (drives the expand/restore button).",
        "default": "false"
      },
      {
        "name": "showNav",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Show the back/forward nav buttons. Default `true`."
      },
      {
        "name": "showReload",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Show the reload button. Default `true`."
      },
      {
        "name": "showHome",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Show the home button. Default `true`."
      },
      {
        "name": "showPathField",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Show the editable path/address field. Default `true`."
      },
      {
        "name": "showTabs",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Show the Preview|Code tab toggle. Default `true`."
      },
      {
        "name": "expandable",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Show the expand-to-fill button. Default `false` (opt-in)."
      },
      {
        "name": "openInTab",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Show the open-in-new-tab button. Default `false` (opt-in)."
      },
      {
        "name": "standalone",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Standalone chrome: rounded + bordered (default in-panel = square, borderless)."
      },
      {
        "name": "readonlyPath",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Make the path field read-only (visible, nav-tracking, non-editable)."
      },
      {
        "name": "displayUrl",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Friendly address shown in the path field INSTEAD of the real current url (read-only, non-navigable). Use when the framed url is not consumer-facing (e.g. a `data:` blob) so a clean address is shown instead of leaking it. Unset = show the real url (editable per `readonlyPath`)."
      }
    ],
    "callbacks": [
      {
        "name": "onNavigate",
        "type": "undefined | (url: string) => void",
        "displayType": "undefined | (url: string) => void",
        "description": "Fired when the preview navigates (back/forward/reload/path-edit/file-click)."
      },
      {
        "name": "onTabChange",
        "type": "undefined | (tab: ArtifactTab) => void",
        "displayType": "undefined | (tab: ArtifactTab) => void",
        "description": "Fired when the Preview|Code tab changes."
      },
      {
        "name": "onFileSelect",
        "type": "undefined | (path: string) => void",
        "displayType": "undefined | (path: string) => void",
        "description": "Fired when a file is selected in the tree."
      },
      {
        "name": "onMaximizeChange",
        "type": "undefined | (maximized: boolean) => void",
        "displayType": "undefined | (maximized: boolean) => void",
        "description": "Fired when the expand/restore button toggles the maximize view-state."
      },
      {
        "name": "controllerRef",
        "type": "undefined | (controller: ArtifactController) => void",
        "displayType": "undefined | (controller: ArtifactController) => void",
        "description": "Receive the imperative controller once mounted. The `<kai-artifact>` facade forwards these as element methods (back/forward/reload/home/navigate/ selectFile/openExternal/maximize/restore)."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": "`Artifact` — a framed, switchable generated-artifact viewer. A functional nav toolbar (back · forward · reload · home + editable path field + Preview|Code toggle) over a sandboxed `<iframe>` (Preview) or a file-tree + `<kai-code-block>` (Code). The component self-navigates the iframe and emits `kai-navigate` / `kai-tab-change` / `kai-file-select` so a consumer can observe/sync."
  },
  {
    "name": "Attachment",
    "group": "Components",
    "sourceFile": "src/components/attachments.tsx",
    "props": [
      {
        "name": "data",
        "type": "{ id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }",
        "displayType": "{ id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }",
        "optional": false,
        "scalar": false,
        "description": ""
      }
    ],
    "callbacks": [
      {
        "name": "onRemove",
        "type": "undefined | () => void",
        "displayType": "undefined | () => void",
        "description": ""
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "AttachmentEmpty",
    "group": "Components",
    "sourceFile": "src/components/attachments.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "AttachmentHoverCard",
    "group": "Components",
    "sourceFile": "src/components/attachments.tsx",
    "props": [
      {
        "name": "openDelay",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "0"
      },
      {
        "name": "closeDelay",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "0"
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "AttachmentHoverCardContent",
    "group": "Components",
    "sourceFile": "src/components/attachments.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "AttachmentHoverCardTrigger",
    "group": "Components",
    "sourceFile": "src/components/attachments.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "AttachmentInfo",
    "group": "Components",
    "sourceFile": "src/components/attachments.tsx",
    "props": [
      {
        "name": "showMediaType",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "AttachmentPreview",
    "group": "Components",
    "sourceFile": "src/components/attachments.tsx",
    "props": [],
    "callbacks": [
      {
        "name": "fallbackIcon",
        "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "description": ""
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "AttachmentRemove",
    "group": "Components",
    "sourceFile": "src/components/attachments.tsx",
    "props": [
      {
        "name": "label",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'Remove'"
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Attachments",
    "group": "Components",
    "sourceFile": "src/components/attachments.tsx",
    "props": [
      {
        "name": "variant",
        "type": "undefined | \"grid\" | \"inline\" | \"list\"",
        "displayType": "undefined | \"grid\" | \"inline\" | \"list\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'grid'"
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "BarsLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Card",
    "group": "Components",
    "sourceFile": "src/components/card.tsx",
    "props": [
      {
        "name": "heading",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Heading rendered in the card chrome (the contract's CardEnvelope.title). NB: NOT `title` — `title` is a reserved IDL attr (see define.tsx RESERVED)."
      },
      {
        "name": "description",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Optional supporting text under the heading."
      },
      {
        "name": "errorMessage",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "When set, the card renders its standard inline error state INSTEAD of body."
      },
      {
        "name": "dense",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Compact spacing for dense lists of cards."
      },
      {
        "name": "headingId",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Stable id for the heading (so composing cards can `aria-labelledby` it). Auto-generated when omitted."
      },
      {
        "name": "dismissible",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Render a dismiss (×) button that hides the card and calls `onDismiss`. Opt-in, OFF by default — the contract cards never set it, so they are unaffected."
      },
      {
        "name": "href",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Render the whole card as a link (`<a>`). Wins over `clickable`."
      },
      {
        "name": "target",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "`target` for the `href` anchor."
      },
      {
        "name": "rel",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "`rel` for the `href` anchor (default `noopener noreferrer` when `target=\"_blank\"`)."
      },
      {
        "name": "clickable",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Make the whole card behave like a button: `role=\"button\"`, a tabindex, and Enter/Space activation, firing `onCardClick`. Ignored when `href` is set. A clickable/href card must NOT also contain footer action buttons — that nests interactive elements. Use `actions` OR clickable, never both."
      }
    ],
    "callbacks": [
      {
        "name": "media",
        "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "description": "Media region (image/icon) rendered above the heading."
      },
      {
        "name": "actions",
        "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "description": "Footer action region (buttons)."
      },
      {
        "name": "onDismiss",
        "type": "undefined | () => void",
        "displayType": "undefined | () => void",
        "description": "Called after the card is dismissed via its ×."
      },
      {
        "name": "onCardClick",
        "type": "undefined | (event: MouseEvent | KeyboardEvent) => void",
        "displayType": "undefined | (event: MouseEvent | KeyboardEvent) => void",
        "description": "Called when a `clickable` (or `href`) card is activated (click, or Enter/Space)."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": "`Card` — the shared presentational chrome every native card composes from: an optional media region, a heading + description, a body (default slot), an actions footer, and one consistent inline **error** state (the contract's \"never a broken/partial card\" rule). It is intentionally chrome-only: it reads no `CardContext` and emits no `CardEvent` — the cards that compose it (e.g. `kai-form`) own the contract interaction. The optional `dismissible` / `href` / `clickable` behaviors are all OFF by default, so the contract cards (which set none of them) keep their original presentational behavior unchanged. a11y: a `clickable` or `href` card MUST NOT also contain footer action buttons — that nests interactive controls inside a button/link. Use `actions` OR make the card clickable, never both."
  },
  {
    "name": "CardFallback",
    "group": "Components",
    "sourceFile": "src/components/card-fallback.tsx",
    "props": [
      {
        "name": "type",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": "The unrecognized envelope type, shown to aid debugging."
      },
      {
        "name": "cardId",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "The envelope id (for parity with cards; not displayed)."
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "Inert, themed fallback for an unsupported card type. Emits nothing itself — the dispatcher emits the contract `error` event alongside rendering this."
  },
  {
    "name": "CardRenderer",
    "group": "Components",
    "sourceFile": "src/components/card-renderer.tsx",
    "props": [
      {
        "name": "envelope",
        "type": "{ type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string } }",
        "displayType": "{ type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string } }",
        "optional": false,
        "scalar": false,
        "description": ""
      },
      {
        "name": "types",
        "type": "undefined | CardComponentMap",
        "displayType": "undefined | CardComponentMap",
        "optional": true,
        "scalar": false,
        "description": "Add/override type→component entries (merged over the built-ins)."
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ChainOfThought",
    "group": "Components",
    "sourceFile": "src/components/chain-of-thought.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ChainOfThoughtContent",
    "group": "Components",
    "sourceFile": "src/components/chain-of-thought.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ChainOfThoughtItem",
    "group": "Components",
    "sourceFile": "src/components/chain-of-thought.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "ChainOfThoughtStep",
    "group": "Components",
    "sourceFile": "src/components/chain-of-thought.tsx",
    "props": [
      {
        "name": "isLast",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "false"
      },
      {
        "name": "open",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Controlled open state. When provided, the step's Collapsible is driven by this value (the parent owns it — used by the Accordion model below). When OMITTED the step stays uncontrolled, preserving the original behaviour (every step independently toggleable, starting closed)."
      }
    ],
    "callbacks": [
      {
        "name": "onOpenChange",
        "type": "undefined | (open: boolean) => void",
        "displayType": "undefined | (open: boolean) => void",
        "description": "Called with the desired next open state when the user clicks the trigger. Only meaningful when `open` is also provided (controlled mode); the parent Accordion routes this through its open-set handler."
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ChainOfThoughtTrigger",
    "group": "Components",
    "sourceFile": "src/components/chain-of-thought.tsx",
    "props": [
      {
        "name": "swapIconOnHover",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "true"
      }
    ],
    "callbacks": [
      {
        "name": "leftIcon",
        "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "description": ""
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ChatContainer",
    "group": "Components",
    "sourceFile": "src/components/chat-container.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "ChatContainerContent",
    "group": "Components",
    "sourceFile": "src/components/chat-container.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "ChatContainerRoot",
    "group": "Components",
    "sourceFile": "src/components/chat-container.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "ChatContainerScrollAnchor",
    "group": "Components",
    "sourceFile": "src/components/chat-container.tsx",
    "props": [],
    "callbacks": [
      {
        "name": "ref",
        "type": "undefined | HTMLDivElement | (el: HTMLDivElement) => void",
        "displayType": "undefined | HTMLDivElement | (el: HTMLDivElement) => void",
        "description": ""
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "ChatScopePicker",
    "group": "Components",
    "sourceFile": "src/components/chat-scope-picker.tsx",
    "props": [
      {
        "name": "currentLabel",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "availableAuthors",
        "type": "undefined | string[]",
        "displayType": "undefined | string[]",
        "optional": true,
        "scalar": false,
        "description": ""
      },
      {
        "name": "availableTags",
        "type": "undefined | string[]",
        "displayType": "undefined | string[]",
        "optional": true,
        "scalar": false,
        "description": ""
      },
      {
        "name": "defaultOpen",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Initial open state of the dropdown (uncontrolled seed)."
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Disable the trigger — click/keyboard no longer open the dropdown."
      }
    ],
    "callbacks": [
      {
        "name": "onScopeChange",
        "type": "(filters: SearchFilters | undefined) => void",
        "displayType": "(filters: SearchFilters | undefined) => void",
        "description": ""
      },
      {
        "name": "controllerRef",
        "type": "undefined | (api: DropdownController) => void",
        "displayType": "undefined | (api: DropdownController) => void",
        "description": "Receive the dropdown's open controller (forwarded from the inner Dropdown)."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Checkpoint",
    "group": "Components",
    "sourceFile": "src/components/checkpoint.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "CheckpointIcon",
    "group": "Components",
    "sourceFile": "src/components/checkpoint.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "CheckpointTrigger",
    "group": "Components",
    "sourceFile": "src/components/checkpoint.tsx",
    "props": [
      {
        "name": "tooltip",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "aria-label",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Accessible name for the button — required when it has no visible text (icon-only)."
      },
      {
        "name": "variant",
        "type": "undefined | \"default\" | \"ghost\" | \"outline\"",
        "displayType": "undefined | \"default\" | \"ghost\" | \"outline\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'ghost'"
      },
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'sm'"
      }
    ],
    "callbacks": [
      {
        "name": "onClick",
        "type": "undefined | () => void",
        "displayType": "undefined | () => void",
        "description": ""
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ChoiceCard",
    "group": "Components",
    "sourceFile": "src/components/choice-card.tsx",
    "props": [
      {
        "name": "data",
        "type": "undefined | { prompt?: undefined | string; options: { id: string; label: string; description?: undefined | string; media?: undefined | { image?: undefined | string; imageAlt?: undefined | string; icon?: undefined | string }; meta?: undefined | string; recommended?: undefined | false | true; disabled?: undefined | false | true; payload?: unknown }[]; allowOther?: undefined | false | true | { label?: undefined | string; placeholder?: undefined | string }; submitLabel?: undefined | string; dismissible?: undefined | false | true }",
        "displayType": "undefined | { prompt?: undefined | string; options: { id: string; label: string; description?: undefined | string; media?: undefined | { image?: undefined | string; imageAlt?: undefined | string; icon?: undefined | string }; meta?: undefined | string; recommended?: undefined | false | true; disabled?: undefined | false | true; payload?: unknown }[]; allowOther?: undefined | false | true | { label?: undefined | string; placeholder?: undefined | string }; submitLabel?: undefined | string; dismissible?: undefined | false | true }",
        "optional": true,
        "scalar": false,
        "description": "The choice definition (CardEnvelope.data)."
      },
      {
        "name": "cardId",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "The card id used to correlate every emitted CardEvent."
      },
      {
        "name": "heading",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "The envelope title rendered in the card chrome."
      },
      {
        "name": "hostElement",
        "type": "undefined | HTMLElement",
        "displayType": "undefined | HTMLElement",
        "optional": true,
        "scalar": false,
        "description": "The custom-element host node, for the bubbling `kai-card` fallback emit."
      },
      {
        "name": "resolution",
        "type": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string }",
        "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string }",
        "optional": true,
        "scalar": false,
        "description": "When set, render the chromed read-only view instead of the interactive radiogroup."
      },
      {
        "name": "value",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Controlled selection (option id). When set, the consumer owns the current pick."
      },
      {
        "name": "defaultValue",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Option id to pre-select on mount (uncontrolled seed)."
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Disable the whole radiogroup + Submit (e.g. while the agent is busy)."
      }
    ],
    "callbacks": [
      {
        "name": "host",
        "type": "undefined | { context: () => import(\"/home/runner/work/ui/ui/packages/ui/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "displayType": "undefined | { context: () => import(\"/home/runner/work/ui/ui/packages/ui/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kai-card` CustomEvent off `hostElement`)."
      },
      {
        "name": "onValueChange",
        "type": "undefined | (value: string) => void",
        "displayType": "undefined | (value: string) => void",
        "description": "Fires when the selection changes BEFORE submit (row click or select())."
      },
      {
        "name": "controllerRef",
        "type": "undefined | (controller: ChoiceController) => void",
        "displayType": "undefined | (controller: ChoiceController) => void",
        "description": "Receive the imperative controller once mounted. The `<kai-choice>` facade forwards these as element methods (focus/select/send/dismiss/reopen)."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "`ChoiceCard` — a single-select \"pick one of N rich options\" card (plans, products, flights, quick replies) inside `Card` chrome. The options are a WAI-ARIA radiogroup (list rows) with roving tabindex: clicking a row (or Space/Enter on the focused row) **selects** it locally without emitting; a **Submit** button below the list then emits the Card contract's **`action`** verb (`{ kind:'action', cardId, action: option.id, payload }`) and resolves the card (chosen option shown read-only) so the same pick can't double-fire. An optional `allowOther` free-text escape appends a selectable \"Other…\" row; selecting it reveals an inline text input, and the same Submit emits `action:'__other__'` with `{ text }`. Emits `ready` on mount and `error` for an unusable definition (inline error state)."
  },
  {
    "name": "CircularLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ClassicLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "CodeBlock",
    "group": "Components",
    "sourceFile": "src/components/code-block.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [
      "--color-code-foreground"
    ],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "CodeBlockCode",
    "group": "Components",
    "sourceFile": "src/components/code-block.tsx",
    "props": [
      {
        "name": "code",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "language",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'tsx'"
      },
      {
        "name": "theme",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [
      "--color-code-foreground"
    ],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "CodeBlockGroup",
    "group": "Components",
    "sourceFile": "src/components/code-block.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "ConfirmCard",
    "group": "Components",
    "sourceFile": "src/components/confirm-card.tsx",
    "props": [
      {
        "name": "data",
        "type": "undefined | { heading?: undefined | string; body?: undefined | string; tone?: undefined | \"warning\" | \"default\" | \"danger\"; actions: { id: string; label: string; style?: undefined | \"default\" | \"primary\" | \"destructive\"; payload?: unknown; default?: undefined | false | true }[]; dismissible?: undefined | false | true }",
        "displayType": "undefined | { heading?: undefined | string; body?: undefined | string; tone?: undefined | \"warning\" | \"default\" | \"danger\"; actions: { id: string; label: string; style?: undefined | \"default\" | \"primary\" | \"destructive\"; payload?: unknown; default?: undefined | false | true }[]; dismissible?: undefined | false | true }",
        "optional": true,
        "scalar": false,
        "description": "The confirm definition (CardEnvelope.data)."
      },
      {
        "name": "cardId",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "The card id used to correlate every emitted CardEvent."
      },
      {
        "name": "heading",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "The envelope title rendered in the card chrome."
      },
      {
        "name": "hostElement",
        "type": "undefined | HTMLElement",
        "displayType": "undefined | HTMLElement",
        "optional": true,
        "scalar": false,
        "description": "The custom-element host node, for the bubbling `kai-card` fallback emit."
      },
      {
        "name": "autofocus",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Focus the default action on mount. Default OFF (no focus-stealing mid-stream)."
      },
      {
        "name": "resolution",
        "type": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string }",
        "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string }",
        "optional": true,
        "scalar": false,
        "description": "When set, render the chromed read-only view instead of the buttons."
      }
    ],
    "callbacks": [
      {
        "name": "host",
        "type": "undefined | { context: () => import(\"/home/runner/work/ui/ui/packages/ui/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "displayType": "undefined | { context: () => import(\"/home/runner/work/ui/ui/packages/ui/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kai-card` CustomEvent off `hostElement`)."
      },
      {
        "name": "controllerRef",
        "type": "undefined | (controller: ConfirmController) => void",
        "displayType": "undefined | (controller: ConfirmController) => void",
        "description": "Receive the imperative controller once mounted. The `<kai-confirm>` facade forwards these as element methods (focus/confirm/dismiss/reopen)."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "`ConfirmCard` — a named-intent approval card. Renders a title + body + a small set of action buttons inside `Card` chrome. Activating an action emits the Card contract's `action` verb (`{ kind:'action', cardId, action, payload }`) and resolves the card (other actions disabled, the chosen one marked) so the same approval can't double-fire. Emits `ready` on mount, `dismiss` for the optional close affordance, and `error` for an unusable definition (inline error state)."
  },
  {
    "name": "Context",
    "group": "Components",
    "sourceFile": "src/components/context.tsx",
    "props": [
      {
        "name": "usedTokens",
        "type": "number",
        "displayType": "number",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "maxTokens",
        "type": "number",
        "displayType": "number",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "inputTokens",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "outputTokens",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "reasoningTokens",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "cacheTokens",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "estimatedCost",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "warnThreshold",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "Fraction (0–1) above which the progress bar turns yellow. Defaults to `0.7` (70%)."
      },
      {
        "name": "dangerThreshold",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "Fraction (0–1) above which the progress bar turns red. Defaults to `0.9` (90%)."
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ContextCacheUsage",
    "group": "Components",
    "sourceFile": "src/components/context.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ContextContent",
    "group": "Components",
    "sourceFile": "src/components/context.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ContextContentBody",
    "group": "Components",
    "sourceFile": "src/components/context.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ContextContentFooter",
    "group": "Components",
    "sourceFile": "src/components/context.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ContextContentHeader",
    "group": "Components",
    "sourceFile": "src/components/context.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ContextInputUsage",
    "group": "Components",
    "sourceFile": "src/components/context.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ContextOutputUsage",
    "group": "Components",
    "sourceFile": "src/components/context.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ContextReasoningUsage",
    "group": "Components",
    "sourceFile": "src/components/context.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ContextTrigger",
    "group": "Components",
    "sourceFile": "src/components/context.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ConversationItem",
    "group": "Components",
    "sourceFile": "src/components/conversation-item.tsx",
    "props": [
      {
        "name": "conversation",
        "type": "{ id: string; title: string; groupId?: undefined | string; scope: { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt: string; updatedAt: string; trailing?: undefined | string }",
        "displayType": "{ id: string; title: string; groupId?: undefined | string; scope: { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt: string; updatedAt: string; trailing?: undefined | string }",
        "optional": false,
        "scalar": false,
        "description": ""
      },
      {
        "name": "isActive",
        "type": "false | true",
        "displayType": "false | true",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "compact",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Dense single-line row: a leading dot + title, no message count."
      }
    ],
    "callbacks": [
      {
        "name": "onSelect",
        "type": "(id: string) => void",
        "displayType": "(id: string) => void",
        "description": ""
      }
    ],
    "slots": [],
    "tokens": [
      "--color-sidebar"
    ],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ConversationList",
    "group": "Components",
    "sourceFile": "src/components/conversation-list.tsx",
    "props": [
      {
        "name": "groups",
        "type": "{ id: string; userId?: undefined | string; teamId?: undefined | string; name: string; sortOrder: number; createdAt: string }[]",
        "displayType": "ConversationGroup[]",
        "optional": false,
        "scalar": false,
        "description": ""
      },
      {
        "name": "conversations",
        "type": "{ id: string; title: string; groupId?: undefined | string; scope: { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt: string; updatedAt: string; trailing?: undefined | string }[]",
        "displayType": "{ id: string; title: string; groupId?: undefined | string; scope: { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt: string; updatedAt: string; trailing?: undefined | string }[]",
        "optional": false,
        "scalar": false,
        "description": ""
      },
      {
        "name": "activeId",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "compact",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Dense single-line rows (a leading dot + title, no message count)."
      }
    ],
    "callbacks": [
      {
        "name": "onSelect",
        "type": "(id: string) => void",
        "displayType": "(id: string) => void",
        "description": ""
      },
      {
        "name": "onNewChat",
        "type": "() => void",
        "displayType": "() => void",
        "description": ""
      },
      {
        "name": "onToggleSidebar",
        "type": "undefined | () => void",
        "displayType": "undefined | () => void",
        "description": ""
      },
      {
        "name": "header",
        "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "description": "Replaces the built-in title bar (toggle / \"Chats\" / New chat)."
      },
      {
        "name": "footer",
        "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "description": "A row below the list (e.g. account / settings / usage)."
      },
      {
        "name": "empty",
        "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "description": "Replaces the built-in \"no conversations yet\" state."
      },
      {
        "name": "onSearchChange",
        "type": "undefined | (query: string) => void",
        "displayType": "undefined | (query: string) => void",
        "description": "Fired whenever the built-in search box query changes (typing or a programmatic `clear()`). Lets the facade surface a `kai-search` event."
      },
      {
        "name": "controllerRef",
        "type": "undefined | (controller: ConversationListController) => void",
        "displayType": "undefined | (controller: ConversationListController) => void",
        "description": "Receive the imperative controller once mounted. The `kai-conversations` facade uses it to focus / clear the internal search input."
      }
    ],
    "slots": [],
    "tokens": [
      "--color-sidebar",
      "--color-scrollbar-thumb",
      "--color-scrollbar-thumb-hover"
    ],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "DismissedStub",
    "group": "Components",
    "sourceFile": "src/components/dismissed-stub.tsx",
    "props": [
      {
        "name": "type",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": "The card type, used to derive the intent label (\"Proposed:\" etc.)."
      },
      {
        "name": "title",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "The card's title/heading; shown after the intent label. Falls back gracefully.",
        "default": "'this card'"
      },
      {
        "name": "reopenLabel",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "The Reopen button label. Default 'Reopen'.",
        "default": "'Reopen'"
      }
    ],
    "callbacks": [
      {
        "name": "onReopen",
        "type": "() => void",
        "displayType": "() => void",
        "description": "Re-open handler. The owning card emits `{ kind:'reopen', cardId }`."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "`DismissedStub` — the compact stub a card collapses to after it's been dismissed. Group-labelled for a11y; the Reopen affordance is a ghost button."
  },
  {
    "name": "DotsLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Embed",
    "group": "Components",
    "sourceFile": "src/components/embed.tsx",
    "props": [
      {
        "name": "cardId",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": "The card id correlating every emitted event."
      },
      {
        "name": "data",
        "type": "{ provider: \"youtube\" | \"vimeo\" | \"generic\"; id?: undefined | string; url?: undefined | string; title?: undefined | string; poster?: undefined | string; start?: undefined | number; aspectRatio?: undefined | \"16:9\" | \"4:3\" | \"1:1\" | \"9:16\" }",
        "displayType": "{ provider: \"youtube\" | \"vimeo\" | \"generic\"; id?: undefined | string; url?: undefined | string; title?: undefined | string; poster?: undefined | string; start?: undefined | number; aspectRatio?: undefined | \"16:9\" | \"4:3\" | \"1:1\" | \"9:16\" }",
        "optional": false,
        "scalar": false,
        "description": "The embed payload (data-down)."
      }
    ],
    "callbacks": [
      {
        "name": "onEmit",
        "type": "undefined | (event: CardEvent) => void",
        "displayType": "undefined | (event: CardEvent) => void",
        "description": "Emit a contract CardEvent up (host routes it)."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": "`Embed` — a privacy-first lazy media facade. Initial render is a poster + a play button: NO provider iframe, NO provider JS, NO cookies until the user opts in. On play it swaps in the provider `<iframe>` (youtube-nocookie / vimeo dnt / allowlisted generic). A persistent \"Open on {provider}\" affordance routes the contract `open` verb so a blocked embed is never a dead end. The only verbs it emits are lifecycle `ready`, `open`, and failure `error`."
  },
  {
    "name": "Empty",
    "group": "Components",
    "sourceFile": "src/components/empty.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "EmptyContent",
    "group": "Components",
    "sourceFile": "src/components/empty.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "EmptyDescription",
    "group": "Components",
    "sourceFile": "src/components/empty.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "EmptyHeader",
    "group": "Components",
    "sourceFile": "src/components/empty.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "EmptyMedia",
    "group": "Components",
    "sourceFile": "src/components/empty.tsx",
    "props": [
      {
        "name": "variant",
        "type": "undefined | null | \"default\" | \"icon\"",
        "displayType": "undefined | null | \"default\" | \"icon\"",
        "optional": true,
        "scalar": false,
        "description": "",
        "default": "'default'"
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "EmptyTitle",
    "group": "Components",
    "sourceFile": "src/components/empty.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "FeedbackBar",
    "group": "Components",
    "sourceFile": "src/components/feedback-bar.tsx",
    "props": [
      {
        "name": "title",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Prompt shown in the initial \"ask\" state."
      },
      {
        "name": "collectDetail",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "When set, a not-helpful vote opens an optional detail form before the thank-you confirmation. Off → a vote goes straight to thanks."
      },
      {
        "name": "categories",
        "type": "undefined | string[]",
        "displayType": "undefined | string[]",
        "optional": true,
        "scalar": false,
        "description": "Optional category chips offered in the detail form."
      },
      {
        "name": "detailTitle",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Heading for the detail form.",
        "default": "'What went wrong?'"
      },
      {
        "name": "detailPlaceholder",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Placeholder for the detail comment box.",
        "default": "'Tell us more (optional)'"
      },
      {
        "name": "submitLabel",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Submit button label in the detail form.",
        "default": "'Submit'"
      },
      {
        "name": "thanksMessage",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Confirmation copy shown after a vote/submit.",
        "default": "'Thanks for your feedback'"
      }
    ],
    "callbacks": [
      {
        "name": "icon",
        "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "description": "Optional leading icon shown before the title."
      },
      {
        "name": "onFeedback",
        "type": "undefined | (value: FeedbackValue) => void",
        "displayType": "undefined | (value: FeedbackValue) => void",
        "description": "Fired immediately when a rating button is clicked (the vote is recorded even if the user never fills in the detail form)."
      },
      {
        "name": "onSubmitDetail",
        "type": "undefined | (detail: FeedbackDetail) => void",
        "displayType": "undefined | (detail: FeedbackDetail) => void",
        "description": "Fired when the optional detail form is submitted."
      },
      {
        "name": "onClose",
        "type": "undefined | () => void",
        "displayType": "undefined | () => void",
        "description": "Fired when the bar is dismissed via the close (X) button."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "An inline thumbs up/down feedback bar that owns its own flow: it asks, then (optionally, on a not-helpful vote) collects a category + comment, then confirms with a thank-you — all in place, the way ChatGPT/Claude do it. The vote fires `onFeedback` immediately; the optional detail fires `onSubmitDetail`; `onClose` dismisses the bar."
  },
  {
    "name": "FileTree",
    "group": "Components",
    "sourceFile": "src/components/file-tree.tsx",
    "props": [
      {
        "name": "files",
        "type": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\"; additions?: undefined | number; deletions?: undefined | number; status?: undefined | \"added\" | \"modified\" | \"deleted\" | \"renamed\" | \"untracked\" }[]",
        "displayType": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\"; additions?: undefined | number; deletions?: undefined | number; status?: undefined | \"added\" | \"modified\" | \"deleted\" | \"renamed\" | \"untracked\" }[]",
        "optional": false,
        "scalar": false,
        "description": "Flat file list; folders are derived from `/`-delimited paths."
      },
      {
        "name": "activeFile",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Currently-selected file path (highlighted)."
      },
      {
        "name": "defaultExpanded",
        "type": "undefined | string[]",
        "displayType": "undefined | string[]",
        "optional": true,
        "scalar": false,
        "description": "Folder paths expanded by default. When omitted, all folders start open.",
        "default": "[]"
      },
      {
        "name": "summary",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Show a summary header above the tree: the changed-file count, the summed `+additions / -deletions`, and a Collapse-all/Expand-all toggle wired to the folder-expand state. Off by default (no header — unchanged behavior)."
      }
    ],
    "callbacks": [
      {
        "name": "onSelect",
        "type": "undefined | (path: string, file: FileTreeFile) => void",
        "displayType": "undefined | (path: string, file: FileTreeFile) => void",
        "description": "Called with a file's path when the user selects it."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": "`FileTree` — a collapsible, keyboard-navigable file explorer built from a flat list of `/`-delimited paths. ARIA `tree`/`treeitem`/`group`. Selecting a file calls `onSelect(path, file)`."
  },
  {
    "name": "FileUpload",
    "group": "Components",
    "sourceFile": "src/components/file-upload.tsx",
    "props": [
      {
        "name": "multiple",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "true"
      },
      {
        "name": "accept",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [
      {
        "name": "onFilesAdded",
        "type": "(files: File[]) => void",
        "displayType": "(files: File[]) => void",
        "description": ""
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "FileUploadContent",
    "group": "Components",
    "sourceFile": "src/components/file-upload.tsx",
    "props": [],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "FileUploadTrigger",
    "group": "Components",
    "sourceFile": "src/components/file-upload.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "Form",
    "group": "Components",
    "sourceFile": "src/components/form.tsx",
    "props": [
      {
        "name": "data",
        "type": "undefined | { type: \"object\"; title?: undefined | string; description?: undefined | string; required?: undefined | string[]; properties: Record<string, FormField>; x-kai-order?: undefined | string[]; x-kai-inlineMax?: undefined | number; x-kai-submitLabel?: undefined | string; x-kai-dismissible?: undefined | false | true; x-kai-actions?: undefined | { id: string; label: string; variant?: undefined | \"default\" | \"ghost\" | \"outline\" }[] }",
        "displayType": "undefined | { type: \"object\"; title?: undefined | string; description?: undefined | string; required?: undefined | string[]; properties: Record<string, FormField>; x-kai-order?: undefined | string[]; x-kai-inlineMax?: undefined | number; x-kai-submitLabel?: undefined | string; x-kai-dismissible?: undefined | false | true; x-kai-actions?: undefined | { id: string; label: string; variant?: undefined | \"default\" | \"ghost\" | \"outline\" }[] }",
        "optional": true,
        "scalar": false,
        "description": "The form definition (CardEnvelope.data)."
      },
      {
        "name": "cardId",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "The card id used to correlate every emitted CardEvent."
      },
      {
        "name": "heading",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "The envelope title rendered in the card chrome."
      },
      {
        "name": "hostElement",
        "type": "undefined | HTMLElement",
        "displayType": "undefined | HTMLElement",
        "optional": true,
        "scalar": false,
        "description": "The custom-element host node, for the bubbling `kai-card` fallback emit."
      },
      {
        "name": "resolution",
        "type": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string }",
        "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string }",
        "optional": true,
        "scalar": false,
        "description": "When set, render the chromed read-only view instead of the form inputs."
      },
      {
        "name": "values",
        "type": "undefined | Record<string, unknown>",
        "displayType": "undefined | Record<string, unknown>",
        "optional": true,
        "scalar": false,
        "description": "Controlled field values — when set, this wins over internal/uncontrolled state."
      },
      {
        "name": "defaultValues",
        "type": "undefined | Record<string, unknown>",
        "displayType": "undefined | Record<string, unknown>",
        "optional": true,
        "scalar": false,
        "description": "Initial values overlaying the schema defaults (uncontrolled seed)."
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Disable all fields + submit."
      }
    ],
    "callbacks": [
      {
        "name": "host",
        "type": "undefined | { context: () => import(\"/home/runner/work/ui/ui/packages/ui/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "displayType": "undefined | { context: () => import(\"/home/runner/work/ui/ui/packages/ui/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kai-card` CustomEvent off `hostElement`)."
      },
      {
        "name": "onValuesChange",
        "type": "undefined | (payload: { values: Record<string, unknown>; valid: boolean; }) => void",
        "displayType": "undefined | (payload: { values: Record<string, unknown>; valid: boolean; }) => void",
        "description": "Fires on input with the current coerced values + validity (distinct from submit)."
      },
      {
        "name": "controllerRef",
        "type": "undefined | (controller: FormController) => void",
        "displayType": "undefined | (controller: FormController) => void",
        "description": "Receive the imperative controller once mounted."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "`Form` — renders a JSON-Schema form definition into themed, accessible widgets inside `Card` chrome, validates input against that schema, and emits the collected, coerced, validated object up the Card contract as `submit`. Reads context/emits via a `CardProvider` when present, else the bubbling `kai-card` CustomEvent."
  },
  {
    "name": "Image",
    "group": "Components",
    "sourceFile": "src/components/image.tsx",
    "props": [
      {
        "name": "alt",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "base64",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "uint8Array",
        "type": "undefined | Uint8Array<ArrayBufferLike>",
        "displayType": "undefined | Uint8Array<ArrayBufferLike>",
        "optional": true,
        "scalar": false,
        "description": ""
      },
      {
        "name": "mediaType",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'image/png'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "LinkPreview",
    "group": "Components",
    "sourceFile": "src/components/link-preview.tsx",
    "props": [
      {
        "name": "cardId",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": "The card id correlating every emitted event."
      },
      {
        "name": "data",
        "type": "{ url: string; title?: undefined | string; description?: undefined | string; image?: undefined | string; imageAlt?: undefined | string; favicon?: undefined | string; domain?: undefined | string; siteName?: undefined | string }",
        "displayType": "{ url: string; title?: undefined | string; description?: undefined | string; image?: undefined | string; imageAlt?: undefined | string; favicon?: undefined | string; domain?: undefined | string; siteName?: undefined | string }",
        "optional": false,
        "scalar": false,
        "description": "The link payload (data-down)."
      }
    ],
    "callbacks": [
      {
        "name": "onEmit",
        "type": "undefined | (event: CardEvent) => void",
        "displayType": "undefined | (event: CardEvent) => void",
        "description": "Emit a contract CardEvent up (host routes it)."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "`LinkPreview` — a pure, themed, accessible rich link / OG preview. Renders from the supplied metadata; it never fetches the network itself. When the payload is a bare `{ url }` and an app has registered a `configureLinkPreview` fetcher, it shows a skeleton, calls the hook, merges the result, and renders. Activating the card (click / Enter / Space) emits the contract `open` verb (`target:'tab'`); the host policy performs the navigation so it can veto/redirect."
  },
  {
    "name": "Loader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "variant",
        "type": "undefined | \"circular\" | \"classic\" | \"pulse\" | \"pulse-dot\" | \"dots\" | \"typing\" | \"wave\" | \"bars\" | \"terminal\" | \"text-blink\" | \"text-shimmer\" | \"loading-dots\"",
        "displayType": "LoaderVariant | undefined",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "text",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Markdown",
    "group": "Components",
    "sourceFile": "src/components/markdown.tsx",
    "props": [
      {
        "name": "content",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "id",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "codeTheme",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "part",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Optional `::part` name(s) to expose on the rendered root. Lets callers (e.g. the message bubble) surface a styleable part through the shadow."
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Message",
    "group": "Components",
    "sourceFile": "src/components/message.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "MessageAction",
    "group": "Components",
    "sourceFile": "src/components/message.tsx",
    "props": [
      {
        "name": "tooltip",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "side",
        "type": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\"",
        "displayType": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\"",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "MessageActions",
    "group": "Components",
    "sourceFile": "src/components/message.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "MessageAvatar",
    "group": "Components",
    "sourceFile": "src/components/message.tsx",
    "props": [
      {
        "name": "src",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "alt",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "fallback",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "MessageContent",
    "group": "Components",
    "sourceFile": "src/components/message.tsx",
    "props": [
      {
        "name": "markdown",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "part",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "`::part` name(s) exposed on the content node. The body passes `\"bubble content\"` so consumers can target either the rounded bubble or the text region from outside the shadow boundary."
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "MessageCopyButton",
    "group": "Components",
    "sourceFile": "src/components/message.tsx",
    "props": [
      {
        "name": "content",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "size",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "14"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "MessageSkills",
    "group": "Components",
    "sourceFile": "src/components/message-skills.tsx",
    "props": [
      {
        "name": "skills",
        "type": "{ id: string; name: string }[]",
        "displayType": "{ id: string; name: string }[]",
        "optional": false,
        "scalar": false,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "Displays skill badges above a message to indicate which skills were active when the message was generated."
  },
  {
    "name": "ModelSwitcher",
    "group": "Components",
    "sourceFile": "src/components/model-switcher.tsx",
    "props": [
      {
        "name": "models",
        "type": "{ id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]",
        "displayType": "{ id: string; name: string; provider?: undefined | string; description?: undefined | string; group?: undefined | string }[]",
        "optional": false,
        "scalar": false,
        "description": ""
      },
      {
        "name": "currentModelId",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "defaultOpen",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Initial open state of the dropdown (uncontrolled seed)."
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Disable the trigger — click/keyboard no longer open the dropdown."
      }
    ],
    "callbacks": [
      {
        "name": "onModelChange",
        "type": "(modelId: string) => void",
        "displayType": "(modelId: string) => void",
        "description": ""
      },
      {
        "name": "controllerRef",
        "type": "undefined | (api: DropdownController) => void",
        "displayType": "undefined | (api: DropdownController) => void",
        "description": "Receive the dropdown's open controller (forwarded from the inner Dropdown)."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "PromptInput",
    "group": "Components",
    "sourceFile": "src/components/prompt-input.tsx",
    "props": [
      {
        "name": "isLoading",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "false"
      },
      {
        "name": "value",
        "type": "undefined | string | ({ type: \"text\"; text: string } | { type: \"entity\"; entity: { kind: string; id: string; label: string; icon?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> } })[]",
        "displayType": "undefined | string | ({ type: \"text\"; text: string } | { type: \"entity\"; entity: { kind: string; id: string; label: string; icon?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> } })[]",
        "optional": true,
        "scalar": false,
        "description": "String = controlled text; ComposerDoc = a seed that pre-populates pills.",
        "default": "''"
      },
      {
        "name": "maxHeight",
        "type": "undefined | string | number",
        "displayType": "undefined | string | number",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "240"
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [
      {
        "name": "onValueChange",
        "type": "undefined | (value: string) => void",
        "displayType": "undefined | (value: string) => void",
        "description": ""
      },
      {
        "name": "onSubmit",
        "type": "undefined | () => void",
        "displayType": "undefined | () => void",
        "description": ""
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "PromptInputAction",
    "group": "Components",
    "sourceFile": "src/components/prompt-input.tsx",
    "props": [
      {
        "name": "tooltip",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "side",
        "type": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\"",
        "displayType": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\"",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "PromptInputActions",
    "group": "Components",
    "sourceFile": "src/components/prompt-input.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "PromptInputTextarea",
    "group": "Components",
    "sourceFile": "src/components/prompt-input.tsx",
    "props": [
      {
        "name": "disableAutosize",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "triggers",
        "type": "undefined | { char: string; kind: string; items?: undefined | { id: string; label: string; icon?: undefined | string; description?: undefined | string; group?: undefined | string; kind?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> }[] }[]",
        "displayType": "undefined | { char: string; kind: string; items?: undefined | { id: string; label: string; icon?: undefined | string; description?: undefined | string; group?: undefined | string; kind?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> }[] }[]",
        "optional": true,
        "scalar": false,
        "description": "Rich entity triggers (`/`, `@`) forwarded to the composer."
      },
      {
        "name": "kindIcons",
        "type": "undefined | Record<string, string>",
        "displayType": "undefined | Record<string, string>",
        "optional": true,
        "scalar": false,
        "description": "Default icon per entity kind (kind → image src), forwarded to the composer."
      }
    ],
    "callbacks": [
      {
        "name": "onComposerChange",
        "type": "undefined | (change: ComposerChange) => void",
        "displayType": "undefined | (change: ComposerChange) => void",
        "description": "Structured change (doc + entities) from the composer, on every edit."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "PromptSuggestion",
    "group": "Components",
    "sourceFile": "src/components/prompt-suggestion.tsx",
    "props": [
      {
        "name": "variant",
        "type": "undefined | \"default\" | \"ghost\" | \"outline\"",
        "displayType": "undefined | \"default\" | \"ghost\" | \"outline\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'outline'"
      },
      {
        "name": "size",
        "type": "undefined | \"md\" | \"lg\"",
        "displayType": "undefined | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "Row height for the `list` layout: `'md'` (default) or `'lg'` for taller rows (more vertical padding). Chips/block/highlight are unaffected."
      },
      {
        "name": "icon",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Optional leading icon (named icon, image URL/data-URI, or text)."
      },
      {
        "name": "highlight",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "block",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Render as a full-width, left-aligned list row (the \"suggested questions\" idiom) instead of a rounded pill. Wraps long text. Ignored in highlight mode, which is always a list row."
      },
      {
        "name": "list",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Render as a full-width \"Ideas for you\" list row: a leading icon, a left-aligned label, and a hover background. Like `block`, but keeps the leading icon. Ignored in highlight mode."
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "PulseDotLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "PulseLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Reasoning",
    "group": "Components",
    "sourceFile": "src/components/reasoning.tsx",
    "props": [
      {
        "name": "open",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "defaultOpen",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Initial open state (uncontrolled seed).",
        "default": "false"
      },
      {
        "name": "isStreaming",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Gate the trigger — programmatic control via the controller still works."
      }
    ],
    "callbacks": [
      {
        "name": "onOpenChange",
        "type": "undefined | (open: boolean) => void",
        "displayType": "undefined | (open: boolean) => void",
        "description": ""
      },
      {
        "name": "controllerRef",
        "type": "undefined | (api: ReasoningController) => void",
        "displayType": "undefined | (api: ReasoningController) => void",
        "description": "Receive the open controller (open accessor + setOpen) once mounted."
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ReasoningContent",
    "group": "Components",
    "sourceFile": "src/components/reasoning.tsx",
    "props": [
      {
        "name": "markdown",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "contentClass",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "ReasoningTrigger",
    "group": "Components",
    "sourceFile": "src/components/reasoning.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "ResponseCompare",
    "group": "Components",
    "sourceFile": "src/components/response-compare.tsx",
    "props": [
      {
        "name": "compareId",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "Stable id correlating every emitted event."
      },
      {
        "name": "selection",
        "type": "undefined | { chosenId: string; rejectedIds: string[]; at?: undefined | number }",
        "displayType": "undefined | { chosenId: string; rejectedIds: string[]; at?: undefined | number }",
        "optional": true,
        "scalar": false,
        "description": "Re-hydrate / control the selection. Renders the collapsed winner. Set as a JS property: `el.selection = { chosenId, rejectedIds }`."
      },
      {
        "name": "layout",
        "type": "undefined | \"auto\" | \"columns\" | \"tabs\"",
        "displayType": "undefined | \"auto\" | \"columns\" | \"tabs\"",
        "optional": true,
        "scalar": true,
        "description": "Layout. `'columns'` = side-by-side; `'tabs'` = one candidate at a time with pills to switch; `'auto'` (default) uses a CONTAINER query — columns when the component is ≥640px wide, tabs when narrower (e.g. on a phone)."
      }
    ],
    "callbacks": [
      {
        "name": "data",
        "type": "undefined | { prompt?: undefined | string; candidates: { 0: { id: string; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; label?: undefined | string; model?: undefined | string; streaming?: undefined | false | true }; 1: { id: string; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; label?: undefined | string; model?: undefined | string; streaming?: undefined | false | true }; length: 2; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => CompareCandidate | undefined; push: (...items: CompareCandidate[]) => number; concat: { (...items: ConcatArray<CompareCandidate>[]): CompareCandidate[]; (...items: (CompareCandidate | ConcatArray<CompareCandidate>)[]): CompareCandidate[]; }; join: (separator?: string) => string; reverse: () => CompareCandidate[]; shift: () => CompareCandidate | undefined; slice: (start?: number, end?: number) => CompareCandidate[]; sort: (compareFn?: ((a: CompareCandidate, b: CompareCandidate) => number) | undefined) => ComparePair; splice: { (start: number, deleteCount?: number): CompareCandidate[]; (start: number, deleteCount: number, ...items: CompareCandidate[]): CompareCandidate[]; }; unshift: (...items: CompareCandidate[]) => number; indexOf: (searchElement: CompareCandidate, fromIndex?: number) => number; lastIndexOf: (searchElement: CompareCandidate, fromIndex?: number) => number; every: { <S extends CompareCandidate>(predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: CompareCandidate, index: number, array: CompareCandidate[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: CompareCandidate, index: number, array: CompareCandidate[]) => U, thisArg?: any) => U[]; filter: { <S extends CompareCandidate>(predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => value is S, thisArg?: any): S[]; (predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => unknown, thisArg?: any): CompareCandidate[]; }; reduce: { (callbackfn: (previousValue: CompareCandidate, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => CompareCandidate): CompareCandidate; (callbackfn: (previousValue: CompareCandidate, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => CompareCandidate, initialValue: CompareCandidate): CompareCandidate; <U>(callbackfn: (previousValue: U, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: CompareCandidate, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => CompareCandidate): CompareCandidate; (callbackfn: (previousValue: CompareCandidate, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => CompareCandidate, initialValue: CompareCandidate): CompareCandidate; <U>(callbackfn: (previousValue: U, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => U, initialValue: U): U; }; find: { <S extends CompareCandidate>(predicate: (value: CompareCandidate, index: number, obj: CompareCandidate[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: CompareCandidate, index: number, obj: CompareCandidate[]) => unknown, thisArg?: any): CompareCandidate | undefined; }; findIndex: (predicate: (value: CompareCandidate, index: number, obj: CompareCandidate[]) => unknown, thisArg?: any) => number; fill: (value: CompareCandidate, start?: number, end?: number) => ComparePair; copyWithin: (target: number, start: number, end?: number) => ComparePair; entries: () => ArrayIterator<[number, CompareCandidate]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<CompareCandidate>; includes: (searchElement: CompareCandidate, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: CompareCandidate, index: number, array: CompareCandidate[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => CompareCandidate | undefined; findLast: { <S extends CompareCandidate>(predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => unknown, thisArg?: any): CompareCandidate | undefined; }; findLastIndex: (predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => unknown, thisArg?: any) => number; toReversed: () => CompareCandidate[]; toSorted: (compareFn?: ((a: CompareCandidate, b: CompareCandidate) => number) | undefined) => CompareCandidate[]; toSpliced: { (start: number, deleteCount: number, ...items: CompareCandidate[]): CompareCandidate[]; (start: number, deleteCount?: number): CompareCandidate[]; }; with: (index: number, value: CompareCandidate) => CompareCandidate[]; __@iterator@2613: () => ArrayIterator<CompareCandidate>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } }; collapse?: undefined | \"winner\" | \"none\" }",
        "displayType": "undefined | { prompt?: undefined | string; candidates: { 0: { id: string; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; label?: undefined | string; model?: undefined | string; streaming?: undefined | false | true }; 1: { id: string; content: string; reasoning?: undefined | { text: string; label?: undefined | string }; tools?: undefined | { type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }[]; attachments?: undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]; label?: undefined | string; model?: undefined | string; streaming?: undefined | false | true }; length: 2; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => CompareCandidate | undefined; push: (...items: CompareCandidate[]) => number; concat: { (...items: ConcatArray<CompareCandidate>[]): CompareCandidate[]; (...items: (CompareCandidate | ConcatArray<CompareCandidate>)[]): CompareCandidate[]; }; join: (separator?: string) => string; reverse: () => CompareCandidate[]; shift: () => CompareCandidate | undefined; slice: (start?: number, end?: number) => CompareCandidate[]; sort: (compareFn?: ((a: CompareCandidate, b: CompareCandidate) => number) | undefined) => ComparePair; splice: { (start: number, deleteCount?: number): CompareCandidate[]; (start: number, deleteCount: number, ...items: CompareCandidate[]): CompareCandidate[]; }; unshift: (...items: CompareCandidate[]) => number; indexOf: (searchElement: CompareCandidate, fromIndex?: number) => number; lastIndexOf: (searchElement: CompareCandidate, fromIndex?: number) => number; every: { <S extends CompareCandidate>(predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: CompareCandidate, index: number, array: CompareCandidate[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: CompareCandidate, index: number, array: CompareCandidate[]) => U, thisArg?: any) => U[]; filter: { <S extends CompareCandidate>(predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => value is S, thisArg?: any): S[]; (predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => unknown, thisArg?: any): CompareCandidate[]; }; reduce: { (callbackfn: (previousValue: CompareCandidate, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => CompareCandidate): CompareCandidate; (callbackfn: (previousValue: CompareCandidate, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => CompareCandidate, initialValue: CompareCandidate): CompareCandidate; <U>(callbackfn: (previousValue: U, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: CompareCandidate, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => CompareCandidate): CompareCandidate; (callbackfn: (previousValue: CompareCandidate, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => CompareCandidate, initialValue: CompareCandidate): CompareCandidate; <U>(callbackfn: (previousValue: U, currentValue: CompareCandidate, currentIndex: number, array: CompareCandidate[]) => U, initialValue: U): U; }; find: { <S extends CompareCandidate>(predicate: (value: CompareCandidate, index: number, obj: CompareCandidate[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: CompareCandidate, index: number, obj: CompareCandidate[]) => unknown, thisArg?: any): CompareCandidate | undefined; }; findIndex: (predicate: (value: CompareCandidate, index: number, obj: CompareCandidate[]) => unknown, thisArg?: any) => number; fill: (value: CompareCandidate, start?: number, end?: number) => ComparePair; copyWithin: (target: number, start: number, end?: number) => ComparePair; entries: () => ArrayIterator<[number, CompareCandidate]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<CompareCandidate>; includes: (searchElement: CompareCandidate, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: CompareCandidate, index: number, array: CompareCandidate[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => CompareCandidate | undefined; findLast: { <S extends CompareCandidate>(predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => unknown, thisArg?: any): CompareCandidate | undefined; }; findLastIndex: (predicate: (value: CompareCandidate, index: number, array: CompareCandidate[]) => unknown, thisArg?: any) => number; toReversed: () => CompareCandidate[]; toSorted: (compareFn?: ((a: CompareCandidate, b: CompareCandidate) => number) | undefined) => CompareCandidate[]; toSpliced: { (start: number, deleteCount: number, ...items: CompareCandidate[]): CompareCandidate[]; (start: number, deleteCount?: number): CompareCandidate[]; }; with: (index: number, value: CompareCandidate) => CompareCandidate[]; __@iterator@2613: () => ArrayIterator<CompareCandidate>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } }; collapse?: undefined | \"winner\" | \"none\" }",
        "description": "The compare definition (prompt + the two candidates)."
      },
      {
        "name": "controllerRef",
        "type": "undefined | (controller: ResponseCompareController) => void",
        "displayType": "undefined | (controller: ResponseCompareController) => void",
        "description": "Receive the imperative controller once mounted. The `<kai-compare>` facade forwards these as element methods (select/focus)."
      },
      {
        "name": "onSelect",
        "type": "undefined | (sel: CompareSelection) => void",
        "displayType": "undefined | (sel: CompareSelection) => void",
        "description": "Fired when the user commits a pick."
      },
      {
        "name": "onReady",
        "type": "undefined | () => void",
        "displayType": "undefined | () => void",
        "description": "Fired once both candidates have settled (stopped streaming) and a valid definition is shown."
      },
      {
        "name": "onError",
        "type": "undefined | (message: string) => void",
        "displayType": "undefined | (message: string) => void",
        "description": "Fired for an unusable definition (inline error state)."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "`ResponseCompare` — a dual-response comparison. Two assistant candidates for the same prompt render side-by-side (or as tabs), each via `MessageBody` so a candidate reads exactly like an assistant message (reasoning + tools + attachments + markdown). The pick is a COMMIT, not a Submit: clicking \"Pick this\" (or Enter on the focused column) computes `{ chosenId, rejectedIds:[other], at }`, optimistically collapses to the chosen candidate's body, and calls `onSelect` for the consumer to send a `(prompt, chosen, rejected)` preference pair. Single-shot. While EITHER candidate is `streaming`, both pick controls are disabled and the streaming column shows a `TextShimmer`; `onReady` fires once both settle. The two columns are a WAI-ARIA radiogroup with roving tabindex (Arrow keys move A↔B, Enter/Space picks). Emits `onError` for a malformed definition."
  },
  {
    "name": "ResponseStream",
    "group": "Components",
    "sourceFile": "src/components/response-stream.tsx",
    "props": [
      {
        "name": "textStream",
        "type": "string | AsyncIterable<string>",
        "displayType": "string | AsyncIterable<string>",
        "optional": false,
        "scalar": false,
        "description": ""
      },
      {
        "name": "mode",
        "type": "undefined | \"typewriter\" | \"fade\"",
        "displayType": "undefined | \"typewriter\" | \"fade\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'typewriter'"
      },
      {
        "name": "speed",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "20"
      },
      {
        "name": "as",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "fadeDuration",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "segmentDelay",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "characterChunkSize",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [
      {
        "name": "onComplete",
        "type": "undefined | () => void",
        "displayType": "undefined | () => void",
        "description": ""
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ScrollButton",
    "group": "Components",
    "sourceFile": "src/components/scroll-button.tsx",
    "props": [
      {
        "name": "variant",
        "type": "undefined | \"default\" | \"ghost\" | \"outline\"",
        "displayType": "undefined | \"default\" | \"ghost\" | \"outline\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'outline'"
      },
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'sm'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Source",
    "group": "Components",
    "sourceFile": "src/components/source.tsx",
    "props": [
      {
        "name": "href",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "SourceContent",
    "group": "Components",
    "sourceFile": "src/components/source.tsx",
    "props": [
      {
        "name": "title",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "description",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "SourceList",
    "group": "Components",
    "sourceFile": "src/components/source.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "SourceTrigger",
    "group": "Components",
    "sourceFile": "src/components/source.tsx",
    "props": [
      {
        "name": "label",
        "type": "undefined | string | number",
        "displayType": "undefined | string | number",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "showFavicon",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "TasksCard",
    "group": "Components",
    "sourceFile": "src/components/tasks-card.tsx",
    "props": [
      {
        "name": "data",
        "type": "undefined | { mode?: undefined | \"select\" | \"progress\"; heading?: undefined | string; tasks: { id: string; label: string; description?: undefined | string; checked?: undefined | false | true; disabled?: undefined | false | true }[]; selectAll?: undefined | false | true; confirmLabel?: undefined | string; allowEmpty?: undefined | false | true; min?: undefined | number; max?: undefined | number; dismissible?: undefined | false | true }",
        "displayType": "undefined | { mode?: undefined | \"select\" | \"progress\"; heading?: undefined | string; tasks: { id: string; label: string; description?: undefined | string; checked?: undefined | false | true; disabled?: undefined | false | true }[]; selectAll?: undefined | false | true; confirmLabel?: undefined | string; allowEmpty?: undefined | false | true; min?: undefined | number; max?: undefined | number; dismissible?: undefined | false | true }",
        "optional": true,
        "scalar": false,
        "description": "The tasks definition (CardEnvelope.data)."
      },
      {
        "name": "cardId",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "The card id used to correlate every emitted CardEvent."
      },
      {
        "name": "heading",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "The envelope title rendered in the card chrome."
      },
      {
        "name": "hostElement",
        "type": "undefined | HTMLElement",
        "displayType": "undefined | HTMLElement",
        "optional": true,
        "scalar": false,
        "description": "The custom-element host node, for the bubbling `kai-card` fallback emit."
      },
      {
        "name": "resolution",
        "type": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string }",
        "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string }",
        "optional": true,
        "scalar": false,
        "description": "When set, render the chromed read-only summary instead of the interactive controls."
      },
      {
        "name": "value",
        "type": "undefined | string[]",
        "displayType": "undefined | string[]",
        "optional": true,
        "scalar": false,
        "description": "Controlled selection (task ids) — when set, this wins over internal state."
      },
      {
        "name": "defaultValue",
        "type": "undefined | string[]",
        "displayType": "undefined | string[]",
        "optional": true,
        "scalar": false,
        "description": "Uncontrolled initial selection (task ids), overlaying per-task `checked`."
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Freeze the whole list + Confirm."
      },
      {
        "name": "readonly",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Display-only: rows can't be toggled and show the default cursor (no pointer, no hover background, no focus ring). Keeps the visual content as-is — this only drops the interactive affordances + a11y exposure."
      }
    ],
    "callbacks": [
      {
        "name": "host",
        "type": "undefined | { context: () => import(\"/home/runner/work/ui/ui/packages/ui/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "displayType": "undefined | { context: () => import(\"/home/runner/work/ui/ui/packages/ui/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kai-card` CustomEvent off `hostElement`)."
      },
      {
        "name": "onValueChange",
        "type": "undefined | (payload: { value: string[]; }) => void",
        "displayType": "undefined | (payload: { value: string[]; }) => void",
        "description": "Fires on every selection change with the selected ids (distinct from submit)."
      },
      {
        "name": "controllerRef",
        "type": "undefined | (controller: TasksCardController) => void",
        "displayType": "undefined | (controller: TasksCardController) => void",
        "description": "Receive the imperative controller once mounted."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "`TasksCard` — a selectable task/plan list (checkbox rows + optional select-all + a confirm button) inside `Card` chrome. Row toggling and select-all are local UI state; only the final confirm emits the Card contract's `submit` verb (`{ kind:'submit', cardId, data:{ selected } }`) with the checked ids in input order. Emits `ready` on mount and `error` for an unusable definition."
  },
  {
    "name": "TerminalLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "TextBlinkLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "text",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'Thinking'"
      },
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "TextDotsLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "text",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'Thinking'"
      },
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "TextShimmer",
    "group": "Components",
    "sourceFile": "src/components/text-shimmer.tsx",
    "props": [
      {
        "name": "as",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'span'"
      },
      {
        "name": "duration",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "4"
      },
      {
        "name": "spread",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "20"
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "TextShimmerLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "text",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'Thinking'"
      },
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "ThinkingBar",
    "group": "Components",
    "sourceFile": "src/components/thinking-bar.tsx",
    "props": [
      {
        "name": "text",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'Thinking'"
      },
      {
        "name": "stopLabel",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'Answer now'"
      }
    ],
    "callbacks": [
      {
        "name": "onStop",
        "type": "undefined | () => void",
        "displayType": "undefined | () => void",
        "description": ""
      },
      {
        "name": "onClick",
        "type": "undefined | () => void",
        "displayType": "undefined | () => void",
        "description": ""
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Toast",
    "group": "Components",
    "sourceFile": "src/components/toast.tsx",
    "props": [
      {
        "name": "item",
        "type": "{ id: string; message: string; variant?: undefined | \"neutral\" | \"success\" | \"warning\" | \"error\" | \"info\"; appearance?: undefined | \"pill\" | \"card\"; inverse?: undefined | false | true; description?: undefined | string; action?: undefined | { label: string; onAction: () => void | false }; duration?: undefined | number; dismissible?: undefined | false | true; target?: undefined | HTMLElement }",
        "displayType": "{ id: string; message: string; variant?: undefined | \"neutral\" | \"success\" | \"warning\" | \"error\" | \"info\"; appearance?: undefined | \"pill\" | \"card\"; inverse?: undefined | false | true; description?: undefined | string; action?: undefined | { label: string; onAction: () => void | false }; duration?: undefined | number; dismissible?: undefined | false | true; target?: undefined | HTMLElement }",
        "optional": false,
        "scalar": false,
        "description": ""
      },
      {
        "name": "paused",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Hold the auto-dismiss timer (the region sets this true while the whole stack is hovered/expanded, so peers don't dismiss out from under the cursor)."
      },
      {
        "name": "appearance",
        "type": "undefined | \"pill\" | \"card\"",
        "displayType": "undefined | \"pill\" | \"card\"",
        "optional": true,
        "scalar": true,
        "description": "Region-level default appearance, used when the item doesn't set its own.",
        "default": "'pill'"
      },
      {
        "name": "inverse",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Region-level default inverse, used when the item doesn't set its own.",
        "default": "false"
      }
    ],
    "callbacks": [
      {
        "name": "onDismiss",
        "type": "(reason: ToastDismissReason) => void",
        "displayType": "(reason: ToastDismissReason) => void",
        "description": ""
      },
      {
        "name": "onAction",
        "type": "undefined | (label: string) => void",
        "displayType": "undefined | (label: string) => void",
        "description": ""
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "A single toast pill. Auto-dismisses after its (action-floored) duration, holds the timer while hovered (this pill) OR while `paused` (the whole stack is hovered), and animates in/out via `createPresence`. Pure + prop-driven — the parent `ToastRegion` owns the list + queue."
  },
  {
    "name": "ToastRegion",
    "group": "Components",
    "sourceFile": "src/components/toast.tsx",
    "props": [
      {
        "name": "toasts",
        "type": "{ id: string; message: string; variant?: undefined | \"neutral\" | \"success\" | \"warning\" | \"error\" | \"info\"; appearance?: undefined | \"pill\" | \"card\"; inverse?: undefined | false | true; description?: undefined | string; action?: undefined | { label: string; onAction: () => void | false }; duration?: undefined | number; dismissible?: undefined | false | true; target?: undefined | HTMLElement }[]",
        "displayType": "{ id: string; message: string; variant?: undefined | \"neutral\" | \"success\" | \"warning\" | \"error\" | \"info\"; appearance?: undefined | \"pill\" | \"card\"; inverse?: undefined | false | true; description?: undefined | string; action?: undefined | { label: string; onAction: () => void | false }; duration?: undefined | number; dismissible?: undefined | false | true; target?: undefined | HTMLElement }[]",
        "optional": false,
        "scalar": false,
        "description": "The toasts to render. Newest is shown on top. Set as a JS property on the element; mutate by passing a new array reference.",
        "default": "[]"
      },
      {
        "name": "position",
        "type": "undefined | \"top-center\" | \"top-right\" | \"top-left\" | \"bottom-center\" | \"bottom-right\" | \"bottom-left\"",
        "displayType": "undefined | \"top-center\" | \"top-right\" | \"top-left\" | \"bottom-center\" | \"bottom-right\" | \"bottom-left\"",
        "optional": true,
        "scalar": true,
        "description": "Where the stack anchors. Defaults to `'top-center'`.",
        "default": "'top-center'"
      },
      {
        "name": "max",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "Max simultaneously-visible toasts; the rest queue and promote as slots free up. Defaults to `3`.",
        "default": "3"
      },
      {
        "name": "stack",
        "type": "undefined | \"expanded\" | \"collapsed\"",
        "displayType": "undefined | \"expanded\" | \"collapsed\"",
        "optional": true,
        "scalar": true,
        "description": "Stacking: 'expanded' (default, full column) | 'collapsed' (Sonner-style pile that expands on hover/focus). Attribute: stack.",
        "default": "'expanded'"
      },
      {
        "name": "appearance",
        "type": "undefined | \"pill\" | \"card\"",
        "displayType": "undefined | \"pill\" | \"card\"",
        "optional": true,
        "scalar": true,
        "description": "Region-level default appearance for toasts that don't set their own. A per-toast `appearance` always wins. Defaults to `'pill'`."
      },
      {
        "name": "inverse",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Region-level default inverse treatment for toasts that don't set their own. A per-toast `inverse` always wins. Defaults to `false`."
      },
      {
        "name": "target",
        "type": "undefined | HTMLElement",
        "displayType": "undefined | HTMLElement",
        "optional": true,
        "scalar": false,
        "description": "When set, this region renders only the toasts scoped to that element and anchors over its bounds (top-center), following it on scroll/resize. Unset = the global, viewport-anchored region."
      }
    ],
    "callbacks": [
      {
        "name": "onDismiss",
        "type": "undefined | (id: string, reason: ToastDismissReason) => void",
        "displayType": "undefined | (id: string, reason: ToastDismissReason) => void",
        "description": "Fired when a toast leaves, with the reason."
      },
      {
        "name": "onAction",
        "type": "undefined | (id: string, label: string) => void",
        "displayType": "undefined | (id: string, label: string) => void",
        "description": "Fired when a toast's action button is pressed."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "Renders a stack of toasts at a viewport edge. Caps the visible count at `max` (newest on top); overflow waits in a queue and is promoted as visible toasts leave. `aria-live=polite` / `role=region` so screen readers announce new toasts without stealing focus."
  },
  {
    "name": "Tool",
    "group": "Components",
    "sourceFile": "src/components/tool.tsx",
    "props": [
      {
        "name": "toolPart",
        "type": "{ type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }",
        "displayType": "{ type: string; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string }",
        "optional": false,
        "scalar": false,
        "description": ""
      },
      {
        "name": "defaultOpen",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "false"
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Gate the disclosure trigger (programmatic control still works)."
      }
    ],
    "callbacks": [
      {
        "name": "controllerRef",
        "type": "undefined | (api: CollapsibleController) => void",
        "displayType": "undefined | (api: CollapsibleController) => void",
        "description": "Receive the open controller once mounted (forwarded from the Collapsible), so a parent (the kai-tool facade) can drive/observe open state."
      }
    ],
    "slots": [],
    "tokens": [
      "--color-tool-blue",
      "--color-tool-amber",
      "--color-tool-green",
      "--color-tool-red"
    ],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "TypingLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "VoiceInput",
    "group": "Components",
    "sourceFile": "src/components/voice-input.tsx",
    "props": [
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "hasTranscribe",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Host supplied a `transcribe` callback. When true the MediaRecorder → onTranscribe path runs. When false the component prefers native SpeechRecognition (capable browsers), falling back to record-only."
      },
      {
        "name": "lang",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "BCP-47 language tag for native recognition (e.g. `en-US`)."
      },
      {
        "name": "interim",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Emit live partial transcripts via `onInterim` (native path only)."
      }
    ],
    "callbacks": [
      {
        "name": "onTranscribe",
        "type": "(audio: Blob) => Promise<string>",
        "displayType": "(audio: Blob) => Promise<string>",
        "description": ""
      },
      {
        "name": "onTranscription",
        "type": "(text: string) => void",
        "displayType": "(text: string) => void",
        "description": ""
      },
      {
        "name": "onInterim",
        "type": "undefined | (text: string) => void",
        "displayType": "undefined | (text: string) => void",
        "description": "Live partial transcript from native recognition (when `interim`)."
      },
      {
        "name": "onRecordingChange",
        "type": "undefined | (recording: boolean) => void",
        "displayType": "undefined | (recording: boolean) => void",
        "description": "Fires whenever recording starts or stops. Guarded against the spurious initial `false` — only true transitions emit (the facade maps this to kai-recording-change)."
      },
      {
        "name": "controllerRef",
        "type": "undefined | (controller: VoiceInputController) => void",
        "displayType": "undefined | (controller: VoiceInputController) => void",
        "description": "Receive the imperative controller once mounted. The `<kai-voice-input>` facade forwards these as element methods (start/stop)."
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "WaveLoader",
    "group": "Components",
    "sourceFile": "src/components/loader.tsx",
    "props": [
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Avatar",
    "group": "UI",
    "sourceFile": "src/ui/avatar.tsx",
    "props": [
      {
        "name": "src",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "alt",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "fallback",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "size",
        "type": "undefined | \"sm\" | \"md\" | \"lg\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'md'"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "Badge",
    "group": "UI",
    "sourceFile": "src/ui/badge.tsx",
    "props": [
      {
        "name": "variant",
        "type": "undefined | null | \"default\" | \"count\" | \"citation\"",
        "displayType": "undefined | null | \"default\" | \"count\" | \"citation\"",
        "optional": true,
        "scalar": false,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "Button",
    "group": "UI",
    "sourceFile": "src/ui/button.tsx",
    "props": [
      {
        "name": "full",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Stretch to the full width of the container (a block button)."
      },
      {
        "name": "variant",
        "type": "undefined | null | \"default\" | \"ghost\" | \"outline\" | \"destructive\" | \"subtle\"",
        "displayType": "undefined | null | \"default\" | \"ghost\" | \"outline\" | \"destructive\" | \"subtle\"",
        "optional": true,
        "scalar": false,
        "description": ""
      },
      {
        "name": "size",
        "type": "undefined | null | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
        "displayType": "undefined | null | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
        "optional": true,
        "scalar": false,
        "description": ""
      },
      {
        "name": "align",
        "type": "undefined | null | \"start\" | \"center\" | \"end\"",
        "displayType": "undefined | null | \"start\" | \"center\" | \"end\"",
        "optional": true,
        "scalar": false,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "Collapsible",
    "group": "UI",
    "sourceFile": "src/ui/collapsible.tsx",
    "props": [
      {
        "name": "open",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "defaultOpen",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "false"
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "When true, the trigger no longer toggles (programmatic show/hide still work via the controller; this only gates the user-facing trigger)."
      }
    ],
    "callbacks": [
      {
        "name": "onOpenChange",
        "type": "undefined | (open: boolean) => void",
        "displayType": "undefined | (open: boolean) => void",
        "description": ""
      },
      {
        "name": "controllerRef",
        "type": "undefined | (api: CollapsibleController) => void",
        "displayType": "undefined | (api: CollapsibleController) => void",
        "description": "Receive the open controller (open accessor + setOpen) once mounted. Only meaningful in uncontrolled mode (no `open` prop)."
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "CollapsibleContent",
    "group": "UI",
    "sourceFile": "src/ui/collapsible.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "CollapsibleTrigger",
    "group": "UI",
    "sourceFile": "src/ui/collapsible.tsx",
    "props": [],
    "callbacks": [
      {
        "name": "as",
        "type": "undefined | (props: Record<string, any>) => JSX.Element",
        "displayType": "undefined | (props: Record<string, any>) => JSX.Element",
        "description": ""
      },
      {
        "name": "onClick",
        "type": "undefined | JSX.EventHandler<HTMLButtonElement, MouseEvent> | { 0: (data: any, e: MouseEvent & { currentTarget: HTMLButtonElement; target: import(\"/home/runner/work/ui/ui/node_modules/solid-js/types/jsx\").DOMElement; }) => void; 1: any }",
        "displayType": "undefined | JSX.EventHandler<HTMLButtonElement, MouseEvent> | { 0: (data: any, e: MouseEvent & { currentTarget: HTMLButtonElement; target: import(\"/home/runner/work/ui/ui/node_modules/solid-js/types/jsx\").DOMElement; }) => void; 1: any }",
        "description": ""
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Dropdown",
    "group": "UI",
    "sourceFile": "src/ui/dropdown.tsx",
    "props": [
      {
        "name": "defaultOpen",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Initial open state (uncontrolled seed).",
        "default": "false"
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "When true, the trigger never opens the menu."
      }
    ],
    "callbacks": [
      {
        "name": "controllerRef",
        "type": "undefined | (api: DropdownController) => void",
        "displayType": "undefined | (api: DropdownController) => void",
        "description": "Receive the open controller (open accessor + setOpen) once mounted."
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "DropdownContent",
    "group": "UI",
    "sourceFile": "src/ui/dropdown.tsx",
    "props": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "DropdownItem",
    "group": "UI",
    "sourceFile": "src/ui/dropdown.tsx",
    "props": [
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [
      {
        "name": "onSelect",
        "type": "undefined | () => void",
        "displayType": "undefined | () => void",
        "description": ""
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "DropdownTrigger",
    "group": "UI",
    "sourceFile": "src/ui/dropdown.tsx",
    "props": [],
    "callbacks": [
      {
        "name": "as",
        "type": "undefined | string | (props: Record<string, any>) => JSX.Element",
        "displayType": "undefined | string | (props: Record<string, any>) => JSX.Element",
        "description": ""
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "HoverCard",
    "group": "UI",
    "sourceFile": "src/ui/hover-card.tsx",
    "props": [
      {
        "name": "openDelay",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "closeDelay",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "placement",
        "type": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\" | \"top-start\" | \"top-end\" | \"right-start\" | \"right-end\" | \"bottom-start\" | \"bottom-end\" | \"left-start\" | \"left-end\"",
        "displayType": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\" | \"top-start\" | \"top-end\" | \"right-start\" | \"right-end\" | \"bottom-start\" | \"bottom-end\" | \"left-start\" | \"left-end\"",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [
      {
        "name": "trigger",
        "type": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "displayType": "undefined | null | number | false | true | Node | { length: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => JSX.Element; push: (...items: JSX.Element[]) => number; concat: { (...items: ConcatArray<JSX.Element>[]): JSX.Element[]; (...items: (JSX.Element | ConcatArray<JSX.Element>)[]): JSX.Element[]; }; join: (separator?: string) => string; reverse: () => JSX.Element[]; shift: () => JSX.Element; slice: (start?: number, end?: number) => JSX.Element[]; sort: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.ArrayElement; splice: { (start: number, deleteCount?: number): JSX.Element[]; (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; }; unshift: (...items: JSX.Element[]) => number; indexOf: (searchElement: JSX.Element, fromIndex?: number) => number; lastIndexOf: (searchElement: JSX.Element, fromIndex?: number) => number; every: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: JSX.Element, index: number, array: JSX.Element[]) => U, thisArg?: any) => U[]; filter: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S[]; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element[]; }; reduce: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element): JSX.Element; (callbackfn: (previousValue: JSX.Element, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => JSX.Element, initialValue: JSX.Element): JSX.Element; <U>(callbackfn: (previousValue: U, currentValue: JSX.Element, currentIndex: number, array: JSX.Element[]) => U, initialValue: U): U; }; find: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findIndex: (predicate: (value: JSX.Element, index: number, obj: JSX.Element[]) => unknown, thisArg?: any) => number; fill: (value: JSX.Element, start?: number, end?: number) => JSX.ArrayElement; copyWithin: (target: number, start: number, end?: number) => JSX.ArrayElement; entries: () => ArrayIterator<[number, JSX.Element]>; keys: () => ArrayIterator<number>; values: () => ArrayIterator<JSX.Element>; includes: (searchElement: JSX.Element, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: JSX.Element, index: number, array: JSX.Element[]) => U | readonly U[], thisArg?: This | undefined) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D | undefined) => FlatArray<A, D>[]; at: (index: number) => JSX.Element; findLast: { <S extends JSX.Element>(predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => value is S, thisArg?: any): S | undefined; (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any): JSX.Element; }; findLastIndex: (predicate: (value: JSX.Element, index: number, array: JSX.Element[]) => unknown, thisArg?: any) => number; toReversed: () => JSX.Element[]; toSorted: (compareFn?: ((a: JSX.Element, b: JSX.Element) => number) | undefined) => JSX.Element[]; toSpliced: { (start: number, deleteCount: number, ...items: JSX.Element[]): JSX.Element[]; (start: number, deleteCount?: number): JSX.Element[]; }; with: (index: number, value: JSX.Element) => JSX.Element[]; __@iterator@2613: () => ArrayIterator<JSX.Element>; __@unscopables@2615: { [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; findLast?: boolean | undefined; findLastIndex?: boolean | undefined; toReversed?: boolean | undefined; toSorted?: boolean | undefined; toSpliced?: boolean | undefined; with?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; } } | string & {}",
        "description": ""
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "name": "Resizable",
    "group": "UI",
    "sourceFile": "src/ui/resizable.tsx",
    "props": [
      {
        "name": "orientation",
        "type": "undefined | \"vertical\" | \"horizontal\"",
        "displayType": "undefined | \"vertical\" | \"horizontal\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'horizontal'"
      },
      {
        "name": "withHandle",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Show a visible grip on each interactive handle."
      },
      {
        "name": "maximizedIndex",
        "type": "undefined | null | number",
        "displayType": "undefined | null | number",
        "optional": true,
        "scalar": false,
        "description": "Which panel index is maximized (null = none). Hides the others."
      }
    ],
    "callbacks": [
      {
        "name": "onChange",
        "type": "undefined | (sizes: number[]) => void",
        "displayType": "undefined | (sizes: number[]) => void",
        "description": "Fired on drag-end / keyboard resize / visibility change with the current panel sizes (percent)."
      },
      {
        "name": "onMaximizeChange",
        "type": "undefined | (index: number | null) => void",
        "displayType": "undefined | (index: number | null) => void",
        "description": "Fired when the maximized panel changes (index, or null on restore)."
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": "`ResizablePanel` children."
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": "Convenience group that takes `ResizablePanel` children and AUTO-INSERTS a `ResizableHandle` between each pair of visible (non-`hidden`) panels. A handle is interactive only between two unlocked neighbors; otherwise it renders as a static divider. Power users who need manual control can keep using `ResizablePanelGroup` + explicit `ResizableHandle`s."
  },
  {
    "name": "ResizableHandle",
    "group": "UI",
    "sourceFile": "src/ui/resizable.tsx",
    "props": [
      {
        "name": "withHandle",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "keyboardStep",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "Keyboard nudge step in pixels (default 16). Home/End jump to min/max.",
        "default": "16"
      },
      {
        "name": "static",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Render as a static, non-interactive divider (e.g. between locked panels)."
      },
      {
        "name": "orientation",
        "type": "undefined | \"vertical\" | \"horizontal\"",
        "displayType": "undefined | \"vertical\" | \"horizontal\"",
        "optional": true,
        "scalar": true,
        "description": "Explicit axis; overrides `ResizableContext`. Needed by facades that render handles outside a context provider (e.g. `<kai-resizable>`)."
      }
    ],
    "callbacks": [
      {
        "name": "onPanelResize",
        "type": "undefined | (delta: number) => void",
        "displayType": "undefined | (delta: number) => void",
        "description": ""
      }
    ],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "ResizablePanel",
    "group": "UI",
    "sourceFile": "src/ui/resizable.tsx",
    "props": [
      {
        "name": "defaultSize",
        "type": "undefined | string | number",
        "displayType": "undefined | string | number",
        "optional": true,
        "scalar": true,
        "description": "Initial main-axis size: number/`\"25%\"` (percent) or `\"280px\"` (pixels). Omitted → flexible."
      },
      {
        "name": "minSize",
        "type": "undefined | string | number",
        "displayType": "undefined | string | number",
        "optional": true,
        "scalar": true,
        "description": "Minimum size during resize (px or %)."
      },
      {
        "name": "maxSize",
        "type": "undefined | string | number",
        "displayType": "undefined | string | number",
        "optional": true,
        "scalar": true,
        "description": "Maximum size during resize (px or %)."
      },
      {
        "name": "locked",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "When true, the panel's size is fixed and adjacent handles are non-draggable."
      },
      {
        "name": "hidden",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "When true, the panel is not visible (used by the `Resizable` convenience to drop dividers)."
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "ResizablePanelGroup",
    "group": "UI",
    "sourceFile": "src/ui/resizable.tsx",
    "props": [
      {
        "name": "orientation",
        "type": "undefined | \"vertical\" | \"horizontal\"",
        "displayType": "undefined | \"vertical\" | \"horizontal\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'horizontal'"
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "ScrollArea",
    "group": "UI",
    "sourceFile": "src/ui/scroll-area.tsx",
    "props": [
      {
        "name": "orientation",
        "type": "undefined | \"vertical\" | \"horizontal\" | \"both\"",
        "displayType": "undefined | \"vertical\" | \"horizontal\" | \"both\"",
        "optional": true,
        "scalar": true,
        "description": "Which axis scrolls. `vertical` (default) · `horizontal` · `both`. The cross axis is clamped to `hidden` so content can't overflow it."
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "Separator",
    "group": "UI",
    "sourceFile": "src/ui/separator.tsx",
    "props": [
      {
        "name": "orientation",
        "type": "undefined | \"vertical\" | \"horizontal\"",
        "displayType": "undefined | \"vertical\" | \"horizontal\"",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "Skeleton",
    "group": "UI",
    "sourceFile": "src/ui/skeleton.tsx",
    "props": [
      {
        "name": "variant",
        "type": "undefined | \"text\" | \"rect\" | \"circle\"",
        "displayType": "undefined | \"text\" | \"rect\" | \"circle\"",
        "optional": true,
        "scalar": true,
        "description": "Shape preset. `text` = one or more lines; `rect` = a block; `circle` = round. Omit for the bare, class-driven block (size it with utility classes yourself — the original low-level usage)."
      },
      {
        "name": "width",
        "type": "undefined | string | number",
        "displayType": "undefined | string | number",
        "optional": true,
        "scalar": true,
        "description": "CSS width (a number is treated as px). With a `variant` and no width it fills its container (responsive); for `circle` it is the diameter."
      },
      {
        "name": "height",
        "type": "undefined | string | number",
        "displayType": "undefined | string | number",
        "optional": true,
        "scalar": true,
        "description": "CSS height (a number is treated as px). Defaults per variant."
      },
      {
        "name": "lines",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "`text` only: how many lines to render (the last is shorter). Default 1.",
        "default": "1"
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "Textarea",
    "group": "UI",
    "sourceFile": "src/ui/textarea.tsx",
    "props": [
      {
        "name": "maxHeight",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": ""
      },
      {
        "name": "autoResize",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "Tooltip",
    "group": "UI",
    "sourceFile": "src/ui/tooltip.tsx",
    "props": [
      {
        "name": "content",
        "type": "string",
        "displayType": "string",
        "optional": false,
        "scalar": true,
        "description": ""
      },
      {
        "name": "openDelay",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "600"
      },
      {
        "name": "closeDelay",
        "type": "undefined | number",
        "displayType": "undefined | number",
        "optional": true,
        "scalar": true,
        "description": "Delay (ms) before it hides after the pointer leaves. Defaults to 0 (hides immediately).",
        "default": "0"
      },
      {
        "name": "placement",
        "type": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\" | \"top-start\" | \"top-end\" | \"right-start\" | \"right-end\" | \"bottom-start\" | \"bottom-end\" | \"left-start\" | \"left-end\"",
        "displayType": "undefined | \"top\" | \"right\" | \"bottom\" | \"left\" | \"top-start\" | \"top-end\" | \"right-start\" | \"right-end\" | \"bottom-start\" | \"bottom-end\" | \"left-start\" | \"left-end\"",
        "optional": true,
        "scalar": true,
        "description": "Preferred placement (post flip/shift). Defaults to `'top'`.",
        "default": "'top'"
      },
      {
        "name": "defaultOpen",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "Initial open state on mount (uncontrolled seed).",
        "default": "false"
      },
      {
        "name": "disabled",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": "When true, hover/focus (and `show()`) never opens the tooltip."
      },
      {
        "name": "dismissOnClick",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [
      {
        "name": "controllerRef",
        "type": "undefined | (api: TooltipController) => void",
        "displayType": "undefined | (api: TooltipController) => void",
        "description": "Receive the open controller (open accessor + setOpen) once mounted."
      }
    ],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  }
]
