Skip to content

Commit 01f24da

Browse files
ilyabocursoragentCopilot
authored
feat: Pivot in notebooks (take 2) (#460)
Signed-off-by: Ilya Boyandin <[email protected]> Co-authored-by: Cursor Agent <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: ilyabo <[email protected]>
1 parent aebcd22 commit 01f24da

60 files changed

Lines changed: 5659 additions & 188 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

examples/canvas-sync/src/room.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export function Room() {
5858
<ThemeSwitch />
5959
</div>
6060
</div>
61-
<RoomShell.LayoutComposer tileClassName="p-0" />
61+
<RoomShell.LayoutComposer />
6262
{/* <RoomShell.LoadingProgress /> */}
6363
<RoomShell.CommandPalette />
6464
<InputApiKey className="absolute top-5 right-15 z-10" />

examples/canvas/src/room.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export function Room() {
1010
<RoomShell.CommandPalette.Button />
1111
<ThemeSwitch />
1212
</RoomShell.Sidebar>
13-
<RoomShell.LayoutComposer tileClassName="p-0" />
13+
<RoomShell.LayoutComposer />
1414
<RoomShell.LoadingProgress />
1515
<RoomShell.CommandPalette />
1616
<InputApiKey className="absolute top-5 right-15 z-10" />

examples/notebook/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313
"react-dom": "^19.1.0",
1414
"zod": "^3.25.73",
1515
"lucide-react": "0.501.0",
16-
"zustand": "5.0.5",
16+
"zustand": "^5.0.8",
1717
"@sqlrooms/cells": "workspace:*",
1818
"@sqlrooms/notebook": "workspace:*",
19+
"@sqlrooms/pivot": "workspace:*",
1920
"@sqlrooms/room-shell": "workspace:*",
2021
"@sqlrooms/ui": "workspace:*",
2122
"@sqlrooms/sql-editor": "workspace:*",

examples/notebook/src/room.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import React from 'react';
21
import {RoomShell} from '@sqlrooms/room-shell';
32
import {ThemeSwitch} from '@sqlrooms/ui';
43
import {roomStore} from './store';
@@ -9,7 +8,7 @@ export function Room() {
98
<RoomShell.Sidebar>
109
<ThemeSwitch />
1110
</RoomShell.Sidebar>
12-
<RoomShell.LayoutComposer tileClassName="p-0" />
11+
<RoomShell.LayoutComposer />
1312
<RoomShell.LoadingProgress />
1413
</RoomShell>
1514
);

examples/notebook/src/store.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ import {
99
CellsSliceConfig,
1010
createDefaultCellRegistry,
1111
} from '@sqlrooms/cells';
12+
import {
13+
pivotCellRegistryEntry,
14+
PivotSliceConfig,
15+
PivotSliceState,
16+
createPivotSlice,
17+
} from '@sqlrooms/pivot';
1218
import {
1319
BaseRoomConfig,
1420
createPersistHelpers,
@@ -27,7 +33,8 @@ import {NotebookPanel} from './NotebookPanel';
2733

2834
export type RoomState = RoomShellSliceState &
2935
NotebookSliceState &
30-
CellsSliceState & {
36+
CellsSliceState &
37+
PivotSliceState & {
3138
apiKey: string;
3239
setApiKey: (apiKey: string) => void;
3340
};
@@ -75,10 +82,14 @@ export const {roomStore, useRoomStore} = createRoomStore<RoomState>(
7582
})(set, get, store),
7683

7784
...createCellsSlice({
78-
cellRegistry: createDefaultCellRegistry(),
85+
cellRegistry: {
86+
...createDefaultCellRegistry(),
87+
pivot: pivotCellRegistryEntry,
88+
},
7989
supportedSheetTypes: ['notebook'],
8090
})(set, get, store),
8191
...createNotebookSlice()(set, get, store),
92+
...createPivotSlice()(set, get, store),
8293

8394
apiKey: '',
8495
setApiKey: (apiKey: string) => set({apiKey}),
@@ -94,6 +105,7 @@ export const {roomStore, useRoomStore} = createRoomStore<RoomState>(
94105
layout: LayoutConfig,
95106
cells: CellsSliceConfig,
96107
notebook: NotebookSliceConfig,
108+
pivot: PivotSliceConfig,
97109
}),
98110
},
99111
) as StateCreator<RoomState>,

examples/pivot/index.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+
<title>SQLRooms Pivot Example</title>
7+
</head>
8+
<body>
9+
<div id="root"></div>
10+
<script type="module" src="/src/main.tsx"></script>
11+
</body>
12+
</html>

examples/pivot/package.json

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"name": "pivot-example",
3+
"private": true,
4+
"version": "0.0.0",
5+
"type": "module",
6+
"scripts": {
7+
"dev": "vite",
8+
"build": "tsc -b && vite build",
9+
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
10+
"preview": "vite preview"
11+
},
12+
"dependencies": {
13+
"@sqlrooms/dropzone": "workspace:*",
14+
"@sqlrooms/pivot": "workspace:*",
15+
"@sqlrooms/room-shell": "workspace:*",
16+
"@sqlrooms/sql-editor": "workspace:*",
17+
"@sqlrooms/ui": "workspace:*",
18+
"@sqlrooms/utils": "workspace:*",
19+
"lucide-react": "0.544.0",
20+
"zod": "^4.1.8"
21+
},
22+
"devDependencies": {
23+
"@tailwindcss/vite": "^4.1.18",
24+
"@types/react": "^19.1.13",
25+
"@types/react-dom": "^19.1.9",
26+
"@vitejs/plugin-react": "^5.0.3",
27+
"eslint": "^9.36.0",
28+
"tailwindcss": "^4.1.18",
29+
"typescript": "^5.9.3",
30+
"vite": "^7.1.9"
31+
},
32+
"overrides": {
33+
"@duckdb/duckdb-wasm": "1.32.0"
34+
}
35+
}

examples/pivot/public/tips.csv

Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
"total_bill","tip","sex","smoker","day","time","size"
2+
16.99,1.01,"Female","No","Sun","Dinner",2
3+
10.34,1.66,"Male","No","Sun","Dinner",3
4+
21.01,3.5,"Male","No","Sun","Dinner",3
5+
23.68,3.31,"Male","No","Sun","Dinner",2
6+
24.59,3.61,"Female","No","Sun","Dinner",4
7+
25.29,4.71,"Male","No","Sun","Dinner",4
8+
8.77,2,"Male","No","Sun","Dinner",2
9+
26.88,3.12,"Male","No","Sun","Dinner",4
10+
15.04,1.96,"Male","No","Sun","Dinner",2
11+
14.78,3.23,"Male","No","Sun","Dinner",2
12+
10.27,1.71,"Male","No","Sun","Dinner",2
13+
35.26,5,"Female","No","Sun","Dinner",4
14+
15.42,1.57,"Male","No","Sun","Dinner",2
15+
18.43,3,"Male","No","Sun","Dinner",4
16+
14.83,3.02,"Female","No","Sun","Dinner",2
17+
21.58,3.92,"Male","No","Sun","Dinner",2
18+
10.33,1.67,"Female","No","Sun","Dinner",3
19+
16.29,3.71,"Male","No","Sun","Dinner",3
20+
16.97,3.5,"Female","No","Sun","Dinner",3
21+
20.65,3.35,"Male","No","Sat","Dinner",3
22+
17.92,4.08,"Male","No","Sat","Dinner",2
23+
20.29,2.75,"Female","No","Sat","Dinner",2
24+
15.77,2.23,"Female","No","Sat","Dinner",2
25+
39.42,7.58,"Male","No","Sat","Dinner",4
26+
19.82,3.18,"Male","No","Sat","Dinner",2
27+
17.81,2.34,"Male","No","Sat","Dinner",4
28+
13.37,2,"Male","No","Sat","Dinner",2
29+
12.69,2,"Male","No","Sat","Dinner",2
30+
21.7,4.3,"Male","No","Sat","Dinner",2
31+
19.65,3,"Female","No","Sat","Dinner",2
32+
9.55,1.45,"Male","No","Sat","Dinner",2
33+
18.35,2.5,"Male","No","Sat","Dinner",4
34+
15.06,3,"Female","No","Sat","Dinner",2
35+
20.69,2.45,"Female","No","Sat","Dinner",4
36+
17.78,3.27,"Male","No","Sat","Dinner",2
37+
24.06,3.6,"Male","No","Sat","Dinner",3
38+
16.31,2,"Male","No","Sat","Dinner",3
39+
16.93,3.07,"Female","No","Sat","Dinner",3
40+
18.69,2.31,"Male","No","Sat","Dinner",3
41+
31.27,5,"Male","No","Sat","Dinner",3
42+
16.04,2.24,"Male","No","Sat","Dinner",3
43+
17.46,2.54,"Male","No","Sun","Dinner",2
44+
13.94,3.06,"Male","No","Sun","Dinner",2
45+
9.68,1.32,"Male","No","Sun","Dinner",2
46+
30.4,5.6,"Male","No","Sun","Dinner",4
47+
18.29,3,"Male","No","Sun","Dinner",2
48+
22.23,5,"Male","No","Sun","Dinner",2
49+
32.4,6,"Male","No","Sun","Dinner",4
50+
28.55,2.05,"Male","No","Sun","Dinner",3
51+
18.04,3,"Male","No","Sun","Dinner",2
52+
12.54,2.5,"Male","No","Sun","Dinner",2
53+
10.29,2.6,"Female","No","Sun","Dinner",2
54+
34.81,5.2,"Female","No","Sun","Dinner",4
55+
9.94,1.56,"Male","No","Sun","Dinner",2
56+
25.56,4.34,"Male","No","Sun","Dinner",4
57+
19.49,3.51,"Male","No","Sun","Dinner",2
58+
38.01,3,"Male","Yes","Sat","Dinner",4
59+
26.41,1.5,"Female","No","Sat","Dinner",2
60+
11.24,1.76,"Male","Yes","Sat","Dinner",2
61+
48.27,6.73,"Male","No","Sat","Dinner",4
62+
20.29,3.21,"Male","Yes","Sat","Dinner",2
63+
13.81,2,"Male","Yes","Sat","Dinner",2
64+
11.02,1.98,"Male","Yes","Sat","Dinner",2
65+
18.29,3.76,"Male","Yes","Sat","Dinner",4
66+
17.59,2.64,"Male","No","Sat","Dinner",3
67+
20.08,3.15,"Male","No","Sat","Dinner",3
68+
16.45,2.47,"Female","No","Sat","Dinner",2
69+
3.07,1,"Female","Yes","Sat","Dinner",1
70+
20.23,2.01,"Male","No","Sat","Dinner",2
71+
15.01,2.09,"Male","Yes","Sat","Dinner",2
72+
12.02,1.97,"Male","No","Sat","Dinner",2
73+
17.07,3,"Female","No","Sat","Dinner",3
74+
26.86,3.14,"Female","Yes","Sat","Dinner",2
75+
25.28,5,"Female","Yes","Sat","Dinner",2
76+
14.73,2.2,"Female","No","Sat","Dinner",2
77+
10.51,1.25,"Male","No","Sat","Dinner",2
78+
17.92,3.08,"Male","Yes","Sat","Dinner",2
79+
27.2,4,"Male","No","Thur","Lunch",4
80+
22.76,3,"Male","No","Thur","Lunch",2
81+
17.29,2.71,"Male","No","Thur","Lunch",2
82+
19.44,3,"Male","Yes","Thur","Lunch",2
83+
16.66,3.4,"Male","No","Thur","Lunch",2
84+
10.07,1.83,"Female","No","Thur","Lunch",1
85+
32.68,5,"Male","Yes","Thur","Lunch",2
86+
15.98,2.03,"Male","No","Thur","Lunch",2
87+
34.83,5.17,"Female","No","Thur","Lunch",4
88+
13.03,2,"Male","No","Thur","Lunch",2
89+
18.28,4,"Male","No","Thur","Lunch",2
90+
24.71,5.85,"Male","No","Thur","Lunch",2
91+
21.16,3,"Male","No","Thur","Lunch",2
92+
28.97,3,"Male","Yes","Fri","Dinner",2
93+
22.49,3.5,"Male","No","Fri","Dinner",2
94+
5.75,1,"Female","Yes","Fri","Dinner",2
95+
16.32,4.3,"Female","Yes","Fri","Dinner",2
96+
22.75,3.25,"Female","No","Fri","Dinner",2
97+
40.17,4.73,"Male","Yes","Fri","Dinner",4
98+
27.28,4,"Male","Yes","Fri","Dinner",2
99+
12.03,1.5,"Male","Yes","Fri","Dinner",2
100+
21.01,3,"Male","Yes","Fri","Dinner",2
101+
12.46,1.5,"Male","No","Fri","Dinner",2
102+
11.35,2.5,"Female","Yes","Fri","Dinner",2
103+
15.38,3,"Female","Yes","Fri","Dinner",2
104+
44.3,2.5,"Female","Yes","Sat","Dinner",3
105+
22.42,3.48,"Female","Yes","Sat","Dinner",2
106+
20.92,4.08,"Female","No","Sat","Dinner",2
107+
15.36,1.64,"Male","Yes","Sat","Dinner",2
108+
20.49,4.06,"Male","Yes","Sat","Dinner",2
109+
25.21,4.29,"Male","Yes","Sat","Dinner",2
110+
18.24,3.76,"Male","No","Sat","Dinner",2
111+
14.31,4,"Female","Yes","Sat","Dinner",2
112+
14,3,"Male","No","Sat","Dinner",2
113+
7.25,1,"Female","No","Sat","Dinner",1
114+
38.07,4,"Male","No","Sun","Dinner",3
115+
23.95,2.55,"Male","No","Sun","Dinner",2
116+
25.71,4,"Female","No","Sun","Dinner",3
117+
17.31,3.5,"Female","No","Sun","Dinner",2
118+
29.93,5.07,"Male","No","Sun","Dinner",4
119+
10.65,1.5,"Female","No","Thur","Lunch",2
120+
12.43,1.8,"Female","No","Thur","Lunch",2
121+
24.08,2.92,"Female","No","Thur","Lunch",4
122+
11.69,2.31,"Male","No","Thur","Lunch",2
123+
13.42,1.68,"Female","No","Thur","Lunch",2
124+
14.26,2.5,"Male","No","Thur","Lunch",2
125+
15.95,2,"Male","No","Thur","Lunch",2
126+
12.48,2.52,"Female","No","Thur","Lunch",2
127+
29.8,4.2,"Female","No","Thur","Lunch",6
128+
8.52,1.48,"Male","No","Thur","Lunch",2
129+
14.52,2,"Female","No","Thur","Lunch",2
130+
11.38,2,"Female","No","Thur","Lunch",2
131+
22.82,2.18,"Male","No","Thur","Lunch",3
132+
19.08,1.5,"Male","No","Thur","Lunch",2
133+
20.27,2.83,"Female","No","Thur","Lunch",2
134+
11.17,1.5,"Female","No","Thur","Lunch",2
135+
12.26,2,"Female","No","Thur","Lunch",2
136+
18.26,3.25,"Female","No","Thur","Lunch",2
137+
8.51,1.25,"Female","No","Thur","Lunch",2
138+
10.33,2,"Female","No","Thur","Lunch",2
139+
14.15,2,"Female","No","Thur","Lunch",2
140+
16,2,"Male","Yes","Thur","Lunch",2
141+
13.16,2.75,"Female","No","Thur","Lunch",2
142+
17.47,3.5,"Female","No","Thur","Lunch",2
143+
34.3,6.7,"Male","No","Thur","Lunch",6
144+
41.19,5,"Male","No","Thur","Lunch",5
145+
27.05,5,"Female","No","Thur","Lunch",6
146+
16.43,2.3,"Female","No","Thur","Lunch",2
147+
8.35,1.5,"Female","No","Thur","Lunch",2
148+
18.64,1.36,"Female","No","Thur","Lunch",3
149+
11.87,1.63,"Female","No","Thur","Lunch",2
150+
9.78,1.73,"Male","No","Thur","Lunch",2
151+
7.51,2,"Male","No","Thur","Lunch",2
152+
14.07,2.5,"Male","No","Sun","Dinner",2
153+
13.13,2,"Male","No","Sun","Dinner",2
154+
17.26,2.74,"Male","No","Sun","Dinner",3
155+
24.55,2,"Male","No","Sun","Dinner",4
156+
19.77,2,"Male","No","Sun","Dinner",4
157+
29.85,5.14,"Female","No","Sun","Dinner",5
158+
48.17,5,"Male","No","Sun","Dinner",6
159+
25,3.75,"Female","No","Sun","Dinner",4
160+
13.39,2.61,"Female","No","Sun","Dinner",2
161+
16.49,2,"Male","No","Sun","Dinner",4
162+
21.5,3.5,"Male","No","Sun","Dinner",4
163+
12.66,2.5,"Male","No","Sun","Dinner",2
164+
16.21,2,"Female","No","Sun","Dinner",3
165+
13.81,2,"Male","No","Sun","Dinner",2
166+
17.51,3,"Female","Yes","Sun","Dinner",2
167+
24.52,3.48,"Male","No","Sun","Dinner",3
168+
20.76,2.24,"Male","No","Sun","Dinner",2
169+
31.71,4.5,"Male","No","Sun","Dinner",4
170+
10.59,1.61,"Female","Yes","Sat","Dinner",2
171+
10.63,2,"Female","Yes","Sat","Dinner",2
172+
50.81,10,"Male","Yes","Sat","Dinner",3
173+
15.81,3.16,"Male","Yes","Sat","Dinner",2
174+
7.25,5.15,"Male","Yes","Sun","Dinner",2
175+
31.85,3.18,"Male","Yes","Sun","Dinner",2
176+
16.82,4,"Male","Yes","Sun","Dinner",2
177+
32.9,3.11,"Male","Yes","Sun","Dinner",2
178+
17.89,2,"Male","Yes","Sun","Dinner",2
179+
14.48,2,"Male","Yes","Sun","Dinner",2
180+
9.6,4,"Female","Yes","Sun","Dinner",2
181+
34.63,3.55,"Male","Yes","Sun","Dinner",2
182+
34.65,3.68,"Male","Yes","Sun","Dinner",4
183+
23.33,5.65,"Male","Yes","Sun","Dinner",2
184+
45.35,3.5,"Male","Yes","Sun","Dinner",3
185+
23.17,6.5,"Male","Yes","Sun","Dinner",4
186+
40.55,3,"Male","Yes","Sun","Dinner",2
187+
20.69,5,"Male","No","Sun","Dinner",5
188+
20.9,3.5,"Female","Yes","Sun","Dinner",3
189+
30.46,2,"Male","Yes","Sun","Dinner",5
190+
18.15,3.5,"Female","Yes","Sun","Dinner",3
191+
23.1,4,"Male","Yes","Sun","Dinner",3
192+
15.69,1.5,"Male","Yes","Sun","Dinner",2
193+
19.81,4.19,"Female","Yes","Thur","Lunch",2
194+
28.44,2.56,"Male","Yes","Thur","Lunch",2
195+
15.48,2.02,"Male","Yes","Thur","Lunch",2
196+
16.58,4,"Male","Yes","Thur","Lunch",2
197+
7.56,1.44,"Male","No","Thur","Lunch",2
198+
10.34,2,"Male","Yes","Thur","Lunch",2
199+
43.11,5,"Female","Yes","Thur","Lunch",4
200+
13,2,"Female","Yes","Thur","Lunch",2
201+
13.51,2,"Male","Yes","Thur","Lunch",2
202+
18.71,4,"Male","Yes","Thur","Lunch",3
203+
12.74,2.01,"Female","Yes","Thur","Lunch",2
204+
13,2,"Female","Yes","Thur","Lunch",2
205+
16.4,2.5,"Female","Yes","Thur","Lunch",2
206+
20.53,4,"Male","Yes","Thur","Lunch",4
207+
16.47,3.23,"Female","Yes","Thur","Lunch",3
208+
26.59,3.41,"Male","Yes","Sat","Dinner",3
209+
38.73,3,"Male","Yes","Sat","Dinner",4
210+
24.27,2.03,"Male","Yes","Sat","Dinner",2
211+
12.76,2.23,"Female","Yes","Sat","Dinner",2
212+
30.06,2,"Male","Yes","Sat","Dinner",3
213+
25.89,5.16,"Male","Yes","Sat","Dinner",4
214+
48.33,9,"Male","No","Sat","Dinner",4
215+
13.27,2.5,"Female","Yes","Sat","Dinner",2
216+
28.17,6.5,"Female","Yes","Sat","Dinner",3
217+
12.9,1.1,"Female","Yes","Sat","Dinner",2
218+
28.15,3,"Male","Yes","Sat","Dinner",5
219+
11.59,1.5,"Male","Yes","Sat","Dinner",2
220+
7.74,1.44,"Male","Yes","Sat","Dinner",2
221+
30.14,3.09,"Female","Yes","Sat","Dinner",4
222+
12.16,2.2,"Male","Yes","Fri","Lunch",2
223+
13.42,3.48,"Female","Yes","Fri","Lunch",2
224+
8.58,1.92,"Male","Yes","Fri","Lunch",1
225+
15.98,3,"Female","No","Fri","Lunch",3
226+
13.42,1.58,"Male","Yes","Fri","Lunch",2
227+
16.27,2.5,"Female","Yes","Fri","Lunch",2
228+
10.09,2,"Female","Yes","Fri","Lunch",2
229+
20.45,3,"Male","No","Sat","Dinner",4
230+
13.28,2.72,"Male","No","Sat","Dinner",2
231+
22.12,2.88,"Female","Yes","Sat","Dinner",2
232+
24.01,2,"Male","Yes","Sat","Dinner",4
233+
15.69,3,"Male","Yes","Sat","Dinner",3
234+
11.61,3.39,"Male","No","Sat","Dinner",2
235+
10.77,1.47,"Male","No","Sat","Dinner",2
236+
15.53,3,"Male","Yes","Sat","Dinner",2
237+
10.07,1.25,"Male","No","Sat","Dinner",2
238+
12.6,1,"Male","Yes","Sat","Dinner",2
239+
32.83,1.17,"Male","Yes","Sat","Dinner",2
240+
35.83,4.67,"Female","No","Sat","Dinner",3
241+
29.03,5.92,"Male","No","Sat","Dinner",3
242+
27.18,2,"Female","Yes","Sat","Dinner",2
243+
22.67,2,"Male","Yes","Sat","Dinner",2
244+
17.82,1.75,"Male","No","Sat","Dinner",2
245+
18.78,3,"Female","No","Thur","Dinner",2

0 commit comments

Comments
 (0)