@@ -168,52 +168,81 @@ interface SidebarNavigatorProps {
168168
169169### 6. AutocompleteTextarea
170170
171- 集成了 ` copilot-react-kit ` 的、支持 AI 自动补全的 Schema 驱动文本输入组件。它现在可以与 ` AutocompleteModelSelector ` 配合使用,允许用户选择不同的 AI 模型。
171+ 集成了 ` copilot-react-textarea ` 的、支持 AI 自动补全的 Schema 驱动文本输入组件。它现在可以与 ` AutocompleteModelSelector ` 配合使用,允许用户选择不同的 AI 模型。
172172
173173#### Props
174174
175175``` typescript
176176interface AutocompleteTextareaProps
177177 extends Omit <React .ComponentProps <' textarea' >, ' onChange' | ' value' > {
178- // --- Core Functionality ---
178+ // --- Core ---
179179 value: string ;
180180 onValueChange: (value : string ) => void ;
181181
182- // --- AI Context (from parent) ---
182+ // --- AI Context ---
183183 isAutocompleteEnabledGlobally: boolean ;
184- uniqueFieldId: string ; // 用于唯一标识textarea实例
184+ autocompleteModel: AutocompleteModel ;
185+ sectionId: string ;
186+ itemId? : string ;
187+ sectionType? : string ; // 可选:用于跳过特定字段类型(如 personalDetailsField)
185188
186- // --- AI Suggestions (from store) ---
187- forcedSuggestion? : string | null ;
188- onForcedSuggestionAccepted? : () => void ;
189- onForcedSuggestionRejected? : () => void ;
189+ // --- 视图 ---
190+ isFocusMode? : boolean ;
190191}
191192```
192193
193- _ 注意:其他用于构建AI上下文的内部props(如 ` sectionType ` , ` itemId ` , ` name ` )被视为 ` AIFieldWrapper ` 的实现细节,在此处省略以简化API文档 。_
194+ _ 注意:标准 textarea 属性(如 ` id ` , ` name ` , ` placeholder ` , ` rows ` , ` cols ` , ` disabled ` , ` className ` 等)作为透传 props 支持,此处省略。强制建议(forced suggestion)相关 props 已移除,行为改为通过对话框承载 。_
194195
195196#### 使用示例
196197
197198``` tsx
198- // 在 AIFieldWrapper.tsx 内部使用
199+ // 在 AIFieldWrapper.tsx 内部使用(节选)
199200<AutocompleteTextarea
200201 id = { uniqueFieldId }
202+ name = { fieldId }
203+ sectionType = { schemaId }
204+ sectionId = { sectionId }
205+ itemId = { itemId }
201206 value = { value }
202207 onValueChange = { handleValueChange }
203208 placeholder = { field .uiProps ?.placeholder }
204209 isAutocompleteEnabledGlobally = { isAutocompleteEnabled }
210+ autocompleteModel = { autocompleteModel }
205211/>
206212```
207213
208214#### 特性
209215
210216- 由 ` SchemaRegistry ` 驱动的上下文感知自动补全。
211- - 使用 ` copilot-react-kit ` 提供高性能的内联建议 ("幽灵文本")。
212- - "热路径"优化:为降低延迟,直接调用AI服务,不通过Store Action。
213- - 无缝集成来自Store的"强制建议"(AI改进建议)。
214- - Tab键接受建议。
215- - Escape键拒绝强制建议。
216- - ** 支持AI模型选择** :与 ` AutocompleteModelSelector ` 配合使用,允许用户选择不同的自动补全模型。
217+ - 使用 ` copilot-react-textarea ` 提供高性能的内联建议 ("幽灵文本")。
218+ - "热路径"优化:为降低延迟,直接调用 AI 服务,不通过 Store Action。
219+ - 强制建议改为对话框呈现,不在文本域内联显示。
220+ - Tab 键接受建议(由 CopilotTextarea 处理)。
221+ - ** 支持 AI 模型选择** :与 ` AutocompleteModelSelector ` 配合使用,允许用户选择不同的自动补全模型。
222+
223+ #### Markdown 浮动工具栏集成
224+
225+ - 通过 ` insideSlateChildren ` 插槽向上游 ` CopilotTextarea ` 注入 Markdown 工具栏(仅在选区非折叠时显示)。
226+ - 下游注入,避免入侵式修改上游 HoveringToolbar(保留 Cmd/Ctrl+K 的 AI 悬浮框)。
227+ - 工具栏通过 React Portal 渲染到 ` document.body ` ,避免被父容器裁剪。
228+
229+ 使用示例(节选):
230+
231+ ``` tsx
232+ <CopilotTextarea
233+ /* 其他 props */
234+ insideSlateChildren = { <MarkdownFloatingToolbar />}
235+ />
236+ ```
237+
238+ 详见:` docs/ui/markdown-floating-toolbar.md ` 与已知问题 ` docs/ui/markdown-toolbar-issues.md ` 。
239+
240+ ##### 内部实现与扩展插槽
241+
242+ - ` insideSlateChildren ` 插槽定义:` packages/src/types/base/base-copilot-textarea-props.tsx ` 中的 ` BaseCopilotTextareaProps.insideSlateChildren?: ReactNode ` 。
243+ - 插槽渲染位置:` packages/src/components/base-copilot-textarea/base-copilot-textarea.tsx ` 内,渲染于 Slate Provider 内、` Editable ` 之前。
244+ - 向上游转发:` packages/src/components/copilot-textarea/copilot-textarea.tsx ` 使用 ` ...forwardedProps ` 将 ` insideSlateChildren ` 透传给 ` BaseCopilotTextarea ` 。
245+ - 本项目集成点:` src/components/resume/ui/AutocompleteTextarea.tsx ` 通过 ` insideSlateChildren={<MarkdownFloatingToolbar />} ` 挂载 Toolbar。
217246
218247---
219248
0 commit comments