@marimo-team/frontend 0.21.2-dev39 → 0.21.2-dev41

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 (78) hide show
  1. package/dist/assets/{edit-page-OLDApdB5.js → edit-page-Cqvk7zWH.js} +7 -7
  2. package/dist/assets/{index-DZVnuqxZ.js → index-BSzIstPK.js} +2 -2
  3. package/dist/assets/{panels-LFK8M8Jo.js → panels-B2DAaT1E.js} +1 -1
  4. package/dist/assets/{run-page-B-zpKjX2.js → run-page-DMpRvHgf.js} +1 -1
  5. package/dist/assets/tracing-BxcUfhUv.js +1 -0
  6. package/dist/assets/{tracing-panel-CKmy1CaA.js → tracing-panel-DK4YfdoZ.js} +2 -2
  7. package/dist/index.html +1 -1
  8. package/package.json +1 -1
  9. package/src/__mocks__/notebook.ts +9 -9
  10. package/src/__tests__/branded.ts +20 -0
  11. package/src/components/data-table/charts/__tests__/storage.test.ts +7 -7
  12. package/src/components/editor/__tests__/data-attributes.test.tsx +8 -8
  13. package/src/components/editor/ai/__tests__/completion-utils.test.ts +15 -15
  14. package/src/components/editor/navigation/__tests__/clipboard.test.ts +2 -2
  15. package/src/components/editor/navigation/__tests__/selection.test.ts +7 -6
  16. package/src/components/editor/navigation/__tests__/state.test.ts +8 -7
  17. package/src/components/editor/output/MarimoErrorOutput.tsx +7 -7
  18. package/src/components/editor/output/__tests__/traceback.test.tsx +4 -4
  19. package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +4 -4
  20. package/src/components/editor/renderers/vertical-layout/useFocusFirstEditor.ts +8 -1
  21. package/src/components/storage/storage-inspector.tsx +1 -2
  22. package/src/components/tracing/tracing.tsx +3 -1
  23. package/src/core/ai/__tests__/staged-cells.test.ts +9 -8
  24. package/src/core/ai/context/providers/__tests__/cell-output.test.ts +31 -31
  25. package/src/core/ai/context/providers/__tests__/datasource.test.ts +3 -3
  26. package/src/core/ai/context/providers/__tests__/tables.test.ts +3 -2
  27. package/src/core/ai/context/providers/__tests__/variable.test.ts +84 -63
  28. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +10 -9
  29. package/src/core/ai/tools/__tests__/run-cells-tool.test.ts +6 -6
  30. package/src/core/ai/tools/edit-notebook-tool.ts +3 -3
  31. package/src/core/cells/__tests__/add-missing-import.test.ts +3 -3
  32. package/src/core/cells/__tests__/cells.test.ts +192 -135
  33. package/src/core/cells/__tests__/focus.test.ts +5 -4
  34. package/src/core/cells/__tests__/logs.test.ts +13 -12
  35. package/src/core/cells/__tests__/pending-delete-service.test.tsx +3 -3
  36. package/src/core/cells/__tests__/runs.test.ts +22 -21
  37. package/src/core/cells/__tests__/scrollCellIntoView.test.ts +8 -7
  38. package/src/core/cells/__tests__/session.test.ts +23 -22
  39. package/src/core/cells/cells.ts +1 -1
  40. package/src/core/cells/ids.ts +5 -5
  41. package/src/core/cells/logs.ts +2 -2
  42. package/src/core/cells/runs.ts +6 -8
  43. package/src/core/codemirror/__tests__/format.test.ts +34 -36
  44. package/src/core/codemirror/__tests__/setup.test.ts +2 -2
  45. package/src/core/codemirror/cells/__tests__/traceback-decorations.test.ts +33 -32
  46. package/src/core/codemirror/copilot/__tests__/getCodes.test.ts +12 -13
  47. package/src/core/codemirror/language/__tests__/utils.test.ts +3 -3
  48. package/src/core/codemirror/language/embedded/__tests__/embedded-python.test.ts +7 -8
  49. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +4 -3
  50. package/src/core/codemirror/reactive-references/__tests__/analyzer.test.ts +7 -6
  51. package/src/core/codemirror/reactive-references/analyzer.ts +2 -2
  52. package/src/core/datasets/__tests__/data-source.test.ts +5 -6
  53. package/src/core/datasets/state.ts +1 -1
  54. package/src/core/errors/__tests__/errors.test.ts +2 -1
  55. package/src/core/export/__tests__/hooks.test.ts +37 -36
  56. package/src/core/islands/main.ts +2 -7
  57. package/src/core/kernel/__tests__/handlers.test.ts +5 -4
  58. package/src/core/kernel/handlers.ts +7 -4
  59. package/src/core/network/DeferredRequestRegistry.ts +2 -2
  60. package/src/core/network/__tests__/CachingRequestRegistry.test.ts +9 -10
  61. package/src/core/network/__tests__/DeferredRequestRegistry.test.ts +4 -6
  62. package/src/core/static/__tests__/virtual-file-tracker.test.ts +8 -8
  63. package/src/core/static/virtual-file-tracker.ts +1 -1
  64. package/src/core/storage/__tests__/state.test.ts +31 -21
  65. package/src/core/storage/state.ts +1 -1
  66. package/src/core/variables/__tests__/state.test.ts +6 -6
  67. package/src/core/variables/types.ts +2 -2
  68. package/src/core/wasm/__tests__/state.test.ts +8 -8
  69. package/src/core/websocket/useMarimoKernelConnection.tsx +12 -15
  70. package/src/plugins/impl/anywidget/model.ts +1 -2
  71. package/src/stories/cell.stories.tsx +8 -8
  72. package/src/stories/layout/vertical/one-column.stories.tsx +9 -8
  73. package/src/stories/log-viewer.stories.tsx +8 -8
  74. package/src/stories/variables.stories.tsx +2 -2
  75. package/src/utils/__tests__/download.test.tsx +19 -18
  76. package/src/utils/json/base64.ts +3 -3
  77. package/src/utils/traceback.ts +5 -3
  78. package/dist/assets/tracing-QGIu3SN5.js +0 -1
@@ -1,7 +1,8 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
+
2
3
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
4
  import { Mocks } from "@/__mocks__/common";
4
- import type { CellId } from "@/core/cells/ids";
5
+ import { cellId } from "@/__tests__/branded";
5
6
  import { CellOutputId } from "@/core/cells/ids";
6
7
  import {
7
8
  downloadAsPDF,
@@ -218,7 +219,7 @@ describe("getImageDataUrlForCell", () => {
218
219
  beforeEach(() => {
219
220
  vi.clearAllMocks();
220
221
  mockElement = document.createElement("div");
221
- mockElement.id = CellOutputId.create("cell-1" as CellId);
222
+ mockElement.id = CellOutputId.create(cellId("cell-1"));
222
223
  document.body.append(mockElement);
223
224
  });
224
225
 
@@ -227,7 +228,7 @@ describe("getImageDataUrlForCell", () => {
227
228
  });
228
229
 
229
230
  it("should return undefined if element is not found", async () => {
230
- const result = await getImageDataUrlForCell("nonexistent" as CellId);
231
+ const result = await getImageDataUrlForCell(cellId("nonexistent"));
231
232
 
232
233
  expect(result).toBeUndefined();
233
234
  expect(Logger.error).toHaveBeenCalledWith(
@@ -238,7 +239,7 @@ describe("getImageDataUrlForCell", () => {
238
239
  it("should capture screenshot and return data URL", async () => {
239
240
  vi.mocked(toPng).mockResolvedValue(mockDataUrl);
240
241
 
241
- const result = await getImageDataUrlForCell("cell-1" as CellId);
242
+ const result = await getImageDataUrlForCell(cellId("cell-1"));
242
243
 
243
244
  expect(result).toBe(mockDataUrl);
244
245
  expect(toPng).toHaveBeenCalledWith(
@@ -253,7 +254,7 @@ describe("getImageDataUrlForCell", () => {
253
254
  it("should pass style options to prevent clipping", async () => {
254
255
  vi.mocked(toPng).mockResolvedValue(mockDataUrl);
255
256
 
256
- await getImageDataUrlForCell("cell-1" as CellId);
257
+ await getImageDataUrlForCell(cellId("cell-1"));
257
258
 
258
259
  expect(toPng).toHaveBeenCalledWith(
259
260
  mockElement,
@@ -274,7 +275,7 @@ describe("getImageDataUrlForCell", () => {
274
275
  });
275
276
  vi.mocked(toPng).mockResolvedValue(mockDataUrl);
276
277
 
277
- await getImageDataUrlForCell("cell-1" as CellId);
278
+ await getImageDataUrlForCell(cellId("cell-1"));
278
279
 
279
280
  expect(toPng).toHaveBeenCalledWith(
280
281
  mockElement,
@@ -287,7 +288,7 @@ describe("getImageDataUrlForCell", () => {
287
288
  it("should pass scrollbar hiding styles via extraStyleContent", async () => {
288
289
  vi.mocked(toPng).mockResolvedValue(mockDataUrl);
289
290
 
290
- await getImageDataUrlForCell("cell-1" as CellId);
291
+ await getImageDataUrlForCell(cellId("cell-1"));
291
292
 
292
293
  expect(toPng).toHaveBeenCalledWith(
293
294
  mockElement,
@@ -302,7 +303,7 @@ describe("getImageDataUrlForCell", () => {
302
303
  mockElement.style.maxHeight = "100px";
303
304
  vi.mocked(toPng).mockResolvedValue(mockDataUrl);
304
305
 
305
- await getImageDataUrlForCell("cell-1" as CellId);
306
+ await getImageDataUrlForCell(cellId("cell-1"));
306
307
 
307
308
  // DOM should remain unchanged
308
309
  expect(mockElement.style.overflow).toBe("hidden");
@@ -312,7 +313,7 @@ describe("getImageDataUrlForCell", () => {
312
313
  it("should throw error on failure", async () => {
313
314
  vi.mocked(toPng).mockRejectedValue(new Error("Capture failed"));
314
315
 
315
- await expect(getImageDataUrlForCell("cell-1" as CellId)).rejects.toThrow(
316
+ await expect(getImageDataUrlForCell(cellId("cell-1"))).rejects.toThrow(
316
317
  "Capture failed",
317
318
  );
318
319
  });
@@ -320,13 +321,13 @@ describe("getImageDataUrlForCell", () => {
320
321
  it("should handle concurrent captures correctly", async () => {
321
322
  // Create a second element
322
323
  const mockElement2 = document.createElement("div");
323
- mockElement2.id = CellOutputId.create("cell-2" as CellId);
324
+ mockElement2.id = CellOutputId.create(cellId("cell-2"));
324
325
  document.body.append(mockElement2);
325
326
 
326
327
  vi.mocked(toPng).mockResolvedValue(mockDataUrl);
327
328
 
328
- const capture1 = getImageDataUrlForCell("cell-1" as CellId);
329
- const capture2 = getImageDataUrlForCell("cell-2" as CellId);
329
+ const capture1 = getImageDataUrlForCell(cellId("cell-1"));
330
+ const capture2 = getImageDataUrlForCell(cellId("cell-2"));
330
331
 
331
332
  await Promise.all([capture1, capture2]);
332
333
 
@@ -461,7 +462,7 @@ describe("downloadCellOutputAsImage", () => {
461
462
  beforeEach(() => {
462
463
  vi.clearAllMocks();
463
464
  mockElement = document.createElement("div");
464
- mockElement.id = CellOutputId.create("cell-1" as CellId);
465
+ mockElement.id = CellOutputId.create(cellId("cell-1"));
465
466
  mockAppEl = document.createElement("div");
466
467
  mockAppEl.id = "App";
467
468
  // Mock scrollTo since jsdom doesn't implement it
@@ -486,7 +487,7 @@ describe("downloadCellOutputAsImage", () => {
486
487
  });
487
488
 
488
489
  it("should show error toast if element not found", async () => {
489
- await downloadCellOutputAsImage("nonexistent" as CellId, "test");
490
+ await downloadCellOutputAsImage(cellId("nonexistent"), "test");
490
491
 
491
492
  expect(toPng).not.toHaveBeenCalled();
492
493
  expect(Logger.error).toHaveBeenCalledWith(
@@ -502,7 +503,7 @@ describe("downloadCellOutputAsImage", () => {
502
503
  it("should show error toast if toPng fails", async () => {
503
504
  vi.mocked(toPng).mockRejectedValue(new Error("Screenshot failed"));
504
505
 
505
- await downloadCellOutputAsImage("cell-1" as CellId, "result");
506
+ await downloadCellOutputAsImage(cellId("cell-1"), "result");
506
507
 
507
508
  expect(toast).toHaveBeenCalledWith({
508
509
  title: "Failed to download PNG",
@@ -514,7 +515,7 @@ describe("downloadCellOutputAsImage", () => {
514
515
  it("should download cell output as image", async () => {
515
516
  vi.mocked(toPng).mockResolvedValue(mockDataUrl);
516
517
 
517
- await downloadCellOutputAsImage("cell-1" as CellId, "result");
518
+ await downloadCellOutputAsImage(cellId("cell-1"), "result");
518
519
 
519
520
  expect(toPng).toHaveBeenCalledWith(
520
521
  mockElement,
@@ -529,7 +530,7 @@ describe("downloadCellOutputAsImage", () => {
529
530
  it("should pass style options to toPng for full content capture", async () => {
530
531
  vi.mocked(toPng).mockResolvedValue(mockDataUrl);
531
532
 
532
- await downloadCellOutputAsImage("cell-1" as CellId, "result");
533
+ await downloadCellOutputAsImage(cellId("cell-1"), "result");
533
534
 
534
535
  expect(toPng).toHaveBeenCalledWith(
535
536
  mockElement,
@@ -547,7 +548,7 @@ describe("downloadCellOutputAsImage", () => {
547
548
  mockElement.style.maxHeight = "100px";
548
549
  vi.mocked(toPng).mockResolvedValue(mockDataUrl);
549
550
 
550
- await downloadCellOutputAsImage("cell-1" as CellId, "result");
551
+ await downloadCellOutputAsImage(cellId("cell-1"), "result");
551
552
 
552
553
  // DOM should remain unchanged
553
554
  expect(mockElement.style.overflow).toBe("hidden");
@@ -1,5 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
+ import type { components } from "@marimo-team/marimo-api";
3
4
  import type { NotificationMessageData } from "@/core/kernel/messages";
4
5
  import type { TypedString } from "../typed";
5
6
 
@@ -11,9 +12,9 @@ export type JsonString<T = unknown> = TypedString<"Json"> & {
11
12
  };
12
13
 
13
14
  /**
14
- * A base64-encoded string.
15
+ * A base64-encoded string — derived from the generated OpenAPI schema.
15
16
  */
16
- export type Base64String = TypedString<"Base64">;
17
+ export type Base64String = components["schemas"]["Base64String"];
17
18
 
18
19
  /**
19
20
  * A data URL string.
@@ -120,7 +121,6 @@ export function dataViewToBase64(dataView: DataView): Base64String {
120
121
  export function safeExtractSetUIElementMessageBuffers(
121
122
  notification: NotificationMessageData<"send-ui-element-message">,
122
123
  ): readonly DataView[] {
123
- // @ts-expect-error - TypeScript doesn't know that these strings are actually base64 strings
124
124
  const strs: Base64String[] = notification.buffers ?? [];
125
125
  return strs.map(base64ToDataView);
126
126
  }
@@ -98,10 +98,12 @@ export function getTracebackInfo(domNode: DOMNode): TracebackInfo | null {
98
98
  10,
99
99
  );
100
100
  if (domNode.firstChild.nodeValue?.includes("__marimo__")) {
101
- const cellId = /__marimo__cell_(\w+)_/.exec(
101
+ const maybeCellId = /__marimo__cell_(\w+)_/.exec(
102
102
  domNode.firstChild.nodeValue,
103
- )?.[1] as CellId;
104
- if (cellId && lineNumber) {
103
+ )?.[1];
104
+ if (maybeCellId && lineNumber) {
105
+ // @ts-expect-error - Custom parser above will return valid cell ids
106
+ const cellId: CellId = maybeCellId;
105
107
  return { kind: "cell", cellId, lineNumber };
106
108
  }
107
109
  } else {
@@ -1 +0,0 @@
1
- import{s as F}from"./chunk-LvLJmgfZ.js";import{d as ee,p as te,u as L}from"./useEvent-O0nX5vok.js";import{t as re}from"./react-Bj1aDYRI.js";import{K as A,er as le,j as se,or as ae}from"./cells-DqKJsMUm.js";import"./react-dom-CSu739Rf.js";import{t as ie}from"./compiler-runtime-B3qBwwSJ.js";import{t as ne}from"./jsx-runtime-icT_Ltz2.js";import{t as oe}from"./cn-BoaCR37F.js";import"./dist-B_cxg-E4.js";import"./cjs-BU2qXMKx.js";import"./main-DrBRErTM.js";import"./useNonce-BtW-rR_1.js";import{t as de}from"./createLucideIcon-Cm-Z7dYr.js";import{n as ce,r as U}from"./CellStatus-IHJk0CT8.js";import{r as me}from"./x-BI1M8X_v.js";import{t as pe}from"./chevron-right-D0GQBpTb.js";import{t as ue}from"./circle-check-gLIOLu8x.js";import{t as he}from"./circle-play-DYGULlKZ.js";import"./dist-BNC_tnlW.js";import"./dist-CXLJUPFl.js";import"./dist-CQqv2gQL.js";import"./dist-8UD0A5sU.js";import"./dist-apDpadc4.js";import"./session-BrEm7qNv.js";import{r as fe}from"./useTheme-BYXBU1of.js";import"./Combination-Cs9nbinQ.js";import{t as K}from"./tooltip-D9723Brr.js";import"./purify.es-BBn8CPhf.js";import"./vega-loader.browser-CZV6_g2i.js";import{r as xe,t as ve}from"./react-vega-BZav_-2n.js";import"./defaultLocale-OkOxlkkM.js";import"./defaultLocale-DK1MWd7f.js";import{t as ge}from"./cell-link-BEnixmCb.js";import{t as je}from"./bundle.esm-idScn0w0.js";import{n as ye,r as Ie,t as V}from"./react-resizable-panels.browser.esm-DDRqG5ui.js";import{t as Se}from"./empty-state-B_US46Us.js";import"./multi-icon-DEWnuZs2.js";import{r as be}from"./panel-context-BN0DQXiK.js";import{t as Ne}from"./clear-button-DrIF5o__.js";import{n as Te,t as we}from"./runs-Bhy0tbWr.js";var ke=de("circle-ellipsis",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M17 12h.01",key:"1m0b6t"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M7 12h.01",key:"eqddd0"}]]),H=ie(),C=F(re(),1);const Y="hoveredCellId",G="cellHover";var Re="cellNum",J="cell",O="startTimestamp",Q="endTimestamp",W="status";function _e(t,e,r,a){let i="hoursminutessecondsmilliseconds";return{$schema:"https://vega.github.io/schema/vega-lite/v6.json",background:a==="dark"?"black":void 0,mark:{type:"bar",cornerRadius:2},params:[{name:Y,bind:{element:`#${e}`}},{name:G,select:{type:"point",on:"mouseover",fields:[J],clear:"mouseout"}}],height:{step:r==="sideBySide"?26:21},encoding:{y:{field:Re,scale:{paddingInner:.2},sort:{field:"sortPriority"},title:"cell",axis:r==="sideBySide"?null:void 0},x:{field:O,type:"temporal",axis:{orient:"top",title:null}},x2:{field:Q,type:"temporal"},tooltip:[{field:O,type:"temporal",timeUnit:i,title:"Start"},{field:Q,type:"temporal",timeUnit:i,title:"End"}],size:{value:{expr:`${Y} == toString(datum.${J}) ? 19.5 : 18`}},color:{field:W,scale:{domain:["success","error"],range:["#37BE5F","red"]},legend:null}},data:{values:t},transform:[{calculate:`datum.${W} === 'queued' ? 9999999999999 : datum.${O}`,as:"sortPriority"}],config:{view:{stroke:"transparent"}}}}function X(t){try{let e=new Date(t*1e3);return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")} ${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.getSeconds()).padStart(2,"0")}.${String(e.getMilliseconds()).padStart(3,"0")}`}catch{return""}}var l=F(ne(),1),Z=te(new Map);const Me=()=>{let t=(0,H.c)(34),{runIds:e,runMap:r}=L(we),a=L(Z),{clearRuns:i}=Te(),{theme:n}=fe(),[s,w]=(0,C.useState)("above"),N=be(),c;t[0]===s?c=t[1]:(c=()=>{w(s==="above"?"sideBySide":"above")},t[0]=s,t[1]=c);let m=c;if(e.length===0){let p;return t[2]===Symbol.for("react.memo_cache_sentinel")?(p=(0,l.jsx)(Se,{title:"No traces",description:(0,l.jsx)("span",{children:"Cells that have ran will appear here."}),icon:(0,l.jsx)(ae,{})}),t[2]=p):p=t[2],p}let u;t[3]===Symbol.for("react.memo_cache_sentinel")?(u=(0,l.jsx)("label",{htmlFor:"chartPosition",className:"text-xs",children:"Inline chart"}),t[3]=u):u=t[3];let y=s==="sideBySide",o;t[4]!==y||t[5]!==m?(o=(0,l.jsxs)("div",{className:"flex flex-row gap-1 items-center",children:[u,(0,l.jsx)("input",{type:"checkbox",name:"chartPosition","data-testid":"chartPosition",onClick:m,defaultChecked:y,className:"h-3 cursor-pointer"})]}),t[4]=y,t[5]=m,t[6]=o):o=t[6];let h;t[7]===i?h=t[8]:(h=(0,l.jsx)(Ne,{dataTestId:"clear-traces-button",onClick:i}),t[7]=i,t[8]=h);let v;t[9]!==o||t[10]!==h?(v=(0,l.jsxs)("div",{className:"flex flex-row justify-start gap-3",children:[o,h]}),t[9]=o,t[10]=h,t[11]=v):v=t[11];let g;if(t[12]!==s||t[13]!==a||t[14]!==e||t[15]!==r||t[16]!==n){let p;t[18]!==s||t[19]!==a||t[20]!==r||t[21]!==n?(p=(_,E)=>{let R=r.get(_);return R?(0,l.jsx)($e,{run:R,isExpanded:a.get(R.runId),isMostRecentRun:E===0,chartPosition:s,theme:n},R.runId):null},t[18]=s,t[19]=a,t[20]=r,t[21]=n,t[22]=p):p=t[22],g=e.map(p),t[12]=s,t[13]=a,t[14]=e,t[15]=r,t[16]=n,t[17]=g}else g=t[17];let j;t[23]===g?j=t[24]:(j=(0,l.jsx)("div",{className:"flex flex-col gap-3",children:g}),t[23]=g,t[24]=j);let T;t[25]!==v||t[26]!==j?(T=(0,l.jsxs)("div",{className:"py-1 px-2 overflow-y-scroll h-full",children:[v,j]}),t[25]=v,t[26]=j,t[27]=T):T=t[27];let f=T;if(N==="sidebar")return f;let x;t[28]===f?x=t[29]:(x=(0,l.jsx)(V,{defaultSize:50,minSize:30,maxSize:80,children:f}),t[28]=f,t[29]=x);let d;t[30]===Symbol.for("react.memo_cache_sentinel")?(d=(0,l.jsx)(Ie,{className:"w-1 bg-border hover:bg-primary/50 transition-colors"}),t[30]=d):d=t[30];let I;t[31]===Symbol.for("react.memo_cache_sentinel")?(I=(0,l.jsx)(V,{defaultSize:50,children:(0,l.jsx)("div",{})}),t[31]=I):I=t[31];let S;return t[32]===x?S=t[33]:(S=(0,l.jsxs)(ye,{direction:"horizontal",className:"h-full",children:[x,d,I]}),t[32]=x,t[33]=S),S};var $e=({run:t,isMostRecentRun:e,chartPosition:r,isExpanded:a,theme:i})=>{let n=ee(Z);a??(a=e);let s=()=>{n(c=>{let m=new Map(c);return m.set(t.runId,!a),m})},w=(0,l.jsx)(a?me:pe,{height:16,className:"inline"}),N=(0,l.jsxs)("span",{className:"text-sm cursor-pointer",onClick:s,children:["Run - ",A(t.runStartTime),w]});return a?(0,l.jsx)(ze,{run:t,chartPosition:r,theme:i,title:N},t.runId):(0,l.jsx)("div",{className:"flex flex-col",children:(0,l.jsx)("pre",{className:"font-mono font-semibold",children:N})},t.runId)},ze=t=>{let e=(0,H.c)(40),{run:r,chartPosition:a,theme:i,title:n}=t,[s,w]=(0,C.useState)(),N=(0,C.useRef)(null),{ref:c,width:m}=je(),u=m===void 0?300:m,y=se(),o,h;if(e[0]!==y||e[1]!==a||e[2]!==r.cellRuns||e[3]!==r.runId||e[4]!==i){let k=[...r.cellRuns.values()].map(b=>{let M=b.elapsedTime??0;return{cell:b.cellId,cellNum:y.inOrderIds.indexOf(b.cellId),startTimestamp:X(b.startTime),endTimestamp:X(b.startTime+M),elapsedTime:U(M*1e3),status:b.status}});o=`hiddenInputElement-${r.runId}`,h=xe(_e(k,o,a,i)),e[0]=y,e[1]=a,e[2]=r.cellRuns,e[3]=r.runId,e[4]=i,e[5]=o,e[6]=h}else o=e[5],h=e[6];let v=h.spec,g=i==="dark"?"dark":void 0,j=u-50,T=a==="above"?120:100,f;e[7]!==g||e[8]!==j||e[9]!==T?(f={theme:g,width:j,height:T,actions:!1,mode:"vega",renderer:"canvas"},e[7]=g,e[8]=j,e[9]=T,e[10]=f):f=e[10];let x;e[11]!==f||e[12]!==v?(x={ref:N,spec:v,options:f},e[11]=f,e[12]=v,e[13]=x):x=e[13];let d=ve(x),I;e[14]===(d==null?void 0:d.view)?I=e[15]:(I=()=>{let k=[{signalName:G,handler:(b,M)=>{var q;let P=(q=M.cell)==null?void 0:q[0];w(P??null)}}];return k.forEach(b=>{let{signalName:M,handler:P}=b;d==null||d.view.addSignalListener(M,P)}),()=>{k.forEach(b=>{let{signalName:M,handler:P}=b;d==null||d.view.removeSignalListener(M,P)})}},e[14]=d==null?void 0:d.view,e[15]=I);let S;e[16]===d?S=e[17]:(S=[d],e[16]=d,e[17]=S),(0,C.useEffect)(I,S);let p;e[18]!==o||e[19]!==s||e[20]!==r?(p=(0,l.jsx)(Ce,{run:r,hoveredCellId:s,hiddenInputElementId:o}),e[18]=o,e[19]=s,e[20]=r,e[21]=p):p=e[21];let _=p,E=a==="sideBySide"?"-mt-0.5 flex-1":"",R;e[22]===Symbol.for("react.memo_cache_sentinel")?(R=(0,l.jsx)(C.Suspense,{children:(0,l.jsx)("div",{ref:N})}),e[22]=R):R=e[22];let B;e[23]!==c||e[24]!==E?(B=(0,l.jsx)("div",{className:E,ref:c,children:R}),e[23]=c,e[24]=E,e[25]=B):B=e[25];let $=B;if(a==="above"){let k;e[26]!==$||e[27]!==n||e[28]!==_?(k=(0,l.jsxs)("pre",{className:"font-mono font-semibold",children:[n,$,_]}),e[26]=$,e[27]=n,e[28]=_,e[29]=k):k=e[29];let b;return e[30]!==r.runId||e[31]!==k?(b=(0,l.jsx)("div",{className:"flex flex-col",children:k},r.runId),e[30]=r.runId,e[31]=k,e[32]=b):b=e[32],b}let z;e[33]!==n||e[34]!==_?(z=(0,l.jsxs)("pre",{className:"font-mono font-semibold",children:[n,_]}),e[33]=n,e[34]=_,e[35]=z):z=e[35];let D;return e[36]!==$||e[37]!==r.runId||e[38]!==z?(D=(0,l.jsxs)("div",{className:"flex flex-row",children:[z,$]},r.runId),e[36]=$,e[37]=r.runId,e[38]=z,e[39]=D):D=e[39],D},Ce=t=>{let e=(0,H.c)(12),{run:r,hoveredCellId:a,hiddenInputElementId:i}=t,n=(0,C.useRef)(null),s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=o=>{n.current&&(n.current.value=String(o),n.current.dispatchEvent(new Event("input",{bubbles:!0})))},e[0]=s):s=e[0];let w=s,N=a||"",c;e[1]!==i||e[2]!==N?(c=(0,l.jsx)("input",{type:"text",id:i,defaultValue:N,hidden:!0,ref:n}),e[1]=i,e[2]=N,e[3]=c):c=e[3];let m;e[4]===r.cellRuns?m=e[5]:(m=[...r.cellRuns.values()],e[4]=r.cellRuns,e[5]=m);let u;e[6]!==a||e[7]!==m?(u=m.map(o=>(0,l.jsx)(Pe,{cellRun:o,hovered:o.cellId===a,dispatchHoverEvent:w},o.cellId)),e[6]=a,e[7]=m,e[8]=u):u=e[8];let y;return e[9]!==c||e[10]!==u?(y=(0,l.jsxs)("div",{className:"text-xs mt-0.5 ml-3 flex flex-col gap-0.5",children:[c,u]}),e[9]=c,e[10]=u,e[11]=y):y=e[11],y},Ee={success:(0,l.jsx)(ue,{color:"green",size:14}),running:(0,l.jsx)(he,{color:"var(--blue-10)",size:14}),error:(0,l.jsx)(le,{color:"red",size:14}),queued:(0,l.jsx)(ke,{color:"grey",size:14})},Pe=t=>{let e=(0,H.c)(39),{cellRun:r,hovered:a,dispatchHoverEvent:i}=t,n;e[0]===r.elapsedTime?n=e[1]:(n=r.elapsedTime?U(r.elapsedTime*1e3):"-",e[0]=r.elapsedTime,e[1]=n);let s=n,w;e[2]!==r.elapsedTime||e[3]!==s?(w=r.elapsedTime?(0,l.jsxs)("span",{children:["This cell took ",(0,l.jsx)(ce,{elapsedTime:s})," to run"]}):(0,l.jsx)("span",{children:"This cell has not been run"}),e[2]=r.elapsedTime,e[3]=s,e[4]=w):w=e[4];let N=w,c;e[5]!==r.cellId||e[6]!==i?(c=()=>{i(r.cellId)},e[5]=r.cellId,e[6]=i,e[7]=c):c=e[7];let m=c,u;e[8]===i?u=e[9]:(u=()=>{i(null)},e[8]=i,e[9]=u);let y=u,o=a&&"bg-(--gray-3) opacity-100",h;e[10]===o?h=e[11]:(h=oe("flex flex-row gap-2 py-1 px-1 opacity-70 hover:bg-(--gray-3) hover:opacity-100",o),e[10]=o,e[11]=h);let v;e[12]===r.startTime?v=e[13]:(v=A(r.startTime),e[12]=r.startTime,e[13]=v);let g;e[14]===v?g=e[15]:(g=(0,l.jsxs)("span",{className:"text-(--gray-10) dark:text-(--gray-11)",children:["[",v,"]"]}),e[14]=v,e[15]=g);let j;e[16]===r.cellId?j=e[17]:(j=(0,l.jsxs)("span",{className:"text-(--gray-10) w-16 overflow-hidden",children:["(",(0,l.jsx)(ge,{cellId:r.cellId}),")"]}),e[16]=r.cellId,e[17]=j);let T;e[18]===r.code?T=e[19]:(T=(0,l.jsx)("span",{className:"w-40 truncate -ml-1",children:r.code}),e[18]=r.code,e[19]=T);let f;e[20]===s?f=e[21]:(f=(0,l.jsx)("span",{className:"text-(--gray-10) dark:text-(--gray-11)",children:s}),e[20]=s,e[21]=f);let x;e[22]!==N||e[23]!==f?(x=(0,l.jsx)(K,{content:N,children:f}),e[22]=N,e[23]=f,e[24]=x):x=e[24];let d=Ee[r.status],I;e[25]!==r.status||e[26]!==d?(I=(0,l.jsx)(K,{content:r.status,children:d}),e[25]=r.status,e[26]=d,e[27]=I):I=e[27];let S;e[28]!==x||e[29]!==I?(S=(0,l.jsxs)("div",{className:"flex flex-row gap-1 w-16 justify-end -ml-2",children:[x,I]}),e[28]=x,e[29]=I,e[30]=S):S=e[30];let p;return e[31]!==m||e[32]!==y||e[33]!==T||e[34]!==S||e[35]!==h||e[36]!==g||e[37]!==j?(p=(0,l.jsxs)("div",{className:h,onMouseEnter:m,onMouseLeave:y,children:[g,j,T,S]}),e[31]=m,e[32]=y,e[33]=T,e[34]=S,e[35]=h,e[36]=g,e[37]=j,e[38]=p):p=e[38],p};export{Me as Tracing};