[
  {
    "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\" }[]",
        "displayType": "undefined | { path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
        "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": "Active tab. Default `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)."
      }
    ],
    "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."
      }
    ],
    "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 + `<kc-code-block>` (Code). The component self-navigates the iframe and emits `kc-navigate` / `kc-tab-change` / `kc-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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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."
      }
    ],
    "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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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)."
      }
    ],
    "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. `kc-form`) own the contract interaction."
  },
  {
    "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 } }",
        "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 } }",
        "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"
      }
    ],
    "callbacks": [],
    "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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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": ""
      }
    ],
    "callbacks": [
      {
        "name": "onScopeChange",
        "type": "(filters: SearchFilters | undefined) => void",
        "displayType": "(filters: SearchFilters | undefined) => void",
        "description": ""
      }
    ],
    "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 }",
        "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 }",
        "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 `kc-card` fallback emit."
      },
      {
        "name": "resolution",
        "type": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
        "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
        "optional": true,
        "scalar": false,
        "description": "When set, render the chromed read-only view instead of the interactive radiogroup."
      }
    ],
    "callbacks": [
      {
        "name": "host",
        "type": "undefined | { context: () => import(\"/home/runner/work/chat/chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "displayType": "undefined | { context: () => import(\"/home/runner/work/chat/chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kc-card` CustomEvent off `hostElement`)."
      }
    ],
    "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 | \"default\" | \"warning\" | \"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 | \"default\" | \"warning\" | \"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 `kc-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 }",
        "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; 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/chat/chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "displayType": "undefined | { context: () => import(\"/home/runner/work/chat/chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kc-card` CustomEvent off `hostElement`)."
      }
    ],
    "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 }",
        "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 }",
        "optional": false,
        "scalar": false,
        "description": ""
      },
      {
        "name": "isActive",
        "type": "false | true",
        "displayType": "false | true",
        "optional": false,
        "scalar": true,
        "description": ""
      }
    ],
    "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 }[]",
        "displayType": "ConversationSummary[]",
        "optional": false,
        "scalar": false,
        "description": ""
      },
      {
        "name": "activeId",
        "type": "undefined | string",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "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": ""
      }
    ],
    "slots": [],
    "tokens": [
      "--color-sidebar",
      "--color-scrollbar-thumb",
      "--color-scrollbar-thumb-hover"
    ],
    "extendsHtmlAttributes": false,
    "description": ""
  },
  {
    "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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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\" }[]",
        "displayType": "{ path: string; url?: undefined | string; code?: undefined | string; language?: undefined | string; type?: undefined | \"html\" | \"pdf\" | \"image\" | \"other\" }[]",
        "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": "[]"
      }
    ],
    "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-kc-order?: undefined | string[]; x-kc-inlineMax?: undefined | number; x-kc-submitLabel?: undefined | string; x-kc-dismissible?: undefined | false | true; x-kc-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-kc-order?: undefined | string[]; x-kc-inlineMax?: undefined | number; x-kc-submitLabel?: undefined | string; x-kc-dismissible?: undefined | false | true; x-kc-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 `kc-card` fallback emit."
      },
      {
        "name": "resolution",
        "type": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
        "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
        "optional": true,
        "scalar": false,
        "description": "When set, render the chromed read-only view instead of the form inputs."
      }
    ],
    "callbacks": [
      {
        "name": "host",
        "type": "undefined | { context: () => import(\"/home/runner/work/chat/chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "displayType": "undefined | { context: () => import(\"/home/runner/work/chat/chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kc-card` CustomEvent off `hostElement`)."
      }
    ],
    "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 `kc-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": ""
      }
    ],
    "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": ""
      }
    ],
    "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": ""
      }
    ],
    "callbacks": [
      {
        "name": "onModelChange",
        "type": "(modelId: string) => void",
        "displayType": "(modelId: string) => void",
        "description": ""
      }
    ],
    "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",
        "displayType": "undefined | string",
        "optional": true,
        "scalar": true,
        "description": "",
        "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": ""
      }
    ],
    "callbacks": [],
    "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 | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
        "displayType": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\"",
        "optional": true,
        "scalar": true,
        "description": "",
        "default": "'lg'"
      },
      {
        "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."
      }
    ],
    "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": "isStreaming",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [
      {
        "name": "onOpenChange",
        "type": "undefined | (open: boolean) => void",
        "displayType": "undefined | (open: boolean) => void",
        "description": ""
      }
    ],
    "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": "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": "SlashCommand",
    "group": "Components",
    "sourceFile": "src/components/slash-command.tsx",
    "props": [
      {
        "name": "commands",
        "type": "{ id: string; label: string; description?: undefined | string; category?: undefined | string }[]",
        "displayType": "{ id: string; label: string; description?: undefined | string; category?: undefined | string }[]",
        "optional": false,
        "scalar": false,
        "description": ""
      },
      {
        "name": "activeIds",
        "type": "undefined | string[]",
        "displayType": "undefined | string[]",
        "optional": true,
        "scalar": false,
        "description": ""
      },
      {
        "name": "compact",
        "type": "undefined | false | true",
        "displayType": "undefined | false | true",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [
      {
        "name": "onSelect",
        "type": "(command: SlashCommandItem) => void",
        "displayType": "(command: SlashCommandItem) => void",
        "description": ""
      }
    ],
    "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\"; 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 }",
        "displayType": "undefined | { mode?: undefined | \"select\"; 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 }",
        "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 `kc-card` fallback emit."
      },
      {
        "name": "resolution",
        "type": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
        "displayType": "undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string }",
        "optional": true,
        "scalar": false,
        "description": "When set, render the chromed read-only summary instead of the interactive controls."
      }
    ],
    "callbacks": [
      {
        "name": "host",
        "type": "undefined | { context: () => import(\"/home/runner/work/chat/chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "displayType": "undefined | { context: () => import(\"/home/runner/work/chat/chat/src/index\").CardContext; emit: (event: CardEvent) => void }",
        "description": "Optional explicit CardHost (otherwise read from a CardProvider, otherwise the bubbling `kc-card` CustomEvent off `hostElement`)."
      }
    ],
    "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": "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"
      }
    ],
    "callbacks": [],
    "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": ""
      }
    ],
    "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": ""
      }
    ],
    "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": "variant",
        "type": "undefined | null | \"default\" | \"ghost\" | \"outline\" | \"destructive\"",
        "displayType": "undefined | null | \"default\" | \"ghost\" | \"outline\" | \"destructive\"",
        "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": ""
      }
    ],
    "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"
      }
    ],
    "callbacks": [
      {
        "name": "onOpenChange",
        "type": "undefined | (open: boolean) => void",
        "displayType": "undefined | (open: boolean) => void",
        "description": ""
      }
    ],
    "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/chat/chat/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/chat/chat/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": [],
    "callbacks": [],
    "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": [],
    "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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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@1702: () => ArrayIterator<JSX.Element>; __@unscopables@1704: { [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 | \"horizontal\" | \"vertical\"",
        "displayType": "undefined | \"horizontal\" | \"vertical\"",
        "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 | \"horizontal\" | \"vertical\"",
        "displayType": "undefined | \"horizontal\" | \"vertical\"",
        "optional": true,
        "scalar": true,
        "description": "Explicit axis; overrides `ResizableContext`. Needed by facades that render handles outside a context provider (e.g. `<kc-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 | \"horizontal\" | \"vertical\"",
        "displayType": "undefined | \"horizontal\" | \"vertical\"",
        "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": [],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "Separator",
    "group": "UI",
    "sourceFile": "src/ui/separator.tsx",
    "props": [
      {
        "name": "orientation",
        "type": "undefined | \"horizontal\" | \"vertical\"",
        "displayType": "undefined | \"horizontal\" | \"vertical\"",
        "optional": true,
        "scalar": true,
        "description": ""
      }
    ],
    "callbacks": [],
    "slots": [],
    "tokens": [],
    "extendsHtmlAttributes": true,
    "description": ""
  },
  {
    "name": "Skeleton",
    "group": "UI",
    "sourceFile": "src/ui/skeleton.tsx",
    "props": [],
    "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"
      }
    ],
    "callbacks": [],
    "slots": [
      {
        "name": "children",
        "description": ""
      }
    ],
    "tokens": [],
    "extendsHtmlAttributes": false,
    "description": ""
  }
]
