diff --git a/web/pages/Assistants.tsx b/web/pages/Assistants.tsx
index 453c2f8..7722af3 100644
--- a/web/pages/Assistants.tsx
+++ b/web/pages/Assistants.tsx
@@ -273,7 +273,8 @@ export const AssistantsPage: React.FC = () => {
const updateTemplateSuggestionState = (
field: 'prompt' | 'opener',
value: string,
- caret: number | null
+ caret: number | null,
+ control?: HTMLTextAreaElement | HTMLInputElement | null
) => {
if (caret === null || caret < 0) {
setTemplateSuggestion(null);
@@ -294,11 +295,18 @@ export const AssistantsPage: React.FC = () => {
setTemplateSuggestion(null);
return;
}
+ if (!control) {
+ setTemplateSuggestion(null);
+ return;
+ }
+ const anchor = getTemplateSuggestionAnchor(control, caret);
setTemplateSuggestion({
field,
start,
end: caret,
query: token,
+ anchorLeft: anchor.left,
+ anchorTop: anchor.top,
});
};
@@ -765,16 +773,16 @@ export const AssistantsPage: React.FC = () => {
onChange={(e) => {
const next = e.target.value;
updateAssistant('prompt', next);
- updateTemplateSuggestionState('prompt', next, e.currentTarget.selectionStart);
+ updateTemplateSuggestionState('prompt', next, e.currentTarget.selectionStart, e.currentTarget);
}}
onKeyUp={(e) => {
- updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart);
+ updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart, e.currentTarget);
}}
onClick={(e) => {
- updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart);
+ updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart, e.currentTarget);
}}
onFocus={(e) => {
- updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart);
+ updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart, e.currentTarget);
}}
onBlur={() => {
window.setTimeout(() => {
@@ -784,7 +792,13 @@ export const AssistantsPage: React.FC = () => {
placeholder="设定小助手的人设、语气、行为规范以及业务逻辑..."
/>
{templateSuggestion?.field === 'prompt' && filteredSystemTemplateVariables.length > 0 && (
-
+
{filteredSystemTemplateVariables.map((item) => (