Skip to content

Commit a422532

Browse files
committed
feat: Set up a custom renderer for data frames.
1 parent 338e054 commit a422532

File tree

5 files changed

+103
-0
lines changed

5 files changed

+103
-0
lines changed

build/esbuild/build.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,11 @@ async function buildAll() {
287287
),
288288
{ target: 'web', watch: watchAll }
289289
),
290+
build(
291+
path.join(extensionFolder, 'src', 'webviews', 'webview-side', 'dataframe-renderer', 'index.ts'),
292+
path.join(extensionFolder, 'dist', 'webviews', 'webview-side', 'dataframeRenderer', 'dataframeRenderer.js'),
293+
{ target: 'web', watch: isWatchMode }
294+
),
290295
build(
291296
path.join(extensionFolder, 'src', 'webviews', 'webview-side', 'variable-view', 'index.tsx'),
292297
path.join(extensionFolder, 'dist', 'webviews', 'webview-side', 'viewers', 'variableView.js'),

package.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1809,6 +1809,16 @@
18091809
"entrypoint": "./dist/webviews/webview-side/ipywidgetsKernel/ipywidgetsKernel.js"
18101810
}
18111811
],
1812+
"notebookRenderer": [
1813+
{
1814+
"id": "deepnote-dataframe-renderer",
1815+
"displayName": "Deepnote Dataframe Renderer",
1816+
"entrypoint": "./dist/webviews/webview-side/dataframeRenderer/dataframeRenderer.js",
1817+
"mimeTypes": [
1818+
"application/vnd.deepnote.dataframe.v3+json"
1819+
]
1820+
}
1821+
],
18121822
"viewsContainers": {
18131823
"activitybar": [
18141824
{
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import * as React from 'react';
2+
3+
interface DataframeRendererProps {
4+
data: any;
5+
}
6+
7+
export const DataframeRenderer: React.FC<DataframeRendererProps> = ({ data }) => {
8+
console.log('DataframeRenderer', data);
9+
10+
return <div className="dataframe-container">This is the Deepnote dataframe renderer</div>;
11+
};
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import './styles.css';
2+
3+
import * as React from 'react';
4+
import * as ReactDOM from 'react-dom';
5+
6+
import type { ActivationFunction, OutputItem, RendererContext } from 'vscode-notebook-renderer';
7+
8+
import { DataframeRenderer } from './DataframeRenderer';
9+
10+
export const activate: ActivationFunction = (_context: RendererContext<unknown>) => {
11+
return {
12+
renderOutputItem(outputItem: OutputItem, element: HTMLElement) {
13+
try {
14+
const data = outputItem.json();
15+
console.log('Dataframe renderer - received data:', data);
16+
17+
const root = document.createElement('div');
18+
element.appendChild(root);
19+
20+
ReactDOM.render(React.createElement(DataframeRenderer, { data }), root);
21+
} catch (error) {
22+
console.error('Error rendering dataframe:', error);
23+
const errorDiv = document.createElement('div');
24+
errorDiv.style.padding = '10px';
25+
errorDiv.style.color = 'var(--vscode-errorForeground)';
26+
errorDiv.textContent = `Error rendering dataframe: ${error}`;
27+
element.appendChild(errorDiv);
28+
}
29+
},
30+
31+
disposeOutputItem(_id?: string) {
32+
// Cleanup if needed
33+
}
34+
};
35+
};
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
.dataframe-container {
2+
overflow: auto;
3+
max-width: 100%;
4+
font-family: var(--vscode-editor-font-family);
5+
font-size: var(--vscode-editor-font-size);
6+
}
7+
8+
.dataframe-table {
9+
border-collapse: collapse;
10+
width: 100%;
11+
border: 1px solid var(--vscode-panel-border);
12+
}
13+
14+
.dataframe-table th {
15+
background-color: var(--vscode-editor-background);
16+
border: 1px solid var(--vscode-panel-border);
17+
font-weight: 600;
18+
padding: 8px 12px;
19+
text-align: left;
20+
position: sticky;
21+
top: 0;
22+
color: var(--vscode-foreground);
23+
}
24+
25+
.dataframe-table td {
26+
border: 1px solid var(--vscode-panel-border);
27+
padding: 6px 12px;
28+
color: var(--vscode-foreground);
29+
}
30+
31+
.dataframe-table tbody tr.even-row {
32+
background-color: var(--vscode-editor-background);
33+
}
34+
35+
.dataframe-table tbody tr.odd-row {
36+
background-color: var(--vscode-list-hoverBackground);
37+
}
38+
39+
.dataframe-table tbody tr:hover {
40+
background-color: var(--vscode-list-activeSelectionBackground);
41+
color: var(--vscode-list-activeSelectionForeground);
42+
}

0 commit comments

Comments
 (0)