@marimo-team/frontend 0.23.7-dev14 → 0.23.7-dev15

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 (29) hide show
  1. package/dist/assets/{cell-editor-DOImf428.js → cell-editor-BN3D1_w1.js} +1 -1
  2. package/dist/assets/{command-palette-CSa-ZC8t.js → command-palette-DuPUk7of.js} +1 -1
  3. package/dist/assets/{edit-page-oNoydBaC.js → edit-page-hJAbnd__.js} +6 -6
  4. package/dist/assets/{hooks-BpoZRNxw.js → hooks-DbPDczTe.js} +1 -1
  5. package/dist/assets/{index-5VlGukaI.js → index-CH2ZE_q-.js} +3 -3
  6. package/dist/assets/{layout-D5myrs5s.js → layout-C1dvirgi.js} +2 -2
  7. package/dist/assets/panels-Z5fVmDRY.js +1 -0
  8. package/dist/assets/{reveal-component-CJYRD8Yf.js → reveal-component-DLRiYfBj.js} +1 -1
  9. package/dist/assets/run-page-DDMPBh9O.js +1 -0
  10. package/dist/assets/{scratchpad-panel-SgUSM06x.js → scratchpad-panel-CUMSD7sH.js} +1 -1
  11. package/dist/assets/{state-BaHWS0qi.js → state-xEqF8Q3P.js} +1 -1
  12. package/dist/assets/{useNotebookActions-CrtC0jVZ.js → useNotebookActions-CZ7s2FNR.js} +1 -1
  13. package/dist/assets/ws-BV7dcs53.js +22 -0
  14. package/dist/index.html +2 -2
  15. package/package.json +2 -2
  16. package/src/components/editor/app-container.tsx +7 -1
  17. package/src/components/editor/header/__tests__/status.test.tsx +108 -0
  18. package/src/components/editor/header/status.tsx +44 -10
  19. package/src/core/edit-app.tsx +2 -1
  20. package/src/core/run-app.tsx +2 -1
  21. package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +155 -0
  22. package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +137 -0
  23. package/src/core/websocket/transports/basic.ts +2 -0
  24. package/src/core/websocket/transports/transport.ts +1 -0
  25. package/src/core/websocket/useMarimoKernelConnection.tsx +130 -55
  26. package/src/core/websocket/useWebSocket.tsx +5 -2
  27. package/dist/assets/panels-C-Vq2Qyd.js +0 -1
  28. package/dist/assets/run-page-C0hUYcpE.js +0 -1
  29. package/dist/assets/ws-BZQmQxZ7.js +0 -22
@@ -11,7 +11,10 @@ import type {
11
11
  NotificationMessageData,
12
12
  NotificationPayload,
13
13
  } from "@/core/kernel/messages";
14
- import { useConnectionTransport } from "@/core/websocket/useWebSocket";
14
+ import {
15
+ MAX_RETRIES,
16
+ useConnectionTransport,
17
+ } from "@/core/websocket/useWebSocket";
15
18
  import { renderHTML } from "@/plugins/core/RenderHTML";
16
19
  import {
17
20
  handleWidgetMessage,
@@ -69,10 +72,96 @@ import { useStorageActions } from "../storage/state";
69
72
  import { useVariablesActions } from "../variables/state";
70
73
  import type { VariableName } from "../variables/types";
71
74
  import { isWasm } from "../wasm/utils";
72
- import { WebSocketClosedReason, WebSocketState } from "./types";
75
+ import {
76
+ type ConnectionStatus,
77
+ WebSocketClosedReason,
78
+ WebSocketState,
79
+ } from "./types";
73
80
 
74
81
  const SUPPORTS_LAZY_KERNELS = true;
75
82
 
83
+ export type CloseDecision =
84
+ | { kind: "terminal"; status: ConnectionStatus; closeTransport: boolean }
85
+ | { kind: "gave-up"; status: ConnectionStatus }
86
+ | { kind: "retry"; status: ConnectionStatus };
87
+
88
+ export function classifyCloseEvent(
89
+ event: { reason?: string },
90
+ context: { retryCount: number; maxRetries: number },
91
+ ): CloseDecision {
92
+ switch (event.reason) {
93
+ case "MARIMO_ALREADY_CONNECTED":
94
+ return {
95
+ kind: "terminal",
96
+ status: {
97
+ state: WebSocketState.CLOSED,
98
+ code: WebSocketClosedReason.ALREADY_RUNNING,
99
+ reason: "another browser tab is already connected to the kernel",
100
+ canTakeover: true,
101
+ },
102
+ closeTransport: true,
103
+ };
104
+ case "MARIMO_WRONG_KERNEL_ID":
105
+ case "MARIMO_NO_FILE_KEY":
106
+ case "MARIMO_NO_SESSION_ID":
107
+ case "MARIMO_NO_SESSION":
108
+ case "MARIMO_SHUTDOWN":
109
+ return {
110
+ kind: "terminal",
111
+ status: {
112
+ state: WebSocketState.CLOSED,
113
+ code: WebSocketClosedReason.KERNEL_DISCONNECTED,
114
+ reason: "kernel not found",
115
+ },
116
+ closeTransport: true,
117
+ };
118
+ case "MARIMO_MALFORMED_QUERY":
119
+ return {
120
+ kind: "terminal",
121
+ status: {
122
+ state: WebSocketState.CLOSED,
123
+ code: WebSocketClosedReason.MALFORMED_QUERY,
124
+ reason:
125
+ "the kernel did not recognize a request; please file a bug with marimo",
126
+ },
127
+ closeTransport: false,
128
+ };
129
+ case "MARIMO_KERNEL_STARTUP_ERROR":
130
+ return {
131
+ kind: "terminal",
132
+ status: {
133
+ state: WebSocketState.CLOSED,
134
+ code: WebSocketClosedReason.KERNEL_STARTUP_ERROR,
135
+ reason: "Failed to start kernel sandbox",
136
+ },
137
+ closeTransport: true,
138
+ };
139
+ default:
140
+ // Empty/undefined reasons are normal transient closes. Anything else is
141
+ // an unknown server reason; warn so a new MARIMO_* reason doesn't fall
142
+ // silently into the retry path.
143
+ if (event.reason) {
144
+ logNever(event.reason as never);
145
+ }
146
+ }
147
+ // partysocket stops retrying silently once `maxRetries` is hit; surface
148
+ // CLOSED so callers can detect the give-up.
149
+ if (context.retryCount >= context.maxRetries) {
150
+ return {
151
+ kind: "gave-up",
152
+ status: {
153
+ state: WebSocketState.CLOSED,
154
+ code: WebSocketClosedReason.KERNEL_DISCONNECTED,
155
+ reason: "kernel not found",
156
+ },
157
+ };
158
+ }
159
+ return {
160
+ kind: "retry",
161
+ status: { state: WebSocketState.CONNECTING },
162
+ };
163
+ }
164
+
76
165
  function getExistingCells(): CellData[] | undefined {
77
166
  if (!SUPPORTS_LAZY_KERNELS) {
78
167
  return undefined;
@@ -340,6 +429,30 @@ export function useMarimoKernelConnection(opts: {
340
429
  }
341
430
  };
342
431
 
432
+ // Manual reconnect. Probes /health first to fail fast when the runtime
433
+ // is unreachable, instead of waiting on partysocket's retry budget.
434
+ const reconnect = async () => {
435
+ if (
436
+ ws.readyState === WebSocket.OPEN ||
437
+ ws.readyState === WebSocket.CONNECTING
438
+ ) {
439
+ return;
440
+ }
441
+ shouldTryReconnecting.current = true;
442
+ setConnection({ state: WebSocketState.CONNECTING });
443
+ const healthy = await runtimeManager.isHealthy();
444
+ if (!healthy) {
445
+ shouldTryReconnecting.current = false;
446
+ setConnection({
447
+ state: WebSocketState.CLOSED,
448
+ code: WebSocketClosedReason.KERNEL_DISCONNECTED,
449
+ reason: "kernel not found",
450
+ });
451
+ return;
452
+ }
453
+ ws.reconnect();
454
+ };
455
+
343
456
  const ws = useConnectionTransport({
344
457
  static: isStaticNotebook(),
345
458
  /**
@@ -399,58 +512,20 @@ export function useMarimoKernelConnection(opts: {
399
512
  */
400
513
  onClose: (e) => {
401
514
  Logger.warn("WebSocket closed", e.code, e.reason);
402
- switch (e.reason) {
403
- case "MARIMO_ALREADY_CONNECTED":
404
- setConnection({
405
- state: WebSocketState.CLOSED,
406
- code: WebSocketClosedReason.ALREADY_RUNNING,
407
- reason: "another browser tab is already connected to the kernel",
408
- canTakeover: true,
409
- });
410
- ws.close(); // close to prevent reconnecting
411
- return;
412
-
413
- case "MARIMO_WRONG_KERNEL_ID":
414
- case "MARIMO_NO_FILE_KEY":
415
- case "MARIMO_NO_SESSION_ID":
416
- case "MARIMO_NO_SESSION":
417
- case "MARIMO_SHUTDOWN":
418
- setConnection({
419
- state: WebSocketState.CLOSED,
420
- code: WebSocketClosedReason.KERNEL_DISCONNECTED,
421
- reason: "kernel not found",
422
- });
423
- ws.close(); // close to prevent reconnecting
424
- return;
425
-
426
- case "MARIMO_MALFORMED_QUERY":
427
- setConnection({
428
- state: WebSocketState.CLOSED,
429
- code: WebSocketClosedReason.MALFORMED_QUERY,
430
- reason:
431
- "the kernel did not recognize a request; please file a bug with marimo",
432
- });
433
- return;
434
-
435
- default:
436
- // Check for kernel startup error (full error already received via message)
437
- if (e.reason === "MARIMO_KERNEL_STARTUP_ERROR") {
438
- setConnection({
439
- state: WebSocketState.CLOSED,
440
- code: WebSocketClosedReason.KERNEL_STARTUP_ERROR,
441
- reason: "Failed to start kernel sandbox",
442
- });
443
- ws.close(); // prevent reconnecting
444
- return;
445
- }
446
-
447
- // Session should be valid
448
- // - browser tab might have been closed or re-opened
449
- // - computer might have just woken from sleep
450
- //
451
- // so try reconnecting.
452
- setConnection({ state: WebSocketState.CONNECTING });
453
- tryReconnecting(e.code, e.reason);
515
+ const decision = classifyCloseEvent(e, {
516
+ retryCount: ws.retryCount,
517
+ maxRetries: MAX_RETRIES,
518
+ });
519
+ setConnection(decision.status);
520
+ if (decision.kind === "terminal" && decision.closeTransport) {
521
+ ws.close(); // close to prevent reconnecting
522
+ return;
523
+ }
524
+ if (decision.kind === "retry") {
525
+ // Session should be valid
526
+ // - browser tab might have been closed or re-opened
527
+ // - computer might have just woken from sleep
528
+ tryReconnecting(e.code, e.reason);
454
529
  }
455
530
  },
456
531
 
@@ -468,5 +543,5 @@ export function useMarimoKernelConnection(opts: {
468
543
  },
469
544
  });
470
545
 
471
- return { connection };
546
+ return { connection, reconnect };
472
547
  }
@@ -18,6 +18,10 @@ interface UseConnectionTransportOptions {
18
18
  onError: (event: WebSocketEventMap["error"]) => void;
19
19
  }
20
20
 
21
+ // Per-`reconnect()` retry budget for partysocket. After exhaustion, partysocket
22
+ // stops silently; treat `retryCount >= MAX_RETRIES` as the give-up signal.
23
+ export const MAX_RETRIES = 10;
24
+
21
25
  function createConnectionTransport(
22
26
  options: Pick<UseConnectionTransportOptions, "url" | "static">,
23
27
  ): IConnectionTransport {
@@ -33,8 +37,7 @@ function createConnectionTransport(
33
37
  // Cast needed: ReconnectingWebSocket types readyState as `number`
34
38
  // but IConnectionTransport expects `0 | 1 | 2 | 3`
35
39
  return new ReconnectingWebSocket(urlProvider, undefined, {
36
- // We don't want Infinity retries
37
- maxRetries: 10,
40
+ maxRetries: MAX_RETRIES,
38
41
  debug: false,
39
42
  startClosed: true,
40
43
  // long timeout -- the server can become slow when many notebooks
@@ -1 +0,0 @@
1
- var UA=Object.defineProperty;var VA=(a,A,e)=>A in a?UA(a,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[A]=e;var kA=(a,A,e)=>VA(a,typeof A!="symbol"?A+"":A,e);import{s as mA}from"./chunk-LvLJmgfZ.js";import{d as S,i as YA,l as fA,u as y}from"./useEvent-D91BmmQi.js";import{t as qA}from"./react-Bj1aDYRI.js";import{Cn as WA,Dr as XA,E as pA,F as JA,Gt as zA,In as $A,Kt as Ae,L as ee,Li as ae,Mr as xA,T as te,Ut as Ge,Wt as oe,b as se,g as re,h as iA,it as ne,ji as ke,k as ie,l as Re,lt as le,ot as wA,rt as Ze,vn as ce,z as ge}from"./cells-BBDzmUIS.js";import{t as h}from"./compiler-runtime-B3qBwwSJ.js";import{C as de,_ as he,b as Be,c as ue,h as me,i as Ye,m as fe,n as pe,o as Q,r as xe,s as we,t as De,x as ve,y as Ee}from"./state-BaHWS0qi.js";import{_ as p,d as DA,t as ye}from"./useEventListener-BR0C1MaI.js";import{C as Ce,b as be}from"./utils-BrXijSdZ.js";import{r as RA}from"./constants-DMpttj8Q.js";import{C as P,T as lA,d as Me,l as vA,o as Ne,v as _e,w as x}from"./config-CPqw1wUv.js";import{n as je,o as Fe}from"./switch-BvybnC9P.js";import{n as Se}from"./ErrorBoundary-DzYV_VeY.js";import{n as Qe,t as Y}from"./cn-DCUzRj2J.js";import{t as Pe}from"./jsx-runtime-BqBOg78p.js";import{a as Le,n as Oe}from"./fullscreen-BDxedMYP.js";import{_ as Te,f as Ie,g as Ke,h as EA,m as yA,p as CA,v as bA,y as He}from"./alert-dialog-BGBdrcqJ.js";import{dt as Ue,ft as Ve,st as MA}from"./JsonOutput-B0sjIMBK.js";import{h as qe}from"./download-QGh9oR1D.js";import{t as ZA}from"./tooltip-Gcwqb_SK.js";import{t as cA}from"./button-D9nb17Rw.js";import{t as We}from"./createReducer-1ePoj7v6.js";import{i as Xe}from"./strings-md4mFbOQ.js";import{t as Je}from"./requests-DIwGYs0l.js";import{t as J}from"./createLucideIcon-D5guW7EU.js";import{N as ze,P as NA,a as $e,i as _A,n as Aa,o as ea,s as aa}from"./layout-D5myrs5s.js";import{o as ta,r as Ga,s as oa}from"./state-B34hXjp9.js";import{c as sa}from"./markdown-renderer-CVd_mMPt.js";import{n as ra}from"./spinner-Bhir8k53.js";import{i as na,n as ka}from"./readonly-python-code-DOXF2p8K.js";import{t as ia}from"./uuid-DercMavo.js";import{t as z}from"./use-toast-T0_cQDma.js";import{i as Ra}from"./session-VtovaFBS.js";import{t as la}from"./RenderHTML-CruxVneu.js";import{r as jA}from"./share-CqnSBwZy.js";import{r as gA}from"./errors-CPlNr33a.js";import{s as Za}from"./react-icons.esm-D9xfKaPZ.js";import{r as FA}from"./events-BRAWQiYK.js";import{i as ca}from"./cell-link-DqiCeeeS.js";import{t as ga}from"./error-banner-C10O4l3y.js";import{n as da}from"./useAsyncData-BFC6lWG9.js";import{t as ha}from"./requests-QKoDeQkn.js";import{t as Ba}from"./request-registry-5ELz5pd2.js";import{t as ua}from"./ws-BZQmQxZ7.js";import{n as ma}from"./types-Bhw3Hco_.js";import{n as Ya}from"./runs-DRld30N_.js";var fa=J("hourglass",[["path",{d:"M5 22h14",key:"ehvnwv"}],["path",{d:"M5 2h14",key:"pdyrp9"}],["path",{d:"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22",key:"1d314k"}],["path",{d:"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2",key:"1vvvr6"}]]),SA=J("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]]),pa=J("square-arrow-right",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"m12 16 4-4-4-4",key:"1i9zcv"}]]),xa=J("unlink",[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]]),wa=h(),n=mA(Pe(),1);const Da=a=>{let A=(0,wa.c)(10),{reason:e,canTakeover:t}=a,o=t===void 0?!1:t,G=va;if(o){let R;A[0]===Symbol.for("react.memo_cache_sentinel")?(R=(0,n.jsx)("div",{className:"flex justify-between",children:(0,n.jsx)("span",{className:"font-bold text-xl flex items-center mb-2",children:"Notebook already connected"})}),A[0]=R):R=A[0];let r;A[1]===e?r=A[2]:(r=(0,n.jsx)("span",{children:e}),A[1]=e,A[2]=r);let k;A[3]===o?k=A[4]:(k=o&&(0,n.jsxs)(cA,{onClick:G,variant:"outline","data-testid":"takeover-button",className:"shrink-0",children:[(0,n.jsx)(pa,{className:"w-4 h-4 mr-2"}),"Take over session"]}),A[3]=o,A[4]=k);let i;return A[5]!==r||A[6]!==k?(i=(0,n.jsx)("div",{className:"flex justify-center",children:(0,n.jsxs)(ga,{kind:"info",className:"mt-10 flex flex-col rounded p-3 max-w-[800px] mx-4",children:[R,(0,n.jsxs)("div",{className:"flex justify-between items-end text-base gap-20",children:[r,k]})]})}),A[5]=r,A[6]=k,A[7]=i):i=A[7],i}let s;return A[8]===e?s=A[9]:(s=(0,n.jsx)("div",{className:"font-mono text-center text-base text-(--red-11)",children:(0,n.jsx)("p",{children:e})}),A[8]=e,A[9]=s),s};async function va(){try{let a=new URL(window.location.href).searchParams;await je.post(`/kernel/takeover?${a.toString()}`,{}),jA()}catch(a){z({title:"Failed to take over session",description:gA(a),variant:"danger"})}}var Ea=h(),B=mA(qA(),1);const ya=a=>{let A=(0,Ea.c)(8),{connection:e,className:t,children:o}=a,G;A[0]!==e.canTakeover||A[1]!==e.reason||A[2]!==e.state?(G=e.state===x.CLOSED&&(0,n.jsx)(Da,{reason:e.reason,canTakeover:e.canTakeover}),A[0]=e.canTakeover,A[1]=e.reason,A[2]=e.state,A[3]=G):G=A[3];let s;return A[4]!==o||A[5]!==t||A[6]!==G?(s=(0,n.jsxs)("div",{className:t,children:[o,G]}),A[4]=o,A[5]=t,A[6]=G,A[7]=s):s=A[7],s};var Ca=h();const ba=a=>{let A=(0,Ca.c)(10),{title:e}=a,[t,o]=(0,B.useState)(e),[G,s]=(0,B.useState)(!0),R,r;A[0]!==t||A[1]!==e?(R=()=>{if(e!==t){s(!1);let g=setTimeout(()=>{o(e),s(!0)},300);return()=>clearTimeout(g)}},r=[e,t],A[0]=t,A[1]=e,A[2]=R,A[3]=r):(R=A[2],r=A[3]),(0,B.useEffect)(R,r);let k;A[4]===Symbol.for("react.memo_cache_sentinel")?(k=(0,n.jsx)(ra,{className:"size-20 animate-spin text-primary","data-testid":"large-spinner",strokeWidth:1}),A[4]=k):k=A[4];let i=G?"opacity-100":"opacity-0",l;A[5]===i?l=A[6]:(l=Y("mt-2 text-muted-foreground font-semibold text-lg transition-opacity duration-300",i),A[5]=i,A[6]=l);let c;return A[7]!==t||A[8]!==l?(c=(0,n.jsxs)("div",{className:"flex flex-col h-full flex-1 items-center justify-center p-4",children:[k,(0,n.jsx)("div",{className:l,children:t})]}),A[7]=t,A[8]=l,A[9]=c):c=A[9],c};var dA=h();const Ma=a=>{let A=(0,dA.c)(2),{children:e}=a;if(!lA())return e;let t;return A[0]===e?t=A[1]:(t=(0,n.jsx)(Na,{children:e}),A[0]=e,A[1]=t),t};var Na=a=>{let A=(0,dA.c)(9),{children:e}=a,t;A[0]===Symbol.for("react.memo_cache_sentinel")?(t=[],A[0]=t):t=A[0];let{error:o}=da(Sa,t),G=y(re),s=y(he),R;A[1]!==G||A[2]!==s?(R=ja({hasCells:G,hasOutput:s,mode:ne(),codeHidden:_a()}),A[1]=G,A[2]=s,A[3]=R):R=A[3];let r=R,k=(0,B.useRef)(!1),i,l;if(A[4]!==o||A[5]!==r?(i=()=>{o&&!r&&!k.current&&(k.current=!0,p.error("Pyodide failed to initialize",o),z({title:"Failed to start the notebook runtime",description:gA(o),variant:"danger"}))},l=[o,r],A[4]=o,A[5]=r,A[6]=i,A[7]=l):(i=A[6],l=A[7]),(0,B.useEffect)(i,l),o&&r)throw o;if(r){let c;return A[8]===Symbol.for("react.memo_cache_sentinel")?(c=(0,n.jsx)(Fa,{}),A[8]=c):c=A[8],c}return e};function _a(){return Ra(RA.showCode,"false")||!YA.get(Fe)}function ja(a){let{hasCells:A,hasOutput:e,mode:t,codeHidden:o}=a;return A?!e&&t==="read"&&o:!0}const Fa=a=>{let A=(0,dA.c)(2),e=y(Ee),t;return A[0]===e?t=A[1]:(t=(0,n.jsx)(ba,{title:e}),A[0]=e,A[1]=t),t};async function Sa(){return await fe.INSTANCE.initialized.promise,!0}var Qa={idle:"./favicon.ico",success:"data:image/x-icon;base64,AAABAAEAMDAAAAEACACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAXXQAAFd3AwBWeAQAVngEAFd4AwBXeAQAVnkEAFh3AwBXdwQAVXcGAFd4BQBXeAQAWHgEAFd6AwBXeAMAVnkEAFZ5AwBXdwQAV3cFAFd4BABYeAQAV3gEAFh4BABXeAQA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAkYGBgSGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAhgYGBgKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAABxgYGA8ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAABGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAACGBgYDBkZGRkZGRkZGRkZGRkXFhYVGRkZGRkZGRkZGRkZGRkZGRkMGBgYAgAAAAADGBgYDRkZGRkZGRkZGRkZGRcYGBgYFxkZGRkZGRkZGRkZGRkZGRkNGBgYAwAAAAAEGBgYDhkZGRkZGRkZGRkZFxgYGBgYGBcZGRkZGRkZGRkZGRkZGRkOGBgYBAAAAAAFGBgYChkZGRkZGRkZGRkXGBgYGBgYGBgXGRkZGRkZGRkZGRkZGRkKGBgYBQAAAAAGGBgYGRkZGRkZGRkZGRUYGBgYGBgYGBgYFxkZGRkZGRkZGRkZGRkZGBgYBgAAAAAYGBgYGRkZGRkZGRkZGRYYGBgYFxcYGBgYGBcZGRkZGRkZGRkZGRkZGBgYGAAAAAAYGBgYGRkZGRkZGRkZGRYYGBgXGRkXGBgYGBgXGRkZGRkZGRkZGRkZGBgYGAAAAAAGGBgYGRkZGRkZGRkZGRUWFhcZGRkZFxgYGBgYFxkZGRkZGRkZGRkZGBgYBgAAAAAFGBgYChkZGRkZGRkZGRkZGRkZGRkZGRcYGBgYGBcZGRkZGRkZGRkKGBgYBQAAAAAEGBgYDhkZGRkZGRkZGRkZGRkZGRkZGRkXGBgYGBYZGRkZGRkZGRkOGBgYBAAAAAADGBgYDRkZGRkZGRkZGRkZGRkZGRkZGRkZFxgYGBYZGRkZGRkZGRkNGBgYAwAAAAACGBgYDBkZGRkZGRkZGRkZGRkZGRkZGRkZGRUWFhUZGRkZGRkZGRkMGBgYAgAAAAABGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAAABxgYGA8ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAAAAhgYGBgKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAAAAkYGBgSGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//gAH//wAA//4AAH//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA8AAAAAAPAADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP/+AAB//wAA//+AAf//AAD///////8AAP///////wAA",running:"data:image/x-icon;base64,AAABAAEAMDAAAAEACACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAA0YsAAMWEAwDHgwIAx4QBAMeEAgDGhAIAyIUBAMaFAwDGhAIAxoIAAMaFAgDHhAIAx4QCAMiFAwDHhAIAx4YAAMaFAgDHhQEAxoMCAMeEAgDHgwQAx4QDAMeDAgDHhAIA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAkYGBgSGRkZGRkZGRkZFRgWFxkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAhgYGBgKGRkZGRkZGRkZFhgYGBYVGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAABxgYGA8ZGRkZGRkZGRkZGBgYGBgYFxkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAABGBgYGBAZGRkZGRkZGRkZGBgYGBgYGBYVGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAACGBgYDBkZGRkZGRkZGRkZGBgYGBgYGBgYFxkZGRkZGRkZGRkZGRkMGBgYAgAAAAADGBgYDRkZGRkZGRkZGRkZGBgYGBgYGBgYGBYVGRkZGRkZGRkZGRkNGBgYAwAAAAAEGBgYDhkZGRkZGRkZGRkZGBgYGBUWGBgYGBgYFxkZGRkZGRkZGRkOGBgYBAAAAAAFGBgYChkZGRkZGRkZGRkZGBgYGBkZFxgYGBgYGBYVGRkZGRkZGRkKGBgYBQAAAAAGGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRUWGBgYGBgYFxkZGRkZGRkZGBgYBgAAAAAYGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRkZFxgYGBgYFxkZGRkZGRkZGBgYGAAAAAAYGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRkZFxgYGBgYFhkZGRkZGRkZGBgYGAAAAAAGGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRkXGBgYGBgYFRkZGRkZGRkZGBgYBgAAAAAFGBgYChkZGRkZGRkZGRkZGBgYGBkZFxgYGBgYGBcZGRkZGRkZGRkKGBgYBQAAAAAEGBgYDhkZGRkZGRkZGRkZGBgYGBkXGBgYGBgYFxkZGRkZGRkZGRkOGBgYBAAAAAADGBgYDRkZGRkZGRkZGRkZGBgYGBgYGBgYGBcZGRkZGRkZGRkZGRkNGBgYAwAAAAACGBgYDBkZGRkZGRkZGRkZGBgYGBgYGBgYFxkZGRkZGRkZGRkZGRkMGBgYAgAAAAABGBgYGBAZGRkZGRkZGRkZGBgYGBgYGBcZGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAAABxgYGA8ZGRkZGRkZGRkZGBgYGBgYFxkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAAAAhgYGBgKGRkZGRkZGRkZFhgYGBcZGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAAAAkYGBgSGRkZGRkZGRkZFRYWFxkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//gAH//wAA//4AAH//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA8AAAAAAPAADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP/+AAB//wAA//+AAf//AAD///////8AAP///////wAA",error:"data:image/x-icon;base64,AAABAAEAMDAAAAEACACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAALi7oACcn2wAlJdsAJibcACYm3AAmJtsAJyfdACUl3QAmJtsAKCjdACUl3AAmJtwAJyfcACYm3AAoKNcAJibcACcn3AAmJt0AJibcACUl3AAmJtwAKCjbACcn3AAmJtsAJibcAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYZGQYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcZGRkZGRkZGRkZGRkZGQcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGRkZGRkZGRkZGRkZGRkZGRkZCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAsZGRkZGRkZDA0ODxoaGhoPDg0MGRkZGRkZGQsAAAAAAAAAAAAAAAAAAAAAAAAAAxkZGRkZGRARGhoaGhoaGhoaGhoaERAZGRkZGRkDAAAAAAAAAAAAAAAAAAAAAAASGRkZGRkTDxoaGhoaGhoaGhoaGhoaGhoPExkZGRkZEgAAAAAAAAAAAAAAAAAAAAMZGRkZGRQaGhoaGhoaGhoaGhoaGhoaGhoaGhQZGRkZGQMAAAAAAAAAAAAAAAAACxkZGRkVERoaGhoaGhoaGhoaGhoaGhoaGhoaGhoRFRkZGRkLAAAAAAAAAAAAAAAKGRkZGRUPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxUZGRkZCgAAAAAAAAAAAAAEGRkZGREaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhEZGRkZBAAAAAAAAAAAAAgZGRkZFBoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoUGRkZGQgAAAAAAAAAAAkZGRkTGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaExkZGQkAAAAAAAAAAhkZGRkPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxkZGRkCAAAAAAAABxkZGRAaGhoaGhoaGhYXFxYaGhoaGhoaGhgXFxYaGhoaGhoaGhAZGRkHAAAAAAABGRkZGREaGhoaGhoaGhcZGRkYGhoaGhoaGBkZGRcaGhoaGhoaGhEZGRkZAQAAAAACGRkZDBoaGhoaGhoaGhcZGRkZGBoaGhoYGRkZGRcaGhoaGhoaGhoMGRkZAgAAAAADGRkZDRoaGhoaGhoaGhgZGRkZGRgaGhgZGRkZGRYaGhoaGhoaGhoNGRkZAwAAAAAEGRkZDhoaGhoaGhoaGhoYGRkZGRkYGBkZGRkZGBoaGhoaGhoaGhoOGRkZBAAAAAAFGRkZDxoaGhoaGhoaGhoaGBkZGRkZGRkZGRkYGhoaGhoaGhoaGhoPGRkZBQAAAAAGGRkZGhoaGhoaGhoaGhoaGhgZGRkZGRkZGRgaGhoaGhoaGhoaGhoaGRkZBgAAAAAZGRkZGhoaGhoaGhoaGhoaGhoYGRkZGRkZGBoaGhoaGhoaGhoaGhoaGRkZGQAAAAAZGRkZGhoaGhoaGhoaGhoaGhoYGRkZGRkZGBoaGhoaGhoaGhoaGhoaGRkZGQAAAAAGGRkZGhoaGhoaGhoaGhoaGhgZGRkZGRkZGRgaGhoaGhoaGhoaGhoaGRkZBgAAAAAFGRkZDxoaGhoaGhoaGhoaGBkZGRkZGRkZGRkYGhoaGhoaGhoaGhoPGRkZBQAAAAAEGRkZDhoaGhoaGhoaGhoYGRkZGRkYGBkZGRkZGBoaGhoaGhoaGhoOGRkZBAAAAAADGRkZDRoaGhoaGhoaGhYZGRkZGRgaGhgZGRkZGRgaGhoaGhoaGhoNGRkZAwAAAAACGRkZDBoaGhoaGhoaGhcZGRkZGBoaGhoYGRkZGRcaGhoaGhoaGhoMGRkZAgAAAAABGRkZGREaGhoaGhoaGhcZGRkYGhoaGhoaGBkZGRcaGhoaGhoaGhEZGRkZAQAAAAAABxkZGRAaGhoaGhoaGhYXFxgaGhoaGhoaGhYXFxYaGhoaGhoaGhAZGRkHAAAAAAAAAhkZGRkPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxkZGRkCAAAAAAAAAAkZGRkTGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaExkZGQkAAAAAAAAAAAgZGRkZFBoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoUGRkZGQgAAAAAAAAAAAAEGRkZGREaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhEZGRkZBAAAAAAAAAAAAAAKGRkZGRUPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxUZGRkZCgAAAAAAAAAAAAAACxkZGRkVERoaGhoaGhoaGhoaGhoaGhoaGhoaGhoRFRkZGRkLAAAAAAAAAAAAAAAAAAMZGRkZGRQaGhoaGhoaGhoaGhoaGhoaGhoaGhQZGRkZGQMAAAAAAAAAAAAAAAAAAAASGRkZGRkTDxoaGhoaGhoaGhoaGhoaGhoPExkZGRkZEgAAAAAAAAAAAAAAAAAAAAAAAxkZGRkZGRARGhoaGhoaGhoaGhoaERAZGRkZGRkDAAAAAAAAAAAAAAAAAAAAAAAAAAsZGRkZGRkZDA0ODxoaGhoPDg0MGRkZGRkZGQsAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGRkZGRkZGRkZGRkZGRkZGRkZCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcZGRkZGRkZGRkZGRkZGQcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYZGQYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//gAH//wAA//4AAH//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA8AAAAAAPAADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP/+AAB//wAA//+AAf//AAD///////8AAP///////wAA"};async function L(a){return Qa[a]}function Pa(a){if(document.visibilityState==="visible")return;let A=async()=>{a===0?new Notification("Execution completed",{body:"Your notebook run completed successfully.",icon:await L("success")}):new Notification("Execution failed",{body:`Your notebook run encountered ${a} error(s).`,icon:await L("error")})};!("Notification"in window)||Notification.permission==="denied"||(Notification.permission==="granted"?A():Notification.permission==="default"&&Notification.requestPermission().then(e=>{e==="granted"&&A()}))}const La=a=>{let{isRunning:A}=a,e=ie(),t=document.querySelector("link[rel~='icon']");t||(t=document.createElement("link"),t.rel="icon",document.getElementsByTagName("head")[0].append(t)),(0,B.useEffect)(()=>{!A&&t.href.includes("favicon")||(async()=>{let G;if(G=A?"running":e.length===0?"success":"error",t.href=await L(G),!document.hasFocus())return;let s=setTimeout(async()=>{t.href=await L("idle")},3e3);return()=>clearTimeout(s)})()},[A,e,t]);let o=ze(A)??A;return(0,B.useEffect)(()=>{o&&!A&&Pa(e.length)},[e,o,A]),ye(window,"focus",async G=>{A||(t.href=await L("idle"))}),null};function Oa(){let{cellRuntime:a}=YA.get(se),A=DA.entries(a).find(([e,t])=>t.status==="running");A&&ca(A[0],"focus")}var O=h();const Ta=a=>{let A=(0,O.c)(22),{connection:e,isRunning:t}=a,{mode:o}=y(le),G=e.state===x.CLOSED,s=e.state===x.OPEN,R;A[0]!==e.canTakeover||A[1]!==G?(R=G&&!e.canTakeover&&(0,n.jsx)(Ua,{}),A[0]=e.canTakeover,A[1]=G,A[2]=R):R=A[2];let r=o==="read"?"fixed":"absolute",k;A[3]===r?k=A[4]:(k=Y("z-50 top-4 left-4",r),A[3]=r,A[4]=k);let i;A[5]!==s||A[6]!==t?(i=s&&t&&(0,n.jsx)(Ha,{}),A[5]=s,A[6]=t,A[7]=i):i=A[7];let l;A[8]!==e.canTakeover||A[9]!==G?(l=G&&!e.canTakeover&&(0,n.jsx)(Ia,{}),A[8]=e.canTakeover,A[9]=G,A[10]=l):l=A[10];let c;A[11]!==e.canTakeover||A[12]!==G?(c=G&&e.canTakeover&&(0,n.jsx)(Ka,{}),A[11]=e.canTakeover,A[12]=G,A[13]=c):c=A[13];let g;A[14]!==k||A[15]!==i||A[16]!==l||A[17]!==c?(g=(0,n.jsxs)("div",{className:k,children:[i,l,c]}),A[14]=k,A[15]=i,A[16]=l,A[17]=c,A[18]=g):g=A[18];let u;return A[19]!==R||A[20]!==g?(u=(0,n.jsxs)(n.Fragment,{children:[R,g]}),A[19]=R,A[20]=g,A[21]=u):u=A[21],u};var hA="print:hidden pointer-events-auto hover:cursor-pointer",Ia=()=>{let a=(0,O.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,n.jsx)(ZA,{content:"App disconnected",children:(0,n.jsx)("div",{className:hA,children:(0,n.jsx)(xa,{className:"w-[25px] h-[25px] text-(--red-11)"})})}),a[0]=A):A=a[0],A},Ka=()=>{let a=(0,O.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,n.jsx)(ZA,{content:"Notebook locked",children:(0,n.jsx)("div",{className:hA,children:(0,n.jsx)(na,{className:"w-[25px] h-[25px] text-(--blue-11)"})})}),a[0]=A):A=a[0],A},Ha=()=>{let a=(0,O.c)(6),A=y(te),e=A?"Scratchpad is running":"Jump to running cell",t=A?void 0:Oa,o;a[0]===Symbol.for("react.memo_cache_sentinel")?(o=(0,n.jsx)(fa,{className:"running-app-icon",size:30,strokeWidth:1}),a[0]=o):o=a[0];let G;a[1]===t?G=a[2]:(G=(0,n.jsx)("div",{className:hA,"data-testid":"loading-indicator",onClick:t,children:o}),a[1]=t,a[2]=G);let s;return a[3]!==G||a[4]!==e?(s=(0,n.jsx)(ZA,{content:e,side:"right",children:G}),a[3]=G,a[4]=e,a[5]=s):s=a[5],s},Ua=()=>{let a=(0,O.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"noise"}),(0,n.jsx)("div",{className:"disconnected-gradient"})]}),a[0]=A):A=a[0],A},b=h(),Va=Te,qa=He,Wa=Oe(Ke),QA=B.forwardRef((a,A)=>{let e=(0,b.c)(9),t,o;e[0]===a?(t=e[1],o=e[2]):({className:t,...o}=a,e[0]=a,e[1]=t,e[2]=o);let G;e[3]===t?G=e[4]:(G=Y("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),e[3]=t,e[4]=G);let s;return e[5]!==o||e[6]!==A||e[7]!==G?(s=(0,n.jsx)(EA,{className:G,...o,ref:A}),e[5]=o,e[6]=A,e[7]=G,e[8]=s):s=e[8],s});QA.displayName=EA.displayName;var Xa=Qe("fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",{variants:{side:{top:"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",bottom:"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",left:"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",right:"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"}},defaultVariants:{side:"right"}}),PA=B.forwardRef((a,A)=>{let e=(0,b.c)(15),t,o,G,s;e[0]===a?(t=e[1],o=e[2],G=e[3],s=e[4]):({side:s,className:o,children:t,...G}=a,e[0]=a,e[1]=t,e[2]=o,e[3]=G,e[4]=s);let R=s===void 0?"right":s,r;e[5]===Symbol.for("react.memo_cache_sentinel")?(r=(0,n.jsx)(QA,{}),e[5]=r):r=e[5];let k;e[6]!==o||e[7]!==R?(k=Y(Xa({side:R}),o),e[6]=o,e[7]=R,e[8]=k):k=e[8];let i;e[9]===Symbol.for("react.memo_cache_sentinel")?(i=(0,n.jsxs)(Ie,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary",children:[(0,n.jsx)(Za,{className:"h-4 w-4"}),(0,n.jsx)("span",{className:"sr-only",children:"Close"})]}),e[9]=i):i=e[9];let l;return e[10]!==t||e[11]!==G||e[12]!==A||e[13]!==k?(l=(0,n.jsx)(Wa,{children:(0,n.jsxs)(Le,{children:[r,(0,n.jsxs)(CA,{ref:A,className:k,...G,children:[t,i]})]})}),e[10]=t,e[11]=G,e[12]=A,e[13]=k,e[14]=l):l=e[14],l});PA.displayName=CA.displayName;var Ja=a=>{let A=(0,b.c)(8),e,t;A[0]===a?(e=A[1],t=A[2]):({className:e,...t}=a,A[0]=a,A[1]=e,A[2]=t);let o;A[3]===e?o=A[4]:(o=Y("flex flex-col space-y-2 text-center sm:text-left",e),A[3]=e,A[4]=o);let G;return A[5]!==t||A[6]!==o?(G=(0,n.jsx)("div",{className:o,...t}),A[5]=t,A[6]=o,A[7]=G):G=A[7],G};Ja.displayName="SheetHeader";var za=a=>{let A=(0,b.c)(8),e,t;A[0]===a?(e=A[1],t=A[2]):({className:e,...t}=a,A[0]=a,A[1]=e,A[2]=t);let o;A[3]===e?o=A[4]:(o=Y("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),A[3]=e,A[4]=o);let G;return A[5]!==t||A[6]!==o?(G=(0,n.jsx)("div",{className:o,...t}),A[5]=t,A[6]=o,A[7]=G):G=A[7],G};za.displayName="SheetFooter";var $a=B.forwardRef((a,A)=>{let e=(0,b.c)(9),t,o;e[0]===a?(t=e[1],o=e[2]):({className:t,...o}=a,e[0]=a,e[1]=t,e[2]=o);let G;e[3]===t?G=e[4]:(G=Y("text-lg font-semibold text-foreground",t),e[3]=t,e[4]=G);let s;return e[5]!==o||e[6]!==A||e[7]!==G?(s=(0,n.jsx)(bA,{ref:A,className:G,...o}),e[5]=o,e[6]=A,e[7]=G,e[8]=s):s=e[8],s});$a.displayName=bA.displayName;var At=B.forwardRef((a,A)=>{let e=(0,b.c)(9),t,o;e[0]===a?(t=e[1],o=e[2]):({className:t,...o}=a,e[0]=a,e[1]=t,e[2]=o);let G;e[3]===t?G=e[4]:(G=Y("text-sm text-muted-foreground",t),e[3]=t,e[4]=G);let s;return e[5]!==o||e[6]!==A||e[7]!==G?(s=(0,n.jsx)(yA,{ref:A,className:G,...o}),e[5]=o,e[6]=A,e[7]=G,e[8]=s):s=e[8],s});At.displayName=yA.displayName;var et=h();const BA=(0,B.memo)(()=>{let a=(0,et.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,n.jsx)(Ue,{name:MA.SIDEBAR}),a[0]=A):A=a[0],A});BA.displayName="SidebarSlot";var at=h();const tt=a=>{let A=(0,at.c)(6),{openWidth:e}=a,t;A[0]===Symbol.for("react.memo_cache_sentinel")?(t=(0,n.jsx)(qa,{className:"lg:hidden",asChild:!0,children:(0,n.jsx)(cA,{variant:"ghost",className:"bg-background",children:(0,n.jsx)(SA,{className:"w-5 h-5"})})}),A[0]=t):t=A[0];let o;A[1]===e?o=A[2]:(o={maxWidth:e},A[1]=e,A[2]=o);let G;A[3]===Symbol.for("react.memo_cache_sentinel")?(G=(0,n.jsx)(BA,{}),A[3]=G):G=A[3];let s;return A[4]===o?s=A[5]:(s=(0,n.jsxs)(Va,{children:[t,(0,n.jsx)(PA,{className:"w-full px-3 h-full flex flex-col overflow-y-auto",style:o,side:"left",children:G})]}),A[4]=o,A[5]=s),s};var Gt=h();const ot=a=>{let A=(0,Gt.c)(7),{isOpen:e,toggle:t}=a,o=e?"rotate-0":"rotate-180",G;A[0]===o?G=A[1]:(G=Y("h-5 w-5 transition-transform ease-in-out duration-700",o),A[0]=o,A[1]=G);let s;A[2]===G?s=A[3]:(s=(0,n.jsx)(qe,{className:G}),A[2]=G,A[3]=s);let R;return A[4]!==s||A[5]!==t?(R=(0,n.jsx)("div",{className:"invisible lg:visible absolute top-[12px] right-[16px] z-20",children:(0,n.jsx)(cA,{onClick:t,className:"w-10 h-8",variant:"ghost",size:"icon",children:s})}),A[4]=s,A[5]=t,A[6]=R):R=A[6],R};var st=h();const rt=a=>{let A=(0,st.c)(11),{isOpen:e,toggle:t,width:o}=a,G=e?o:De,s;A[0]===G?s=A[1]:(s={width:G},A[0]=G,A[1]=s);let R;A[2]===Symbol.for("react.memo_cache_sentinel")?(R=Y("app-sidebar auto-collapse-nav","top-0 left-0 z-20 h-full hidden lg:block relative transition-[width] ease-in-out duration-300"),A[2]=R):R=A[2];let r;A[3]!==e||A[4]!==t?(r=(0,n.jsx)(ot,{isOpen:e,toggle:t}),A[3]=e,A[4]=t,A[5]=r):r=A[5];let k;A[6]===Symbol.for("react.memo_cache_sentinel")?(k=(0,n.jsx)("div",{className:"relative h-full flex flex-col px-3 pb-16 pt-14 overflow-y-auto shadow-sm border-l",children:(0,n.jsx)(BA,{})}),A[6]=k):k=A[6];let i;return A[7]!==e||A[8]!==s||A[9]!==r?(i=(0,n.jsxs)("aside",{"data-expanded":e,style:s,className:R,children:[r,k]}),A[7]=e,A[8]=s,A[9]=r,A[10]=i):i=A[10],i};var nt=h();const kt=a=>{let A=(0,nt.c)(15),{children:e}=a,[t,o]=fA(xe),{isOpen:G,width:s}=t;if(Ve(MA.SIDEBAR).length===0)return e;let R;A[0]===s?R=A[1]:(R=pe(s),A[0]=s,A[1]=R);let r=R,k;A[2]!==o||A[3]!==G?(k=()=>o({type:"toggle",isOpen:!G}),A[2]=o,A[3]=G,A[4]=k):k=A[4];let i;A[5]!==G||A[6]!==r||A[7]!==k?(i=(0,n.jsx)(rt,{isOpen:G,width:r,toggle:k}),A[5]=G,A[6]=r,A[7]=k,A[8]=i):i=A[8];let l;A[9]===r?l=A[10]:(l=(0,n.jsx)("div",{className:"absolute top-3 left-4 flex items-center z-50",children:(0,n.jsx)(tt,{openWidth:r})}),A[9]=r,A[10]=l);let c;return A[11]!==e||A[12]!==i||A[13]!==l?(c=(0,n.jsxs)("div",{className:"inset-0 absolute flex",children:[i,l,e]}),A[11]=e,A[12]=i,A[13]=l,A[14]=c):c=A[14],c};var it=h();const Rt=a=>{let A=(0,it.c)(17),{width:e,connection:t,isRunning:o,children:G}=a,s=t.state,R;A[0]===o?R=A[1]:(R=(0,n.jsx)(La,{isRunning:o}),A[0]=o,A[1]=R);let r;A[2]!==t||A[3]!==o?(r=(0,n.jsx)(Ta,{connection:t,isRunning:o}),A[2]=t,A[3]=o,A[4]=r):r=A[4];let k;A[5]!==s||A[6]!==e?(k=Y("mathjax_ignore",Me(s)&&"disconnected","bg-background w-full h-full text-textColor","flex flex-col overflow-y-auto",e==="full"&&"config-width-full",e==="columns"?"overflow-x-auto":"overflow-x-hidden","print:height-fit"),A[5]=s,A[6]=e,A[7]=k):k=A[7];let i;A[8]!==G||A[9]!==s||A[10]!==k||A[11]!==e?(i=(0,n.jsx)(Ma,{children:(0,n.jsx)(kt,{children:(0,n.jsx)("div",{id:"App","data-config-width":e,"data-connection-state":s,className:k,children:G})})}),A[8]=G,A[9]=s,A[10]=k,A[11]=e,A[12]=i):i=A[12];let l;return A[13]!==R||A[14]!==r||A[15]!==i?(l=(0,n.jsxs)(n.Fragment,{children:[R,r,i]}),A[13]=R,A[14]=r,A[15]=i,A[16]=l):l=A[16],l};function lt(a){return a.kind==="missing"}function LA(a){return a.kind==="installing"}var{valueAtom:Zt,useActions:ct}=We(()=>({packageAlert:null,startupLogsAlert:null,packageLogs:{}}),{addPackageAlert:(a,A)=>{var o;let e={...a.packageLogs};if(LA(A)&&A.logs&&A.log_status)for(let[G,s]of Object.entries(A.logs))switch(A.log_status){case"start":e[G]=s;break;case"append":e[G]=(e[G]||"")+s;break;case"done":e[G]=(e[G]||"")+s;break}let t=((o=a.packageAlert)==null?void 0:o.id)||ia();return{...a,packageAlert:{id:t,...A},packageLogs:e}},clearPackageAlert:(a,A)=>a.packageAlert!==null&&a.packageAlert.id===A?{...a,packageAlert:null,packageLogs:{}}:a,addStartupLog:(a,A)=>{var t;let e=((t=a.startupLogsAlert)==null?void 0:t.content)||"";return{...a,startupLogsAlert:{...a.startupLogsAlert,content:e+A.content,status:A.status}}},clearStartupLogsAlert:a=>({...a,startupLogsAlert:null})});const gt=()=>y(Zt);function OA(){return ct()}var TA=h();const IA=(0,B.memo)(a=>{let A=(0,TA.c)(11),{appConfig:e,mode:t,children:o}=a,{selectedLayout:G,layoutData:s}=$e(),R=y(wA);if(t==="edit"&&!R)return o;let r;if(A[0]!==t||A[1]!==G){r=G;let c=new URLSearchParams(window.location.search);if(t==="read"&&c.has(RA.viewAs)){let g=c.get(RA.viewAs);ma.includes(g)&&(r=g)}A[0]=t,A[1]=G,A[2]=r}else r=A[2];let k;A[3]===r?k=A[4]:(k=ea.find(c=>c.type===r),A[3]=r,A[4]=k);let i=k;if(!i)return o;let l;return A[5]!==e||A[6]!==r||A[7]!==s||A[8]!==t||A[9]!==i?(l=(0,n.jsx)(dt,{appConfig:e,mode:t,plugin:i,layoutData:s,finalLayout:r}),A[5]=e,A[6]=r,A[7]=s,A[8]=t,A[9]=i,A[10]=l):l=A[10],l});IA.displayName="CellsRenderer";const dt=a=>{let A=(0,TA.c)(18),{appConfig:e,mode:t,plugin:o,layoutData:G,finalLayout:s}=a,R=JA(),{setCurrentLayoutData:r}=_A(),k,i,l,c,g;if(A[0]!==e||A[1]!==s||A[2]!==G||A[3]!==t||A[4]!==R||A[5]!==o){let w=Re(R);k=o.Component,i=e,l=t,c=w,g=G[s]||o.getInitialLayout(w),A[0]=e,A[1]=s,A[2]=G,A[3]=t,A[4]=R,A[5]=o,A[6]=k,A[7]=i,A[8]=l,A[9]=c,A[10]=g}else k=A[6],i=A[7],l=A[8],c=A[9],g=A[10];let u;return A[11]!==k||A[12]!==r||A[13]!==i||A[14]!==l||A[15]!==c||A[16]!==g?(u=(0,n.jsx)(k,{appConfig:i,mode:l,cells:c,layout:g,setLayout:r}),A[11]=k,A[12]=r,A[13]=i,A[14]=l,A[15]=c,A[16]=g,A[17]=u):u=A[17],u};var ht=class KA{constructor(A){kA(this,"hasStarted",!1);kA(this,"handleReadyEvent",A=>{let e=A.detail.objectId;if(!this.uiElementRegistry.has(e))return;let t=this.uiElementRegistry.lookupValue(e);t!==void 0&&this.sendComponentValues({objectIds:[e],values:[t]}).catch(o=>{p.warn(o)})});this.uiElementRegistry=A}static get INSTANCE(){let A="_marimo_private_RuntimeState";return window[A]||(window[A]=new KA(Q)),window[A]}get sendComponentValues(){if(!this._sendComponentValues)throw Error("sendComponentValues is not set");return this._sendComponentValues}start(A){if(this.hasStarted){p.warn("RuntimeState already started");return}this._sendComponentValues=A,document.addEventListener(FA.TYPE,this.handleReadyEvent),this.hasStarted=!0}stop(){if(!this.hasStarted){p.warn("RuntimeState already stopped");return}document.removeEventListener(FA.TYPE,this.handleReadyEvent),this.hasStarted=!1}},Bt=h();function ut(a){if(a.static)return Be.empty();if(lA())return me();let A=a.url;return new ua(A,void 0,{maxRetries:10,debug:!1,startClosed:!0,connectionTimeout:1e4})}function mt(a){let A=(0,Bt.c)(15),{onOpen:e,onMessage:t,onClose:o,onError:G,waitToConnect:s}=a,R;A[0]!==o||A[1]!==G||A[2]!==t||A[3]!==e||A[4]!==a?(R=()=>{let l=ut(a);return l.addEventListener("open",e),l.addEventListener("close",o),l.addEventListener("error",G),l.addEventListener("message",t),l},A[0]=o,A[1]=G,A[2]=t,A[3]=e,A[4]=a,A[5]=R):R=A[5];let[r]=(0,B.useState)(R),k;A[6]!==o||A[7]!==G||A[8]!==t||A[9]!==e||A[10]!==r||A[11]!==s?(k=()=>(r.readyState===WebSocket.CLOSED&&s().then(()=>r.reconnect()).catch(l=>{p.error("Healthy connection never made",l),r.close()}),()=>{p.warn("useConnectionTransport is unmounting. This likely means there is a bug."),r.close(),r.removeEventListener("open",e),r.removeEventListener("close",o),r.removeEventListener("error",G),r.removeEventListener("message",t)}),A[6]=o,A[7]=G,A[8]=t,A[9]=e,A[10]=r,A[11]=s,A[12]=k):k=A[12];let i;return A[13]===r?i=A[14]:(i=[r],A[13]=r,A[14]=i),(0,B.useEffect)(k,i),r}function Yt(a){let{codes:A,names:e,configs:t,cell_ids:o,last_executed_code:G,last_execution_time:s}=a,R=G||{},r=s||{};return A.map((k,i)=>{let l=o[i],c=R[l];return ee({id:l,code:k,edited:c?c!==k:!1,name:e[i],lastCodeRun:R[l]??null,lastExecutionTime:r[l]??null,config:t[i]})})}function ft(a,A,e){let t=Aa(),{layout:o}=a;if(o){let G=o.type,s=aa({type:G,data:o.data,cells:A});t.selectedLayout=G,t.layoutData[G]=s,e({layoutView:G,data:s})}return t}function pt(){let a=[],A=[];return Q.entries.forEach((e,t)=>{a.push(t),A.push(e.value)}),{objectIds:a,values:A}}function xt(a,A){let{existingCells:e,autoInstantiate:t,setCells:o,setLayoutData:G,setAppConfig:s,setCapabilities:R,setKernelState:r,onError:k}=A,{resumed:i,ui_values:l,app_config:c,capabilities:g,auto_instantiated:u}=a,w=e&&e.length>0,C=w&&!i?e:Yt(a);o(C,ft(a,C,G));let v=Ce.safeParse(c);if(v.success?s(v.data):p.error("Failed to parse app config",v.error),R(g),u)return;if(i){for(let[m,j]of DA.entries(l||{})){let F=m;Q.set(F,j)}return}let{objectIds:M,values:N}=pt(),_=w?Object.fromEntries(e.map(m=>[m.id,m.code])):void 0;Je().sendInstantiate({objectIds:M,values:N,autoRun:t,codes:_}).then(()=>{r({isInstantiated:!0,error:null})}).catch(m=>{r({isInstantiated:!1,error:m}),k(Error("Failed to instantiate",{cause:m}))})}function wt(a){let A=a.cell_id;Q.removeElementsByCell(A),NA.INSTANCE.removeForCellId(A)}function Dt(a,A){A(a),NA.INSTANCE.track(a)}const $={append:a=>{let A=new URL(window.location.href);A.searchParams.append(a.key,a.value),window.history.pushState({},"",`${A.pathname}${A.search}`)},set:a=>{let A=new URL(window.location.href);Array.isArray(a.value)?(A.searchParams.delete(a.key),a.value.forEach(e=>A.searchParams.append(a.key,e))):A.searchParams.set(a.key,a.value),window.history.pushState({},"",`${A.pathname}${A.search}`)},delete:a=>{let A=new URL(window.location.href);a.value==null?A.searchParams.delete(a.key):A.searchParams.delete(a.key,a.value),window.history.pushState({},"",`${A.pathname}${A.search}`)},clear:()=>{let a=new URL(window.location.href);a.search="",window.history.pushState({},"",`${a.pathname}${a.search}`)}};var vt=h();function Et(){return Object.values(iA().cellData).filter(a=>a.id!==ke)}function yt(a){let A=(0,vt.c)(41),e=(0,B.useRef)(!0),{autoInstantiate:t,sessionId:o,setCells:G}=a,{showBoundary:s}=Se(),{handleCellMessage:R}=pA(),r;A[0]===Symbol.for("react.memo_cache_sentinel")?(r={skipMiddleware:!0},A[0]=r):r=A[0];let k=pA(r),i;A[1]===k?i=A[2]:(i=d=>{Ze(d.changes,k,Ft)},A[1]=k,A[2]=i);let l=i,{addCellNotification:c}=Ya(),g=S(ka),u=be(),{setVariables:w,setMetadata:C}=$A(),{addColumnPreview:v}=xA(),{addDatasets:M,filterDatasetsFromVariables:N}=xA(),{addDataSourceConnection:_,filterDataSourcesFromVariables:m}=XA(),{setLayoutData:j}=_A(),[F,D]=fA(_e),{addBanner:AA}=de(),{addPackageAlert:T,addStartupLog:eA}=OA(),aA=S(wA),tA=S(WA),E=Ne(),GA=S(ha),oA=S(ve),{setNamespaces:sA,filterFromVariables:rA}=Ga(),I;A[3]!==AA||A[4]!==c||A[5]!==v||A[6]!==_||A[7]!==M||A[8]!==T||A[9]!==eA||A[10]!==t||A[11]!==m||A[12]!==N||A[13]!==rA||A[14]!==R||A[15]!==l||A[16]!==u||A[17]!==GA||A[18]!==tA||A[19]!==G||A[20]!==oA||A[21]!==g||A[22]!==aA||A[23]!==j||A[24]!==C||A[25]!==sA||A[26]!==w||A[27]!==s?(I=d=>{let Z=ae(d.data);switch(Z.data.op){case"reload":jA();return;case"kernel-ready":{let f=Et();xt(Z.data,{autoInstantiate:t,setCells:G,setLayoutData:j,setAppConfig:u,setCapabilities:tA,setKernelState:g,onError:s,existingCells:f}),aA(Z.data.kiosk);return}case"completed-run":return;case"interrupted":return;case"kernel-startup-error":oA(Z.data.error);return;case"send-ui-element-message":{let f=Z.data.ui_element;if(f){let HA=sa(Z.data);Q.broadcastMessage(f,Z.data.message,HA)}return}case"model-lifecycle":ue(we,Z.data);return;case"remove-ui-elements":wt(Z.data);return;case"completion-result":ce.resolve(Z.data.completion_id,Z.data);return;case"function-call-result":Ye.resolve(Z.data.function_call_id,Z.data);return;case"cell-op":{Dt(Z.data,R);let f=iA().cellData[Z.data.cell_id];if(!f)return;c({cellNotification:Z.data,code:f.code});return}case"variables":w(Z.data.variables.map(jt)),N(Z.data.variables.map(_t)),m(Z.data.variables.map(Nt)),rA(Z.data.variables.map(Mt));return;case"variable-values":C(Z.data.variables.map(bt));return;case"alert":z({title:Z.data.title,description:la({html:Z.data.description}),variant:Z.data.variant});return;case"banner":AA(Z.data);return;case"missing-package-alert":T({...Z.data,kind:"missing"});return;case"installing-package-alert":T({...Z.data,kind:"installing"});return;case"startup-logs":eA({content:Z.data.content,status:Z.data.status});return;case"query-params-append":$.append(Z.data);return;case"query-params-set":$.set(Z.data);return;case"query-params-delete":$.delete(Z.data);return;case"query-params-clear":$.clear();return;case"datasets":M(Z.data);return;case"data-column-preview":v(Z.data);return;case"sql-table-preview":oe.resolve(Z.data.request_id,Z.data);return;case"sql-table-list-preview":zA.resolve(Z.data.request_id,Z.data);return;case"sql-schema-list-preview":Ge.resolve(Z.data.request_id,Z.data);return;case"validate-sql-result":Ae.resolve(Z.data.request_id,Z.data);return;case"secret-keys-result":Ba.resolve(Z.data.request_id,Z.data);return;case"cache-info":GA(Z.data);return;case"cache-cleared":return;case"data-source-connections":_({connections:Z.data.connections.map(Ct)});return;case"storage-namespaces":sA(Z.data);return;case"storage-entries":oa.resolve(Z.data.request_id,Z.data);return;case"storage-download-ready":ta.resolve(Z.data.request_id,Z.data);return;case"reconnected":return;case"focus-cell":ge(Z.data.cell_id);return;case"notebook-document-transaction":l(Z.data.transaction);return;default:Xe(Z.data)}},A[3]=AA,A[4]=c,A[5]=v,A[6]=_,A[7]=M,A[8]=T,A[9]=eA,A[10]=t,A[11]=m,A[12]=N,A[13]=rA,A[14]=R,A[15]=l,A[16]=u,A[17]=GA,A[18]=tA,A[19]=G,A[20]=oA,A[21]=g,A[22]=aA,A[23]=j,A[24]=C,A[25]=sA,A[26]=w,A[27]=s,A[28]=I):I=A[28];let nA=I,uA=(d,Z)=>{e.current&&(e.current=!1,W.reconnect(d,Z))},K;A[29]===Symbol.for("react.memo_cache_sentinel")?(K=vA(),A[29]=K):K=A[29];let H;A[30]!==E||A[31]!==o?(H=()=>E.getWsURL(o).toString(),A[30]=E,A[31]=o,A[32]=H):H=A[32];let U;A[33]===D?U=A[34]:(U=async()=>{e.current=!0,D({state:x.OPEN})},A[33]=D,A[34]=U);let V;A[35]===E?V=A[36]:(V=async()=>{vA()||lA()||E.isSameOrigin||await E.waitForHealthy()},A[35]=E,A[36]=V);let q;A[37]===nA?q=A[38]:(q=d=>{try{nA(d)}catch(Z){let f=Z;p.error("Failed to handle message",d.data,f),z({title:"Failed to handle message",description:gA(f),variant:"danger"})}},A[37]=nA,A[38]=q);let W=mt({static:K,url:H,onOpen:U,waitToConnect:V,onMessage:q,onClose:d=>{switch(p.warn("WebSocket closed",d.code,d.reason),d.reason){case"MARIMO_ALREADY_CONNECTED":D({state:x.CLOSED,code:P.ALREADY_RUNNING,reason:"another browser tab is already connected to the kernel",canTakeover:!0}),W.close();return;case"MARIMO_WRONG_KERNEL_ID":case"MARIMO_NO_FILE_KEY":case"MARIMO_NO_SESSION_ID":case"MARIMO_NO_SESSION":case"MARIMO_SHUTDOWN":D({state:x.CLOSED,code:P.KERNEL_DISCONNECTED,reason:"kernel not found"}),W.close();return;case"MARIMO_MALFORMED_QUERY":D({state:x.CLOSED,code:P.MALFORMED_QUERY,reason:"the kernel did not recognize a request; please file a bug with marimo"});return;default:if(d.reason==="MARIMO_KERNEL_STARTUP_ERROR"){D({state:x.CLOSED,code:P.KERNEL_STARTUP_ERROR,reason:"Failed to start kernel sandbox"}),W.close();return}D({state:x.CONNECTING}),uA(d.code,d.reason)}},onError:d=>{p.warn("WebSocket error",d),D({state:x.CLOSED,code:P.KERNEL_DISCONNECTED,reason:"kernel not found"}),uA()}}),X;return A[39]===F?X=A[40]:(X={connection:F},A[39]=F,A[40]=X),X}function Ct(a){return{...a,name:a.name}}function bt(a){return{name:a.name,dataType:a.datatype,value:a.value}}function Mt(a){return a.name}function Nt(a){return a.name}function _t(a){return a.name}function jt(a){return{name:a.name,declaredBy:a.declared_by,usedBy:a.used_by}}function Ft(){return iA().cellIds.inOrderIds}var St=h();const Qt=a=>{let A=(0,St.c)(2),{children:e}=a,t;return A[0]===e?t=A[1]:(t=(0,n.jsx)("div",{className:"flex flex-col flex-1 overflow-hidden absolute inset-0 print:relative",children:e}),A[0]=e,A[1]=t),t};export{LA as a,gt as c,SA as d,IA as i,Rt as l,yt as n,lt as o,ht as r,OA as s,Qt as t,ya as u};
@@ -1 +0,0 @@
1
- import{s as T}from"./chunk-LvLJmgfZ.js";import{u as R}from"./useEvent-D91BmmQi.js";import{t as L}from"./react-Bj1aDYRI.js";import{E as U,g as $,gi as V,x as W}from"./cells-BBDzmUIS.js";import"./react-dom-CSu739Rf.js";import{t as E}from"./compiler-runtime-B3qBwwSJ.js";import{n as I}from"./constants-DMpttj8Q.js";import{T as F,l as O,m as H}from"./config-CPqw1wUv.js";import{t as M}from"./cn-DCUzRj2J.js";import{t as q}from"./jsx-runtime-BqBOg78p.js";import"./fullscreen-BDxedMYP.js";import"./popover-UExmgBsf.js";import{I as G,_t as J,b as K}from"./JsonOutput-B0sjIMBK.js";import{r as Q}from"./download-QGh9oR1D.js";import{n as X,t as P}from"./button-D9nb17Rw.js";import"./dist-BrR4M-k3.js";import"./cjs-BRGiG41H.js";import"./main-B0OX4z33.js";import"./useNonce-DfoVjkkH.js";import{r as Y}from"./requests-DIwGYs0l.js";import"./layout-D5myrs5s.js";import{c as Z}from"./state-B34hXjp9.js";import"./markdown-renderer-CVd_mMPt.js";import{t as ee}from"./copy-BwrPA9zQ.js";import{i as te,l as re,n as se,r as A,t as oe,u as ae}from"./panels-C-Vq2Qyd.js";import{t as ie}from"./spinner-Bhir8k53.js";import"./dist-DQOq2Tf-.js";import"./dist-DBiqbYe-.js";import"./dist-VjDnmGCZ.js";import"./dist-E6ttb8td.js";import"./dist-B324sPca.js";import{t as le}from"./use-toast-T0_cQDma.js";import{t as me}from"./session-VtovaFBS.js";import"./purify.es-DBmVz-Wl.js";import"./dates-CAlnO9QB.js";import{n as ne}from"./copy-BCF-tANo.js";import{a as ce,c as de,l as pe,n as he,r as fe,t as xe}from"./dialog-Dj0qTFnG.js";import{t as be}from"./share-CqnSBwZy.js";import"./utils-CGtUbqcR.js";import"./vega-loader.browser-BegSZk0G.js";import"./defaultLocale-YteS-k_t.js";import"./defaultLocale-B6z1Qyqt.js";import{a as je}from"./cell-link-DqiCeeeS.js";import"./chunk-5FQGJX7Z-BReOK4Lg.js";import"./html-to-image-CAiN3VHj.js";import{n as ue,t as ge}from"./react-resizable-panels.browser.esm-BUNcfKXO.js";import"./esm-BmrwxxCo.js";import"./name-cell-input-DDQOQSsh.js";import{n as ye,t as ke}from"./marimo-icons-Dk6YhPWV.js";import"./ws-BZQmQxZ7.js";import"./dist-D_yqofzt.js";import"./dist-DdITFgCr.js";import"./dist-B847wb8t.js";import"./dist-Bu99ARwH.js";import"./dist-CQG39nVX.js";import"./dist-1sgFrolC.js";import"./dist-GYoBJCzF.js";import"./dist-BjkXqMhR.js";import"./dist-Bxj5sO2I.js";import"./esm-DN_A77ya.js";var _e=E(),Ne=T(L(),1),t=T(q(),1);const ve=o=>{let e=(0,_e.c)(26),{appConfig:s}=o,{setCells:r}=U(),{sendComponentValues:d}=Y(),l;e[0]===d?l=e[1]:(l=()=>(A.INSTANCE.start(d),we),e[0]=d,e[1]=l);let i;e[2]===Symbol.for("react.memo_cache_sentinel")?(i=[],e[2]=i):i=e[2],(0,Ne.useEffect)(l,i);let m;e[3]===Symbol.for("react.memo_cache_sentinel")?(m=me(),e[3]=m):m=e[3];let g;e[4]===r?g=e[5]:(g={autoInstantiate:!0,setCells:r,sessionId:m},e[4]=r,e[5]=g);let{connection:a}=se(g),v=R(W),y;e[6]===a.state?y=e[7]:(y=H(a.state),e[6]=a.state,e[7]=y);let j=y,w=R($),k;e[8]!==s||e[9]!==w||e[10]!==j?(k=()=>j&&!w?(0,t.jsxs)(G,{milliseconds:2e3,fallback:null,children:[(0,t.jsx)(ie,{className:"mx-auto"}),(0,t.jsx)("p",{className:"text-center text-sm text-muted-foreground mt-2",children:"Connecting..."})]}):(0,t.jsx)(te,{appConfig:s,mode:"read"}),e[8]=s,e[9]=w,e[10]=j,e[11]=k):k=e[11];let u=k,p;e:{if(typeof window>"u"){p=null;break e}let b,c;if(e[12]===Symbol.for("react.memo_cache_sentinel")){if(c=new URL(window.location.href),!c.searchParams.has("file")){p=null;break e}c.searchParams.delete("file"),b=c.searchParams.toString(),e[12]=b,e[13]=c,e[14]=p}else b=e[12],c=e[13],p=e[14];let N=b;p=N?`${c.pathname}?${N}`:c.pathname}let _=p,S=s.width,h;e[15]===Symbol.for("react.memo_cache_sentinel")?(h=_&&(0,t.jsx)("div",{className:"flex items-center px-6 pt-4 sm:-mt-8",children:(0,t.jsxs)("a",{href:_,"aria-label":"Back to gallery",className:M(X({variant:"text",size:"sm"}),"gap-2 px-0 text-muted-foreground hover:text-foreground"),children:[(0,t.jsx)(Z,{className:"size-4","aria-hidden":!0}),(0,t.jsx)("span",{children:"Back"})]})}),e[15]=h):h=e[15];let n;e[16]===a?n=e[17]:(n=(0,t.jsx)(ae,{connection:a,className:"sm:pt-8",children:h}),e[16]=a,e[17]=n);let f;e[18]===u?f=e[19]:(f=u(),e[18]=u,e[19]=f);let x;return e[20]!==s.width||e[21]!==a||e[22]!==v||e[23]!==n||e[24]!==f?(x=(0,t.jsxs)(re,{connection:a,isRunning:v,width:S,children:[n,f]}),e[20]=s.width,e[21]=a,e[22]=v,e[23]=n,e[24]=f,e[25]=x):x=e[25],x};function we(){A.INSTANCE.stop()}var B=E();const Se=()=>{let o=(0,B.c)(3),e=R(V);if(!O()||!e)return null;let s;o[0]===Symbol.for("react.memo_cache_sentinel")?(s=(0,t.jsxs)("span",{children:["Static"," ",(0,t.jsx)("a",{href:I.githubPage,target:"_blank",className:"text-(--sky-11) font-medium underline",children:"marimo"})," ","notebook - Run or edit for full interactivity"]}),o[0]=s):s=o[0];let r;return o[1]===e?r=o[2]:(r=(0,t.jsxs)("div",{className:"px-4 py-2 bg-(--sky-2) border-b border-(--sky-7) text-(--sky-11) flex justify-between items-center gap-4 print:hidden text-sm","data-testid":"static-notebook-banner",children:[s,(0,t.jsx)("span",{className:"shrink-0",children:(0,t.jsx)(Ce,{code:e})})]}),o[1]=e,o[2]=r),r};var Ce=o=>{let e=(0,B.c)(39),{code:s}=o,r=je()||"notebook.py",d=r.lastIndexOf("/");d!==-1&&(r=r.slice(d+1));let l=window.location.href,i;e[0]===s?i=e[1]:(i=be({code:s,baseUrl:`${I.molab}/new`}),e[0]=s,e[1]=i);let m=i,g;e[2]===Symbol.for("react.memo_cache_sentinel")?(g=(0,t.jsx)(pe,{asChild:!0,children:(0,t.jsx)(P,{"data-testid":"static-notebook-dialog-trigger",variant:"outline",size:"xs",children:"Run or Edit"})}),e[2]=g):g=e[2];let a;e[3]===r?a=e[4]:(a=(0,t.jsx)(de,{children:r}),e[3]=r,e[4]=a);let v;e[5]===Symbol.for("react.memo_cache_sentinel")?(v=(0,t.jsxs)("p",{children:["This is a static"," ",(0,t.jsx)("a",{href:I.githubPage,target:"_blank",className:"text-(--sky-11) hover:underline font-medium",children:"marimo"})," ","notebook. To run interactively:"]}),e[5]=v):v=e[5];let y;e[6]===Symbol.for("react.memo_cache_sentinel")?(y=(0,t.jsx)("br",{}),e[6]=y):y=e[6];let j;e[7]===r?j=e[8]:(j=(0,t.jsx)("div",{className:"rounded-lg p-3 border bg-(--sky-2) border-(--sky-7)",children:(0,t.jsxs)("div",{className:"font-mono text-(--sky-11) leading-relaxed",children:["pip install marimo",y,"marimo edit ",r]})}),e[7]=r,e[8]=j);let w;e[9]===Symbol.for("react.memo_cache_sentinel")?(w=!l.endsWith(".html")&&(0,t.jsxs)("div",{className:"rounded-lg p-3 border bg-(--sky-2) border-(--sky-7)",children:[(0,t.jsx)("div",{className:"text-sm text-(--sky-12) mb-1",children:"Or run directly from URL:"}),(0,t.jsxs)("div",{className:"font-mono text-(--sky-11) break-all",children:["marimo edit ",window.location.href]})]}),e[9]=w):w=e[9];let k;e[10]===Symbol.for("react.memo_cache_sentinel")?(k=(0,t.jsx)(ye,{size:12,strokeWidth:1.5,className:"mr-1.5 mt-px text-(--grass-11)"}),e[10]=k):k=e[10];let u;e[11]===m?u=e[12]:(u=(0,t.jsx)(P,{asChild:!0,variant:"outline",size:"xs",className:"shrink-0",children:(0,t.jsxs)("a",{href:m,target:"_blank",rel:"noopener noreferrer",children:[k,"Open in molab"]})}),e[11]=m,e[12]=u);let p;e[13]===Symbol.for("react.memo_cache_sentinel")?(p=(0,t.jsxs)("p",{className:"text-sm text-(--sky-12)",children:["Run this notebook in"," ",(0,t.jsx)("span",{className:"font-semibold",children:"molab"}),", marimo's cloud-hosted notebook platform."]}),e[13]=p):p=e[13];let _;e[14]===u?_=e[15]:(_=(0,t.jsxs)("div",{className:"pt-3 border-t flex gap-2 items-center",children:[u,p]}),e[14]=u,e[15]=_);let S;e[16]!==_||e[17]!==j?(S=(0,t.jsxs)(fe,{className:"pt-3 text-left space-y-3",children:[v,j,w,_]}),e[16]=_,e[17]=j,e[18]=S):S=e[18];let h;e[19]!==S||e[20]!==a?(h=(0,t.jsxs)(ce,{children:[a,S]}),e[19]=S,e[20]=a,e[21]=h):h=e[21];let n;e[22]===s?n=e[23]:(n=async()=>{await ne(s),le({title:"Copied to clipboard"})},e[22]=s,e[23]=n);let f;e[24]===Symbol.for("react.memo_cache_sentinel")?(f=(0,t.jsx)(ee,{className:"w-3 h-3 mr-2"}),e[24]=f):f=e[24];let x;e[25]===n?x=e[26]:(x=(0,t.jsxs)(P,{"data-testid":"copy-static-notebook-dialog-button",variant:"outline",size:"sm",onClick:n,children:[f,"Copy code"]}),e[25]=n,e[26]=x);let b;e[27]!==s||e[28]!==r?(b=()=>{Q(new Blob([s],{type:"text/plain"}),r)},e[27]=s,e[28]=r,e[29]=b):b=e[29];let c;e[30]===Symbol.for("react.memo_cache_sentinel")?(c=(0,t.jsx)(J,{className:"w-3 h-3 mr-2"}),e[30]=c):c=e[30];let N;e[31]===b?N=e[32]:(N=(0,t.jsxs)(P,{"data-testid":"download-static-notebook-dialog-button",variant:"outline",size:"sm",onClick:b,children:[c,"Download"]}),e[31]=b,e[32]=N);let C;e[33]!==x||e[34]!==N?(C=(0,t.jsxs)("div",{className:"flex gap-3 pt-2",children:[x,N]}),e[33]=x,e[34]=N,e[35]=C):C=e[35];let z;return e[36]!==h||e[37]!==C?(z=(0,t.jsxs)(xe,{children:[g,(0,t.jsxs)(he,{children:[h,C]})]}),e[36]=h,e[37]=C,e[38]=z):z=e[38],z},D=E(),ze=F()||O(),Ie=o=>{let e=(0,D.c)(9),s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=(0,t.jsx)(Se,{}),e[0]=s):s=e[0];let r;e[1]===o.appConfig?r=e[2]:(r=(0,t.jsx)(ve,{appConfig:o.appConfig}),e[1]=o.appConfig,e[2]=r);let d;e[3]===Symbol.for("react.memo_cache_sentinel")?(d=ze&&(0,t.jsx)(Pe,{}),e[3]=d):d=e[3];let l;e[4]===r?l=e[5]:(l=(0,t.jsxs)(ge,{children:[s,r,d]}),e[4]=r,e[5]=l);let i;e[6]===Symbol.for("react.memo_cache_sentinel")?(i=(0,t.jsx)(K,{}),e[6]=i):i=e[6];let m;return e[7]===l?m=e[8]:(m=(0,t.jsx)(oe,{children:(0,t.jsxs)(ue,{direction:"horizontal",autoSaveId:"marimo:chrome:v1:run1",children:[l,i]})}),e[7]=l,e[8]=m),m},Pe=()=>{let o=(0,D.c)(1),e;return o[0]===Symbol.for("react.memo_cache_sentinel")?(e=(0,t.jsx)("div",{className:"fixed bottom-0 right-0 z-50","data-testid":"watermark",children:(0,t.jsxs)("a",{href:I.githubPage,target:"_blank",className:"text-sm text-(--grass-11) font-bold tracking-wide transition-colors bg-(--grass-4) hover:bg-(--grass-5) border-t border-l border-(--grass-8) px-3 py-1 rounded-tl-md flex items-center gap-2",children:[(0,t.jsx)("span",{children:"made with marimo"}),(0,t.jsx)(ke,{className:"h-4 w-auto"})]})}),o[0]=e):e=o[0],e},Re=Ie;export{Re as default};
@@ -1,22 +0,0 @@
1
- var p=Object.defineProperty;var y=(s,i,e)=>i in s?p(s,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[i]=e;var o=(s,i,e)=>y(s,typeof i!="symbol"?i+"":i,e);var m;(!globalThis.EventTarget||!globalThis.Event)&&console.error(`
2
- PartySocket requires a global 'EventTarget' class to be available!
3
- You can polyfill this global by adding this to your code before any partysocket imports:
4
-
5
- \`\`\`
6
- import 'partysocket/event-target-polyfill';
7
- \`\`\`
8
- Please file an issue at https://github.com/partykit/partykit if you're still having trouble.
9
- `);var _=class extends Event{constructor(i,e){super("error",e);o(this,"message");o(this,"error");this.message=i.message,this.error=i}},d=class extends Event{constructor(i=1e3,e="",t){super("close",t);o(this,"code");o(this,"reason");o(this,"wasClean",!0);this.code=i,this.reason=e}},u={Event,ErrorEvent:_,CloseEvent:d};function w(s,i){if(!s)throw Error(i)}function b(s){return new s.constructor(s.type,s)}function E(s){return"data"in s?new MessageEvent(s.type,s):"code"in s||"reason"in s?new d(s.code||1999,s.reason||"unknown reason",s):"error"in s?new _(s.error,s):new Event(s.type,s)}var c=typeof process<"u"&&((m=process.versions)==null?void 0:m.node)!==void 0&&typeof document>"u"?E:b,h={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},g=!1,v=class a extends EventTarget{constructor(e,t,n={}){super();o(this,"_ws");o(this,"_retryCount",-1);o(this,"_uptimeTimeout");o(this,"_connectTimeout");o(this,"_shouldReconnect",!0);o(this,"_connectLock",!1);o(this,"_binaryType","blob");o(this,"_closeCalled",!1);o(this,"_messageQueue",[]);o(this,"_debugLogger",console.log.bind(console));o(this,"_url");o(this,"_protocols");o(this,"_options");o(this,"onclose",null);o(this,"onerror",null);o(this,"onmessage",null);o(this,"onopen",null);o(this,"_handleOpen",e=>{this._debug("open event");let{minUptime:t=h.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),t),w(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(n=>{var r;(r=this._ws)==null||r.send(n)}),this._messageQueue=[],this.onopen&&this.onopen(e),this.dispatchEvent(c(e))});o(this,"_handleMessage",e=>{this._debug("message event"),this.onmessage&&this.onmessage(e),this.dispatchEvent(c(e))});o(this,"_handleError",e=>{this._debug("error event",e.message),this._disconnect(void 0,e.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(e),this._debug("exec error listeners"),this.dispatchEvent(c(e)),this._connect()});o(this,"_handleClose",e=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(e),this.dispatchEvent(c(e))});this._url=e,this._protocols=t,this._options=n,this._options.startClosed&&(this._shouldReconnect=!1),this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return a.CONNECTING}get OPEN(){return a.OPEN}get CLOSING(){return a.CLOSING}get CLOSED(){return a.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(e){this._binaryType=e,this._ws&&(this._ws.binaryType=e)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((e,t)=>(typeof t=="string"?e+=t.length:t instanceof Blob?e+=t.size:e+=t.byteLength,e),0)+(this._ws?this._ws.bufferedAmount:0)}get extensions(){return this._ws?this._ws.extensions:""}get protocol(){return this._ws?this._ws.protocol:""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?a.CLOSED:a.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(e=1e3,t){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(e,t)}reconnect(e,t){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED||this._disconnect(e,t),this._connect()}send(e){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",e),this._ws.send(e);else{let{maxEnqueuedMessages:t=h.maxEnqueuedMessages}=this._options;this._messageQueue.length<t&&(this._debug("enqueue",e),this._messageQueue.push(e))}}_debug(...e){this._options.debug&&this._debugLogger("RWS>",...e)}_getNextDelay(){let{reconnectionDelayGrowFactor:e=h.reconnectionDelayGrowFactor,minReconnectionDelay:t=h.minReconnectionDelay,maxReconnectionDelay:n=h.maxReconnectionDelay}=this._options,r=0;return this._retryCount>0&&(r=t*e**(this._retryCount-1),r>n&&(r=n)),this._debug("next delay",r),r}_wait(){return new Promise(e=>{setTimeout(e,this._getNextDelay())})}_getNextProtocols(e){if(!e)return Promise.resolve(null);if(typeof e=="string"||Array.isArray(e))return Promise.resolve(e);if(typeof e=="function"){let t=e();if(!t)return Promise.resolve(null);if(typeof t=="string"||Array.isArray(t))return Promise.resolve(t);if(t.then)return t}throw Error("Invalid protocols")}_getNextUrl(e){if(typeof e=="string")return Promise.resolve(e);if(typeof e=="function"){let t=e();if(typeof t=="string")return Promise.resolve(t);if(t.then)return t}throw Error("Invalid URL")}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:e=h.maxRetries,connectionTimeout:t=h.connectionTimeout}=this._options;if(this._retryCount>=e){this._debug("max retries reached",this._retryCount,">=",e);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>Promise.all([this._getNextUrl(this._url),this._getNextProtocols(this._protocols||null)])).then(([n,r])=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!g&&(console.error(`\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket.
10
-
11
- For example, if you're using node.js, run \`npm install ws\`, and then in your code:
12
-
13
- import PartySocket from 'partysocket';
14
- import WS from 'ws';
15
-
16
- const partysocket = new PartySocket({
17
- host: "127.0.0.1:1999",
18
- room: "test-room",
19
- WebSocket: WS
20
- });
21
-
22
- `),g=!0);let l=this._options.WebSocket||WebSocket;this._debug("connect",{url:n,protocols:r}),this._ws=r?new l(n,r):new l(n),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),t)}).catch(n=>{this._connectLock=!1,this._handleError(new u.ErrorEvent(Error(n.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new u.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(e=1e3,t){if(this._clearTimeouts(),this._ws){this._removeListeners();try{(this._ws.readyState===this.OPEN||this._ws.readyState===this.CONNECTING)&&this._ws.close(e,t),this._handleClose(new u.CloseEvent(e,t,this))}catch{}}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};export{v as t};