@marimo-team/frontend 0.25.1-dev27 → 0.25.1-dev28

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 (153) hide show
  1. package/package.json +1 -1
  2. package/src/__mocks__/common.ts +3 -3
  3. package/src/__tests__/CellStatus.test.tsx +1 -1
  4. package/src/__tests__/setup.ts +7 -7
  5. package/src/components/data-table/column-summary/chart-spec-model.tsx +4 -4
  6. package/src/components/dependency-graph/elements.ts +2 -2
  7. package/src/components/editor/ai/staged-cell-submission.ts +2 -2
  8. package/src/components/editor/ai/transport/chat-transport.tsx +1 -1
  9. package/src/components/editor/connections/database/as-code.ts +44 -44
  10. package/src/components/editor/connections/storage/as-code.ts +3 -3
  11. package/src/components/editor/file-tree/requesting-tree.tsx +16 -13
  12. package/src/components/editor/navigation/clipboard.ts +2 -2
  13. package/src/components/editor/output/ansi-reduce.ts +13 -13
  14. package/src/components/slides/__tests__/minimap-actions.test.tsx +7 -7
  15. package/src/components/slides/__tests__/minimap.test.ts +12 -12
  16. package/src/components/slides/__tests__/slide-scroll-hint.test.tsx +8 -8
  17. package/src/core/ai/context/__tests__/registry.test.ts +31 -28
  18. package/src/core/ai/context/providers/cell-output.ts +8 -8
  19. package/src/core/ai/context/providers/datasource.ts +10 -7
  20. package/src/core/ai/context/providers/error.ts +7 -7
  21. package/src/core/ai/context/providers/file.ts +8 -8
  22. package/src/core/ai/context/providers/tables.ts +7 -7
  23. package/src/core/ai/context/providers/variable.ts +7 -7
  24. package/src/core/ai/context/registry.ts +18 -18
  25. package/src/core/ai/ids/ids.ts +5 -5
  26. package/src/core/ai/model-registry.ts +12 -9
  27. package/src/core/ai/staged-cells.ts +6 -6
  28. package/src/core/ai/tools/base.ts +6 -6
  29. package/src/core/ai/tools/edit-notebook-tool.ts +6 -6
  30. package/src/core/ai/tools/registry.ts +4 -4
  31. package/src/core/ai/tools/run-cells-tool.ts +7 -7
  32. package/src/core/ai/tools/sample-tool.ts +6 -6
  33. package/src/core/codemirror/cells/debugger-decorations.ts +13 -7
  34. package/src/core/codemirror/cells/line-timing-decorations.ts +9 -9
  35. package/src/core/codemirror/cells/traceback-decorations.ts +7 -4
  36. package/src/core/codemirror/code-lens/extension.ts +13 -13
  37. package/src/core/codemirror/copilot/__tests__/language-server.test.ts +6 -6
  38. package/src/core/codemirror/copilot/__tests__/transport.test.ts +12 -12
  39. package/src/core/codemirror/copilot/language-server.ts +13 -13
  40. package/src/core/codemirror/copilot/transport.ts +1 -1
  41. package/src/core/codemirror/find-replace/search-highlight.ts +5 -5
  42. package/src/core/codemirror/go-to-definition/underline.ts +3 -3
  43. package/src/core/codemirror/keymaps/vim.ts +3 -3
  44. package/src/core/codemirror/language/languages/markdown.ts +8 -8
  45. package/src/core/codemirror/language/languages/python.ts +7 -7
  46. package/src/core/codemirror/language/languages/sql/completion-builder.ts +5 -5
  47. package/src/core/codemirror/language/languages/sql/completion-store.ts +4 -4
  48. package/src/core/codemirror/language/languages/sql/sql.ts +21 -21
  49. package/src/core/codemirror/lsp/__tests__/transports.test.ts +10 -10
  50. package/src/core/codemirror/lsp/federated-lsp.ts +29 -27
  51. package/src/core/codemirror/lsp/notebook-lsp.ts +21 -21
  52. package/src/core/codemirror/misc/__tests__/dnd.test.ts +10 -10
  53. package/src/core/codemirror/misc/__tests__/paste.test.ts +7 -4
  54. package/src/core/codemirror/reactive-references/extension.ts +3 -3
  55. package/src/core/codemirror/rtc/loro/awareness.ts +12 -12
  56. package/src/core/codemirror/rtc/loro/sync.ts +5 -5
  57. package/src/core/codemirror/vim/cursor-visibility.ts +3 -3
  58. package/src/core/dom/ui-element.ts +5 -5
  59. package/src/core/dom/uiregistry.ts +10 -10
  60. package/src/core/hotkeys/hotkeys.ts +9 -9
  61. package/src/core/islands/__tests__/bridge.test.ts +4 -4
  62. package/src/core/islands/__tests__/test-utils.tsx +4 -4
  63. package/src/core/islands/bridge.ts +85 -82
  64. package/src/core/islands/components/web-components.tsx +7 -7
  65. package/src/core/islands/worker/__tests__/controller.test.ts +1 -1
  66. package/src/core/islands/worker/controller.ts +6 -3
  67. package/src/core/islands/worker-factory.ts +2 -2
  68. package/src/core/kernel/RuntimeState.ts +4 -4
  69. package/src/core/lsp/__tests__/transport.test.ts +19 -19
  70. package/src/core/lsp/transport.ts +5 -5
  71. package/src/core/network/CachingRequestRegistry.ts +2 -2
  72. package/src/core/network/DeferredRequestRegistry.ts +4 -4
  73. package/src/core/runtime/runtime.ts +25 -20
  74. package/src/core/static/virtual-file-tracker.ts +5 -5
  75. package/src/core/wasm/__tests__/bridge.test.ts +2 -2
  76. package/src/core/wasm/bridge.ts +130 -126
  77. package/src/core/wasm/router.ts +5 -5
  78. package/src/core/wasm/store.ts +4 -4
  79. package/src/core/wasm/worker/bootstrap.ts +8 -5
  80. package/src/core/wasm/worker/message-buffer.ts +3 -3
  81. package/src/core/websocket/transports/__tests__/ws.test.ts +8 -8
  82. package/src/core/websocket/transports/basic.ts +15 -8
  83. package/src/core/websocket/transports/sse.ts +7 -7
  84. package/src/core/websocket/transports/transport.ts +3 -3
  85. package/src/core/websocket/transports/ws.ts +9 -7
  86. package/src/hooks/__tests__/useOverflowDetection.test.tsx +5 -5
  87. package/src/hooks/__tests__/useResizeObserver.test.tsx +12 -12
  88. package/src/plugins/core/registerReactComponent.tsx +5 -5
  89. package/src/plugins/core/sidebar-element.tsx +2 -2
  90. package/src/plugins/impl/ButtonPlugin.tsx +3 -3
  91. package/src/plugins/impl/CheckboxPlugin.tsx +3 -3
  92. package/src/plugins/impl/CodeEditorPlugin.tsx +3 -3
  93. package/src/plugins/impl/DatePickerPlugin.tsx +3 -3
  94. package/src/plugins/impl/DateRangePlugin.tsx +3 -3
  95. package/src/plugins/impl/DateTimePickerPlugin.tsx +3 -3
  96. package/src/plugins/impl/DictPlugin.tsx +3 -3
  97. package/src/plugins/impl/DropdownPlugin.tsx +3 -3
  98. package/src/plugins/impl/FileUploadPlugin.tsx +3 -3
  99. package/src/plugins/impl/MatrixPlugin.tsx +4 -4
  100. package/src/plugins/impl/MicrophonePlugin.tsx +3 -3
  101. package/src/plugins/impl/MultiselectPlugin.tsx +3 -3
  102. package/src/plugins/impl/NumberPlugin.tsx +3 -3
  103. package/src/plugins/impl/RadioPlugin.tsx +3 -3
  104. package/src/plugins/impl/RangeSliderPlugin.tsx +3 -3
  105. package/src/plugins/impl/RefreshPlugin.tsx +3 -3
  106. package/src/plugins/impl/SliderPlugin.tsx +3 -3
  107. package/src/plugins/impl/SwitchPlugin.tsx +3 -3
  108. package/src/plugins/impl/TabsPlugin.tsx +3 -3
  109. package/src/plugins/impl/TextAreaPlugin.tsx +3 -3
  110. package/src/plugins/impl/TextInputPlugin.tsx +3 -3
  111. package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +2 -2
  112. package/src/plugins/impl/anywidget/model.ts +10 -10
  113. package/src/plugins/impl/anywidget/registry.ts +12 -9
  114. package/src/plugins/impl/anywidget/runtime.ts +11 -9
  115. package/src/plugins/impl/anywidget/widget-binding.ts +6 -6
  116. package/src/plugins/impl/matplotlib/MatplotlibPlugin.tsx +3 -3
  117. package/src/plugins/impl/matplotlib/__tests__/matplotlib-renderer.test.ts +2 -2
  118. package/src/plugins/impl/matplotlib/matplotlib-renderer.ts +2 -2
  119. package/src/plugins/impl/mpl-interactive/mpl-websocket-shim.ts +10 -10
  120. package/src/plugins/impl/panel/utils.ts +5 -5
  121. package/src/plugins/impl/plotly/PlotlyPlugin.tsx +3 -3
  122. package/src/plugins/impl/vega/VegaPlugin.tsx +3 -3
  123. package/src/plugins/impl/vega/__tests__/use-vega-container-remeasure.test.ts +7 -7
  124. package/src/plugins/layout/AccordionPlugin.tsx +3 -3
  125. package/src/plugins/layout/CalloutPlugin.tsx +3 -3
  126. package/src/plugins/layout/ImageComparisonPlugin.tsx +5 -3
  127. package/src/plugins/layout/JsonOutputPlugin.tsx +3 -3
  128. package/src/plugins/layout/MimeRenderPlugin.tsx +3 -3
  129. package/src/plugins/layout/NavigationMenuPlugin.tsx +3 -3
  130. package/src/plugins/layout/OutlinePlugin.tsx +3 -3
  131. package/src/plugins/layout/ProgressPlugin.tsx +3 -3
  132. package/src/plugins/layout/RoutesPlugin.tsx +3 -3
  133. package/src/plugins/layout/StatPlugin.tsx +3 -3
  134. package/src/plugins/layout/TexPlugin.tsx +3 -3
  135. package/src/plugins/layout/carousel/CarouselPlugin.tsx +4 -4
  136. package/src/plugins/layout/mermaid/MermaidPlugin.tsx +3 -3
  137. package/src/utils/Deferred.ts +6 -6
  138. package/src/utils/async-capture-tracker.ts +10 -7
  139. package/src/utils/errors.ts +5 -5
  140. package/src/utils/id-tree.tsx +83 -80
  141. package/src/utils/lru.ts +1 -1
  142. package/src/utils/multi-map.ts +14 -12
  143. package/src/utils/paths.ts +6 -6
  144. package/src/utils/pluralize.ts +3 -3
  145. package/src/utils/progress.ts +6 -6
  146. package/src/utils/python-poet/poet.ts +14 -14
  147. package/src/utils/routes.ts +4 -2
  148. package/src/utils/semaphore.ts +6 -6
  149. package/src/utils/storage/storage.ts +6 -6
  150. package/src/utils/storage/typed.ts +16 -12
  151. package/src/utils/time.ts +9 -9
  152. package/src/utils/timed-cache.ts +4 -4
  153. package/src/utils/tracer.ts +9 -6
@@ -100,7 +100,7 @@ export class ReconnectingWebSocketTransport implements Transport {
100
100
 
101
101
  public onReconnect: (() => Promise<void>) | undefined;
102
102
 
103
- constructor(options: ReconnectingWebSocketTransportOptions) {
103
+ public constructor(options: ReconnectingWebSocketTransportOptions) {
104
104
  this.options = {
105
105
  ...options,
106
106
  retries: options.retries ?? 1,
@@ -109,7 +109,7 @@ export class ReconnectingWebSocketTransport implements Transport {
109
109
  this.onReconnect = options.onReconnect;
110
110
  }
111
111
 
112
- async connect(): Promise<void> {
112
+ public async connect(): Promise<void> {
113
113
  if (this.isClosed) {
114
114
  throw new Error("Transport is closed");
115
115
  }
@@ -136,7 +136,7 @@ export class ReconnectingWebSocketTransport implements Transport {
136
136
  return this.isClosed || generation !== this.connectionGeneration;
137
137
  }
138
138
 
139
- send(message: JSONRPCMessage): void {
139
+ public send(message: JSONRPCMessage): void {
140
140
  if (this.isClosed) {
141
141
  return;
142
142
  }
@@ -162,14 +162,14 @@ export class ReconnectingWebSocketTransport implements Transport {
162
162
  this.reconnect();
163
163
  }
164
164
 
165
- onMessage(handler: (message: JSONRPCMessage) => void): () => void {
165
+ public onMessage(handler: (message: JSONRPCMessage) => void): () => void {
166
166
  this.messageHandlers.add(handler);
167
167
  return () => {
168
168
  this.messageHandlers.delete(handler);
169
169
  };
170
170
  }
171
171
 
172
- close(): void {
172
+ public close(): void {
173
173
  if (this.isClosed) {
174
174
  return;
175
175
  }
@@ -22,7 +22,7 @@ export class CachingRequestRegistry<REQ, RES> {
22
22
  private toKey: ToKey<REQ>;
23
23
  private cache: LRUCache<string, Promise<RES>>;
24
24
 
25
- static jsonStringifySortKeys<T>(): ToKey<T> {
25
+ public static jsonStringifySortKeys<T>(): ToKey<T> {
26
26
  return (o: T) => {
27
27
  if (typeof o !== "object" || o === null) {
28
28
  return String(o);
@@ -31,7 +31,7 @@ export class CachingRequestRegistry<REQ, RES> {
31
31
  };
32
32
  }
33
33
 
34
- constructor(
34
+ public constructor(
35
35
  delegate: DeferredRequestRegistry<REQ, RES>,
36
36
  options: CachingOptions<REQ> = {},
37
37
  ) {
@@ -27,7 +27,7 @@ export class DeferredRequestRegistry<REQ, RES> {
27
27
  resolveExistingRequests?: () => RES;
28
28
  };
29
29
 
30
- constructor(
30
+ public constructor(
31
31
  operation: string,
32
32
  makeRequest: (id: RequestId, req: REQ) => Promise<void>,
33
33
  opts: {
@@ -42,7 +42,7 @@ export class DeferredRequestRegistry<REQ, RES> {
42
42
  this.opts = opts;
43
43
  }
44
44
 
45
- async request(opts: REQ): Promise<RES> {
45
+ public async request(opts: REQ): Promise<RES> {
46
46
  if (this.opts.resolveExistingRequests) {
47
47
  const result = this.opts.resolveExistingRequests();
48
48
  for (const deferred of this.requests.values()) {
@@ -63,7 +63,7 @@ export class DeferredRequestRegistry<REQ, RES> {
63
63
  return deferred.promise;
64
64
  }
65
65
 
66
- resolve(requestId: RequestId, response: RES) {
66
+ public resolve(requestId: RequestId, response: RES) {
67
67
  const entry = this.requests.get(requestId);
68
68
  if (entry === undefined) {
69
69
  return;
@@ -73,7 +73,7 @@ export class DeferredRequestRegistry<REQ, RES> {
73
73
  this.requests.delete(requestId);
74
74
  }
75
75
 
76
- reject(requestId: RequestId, error: Error) {
76
+ public reject(requestId: RequestId, error: Error) {
77
77
  const entry = this.requests.get(requestId);
78
78
  if (entry === undefined) {
79
79
  return;
@@ -14,7 +14,7 @@ export class RuntimeManager {
14
14
  private config: RuntimeConfig;
15
15
  private lazy: boolean;
16
16
 
17
- constructor(config: RuntimeConfig, lazy = false) {
17
+ public constructor(config: RuntimeConfig, lazy = false) {
18
18
  this.config = config;
19
19
  this.lazy = lazy;
20
20
  // Validate the URL on construction
@@ -32,15 +32,15 @@ export class RuntimeManager {
32
32
  }
33
33
  }
34
34
 
35
- get isLazy(): boolean {
35
+ public get isLazy(): boolean {
36
36
  return this.lazy;
37
37
  }
38
38
 
39
- get httpURL(): URL {
39
+ public get httpURL(): URL {
40
40
  return new URL(this.config.url);
41
41
  }
42
42
 
43
- get isSameOrigin(): boolean {
43
+ public get isSameOrigin(): boolean {
44
44
  return this.httpURL.origin === window.location.origin;
45
45
  }
46
46
 
@@ -51,7 +51,7 @@ export class RuntimeManager {
51
51
  /**
52
52
  * The base URL of the runtime.
53
53
  */
54
- formatHttpURL({
54
+ public formatHttpURL({
55
55
  path = "",
56
56
  searchParams,
57
57
  restrictToKnownQueryParams = true,
@@ -105,7 +105,10 @@ export class RuntimeManager {
105
105
  * An HTTP URL for requests made by browser navigation (e.g. anchor-click
106
106
  * downloads), which cannot attach auth headers.
107
107
  */
108
- formatNavigableHttpURL(path: string, searchParams?: URLSearchParams): URL {
108
+ public formatNavigableHttpURL(
109
+ path: string,
110
+ searchParams?: URLSearchParams,
111
+ ): URL {
109
112
  const url = this.formatHttpURL({ path, searchParams });
110
113
  // Drop any token inherited from the current page's query params; re-add it
111
114
  // only when cross-origin. Same-origin downloads authenticate via the
@@ -115,7 +118,7 @@ export class RuntimeManager {
115
118
  return this.appendCrossOriginAuth(url);
116
119
  }
117
120
 
118
- formatWsURL(path: string, searchParams?: URLSearchParams): URL {
121
+ public formatWsURL(path: string, searchParams?: URLSearchParams): URL {
119
122
  // We don't restrict to known query parameters, since mo.query_params()
120
123
  // can accept arbitrary parameters.
121
124
  const url = this.formatHttpURL({
@@ -150,7 +153,7 @@ export class RuntimeManager {
150
153
  /**
151
154
  * The WebSocket URL of the runtime.
152
155
  */
153
- getWsURL(sessionId: SessionId): URL {
156
+ public getWsURL(sessionId: SessionId): URL {
154
157
  return this.formatWsURL("/ws", this.getSessionSearchParams(sessionId));
155
158
  }
156
159
 
@@ -160,7 +163,7 @@ export class RuntimeManager {
160
163
  * can send headers, so auth travels in the Authorization header
161
164
  * (see `headers()`) instead of the URL.
162
165
  */
163
- getSseURL(sessionId: SessionId): URL {
166
+ public getSseURL(sessionId: SessionId): URL {
164
167
  const url = this.formatHttpURL({
165
168
  path: "/sse",
166
169
  searchParams: this.getSessionSearchParams(sessionId),
@@ -176,14 +179,14 @@ export class RuntimeManager {
176
179
  /**
177
180
  * The WebSocket Sync URL of the runtime, for real-time updates.
178
181
  */
179
- getWsSyncURL(sessionId: SessionId): URL {
182
+ public getWsSyncURL(sessionId: SessionId): URL {
180
183
  return this.formatWsURL("/ws_sync", this.getSessionSearchParams(sessionId));
181
184
  }
182
185
 
183
186
  /**
184
187
  * The WebSocket URL of the terminal.
185
188
  */
186
- getTerminalWsURL(size?: { rows: number; cols: number }): URL {
189
+ public getTerminalWsURL(size?: { rows: number; cols: number }): URL {
187
190
  const url = this.formatWsURL("/terminal/ws");
188
191
  if (size) {
189
192
  url.searchParams.set("rows", String(size.rows));
@@ -195,7 +198,9 @@ export class RuntimeManager {
195
198
  /**
196
199
  * The URL of the copilot server.
197
200
  */
198
- getLSPURL(lsp: "pylsp" | "basedpyright" | "copilot" | "ty" | "pyrefly"): URL {
201
+ public getLSPURL(
202
+ lsp: "pylsp" | "basedpyright" | "copilot" | "ty" | "pyrefly",
203
+ ): URL {
199
204
  if (lsp === "copilot") {
200
205
  // For copilot, strip all query parameters except the auth token.
201
206
  // Copilot doesn't understand arbitrary query params, but we still
@@ -211,14 +216,14 @@ export class RuntimeManager {
211
216
  return this.formatWsURL(`/lsp/${lsp}`);
212
217
  }
213
218
 
214
- getAiURL(path: "completion" | "chat"): URL {
219
+ public getAiURL(path: "completion" | "chat"): URL {
215
220
  return this.formatHttpURL({ path: `/api/ai/${path}` });
216
221
  }
217
222
 
218
223
  /**
219
224
  * The URL of the health check endpoint.
220
225
  */
221
- healthURL(): URL {
226
+ public healthURL(): URL {
222
227
  return this.formatHttpURL({ path: "/health" });
223
228
  }
224
229
 
@@ -234,7 +239,7 @@ export class RuntimeManager {
234
239
  }
235
240
  }
236
241
 
237
- async reconcileFromHealth(): Promise<boolean> {
242
+ public async reconcileFromHealth(): Promise<boolean> {
238
243
  // Always healthy if WASM, Islands, or a static notebook (no server)
239
244
  if (this.isServerless) {
240
245
  return true;
@@ -261,7 +266,7 @@ export class RuntimeManager {
261
266
  return response.ok;
262
267
  }
263
268
 
264
- async probeHealth(): Promise<boolean> {
269
+ public async probeHealth(): Promise<boolean> {
265
270
  // Always healthy if WASM, Islands, or a static notebook (no server)
266
271
  if (this.isServerless) {
267
272
  return true;
@@ -304,7 +309,7 @@ export class RuntimeManager {
304
309
  }
305
310
  }
306
311
 
307
- async init(options?: { disableRetryDelay?: boolean }) {
312
+ public async init(options?: { disableRetryDelay?: boolean }) {
308
313
  Logger.debug("Initializing runtime...");
309
314
  let retries = 0;
310
315
  // This matches backoff logic elsewhere.
@@ -335,11 +340,11 @@ export class RuntimeManager {
335
340
  /**
336
341
  * Wait for the runtime to be healthy.
337
342
  */
338
- async waitForHealthy(): Promise<void> {
343
+ public async waitForHealthy(): Promise<void> {
339
344
  return this.initialHealthyCheck.promise;
340
345
  }
341
346
 
342
- headers(): KnownHeaders {
347
+ public headers(): KnownHeaders {
343
348
  const headers: KnownHeaders = {
344
349
  "Marimo-Session-Id": getSessionId(),
345
350
  "Marimo-Server-Token": this.config.serverToken ?? "",
@@ -356,7 +361,7 @@ export class RuntimeManager {
356
361
  return headers;
357
362
  }
358
363
 
359
- sessionHeaders(): Pick<KnownHeaders, "Marimo-Session-Id"> {
364
+ public sessionHeaders(): Pick<KnownHeaders, "Marimo-Session-Id"> {
360
365
  return {
361
366
  "Marimo-Session-Id": getSessionId(),
362
367
  };
@@ -13,7 +13,7 @@ export class VirtualFileTracker {
13
13
  /**
14
14
  * Shared instance of VirtualFileTracker since this must be a singleton.
15
15
  */
16
- static get INSTANCE(): VirtualFileTracker {
16
+ public static get INSTANCE(): VirtualFileTracker {
17
17
  const KEY = "_marimo_private_VirtualFileTracker";
18
18
  if (!window[KEY]) {
19
19
  window[KEY] = new VirtualFileTracker();
@@ -21,13 +21,13 @@ export class VirtualFileTracker {
21
21
  return window[KEY] as VirtualFileTracker;
22
22
  }
23
23
 
24
- virtualFiles = new Map<CellId, Set<string>>();
24
+ public virtualFiles = new Map<CellId, Set<string>>();
25
25
 
26
26
  private constructor() {
27
27
  // Private
28
28
  }
29
29
 
30
- track(message: Pick<CellMessage, "cell_id" | "output">): void {
30
+ public track(message: Pick<CellMessage, "cell_id" | "output">): void {
31
31
  const output = message.output;
32
32
  const cellId = message.cell_id;
33
33
  if (!output) {
@@ -48,7 +48,7 @@ export class VirtualFileTracker {
48
48
  }
49
49
  }
50
50
 
51
- filenames(): string[] {
51
+ public filenames(): string[] {
52
52
  const set = new Set<string>();
53
53
  for (const files of this.virtualFiles.values()) {
54
54
  files.forEach((file) => set.add(file));
@@ -57,7 +57,7 @@ export class VirtualFileTracker {
57
57
  return [...set];
58
58
  }
59
59
 
60
- removeForCellId(cellId: CellId): void {
60
+ public removeForCellId(cellId: CellId): void {
61
61
  this.virtualFiles.delete(cellId);
62
62
  }
63
63
  }
@@ -35,8 +35,8 @@ vi.stubGlobal(
35
35
  );
36
36
 
37
37
  class MockURL extends URL {
38
- static override createObjectURL = vi.fn(() => "blob:mock-url");
39
- static override revokeObjectURL = vi.fn();
38
+ public static override createObjectURL = vi.fn(() => "blob:mock-url");
39
+ public static override revokeObjectURL = vi.fn();
40
40
  }
41
41
  vi.stubGlobal("URL", MockURL);
42
42