@@ -89,9 +89,8 @@ const agentStore = useAgentStore();
8989const agentTransitions = useAgentTransitions ();
9090const showScrollContainer = ref (true );
9191const chatContainerRef = ref <HTMLElement | null >(null );
92-
9392const messagesRefs = ref <Array <HTMLElement | null >>([]);
94-
93+ const useWaitingForHeight = ref ( false );
9594
9695/*
9796* Whenever user sends a message, it adds a bottom spacer, that takes the remaining height
@@ -116,15 +115,60 @@ let messageResizeObserver: ResizeObserver | null = null;
116115let observedLastUserMessageElement: HTMLElement | null = null ;
117116let observedLastAgentMessageElement: HTMLElement | null = null ;
118117
119- function resetSpacer() {
120- showBottomSpacer .value = false ;
121- spacerHeight .value = 0 ;
122- }
118+ onMounted (async () => {
119+ messageResizeObserver = new ResizeObserver (() => {
120+ updateSpacerHeight ();
121+ });
122+
123+ await import (' @incremark/theme/styles.css' )
124+ await agentStore .fetchPlaceholderMessages ()
125+ await refreshSpacerTracking ();
126+ });
127+
128+ onUnmounted (() => {
129+ if (innerScrollContainerRef .value ) {
130+ innerScrollContainerRef .value .removeEventListener (' scroll' , recalculateScroll );
131+ }
132+
133+ stopObservingLastMessages ();
134+ messageResizeObserver ?.disconnect ();
135+ agentStore .stopPlaceholderAnimation ();
136+ });
123137
124138watch (() => agentStore .activeSessionId , () => {
125139 resetSpacer ();
126140});
127141
142+ watch (() => agentStore .activeSessionId , async () => {
143+ showScrollContainer .value = false ;
144+ await nextTick ();
145+ showScrollContainer .value = true ;
146+ await refreshSpacerTracking ();
147+ recalculateScroll ();
148+ });
149+
150+ watch (() => props .messages .length , async () => {
151+ await refreshSpacerTracking ();
152+ });
153+
154+ watch (scrollContainer , async () => {
155+ if (innerScrollContainerRef .value ) {
156+ innerScrollContainerRef .value .removeEventListener (' scroll' , recalculateScroll );
157+ }
158+
159+ if (scrollContainer .value ) {
160+ innerScrollContainerRef .value = scrollContainer .value .container .scrollEl ;
161+
162+ innerScrollContainerRef .value .addEventListener (' scroll' , recalculateScroll );
163+ await refreshSpacerTracking ();
164+ }
165+ })
166+
167+ function resetSpacer() {
168+ showBottomSpacer .value = false ;
169+ spacerHeight .value = 0 ;
170+ }
171+
128172function getLastMessageElement(role : ' user' | ' assistant' ) {
129173 const lastMessageIndex = props .messages .findLastIndex ((message : IMessage ) => message .role === role );
130174 return messagesRefs .value [lastMessageIndex ] ?? null ;
@@ -156,7 +200,6 @@ async function waitForRealHeight(role: 'user' | 'assistant'): Promise<number> {
156200 });
157201}
158202
159- const useWaitingForHeight = ref (false );
160203async function updateSpacerHeight() {
161204 if (! showBottomSpacer .value ) {
162205 return ;
@@ -238,51 +281,4 @@ function recalculateScroll() {
238281 }
239282}
240283
241- watch (() => agentStore .activeSessionId , async () => {
242- showScrollContainer .value = false ;
243- await nextTick ();
244- showScrollContainer .value = true ;
245- await refreshSpacerTracking ();
246- recalculateScroll ();
247- });
248-
249- watch (() => props .messages .length , async () => {
250- await refreshSpacerTracking ();
251- });
252-
253- onMounted (async () => {
254- messageResizeObserver = new ResizeObserver (() => {
255- updateSpacerHeight ();
256- });
257-
258- await import (' @incremark/theme/styles.css' )
259- await agentStore .fetchPlaceholderMessages ()
260- await refreshSpacerTracking ();
261- });
262-
263- onUnmounted (() => {
264- if (innerScrollContainerRef .value ) {
265- innerScrollContainerRef .value .removeEventListener (' scroll' , recalculateScroll );
266- }
267-
268- stopObservingLastMessages ();
269- messageResizeObserver ?.disconnect ();
270- agentStore .stopPlaceholderAnimation ();
271- });
272-
273- watch (scrollContainer , async () => {
274- if (innerScrollContainerRef .value ) {
275- innerScrollContainerRef .value .removeEventListener (' scroll' , recalculateScroll );
276- }
277-
278- if (scrollContainer .value ) {
279- innerScrollContainerRef .value = scrollContainer .value .container .scrollEl ;
280-
281- innerScrollContainerRef .value .addEventListener (' scroll' , recalculateScroll );
282- await refreshSpacerTracking ();
283- }
284- })
285-
286-
287-
288284 </script >
0 commit comments