# React API

React 组件、hook 与扩展的真实公开类型。

### QuireMarkdownProps

`@quirekit/incremark-react` · MIT

React 阅读组件属性，支持静态文本、AI 流式全文和已有解析快照。

```ts
export interface QuireMarkdownProps extends MarkdownSourceInput, MarkdownRenderOptions {
    readonly status?: MarkdownStatus;
    readonly locale?: MarkdownLocale;
    readonly className?: string;
    readonly style?: CSSProperties;
    readonly onError?: (failure: MarkdownReadingError) => void;
}
```

**status** — 仅表示传输状态，结束和停止保留全部源码。

**locale** — 复制、任务和折叠控件使用的语言。

**className** — 阅读容器的额外 CSS 类。

**style** — 阅读容器的 React 样式。

**onError** — 提交后报告局部失败；错误观察函数不会破坏源码回退。

**content** — 完整 Markdown 字符串，流式时为已接收的完整前缀。

**state** — 高级调用方提供的已接受快照，与 content 互斥。

**identity** — 消息或文档身份，独立于文本；变化时释放旧会话及资源。

**options** — 本次会话稳定的源码扩展配置；重新配置时替换对象。

**ssr** — 默认 semantic 输出语义 HTML；source 延迟解析并先显示转义源码。

**components** — 叠加到内置阅读默认值上的局部语义组件替换。

**cache** — 是否复用完整块投影，MarkdownRenderer 默认开启；关闭后解析仍增量进行。

**html** — 显式启用经过净化的 HTML；默认 false 保留源码。

**renderNode** — 可信产品适配器；自定义源码通常使用 withMarkdownReading。

**renderNodeKey** — 返回覆盖适配器对未改变块之外的读取和外部状态的身份值；缺省保守重投影。

### MarkdownComponents

`@quirekit/incremark-react` · MIT

实例内的原生标签与 React 组件映射；应用组件属于可信代码。

```ts
export type MarkdownComponents = Readonly<Partial<Record<string, ComponentType<MarkdownComponentProps> | string>>>;
```

### MarkdownComponentProps

`@quirekit/incremark-react` · MIT

自定义语义组件收到的属性；转发给 DOM 前先取出 node。

```ts
export interface MarkdownComponentProps {
    readonly node: MarkdownNodeInfo;
    readonly children?: ReactNode;
    readonly [attribute: string]: unknown;
}
```

**node** — 只给自定义组件的规范 Lezer 源码元数据；位置使用 UTF-16。

**children** — 已投影的语义子内容。

### MarkdownRenderOptions

`@quirekit/incremark-react` · MIT

React 实例的渲染配置，共用内核缓存和 HTML 安全策略。

```ts
export interface MarkdownRenderOptions extends CoreOptions<ReactNode> {
    readonly components?: MarkdownComponents;
}
```

**components** — 叠加到内置阅读默认值上的局部语义组件替换。

**cache** — 是否复用完整块投影，MarkdownRenderer 默认开启；关闭后解析仍增量进行。

**html** — 显式启用经过净化的 HTML；默认 false 保留源码。

**renderNode** — 可信产品适配器；自定义源码通常使用 withMarkdownReading。

**renderNodeKey** — 返回覆盖适配器对未改变块之外的读取和外部状态的身份值；缺省保守重投影。

### MarkdownReadingContext

`@quirekit/incremark-react` · MIT

来自规范 source codec 的只读 React 阅读输入，支持范围校验后的递归渲染。

```ts
export interface MarkdownReadingContext<Attrs extends object = Readonly<Record<string, unknown>>> extends CoreContext<ReactNode, Attrs> {
}
```

**name** — 已安装的语义 owner 名称。

**attrs** — 由源码 codec 读取并验证的只读字段。

**node** — 当前快照确认的语法节点，使用 UTF-16 源码偏移。

**document** — 只读规范源码与共享引用解析能力。

**locale** — 复制、任务和折叠控件使用的语言。

**renderInline** — 渲染该节点范围内的行内内容，from/to 不得切断子节点；无效范围抛出 RangeError。

**renderBlocks** — 渲染语义子块；omitted 指定省略的直接语法标记。

### MarkdownReadingDefinition

`@quirekit/incremark-react` · MIT

React 阅读呈现及实例独占的异步资源合同。

```ts
export interface MarkdownReadingDefinition<Attrs extends object = Readonly<Record<string, unknown>>, Resource = unknown> extends CoreDefinition<ReactNode, Attrs, Resource> {
}
```

**cacheKey** — 返回涵盖 codec/render/load 在节点外读取与外部状态的身份值；常量声明仅局部读取，省略则禁用包含块的复用。

**load** — 接收捕获的上下文和取消信号，返回资源租约；替换或卸载时取消，迟到资源会释放，SSR 不调用。

**render** — 接收验证后的上下文与已接受资源，返回可信 Vue 节点；返回 undefined 保留精确源码。

### withMarkdownReading

`@quirekit/incremark-react` · MIT

给已配置的 MSFE 源码扩展添加可信 React 呈现和可取消的资源加载；保留原语义 codec 与生命周期。

```ts
function withMarkdownReading<Attrs extends object = Readonly<Record<string, unknown>>, Resource = unknown>(extension: AnyExtension, definition: MarkdownReadingDefinition<Attrs, Resource>): AnyExtension
```

### MarkdownSourceInput

`@quirekit/incremark-react` · MIT

权威全文与已有快照输入互斥，支持消息标识和纯解析配置。

```ts
export interface MarkdownSourceInput {
    readonly content?: string | undefined;
    readonly state?: EditorState | undefined;
    readonly identity?: string | undefined;
    readonly options?: MarkdownOptions | undefined;
    readonly ssr?: "semantic" | "source" | undefined;
}
```

**content** — 宿主权威原文；流式输入传入当前已收到的完整前缀。

**state** — 已有规范解析快照，与 content 互斥。

**identity** — 文档或消息标识，替换时重建会话并释放旧资源。

**options** — 纯解析配置；替换对象以重新配置会话。

**ssr** — 首次渲染策略；默认 semantic 完成语义解析，source 则延迟到挂载后解析。

### MarkdownSourceSnapshot

`@quirekit/incremark-react` · MIT

不可变的外部状态快照；输入与解析结果未变化时保持对象身份。

```ts
export interface MarkdownSourceSnapshot {
    readonly state: EditorState | undefined;
    readonly pending: boolean;
    readonly generation: number;
    readonly error: MarkdownReadingError | undefined;
}
```

**state** — 已接受的规范解析状态；延迟或失败时为 undefined。

**pending** — 是否仍需要协作式解析续作。

**generation** — 文档代次，用于资源与缓存的所有权。

**error** — 局部解析失败，提交后交给观察者。

### useMarkdownSource

`@quirekit/incremark-react` · MIT

订阅权威源码与解析配置，提交后报告失败，返回带唯一可取消解析续作的不可变快照。

```ts
function useMarkdownSource(input: MarkdownSourceInput, onError?: (failure: MarkdownReadingError) => void): MarkdownSourceSnapshot
```

### MarkdownRenderer

`@quirekit/incremark-react` · MIT

React 实例的块缓存；render 阶段可准备帧，只有 commit 才接受未过期的目录。

```ts
export class MarkdownRenderer extends CoreRenderer<ReactNode> {
    constructor(limits?: MarkdownCacheLimits);
    override get work(): Readonly<MarkdownRenderWork>;
    override clear(): void;
    override prepare(state: EditorState, locale: MarkdownLocale, prefix?: string, onError?: (error: MarkdownReadingError) => void, options?: MarkdownRenderOptions): MarkdownRenderFrame<ReactNode>;
    override render(state: EditorState, locale: MarkdownLocale, prefix?: string, onError?: (error: MarkdownReadingError) => void, options?: MarkdownRenderOptions): ReactNode;
}
```

### renderMarkdown

`@quirekit/incremark-react` · MIT

从规范源码快照生成普通 React 投影，不保留块输出；locale、prefix、onError 和 options 分别配置控制语言、导航前缀、错误观察与呈现策略。

```ts
function renderMarkdown(state: EditorState, locale: MarkdownLocale, prefix?: string, onError?: (error: MarkdownReadingError) => void, options?: MarkdownRenderOptions): ReactNode
```
