@datalayer/jupyter-react 0.2.2 → 0.3.1
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.
- package/README.md +8 -6
- package/lib/components/cell/Cell.d.ts +1 -1
- package/lib/components/cell/CellAdapter.js +51 -6
- package/lib/components/cell/CellAdapter.js.map +1 -1
- package/lib/components/codemirror/CodeMirrorOutputToolbar.d.ts +1 -1
- package/lib/components/commands/CommandsState.d.ts +1 -1
- package/lib/components/console/Console.js +2 -2
- package/lib/components/console/Console.js.map +1 -1
- package/lib/components/console/ConsoleAdapter.d.ts +2 -2
- package/lib/components/console/ConsoleAdapter.js +65 -21
- package/lib/components/console/ConsoleAdapter.js.map +1 -1
- package/lib/components/console/ConsoleState.d.ts +1 -1
- package/lib/components/filebrowser/FileBrowserAdapter.js +20 -3
- package/lib/components/filebrowser/FileBrowserAdapter.js.map +1 -1
- package/lib/components/filebrowser/FileBrowserState.d.ts +1 -1
- package/lib/components/notebook/Notebook.d.ts +1 -1
- package/lib/components/notebook/NotebookAdapter.js +47 -5
- package/lib/components/notebook/NotebookAdapter.js.map +1 -1
- package/lib/components/notebook/NotebookCommands.js +2 -1
- package/lib/components/notebook/NotebookCommands.js.map +1 -1
- package/lib/components/notebook/NotebookState.d.ts +13 -12
- package/lib/components/notebook/NotebookState.js +6 -0
- package/lib/components/notebook/NotebookState.js.map +1 -1
- package/lib/components/notebook/cell/metadata/CellMetadataEditor.d.ts +1 -1
- package/lib/components/notebook/cell/sidebar/base/CellSidebarContentFactory.d.ts +1 -1
- package/lib/components/notebook/cell/sidebar/base/CellSidebarContentFactory.js +1 -1
- package/lib/components/notebook/cell/sidebar/base/CellSidebarContentFactory.js.map +1 -1
- package/lib/components/notebook/cell/sidebar/base/CellSidebarWidget.d.ts +1 -1
- package/lib/components/notebook/marked/marked.d.ts +2 -1
- package/lib/components/notebook/marked/marked.js +17 -25
- package/lib/components/notebook/marked/marked.js.map +1 -1
- package/lib/components/output/Output.d.ts +1 -1
- package/lib/components/output/Output.js +0 -6
- package/lib/components/output/Output.js.map +1 -1
- package/lib/components/output/OutputRenderer.d.ts +1 -1
- package/lib/components/output/OutputState.d.ts +1 -1
- package/lib/components/settings/SettingsState.d.ts +1 -1
- package/lib/components/terminal/TerminalState.d.ts +1 -1
- package/lib/examples/Cell.js +2 -2
- package/lib/examples/Cell.js.map +1 -1
- package/lib/examples/Console.d.ts +1 -0
- package/lib/examples/Console.js +11 -0
- package/lib/examples/Console.js.map +1 -0
- package/lib/examples/Notebook.js +4 -3
- package/lib/examples/Notebook.js.map +1 -1
- package/lib/examples/notebooks/NotebookExample1.ipynb.json +2 -2
- package/lib/examples/notebooks/NotebookExample2.ipynb.json +2 -2
- package/lib/examples/toolbars/NotebookToolbarStatus.d.ts +4 -0
- package/lib/examples/toolbars/NotebookToolbarStatus.js +9 -0
- package/lib/examples/toolbars/NotebookToolbarStatus.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/jupyter/Jupyter.d.ts +2 -2
- package/lib/jupyter/Jupyter.js +1 -1
- package/lib/jupyter/Jupyter.js.map +1 -1
- package/lib/jupyter/JupyterConfig.d.ts +1 -1
- package/lib/jupyter/JupyterConfig.js +1 -1
- package/lib/jupyter/JupyterConfig.js.map +1 -1
- package/lib/jupyter/JupyterContext.d.ts +2 -1
- package/lib/jupyter/JupyterContext.js +42 -25
- package/lib/jupyter/JupyterContext.js.map +1 -1
- package/lib/jupyter/ipywidgets/plotly/Figure.d.ts +3 -3
- package/lib/jupyter/ipywidgets/plotly/Figure.js +2 -1
- package/lib/jupyter/ipywidgets/plotly/Figure.js.map +1 -1
- package/lib/jupyter/lab/__tests__/datalayer.spec.d.ts +0 -3
- package/lib/jupyter/lab/__tests__/datalayer.spec.js +0 -3
- package/lib/jupyter/lab/__tests__/datalayer.spec.js.map +1 -1
- package/lib/jupyter/lab/index.js +5 -5
- package/lib/jupyter/lab/index.js.map +1 -1
- package/lib/jupyter/lite/LiteServer.js.map +1 -1
- package/lib/jupyter/lumino/LuminoReactPortal.d.ts +1 -1
- package/lib/jupyter/services/kernel/Kernel.d.ts +1 -1
- package/lib/jupyter/services/kernel/Kernel.js +2 -2
- package/lib/jupyter/services/kernel/Kernel.js.map +1 -1
- package/package.json +62 -64
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
[](https://datalayer.io)
|
|
2
2
|
|
|
3
|
+
[](https://github.com/sponsors/datalayer)
|
|
4
|
+
|
|
3
5
|
# Jupyter React
|
|
4
6
|
|
|
5
7
|
> Jupyter React is a set of [React.js](https://reactjs.org) components that allow a frontend developer to build data products compatible with the [Jupyter](https://jupyter.org) ecosystem. The user interface delivers executable notebooks and cells.
|
|
@@ -7,17 +9,17 @@
|
|
|
7
9
|
The below image shows a gallery of the available React.js components ready to be used in you custom application. These open source components are used to build the online [Datalayer service](https://datalayer.io), a collaborative platform for data analysis.
|
|
8
10
|
|
|
9
11
|
<div align="center" style="text-align: center">
|
|
10
|
-
<img alt="Jupyter
|
|
12
|
+
<img alt="Jupyter UI Gallery" src="https://datalayer-jupyter-examples.s3.amazonaws.com/jupyter-react-gallery.gif" />
|
|
11
13
|
</div>
|
|
12
14
|
|
|
13
|
-
The Jupyter(Lab) notebook is a tool that allows data scientist to analyse dataset. However, it is not easy to create a custom user interface integrated in an existing application. [Jupyter
|
|
15
|
+
The Jupyter(Lab) notebook is a tool that allows data scientist to analyse dataset. However, it is not easy to create a custom user interface integrated in an existing application. [Jupyter UI](https://jupyter-react.datalayer.tech), an open-source library, fills that gap and provides components that a developer can easily integrate in any React.js application.
|
|
14
16
|
|
|
15
17
|
In terms of technical stack, the Jupyter(Lab) user interface is built on top of Lumino, which is an imperative way to build user interface and **can not** be consumed by industry standard declarative frameworks like React.js. As a user interface developer, if you want to create a custom data product on top of Jupyter, you have to stick to Lumino and carry-on the full notebook interface not tailored to your specific needs. This is not what you want. You just want to expose what you need, you want to develop with your favorite toolkit (like React.js) and you also want to integrate on a per-component basis the Jupyter functionality in your application.
|
|
16
18
|
|
|
17
19
|
Although a developer can embed a React.js component into JupyterLab, the reverse is not possible: you can not embed JupyterLab into a React.js application. To solve that issue, Jupyter-React ships components to easily create a React.js data product compatible with the Jupyter ecosystem. Those components can be used in any React.js application, and also in static websites like Docusaurus, Next.js or Remix. They wrap underneath the JupyterLab code and allow developing React.js applications with code execution capability. State management is based on Redux, and Mobx is to be added.
|
|
18
20
|
|
|
19
21
|
<div align="center" style="text-align: center">
|
|
20
|
-
<img alt="Jupyter
|
|
22
|
+
<img alt="Jupyter UI Communication" src="https://datalayer-jupyter-examples.s3.amazonaws.com/jupyter-react-communication.png" />
|
|
21
23
|
</div>
|
|
22
24
|
|
|
23
25
|
IPyWidgets are supported (the Comm feature needs to be fixed). JupyterLite and PyScript support is on the roadmap. Autocompletion is also available.
|
|
@@ -27,11 +29,11 @@ You can find more context reading this [abstract](https://fosdem.org/2022/schedu
|
|
|
27
29
|
As a React.js developer, you just write a few lines of code get a live notebook or live cell in your application.
|
|
28
30
|
|
|
29
31
|
<div align="center" style="text-align: center">
|
|
30
|
-
<img alt="Jupyter
|
|
32
|
+
<img alt="Jupyter UI Slate" src="https://datalayer-jupyter-examples.s3.amazonaws.com/jupyter-react-snippet.png" />
|
|
31
33
|
</div>
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
Jupyter UI can be used in any React.js application. Install the latest `@datalayer/jupyter-react` npm package and get inspired by the [examples](https://github.com/datalayer/jupyter-ui/tree/main/examples) in this repository.
|
|
34
36
|
|
|
35
37
|
<div align="center" style="text-align: center">
|
|
36
|
-
<img alt="Jupyter
|
|
38
|
+
<img alt="Jupyter UI Slate" src="https://datalayer-jupyter-examples.s3.amazonaws.com/jupyter-react-notebook.png" />
|
|
37
39
|
</div>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { BoxPanel, Widget } from '@lumino/widgets';
|
|
2
2
|
import { CommandRegistry } from '@lumino/commands';
|
|
3
3
|
import { SessionContext, Toolbar, ToolbarButton } from '@jupyterlab/apputils';
|
|
4
|
-
import { CodeCellModel, CodeCell } from '@jupyterlab/cells';
|
|
5
|
-
import { CodeMirrorMimeTypeService } from '@jupyterlab/codemirror';
|
|
4
|
+
import { CodeCellModel, CodeCell, Cell } from '@jupyterlab/cells';
|
|
5
|
+
import { CodeMirrorMimeTypeService, EditorLanguageRegistry, CodeMirrorEditorFactory, EditorExtensionRegistry, EditorThemeRegistry, ybinding } from '@jupyterlab/codemirror';
|
|
6
6
|
import { runIcon } from '@jupyterlab/ui-components';
|
|
7
7
|
import { Completer, CompleterModel, CompletionHandler, ProviderReconciliator, KernelCompleterProvider } from '@jupyterlab/completer';
|
|
8
8
|
import { RenderMimeRegistry, standardRendererFactories as initialFactories } from '@jupyterlab/rendermime';
|
|
@@ -30,14 +30,52 @@ export class CellAdapter {
|
|
|
30
30
|
this._sessionContext = new SessionContext({
|
|
31
31
|
sessionManager,
|
|
32
32
|
specsManager,
|
|
33
|
-
name: 'Jupyter
|
|
33
|
+
name: 'Jupyter UI',
|
|
34
34
|
kernelPreference: {
|
|
35
35
|
autoStartDefault: true,
|
|
36
36
|
shouldStart: true,
|
|
37
|
-
name: '
|
|
37
|
+
name: 'python',
|
|
38
38
|
}
|
|
39
39
|
});
|
|
40
|
-
const
|
|
40
|
+
const themes = new EditorThemeRegistry();
|
|
41
|
+
for (const theme of EditorThemeRegistry.getDefaultThemes()) {
|
|
42
|
+
themes.addTheme(theme);
|
|
43
|
+
}
|
|
44
|
+
const editorExtensions = () => {
|
|
45
|
+
const registry = new EditorExtensionRegistry();
|
|
46
|
+
for (const extensionFactory of EditorExtensionRegistry.getDefaultExtensions({ themes })) {
|
|
47
|
+
registry.addExtension(extensionFactory);
|
|
48
|
+
}
|
|
49
|
+
registry.addExtension({
|
|
50
|
+
name: 'shared-model-binding',
|
|
51
|
+
factory: options => {
|
|
52
|
+
const sharedModel = options.model.sharedModel;
|
|
53
|
+
return EditorExtensionRegistry.createImmutableExtension(ybinding({
|
|
54
|
+
ytext: sharedModel.ysource,
|
|
55
|
+
undoManager: sharedModel.undoManager ?? undefined
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return registry;
|
|
60
|
+
};
|
|
61
|
+
const languages = new EditorLanguageRegistry();
|
|
62
|
+
// Register default languages.
|
|
63
|
+
for (const language of EditorLanguageRegistry.getDefaultLanguages()) {
|
|
64
|
+
languages.addLanguage(language);
|
|
65
|
+
}
|
|
66
|
+
// Add Jupyter Markdown flavor here to support code block highlighting.
|
|
67
|
+
languages.addLanguage({
|
|
68
|
+
name: 'ipythongfm',
|
|
69
|
+
mime: 'text/x-ipythongfm',
|
|
70
|
+
load: async () => {
|
|
71
|
+
// TODO: add support for LaTeX
|
|
72
|
+
const m = await import('@codemirror/lang-markdown');
|
|
73
|
+
return m.markdown({
|
|
74
|
+
codeLanguages: (info) => languages.findBest(info)
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
const mimeService = new CodeMirrorMimeTypeService(languages);
|
|
41
79
|
const commands = new CommandRegistry();
|
|
42
80
|
const useCapture = true;
|
|
43
81
|
document.addEventListener('keydown', event => {
|
|
@@ -50,6 +88,10 @@ export class CellAdapter {
|
|
|
50
88
|
mimeTypes: [WIDGET_MIMETYPE],
|
|
51
89
|
createRenderer: (options) => new WidgetRenderer(options, iPyWidgetsClassicManager),
|
|
52
90
|
}, 0);
|
|
91
|
+
const factoryService = new CodeMirrorEditorFactory({
|
|
92
|
+
extensions: editorExtensions(),
|
|
93
|
+
languages
|
|
94
|
+
});
|
|
53
95
|
this._codeCell = new CodeCell({
|
|
54
96
|
rendermime,
|
|
55
97
|
model: new CodeCellModel({
|
|
@@ -58,7 +100,10 @@ export class CellAdapter {
|
|
|
58
100
|
source: source,
|
|
59
101
|
metadata: {}
|
|
60
102
|
})
|
|
61
|
-
})
|
|
103
|
+
}),
|
|
104
|
+
contentFactory: new Cell.ContentFactory({
|
|
105
|
+
editorFactory: factoryService.newInlineEditor.bind(factoryService)
|
|
106
|
+
}),
|
|
62
107
|
});
|
|
63
108
|
this._codeCell.addClass('dla-JupyterCell');
|
|
64
109
|
this._codeCell.initializeState();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellAdapter.js","sourceRoot":"","sources":["../../../src/components/cell/CellAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"CellAdapter.js","sourceRoot":"","sources":["../../../src/components/cell/CellAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,11 @@ import Lumino from '../../jupyter/lumino/Lumino';
|
|
|
4
4
|
import ConsoleAdapter from './ConsoleAdapter';
|
|
5
5
|
import './Console.css';
|
|
6
6
|
export const Console = () => {
|
|
7
|
-
const {
|
|
7
|
+
const { serviceManager } = useJupyter();
|
|
8
8
|
if (!serviceManager) {
|
|
9
9
|
return _jsx(_Fragment, { children: "Loading..." });
|
|
10
10
|
}
|
|
11
|
-
const consoleAdapter = new ConsoleAdapter(
|
|
11
|
+
const consoleAdapter = new ConsoleAdapter(serviceManager);
|
|
12
12
|
return _jsx(Lumino, { children: consoleAdapter.panel });
|
|
13
13
|
};
|
|
14
14
|
export default Console;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Console.js","sourceRoot":"","sources":["../../../src/components/console/Console.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,MAAM,MAAM,6BAA6B,CAAC;AACjD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,OAAO,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE;IAC1B,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"Console.js","sourceRoot":"","sources":["../../../src/components/console/Console.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,MAAM,MAAM,6BAA6B,CAAC;AACjD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,OAAO,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE;IAC1B,MAAM,EAAE,cAAc,EAAE,GAAG,UAAU,EAAE,CAAC;IACxC,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,2CAAe,CAAC;KACxB;IACD,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,cAAc,CAAC,CAAC;IAC1D,OAAO,KAAC,MAAM,cAAE,cAAc,CAAC,KAAK,GAAU,CAAA;AAChD,CAAC,CAAA;AAED,eAAe,OAAO,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { BoxPanel } from '@lumino/widgets';
|
|
2
2
|
import { ServiceManager } from '@jupyterlab/services';
|
|
3
3
|
declare class ConsoleAdapter {
|
|
4
|
-
private
|
|
5
|
-
constructor(
|
|
4
|
+
private _panel;
|
|
5
|
+
constructor(serviceManager: ServiceManager);
|
|
6
6
|
startConsole(path: string, serviceManager: ServiceManager.IManager, panel: BoxPanel): void;
|
|
7
7
|
get panel(): BoxPanel;
|
|
8
8
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { RenderMimeRegistry, standardRendererFactories as initialFactories } from '@jupyterlab/rendermime';
|
|
2
2
|
import { CommandRegistry } from '@lumino/commands';
|
|
3
|
+
import { CodeMirrorEditorFactory, CodeMirrorMimeTypeService, EditorLanguageRegistry, EditorExtensionRegistry, EditorThemeRegistry, ybinding } from '@jupyterlab/codemirror';
|
|
3
4
|
import { BoxPanel } from '@lumino/widgets';
|
|
4
|
-
import { editorServices } from '@jupyterlab/codemirror';
|
|
5
5
|
import { ConsolePanel } from '@jupyterlab/console';
|
|
6
6
|
class ConsoleAdapter {
|
|
7
|
-
|
|
8
|
-
constructor(
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
7
|
+
_panel;
|
|
8
|
+
constructor(serviceManager) {
|
|
9
|
+
this._panel = new BoxPanel();
|
|
10
|
+
this._panel.direction = 'top-to-bottom';
|
|
11
|
+
this._panel.spacing = 0;
|
|
12
|
+
this._panel.addClass('dla-JupyterLab-Console');
|
|
13
13
|
serviceManager.ready.then(() => {
|
|
14
|
-
this.startConsole('console-path', serviceManager, this.
|
|
14
|
+
this.startConsole('console-path', serviceManager, this._panel);
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
17
|
startConsole(path, serviceManager, panel) {
|
|
@@ -19,23 +19,67 @@ class ConsoleAdapter {
|
|
|
19
19
|
document.addEventListener('keydown', event => {
|
|
20
20
|
commands.processKeydownEvent(event);
|
|
21
21
|
});
|
|
22
|
+
const themes = new EditorThemeRegistry();
|
|
23
|
+
for (const theme of EditorThemeRegistry.getDefaultThemes()) {
|
|
24
|
+
themes.addTheme(theme);
|
|
25
|
+
}
|
|
26
|
+
const editorExtensions = () => {
|
|
27
|
+
const registry = new EditorExtensionRegistry();
|
|
28
|
+
for (const extensionFactory of EditorExtensionRegistry.getDefaultExtensions({ themes })) {
|
|
29
|
+
registry.addExtension(extensionFactory);
|
|
30
|
+
}
|
|
31
|
+
registry.addExtension({
|
|
32
|
+
name: 'shared-model-binding',
|
|
33
|
+
factory: options => {
|
|
34
|
+
const sharedModel = options.model.sharedModel;
|
|
35
|
+
return EditorExtensionRegistry.createImmutableExtension(ybinding({
|
|
36
|
+
ytext: sharedModel.ysource,
|
|
37
|
+
undoManager: sharedModel.undoManager ?? undefined
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return registry;
|
|
42
|
+
};
|
|
43
|
+
const languages = new EditorLanguageRegistry();
|
|
44
|
+
// Register default languages.
|
|
45
|
+
for (const language of EditorLanguageRegistry.getDefaultLanguages()) {
|
|
46
|
+
languages.addLanguage(language);
|
|
47
|
+
}
|
|
48
|
+
// Add Jupyter Markdown flavor here to support code block highlighting.
|
|
49
|
+
languages.addLanguage({
|
|
50
|
+
name: 'ipythongfm',
|
|
51
|
+
mime: 'text/x-ipythongfm',
|
|
52
|
+
load: async () => {
|
|
53
|
+
// TODO: add support for LaTeX
|
|
54
|
+
const m = await import('@codemirror/lang-markdown');
|
|
55
|
+
return m.markdown({
|
|
56
|
+
codeLanguages: (info) => languages.findBest(info)
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
const factoryService = new CodeMirrorEditorFactory({
|
|
61
|
+
extensions: editorExtensions(),
|
|
62
|
+
languages
|
|
63
|
+
});
|
|
22
64
|
const rendermime = new RenderMimeRegistry({ initialFactories });
|
|
23
|
-
const
|
|
65
|
+
const mimeTypeService = new CodeMirrorMimeTypeService(languages);
|
|
66
|
+
const editorFactory = factoryService.newInlineEditor;
|
|
24
67
|
const contentFactory = new ConsolePanel.ContentFactory({ editorFactory });
|
|
25
|
-
const
|
|
26
|
-
rendermime,
|
|
68
|
+
const consolePanel = new ConsolePanel({
|
|
27
69
|
manager: serviceManager,
|
|
70
|
+
rendermime,
|
|
28
71
|
path,
|
|
29
72
|
contentFactory,
|
|
30
|
-
mimeTypeService
|
|
73
|
+
mimeTypeService,
|
|
31
74
|
kernelPreference: {
|
|
32
75
|
shouldStart: true,
|
|
33
|
-
name: '
|
|
76
|
+
name: 'python',
|
|
77
|
+
// autoStartDefault: true,
|
|
34
78
|
}
|
|
35
79
|
});
|
|
36
|
-
|
|
37
|
-
BoxPanel.setStretch(
|
|
38
|
-
panel.addWidget(
|
|
80
|
+
consolePanel.title.label = 'Console';
|
|
81
|
+
BoxPanel.setStretch(consolePanel, 1);
|
|
82
|
+
panel.addWidget(consolePanel);
|
|
39
83
|
window.addEventListener('resize', () => {
|
|
40
84
|
panel.update();
|
|
41
85
|
});
|
|
@@ -45,14 +89,14 @@ class ConsoleAdapter {
|
|
|
45
89
|
commands.addCommand(command, {
|
|
46
90
|
label: 'Clear',
|
|
47
91
|
execute: () => {
|
|
48
|
-
|
|
92
|
+
consolePanel.console.clear();
|
|
49
93
|
}
|
|
50
94
|
});
|
|
51
95
|
command = 'console:execute';
|
|
52
96
|
commands.addCommand(command, {
|
|
53
97
|
label: 'Execute Prompt',
|
|
54
98
|
execute: () => {
|
|
55
|
-
return
|
|
99
|
+
return consolePanel.console.execute();
|
|
56
100
|
}
|
|
57
101
|
});
|
|
58
102
|
commands.addKeyBinding({ command, selector, keys: ['Enter'] });
|
|
@@ -60,7 +104,7 @@ class ConsoleAdapter {
|
|
|
60
104
|
commands.addCommand(command, {
|
|
61
105
|
label: 'Execute Cell (forced)',
|
|
62
106
|
execute: () => {
|
|
63
|
-
return
|
|
107
|
+
return consolePanel.console.execute(true);
|
|
64
108
|
}
|
|
65
109
|
});
|
|
66
110
|
commands.addKeyBinding({ command, selector, keys: ['Shift Enter'] });
|
|
@@ -68,13 +112,13 @@ class ConsoleAdapter {
|
|
|
68
112
|
commands.addCommand(command, {
|
|
69
113
|
label: 'Insert Line Break',
|
|
70
114
|
execute: () => {
|
|
71
|
-
|
|
115
|
+
consolePanel.console.insertLinebreak();
|
|
72
116
|
}
|
|
73
117
|
});
|
|
74
118
|
commands.addKeyBinding({ command, selector, keys: ['Ctrl Enter'] });
|
|
75
119
|
}
|
|
76
120
|
get panel() {
|
|
77
|
-
return this.
|
|
121
|
+
return this._panel;
|
|
78
122
|
}
|
|
79
123
|
}
|
|
80
124
|
export default ConsoleAdapter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleAdapter.js","sourceRoot":"","sources":["../../../src/components/console/ConsoleAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3G,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ConsoleAdapter.js","sourceRoot":"","sources":["../../../src/components/console/ConsoleAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3G,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC5K,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,cAAc;IACV,MAAM,CAAW;IAEzB,YAAY,cAA8B;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;QAC/C,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;YAC7B,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CACV,IAAY,EACZ,cAAuC,EACvC,KAAe;QAEf,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;YAC3C,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,EAAE;YAC1D,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACxB;QACD,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC5B,MAAM,QAAQ,GAAG,IAAI,uBAAuB,EAAE,CAAC;YAC/C,KAAK,MAAM,gBAAgB,IAAI,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBACvF,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;aACzC;YACD,QAAQ,CAAC,YAAY,CAAC;gBACpB,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,OAAO,CAAC,EAAE;oBACjB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,WAAqB,CAAC;oBACxD,OAAO,uBAAuB,CAAC,wBAAwB,CACrD,QAAQ,CAAC;wBACP,KAAK,EAAE,WAAW,CAAC,OAAO;wBAC1B,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,SAAS;qBAClD,CAAC,CACH,CAAC;gBACJ,CAAC;aACF,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAA;QACD,MAAM,SAAS,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC/C,8BAA8B;QAC9B,KAAK,MAAM,QAAQ,IAAI,sBAAsB,CAAC,mBAAmB,EAAE,EAAE;YACnE,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SACjC;QACD,uEAAuE;QACvE,SAAS,CAAC,WAAW,CAAC;YACpB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,8BAA8B;gBAC9B,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;gBACpD,OAAO,CAAC,CAAC,QAAQ,CAAC;oBAChB,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAQ;iBACjE,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,uBAAuB,CAAC;YACjD,UAAU,EAAE,gBAAgB,EAAE;YAC9B,SAAS;SACV,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,cAAc,CAAC,eAAe,CAAC;QACrD,MAAM,cAAc,GAAG,IAAI,YAAY,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;YACpC,OAAO,EAAE,cAAc;YACvB,UAAU;YACV,IAAI;YACJ,cAAc;YACd,eAAe;YACf,gBAAgB,EAAE;gBAChB,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,QAAQ;gBACtB,iCAAiC;aAC1B;SACF,CAAC,CAAC;QACH,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QACrC,QAAQ,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QACrC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC9B,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YACrC,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QACpC,IAAI,OAAe,CAAC;QACpB,OAAO,GAAG,eAAe,CAAC;QAC1B,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE;YAC3B,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,GAAG,EAAE;gBACZ,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC/B,CAAC;SACF,CAAC,CAAC;QACH,OAAO,GAAG,iBAAiB,CAAC;QAC5B,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE;YAC3B,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACxC,CAAC;SACF,CAAC,CAAC;QACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,GAAG,wBAAwB,CAAC;QACnC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE;YAC3B,KAAK,EAAE,uBAAuB;YAC9B,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;SACF,CAAC,CAAC;QACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,GAAG,mBAAmB,CAAC;QAC9B,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE;YAC3B,KAAK,EAAE,mBAAmB;YAC1B,OAAO,EAAE,GAAG,EAAE;gBACZ,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YACzC,CAAC;SACF,CAAC,CAAC;QACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CAEF;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { Signal } from '@lumino/signaling';
|
|
|
4
4
|
import { DockPanel, Menu, SplitPanel } from '@lumino/widgets';
|
|
5
5
|
import { ServiceManager } from '@jupyterlab/services';
|
|
6
6
|
import { Dialog, ToolbarButton, showDialog } from '@jupyterlab/apputils';
|
|
7
|
-
import { CodeMirrorEditorFactory, CodeMirrorMimeTypeService } from '@jupyterlab/codemirror';
|
|
7
|
+
import { CodeMirrorEditorFactory, CodeMirrorMimeTypeService, EditorLanguageRegistry } from '@jupyterlab/codemirror';
|
|
8
8
|
import { DocumentManager } from '@jupyterlab/docmanager';
|
|
9
9
|
import { DocumentRegistry } from '@jupyterlab/docregistry';
|
|
10
10
|
import { FileBrowser, FilterFileBrowserModel } from '@jupyterlab/filebrowser';
|
|
@@ -46,9 +46,26 @@ class FileBrowserAdapter {
|
|
|
46
46
|
manager,
|
|
47
47
|
opener
|
|
48
48
|
});
|
|
49
|
+
const languages = new EditorLanguageRegistry();
|
|
50
|
+
EditorLanguageRegistry.getDefaultLanguages()
|
|
51
|
+
.filter(language => ['ipython', 'julia', 'python'].includes(language.name.toLowerCase()))
|
|
52
|
+
.forEach(language => {
|
|
53
|
+
languages.addLanguage(language);
|
|
54
|
+
});
|
|
55
|
+
// Language for Markdown cells
|
|
56
|
+
languages.addLanguage({
|
|
57
|
+
name: 'ipythongfm',
|
|
58
|
+
mime: 'text/x-ipythongfm',
|
|
59
|
+
load: async () => {
|
|
60
|
+
const m = await import('@codemirror/lang-markdown');
|
|
61
|
+
return m.markdown({
|
|
62
|
+
codeLanguages: (info) => languages.findBest(info)
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
});
|
|
49
66
|
const editorServices = {
|
|
50
67
|
factoryService: new CodeMirrorEditorFactory(),
|
|
51
|
-
mimeTypeService: new CodeMirrorMimeTypeService()
|
|
68
|
+
mimeTypeService: new CodeMirrorMimeTypeService(languages)
|
|
52
69
|
};
|
|
53
70
|
const wFactory = new FileEditorFactory({
|
|
54
71
|
editorServices,
|
|
@@ -244,7 +261,7 @@ class FileBrowserAdapter {
|
|
|
244
261
|
const selector = document.createElement('select');
|
|
245
262
|
const option0 = document.createElement('option');
|
|
246
263
|
option0.value = 'python';
|
|
247
|
-
option0.text = 'Python
|
|
264
|
+
option0.text = 'Python';
|
|
248
265
|
selector.appendChild(option0);
|
|
249
266
|
const option1 = document.createElement('option');
|
|
250
267
|
option1.value = 'julia';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileBrowserAdapter.js","sourceRoot":"","sources":["../../../src/components/filebrowser/FileBrowserAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAU,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"FileBrowserAdapter.js","sourceRoot":"","sources":["../../../src/components/filebrowser/FileBrowserAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import * as nbformat from '@jupyterlab/nbformat';
|
|
|
4
4
|
import { Kernel } from "./../../jupyter/services/kernel/Kernel";
|
|
5
5
|
import { CellSidebarProps } from './cell/sidebar/base/CellSidebarWidget';
|
|
6
6
|
import './Notebook.css';
|
|
7
|
-
export
|
|
7
|
+
export type INotebookProps = {
|
|
8
8
|
uid: string;
|
|
9
9
|
path: string;
|
|
10
10
|
model: nbformat.INotebookContent;
|
|
@@ -6,7 +6,7 @@ import { standardRendererFactories, RenderMimeRegistry } from '@jupyterlab/rende
|
|
|
6
6
|
import { rendererFactory as jsonRendererFactory } from '@jupyterlab/json-extension';
|
|
7
7
|
import { rendererFactory as javascriptRendererFactory } from '@jupyterlab/javascript-extension';
|
|
8
8
|
import { NotebookPanel, NotebookWidgetFactory, NotebookTracker, NotebookActions } from '@jupyterlab/notebook';
|
|
9
|
-
import { CodeMirrorEditorFactory, CodeMirrorMimeTypeService } from '@jupyterlab/codemirror';
|
|
9
|
+
import { CodeMirrorEditorFactory, CodeMirrorMimeTypeService, EditorLanguageRegistry, EditorExtensionRegistry, EditorThemeRegistry, ybinding } from '@jupyterlab/codemirror';
|
|
10
10
|
import { Completer, CompleterModel, CompletionHandler, ProviderReconciliator, KernelCompleterProvider } from '@jupyterlab/completer';
|
|
11
11
|
import { MathJaxTypesetter } from '@jupyterlab/mathjax2';
|
|
12
12
|
// import { newUuid } from './../../jupyter/utils/Ids';
|
|
@@ -64,24 +64,66 @@ export class NotebookAdapter {
|
|
|
64
64
|
rendererFactories.push(jsonRendererFactory);
|
|
65
65
|
rendererFactories.push(javascriptRendererFactory);
|
|
66
66
|
this._renderers.map(renderer => rendererFactories.push(renderer));
|
|
67
|
+
const languages = new EditorLanguageRegistry();
|
|
68
|
+
// Register default languages.
|
|
69
|
+
for (const language of EditorLanguageRegistry.getDefaultLanguages()) {
|
|
70
|
+
languages.addLanguage(language);
|
|
71
|
+
}
|
|
72
|
+
// Add Jupyter Markdown flavor here to support code block highlighting.
|
|
73
|
+
languages.addLanguage({
|
|
74
|
+
name: 'ipythongfm',
|
|
75
|
+
mime: 'text/x-ipythongfm',
|
|
76
|
+
load: async () => {
|
|
77
|
+
// TODO: add support for LaTeX
|
|
78
|
+
const m = await import('@codemirror/lang-markdown');
|
|
79
|
+
return m.markdown({
|
|
80
|
+
codeLanguages: (info) => languages.findBest(info)
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
});
|
|
67
84
|
this._rendermime = new RenderMimeRegistry({
|
|
68
85
|
initialFactories: rendererFactories,
|
|
69
86
|
latexTypesetter: new MathJaxTypesetter({
|
|
70
87
|
url: PageConfig.getOption('mathjaxUrl'),
|
|
71
88
|
config: PageConfig.getOption('mathjaxConfig'),
|
|
72
89
|
}),
|
|
73
|
-
markdownParser: getMarked(),
|
|
90
|
+
markdownParser: getMarked(languages),
|
|
74
91
|
});
|
|
75
92
|
const documentRegistry = new DocumentRegistry({});
|
|
76
|
-
const mimeTypeService = new CodeMirrorMimeTypeService();
|
|
93
|
+
const mimeTypeService = new CodeMirrorMimeTypeService(languages);
|
|
94
|
+
const themes = new EditorThemeRegistry();
|
|
95
|
+
for (const theme of EditorThemeRegistry.getDefaultThemes()) {
|
|
96
|
+
themes.addTheme(theme);
|
|
97
|
+
}
|
|
98
|
+
const editorExtensions = () => {
|
|
99
|
+
const registry = new EditorExtensionRegistry();
|
|
100
|
+
for (const extensionFactory of EditorExtensionRegistry.getDefaultExtensions({ themes })) {
|
|
101
|
+
registry.addExtension(extensionFactory);
|
|
102
|
+
}
|
|
103
|
+
registry.addExtension({
|
|
104
|
+
name: 'shared-model-binding',
|
|
105
|
+
factory: options => {
|
|
106
|
+
const sharedModel = options.model.sharedModel;
|
|
107
|
+
return EditorExtensionRegistry.createImmutableExtension(ybinding({
|
|
108
|
+
ytext: sharedModel.ysource,
|
|
109
|
+
undoManager: sharedModel.undoManager ?? undefined
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
return registry;
|
|
114
|
+
};
|
|
115
|
+
const factoryService = new CodeMirrorEditorFactory({
|
|
116
|
+
extensions: editorExtensions(),
|
|
117
|
+
languages
|
|
118
|
+
});
|
|
77
119
|
const editorServices = {
|
|
78
|
-
factoryService
|
|
120
|
+
factoryService,
|
|
79
121
|
mimeTypeService,
|
|
80
122
|
};
|
|
81
123
|
const editorFactory = editorServices.factoryService.newInlineEditor;
|
|
82
124
|
const contentFactory = this._CellSidebar
|
|
83
125
|
?
|
|
84
|
-
new CellSidebarContentFactory(this._CellSidebar, this._uid, this._nbgrader, this._commandRegistry,
|
|
126
|
+
new CellSidebarContentFactory(this._CellSidebar, this._uid, this._nbgrader, this._commandRegistry, { editorFactory }, this._store)
|
|
85
127
|
:
|
|
86
128
|
new NotebookPanel.ContentFactory({ editorFactory });
|
|
87
129
|
this._tracker = new NotebookTracker({ namespace: this._uid });
|