@myun/gimi-chat 0.9.66 → 0.9.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -26,6 +26,7 @@ interface MentionListProps {
26
26
  agentId?: number;
27
27
  apiService?: IUseApi | null;
28
28
  getCurrentTextLength?: () => number;
29
+ onVisibilityChange?: (visible: boolean) => void;
29
30
  }
30
31
  declare const MentionList: React.ForwardRefExoticComponent<MentionListProps & React.RefAttributes<MentionListRef>>;
31
32
  export default MentionList;
@@ -15,7 +15,8 @@ var MentionList = /*#__PURE__*/forwardRef(function (_ref, ref) {
15
15
  query = _ref.query,
16
16
  agentId = _ref.agentId,
17
17
  apiService = _ref.apiService,
18
- getCurrentTextLength = _ref.getCurrentTextLength;
18
+ getCurrentTextLength = _ref.getCurrentTextLength,
19
+ onVisibilityChange = _ref.onVisibilityChange;
19
20
  var _useState = useState(0),
20
21
  _useState2 = _slicedToArray(_useState, 2),
21
22
  selectedIndex = _useState2[0],
@@ -88,6 +89,12 @@ var MentionList = /*#__PURE__*/forwardRef(function (_ref, ref) {
88
89
  setFilterOptions(filter);
89
90
  setSelectedIndex(0);
90
91
  }, [query, skillList]);
92
+
93
+ // 通知外部当前是否有可显示内容(决定面板显示/隐藏)
94
+ useEffect(function () {
95
+ var hasContent = loading || filterOptions.length > 0;
96
+ onVisibilityChange === null || onVisibilityChange === void 0 || onVisibilityChange(hasContent);
97
+ }, [loading, filterOptions.length, onVisibilityChange]);
91
98
  var upHandler = function upHandler() {
92
99
  setSelectedIndex(function (i) {
93
100
  return filterOptions.length ? (i + filterOptions.length - 1) % filterOptions.length : 0;
@@ -103,6 +103,38 @@ export var suggestion = {
103
103
  var outsideClickHandler = null;
104
104
  var currentEditor = null;
105
105
  var currentRange = null;
106
+ var isVisible = true; // 面板当前可见状态
107
+
108
+ // 统一的清理和退出逻辑
109
+ var cleanup = function cleanup() {
110
+ var _component, _component2;
111
+ if (reposition) {
112
+ window.removeEventListener('resize', reposition);
113
+ window.removeEventListener('scroll', reposition, true);
114
+ reposition = null;
115
+ }
116
+ if (outsideClickHandler) {
117
+ document.removeEventListener('mousedown', outsideClickHandler, true);
118
+ outsideClickHandler = null;
119
+ }
120
+ currentEditor = null;
121
+ currentRange = null;
122
+ (_component = component) === null || _component === void 0 || (_component = _component.element) === null || _component === void 0 || _component.remove();
123
+ (_component2 = component) === null || _component2 === void 0 || _component2.destroy();
124
+ };
125
+
126
+ // MentionList 通知可见性变化
127
+ var handleVisibilityChange = function handleVisibilityChange(visible) {
128
+ var _component3;
129
+ if (!((_component3 = component) !== null && _component3 !== void 0 && _component3.element)) return;
130
+ isVisible = visible;
131
+ if (visible) {
132
+ component.element.style.display = '';
133
+ positionPanel(currentEditor, component.element);
134
+ } else {
135
+ component.element.style.display = 'none';
136
+ }
137
+ };
106
138
  return {
107
139
  onStart: function onStart(props) {
108
140
  var _skillContext$getSkil, _skillContext;
@@ -122,7 +154,8 @@ export var suggestion = {
122
154
  props: _objectSpread(_objectSpread({}, props), {}, {
123
155
  agentId: agentId,
124
156
  apiService: apiService,
125
- getCurrentTextLength: getCurrentTextLength
157
+ getCurrentTextLength: getCurrentTextLength,
158
+ onVisibilityChange: handleVisibilityChange
126
159
  }),
127
160
  editor: props.editor
128
161
  });
@@ -141,8 +174,8 @@ export var suggestion = {
141
174
  window.addEventListener('resize', reposition);
142
175
  window.addEventListener('scroll', reposition, true);
143
176
  outsideClickHandler = function outsideClickHandler(e) {
144
- var _component;
145
- if (!((_component = component) !== null && _component !== void 0 && _component.element)) return;
177
+ var _component4;
178
+ if (!((_component4 = component) !== null && _component4 !== void 0 && _component4.element)) return;
146
179
  if (component.element.contains(e.target)) return;
147
180
  e.stopPropagation();
148
181
  // 手动移除面板 DOM,再通过内容变更让 suggestion plugin 退出
@@ -161,33 +194,22 @@ export var suggestion = {
161
194
  if (!component) return;
162
195
  currentRange = props.range;
163
196
  component.updateProps(props);
164
- // query 变化导致面板高度变化,重新判断上下翻转
165
- positionPanel(props.editor, component.element);
197
+ // query 变化导致面板高度变化,只在可见时重新定位
198
+ if (isVisible) {
199
+ positionPanel(props.editor, component.element);
200
+ }
166
201
  },
167
202
  onKeyDown: function onKeyDown(props) {
168
- var _component2, _component2$onKeyDown;
203
+ var _component5, _component5$onKeyDown;
169
204
  function onExit() {
170
- component.destroy();
205
+ cleanup();
171
206
  }
172
- return (_component2 = component) === null || _component2 === void 0 || (_component2 = _component2.ref) === null || _component2 === void 0 || (_component2$onKeyDown = _component2.onKeyDown) === null || _component2$onKeyDown === void 0 ? void 0 : _component2$onKeyDown.call(_component2, _objectSpread(_objectSpread({}, props), {}, {
207
+ return (_component5 = component) === null || _component5 === void 0 || (_component5 = _component5.ref) === null || _component5 === void 0 || (_component5$onKeyDown = _component5.onKeyDown) === null || _component5$onKeyDown === void 0 ? void 0 : _component5$onKeyDown.call(_component5, _objectSpread(_objectSpread({}, props), {}, {
173
208
  exitCb: onExit
174
209
  }));
175
210
  },
176
211
  onExit: function onExit() {
177
- var _component3, _component4;
178
- if (reposition) {
179
- window.removeEventListener('resize', reposition);
180
- window.removeEventListener('scroll', reposition, true);
181
- reposition = null;
182
- }
183
- if (outsideClickHandler) {
184
- document.removeEventListener('mousedown', outsideClickHandler, true);
185
- outsideClickHandler = null;
186
- }
187
- currentEditor = null;
188
- currentRange = null;
189
- (_component3 = component) === null || _component3 === void 0 || (_component3 = _component3.element) === null || _component3 === void 0 || _component3.remove();
190
- (_component4 = component) === null || _component4 === void 0 || _component4.destroy();
212
+ cleanup();
191
213
  },
192
214
  focusEditor: function focusEditor(props) {
193
215
  props.editor.commands.focus();