Skip to content

Commit 766b794

Browse files
committed
feat: improve scrolling for new messages
1 parent 4916dd0 commit 766b794

File tree

5 files changed

+216
-174
lines changed

5 files changed

+216
-174
lines changed

_build/js/src/ui/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type LocalChat = {
1414

1515
export const ui = {
1616
createLoadingOverlay,
17-
localChat: Object.assign({}, createModal, {
17+
localChat: Object.assign(createModal, {
1818
createModal: createModal,
1919
verifyPermissions,
2020
}) as LocalChat,

_build/js/src/ui/localChat/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ export const createModal = (config: LocalChatConfig) => {
3333
return;
3434
}
3535

36+
/**
37+
* @deprecated
38+
*/
39+
if (!config.type) {
40+
config.type = 'text';
41+
}
42+
3643
if (!config.type) {
3744
alert(lng('modai.error.type_required'));
3845
return;

_build/js/src/ui/localChat/messageHandlers.ts

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@ import type {
2020
} from '../../chatHistory';
2121

2222
export const addUserMessage = (msg: UserMessage) => {
23-
const messageElement: UpdatableHTMLElement<UserMessage> = createElement('div', 'message user');
23+
const messageWrapper: UpdatableHTMLElement<UserMessage> = createElement(
24+
'div',
25+
'message-wrapper user',
26+
);
27+
messageWrapper.style.setProperty('--user-msg-height', '-10px');
28+
29+
const messageElement = createElement('div', 'message user');
2430

2531
const textContent = msg.content;
2632
const imagesContent = [];
@@ -35,7 +41,7 @@ export const addUserMessage = (msg: UserMessage) => {
3541
textDiv.innerHTML = nlToBr(textContent);
3642
messageElement.appendChild(textDiv);
3743

38-
if (imagesContent) {
44+
if (imagesContent.length > 0) {
3945
const imageRow = createElement('div', 'imageRow');
4046

4147
for (const imgContent of imagesContent) {
@@ -103,36 +109,50 @@ export const addUserMessage = (msg: UserMessage) => {
103109

104110
messageElement.appendChild(actionsContainer);
105111

106-
messageElement.update = (msg) => {
112+
messageWrapper.update = (msg) => {
107113
const textContent = Array.isArray(msg.content) ? msg.content[0].value : msg.content;
108114
textDiv.innerHTML = nlToBr(textContent);
109115
};
110116

111-
globalState.modal.chatMessages.appendChild(messageElement);
117+
messageWrapper.appendChild(messageElement);
118+
globalState.modal.chatMessages.appendChild(messageWrapper);
112119

113-
return messageElement;
120+
return messageWrapper;
114121
};
115122

116123
export const addErrorMessage = (content: string) => {
117124
globalState.modal.welcomeMessage.style.display = 'none';
118125

119-
const messageElement: UpdatableHTMLElement = createElement('div', 'message error');
126+
const messageWrapper: UpdatableHTMLElement = createElement('div', 'message-wrapper error');
127+
const messageElement = createElement('div', 'message error');
120128

121129
messageElement.appendChild(icon(14, triangleError));
122130

123131
const textSpan = createElement('span');
124132
textSpan.textContent = content;
125133
messageElement.appendChild(textSpan);
126134

127-
globalState.modal.chatMessages.appendChild(messageElement);
135+
messageWrapper.appendChild(messageElement);
136+
137+
globalState.modal.chatMessages.appendChild(messageWrapper);
128138

129-
return messageElement;
139+
return messageWrapper;
130140
};
131141

132142
export const addAssistantMessage = (msg: AssistantMessage, config: LocalChatConfig) => {
133-
const messageElement: UpdatableHTMLElement<AssistantMessage> = createElement('div', 'message ai');
134-
messageElement.dataset.id = msg.id;
143+
const messageWrapper: UpdatableHTMLElement<AssistantMessage> = createElement(
144+
'div',
145+
'message-wrapper ai',
146+
);
147+
if (globalState.modal.chatMessages.lastElementChild?.firstElementChild) {
148+
messageWrapper.style.setProperty(
149+
'--user-msg-height',
150+
`${globalState.modal.chatMessages.lastElementChild.firstElementChild.clientHeight}px`,
151+
);
152+
}
135153

154+
const messageElement = createElement('div', 'message ai');
155+
messageElement.dataset.id = msg.id;
136156
const md = markdownit({
137157
html: true,
138158
xhtmlOut: true,
@@ -280,15 +300,17 @@ export const addAssistantMessage = (msg: AssistantMessage, config: LocalChatConf
280300

281301
messageElement.appendChild(actionsContainer);
282302

283-
globalState.modal.chatMessages.appendChild(messageElement);
303+
messageWrapper.appendChild(messageElement);
304+
305+
globalState.modal.chatMessages.appendChild(messageWrapper);
284306

285-
messageElement.update = (msg) => {
307+
messageWrapper.update = (msg) => {
286308
const content =
287309
msg.contentType === 'image' ? `<img src="${textContent}" />` : md.render(msg.content ?? '');
288310
shadow.updateContent(content);
289311
};
290312

291-
return messageElement;
313+
return messageWrapper;
292314
};
293315

294316
export const renderMessage = (msg: Message, config: LocalChatConfig) => {

0 commit comments

Comments
 (0)