Skip to content

Commit b020775

Browse files
authored
Merge branch 'main' into attachment
2 parents 6b35ca9 + 55c2ca4 commit b020775

File tree

28 files changed

+639
-390
lines changed

28 files changed

+639
-390
lines changed

.github/workflows/build.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ jobs:
4747
fail-fast: false
4848
matrix:
4949
include:
50-
- python-version: '3.9'
51-
- python-version: '3.12'
50+
- python-version: '3.10'
51+
- python-version: '3.13'
5252

5353
steps:
5454
- name: Checkout
@@ -129,3 +129,5 @@ jobs:
129129
- uses: actions/checkout@v4
130130
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
131131
- uses: jupyterlab/maintainer-tools/.github/actions/check-links@v1
132+
with:
133+
ignore_links: 'https://www.npmjs.com.*'

CHANGELOG.md

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,52 @@
22

33
<!-- <START NEW CHANGELOG ENTRY> -->
44

5+
## 0.18.1
6+
7+
([Full Changelog](https://github.com/jupyterlab/jupyter-chat/compare/@jupyter/chat@0.18.0...6db821627f81a304e3a08daa0bded3f20df07648))
8+
9+
### Bugs fixed
10+
11+
- Fix the main input height [#284](https://github.com/jupyterlab/jupyter-chat/pull/284) ([@brichet](https://github.com/brichet))
12+
13+
### Contributors to this release
14+
15+
([GitHub contributors page for this release](https://github.com/jupyterlab/jupyter-chat/graphs/contributors?from=2025-09-25&to=2025-09-26&type=c))
16+
17+
[@brichet](https://github.com/search?q=repo%3Ajupyterlab%2Fjupyter-chat+involves%3Abrichet+updated%3A2025-09-25..2025-09-26&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyterlab%2Fjupyter-chat+involves%3Agithub-actions+updated%3A2025-09-25..2025-09-26&type=Issues)
18+
19+
<!-- <END NEW CHANGELOG ENTRY> -->
20+
21+
## 0.18.0
22+
23+
([Full Changelog](https://github.com/jupyterlab/jupyter-chat/compare/@jupyter/chat@0.17.0...e99b0b174f290a369e61e42b074949bb497d089e))
24+
25+
### Enhancements made
26+
27+
- Move the input toolbar below the input prompt [#278](https://github.com/jupyterlab/jupyter-chat/pull/278) ([@brichet](https://github.com/brichet))
28+
- Multichatpanel followup [#275](https://github.com/jupyterlab/jupyter-chat/pull/275) ([@brichet](https://github.com/brichet))
29+
- Adding multi chats panel in `@jupyter/chat` package [#262](https://github.com/jupyterlab/jupyter-chat/pull/262) ([@nakul-py](https://github.com/nakul-py))
30+
31+
### Bugs fixed
32+
33+
- Fix chat focus behavior to allow copy/paste from messages [#268](https://github.com/jupyterlab/jupyter-chat/pull/268) ([@nakul-py](https://github.com/nakul-py))
34+
35+
### Maintenance and upkeep improvements
36+
37+
- Ignore `www.npmjs.com` links [#280](https://github.com/jupyterlab/jupyter-chat/pull/280) ([@jtpio](https://github.com/jtpio))
38+
- Update Materiel UI v7 [#277](https://github.com/jupyterlab/jupyter-chat/pull/277) ([@brichet](https://github.com/brichet))
39+
- Require Python 3.9, test on 3.10 - 3.13 [#274](https://github.com/jupyterlab/jupyter-chat/pull/274) ([@jtpio](https://github.com/jtpio))
40+
41+
### API and Breaking Changes
42+
43+
- Update Materiel UI v7 [#277](https://github.com/jupyterlab/jupyter-chat/pull/277) ([@brichet](https://github.com/brichet))
44+
45+
### Contributors to this release
46+
47+
([GitHub contributors page for this release](https://github.com/jupyterlab/jupyter-chat/graphs/contributors?from=2025-07-29&to=2025-09-25&type=c))
48+
49+
[@brichet](https://github.com/search?q=repo%3Ajupyterlab%2Fjupyter-chat+involves%3Abrichet+updated%3A2025-07-29..2025-09-25&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyterlab%2Fjupyter-chat+involves%3Agithub-actions+updated%3A2025-07-29..2025-09-25&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fjupyter-chat+involves%3Ajtpio+updated%3A2025-07-29..2025-09-25&type=Issues) | [@nakul-py](https://github.com/search?q=repo%3Ajupyterlab%2Fjupyter-chat+involves%3Anakul-py+updated%3A2025-07-29..2025-09-25&type=Issues)
50+
551
## 0.17.0
652

753
([Full Changelog](https://github.com/jupyterlab/jupyter-chat/compare/@jupyter/chat@0.16.0...8a7005fbf7f03d0664611eca667aad2ed5da15ab))
@@ -26,8 +72,6 @@
2672

2773
[@3coins](https://github.com/search?q=repo%3Ajupyterlab%2Fjupyter-chat+involves%3A3coins+updated%3A2025-07-07..2025-07-29&type=Issues) | [@andrii-i](https://github.com/search?q=repo%3Ajupyterlab%2Fjupyter-chat+involves%3Aandrii-i+updated%3A2025-07-07..2025-07-29&type=Issues) | [@brichet](https://github.com/search?q=repo%3Ajupyterlab%2Fjupyter-chat+involves%3Abrichet+updated%3A2025-07-07..2025-07-29&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyterlab%2Fjupyter-chat+involves%3Adependabot+updated%3A2025-07-07..2025-07-29&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyterlab%2Fjupyter-chat+involves%3Agithub-actions+updated%3A2025-07-07..2025-07-29&type=Issues)
2874

29-
<!-- <END NEW CHANGELOG ENTRY> -->
30-
3175
## 0.16.0
3276

3377
([Full Changelog](https://github.com/jupyterlab/jupyter-chat/compare/@jupyter/chat@0.15.0...2b54aa4e427caa9a1b96ff0fdc4b713df2c173ae))

binder/environment.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ channels:
44
dependencies:
55
- jupyterlab >=4.0.0
66
- nodejs >=18,<19
7-
- python >=3.11,<3.12
7+
- python >=3.13,<3.14
88
- yarn >=3,<4
99
# build
1010
- hatchling >=1.5.0

docs/jupyter-chat-example/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "jupyter-chat-example",
3-
"version": "0.17.0",
3+
"version": "0.18.1",
44
"description": "A chat extension providing a chat as example",
55
"keywords": [
66
"jupyter",
@@ -44,7 +44,7 @@
4444
"install:extension": "jlpm build"
4545
},
4646
"dependencies": {
47-
"@jupyter/chat": "^0.17.0",
47+
"@jupyter/chat": "^0.18.1",
4848
"@jupyterlab/application": "^4.2.0",
4949
"@jupyterlab/apputils": "^4.3.0",
5050
"@jupyterlab/notebook": "^4.2.0",

docs/jupyter-chat-example/pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ build-backend = "hatchling.build"
99
name = "jupyter-chat-example"
1010
readme = "README.md"
1111
license = { file = "../../LICENSE" }
12-
requires-python = ">=3.8"
12+
requires-python = ">=3.9"
1313
classifiers = [
1414
"Framework :: Jupyter",
1515
"Framework :: Jupyter :: JupyterLab",
@@ -19,11 +19,11 @@ classifiers = [
1919
"License :: OSI Approved :: BSD License",
2020
"Programming Language :: Python",
2121
"Programming Language :: Python :: 3",
22-
"Programming Language :: Python :: 3.8",
2322
"Programming Language :: Python :: 3.9",
2423
"Programming Language :: Python :: 3.10",
2524
"Programming Language :: Python :: 3.11",
2625
"Programming Language :: Python :: 3.12",
26+
"Programming Language :: Python :: 3.13",
2727
]
2828
dependencies = []
2929
dynamic = ["version", "description", "authors", "urls", "keywords"]

docs/jupyter-chat-example/src/index.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -155,25 +155,25 @@ const plugin: JupyterFrontEndPlugin<void> = {
155155
app.commands.execute('docmanager:open', { path: attachment.value });
156156
});
157157

158-
app.commands.addCommand('chat-example:openChat', {
159-
execute: async () => {
160-
const model = new MyChatModel({
161-
activeCellManager,
162-
selectionWatcher,
163-
documentManager: filebrowser?.model.manager,
164-
config
165-
});
166-
model.name = UUID.uuid4();
167-
panel.addChat(model);
168-
}
169-
});
158+
const createModel = async (): Promise<MultiChatPanel.IAddChatArgs> => {
159+
const model = new MyChatModel({
160+
activeCellManager,
161+
selectionWatcher,
162+
documentManager: filebrowser?.model.manager,
163+
config
164+
});
165+
model.name = UUID.uuid4();
166+
return { model };
167+
};
170168

171169
const panel = new MultiChatPanel({
172170
rmRegistry,
173171
themeManager,
174172
attachmentOpenerRegistry,
175173
welcomeMessage,
176-
createChat: () => app.commands.execute('chat-example:openChat'),
174+
createModel: createModel,
175+
// No op, since the chat are transient, but it need to be provided to have the
176+
// button in the toolbar.
177177
renameChat: async (oldName: string, newName: string) => true
178178
});
179179
app.shell.add(panel, 'left');

lerna.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
33
"useWorkspaces": true,
4-
"version": "0.17.0",
4+
"version": "0.18.1",
55
"npmClient": "jlpm",
66
"useNx": true
77
}

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "jupyter-chat-root",
3-
"version": "0.17.0",
3+
"version": "0.18.1",
44
"description": "A chat package for Jupyterlab extension",
55
"private": true,
66
"keywords": [
@@ -26,9 +26,9 @@
2626
"docs/jupyter-chat-example"
2727
],
2828
"scripts": {
29-
"build": "lerna run build --stream --scope jupyterlab-chat-extension --include-filtered-dependencies",
29+
"build": "lerna run build --stream --scope jupyterlab-chat-extension --include-dependencies",
3030
"build:core": "lerna run build --stream --scope \"@jupyter/chat\"",
31-
"build:lite-docs": "lerna run build --stream --scope jupyter-chat-example --include-filtered-dependencies",
31+
"build:lite-docs": "lerna run build --stream --scope jupyter-chat-example --include-dependencies",
3232
"build:prod": "lerna run build:prod --stream",
3333
"clean": "lerna run clean",
3434
"clean:all": "lerna run clean:all",

packages/jupyter-chat/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@jupyter/chat",
3-
"version": "0.17.0",
3+
"version": "0.18.1",
44
"description": "A package that provides UI components that can be used to create a chat in a Jupyterlab extension.",
55
"keywords": [
66
"jupyter",
@@ -62,8 +62,8 @@
6262
"@lumino/disposable": "^2.0.0",
6363
"@lumino/polling": "^2.0.0",
6464
"@lumino/signaling": "^2.0.0",
65-
"@mui/icons-material": "^5.11.0",
66-
"@mui/material": "^5.11.0",
65+
"@mui/icons-material": "^7.3.2",
66+
"@mui/material": "^7.3.2",
6767
"clsx": "^2.1.0",
6868
"react": "^18.2.0",
6969
"react-dom": "^18.2.0"

packages/jupyter-chat/src/components/input/chat-input.tsx

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import {
77
Autocomplete,
88
AutocompleteInputChangeReason,
99
Box,
10-
InputAdornment,
1110
SxProps,
1211
TextField,
13-
Theme
12+
Theme,
13+
Toolbar
1414
} from '@mui/material';
1515
import clsx from 'clsx';
1616
import React, { useEffect, useRef, useState } from 'react';
@@ -26,6 +26,8 @@ import { IChatCommandRegistry } from '../../registers';
2626
import { IAttachment } from '../../types';
2727

2828
const INPUT_BOX_CLASS = 'jp-chat-input-container';
29+
const INPUT_TEXTFIELD_CLASS = 'jp-chat-input-textfield';
30+
const INPUT_COMPONENT_CLASS = 'jp-chat-input-component';
2931
const INPUT_TOOLBAR_CLASS = 'jp-chat-input-toolbar';
3032

3133
export function ChatInput(props: ChatInput.IProps): JSX.Element {
@@ -185,28 +187,29 @@ export function ChatInput(props: ChatInput.IProps): JSX.Element {
185187
<Autocomplete
186188
{...chatCommands.autocompleteProps}
187189
// ensure the autocomplete popup always renders on top
188-
componentsProps={{
190+
slotProps={{
189191
popper: {
190192
placement: 'top'
191193
},
192194
paper: {
193195
sx: {
194196
border: '1px solid lightgray'
195197
}
196-
}
197-
}}
198-
ListboxProps={{
199-
sx: {
200-
'& .MuiAutocomplete-option': {
201-
padding: 2
198+
},
199+
listbox: {
200+
sx: {
201+
'& .MuiAutocomplete-option': {
202+
padding: 2
203+
}
202204
}
203205
}
204206
}}
205207
renderInput={params => (
206208
<TextField
207209
{...params}
208210
fullWidth
209-
variant="outlined"
211+
variant="filled"
212+
className={INPUT_TEXTFIELD_CLASS}
210213
multiline
211214
onKeyDown={handleKeyDown}
212215
placeholder="Start chatting"
@@ -215,23 +218,13 @@ export function ChatInput(props: ChatInput.IProps): JSX.Element {
215218
onSelect={() =>
216219
(model.cursorIndex = inputRef.current?.selectionStart ?? null)
217220
}
218-
InputProps={{
219-
...params.InputProps,
220-
endAdornment: (
221-
<InputAdornment position="end" className={INPUT_TOOLBAR_CLASS}>
222-
{toolbarElements.map(item => (
223-
<item.element
224-
model={model}
225-
chatCommandRegistry={props.chatCommandRegistry}
226-
/>
227-
))}
228-
</InputAdornment>
229-
)
230-
}}
231-
FormHelperTextProps={{
232-
sx: { marginLeft: 'auto', marginRight: 0 }
221+
slotProps={{
222+
input: {
223+
...params.InputProps,
224+
className: INPUT_COMPONENT_CLASS
225+
}
233226
}}
234-
helperText={input.length > 2 ? helperText : ' '}
227+
label={input.length > 2 ? helperText : ' '}
235228
/>
236229
)}
237230
inputValue={input}
@@ -248,6 +241,14 @@ export function ChatInput(props: ChatInput.IProps): JSX.Element {
248241
}
249242
}}
250243
/>
244+
<Toolbar className={INPUT_TOOLBAR_CLASS}>
245+
{toolbarElements.map(item => (
246+
<item.element
247+
model={model}
248+
chatCommandRegistry={props.chatCommandRegistry}
249+
/>
250+
))}
251+
</Toolbar>
251252
</Box>
252253
);
253254
}

0 commit comments

Comments
 (0)