@marimo-team/islands 0.25.3-dev173 → 0.25.3-dev176

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.
Files changed (134) hide show
  1. package/dist/{ErrorBoundary-wT3f3iJ1.js → ErrorBoundary-D66f-xAE.js} +1 -1
  2. package/dist/{any-language-editor-B92WMzoC.js → any-language-editor-BVFHDDQ3.js} +2 -2
  3. package/dist/{chat-ui-CuORr6fL.js → chat-ui-X-cWrL9u.js} +1222 -1222
  4. package/dist/{code-visibility-ZReaeMaF.js → code-visibility-CVVeTAwi.js} +2 -2
  5. package/dist/{common-DCevHg1m.js → common-DNlm9Cdj.js} +1074 -1078
  6. package/dist/{data-grid-overlay-editor-CTC-bJus.js → data-grid-overlay-editor-BArE3_zi.js} +1 -1
  7. package/dist/{dist-F8Ep36rk.js → dist-B1M0bGO3.js} +1 -1
  8. package/dist/{dist-D6d86eNJ.js → dist-BA13RJj5.js} +1 -1
  9. package/dist/{dist-Bvs24R_E.js → dist-BJtmSgcE.js} +48 -48
  10. package/dist/{dist-CN_BeG2I.js → dist-Ba2VIn1K.js} +53 -53
  11. package/dist/{dist-PXYI_yuP.js → dist-Bj4bmwUm.js} +12 -12
  12. package/dist/{dist-DoE4XJBC.js → dist-BmS-ZGjl.js} +8626 -8626
  13. package/dist/{dist-BorMD-uX.js → dist-Bzogh7CW.js} +87 -87
  14. package/dist/{dist-CN8zI-XC.js → dist-CThPVKaP.js} +1385 -1382
  15. package/dist/{dist-DiDibOYr.js → dist-CTi5FTiV.js} +87 -87
  16. package/dist/{dist-diIx5qJW.js → dist-Ck_C32ye.js} +2 -2
  17. package/dist/{dist-BLfKmR-l.js → dist-D1fnFp1J.js} +1 -1
  18. package/dist/{dist-OR1OnN-y.js → dist-D3x9__Fu.js} +46 -46
  19. package/dist/{dist-BMQf5zIS.js → dist-D7mrh5sO.js} +36 -36
  20. package/dist/{dist-CSJ0MDRw.js → dist-D9Q3xjiP.js} +1 -1
  21. package/dist/{dist-BuaRHxOc.js → dist-DP60Ubh8.js} +2 -2
  22. package/dist/{dist-CSbh1PNP.js → dist-DTv9KkpW.js} +12 -12
  23. package/dist/{dist-D-wwqlzJ.js → dist-DVVwOfrD.js} +109 -109
  24. package/dist/{dist-C8fAKSH1.js → dist-DYXM73-k.js} +36 -36
  25. package/dist/{dist-DBtSl3sf.js → dist-DjeybPOb.js} +1 -1
  26. package/dist/{dist-CrSP_H1M.js → dist-DtGn9N4h.js} +197 -197
  27. package/dist/{dist-CLdpGQVr.js → dist-KN80qWCP.js} +2 -2
  28. package/dist/{dist-Cg7gzw-a.js → dist-O0qFpEJh.js} +56 -56
  29. package/dist/{dist-CkTTIdBe.js → dist-OUle2RT7.js} +207 -207
  30. package/dist/{dist-BK4Oj99o.js → dist-T5rh6JvL.js} +1 -1
  31. package/dist/{error-entries-CmWMEsY_.js → error-entries-mpoD5t79.js} +4939 -4983
  32. package/dist/{esm-D2gTsXEV.js → esm-Bbw_Njjx.js} +575 -575
  33. package/dist/{esm-AMFssoNp.js → esm-mDQNEFe_.js} +354 -354
  34. package/dist/{feedback-button-DwXkmewo.js → feedback-button-CyvqdxXN.js} +21 -21
  35. package/dist/{glide-data-editor-BlmcP-lw.js → glide-data-editor-BxvYRMC3.js} +3 -3
  36. package/dist/{globals-BdRitZ4p.js → globals-BJla9q8e.js} +1 -1
  37. package/dist/{html-to-image-bpiQh7ND.js → html-to-image-BoZthB4P.js} +454 -445
  38. package/dist/main.js +3587 -3587
  39. package/dist/{number-overlay-editor-DQG-hFHT.js → number-overlay-editor-BWg7xiRF.js} +1 -1
  40. package/dist/{process-output-BzloOI7F.js → process-output-DLS4Mqg_.js} +2 -2
  41. package/dist/{reveal-component-D3r3vSTK.js → reveal-component-feAltY24.js} +3 -3
  42. package/package.json +1 -1
  43. package/src/__mocks__/document.tsx +54 -0
  44. package/src/__mocks__/notebook.ts +2 -1
  45. package/src/__mocks__/requests.ts +0 -2
  46. package/src/components/chat/chat-panel.tsx +3 -3
  47. package/src/components/datasources/__tests__/column-preview.test.tsx +6 -8
  48. package/src/components/datasources/column-preview.tsx +4 -8
  49. package/src/components/datasources/datasources.tsx +4 -3
  50. package/src/components/dependency-graph/minimap-content.tsx +2 -6
  51. package/src/components/dependency-graph/panels.tsx +2 -1
  52. package/src/components/editor/__tests__/Output.test.tsx +50 -32
  53. package/src/components/editor/__tests__/data-attributes.test.tsx +22 -11
  54. package/src/components/editor/__tests__/output-persistence.test.tsx +6 -1
  55. package/src/components/editor/actions/__tests__/name-cell-input.test.tsx +69 -0
  56. package/src/components/editor/actions/name-cell-input.tsx +4 -3
  57. package/src/components/editor/actions/useCellActionButton.tsx +20 -26
  58. package/src/components/editor/actions/useNotebookActions.tsx +13 -18
  59. package/src/components/editor/actions/useSetCodeVisibility.ts +10 -11
  60. package/src/components/editor/actions/useSetOutputsExpanded.ts +13 -18
  61. package/src/components/editor/cell/CreateCellButton.tsx +5 -9
  62. package/src/components/editor/cell/__tests__/StagedAICell.test.tsx +3 -1
  63. package/src/components/editor/cell/code/cell-editor.tsx +13 -20
  64. package/src/components/editor/cell/useAddCell.ts +4 -8
  65. package/src/components/editor/cell/useDeleteCell.tsx +10 -36
  66. package/src/components/editor/cell/useRunCells.ts +2 -5
  67. package/src/components/editor/cell/useSplitCell.tsx +2 -1
  68. package/src/components/editor/chrome/panels/logs-panel.tsx +2 -1
  69. package/src/components/editor/chrome/panels/snippets-panel.tsx +5 -11
  70. package/src/components/editor/chrome/wrapper/__tests__/pending-ai-cells.test.tsx +3 -1
  71. package/src/components/editor/columns/sortable-column.tsx +1 -1
  72. package/src/components/editor/connections/components.tsx +4 -9
  73. package/src/components/editor/controls/Controls.tsx +1 -1
  74. package/src/components/editor/controls/__tests__/notebook-menu-dropdown.test.tsx +9 -3
  75. package/src/components/editor/documentation.css +34 -11
  76. package/src/components/editor/errors/auto-fix.tsx +4 -8
  77. package/src/components/editor/file-tree/file-explorer.tsx +3 -7
  78. package/src/components/editor/links/__tests__/cell-link.test.tsx +3 -1
  79. package/src/components/editor/links/cell-link.tsx +2 -1
  80. package/src/components/editor/navigation/__tests__/clipboard.test.ts +60 -38
  81. package/src/components/editor/navigation/__tests__/navigation.test.ts +73 -64
  82. package/src/components/editor/navigation/clipboard.ts +12 -11
  83. package/src/components/editor/navigation/multi-cell-action-toolbar.tsx +11 -20
  84. package/src/components/editor/navigation/navigation.ts +20 -28
  85. package/src/components/editor/notebook-cell.tsx +7 -10
  86. package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +125 -69
  87. package/src/components/editor/renderers/cell-array.tsx +10 -17
  88. package/src/components/markdown/markdown-renderer.tsx +4 -8
  89. package/src/components/pages/edit-page.tsx +32 -17
  90. package/src/components/scratchpad/scratchpad.test.tsx +3 -1
  91. package/src/components/scratchpad/scratchpad.tsx +4 -7
  92. package/src/components/slides/__tests__/minimap-actions.test.tsx +9 -25
  93. package/src/components/slides/minimap.tsx +7 -3
  94. package/src/components/slides/slide-cell-view.tsx +3 -3
  95. package/src/components/sort/SortableCellsProvider.tsx +2 -1
  96. package/src/core/ai/__tests__/staged-cells.test.ts +18 -20
  97. package/src/core/ai/staged-cells.ts +8 -16
  98. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +2 -2
  99. package/src/core/ai/tools/__tests__/run-cells-tool.test.ts +2 -2
  100. package/src/core/ai/tools/base.ts +2 -2
  101. package/src/core/ai/tools/edit-notebook-tool.ts +13 -21
  102. package/src/core/cells/__tests__/actions.test.ts +474 -34
  103. package/src/core/cells/__tests__/add-missing-import.test.ts +7 -8
  104. package/src/core/cells/__tests__/cells.test.ts +171 -813
  105. package/src/core/cells/__tests__/document.test.ts +5 -35
  106. package/src/core/cells/__tests__/notebook-outline.test.ts +7 -1
  107. package/src/core/cells/__tests__/outputs.test.tsx +71 -53
  108. package/src/core/cells/actions.ts +391 -3
  109. package/src/core/cells/add-missing-import.ts +46 -42
  110. package/src/core/cells/cells.ts +38 -413
  111. package/src/core/cells/document.ts +7 -4
  112. package/src/core/cells/outputs.ts +12 -28
  113. package/src/core/codemirror/cells/extensions.ts +6 -6
  114. package/src/core/codemirror/cells/state.ts +1 -1
  115. package/src/core/codemirror/keymaps/vim.ts +2 -2
  116. package/src/core/edit-app.tsx +19 -27
  117. package/src/core/islands/bridge.ts +0 -2
  118. package/src/core/kernel/handlers.ts +3 -3
  119. package/src/core/network/__tests__/requests-lazy.test.ts +1 -3
  120. package/src/core/network/requests-lazy.ts +0 -2
  121. package/src/core/network/requests-network.ts +0 -16
  122. package/src/core/network/requests-static.ts +0 -2
  123. package/src/core/network/requests-toasting.tsx +0 -2
  124. package/src/core/network/types.ts +0 -7
  125. package/src/core/notebook/document/__tests__/codemirror.test.ts +5 -0
  126. package/src/core/notebook/document/__tests__/draft.test.ts +41 -0
  127. package/src/core/notebook/document/__tests__/state.test.ts +21 -0
  128. package/src/core/notebook/document/draft.ts +35 -5
  129. package/src/core/notebook/document/index.ts +1 -0
  130. package/src/core/notebook/document/state.ts +6 -2
  131. package/src/core/session/useNotebookSession.tsx +6 -2
  132. package/src/core/wasm/bridge.ts +0 -16
  133. package/src/css/globals.css +56 -22
  134. package/src/stories/runtime-story.tsx +22 -15
@@ -5,7 +5,11 @@ import { useAtom, useAtomValue, useSetAtom, useStore } from "jotai";
5
5
  import { useEffect, useLayoutEffect, useMemo } from "react";
6
6
  import { useErrorBoundary } from "react-error-boundary";
7
7
  import { toast } from "@/components/ui/use-toast";
8
- import { getNotebook, notebookAtom, useCellActions } from "@/core/cells/cells";
8
+ import {
9
+ getNotebook,
10
+ notebookAtom,
11
+ useReducerActions,
12
+ } from "@/core/cells/cells";
9
13
  import { followDocument } from "@/core/cells/document";
10
14
  import { AUTOCOMPLETER } from "@/core/codemirror/completion/Autocompleter";
11
15
  import { createDocumentModel } from "@/core/notebook/document";
@@ -91,7 +95,7 @@ export function useNotebookSession(opts: {
91
95
  reconcileDocument,
92
96
  setLastRun,
93
97
  resetCellRuntimes,
94
- } = useCellActions();
98
+ } = useReducerActions();
95
99
  const { addCellNotification } = useRunsActions();
96
100
  const setKernelState = useSetAtom(kernelStateAtom);
97
101
  const setInitialRunCompleted = useSetAtom(initialRunCompletedAtom);
@@ -345,14 +345,6 @@ export class PyodideBridge implements RunRequests, EditRequests {
345
345
  return response as FormatResponse;
346
346
  };
347
347
 
348
- public sendDeleteCell: EditRequests["sendDeleteCell"] = async (request) => {
349
- await this.putControlRequest({
350
- type: "delete-cell",
351
- ...request,
352
- });
353
- return null;
354
- };
355
-
356
348
  public sendInstallMissingPackages: EditRequests["sendInstallMissingPackages"] =
357
349
  async (request) => {
358
350
  this.putControlRequest({
@@ -403,14 +395,6 @@ export class PyodideBridge implements RunRequests, EditRequests {
403
395
  return null;
404
396
  };
405
397
 
406
- public saveCellConfig: EditRequests["saveCellConfig"] = async (request) => {
407
- await this.putControlRequest({
408
- type: "update-cell-config",
409
- ...request,
410
- });
411
- return null;
412
- };
413
-
414
398
  public sendRestart = async (): Promise<null> => {
415
399
  // Save first
416
400
  const code = await this.readCode();
@@ -55,21 +55,29 @@
55
55
  --background: light-dark(hsl(0deg 0% 100%), hsl(150deg 7.7% 10.2%));
56
56
  --foreground: light-dark(hsl(222.2deg 47.4% 11.2%), hsl(155deg 7% 93%));
57
57
  --muted: light-dark(hsl(210deg 40% 96.1%), hsl(180deg 14% 1%));
58
- --muted-foreground: light-dark(hsl(215.4deg 16.3% 46.9%),
59
- hsl(155deg 5% 68.3%));
58
+ --muted-foreground: light-dark(
59
+ hsl(215.4deg 16.3% 46.9%),
60
+ hsl(155deg 5% 68.3%)
61
+ );
60
62
  --popover: light-dark(hsl(0deg 0% 100%), hsl(151deg 5.5% 15.2%));
61
- --popover-foreground: light-dark(hsl(222.2deg 47.4% 11.2%),
62
- hsl(155deg 5% 68.3%));
63
+ --popover-foreground: light-dark(
64
+ hsl(222.2deg 47.4% 11.2%),
65
+ hsl(155deg 5% 68.3%)
66
+ );
63
67
  --card: light-dark(hsl(0deg 0% 100%), hsl(151deg 5.5% 15.2%));
64
- --card-foreground: light-dark(hsl(222.2deg 47.4% 11.2%),
65
- hsl(155deg 5% 76.3%));
68
+ --card-foreground: light-dark(
69
+ hsl(222.2deg 47.4% 11.2%),
70
+ hsl(155deg 5% 76.3%)
71
+ );
66
72
  --border: light-dark(hsl(214.3deg 31.8% 91.4%), hsl(153deg 3.7% 24.2%));
67
73
  --input: light-dark(hsl(0deg 0% 64%), hsl(154deg 3.3% 28.7%));
68
74
  --primary: light-dark(hsl(208deg 93.5% 47.4%), hsl(192deg 59.8% 39%));
69
75
  --primary-foreground: light-dark(hsl(210deg 40% 98%), hsl(190deg 80% 84%));
70
76
  --secondary: light-dark(hsl(210deg 40% 96.1%), hsl(155deg 7% 93%));
71
- --secondary-foreground: light-dark(hsl(222.2deg 47.4% 11.2%),
72
- hsl(151deg 5.5% 15.2%));
77
+ --secondary-foreground: light-dark(
78
+ hsl(222.2deg 47.4% 11.2%),
79
+ hsl(151deg 5.5% 15.2%)
80
+ );
73
81
  --accent: light-dark(hsl(209deg 100% 96.5%), hsl(192deg 56.6% 26.5%));
74
82
  --accent-foreground: light-dark(hsl(211deg 90% 42%), hsl(190deg 80% 84%));
75
83
  --ring: hsl(215deg 20.2% 65.1%);
@@ -101,8 +109,10 @@
101
109
 
102
110
  /* Base shadows. */
103
111
  --base-shadow: light-dark(hsl(0deg 0% 85% / 40%), hsla(0deg 0% 36% / 60%));
104
- --base-shadow-darker: light-dark(hsl(0deg 0% 50% / 40%),
105
- hsl(0deg 0% 50% / 60%));
112
+ --base-shadow-darker: light-dark(
113
+ hsl(0deg 0% 50% / 40%),
114
+ hsl(0deg 0% 50% / 60%)
115
+ );
106
116
  --base-shadow-opacity: 5%;
107
117
 
108
118
  /* Codemirror editor */
@@ -219,40 +229,64 @@
219
229
  --shadow-xxs: 0px 0px 2px 0px var(--base-shadow-darker);
220
230
 
221
231
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
222
- --shadow-xs: 1px 1px 2px 0px var(--base-shadow), 0px 0px 2px 0px hsl(0deg 0% 25% / var(--base-shadow-opacity));
232
+ --shadow-xs:
233
+ 1px 1px 2px 0px var(--base-shadow),
234
+ 0px 0px 2px 0px hsl(0deg 0% 25% / var(--base-shadow-opacity));
223
235
 
224
236
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
225
- --shadow-sm: 2px 2px 2px 0px var(--base-shadow), 0px 0px 2px 0px hsl(0deg 0% 25% / var(--base-shadow-opacity));
237
+ --shadow-sm:
238
+ 2px 2px 2px 0px var(--base-shadow),
239
+ 0px 0px 2px 0px hsl(0deg 0% 25% / var(--base-shadow-opacity));
226
240
 
227
241
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
228
- --shadow-md: 4px 4px 4px 0px var(--base-shadow), 0 0px 4px 0px hsl(0deg 0% 60% / var(--base-shadow-opacity));
242
+ --shadow-md:
243
+ 4px 4px 4px 0px var(--base-shadow),
244
+ 0 0px 4px 0px hsl(0deg 0% 60% / var(--base-shadow-opacity));
229
245
 
230
246
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
231
- --shadow-lg: 5px 6px 4px 0px var(--base-shadow), 0 0px 4px 0px hsl(0deg 0% 75% / var(--base-shadow-opacity));
247
+ --shadow-lg:
248
+ 5px 6px 4px 0px var(--base-shadow),
249
+ 0 0px 4px 0px hsl(0deg 0% 75% / var(--base-shadow-opacity));
232
250
 
233
251
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
234
- --shadow-xl: 8px 9px 4px 0px var(--base-shadow), 0 0px 6px 0px hsl(0deg 0% 85% / var(--base-shadow-opacity));
252
+ --shadow-xl:
253
+ 8px 9px 4px 0px var(--base-shadow),
254
+ 0 0px 6px 0px hsl(0deg 0% 85% / var(--base-shadow-opacity));
235
255
 
236
256
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
237
- --shadow-2xl: 10px 12px 10px 0px var(--base-shadow), 0 0px 8px 0px hsl(0deg 0% 90% / var(--base-shadow-opacity));
257
+ --shadow-2xl:
258
+ 10px 12px 10px 0px var(--base-shadow),
259
+ 0 0px 8px 0px hsl(0deg 0% 90% / var(--base-shadow-opacity));
238
260
 
239
261
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
240
- --shadow-xs-solid: 1px 1px 0px 0px var(--base-shadow-darker), 0px 0px 2px 0px hsl(0deg 0% 50% / 20%);
262
+ --shadow-xs-solid:
263
+ 1px 1px 0px 0px var(--base-shadow-darker),
264
+ 0px 0px 2px 0px hsl(0deg 0% 50% / 20%);
241
265
 
242
266
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
243
- --shadow-sm-solid: 2px 2px 0px 0px var(--base-shadow-darker), 0px 0px 2px 0px hsl(0deg 0% 50% / 20%);
267
+ --shadow-sm-solid:
268
+ 2px 2px 0px 0px var(--base-shadow-darker),
269
+ 0px 0px 2px 0px hsl(0deg 0% 50% / 20%);
244
270
 
245
271
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
246
- --shadow-md-solid: 4px 4px 0px 0px var(--base-shadow-darker), 0 0px 2px 0px hsl(0deg 0% 60% / 50%);
272
+ --shadow-md-solid:
273
+ 4px 4px 0px 0px var(--base-shadow-darker),
274
+ 0 0px 2px 0px hsl(0deg 0% 60% / 50%);
247
275
 
248
276
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
249
- --shadow-lg-solid: 5px 6px 0px 0px var(--base-shadow-darker), 0 0px 4px 0px hsl(0deg 0% 75% / 50%);
277
+ --shadow-lg-solid:
278
+ 5px 6px 0px 0px var(--base-shadow-darker),
279
+ 0 0px 4px 0px hsl(0deg 0% 75% / 50%);
250
280
 
251
281
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
252
- --shadow-xl-solid: 7px 8px 0px 0px var(--base-shadow-darker), 0 0px 4px 0px hsl(0deg 0% 85% / 50%);
282
+ --shadow-xl-solid:
283
+ 7px 8px 0px 0px var(--base-shadow-darker),
284
+ 0 0px 4px 0px hsl(0deg 0% 85% / 50%);
253
285
 
254
286
  /* oxfmt-ignore: definition needs to be oneline or breaks variants */
255
- --shadow-2xl-solid: 10px 12px 0px 0px var(--base-shadow-darker), 0 0px 8px 0px hsl(0deg 0% 90% / 50%);
287
+ --shadow-2xl-solid:
288
+ 10px 12px 0px 0px var(--base-shadow-darker),
289
+ 0 0px 8px 0px hsl(0deg 0% 90% / 50%);
256
290
 
257
291
  /* Solid shadows with lighter shade color */
258
292
 
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import type { Meta } from "@storybook/react-vite";
3
3
  import { createStore, Provider, useAtomValue, useStore } from "jotai";
4
- import { useEffect, useRef, useState } from "react";
4
+ import { createRef, useEffect, useRef, useState } from "react";
5
5
  import { Button } from "@/components/ui/button";
6
6
  import { ConnectionNotice } from "@/components/editor/alerts/connection-notice";
7
7
  import PackagesPanel from "@/components/editor/chrome/panels/packages-panel";
@@ -13,11 +13,10 @@ import { Cell } from "@/components/editor/notebook-cell";
13
13
  import { VerticalLayoutWrapper } from "@/components/editor/renderers/vertical-layout/vertical-layout-wrapper";
14
14
  import { alertAtom } from "@/core/alerts/state";
15
15
  import type { EnvironmentOperation } from "@/core/alerts/environment";
16
- import {
17
- createNotebookActions,
18
- notebookAtom,
19
- notebookReducer,
20
- } from "@/core/cells/cells";
16
+ import { notebookAtom } from "@/core/cells/cells";
17
+ import { CellId } from "@/core/cells/ids";
18
+ import { createCell, createCellRuntimeState } from "@/core/cells/types";
19
+ import { MultiColumn } from "@/utils/id-tree";
21
20
  import { userConfigAtom } from "@/core/config/config";
22
21
  import {
23
22
  type AppConfig,
@@ -349,15 +348,23 @@ export function RuntimeStory(props: Props) {
349
348
  log_mode: "replace",
350
349
  });
351
350
  if (props.existingCells) {
352
- const actions = createNotebookActions((action) =>
353
- state.set(notebookAtom, (value) => notebookReducer(value, action)),
354
- );
355
- actions.createNewCell({
356
- cellId: "__end__",
357
- before: false,
358
- code: 'import polars as pl\n\ntrips = pl.read_csv("bike_trips.csv")\ntrips.head()',
359
- autoFocus: false,
360
- });
351
+ const cellId = CellId.create();
352
+ state.set(notebookAtom, (value) => ({
353
+ ...value,
354
+ cellIds: MultiColumn.from([[cellId]]),
355
+ cellData: {
356
+ ...value.cellData,
357
+ [cellId]: createCell({
358
+ id: cellId,
359
+ code: 'import polars as pl\n\ntrips = pl.read_csv("bike_trips.csv")\ntrips.head()',
360
+ }),
361
+ },
362
+ cellRuntime: {
363
+ ...value.cellRuntime,
364
+ [cellId]: createCellRuntimeState(),
365
+ },
366
+ cellHandles: { ...value.cellHandles, [cellId]: createRef() },
367
+ }));
361
368
  }
362
369
  state.set(requestClientAtom, {
363
370
  ...createStaticRequests(),