Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

marimo

Package Overview
Dependencies
Maintainers
2
Versions
374
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

marimo - npm Package Compare versions

Comparing version
0.19.8
to
0.19.9
+567
marimo/_cli/export/thumbnail.py
# Copyright 2026 Marimo. All rights reserved.
from __future__ import annotations
import asyncio
import json
import subprocess
import threading
from contextlib import AbstractContextManager
from functools import partial
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path
from typing import TYPE_CHECKING, Any, Optional
import click
from marimo._cli.parse_args import parse_args
from marimo._cli.print import echo, green, red
from marimo._dependencies.dependencies import DependencyManager
from marimo._server.export import run_app_then_export_as_html
from marimo._server.file_router import flatten_files
from marimo._server.files.directory_scanner import DirectoryScanner
from marimo._server.utils import asyncio_run
from marimo._utils.http import HTTPException, HTTPStatus
from marimo._utils.marimo_path import MarimoPath
from marimo._utils.paths import marimo_package_path, maybe_make_dirs
if TYPE_CHECKING:
from collections.abc import Iterable
from types import TracebackType
_sandbox_message = (
"Render notebooks in an isolated environment, with dependencies tracked "
"via PEP 723 inline metadata. If already declared, dependencies will "
"install automatically. Requires uv. Only applies when --execute is used."
)
def _split_paths_and_args(
name: str, args: tuple[str, ...]
) -> tuple[list[str], tuple[str, ...]]:
paths = [name]
for index, arg in enumerate(args):
if arg == "--":
return paths, args[index + 1 :]
paths.append(arg)
return paths, ()
def _collect_notebooks(paths: Iterable[Path]) -> list[MarimoPath]:
notebooks: dict[str, MarimoPath] = {}
for path in paths:
if path.is_dir():
scanner = DirectoryScanner(str(path), include_markdown=True)
try:
file_infos = scanner.scan()
except HTTPException as e:
if e.status_code != HTTPStatus.REQUEST_TIMEOUT:
raise
# Match server behavior: use partial results on scan timeout.
file_infos = scanner.partial_results
for file_info in flatten_files(file_infos):
if not file_info.is_marimo_file or file_info.is_directory:
continue
absolute_path = str(Path(path) / file_info.path)
notebooks[absolute_path] = MarimoPath(absolute_path)
else:
notebooks[str(path)] = MarimoPath(str(path))
return [notebooks[k] for k in sorted(notebooks)]
async def _render_html(
marimo_path: MarimoPath,
*,
execute: bool,
include_code: bool,
args: tuple[str, ...],
asset_url: str | None = None,
venv_python: str | None = None,
) -> str:
if not execute:
from marimo._server.export import export_as_html_without_execution
result = await export_as_html_without_execution(
marimo_path, include_code=True, asset_url=asset_url
)
return result.text
if venv_python is None:
cli_args = parse_args(args) if args else {}
result = await run_app_then_export_as_html(
marimo_path,
include_code=include_code,
cli_args=cli_args,
argv=list(args),
asset_url=asset_url,
)
return result.text
payload = {
"path": marimo_path.absolute_name,
"include_code": include_code,
"args": list(args),
"asset_url": asset_url,
}
# Render in a separate process so we can use a sandboxed venv without polluting the current environment.
return await asyncio.to_thread(
_render_html_in_subprocess,
venv_python,
payload,
)
def _render_html_in_subprocess(
venv_python: str, payload: dict[str, Any]
) -> str:
"""Render a notebook to HTML in a separate Python process."""
script = r"""
import asyncio
import json
import sys
from marimo._cli.parse_args import parse_args
from marimo._server.export import run_app_then_export_as_html
from marimo._utils.marimo_path import MarimoPath
payload = json.loads(sys.argv[1])
path = MarimoPath(payload["path"])
include_code = bool(payload.get("include_code", False))
args = payload.get("args") or []
asset_url = payload.get("asset_url")
cli_args = parse_args(tuple(args)) if args else {}
result = asyncio.run(
run_app_then_export_as_html(
path,
include_code=include_code,
cli_args=cli_args,
argv=list(args),
asset_url=asset_url,
)
)
sys.stdout.write(result.text)
"""
result = subprocess.run(
[venv_python, "-c", script, json.dumps(payload)],
capture_output=True,
text=True,
)
if result.returncode != 0:
stderr = result.stderr.strip()
raise click.ClickException(
"Failed to render notebook in sandbox.\n\n"
f"Command:\n\n {venv_python} -c <script>\n\n"
f"Stderr:\n\n{stderr}"
)
return result.stdout
class _ThumbnailRequestHandler(SimpleHTTPRequestHandler):
def do_GET(self) -> None: # noqa: N802
if self.path.split("?", 1)[0] == "/__marimo_thumbnail__.html":
html = getattr(self.server, "thumbnail_html", "")
self.send_response(200)
self.send_header("Content-Type", "text/html; charset=utf-8")
self.send_header("Cache-Control", "no-store")
self.end_headers()
self.wfile.write(html.encode("utf-8"))
return
return super().do_GET()
def log_message(self, format: str, *args: Any) -> None: # noqa: A002
# Silence noisy server logs for CLI usage.
del format
del args
return
class _ThumbnailHTTPServer(ThreadingHTTPServer):
# Set by _ThumbnailAssetServer to serve a fresh HTML document per notebook.
thumbnail_html: str
class _ThumbnailAssetServer(AbstractContextManager["_ThumbnailAssetServer"]):
def __init__(self, *, directory: Path) -> None:
self._directory = directory
self._server: _ThumbnailHTTPServer | None = None
self._thread: threading.Thread | None = None
@property
def base_url(self) -> str:
assert self._server is not None
host, port = self._server.server_address[:2]
if isinstance(host, bytes):
host = host.decode("utf-8")
return f"http://{host}:{port}"
@property
def page_url(self) -> str:
return f"{self.base_url}/__marimo_thumbnail__.html"
def set_html(self, html: str) -> None:
assert self._server is not None
self._server.thumbnail_html = html
def __enter__(self) -> _ThumbnailAssetServer:
if not self._directory.is_dir():
raise click.ClickException(
f"Static assets not found at {self._directory}"
)
handler = partial(
_ThumbnailRequestHandler, directory=str(self._directory)
)
self._server = _ThumbnailHTTPServer(("127.0.0.1", 0), handler)
self._server.thumbnail_html = ""
self._thread = threading.Thread(
target=self._server.serve_forever, daemon=True
)
self._thread.start()
return self
def __exit__(
self,
exc_type: type[BaseException] | None,
exc: BaseException | None,
tb: TracebackType | None,
) -> None:
del exc_type
del exc
del tb
if self._server is not None:
self._server.shutdown()
self._server.server_close()
self._server = None
if self._thread is not None:
self._thread.join(timeout=1)
self._thread = None
return None
class _SandboxVenvPool:
def __init__(self) -> None:
self._envs: dict[tuple[str, ...], tuple[str, str]] = {}
def get_python(self, notebook_path: str) -> str:
"""Return a venv python path for the notebook's sandbox requirements."""
from marimo._cli.sandbox import (
build_sandbox_venv,
get_sandbox_requirements,
)
requirements = tuple(get_sandbox_requirements(notebook_path))
existing = self._envs.get(requirements)
if existing is not None:
return existing[1]
sandbox_dir, venv_python = build_sandbox_venv(notebook_path)
self._envs[requirements] = (sandbox_dir, venv_python)
return venv_python
def close(self) -> None:
"""Clean up any sandbox environments we created."""
from marimo._cli.sandbox import cleanup_sandbox_dir
for sandbox_dir, _ in self._envs.values():
cleanup_sandbox_dir(sandbox_dir)
self._envs.clear()
async def _generate_thumbnails(
*,
notebooks: list[MarimoPath],
width: int,
height: int,
scale: int,
timeout_ms: int,
output: Optional[Path],
overwrite: bool,
include_code: bool,
execute: bool,
notebook_args: tuple[str, ...],
continue_on_error: bool,
sandbox: bool,
) -> None:
from marimo._metadata.opengraph import default_opengraph_image
failures: list[tuple[MarimoPath, Exception]] = []
try:
from playwright.async_api import ( # type: ignore[import-not-found]
async_playwright,
)
except ModuleNotFoundError as e:
if getattr(e, "name", None) == "playwright":
raise click.ClickException(
"Playwright is required to generate thumbnails.\n\n"
" Tip: Install dependencies with:\n\n"
" pip install 'nbconvert[webpdf]'\n\n"
" and install Chromium with:\n\n"
" python -m playwright install chromium"
) from None
raise
if sandbox and not DependencyManager.which("uv"):
raise click.ClickException(
"uv is required for --sandbox thumbnail generation.\n\n"
" Tip: Install uv from https://github.com/astral-sh/uv"
)
static_dir = marimo_package_path() / "_static"
sandbox_pool: _SandboxVenvPool | None = (
_SandboxVenvPool() if sandbox else None
)
try:
with _ThumbnailAssetServer(directory=static_dir) as server:
async with async_playwright() as playwright:
browser = await playwright.chromium.launch()
context = await browser.new_context(
viewport={"width": width, "height": height},
device_scale_factor=scale,
)
page = await context.new_page()
await page.emulate_media(reduced_motion="reduce")
for index, notebook in enumerate(notebooks):
try:
notebook_dir = notebook.path.parent
out_path = (
output
if output is not None
else notebook_dir
/ default_opengraph_image(str(notebook.path))
)
if out_path.exists() and not overwrite:
echo(
red("skip")
+ f": {notebook.short_name} (exists, use --overwrite)"
)
continue
maybe_make_dirs(out_path)
echo(f"Rendering {notebook.short_name}...")
venv_python = (
sandbox_pool.get_python(str(notebook.path))
if sandbox_pool is not None
else None
)
html = await _render_html(
notebook,
execute=execute,
include_code=include_code,
args=notebook_args,
asset_url=server.base_url,
venv_python=venv_python,
)
server.set_html(html)
echo(f"Screenshotting -> {out_path}...")
page_url = f"{server.page_url}?v={index}"
await page.goto(page_url, wait_until="load")
# Hide chrome and watermarks marked for print so thumbnails stay focused on notebook content.
await page.add_style_tag(
content=(
'.print\\:hidden,[data-testid="watermark"]{display:none !important;}'
)
)
# Nb renderer starts cell contents as invisible for a short period to avoid flicker
# --> we wait for the first cell container to be visible before snapshotting.
await page.wait_for_function(
r"""
() => {
const root = document.getElementById("root");
if (!root) return false;
const cell = document.querySelector('div[id^="cell-"]');
if (cell) {
const style = window.getComputedStyle(cell);
return style.visibility !== "hidden" && style.display !== "none";
}
return root.childElementCount > 0;
}
""",
timeout=30_000,
)
await page.wait_for_timeout(timeout_ms)
await page.screenshot(
path=str(out_path), full_page=False
)
echo(green("ok") + f": {out_path}")
except Exception as e:
failures.append((notebook, e))
echo(red("error") + f": {notebook.short_name}: {e}")
if not continue_on_error:
raise
await context.close()
await browser.close()
finally:
if sandbox_pool is not None:
sandbox_pool.close()
if failures:
raise click.ClickException(
f"Failed to generate thumbnails for {len(failures)} notebooks."
)
@click.command(
"thumbnail", help="Generate OpenGraph thumbnails for notebooks."
)
@click.argument(
"name",
type=click.Path(
exists=True, file_okay=True, dir_okay=True, path_type=Path
),
)
@click.option(
"--width",
type=int,
default=1200,
show_default=True,
help="Viewport width for the screenshot.",
)
@click.option(
"--height",
type=int,
default=630,
show_default=True,
help="Viewport height for the screenshot.",
)
@click.option(
"--scale",
type=click.IntRange(min=1, max=4),
default=2,
show_default=True,
help=(
"Device scale factor for screenshots. Output resolution will be "
"`width*scale` x `height*scale`."
),
)
@click.option(
"--timeout-ms",
type=int,
default=1500,
show_default=True,
help="Additional time to wait after page load before screenshot.",
)
@click.option(
"--output",
type=click.Path(path_type=Path),
default=None,
help=(
"Output filename. If omitted, writes to "
"`<notebook_dir>/__marimo__/assets/<notebook_stem>/opengraph.png`."
),
)
@click.option(
"--overwrite/--no-overwrite",
default=False,
show_default=True,
help="Overwrite existing thumbnails.",
)
@click.option(
"--include-code/--no-include-code",
default=False,
show_default=True,
help="Whether to include code in the rendered HTML before screenshot.",
)
@click.option(
"--execute/--no-execute",
default=False,
show_default=True,
help=(
"Execute notebooks and include their outputs in thumbnails. "
"In --no-execute mode (default), thumbnails are generated from notebook "
"structure without running code (and will not include outputs)."
),
)
@click.option(
"--sandbox/--no-sandbox",
is_flag=True,
default=None,
show_default=False,
type=bool,
help=_sandbox_message,
)
@click.option(
"--continue-on-error/--fail-fast",
default=True,
show_default=True,
help="Continue processing other notebooks if one notebook fails.",
)
@click.argument("args", nargs=-1, type=click.UNPROCESSED)
def thumbnail(
name: Path,
width: int,
height: int,
scale: int,
timeout_ms: int,
output: Optional[Path],
overwrite: bool,
include_code: bool,
execute: bool,
sandbox: Optional[bool],
continue_on_error: bool,
args: tuple[str, ...],
) -> None:
"""Generate thumbnails for one or more notebooks (or directories)."""
try:
DependencyManager.playwright.require("for thumbnail generation")
except ModuleNotFoundError as e:
if getattr(e, "name", None) == "playwright":
raise click.ClickException(
"Playwright is required for thumbnail generation.\n\n"
" Tip: Install with:\n\n"
" python -m pip install playwright\n\n"
" and install Chromium with:\n\n"
" python -m playwright install chromium"
) from None
raise
paths, notebook_args = _split_paths_and_args(str(name), args)
notebooks = _collect_notebooks([Path(p) for p in paths])
if not notebooks:
raise click.ClickException("No marimo notebooks found.")
if output is not None and len(notebooks) > 1:
raise click.UsageError(
"--output can only be used when generating thumbnail for a single notebook."
)
from marimo._cli.sandbox import resolve_sandbox_mode
if not execute and sandbox:
raise click.UsageError("--sandbox requires --execute.")
sandbox_mode = (
resolve_sandbox_mode(sandbox=sandbox, name=str(name))
if execute
else None
)
asyncio_run(
_generate_thumbnails(
notebooks=notebooks,
width=width,
height=height,
scale=scale,
timeout_ms=timeout_ms,
output=output,
overwrite=overwrite,
include_code=include_code,
execute=execute,
notebook_args=notebook_args,
continue_on_error=continue_on_error,
sandbox=sandbox_mode is not None,
)
)
# Copyright 2026 Marimo. All rights reserved.
#
# Colored Click classes for CLI help formatting.
#
# These follow cargo's color conventions:
# - Bold bright green for section headers (Usage:, Options:, Commands:)
# - Bold bright cyan for command/option names
from __future__ import annotations
import click
from marimo._cli.print import bright_green, light_blue
class ColoredCommand(click.Command):
"""Click Command with colored help output (cargo-style)."""
def format_usage(
self, ctx: click.Context, formatter: click.HelpFormatter
) -> None:
pieces = self.collect_usage_pieces(ctx)
formatter.write_usage(
ctx.command_path,
" ".join(pieces),
bright_green("Usage: ", bold=True),
)
def format_options(
self, ctx: click.Context, formatter: click.HelpFormatter
) -> None:
opts = []
for param in self.get_params(ctx):
rv = param.get_help_record(ctx)
if rv is not None:
opts.append(rv)
if opts:
rows = [(light_blue(opt, bold=True), desc) for opt, desc in opts]
with formatter.section(bright_green("Options", bold=True)):
formatter.write_dl(rows)
class ColoredGroup(click.Group):
"""Click Group with colored help output (cargo-style)."""
command_class = ColoredCommand
def format_usage(
self, ctx: click.Context, formatter: click.HelpFormatter
) -> None:
pieces = self.collect_usage_pieces(ctx)
formatter.write_usage(
ctx.command_path,
" ".join(pieces),
bright_green("Usage: ", bold=True),
)
def format_options(
self, ctx: click.Context, formatter: click.HelpFormatter
) -> None:
opts = []
for param in self.get_params(ctx):
rv = param.get_help_record(ctx)
if rv is not None:
opts.append(rv)
if opts:
rows = [(light_blue(opt, bold=True), desc) for opt, desc in opts]
with formatter.section(bright_green("Options", bold=True)):
formatter.write_dl(rows)
# Click's MultiCommand.format_options calls format_commands
# internally, so we must do the same since we're overriding
# the method completely
self.format_commands(ctx, formatter)
def format_commands(
self, ctx: click.Context, formatter: click.HelpFormatter
) -> None:
"""Write all commands with colored names."""
commands = []
for subcommand in self.list_commands(ctx):
cmd = self.get_command(ctx, subcommand)
if cmd is None or cmd.hidden:
continue
commands.append((subcommand, cmd))
if commands:
rows = [
(
light_blue(subcommand, bold=True),
cmd.get_short_help_str(),
)
for subcommand, cmd in commands
]
with formatter.section(bright_green("Commands", bold=True)):
formatter.write_dl(rows)

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

var TA=Object.defineProperty;var IA=(a,A,e)=>A in a?TA(a,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[A]=e;var GA=(a,A,e)=>IA(a,typeof A!="symbol"?A+"":A,e);import{s as cA}from"./chunk-LvLJmgfZ.js";import{d as _,i as gA,l as hA,u as j}from"./useEvent-BhXAndur.js";import{t as KA}from"./react-Bj1aDYRI.js";import{D as HA,Dt as UA,Et as VA,F as XA,L as WA,N as JA,Ot as qA,ai as zA,an as $A,en as Ae,ir as ee,l as ae,li as te,lr as dA,m as BA,vn as Ge,w as oe,y as se}from"./cells-DPp5cDaO.js";import{t as B}from"./compiler-runtime-B3qBwwSJ.js";import{n as re}from"./assertNever-CBU83Y6o.js";import{$ as ne,I as ke,L as Re,M as ie,N as le,Q as Ze,R as ce,S as ge,V as S,W as uA,X as he,Y as de,at as Be,ct as ue,et as Ye,rt as me,st as fe,tt as YA,z as pe}from"./utilities.esm-dm9SQStE.js";import{a as mA,d as D}from"./hotkeys-BHHWjLlp.js";import{C as xe,b as we}from"./utils-YqBXNpsM.js";import{r as oA}from"./constants-B6Cb__3x.js";import{S as sA,b as F,c as De,h as ve,o as Ee,x}from"./config-Q0O7_stz.js";import{a as ye,d as Ce}from"./switch-dWLWbbtg.js";import{n as be}from"./ErrorBoundary-B9Ifj8Jf.js";import{t as Me}from"./useEventListener-Cb-RVVEn.js";import{t as Ne}from"./jsx-runtime-ZmTK25f3.js";import{t as rA}from"./button-CZ3Cs4qb.js";import{n as _e,t as f}from"./cn-BKtXLv3a.js";import{Y as fA}from"./JsonOutput-PE5ko4gi.js";import{t as je}from"./createReducer-B3rBsy4P.js";import{t as Se}from"./requests-B4FYHTZl.js";import{t as W}from"./createLucideIcon-BCdY6lG5.js";import{a as Fe,f as pA,i as xA,n as Qe,o as Le,s as Pe}from"./layout-_O8thjaV.js";import{m as Oe}from"./download-os8QlW6l.js";import{c as Te}from"./maps-D2_Mq1pZ.js";import{c as Ie}from"./markdown-renderer-DJy8ww5d.js";import{n as Ke}from"./spinner-DA8-7wQv.js";import{i as He,n as Ue}from"./readonly-python-code-WjTf6Pdd.js";import{t as Ve}from"./uuid-DXdzqzcr.js";import{t as nA}from"./use-toast-BDYuj3zG.js";import{i as Xe}from"./session-BOFn9QrD.js";import{s as We,u as Je}from"./Combination-BAEdC-rz.js";import{t as kA}from"./tooltip-CMQz28hC.js";import{a as qe,r as wA,t as ze}from"./mode-Bn7pdJvO.js";import{_ as $e,f as Aa,g as ea,h as DA,m as vA,p as EA,v as yA,y as aa}from"./alert-dialog-BW4srmS0.js";import{r as CA}from"./share-ipf2hrOh.js";import{r as bA}from"./errors-TZBmrJmc.js";import{t as ta}from"./RenderHTML-D-of_-s7.js";import{i as Ga}from"./cell-link-B9b7J8QK.js";import{t as oa}from"./error-banner-B9ts0mNl.js";import{n as sa}from"./useAsyncData-BMGLSTg8.js";import{t as ra}from"./requests-De5yEBc8.js";import{t as na}from"./ws-DcVtI9Wj.js";import{t as ka}from"./request-registry-C5_pVc8Y.js";import{n as Ra}from"./types-iYXk7c05.js";import{n as ia}from"./runs-YUGrkyfE.js";var la=W("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"}]]),MA=W("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]]),Za=W("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"}]]),ca=W("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"}]]),ga=B(),r=cA(Ne(),1);const ha=a=>{let A=(0,ga.c)(10),{reason:e,canTakeover:t}=a,o=t===void 0?!1:t,G=da;if(o){let n;A[0]===Symbol.for("react.memo_cache_sentinel")?(n=(0,r.jsx)("div",{className:"flex justify-between",children:(0,r.jsx)("span",{className:"font-bold text-xl flex items-center mb-2",children:"Notebook already connected"})}),A[0]=n):n=A[0];let k;A[1]===e?k=A[2]:(k=(0,r.jsx)("span",{children:e}),A[1]=e,A[2]=k);let R;A[3]===o?R=A[4]:(R=o&&(0,r.jsxs)(rA,{onClick:G,variant:"outline","data-testid":"takeover-button",className:"shrink-0",children:[(0,r.jsx)(Za,{className:"w-4 h-4 mr-2"}),"Take over session"]}),A[3]=o,A[4]=R);let i;return A[5]!==k||A[6]!==R?(i=(0,r.jsx)("div",{className:"flex justify-center",children:(0,r.jsxs)(oa,{kind:"info",className:"mt-10 flex flex-col rounded p-3 max-w-[800px] mx-4",children:[n,(0,r.jsxs)("div",{className:"flex justify-between items-end text-base gap-20",children:[k,R]})]})}),A[5]=k,A[6]=R,A[7]=i):i=A[7],i}let s;return A[8]===e?s=A[9]:(s=(0,r.jsx)("div",{className:"font-mono text-center text-base text-(--red-11)",children:(0,r.jsx)("p",{children:e})}),A[8]=e,A[9]=s),s};async function da(){try{let a=new URL(window.location.href).searchParams;await ye.post(`/kernel/takeover?${a.toString()}`,{}),CA()}catch(a){nA({title:"Failed to take over session",description:bA(a),variant:"danger"})}}var Ba=B(),u=cA(KA(),1);const ua=a=>{let A=(0,Ba.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,r.jsx)(ha,{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,r.jsxs)("div",{className:t,children:[o,G]}),A[4]=o,A[5]=t,A[6]=G,A[7]=s):s=A[7],s};var Ya=B();const ma=a=>{let A=(0,Ya.c)(10),{title:e}=a,[t,o]=(0,u.useState)(e),[G,s]=(0,u.useState)(!0),n,k;A[0]!==t||A[1]!==e?(n=()=>{if(e!==t){s(!1);let g=setTimeout(()=>{o(e),s(!0)},300);return()=>clearTimeout(g)}},k=[e,t],A[0]=t,A[1]=e,A[2]=n,A[3]=k):(n=A[2],k=A[3]),(0,u.useEffect)(n,k);let R;A[4]===Symbol.for("react.memo_cache_sentinel")?(R=(0,r.jsx)(Ke,{className:"size-20 animate-spin text-primary","data-testid":"large-spinner",strokeWidth:1}),A[4]=R):R=A[4];let i=G?"opacity-100":"opacity-0",l;A[5]===i?l=A[6]:(l=f("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,r.jsxs)("div",{className:"flex flex-col h-full flex-1 items-center justify-center p-4",children:[R,(0,r.jsx)("div",{className:l,children:t})]}),A[7]=t,A[8]=l,A[9]=c):c=A[9],c};var RA=B();const fa=a=>{let A=(0,RA.c)(2),{children:e}=a;if(!sA())return e;let t;return A[0]===e?t=A[1]:(t=(0,r.jsx)(pa,{children:e}),A[0]=e,A[1]=t),t};var pa=a=>{let A=(0,RA.c)(3),{children:e}=a,t;A[0]===Symbol.for("react.memo_cache_sentinel")?(t=[],A[0]=t):t=A[0];let{isPending:o,error:G}=sa(wa,t),s=j(Ze);if(o){let n;return A[1]===Symbol.for("react.memo_cache_sentinel")?(n=(0,r.jsx)(NA,{}),A[1]=n):n=A[1],n}if(!s&&ze()==="read"&&xa()){let n;return A[2]===Symbol.for("react.memo_cache_sentinel")?(n=(0,r.jsx)(NA,{}),A[2]=n):n=A[2],n}if(G)throw G;return e};function xa(){return Xe(oA.showCode,"false")||!gA.get(Ce)}const NA=a=>{let A=(0,RA.c)(2),e=j(ne),t;return A[0]===e?t=A[1]:(t=(0,r.jsx)(ma,{title:e}),A[0]=e,A[1]=t),t};async function wa(){return await de.INSTANCE.initialized.promise,!0}var Da={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 Q(a){return Da[a]}function va(a){if(document.visibilityState==="visible")return;let A=async()=>{a===0?new Notification("Execution completed",{body:"Your notebook run completed successfully.",icon:await Q("success")}):new Notification("Execution failed",{body:`Your notebook run encountered ${a} error(s).`,icon:await Q("error")})};!("Notification"in window)||Notification.permission==="denied"||(Notification.permission==="granted"?A():Notification.permission==="default"&&Notification.requestPermission().then(e=>{e==="granted"&&A()}))}const Ea=a=>{let{isRunning:A}=a,e=HA(),t=document.querySelector("link[rel~='icon']");t||(t=document.createElement("link"),t.rel="icon",document.getElementsByTagName("head")[0].append(t)),(0,u.useEffect)(()=>{!A&&t.href.includes("favicon")||(async()=>{let G;if(G=A?"running":e.length===0?"success":"error",t.href=await Q(G),!document.hasFocus())return;let s=setTimeout(async()=>{t.href=await Q("idle")},3e3);return()=>clearTimeout(s)})()},[A,e,t]);let o=ge(A)??A;return(0,u.useEffect)(()=>{o&&!A&&va(e.length)},[e,o,A]),Me(window,"focus",async G=>{A||(t.href=await Q("idle"))}),null};function ya(){let{cellRuntime:a}=gA.get(se),A=mA.entries(a).find(([e,t])=>t.status==="running");A&&Ga(A[0],"focus")}var L=B();const Ca=a=>{let A=(0,L.c)(22),{connection:e,isRunning:t}=a,{mode:o}=j(qe),G=e.state===x.CLOSED,s=e.state===x.OPEN,n;A[0]!==e.canTakeover||A[1]!==G?(n=G&&!e.canTakeover&&(0,r.jsx)(_a,{}),A[0]=e.canTakeover,A[1]=G,A[2]=n):n=A[2];let k=o==="read"?"fixed":"absolute",R;A[3]===k?R=A[4]:(R=f("z-50 top-4 left-4",k),A[3]=k,A[4]=R);let i;A[5]!==s||A[6]!==t?(i=s&&t&&(0,r.jsx)(Na,{}),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,r.jsx)(ba,{}),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,r.jsx)(Ma,{}),A[11]=e.canTakeover,A[12]=G,A[13]=c):c=A[13];let g;A[14]!==R||A[15]!==i||A[16]!==l||A[17]!==c?(g=(0,r.jsxs)("div",{className:R,children:[i,l,c]}),A[14]=R,A[15]=i,A[16]=l,A[17]=c,A[18]=g):g=A[18];let h;return A[19]!==n||A[20]!==g?(h=(0,r.jsxs)(r.Fragment,{children:[n,g]}),A[19]=n,A[20]=g,A[21]=h):h=A[21],h};var iA="print:hidden pointer-events-auto hover:cursor-pointer",ba=()=>{let a=(0,L.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,r.jsx)(kA,{content:"App disconnected",children:(0,r.jsx)("div",{className:iA,children:(0,r.jsx)(ca,{className:"w-[25px] h-[25px] text-(--red-11)"})})}),a[0]=A):A=a[0],A},Ma=()=>{let a=(0,L.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,r.jsx)(kA,{content:"Notebook locked",children:(0,r.jsx)("div",{className:iA,children:(0,r.jsx)(He,{className:"w-[25px] h-[25px] text-(--blue-11)"})})}),a[0]=A):A=a[0],A},Na=()=>{let a=(0,L.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,r.jsx)(kA,{content:"Jump to running cell",side:"right",children:(0,r.jsx)("div",{className:iA,"data-testid":"loading-indicator",onClick:ya,children:(0,r.jsx)(la,{className:"running-app-icon",size:30,strokeWidth:1})})}),a[0]=A):A=a[0],A},_a=()=>{let a=(0,L.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"noise"}),(0,r.jsx)("div",{className:"disconnected-gradient"})]}),a[0]=A):A=a[0],A},C=B(),ja=$e,Sa=aa,Fa=We(ea),_A=u.forwardRef((a,A)=>{let e=(0,C.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=f("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,r.jsx)(DA,{className:G,...o,ref:A}),e[5]=o,e[6]=A,e[7]=G,e[8]=s):s=e[8],s});_A.displayName=DA.displayName;var Qa=_e("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"}}),jA=u.forwardRef((a,A)=>{let e=(0,C.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 n=s===void 0?"right":s,k;e[5]===Symbol.for("react.memo_cache_sentinel")?(k=(0,r.jsx)(_A,{}),e[5]=k):k=e[5];let R;e[6]!==o||e[7]!==n?(R=f(Qa({side:n}),o),e[6]=o,e[7]=n,e[8]=R):R=e[8];let i;e[9]===Symbol.for("react.memo_cache_sentinel")?(i=(0,r.jsxs)(Aa,{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,r.jsx)(Te,{className:"h-4 w-4"}),(0,r.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]!==R?(l=(0,r.jsx)(Fa,{children:(0,r.jsxs)(Je,{children:[k,(0,r.jsxs)(EA,{ref:A,className:R,...G,children:[t,i]})]})}),e[10]=t,e[11]=G,e[12]=A,e[13]=R,e[14]=l):l=e[14],l});jA.displayName=EA.displayName;var La=a=>{let A=(0,C.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=f("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,r.jsx)("div",{className:o,...t}),A[5]=t,A[6]=o,A[7]=G):G=A[7],G};La.displayName="SheetHeader";var Pa=a=>{let A=(0,C.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=f("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,r.jsx)("div",{className:o,...t}),A[5]=t,A[6]=o,A[7]=G):G=A[7],G};Pa.displayName="SheetFooter";var Oa=u.forwardRef((a,A)=>{let e=(0,C.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=f("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,r.jsx)(yA,{ref:A,className:G,...o}),e[5]=o,e[6]=A,e[7]=G,e[8]=s):s=e[8],s});Oa.displayName=yA.displayName;var Ta=u.forwardRef((a,A)=>{let e=(0,C.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=f("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,r.jsx)(vA,{ref:A,className:G,...o}),e[5]=o,e[6]=A,e[7]=G,e[8]=s):s=e[8],s});Ta.displayName=vA.displayName;var Ia=B();const lA=(0,u.memo)(()=>{let a=(0,Ia.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,r.jsx)(fe,{name:YA.SIDEBAR}),a[0]=A):A=a[0],A});lA.displayName="SidebarSlot";var Ka=B();const Ha=a=>{let A=(0,Ka.c)(6),{openWidth:e}=a,t;A[0]===Symbol.for("react.memo_cache_sentinel")?(t=(0,r.jsx)(Sa,{className:"lg:hidden",asChild:!0,children:(0,r.jsx)(rA,{variant:"ghost",className:"bg-background",children:(0,r.jsx)(MA,{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,r.jsx)(lA,{}),A[3]=G):G=A[3];let s;return A[4]===o?s=A[5]:(s=(0,r.jsxs)(ja,{children:[t,(0,r.jsx)(jA,{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 Ua=B();const Va=a=>{let A=(0,Ua.c)(7),{isOpen:e,toggle:t}=a,o=e?"rotate-0":"rotate-180",G;A[0]===o?G=A[1]:(G=f("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,r.jsx)(Oe,{className:G}),A[2]=G,A[3]=s);let n;return A[4]!==s||A[5]!==t?(n=(0,r.jsx)("div",{className:"invisible lg:visible absolute top-[12px] right-[16px] z-20",children:(0,r.jsx)(rA,{onClick:t,className:"w-10 h-8",variant:"ghost",size:"icon",children:s})}),A[4]=s,A[5]=t,A[6]=n):n=A[6],n};var Xa=B();const Wa=a=>{let A=(0,Xa.c)(11),{isOpen:e,toggle:t,width:o}=a,G=e?o:ke,s;A[0]===G?s=A[1]:(s={width:G},A[0]=G,A[1]=s);let n;A[2]===Symbol.for("react.memo_cache_sentinel")?(n=f("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]=n):n=A[2];let k;A[3]!==e||A[4]!==t?(k=(0,r.jsx)(Va,{isOpen:e,toggle:t}),A[3]=e,A[4]=t,A[5]=k):k=A[5];let R;A[6]===Symbol.for("react.memo_cache_sentinel")?(R=(0,r.jsx)("div",{className:"relative h-full flex flex-col px-3 pb-16 pt-14 overflow-y-auto shadow-sm border-l",children:(0,r.jsx)(lA,{})}),A[6]=R):R=A[6];let i;return A[7]!==e||A[8]!==s||A[9]!==k?(i=(0,r.jsxs)("aside",{"data-expanded":e,style:s,className:n,children:[k,R]}),A[7]=e,A[8]=s,A[9]=k,A[10]=i):i=A[10],i};var Ja=B();const qa=a=>{let A=(0,Ja.c)(15),{children:e}=a,[t,o]=hA(ce),{isOpen:G,width:s}=t;if(ue(YA.SIDEBAR).length===0)return e;let n;A[0]===s?n=A[1]:(n=Re(s),A[0]=s,A[1]=n);let k=n,R;A[2]!==o||A[3]!==G?(R=()=>o({type:"toggle",isOpen:!G}),A[2]=o,A[3]=G,A[4]=R):R=A[4];let i;A[5]!==G||A[6]!==k||A[7]!==R?(i=(0,r.jsx)(Wa,{isOpen:G,width:k,toggle:R}),A[5]=G,A[6]=k,A[7]=R,A[8]=i):i=A[8];let l;A[9]===k?l=A[10]:(l=(0,r.jsx)("div",{className:"absolute top-3 left-4 flex items-center z-50",children:(0,r.jsx)(Ha,{openWidth:k})}),A[9]=k,A[10]=l);let c;return A[11]!==e||A[12]!==i||A[13]!==l?(c=(0,r.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 za=B();const $a=a=>{let A=(0,za.c)(17),{width:e,connection:t,isRunning:o,children:G}=a,s=t.state,n;A[0]===o?n=A[1]:(n=(0,r.jsx)(Ea,{isRunning:o}),A[0]=o,A[1]=n);let k;A[2]!==t||A[3]!==o?(k=(0,r.jsx)(Ca,{connection:t,isRunning:o}),A[2]=t,A[3]=o,A[4]=k):k=A[4];let R;A[5]!==s||A[6]!==e?(R=f("mathjax_ignore",De(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]=R):R=A[7];let i;A[8]!==G||A[9]!==s||A[10]!==R||A[11]!==e?(i=(0,r.jsx)(fa,{children:(0,r.jsx)(qa,{children:(0,r.jsx)("div",{id:"App","data-config-width":e,"data-connection-state":s,className:R,children:G})})}),A[8]=G,A[9]=s,A[10]=R,A[11]=e,A[12]=i):i=A[12];let l;return A[13]!==n||A[14]!==k||A[15]!==i?(l=(0,r.jsxs)(r.Fragment,{children:[n,k,i]}),A[13]=n,A[14]=k,A[15]=i,A[16]=l):l=A[16],l};function At(a){return a.kind==="missing"}function SA(a){return a.kind==="installing"}var{valueAtom:et,useActions:at}=je(()=>({packageAlert:null,startupLogsAlert:null,packageLogs:{}}),{addPackageAlert:(a,A)=>{var o;let e={...a.packageLogs};if(SA(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)||Ve();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 tt=()=>j(et);function FA(){return at()}var QA=B();const LA=(0,u.memo)(a=>{let A=(0,QA.c)(11),{appConfig:e,mode:t,children:o}=a,{selectedLayout:G,layoutData:s}=Fe(),n=j(wA);if(t==="edit"&&!n)return o;let k;if(A[0]!==t||A[1]!==G){k=G;let c=new URLSearchParams(window.location.search);if(t==="read"&&c.has(oA.viewAs)){let g=c.get(oA.viewAs);Ra.includes(g)&&(k=g)}A[0]=t,A[1]=G,A[2]=k}else k=A[2];let R;A[3]===k?R=A[4]:(R=Le.find(c=>c.type===k),A[3]=k,A[4]=R);let i=R;if(!i)return o;let l;return A[5]!==e||A[6]!==k||A[7]!==s||A[8]!==t||A[9]!==i?(l=(0,r.jsx)(Gt,{appConfig:e,mode:t,plugin:i,layoutData:s,finalLayout:k}),A[5]=e,A[6]=k,A[7]=s,A[8]=t,A[9]=i,A[10]=l):l=A[10],l});LA.displayName="CellsRenderer";const Gt=a=>{let A=(0,QA.c)(18),{appConfig:e,mode:t,plugin:o,layoutData:G,finalLayout:s}=a,n=JA(),{setCurrentLayoutData:k}=xA(),R,i,l,c,g;if(A[0]!==e||A[1]!==s||A[2]!==G||A[3]!==t||A[4]!==n||A[5]!==o){let w=ae(n);R=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]=n,A[5]=o,A[6]=R,A[7]=i,A[8]=l,A[9]=c,A[10]=g}else R=A[6],i=A[7],l=A[8],c=A[9],g=A[10];let h;return A[11]!==R||A[12]!==k||A[13]!==i||A[14]!==l||A[15]!==c||A[16]!==g?(h=(0,r.jsx)(R,{appConfig:i,mode:l,cells:c,layout:g,setLayout:k}),A[11]=R,A[12]=k,A[13]=i,A[14]=l,A[15]=c,A[16]=g,A[17]=h):h=A[17],h};var ot=class PA{constructor(A){GA(this,"hasStarted",!1);GA(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=>{D.warn(o)})});this.uiElementRegistry=A}static get INSTANCE(){let A="_marimo_private_RuntimeState";return window[A]||(window[A]=new PA(S)),window[A]}get sendComponentValues(){if(!this._sendComponentValues)throw Error("sendComponentValues is not set");return this._sendComponentValues}start(A){if(this.hasStarted){D.warn("RuntimeState already started");return}this._sendComponentValues=A,document.addEventListener(uA.TYPE,this.handleReadyEvent),this.hasStarted=!0}stop(){if(!this.hasStarted){D.warn("RuntimeState already stopped");return}document.removeEventListener(uA.TYPE,this.handleReadyEvent),this.hasStarted=!1}};function st(a){if(a.static)return Ye.empty();if(sA())return he();let A=a.url;return new na(A,void 0,{maxRetries:10,debug:!1,startClosed:!0,connectionTimeout:1e4})}function rt(a){let{onOpen:A,onMessage:e,onClose:t,onError:o,waitToConnect:G}=a,[s]=(0,u.useState)(()=>{let n=st(a);return n.addEventListener("open",A),n.addEventListener("close",t),n.addEventListener("error",o),n.addEventListener("message",e),n});return(0,u.useEffect)(()=>(s.readyState===WebSocket.CLOSED&&G().then(()=>s.reconnect()).catch(n=>{D.error("Healthy connection never made",n),s.close()}),()=>{D.warn("useConnectionTransport is unmounting. This likely means there is a bug."),s.close(),s.removeEventListener("open",A),s.removeEventListener("close",t),s.removeEventListener("error",o),s.removeEventListener("message",e)}),[s]),s}function nt(a){let{codes:A,names:e,configs:t,cell_ids:o,last_executed_code:G,last_execution_time:s}=a,n=G||{},k=s||{};return A.map((R,i)=>{let l=o[i],c=n[l];return XA({id:l,code:R,edited:c?c!==R:!1,name:e[i],lastCodeRun:n[l]??null,lastExecutionTime:k[l]??null,config:t[i]})})}function kt(a,A,e){let t=Qe(),{layout:o}=a;if(o){let G=o.type,s=Pe({type:G,data:o.data,cells:A});t.selectedLayout=G,t.layoutData[G]=s,e({layoutView:G,data:s})}return t}function Rt(){let a=[],A=[];return S.entries.forEach((e,t)=>{a.push(t),A.push(e.value)}),{objectIds:a,values:A}}function it(a,A){let{existingCells:e,autoInstantiate:t,setCells:o,setLayoutData:G,setAppConfig:s,setCapabilities:n,setKernelState:k,onError:R}=A,{resumed:i,ui_values:l,app_config:c,capabilities:g,auto_instantiated:h}=a,w=e&&e.length>0,y=w&&!i?e:nt(a);o(y,kt(a,y,G));let v=xe.safeParse(c);if(v.success?s(v.data):D.error("Failed to parse app config",v.error),n(g),h)return;if(i){for(let[Y,m]of mA.entries(l||{}))S.set(Y,m);return}let{objectIds:b,values:M}=Rt(),N=w?Object.fromEntries(e.map(Y=>[Y.id,Y.code])):void 0;Se().sendInstantiate({objectIds:b,values:M,autoRun:t,codes:N}).then(()=>{k({isInstantiated:!0,error:null})}).catch(Y=>{k({isInstantiated:!1,error:Y}),R(Error("Failed to instantiate",{cause:Y}))})}function lt(a){let A=a.cell_id;S.removeElementsByCell(A),pA.INSTANCE.removeForCellId(A)}function Zt(a,A){A(a),pA.INSTANCE.track(a)}const J={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 ct=B();function gt(){return Object.values(BA().cellData).filter(a=>a.id!==zA)}function ht(a){let A=(0,ct.c)(37),e=(0,u.useRef)(!0),{autoInstantiate:t,sessionId:o,setCells:G}=a,{showBoundary:s}=be(),{handleCellMessage:n,setCellCodes:k,setCellIds:R}=oe(),{addCellNotification:i}=ia(),l=_(Ue),c=we(),{setVariables:g,setMetadata:h}=Ge(),{addColumnPreview:w}=dA(),{addDatasets:y,filterDatasetsFromVariables:v}=dA(),{addDataSourceConnection:b,filterDataSourcesFromVariables:M}=ee(),{setLayoutData:N}=xA(),[Y,m]=hA(ve),{addBanner:q}=Be(),{addPackageAlert:P,addStartupLog:z}=FA(),$=_(wA),AA=_($A),E=Ee(),eA=_(ra),aA=_(me),O;A[0]!==q||A[1]!==i||A[2]!==w||A[3]!==b||A[4]!==y||A[5]!==P||A[6]!==z||A[7]!==t||A[8]!==M||A[9]!==v||A[10]!==n||A[11]!==c||A[12]!==eA||A[13]!==AA||A[14]!==k||A[15]!==R||A[16]!==G||A[17]!==aA||A[18]!==l||A[19]!==$||A[20]!==N||A[21]!==h||A[22]!==g||A[23]!==s?(O=d=>{let Z=te(d.data);switch(Z.data.op){case"reload":CA();return;case"kernel-ready":{let p=gt();it(Z.data,{autoInstantiate:t,setCells:G,setLayoutData:N,setAppConfig:c,setCapabilities:AA,setKernelState:l,onError:s,existingCells:p}),$(Z.data.kiosk);return}case"completed-run":return;case"interrupted":return;case"kernel-startup-error":aA(Z.data.error);return;case"send-ui-element-message":{let p=Z.data.ui_element;if(p){let OA=Ie(Z.data);S.broadcastMessage(p,Z.data.message,OA)}return}case"model-lifecycle":le(ie,Z.data);return;case"remove-ui-elements":lt(Z.data);return;case"completion-result":Ae.resolve(Z.data.completion_id,Z.data);return;case"function-call-result":pe.resolve(Z.data.function_call_id,Z.data);return;case"cell-op":{Zt(Z.data,n);let p=BA().cellData[Z.data.cell_id];if(!p)return;i({cellNotification:Z.data,code:p.code});return}case"variables":g(Z.data.variables.map(mt)),v(Z.data.variables.map(Yt)),M(Z.data.variables.map(ut));return;case"variable-values":h(Z.data.variables.map(Bt));return;case"alert":nA({title:Z.data.title,description:ta({html:Z.data.description}),variant:Z.data.variant});return;case"banner":q(Z.data);return;case"missing-package-alert":P({...Z.data,kind:"missing"});return;case"installing-package-alert":P({...Z.data,kind:"installing"});return;case"startup-logs":z({content:Z.data.content,status:Z.data.status});return;case"query-params-append":J.append(Z.data);return;case"query-params-set":J.set(Z.data);return;case"query-params-delete":J.delete(Z.data);return;case"query-params-clear":J.clear();return;case"datasets":y(Z.data);return;case"data-column-preview":w(Z.data);return;case"sql-table-preview":VA.resolve(Z.data.request_id,Z.data);return;case"sql-table-list-preview":UA.resolve(Z.data.request_id,Z.data);return;case"validate-sql-result":qA.resolve(Z.data.request_id,Z.data);return;case"secret-keys-result":ka.resolve(Z.data.request_id,Z.data);return;case"cache-info":eA(Z.data);return;case"cache-cleared":return;case"data-source-connections":b({connections:Z.data.connections.map(dt)});return;case"reconnected":return;case"focus-cell":WA(Z.data.cell_id);return;case"update-cell-codes":k({codes:Z.data.codes,ids:Z.data.cell_ids,codeIsStale:Z.data.code_is_stale});return;case"update-cell-ids":R({cellIds:Z.data.cell_ids});return;default:re(Z.data)}},A[0]=q,A[1]=i,A[2]=w,A[3]=b,A[4]=y,A[5]=P,A[6]=z,A[7]=t,A[8]=M,A[9]=v,A[10]=n,A[11]=c,A[12]=eA,A[13]=AA,A[14]=k,A[15]=R,A[16]=G,A[17]=aA,A[18]=l,A[19]=$,A[20]=N,A[21]=h,A[22]=g,A[23]=s,A[24]=O):O=A[24];let tA=O,ZA=(d,Z)=>{e.current&&(e.current=!1,V.reconnect(d,Z))},T;A[25]===Symbol.for("react.memo_cache_sentinel")?(T=fA(),A[25]=T):T=A[25];let I;A[26]!==E||A[27]!==o?(I=()=>E.getWsURL(o).toString(),A[26]=E,A[27]=o,A[28]=I):I=A[28];let K;A[29]===m?K=A[30]:(K=async()=>{e.current=!0,m({state:x.OPEN})},A[29]=m,A[30]=K);let H;A[31]===E?H=A[32]:(H=async()=>{fA()||sA()||E.isSameOrigin||await E.waitForHealthy()},A[31]=E,A[32]=H);let U;A[33]===tA?U=A[34]:(U=d=>{try{tA(d)}catch(Z){let p=Z;D.error("Failed to handle message",d.data,p),nA({title:"Failed to handle message",description:bA(p),variant:"danger"})}},A[33]=tA,A[34]=U);let V=rt({static:T,url:I,onOpen:K,waitToConnect:H,onMessage:U,onClose:d=>{switch(D.warn("WebSocket closed",d.code,d.reason),d.reason){case"MARIMO_ALREADY_CONNECTED":m({state:x.CLOSED,code:F.ALREADY_RUNNING,reason:"another browser tab is already connected to the kernel",canTakeover:!0}),V.close();return;case"MARIMO_WRONG_KERNEL_ID":case"MARIMO_NO_FILE_KEY":case"MARIMO_NO_SESSION_ID":case"MARIMO_NO_SESSION":case"MARIMO_SHUTDOWN":m({state:x.CLOSED,code:F.KERNEL_DISCONNECTED,reason:"kernel not found"}),V.close();return;case"MARIMO_MALFORMED_QUERY":m({state:x.CLOSED,code:F.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"){m({state:x.CLOSED,code:F.KERNEL_STARTUP_ERROR,reason:"Failed to start kernel sandbox"}),V.close();return}m({state:x.CONNECTING}),ZA(d.code,d.reason)}},onError:d=>{D.warn("WebSocket error",d),m({state:x.CLOSED,code:F.KERNEL_DISCONNECTED,reason:"kernel not found"}),ZA()}}),X;return A[35]===Y?X=A[36]:(X={connection:Y},A[35]=Y,A[36]=X),X}function dt(a){return{...a,name:a.name}}function Bt(a){return{name:a.name,dataType:a.datatype,value:a.value}}function ut(a){return a.name}function Yt(a){return a.name}function mt(a){return{name:a.name,declaredBy:a.declared_by,usedBy:a.used_by}}var ft=B();const pt=a=>{let A=(0,ft.c)(2),{children:e}=a,t;return A[0]===e?t=A[1]:(t=(0,r.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{SA as a,tt as c,MA as d,LA as i,$a as l,ht as n,At as o,ot as r,FA as s,pt as t,ua as u};
import{s as F}from"./chunk-LvLJmgfZ.js";import{u as J}from"./useEvent-BhXAndur.js";import{t as G}from"./react-Bj1aDYRI.js";import{Kr as H,b as ee,w as te}from"./cells-DPp5cDaO.js";import"./react-dom-CSu739Rf.js";import{t as V}from"./compiler-runtime-B3qBwwSJ.js";import"./tooltip-DxKBXCGp.js";import{w as re}from"./utilities.esm-dm9SQStE.js";import{n as Y}from"./constants-B6Cb__3x.js";import{S as se,d as oe}from"./config-Q0O7_stz.js";import{t as ae}from"./jsx-runtime-ZmTK25f3.js";import{n as ie,t as $}from"./button-CZ3Cs4qb.js";import{t as le}from"./cn-BKtXLv3a.js";import"./dist-DBwNzi3C.js";import{E as me,Y as M}from"./JsonOutput-PE5ko4gi.js";import"./cjs-CH5Rj0g8.js";import"./main-U5Goe76G.js";import"./useNonce-CS26E0hA.js";import{r as ne}from"./requests-B4FYHTZl.js";import"./layout-_O8thjaV.js";import{t as ce}from"./arrow-left-VDC1u5rq.js";import{r as de}from"./download-os8QlW6l.js";import"./markdown-renderer-DJy8ww5d.js";import{t as pe}from"./copy-D-8y6iMN.js";import{t as he}from"./download-Dg7clfkc.js";import{i as fe,l as xe,n as be,r as Q,t as ye,u as je}from"./panels-DW8vF5Az.js";import{t as ue}from"./spinner-DA8-7wQv.js";import"./dist-bBwmhqty.js";import"./dist-Btv5Rh1v.js";import"./dist-Dcqqg9UU.js";import"./dist-sMh6mJ2d.js";import"./dist-CoCQUAeM.js";import{t as ge}from"./use-toast-BDYuj3zG.js";import{t as ke}from"./session-BOFn9QrD.js";import"./Combination-BAEdC-rz.js";import"./dates-CrvjILe3.js";import{a as _e,c as Ne,l as we,n as ve,r as Se,t as Ce}from"./dialog-eb-NieZw.js";import"./popover-CH1FzjxU.js";import{t as ze}from"./share-ipf2hrOh.js";import"./vega-loader.browser-DXARUlxo.js";import"./defaultLocale-JieDVWC_.js";import"./defaultLocale-BLne0bXb.js";import{t as Ee}from"./copy-DHrHayPa.js";import"./purify.es-DZrAQFIu.js";import{a as Ie}from"./cell-link-B9b7J8QK.js";import"./chunk-5FQGJX7Z-DPlx2kjA.js";import"./katex-CDLTCvjQ.js";import"./html-to-image-CIQqSu-S.js";import"./esm-Bmu2DhPy.js";import{n as Pe,t as Ae}from"./react-resizable-panels.browser.esm-Da3ksQXL.js";import"./name-cell-input-Bc7geMVf.js";import{t as Re}from"./icon-32x32-DH9kM4Sh.js";import"./ws-DcVtI9Wj.js";import"./dist-tLOz534J.js";import"./dist-C5H5qIvq.js";import"./dist-B62Xo7-b.js";import"./dist-BpuNldXk.js";import"./dist-8kKeYgOg.js";import"./dist-BZWmfQbq.js";import"./dist-DLgWirXg.js";import"./dist-CF4gkF4y.js";import"./dist-CNW1zLeq.js";import"./esm-D82gQH1f.js";var Te=V(),Be=F(G(),1),t=F(ae(),1);const We=o=>{let e=(0,Te.c)(25),{appConfig:s}=o,{setCells:r}=te(),{sendComponentValues:y}=ne(),c;e[0]===y?c=e[1]:(c=()=>(Q.INSTANCE.start(y),Le),e[0]=y,e[1]=c);let a;e[2]===Symbol.for("react.memo_cache_sentinel")?(a=[],e[2]=a):a=e[2],(0,Be.useEffect)(c,a);let i;e[3]===Symbol.for("react.memo_cache_sentinel")?(i=ke(),e[3]=i):i=e[3];let j;e[4]===r?j=e[5]:(j={autoInstantiate:!0,setCells:r,sessionId:i},e[4]=r,e[5]=j);let{connection:l}=be(j),N=J(ee),u;e[6]===l.state?u=e[7]:(u=oe(l.state),e[6]=l.state,e[7]=u);let x=u,d;e[8]!==s||e[9]!==x?(d=()=>x?(0,t.jsxs)(me,{milliseconds:2e3,fallback:null,children:[(0,t.jsx)(ue,{className:"mx-auto"}),(0,t.jsx)("p",{className:"text-center text-sm text-muted-foreground mt-2",children:"Connecting..."})]}):(0,t.jsx)(fe,{appConfig:s,mode:"read"}),e[8]=s,e[9]=x,e[10]=d):d=e[10];let b=d,m;e:{if(typeof window>"u"){m=null;break e}let f,n;if(e[11]===Symbol.for("react.memo_cache_sentinel")){if(n=new URL(window.location.href),!n.searchParams.has("file")){m=null;break e}n.searchParams.delete("file"),f=n.searchParams.toString(),e[11]=f,e[12]=n,e[13]=m}else f=e[11],n=e[12],m=e[13];let w=f;m=w?`${n.pathname}?${w}`:n.pathname}let g=m,v=s.width,k;e[14]===Symbol.for("react.memo_cache_sentinel")?(k=g&&(0,t.jsx)("div",{className:"flex items-center px-6 pt-4 sm:-mt-8",children:(0,t.jsxs)("a",{href:g,"aria-label":"Back to gallery",className:le(ie({variant:"text",size:"sm"}),"gap-2 px-0 text-muted-foreground hover:text-foreground"),children:[(0,t.jsx)(ce,{className:"size-4","aria-hidden":!0}),(0,t.jsx)("span",{children:"Back"})]})}),e[14]=k):k=e[14];let p;e[15]===l?p=e[16]:(p=(0,t.jsx)(je,{connection:l,className:"sm:pt-8",children:k}),e[15]=l,e[16]=p);let h;e[17]===b?h=e[18]:(h=b(),e[17]=b,e[18]=h);let _;return e[19]!==s.width||e[20]!==l||e[21]!==N||e[22]!==p||e[23]!==h?(_=(0,t.jsxs)(xe,{connection:l,isRunning:N,width:v,children:[p,h]}),e[19]=s.width,e[20]=l,e[21]=N,e[22]=p,e[23]=h,e[24]=_):_=e[24],_};function Le(){Q.INSTANCE.stop()}var X=V();const Oe=()=>{let o=(0,X.c)(3),e=J(H);if(!M()||!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:Y.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)(Ue,{code:e})})]}),o[1]=e,o[2]=r),r};var Ue=o=>{let e=(0,X.c)(78),{code:s}=o,r=Ie()||"notebook.py",y=r.lastIndexOf("/");y!==-1&&(r=r.slice(y+1));let c=window.location.href,a,i,j,l,N,u,x,d,b,m,g,v,k,p,h,_,f,n,w;if(e[0]!==s||e[1]!==r){let q=ze({code:s});l=Ce,e[21]===Symbol.for("react.memo_cache_sentinel")?(g=(0,t.jsx)(we,{asChild:!0,children:(0,t.jsx)($,{"data-testid":"static-notebook-dialog-trigger",variant:"outline",size:"xs",children:"Run or Edit"})}),e[21]=g):g=e[21],j=ve,i=_e,e[22]===r?m=e[23]:(m=(0,t.jsx)(Ne,{children:r}),e[22]=r,e[23]=m),a=Se,u="pt-3 text-left space-y-3",e[24]===Symbol.for("react.memo_cache_sentinel")?(x=(0,t.jsxs)("p",{children:["This is a static"," ",(0,t.jsx)("a",{href:Y.githubPage,target:"_blank",className:"text-(--sky-11) hover:underline font-medium",children:"marimo"})," ","notebook. To run interactively:"]}),e[24]=x):x=e[24];let K;e[25]===Symbol.for("react.memo_cache_sentinel")?(K=(0,t.jsx)("br",{}),e[25]=K):K=e[25],e[26]===r?d=e[27]:(d=(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",K,"marimo edit ",r]})}),e[26]=r,e[27]=d),e[28]===Symbol.for("react.memo_cache_sentinel")?(b=!c.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[28]=b):b=e[28],w="pt-3 border-t border-(--sky-7)",_="text-sm text-(--sky-12) mb-2",e[29]===Symbol.for("react.memo_cache_sentinel")?(f=(0,t.jsx)("strong",{children:"Try in browser with WebAssembly:"}),e[29]=f):f=e[29],n=" ",N=q,v="_blank",k="text-(--sky-11) hover:underline break-all",p="noreferrer",h=q.slice(0,50),e[0]=s,e[1]=r,e[2]=a,e[3]=i,e[4]=j,e[5]=l,e[6]=N,e[7]=u,e[8]=x,e[9]=d,e[10]=b,e[11]=m,e[12]=g,e[13]=v,e[14]=k,e[15]=p,e[16]=h,e[17]=_,e[18]=f,e[19]=n,e[20]=w}else a=e[2],i=e[3],j=e[4],l=e[5],N=e[6],u=e[7],x=e[8],d=e[9],b=e[10],m=e[11],g=e[12],v=e[13],k=e[14],p=e[15],h=e[16],_=e[17],f=e[18],n=e[19],w=e[20];let S;e[30]!==N||e[31]!==v||e[32]!==k||e[33]!==p||e[34]!==h?(S=(0,t.jsxs)("a",{href:N,target:v,className:k,rel:p,children:[h,"..."]}),e[30]=N,e[31]=v,e[32]=k,e[33]=p,e[34]=h,e[35]=S):S=e[35];let C;e[36]!==S||e[37]!==_||e[38]!==f||e[39]!==n?(C=(0,t.jsxs)("p",{className:_,children:[f,n,S]}),e[36]=S,e[37]=_,e[38]=f,e[39]=n,e[40]=C):C=e[40];let L;e[41]===Symbol.for("react.memo_cache_sentinel")?(L=(0,t.jsx)("p",{className:"text-sm text-(--sky-12)",children:"Note: WebAssembly may not work for all notebooks. Additionally, some dependencies may not be available in the browser."}),e[41]=L):L=e[41];let z;e[42]!==C||e[43]!==w?(z=(0,t.jsxs)("div",{className:w,children:[C,L]}),e[42]=C,e[43]=w,e[44]=z):z=e[44];let E;e[45]!==a||e[46]!==u||e[47]!==x||e[48]!==d||e[49]!==b||e[50]!==z?(E=(0,t.jsxs)(a,{className:u,children:[x,d,b,z]}),e[45]=a,e[46]=u,e[47]=x,e[48]=d,e[49]=b,e[50]=z,e[51]=E):E=e[51];let I;e[52]!==i||e[53]!==m||e[54]!==E?(I=(0,t.jsxs)(i,{children:[m,E]}),e[52]=i,e[53]=m,e[54]=E,e[55]=I):I=e[55];let P;e[56]===s?P=e[57]:(P=async()=>{await Ee(s),ge({title:"Copied to clipboard"})},e[56]=s,e[57]=P);let O;e[58]===Symbol.for("react.memo_cache_sentinel")?(O=(0,t.jsx)(pe,{className:"w-3 h-3 mr-2"}),e[58]=O):O=e[58];let A;e[59]===P?A=e[60]:(A=(0,t.jsxs)($,{"data-testid":"copy-static-notebook-dialog-button",variant:"outline",size:"sm",onClick:P,children:[O,"Copy code"]}),e[59]=P,e[60]=A);let R;e[61]!==s||e[62]!==r?(R=()=>{de(new Blob([s],{type:"text/plain"}),r)},e[61]=s,e[62]=r,e[63]=R):R=e[63];let U;e[64]===Symbol.for("react.memo_cache_sentinel")?(U=(0,t.jsx)(he,{className:"w-3 h-3 mr-2"}),e[64]=U):U=e[64];let T;e[65]===R?T=e[66]:(T=(0,t.jsxs)($,{"data-testid":"download-static-notebook-dialog-button",variant:"outline",size:"sm",onClick:R,children:[U,"Download"]}),e[65]=R,e[66]=T);let B;e[67]!==A||e[68]!==T?(B=(0,t.jsxs)("div",{className:"flex gap-3 pt-2",children:[A,T]}),e[67]=A,e[68]=T,e[69]=B):B=e[69];let W;e[70]!==j||e[71]!==I||e[72]!==B?(W=(0,t.jsxs)(j,{children:[I,B]}),e[70]=j,e[71]=I,e[72]=B,e[73]=W):W=e[73];let D;return e[74]!==l||e[75]!==g||e[76]!==W?(D=(0,t.jsxs)(l,{children:[g,W]}),e[74]=l,e[75]=g,e[76]=W,e[77]=D):D=e[77],D},Z=V(),De=se()||M(),Ke=o=>{let e=(0,Z.c)(9),s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=(0,t.jsx)(Oe,{}),e[0]=s):s=e[0];let r;e[1]===o.appConfig?r=e[2]:(r=(0,t.jsx)(We,{appConfig:o.appConfig}),e[1]=o.appConfig,e[2]=r);let y;e[3]===Symbol.for("react.memo_cache_sentinel")?(y=De&&(0,t.jsx)(Ve,{}),e[3]=y):y=e[3];let c;e[4]===r?c=e[5]:(c=(0,t.jsxs)(Ae,{children:[s,r,y]}),e[4]=r,e[5]=c);let a;e[6]===Symbol.for("react.memo_cache_sentinel")?(a=(0,t.jsx)(re,{}),e[6]=a):a=e[6];let i;return e[7]===c?i=e[8]:(i=(0,t.jsx)(ye,{children:(0,t.jsxs)(Pe,{direction:"horizontal",autoSaveId:"marimo:chrome:v1:run1",children:[c,a]})}),e[7]=c,e[8]=i),i},Ve=()=>{let o=(0,Z.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:Y.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)("img",{src:Re,alt:"marimo",className:"h-4 w-auto"})]})}),o[0]=e):e=o[0],e},Ye=Ke;export{Ye as default};
var ar=Object.defineProperty;var St=y=>{throw TypeError(y)};var or=(y,b,_)=>b in y?ar(y,b,{enumerable:!0,configurable:!0,writable:!0,value:_}):y[b]=_;var a=(y,b,_)=>or(y,typeof b!="symbol"?b+"":b,_),Ne=(y,b,_)=>b.has(y)||St("Cannot "+_);var l=(y,b,_)=>(Ne(y,b,"read from private field"),_?_.call(y):b.get(y)),k=(y,b,_)=>b.has(y)?St("Cannot add the same private member more than once"):b instanceof WeakSet?b.add(y):b.set(y,_),F=(y,b,_,de)=>(Ne(y,b,"write to private field"),de?de.call(y,_):b.set(y,_),_),$=(y,b,_)=>(Ne(y,b,"access private method"),_);import{s as kt}from"./chunk-LvLJmgfZ.js";import{i as qe,l as be,p as V,u as lr}from"./useEvent-BhXAndur.js";import{t as ur}from"./react-Bj1aDYRI.js";import{Ur as dr,Yr as cr,b as fr,ei as hr,mn as mr,ti as ie,y as pr,__tla as gr}from"./cells-DPp5cDaO.js";import{t as Ft}from"./compiler-runtime-B3qBwwSJ.js";import{t as yr}from"./get-6uJrSKbw.js";import{t as br}from"./assertNever-CBU83Y6o.js";import{t as wr}from"./debounce-B3mjKxHe.js";import{t as vr}from"./_baseSet-5Rdwpmr3.js";import{d as g,p as R}from"./hotkeys-BHHWjLlp.js";import{t as xr}from"./invariant-CAG_dYON.js";import{S as Er}from"./utils-YqBXNpsM.js";import{S as _r,n as Cr}from"./config-Q0O7_stz.js";import{a as Rr}from"./switch-dWLWbbtg.js";import{n as Mt}from"./globals-BgACvYmr.js";import{t as Nt}from"./ErrorBoundary-B9Ifj8Jf.js";import{t as Sr}from"./jsx-runtime-ZmTK25f3.js";import{t as kr}from"./button-CZ3Cs4qb.js";import{t as Fr}from"./cn-BKtXLv3a.js";import{J as Pe,Y as Mr,Z as Nr,__tla as qr}from"./JsonOutput-PE5ko4gi.js";import{t as Pr}from"./createReducer-B3rBsy4P.js";import{t as je}from"./requests-B4FYHTZl.js";import{t as qt}from"./createLucideIcon-BCdY6lG5.js";import{t as jr}from"./x-ZP5cObgf.js";import{a as Pt,l as Lr,r as jt}from"./markdown-renderer-DJy8ww5d.js";import{t as Ar}from"./DeferredRequestRegistry-CMf25YiV.js";import{t as Ir}from"./preload-helper-D2MJg03u.js";import{t as Lt}from"./Deferred-DxQeE5uh.js";import{t as At}from"./uuid-DXdzqzcr.js";import{t as Tr}from"./use-toast-BDYuj3zG.js";import{t as It}from"./tooltip-CMQz28hC.js";import{t as Tt}from"./mode-Bn7pdJvO.js";import{n as Ur,r as Wr,t as Or}from"./share-ipf2hrOh.js";import{t as zr}from"./blob-D-eV0cU3.js";import{r as Dr,t as Br}from"./react-resizable-panels.browser.esm-Da3ksQXL.js";import{t as Ut}from"./toggle-zVW4FXNz.js";let Le,Wt,Ae,Ot,Ie,Te,zt,Ue,We,Dt,Bt,Ht,$t,we,Vt,Oe,ze,Xt,Yt,Qt,Gt,De,Jt,Be,Kt,He,ae,Zt,en,tn,nn,$e,ve,xe,Ve,Xe,Ye,rn,sn,an,Qe,Ge,Je,oe,on,ln,un,dn,cn,le,fn,Ke,hn,J,Ze,Ee,ue,mn,_e,pn,gn,yn,bn,Hr=Promise.all([(()=>{try{return gr}catch{}})(),(()=>{try{return qr}catch{}})()]).then(async()=>{var X,pe,xn,xt,U,Y,I,Et,O,_t,W,ne,K,Ce,Ct,Rt,ge,z,D,Z,M,Q,B,En,_n,Cn,ye;function y(t,e,n){return t==null?t:vr(t,e,n)}let b,_;oe=y,b=qt("crosshair",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12",key:"l9bcsi"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12",key:"13hhkx"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2",key:"10w3f3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18",key:"15g9kq"}]]),_=qt("pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]);function de(t){return{all:t||(t=new Map),on:function(e,n){var r=t.get(e);r?r.push(n):t.set(e,[n])},off:function(e,n){var r=t.get(e);r&&(n?r.splice(r.indexOf(n)>>>0,1):t.set(e,[]))},emit:function(e,n){var r=t.get(e);r&&r.slice().map(function(s){s(n)}),(r=t.get("*"))&&r.slice().map(function(s){s(e,n)})}}}var c=kt(ur(),1),Re=(0,c.createContext)(null),Rn=t=>{let{controller:e}=(0,c.useContext)(Re),n=c.useRef(Symbol("fill"));return(0,c.useEffect)(()=>(e.mount({name:t.name,ref:n.current,children:t.children}),()=>{e.unmount({name:t.name,ref:n.current})}),[]),(0,c.useEffect)(()=>{e.update({name:t.name,ref:n.current,children:t.children})}),null},Sn=Object.defineProperty,kn=(t,e,n)=>e in t?Sn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,tt=(t,e,n)=>(kn(t,typeof e=="symbol"?e:e+"",n),n),nt=console,Fn=class{constructor(t){tt(this,"_bus"),tt(this,"_db"),this._bus=t,this.handleFillMount=this.handleFillMount.bind(this),this.handleFillUpdated=this.handleFillUpdated.bind(this),this.handleFillUnmount=this.handleFillUnmount.bind(this),this._db={byName:new Map,byFill:new Map}}mount(){this._bus.on("fill-mount",this.handleFillMount),this._bus.on("fill-updated",this.handleFillUpdated),this._bus.on("fill-unmount",this.handleFillUnmount)}unmount(){this._bus.off("fill-mount",this.handleFillMount),this._bus.off("fill-updated",this.handleFillUpdated),this._bus.off("fill-unmount",this.handleFillUnmount)}handleFillMount({fill:t}){let e=c.Children.toArray(t.children),n=t.name,r={fill:t,children:e,name:n},s=this._db.byName.get(n);s?(s.components.push(r),s.listeners.forEach(i=>i([...s.components]))):this._db.byName.set(n,{listeners:[],components:[r]}),this._db.byFill.set(t.ref,r)}handleFillUpdated({fill:t}){let e=this._db.byFill.get(t.ref),n=c.Children.toArray(t.children);if(e){e.children=n;let r=this._db.byName.get(e.name);if(r)r.listeners.forEach(s=>s([...r.components]));else throw Error("registration was expected to be defined")}else{nt.error("[handleFillUpdated] component was expected to be defined");return}}handleFillUnmount({fill:t}){let e=this._db.byFill.get(t.ref);if(!e){nt.error("[handleFillUnmount] component was expected to be defined");return}let n=e.name,r=this._db.byName.get(n);if(!r)throw Error("registration was expected to be defined");r.components=r.components.filter(s=>s!==e),this._db.byFill.delete(t.ref),r.listeners.length===0&&r.components.length===0?this._db.byName.delete(n):r.listeners.forEach(s=>s([...r.components]))}onComponentsChange(t,e){let n=this._db.byName.get(t);n?(n.listeners.push(e),e(n.components)):(this._db.byName.set(t,{listeners:[e],components:[]}),e([]))}getFillsByName(t){let e=this._db.byName.get(t);return e?e.components.map(n=>n.fill):[]}getChildrenByName(t){let e=this._db.byName.get(t);return e?e.components.map(n=>n.children).reduce((n,r)=>n.concat(r),[]):[]}removeOnComponentsChange(t,e){let n=this._db.byName.get(t);if(!n)throw Error("expected registration to be defined");let r=n.listeners;r.splice(r.indexOf(e),1)}},Mn=Object.defineProperty,Nn=(t,e,n)=>e in t?Mn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,qn=(t,e,n)=>(Nn(t,typeof e=="symbol"?e:e+"",n),n),rt=class{constructor(){qn(this,"bus",de())}mount(t){this.bus.emit("fill-mount",{fill:t})}unmount(t){this.bus.emit("fill-unmount",{fill:t})}update(t){this.bus.emit("fill-updated",{fill:t})}};function Pn(t){let e=t||new rt;return{controller:e,manager:new Fn(e.bus)}}cn=({controller:t,children:e})=>{let[n]=c.useState(()=>{let r=Pn(t);return r.manager.mount(),r});return c.useEffect(()=>()=>{n.manager.unmount()},[]),c.createElement(Re.Provider,{value:n},e)},ve=function(t,e){let[n,r]=(0,c.useState)([]),{manager:s}=(0,c.useContext)(Re);return(0,c.useEffect)(()=>(s.onComponentsChange(t,r),()=>{s.removeOnComponentsChange(t,r)}),[t]),n.flatMap((i,d)=>{let{children:u}=i;return u.map((p,w)=>{if(typeof p=="number"||typeof p=="string")throw Error("Only element children will work here");return c.cloneElement(p,{key:d.toString()+w.toString(),...e})})})},Ze=t=>{let e=ve(t.name,t.childProps);if(typeof t.children=="function"){let n=t.children(e);if(c.isValidElement(n)||n===null)return n;throw Error("Slot rendered with function must return a valid React Element.")}return e},hn=V(null);var{valueAtom:jn,useActions:Ln}=Pr(()=>({banners:[]}),{addBanner:(t,e)=>({...t,banners:[...t.banners,{...e,id:At()}]}),removeBanner:(t,e)=>({...t,banners:t.banners.filter(n=>n.id!==e)}),clearBanners:t=>({...t,banners:[]})});an=()=>lr(jn),tn=function(){return Ln()},un=new rt,ue={SIDEBAR:"sidebar",CONTEXT_AWARE_PANEL:"context-aware-panel"};let st,it,at;st=class{constructor(){a(this,"subscriptions",new Map)}addSubscription(t,e){var n;this.subscriptions.has(t)||this.subscriptions.set(t,new Set),(n=this.subscriptions.get(t))==null||n.add(e)}removeSubscription(t,e){var n;(n=this.subscriptions.get(t))==null||n.delete(e)}notify(t,e){for(let n of this.subscriptions.get(t)??[])n(e)}},Ve=class et{constructor(e){a(this,"subscriptions",new st);this.producer=e}static withProducerCallback(e){return new et(e)}static empty(){return new et}startProducer(){this.producer&&this.producer(e=>{this.subscriptions.notify("message",e)})}connect(){return new Promise(e=>setTimeout(e,0)).then(()=>{this.subscriptions.notify("open",new Event("open"))})}get readyState(){return WebSocket.OPEN}reconnect(e,n){this.close(),this.connect()}close(){this.subscriptions.notify("close",new Event("close"))}send(e){return this.subscriptions.notify("message",new MessageEvent("message",{data:e})),Promise.resolve()}addEventListener(e,n){this.subscriptions.addSubscription(e,n),e==="open"&&n(new Event("open")),e==="message"&&this.startProducer()}removeEventListener(e,n){this.subscriptions.removeSubscription(e,n)}},it=1e10,at=1e3;function ce(t,e){let n=t.map(r=>`"${r}"`).join(", ");return Error(`This RPC instance cannot ${e} because the transport did not provide one or more of these methods: ${n}`)}function An(t={}){let e={};function n(o){e=o}let r={};function s(o){var m;r.unregisterHandler&&r.unregisterHandler(),r=o,(m=r.registerHandler)==null||m.call(r,se)}let i;function d(o){if(typeof o=="function"){i=o;return}i=(m,x)=>{let f=o[m];if(f)return f(x);let v=o._;if(!v)throw Error(`The requested method has no handler: ${m}`);return v(m,x)}}let{maxRequestTime:u=at}=t;t.transport&&s(t.transport),t.requestHandler&&d(t.requestHandler),t._debugHooks&&n(t._debugHooks);let p=0;function w(){return p<=it?++p:p=0}let C=new Map,E=new Map;function N(o,...m){let x=m[0];return new Promise((f,v)=>{var te;if(!r.send)throw ce(["send"],"make requests");let T=w(),G={type:"request",id:T,method:o,params:x};C.set(T,{resolve:f,reject:v}),u!==1/0&&E.set(T,setTimeout(()=>{E.delete(T),v(Error("RPC request timed out."))},u)),(te=e.onSend)==null||te.call(e,G),r.send(G)})}let q=new Proxy(N,{get:(o,m,x)=>m in o?Reflect.get(o,m,x):f=>N(m,f)}),P=q;function j(o,...m){var v;let x=m[0];if(!r.send)throw ce(["send"],"send messages");let f={type:"message",id:o,payload:x};(v=e.onSend)==null||v.call(e,f),r.send(f)}let L=new Proxy(j,{get:(o,m,x)=>m in o?Reflect.get(o,m,x):f=>j(m,f)}),S=L,A=new Map,H=new Set;function ee(o,m){var x;if(!r.registerHandler)throw ce(["registerHandler"],"register message listeners");if(o==="*"){H.add(m);return}A.has(o)||A.set(o,new Set),(x=A.get(o))==null||x.add(m)}function re(o,m){var x,f;if(o==="*"){H.delete(m);return}(x=A.get(o))==null||x.delete(m),((f=A.get(o))==null?void 0:f.size)===0&&A.delete(o)}async function se(o){var m,x;if((m=e.onReceive)==null||m.call(e,o),!("type"in o))throw Error("Message does not contain a type.");if(o.type==="request"){if(!r.send||!i)throw ce(["send","requestHandler"],"handle requests");let{id:f,method:v,params:T}=o,G;try{G={type:"response",id:f,success:!0,payload:await i(v,T)}}catch(te){if(!(te instanceof Error))throw te;G={type:"response",id:f,success:!1,error:te.message}}(x=e.onSend)==null||x.call(e,G),r.send(G);return}if(o.type==="response"){let f=E.get(o.id);f!=null&&clearTimeout(f);let{resolve:v,reject:T}=C.get(o.id)??{};o.success?v==null||v(o.payload):T==null||T(Error(o.error));return}if(o.type==="message"){for(let v of H)v(o.id,o.payload);let f=A.get(o.id);if(!f)return;for(let v of f)v(o.payload);return}throw Error(`Unexpected RPC message type: ${o.type}`)}return{setTransport:s,setRequestHandler:d,request:q,requestProxy:P,send:L,sendProxy:S,addMessageListener:ee,removeMessageListener:re,proxy:{send:S,request:P},_setDebugHooks:n}}function In(t){return An(t)}var ot="[transport-id]";function Tn(t,e){let{transportId:n}=e;return n==null?t:{[ot]:n,data:t}}function Un(t,e){let{transportId:n,filter:r}=e,s=r==null?void 0:r();if(n!=null&&s!=null)throw Error("Cannot use both `transportId` and `filter` at the same time");let i=t;if(n){if(t[ot]!==n)return[!0];i=t.data}return s===!1?[!0]:[!1,i]}function Wn(t,e={}){let{transportId:n,filter:r,remotePort:s}=e,i=t,d=s??t,u;return{send(p){d.postMessage(Tn(p,{transportId:n}))},registerHandler(p){u=w=>{let C=w.data,[E,N]=Un(C,{transportId:n,filter:()=>r==null?void 0:r(w)});E||p(N)},i.addEventListener("message",u)},unregisterHandler(){u&&i.removeEventListener("message",u)}}}function On(t,e){return Wn(t,e)}function lt(t){return In({transport:On(t,{transportId:"marimo-transport"}),maxRequestTime:2e4,_debugHooks:{onSend:e=>{g.debug("[rpc] Parent -> Worker",e)},onReceive:e=>{g.debug("[rpc] Worker -> Parent",e)}}})}Le=V("Initializing..."),Xt=V(t=>{let e=t(pr),n=Object.values(e.cellRuntime);return n.some(r=>!Lr(r.output))?!0:n.every(r=>r.status==="idle")});var ut=Ur(),dt="marimo:file",ct=new dr(null);const zn={saveFile(t){ct.set(dt,t)},readFile(){return ct.get(dt)}};var Dn={saveFile(t){ie.setCodeForHash((0,ut.compressToEncodedURIComponent)(t))},readFile(){let t=ie.getCodeFromHash()||ie.getCodeFromSearchParam();return t?(0,ut.decompressFromEncodedURIComponent)(t):null}};const Bn={saveFile(t){},readFile(){let t=document.querySelector("marimo-code");return t?decodeURIComponent(t.textContent||"").trim():null}};var Hn={saveFile(t){},readFile(){if(window.location.hostname!=="marimo.app")return null;let t=new URL("files/wasm-intro.py",document.baseURI);return fetch(t.toString()).then(e=>e.ok?e.text():null).catch(()=>null)}},$n={saveFile(t){},readFile(){return["import marimo","app = marimo.App()","","@app.cell","def __():"," return","",'if __name__ == "__main__":'," app.run()"].join(`
`)}},ft=class{constructor(t){this.stores=t}insert(t,e){this.stores.splice(t,0,e)}saveFile(t){this.stores.forEach(e=>e.saveFile(t))}readFile(){for(let t of this.stores){let e=t.readFile();if(e)return e}return null}};let fe;ae=new ft([Bn,Dn]),fe=new ft([zn,Hn,$n]),He=class wn{constructor(){a(this,"initialized",new Lt);a(this,"sendRename",async({filename:e})=>(e===null||(ie.setFilename(e),await this.rpc.proxy.request.bridge({functionName:"rename_file",payload:e})),null));a(this,"sendSave",async e=>{if(!this.saveRpc)return g.warn("Save RPC not initialized"),null;await this.saveRpc.saveNotebook(e);let n=await this.readCode();return n.contents&&(ae.saveFile(n.contents),fe.saveFile(n.contents)),this.rpc.proxy.request.saveNotebook(e).catch(r=>{g.error(r)}),null});a(this,"sendCopy",async()=>{R()});a(this,"sendStdin",async e=>(await this.rpc.proxy.request.bridge({functionName:"put_input",payload:e.text}),null));a(this,"sendPdb",async()=>{R()});a(this,"sendRun",async e=>(await this.rpc.proxy.request.loadPackages(e.codes.join(`
`)),await this.putControlRequest({type:"execute-cells",...e}),null));a(this,"sendRunScratchpad",async e=>(await this.rpc.proxy.request.loadPackages(e.code),await this.putControlRequest({type:"execute-scratchpad",...e}),null));a(this,"sendInterrupt",async()=>(this.interruptBuffer!==void 0&&(this.interruptBuffer[0]=2),null));a(this,"sendShutdown",async()=>(window.close(),null));a(this,"sendFormat",async e=>await this.rpc.proxy.request.bridge({functionName:"format",payload:e}));a(this,"sendDeleteCell",async e=>(await this.putControlRequest({type:"delete-cell",...e}),null));a(this,"sendInstallMissingPackages",async e=>(this.putControlRequest({type:"install-packages",...e}),null));a(this,"sendCodeCompletionRequest",async e=>(qe.get(fr)||await this.rpc.proxy.request.bridge({functionName:"code_complete",payload:e}),null));a(this,"saveUserConfig",async e=>(await this.rpc.proxy.request.bridge({functionName:"save_user_config",payload:e}),Rr.post("/kernel/save_user_config",e,{baseUrl:"/"}).catch(n=>(g.error(n),null))));a(this,"saveAppConfig",async e=>(await this.rpc.proxy.request.bridge({functionName:"save_app_config",payload:e}),null));a(this,"saveCellConfig",async e=>(await this.putControlRequest({type:"update-cell-config",...e}),null));a(this,"sendRestart",async()=>{let e=await this.readCode();return e.contents&&(ae.saveFile(e.contents),fe.saveFile(e.contents)),Wr(),null});a(this,"readCode",async()=>this.saveRpc?{contents:await this.saveRpc.readNotebook()}:(g.warn("Save RPC not initialized"),{contents:""}));a(this,"readSnippets",async()=>await this.rpc.proxy.request.bridge({functionName:"read_snippets",payload:void 0}));a(this,"openFile",async({path:e})=>{let n=Or({code:null,baseUrl:window.location.origin});return window.open(n,"_blank"),null});a(this,"sendListFiles",async e=>await this.rpc.proxy.request.bridge({functionName:"list_files",payload:e}));a(this,"sendSearchFiles",async e=>await this.rpc.proxy.request.bridge({functionName:"search_files",payload:e}));a(this,"sendComponentValues",async e=>(await this.putControlRequest({type:"update-ui-element",...e,token:At()}),null));a(this,"sendInstantiate",async e=>null);a(this,"sendFunctionRequest",async e=>(await this.putControlRequest({type:"invoke-function",...e}),null));a(this,"sendCreateFileOrFolder",async e=>await this.rpc.proxy.request.bridge({functionName:"create_file_or_directory",payload:e}));a(this,"sendDeleteFileOrFolder",async e=>await this.rpc.proxy.request.bridge({functionName:"delete_file_or_directory",payload:e}));a(this,"sendRenameFileOrFolder",async e=>await this.rpc.proxy.request.bridge({functionName:"move_file_or_directory",payload:e}));a(this,"sendUpdateFile",async e=>await this.rpc.proxy.request.bridge({functionName:"update_file",payload:e}));a(this,"sendFileDetails",async e=>await this.rpc.proxy.request.bridge({functionName:"file_details",payload:e}));a(this,"exportAsHTML",async e=>await this.rpc.proxy.request.bridge({functionName:"export_html",payload:e}));a(this,"exportAsMarkdown",async e=>await this.rpc.proxy.request.bridge({functionName:"export_markdown",payload:e}));a(this,"previewDatasetColumn",async e=>(await this.putControlRequest({type:"preview-dataset-column",...e}),null));a(this,"previewSQLTable",async e=>(await this.putControlRequest({type:"preview-sql-table",...e}),null));a(this,"previewSQLTableList",async e=>(await this.putControlRequest({type:"list-sql-tables",...e}),null));a(this,"previewDataSourceConnection",async e=>(await this.putControlRequest({type:"list-data-source-connection",...e}),null));a(this,"validateSQL",async e=>(await this.putControlRequest({type:"validate-sql",...e}),null));a(this,"sendModelValue",async e=>(await this.putControlRequest({type:"model",...e}),null));a(this,"syncCellIds",()=>Promise.resolve(null));a(this,"addPackage",async e=>this.rpc.proxy.request.addPackage(e));a(this,"removePackage",async e=>this.rpc.proxy.request.removePackage(e));a(this,"getPackageList",async()=>await this.rpc.proxy.request.listPackages());a(this,"getDependencyTree",async()=>({tree:{dependencies:[],name:"",tags:[],version:null}}));a(this,"listSecretKeys",async e=>(await this.putControlRequest({type:"list-secret-keys",...e}),null));a(this,"getUsageStats",R);a(this,"openTutorial",R);a(this,"getRecentFiles",R);a(this,"getWorkspaceFiles",R);a(this,"getRunningNotebooks",R);a(this,"shutdownSession",R);a(this,"exportAsPDF",R);a(this,"autoExportAsHTML",R);a(this,"autoExportAsMarkdown",R);a(this,"autoExportAsIPYNB",R);a(this,"updateCellOutputs",R);a(this,"writeSecret",R);a(this,"invokeAiTool",R);a(this,"clearCache",R);a(this,"getCacheInfo",R);_r()&&(this.rpc=lt(new Worker(new URL(""+new URL("worker-BPV9SmHz.js",import.meta.url).href,""+import.meta.url),{type:"module",name:Mt()})),this.rpc.addMessageListener("ready",()=>{this.startSession()}),this.rpc.addMessageListener("initialized",()=>{this.saveRpc=this.getSaveWorker(),this.setInterruptBuffer(),this.initialized.resolve()}),this.rpc.addMessageListener("initializingMessage",({message:e})=>{qe.set(Le,e)}),this.rpc.addMessageListener("initializedError",({error:e})=>{this.initialized.status==="resolved"&&(g.error(e),Tr({title:"Error initializing",description:e,variant:"danger"})),this.initialized.reject(Error(e))}),this.rpc.addMessageListener("kernelMessage",({message:e})=>{var n;(n=this.messageConsumer)==null||n.call(this,new MessageEvent("message",{data:e}))}))}static get INSTANCE(){let e="_marimo_private_PyodideBridge";return window[e]||(window[e]=new wn),window[e]}getSaveWorker(){return Tt()==="read"?(g.debug("Skipping SaveWorker in read-mode"),{readFile:R,readNotebook:R,saveNotebook:R}):lt(new Worker(new URL(""+new URL("save-worker-CtJsIYIM.js",import.meta.url).href,""+import.meta.url),{type:"module",name:Mt()})).proxy.request}async startSession(){let e=await ae.readFile(),n=await fe.readFile(),r=ie.getFilename(),s=qe.get(Er),i={},d=new URLSearchParams(window.location.search);for(let u of d.keys()){let p=d.getAll(u);i[u]=p.length===1?p[0]:p}await this.rpc.proxy.request.startSession({queryParameters:i,code:e||n||"",filename:r,userConfig:{...s,runtime:{...s.runtime,auto_instantiate:Tt()==="read"?!0:s.runtime.auto_instantiate}}})}setInterruptBuffer(){crossOriginIsolated?(this.interruptBuffer=new Uint8Array(new SharedArrayBuffer(1)),this.rpc.proxy.request.setInterruptBuffer(this.interruptBuffer)):g.warn("Not running in a secure context; interrupts are not available.")}attachMessageConsumer(e){this.messageConsumer=e,this.rpc.proxy.send.consumerReady({})}async putControlRequest(e){await this.rpc.proxy.request.bridge({functionName:"put_control_request",payload:e})}},Kt=function(){return Ve.withProducerCallback(t=>{He.INSTANCE.attachMessageConsumer(t)})},fn=function(t=Pe()){let e=window.fetch;return window.fetch=async(n,r)=>{let s=n instanceof Request?n.url:n.toString();if(s.startsWith("data:"))return e(n,r);try{let i=he(s,t);if(i){let d=await(await e(i)).arrayBuffer();return new Response(d,{headers:{"Content-Type":Vn(s)}})}return e(n,r)}catch(i){return g.error("Error parsing URL",i),e(n,r)}},()=>{window.fetch=e}};function Vn(t){return t.endsWith(".csv")?"text/csv":t.endsWith(".json")?"application/json":t.endsWith(".txt")?"text/plain":"application/octet-stream"}Bt=function(t,e=Pe()){let n=t.http.bind(t),r=t.load.bind(t);return t.http=async s=>{let i=he(s,e);if(i)return await window.fetch(i).then(d=>d.text());try{return await n(s)}catch(d){if(s.startsWith("data:"))return await window.fetch(s).then(u=>u.text());throw d}},t.load=async s=>{let i=he(s,e);if(i)return await window.fetch(i).then(d=>d.text());try{return await r(s)}catch(d){if(s.startsWith("data:"))return await window.fetch(s).then(u=>u.text());throw d}},()=>{t.http=n,t.load=r}};function ht(t){return t.startsWith(".")?t.slice(1):t}function Xn(t,e=Pe()){let n=he(t,e);if(!n)return t;let r=zr(n);return URL.createObjectURL(r)}function he(t,e){let n=document.baseURI;n.startsWith("blob:")&&(n=n.replace("blob:",""));let r=new URL(t,n).pathname,s=mt(t),i=mt(r);return e[t]||e[ht(t)]||e[r]||e[ht(r)]||s&&e[s]||i&&e[i]}function mt(t){let e=t.indexOf("/@file/");return e===-1?null:t.slice(e)}function me(t){return()=>({TYPE:t,is(e){return e.type===t},create(e){return new CustomEvent(t,e)}})}De=me("marimo-value-input")(),Ue=me("marimo-value-update")(),Be=me("marimo-value-ready")(),We=me("marimo-incoming-message")(),Ht=function(t,e){return De.create({bubbles:!0,composed:!0,detail:{value:t,element:e}})},Ae=class vn{static get INSTANCE(){let e="_marimo_private_UIElementRegistry";return window[e]||(window[e]=new vn),window[e]}constructor(){this.entries=new Map}has(e){return this.entries.has(e)}set(e,n){this.entries.has(e)&&g.debug("UIElementRegistry overwriting entry for objectId.",e),this.entries.set(e,{objectId:e,value:n,elements:new Set})}registerInstance(e,n){let r=this.entries.get(e);r===void 0?this.entries.set(e,{objectId:e,value:hr(n,this),elements:new Set([n])}):r.elements.add(n)}removeInstance(e,n){let r=this.entries.get(e);r!=null&&r.elements.has(n)&&r.elements.delete(n)}removeElementsByCell(e){[...this.entries.keys()].filter(n=>n.startsWith(`${e}-`)).forEach(n=>{this.entries.delete(n)})}lookupValue(e){let n=this.entries.get(e);return n===void 0?void 0:n.value}broadcastMessage(e,n,r){let s=this.entries.get(e);s===void 0?g.warn("UIElementRegistry missing entry",e):s.elements.forEach(i=>{i.dispatchEvent(We.create({bubbles:!1,composed:!0,detail:{objectId:e,message:n,buffers:r}}))})}broadcastValueUpdate(e,n,r){let s=this.entries.get(n);s===void 0?g.warn("UIElementRegistry missing entry",n):(s.value=r,s.elements.forEach(i=>{i!==e&&i.dispatchEvent(Ue.create({bubbles:!1,composed:!0,detail:{value:r,element:i}}))}),document.dispatchEvent(Be.create({bubbles:!0,composed:!0,detail:{objectId:n}})))}},Jt=Ae.INSTANCE,bn=new Ar("function-call-result",async(t,e)=>{await je().sendFunctionRequest({functionCallId:t,...e})}),Dt="68px";var Yn="288px";$t=t=>t?/^\d+$/.test(t)?`${t}px`:t:Yn,Yt=cr({isOpen:!0},(t,e)=>{if(!e)return t;switch(e.type){case"toggle":return{...t,isOpen:e.isOpen??t.isOpen};case"setWidth":return{...t,width:e.width};default:return t}});function Se(t,e=[]){let n=[];if(t instanceof DataView)n.push(e);else if(Array.isArray(t))for(let[r,s]of t.entries())n.push(...Se(s,[...e,r]));else if(typeof t=="object"&&t)for(let[r,s]of Object.entries(t))n.push(...Se(s,[...e,r]));return n}function Qn(t){let e=Se(t);if(e.length===0)return{state:t,buffers:[],bufferPaths:[]};let n=structuredClone(t),r=[],s=[];for(let i of e){let d=yr(t,i);if(d instanceof DataView){let u=Pt(d);r.push(u),s.push(i),oe(n,i,u)}}return{state:n,buffers:r,bufferPaths:s}}function pt(t){let{state:e,bufferPaths:n,buffers:r}=t;if(!n||n.length===0)return e;r&&xr(r.length===n.length,"Buffers and buffer paths not the same length");let s=e;for(let[i,d]of n.entries()){let u=r==null?void 0:r[i];if(u==null){g.warn("[anywidget] Could not find buffer at path",d);continue}typeof u=="string"?oe(s,d,jt(u)):oe(s,d,u)}return s}const gt={invoke:async()=>{let t="anywidget.invoke not supported in marimo. Please file an issue at https://github.com/marimo-team/marimo/issues";throw g.warn(t),Error(t)}};function Gn(t){if(typeof AbortSignal.any=="function")return AbortSignal.any(t);let e=new AbortController;for(let n of t){if(n.aborted)return e.abort(n.reason),e.signal;n.addEventListener("abort",()=>e.abort(n.reason),{once:!0})}return e.signal}var Jn=(xt=class{constructor(){k(this,pe);k(this,X,new Map)}getModule(t,e){let n=l(this,X).get(e);if(n)return n;let r=$(this,pe,xn).call(this,t).catch(s=>{throw l(this,X).delete(e),s});return l(this,X).set(e,r),r}invalidate(t){g.debug(`[WidgetDefRegistry] Invalidating module cache for hash=${t}`),l(this,X).delete(t)}},X=new WeakMap,pe=new WeakSet,xn=async function(t){let e=Cr(t).toString();return Mr()&&(e=Xn(e)),Ir(()=>import(e).then(async n=>(await n.__tla,n)),[],import.meta.url)},xt),Kn=(Et=class{constructor(){k(this,U);k(this,Y);k(this,I)}async bind(t,e){var i,d;if(l(this,I)&&l(this,Y)===t)return l(this,I);l(this,I)&&l(this,Y)!==t&&(g.debug("[WidgetBinding] Hot-reload detected, aborting previous binding"),(i=l(this,U))==null||i.abort(),F(this,U,void 0),F(this,I,void 0)),F(this,Y,t),F(this,U,new AbortController);let n=l(this,U).signal,r=typeof t=="function"?await t():t,s=await((d=r.initialize)==null?void 0:d.call(r,{model:e,experimental:gt}));return s&&n.addEventListener("abort",s),F(this,I,async(u,p)=>{var C;let w=await((C=r.render)==null?void 0:C.call(r,{model:e,el:u,experimental:gt}));w&&Gn([p,n]).addEventListener("abort",()=>{let E=p.aborted?"view unmount":"binding destroyed";g.debug(`[WidgetBinding] Render cleanup triggered (reason: ${E})`),w()})}),l(this,I)}destroy(){var t;g.debug("[WidgetBinding] Destroying binding, aborting initialize lifecycle"),(t=l(this,U))==null||t.abort(),F(this,U,void 0),F(this,Y,void 0),F(this,I,void 0)}},U=new WeakMap,Y=new WeakMap,I=new WeakMap,Et),Zn=(_t=class{constructor(){k(this,O,new Map)}getOrCreate(t){let e=l(this,O).get(t);return e||(e=new Kn,l(this,O).set(t,e)),e}destroy(t){let e=l(this,O).get(t);e&&(g.debug(`[BindingManager] Destroying binding for model=${t}`),e.destroy(),l(this,O).delete(t))}has(t){return l(this,O).has(t)}},O=new WeakMap,_t);zt=new Jn,ze=new Zn;var er=(Ct=class{constructor(t=1e4){k(this,K);k(this,W,new Map);k(this,ne);F(this,ne,t)}get(t){let e=$(this,K,Ce).call(this,t);return e.deferred.status==="pending"&&setTimeout(()=>{e.deferred.status==="pending"&&(e.deferred.reject(Error(`Model not found for key: ${t}`)),l(this,W).delete(t))},l(this,ne)),e.deferred.promise}create(t,e){let n=$(this,K,Ce).call(this,t);n.deferred.resolve(e(n.controller.signal))}set(t,e){$(this,K,Ce).call(this,t).deferred.resolve(e)}getSync(t){let e=l(this,W).get(t);if(e&&e.deferred.status==="resolved")return e.deferred.value}delete(t){var e;g.debug(`[ModelManager] Deleting model=${t}, aborting lifecycle signal`),(e=l(this,W).get(t))==null||e.controller.abort(),l(this,W).delete(t)}},W=new WeakMap,ne=new WeakMap,K=new WeakSet,Ce=function(t){let e=l(this,W).get(t);return e||(e={deferred:new Lt,controller:new AbortController},l(this,W).set(t,e)),e},Ct),yt=Symbol("marimo");function ke(t){return t[yt]}we=new er;var tr=(Rt=yt,Q=class{constructor(e,n,r){k(this,B);k(this,ge,"change");k(this,z);k(this,D);k(this,Z);k(this,M,{});a(this,Rt,{updateAndEmitDiffs:e=>$(this,B,_n).call(this,e),emitCustomMessage:(e,n)=>$(this,B,Cn).call(this,e,n)});a(this,"widget_manager",{async get_model(e){let n=await Q._modelManager.get(e);if(!n)throw Error(`Model not found with id: ${e}. This is likely because the model was not registered.`);return n}});k(this,ye,wr(()=>{let e=l(this,M)[l(this,ge)];if(e)for(let n of e)try{n()}catch(r){g.error("Error emitting event",r)}},0));F(this,D,e),F(this,Z,n),F(this,z,new Map),r&&r.addEventListener("abort",()=>{g.debug("[Model] Signal aborted, clearing all listeners"),F(this,M,{})})}off(e,n){var r;if(!e){F(this,M,{});return}if(!n){l(this,M)[e]=new Set;return}(r=l(this,M)[e])==null||r.delete(n)}send(e,n,r){let s=(r??[]).map(i=>i instanceof ArrayBuffer?new DataView(i):new DataView(i.buffer,i.byteOffset,i.byteLength));return l(this,Z).sendCustomMessage(e,s).then(()=>n==null?void 0:n())}get(e){return l(this,D)[e]}set(e,n){F(this,D,{...l(this,D),[e]:n}),l(this,z).set(e,n),$(this,B,En).call(this,`change:${e}`,n),l(this,ye).call(this)}save_changes(){if(l(this,z).size===0)return;let e=Object.fromEntries(l(this,z).entries());l(this,z).clear(),l(this,Z).sendUpdate(e)}on(e,n){l(this,M)[e]||(l(this,M)[e]=new Set),l(this,M)[e].add(n)}},ge=new WeakMap,z=new WeakMap,D=new WeakMap,Z=new WeakMap,M=new WeakMap,B=new WeakSet,En=function(e,n){if(!l(this,M)[e])return;let r=l(this,M)[e];for(let s of r)try{s(n)}catch(i){g.error("Error emitting event",i)}},_n=function(e){e!=null&&Object.keys(e).forEach(n=>{let r=n;l(this,D)[r]!==e[r]&&this.set(r,e[r])})},Cn=function(e,n=[]){let r=l(this,M)["msg:custom"];if(r)for(let s of r)try{s(e.content,n)}catch(i){g.error("Error emitting event",i)}},ye=new WeakMap,a(Q,"_modelManager",we),Q);Vt=async function(t,e){let n=e.model_id,r=e.message,s=("buffers"in r?r.buffers:[]).map(jt);switch(r.method){case"open":{let{state:i,buffer_paths:d=[]}=r,u=pt({state:i,bufferPaths:d,buffers:s}),p=t.getSync(n);if(p){ke(p).updateAndEmitDiffs(u);return}t.create(n,w=>new tr(u,{async sendUpdate(C){if(w.aborted){g.debug(`[Model] sendUpdate suppressed for model=${n} (signal aborted)`);return}let{state:E,buffers:N,bufferPaths:q}=Qn(C);await je().sendModelValue({modelId:n,message:{method:"update",state:E,bufferPaths:q},buffers:N})},async sendCustomMessage(C,E){if(w.aborted){g.debug(`[Model] sendCustomMessage suppressed for model=${n} (signal aborted)`);return}await je().sendModelValue({modelId:n,message:{method:"custom",content:C},buffers:E.map(Pt)})}},w));return}case"custom":ke(await t.get(n)).emitCustomMessage({method:"custom",content:r.content},s);return;case"close":ze.destroy(n),t.delete(n);return;case"update":{let{state:i,buffer_paths:d=[]}=r,u=pt({state:i,bufferPaths:d,buffers:s});ke(await t.get(n)).updateAndEmitDiffs(u);return}default:br(r)}},mr(we,"MODEL_MANAGER");let bt;Ge=V(null),Wt=V(null),Oe=V(!1),bt=V(!1),Qe=V(!1);var nr=Ft();Ie=t=>{let e=(0,nr.c)(8),{onResize:n,startingWidth:r,minWidth:s,maxWidth:i}=t,d=(0,c.useRef)(null),u=(0,c.useRef)(null),p=(0,c.useRef)(null),w,C;e[0]!==i||e[1]!==s||e[2]!==n?(w=()=>{let P=d.current,j=u.current,L=p.current;if(!P||!j&&!L)return;let S=Number.parseInt(window.getComputedStyle(P).width,10),A=0,H=!1,ee=null,re=f=>{if(!P||!H||!ee)return;let v=f.clientX-A;A=f.clientX,S=ee==="left"?S-v:S+v,s&&(S=Math.max(s,S)),i&&(S=Math.min(i,S)),P.style.width=`${S}px`},se=()=>{H&&(n==null||n(S),H=!1,ee=null),document.removeEventListener("mousemove",re),document.removeEventListener("mouseup",se)},o=(f,v)=>{f.preventDefault(),H=!0,ee=v,A=f.clientX,document.addEventListener("mousemove",re),document.addEventListener("mouseup",se)},m=f=>o(f,"left"),x=f=>o(f,"right");return j&&j.addEventListener("mousedown",m),L&&L.addEventListener("mousedown",x),()=>{j&&j.removeEventListener("mousedown",m),L&&L.removeEventListener("mousedown",x),document.removeEventListener("mousemove",re),document.removeEventListener("mouseup",se)}},C=[s,i,n],e[0]=i,e[1]=s,e[2]=n,e[3]=w,e[4]=C):(w=e[3],C=e[4]),(0,c.useEffect)(w,C);let E;e[5]===Symbol.for("react.memo_cache_sentinel")?(E={left:u,right:p},e[5]=E):E=e[5];let N=r==="contentWidth"?"var(--content-width-medium)":`${r}px`,q;return e[6]===N?q=e[7]:(q={resizableDivRef:d,handleRefs:E,style:{width:N}},e[6]=N,e[7]=q),q},Te=function(t){t||window.dispatchEvent(new Event("resize"))};var wt=Ft(),h=kt(Sr(),1);pn=()=>{let t=(0,wt.c)(16),[e,n]=be(Ge),[r,s]=be(Oe),[i,d]=be(bt),[u,p]=be(Qe),w;t[0]!==s||t[1]!==n?(w=()=>{n(null),s(!1)},t[0]=s,t[1]=n,t[2]=w):w=t[2];let C=w;if(ve(ue.CONTEXT_AWARE_PANEL).length===0||!e||!r)return null;let E;t[3]!==u||t[4]!==i||t[5]!==p||t[6]!==d?(E=()=>(0,h.jsxs)("div",{className:"flex flex-row items-center gap-3",children:[(0,h.jsx)(It,{content:i?"Unpin panel":"Pin panel",children:(0,h.jsx)(Ut,{size:"xs",onPressedChange:()=>d(!i),pressed:i,"aria-label":i?"Unpin panel":"Pin panel",children:i?(0,h.jsx)(_,{className:"w-4 h-4"}):(0,h.jsx)(Nr,{className:"w-4 h-4"})})}),(0,h.jsx)(It,{content:u?(0,h.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,h.jsx)("span",{children:"Follow focused table"}),(0,h.jsx)("span",{className:"text-xs text-muted-foreground w-64",children:"The panel updates as cells that output tables are focused. Click to fix to the current cell."})]}):(0,h.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,h.jsx)("span",{children:"Focus on current table"}),(0,h.jsx)("span",{className:"text-xs text-muted-foreground w-64",children:"The panel is focused on the current table. Click to update based on which cell is focused."})]}),children:(0,h.jsx)(Ut,{size:"xs",onPressedChange:()=>p(!u),pressed:u,"aria-label":u?"Follow focused cell":"Fixed",children:(0,h.jsx)(b,{className:Fr("w-4 h-4",u&&"text-primary")})})})]}),t[3]=u,t[4]=i,t[5]=p,t[6]=d,t[7]=E):E=t[7];let N=E,q;t[8]!==C||t[9]!==N?(q=()=>(0,h.jsxs)("div",{className:"mt-2 pb-7 mb-4 h-full overflow-auto",children:[(0,h.jsxs)("div",{className:"flex flex-row justify-between items-center mx-2",children:[N(),(0,h.jsx)(kr,{variant:"linkDestructive",size:"icon",onClick:C,"aria-label":"Close selection panel",children:(0,h.jsx)(jr,{className:"w-4 h-4"})})]}),(0,h.jsx)(Nt,{children:(0,h.jsx)(Ze,{name:ue.CONTEXT_AWARE_PANEL})})]}),t[8]=C,t[9]=N,t[10]=q):q=t[10];let P=q;if(!i){let S;return t[11]===P?S=t[12]:(S=(0,h.jsx)(rr,{children:P()}),t[11]=P,t[12]=S),S}let j;t[13]===Symbol.for("react.memo_cache_sentinel")?(j=(0,h.jsx)(Dr,{onDragging:Te,className:"resize-handle border-border z-20 print:hidden border-l"}),t[13]=j):j=t[13];let L;return t[14]===P?L=t[15]:(L=(0,h.jsxs)(h.Fragment,{children:[j,(0,h.jsx)(Br,{defaultSize:20,minSize:15,maxSize:80,children:P()})]}),t[14]=P,t[15]=L),L},Gt=t=>{let e=(0,wt.c)(2),{children:n}=t,r;return e[0]===n?r=e[1]:(r=(0,h.jsx)(Nt,{children:(0,h.jsx)(Rn,{name:ue.CONTEXT_AWARE_PANEL,children:n})}),e[0]=n,e[1]=r),r};var rr=({children:t})=>{let{resizableDivRef:e,handleRefs:n,style:r}=Ie({startingWidth:400,minWidth:300,maxWidth:1500});return(0,h.jsxs)("div",{className:"absolute z-40 right-0 h-full bg-background flex flex-row",children:[(0,h.jsx)("div",{ref:n.left,className:"w-1 h-full cursor-col-resize border-l"}),(0,h.jsx)("div",{ref:e,style:r,children:t})]})};rn=function(){var t=[...arguments];return(0,c.useMemo)(()=>e=>{t.forEach(n=>n(e))},t)},Ke=typeof window<"u"&&window.document!==void 0&&window.document.createElement!==void 0,le=function(t){let e=Object.prototype.toString.call(t);return e==="[object Window]"||e==="[object global]"},xe=function(t){return"nodeType"in t},J=function(t){var e;return t?le(t)?t:xe(t)?((e=t.ownerDocument)==null?void 0:e.defaultView)??window:window:window},$e=function(t){let{Document:e}=J(t);return t instanceof e},Je=function(t){return le(t)?!1:t instanceof J(t).HTMLElement},Xe=function(t){return t instanceof J(t).SVGElement},dn=function(t){return t?le(t)?t.document:xe(t)?$e(t)?t:Je(t)||Xe(t)?t.ownerDocument:document:document:document},_e=Ke?c.useLayoutEffect:c.useEffect,Ye=function(t){let e=(0,c.useRef)(t);return _e(()=>{e.current=t}),(0,c.useCallback)(function(){var n=[...arguments];return e.current==null?void 0:e.current(...n)},[])},Zt=function(){let t=(0,c.useRef)(null);return[(0,c.useCallback)((e,n)=>{t.current=setInterval(e,n)},[]),(0,c.useCallback)(()=>{t.current!==null&&(clearInterval(t.current),t.current=null)},[])]},yn=function(t,e){e===void 0&&(e=[t]);let n=(0,c.useRef)(t);return _e(()=>{n.current!==t&&(n.current=t)},e),n},nn=function(t,e){let n=(0,c.useRef)();return(0,c.useMemo)(()=>{let r=t(n.current);return n.current=r,r},[...e])},gn=function(t){let e=Ye(t),n=(0,c.useRef)(null);return[n,(0,c.useCallback)(r=>{r!==n.current&&(e==null||e(r,n.current)),n.current=r},[])]},Qt=function(t){let e=(0,c.useRef)();return(0,c.useEffect)(()=>{e.current=t},[t]),e.current};var Fe={};Ot=function(t,e){return(0,c.useMemo)(()=>{if(e)return e;let n=Fe[t]==null?0:Fe[t]+1;return Fe[t]=n,t+"-"+n},[t,e])};function vt(t){return function(e){return[...arguments].slice(1).reduce((n,r)=>{let s=Object.entries(r);for(let[i,d]of s){let u=n[i];u!=null&&(n[i]=u+t*d)}return n},{...e})}}ln=vt(1),on=vt(-1);function sr(t){return"clientX"in t&&"clientY"in t}mn=function(t){if(!t)return!1;let{KeyboardEvent:e}=J(t.target);return e&&t instanceof e};function ir(t){if(!t)return!1;let{TouchEvent:e}=J(t.target);return e&&t instanceof e}en=function(t){if(ir(t)){if(t.touches&&t.touches.length){let{clientX:e,clientY:n}=t.touches[0];return{x:e,y:n}}else if(t.changedTouches&&t.changedTouches.length){let{clientX:e,clientY:n}=t.changedTouches[0];return{x:e,y:n}}}return sr(t)?{x:t.clientX,y:t.clientY}:null};let Me;Ee=Object.freeze({Translate:{toString(t){if(!t)return;let{x:e,y:n}=t;return"translate3d("+(e?Math.round(e):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(t){if(!t)return;let{scaleX:e,scaleY:n}=t;return"scaleX("+e+") scaleY("+n+")"}},Transform:{toString(t){if(t)return[Ee.Translate.toString(t),Ee.Scale.toString(t)].join(" ")}},Transition:{toString(t){let{property:e,duration:n,easing:r}=t;return e+" "+n+"ms "+r}}}),Me="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]",sn=function(t){return t.matches(Me)?t:t.querySelector(Me)}});export{Le as $,Wt as A,Ae as B,Ot as C,Ie as D,Te as E,zt as F,Ue as G,We as H,Dt as I,Bt as J,Ht as K,$t as L,we as M,Vt as N,Oe as O,ze as P,Xt as Q,Yt as R,Qt as S,Gt as T,De as U,Jt as V,Be as W,Kt as X,He as Y,ae as Z,Zt as _,Hr as __tla,en as a,tn as at,nn as b,$e as c,ve as ct,xe as d,Ve as et,Xe as f,Ye as g,rn as h,sn as i,an as it,Qe as j,Ge as k,Je as l,oe as lt,on as m,ln as n,un as nt,dn as o,cn as ot,le as p,fn as q,Ke as r,hn as rt,J as s,Ze as st,Ee as t,ue as tt,mn as u,_e as v,pn as w,gn as x,yn as y,bn as z};
# Copyright 2026 Marimo. All rights reserved.
from __future__ import annotations
import subprocess
from collections.abc import Callable, Mapping, Sequence
from typing import (
IO,
Any,
Literal,
overload,
)
from marimo import _loggers
LOGGER = _loggers.marimo_logger()
# Type aliases matching typeshed's subprocess stubs
_CMD = str | bytes | Sequence[str | bytes]
_ENV = Mapping[str, str] | Mapping[bytes, bytes]
_FILE = int | IO[Any] | None
@overload
def safe_popen(
args: _CMD,
bufsize: int = ...,
executable: str | bytes | None = ...,
stdin: _FILE = ...,
stdout: _FILE = ...,
stderr: _FILE = ...,
preexec_fn: Callable[[], Any] | None = ...,
close_fds: bool = ...,
shell: bool = ...,
cwd: str | bytes | None = ...,
env: _ENV | None = ...,
universal_newlines: bool = ...,
startupinfo: Any = ...,
creationflags: int = ...,
restore_signals: bool = ...,
start_new_session: bool = ...,
pass_fds: Sequence[int] = ...,
*,
encoding: str,
errors: str | None = ...,
text: bool | None = ...,
user: str | int | None = ...,
group: str | int | None = ...,
extra_groups: Sequence[str | int] | None = ...,
umask: int = ...,
pipesize: int = ...,
) -> subprocess.Popen[str] | None: ...
@overload
def safe_popen(
args: _CMD,
bufsize: int = ...,
executable: str | bytes | None = ...,
stdin: _FILE = ...,
stdout: _FILE = ...,
stderr: _FILE = ...,
preexec_fn: Callable[[], Any] | None = ...,
close_fds: bool = ...,
shell: bool = ...,
cwd: str | bytes | None = ...,
env: _ENV | None = ...,
universal_newlines: bool = ...,
startupinfo: Any = ...,
creationflags: int = ...,
restore_signals: bool = ...,
start_new_session: bool = ...,
pass_fds: Sequence[int] = ...,
*,
encoding: str | None = ...,
errors: str,
text: bool | None = ...,
user: str | int | None = ...,
group: str | int | None = ...,
extra_groups: Sequence[str | int] | None = ...,
umask: int = ...,
pipesize: int = ...,
) -> subprocess.Popen[str] | None: ...
@overload
def safe_popen(
args: _CMD,
bufsize: int = ...,
executable: str | bytes | None = ...,
stdin: _FILE = ...,
stdout: _FILE = ...,
stderr: _FILE = ...,
preexec_fn: Callable[[], Any] | None = ...,
close_fds: bool = ...,
shell: bool = ...,
cwd: str | bytes | None = ...,
env: _ENV | None = ...,
*,
universal_newlines: Literal[True],
startupinfo: Any = ...,
creationflags: int = ...,
restore_signals: bool = ...,
start_new_session: bool = ...,
pass_fds: Sequence[int] = ...,
encoding: str | None = ...,
errors: str | None = ...,
text: bool | None = ...,
user: str | int | None = ...,
group: str | int | None = ...,
extra_groups: Sequence[str | int] | None = ...,
umask: int = ...,
pipesize: int = ...,
) -> subprocess.Popen[str] | None: ...
@overload
def safe_popen(
args: _CMD,
bufsize: int = ...,
executable: str | bytes | None = ...,
stdin: _FILE = ...,
stdout: _FILE = ...,
stderr: _FILE = ...,
preexec_fn: Callable[[], Any] | None = ...,
close_fds: bool = ...,
shell: bool = ...,
cwd: str | bytes | None = ...,
env: _ENV | None = ...,
universal_newlines: bool = ...,
startupinfo: Any = ...,
creationflags: int = ...,
restore_signals: bool = ...,
start_new_session: bool = ...,
pass_fds: Sequence[int] = ...,
*,
text: Literal[True],
encoding: str | None = ...,
errors: str | None = ...,
user: str | int | None = ...,
group: str | int | None = ...,
extra_groups: Sequence[str | int] | None = ...,
umask: int = ...,
pipesize: int = ...,
) -> subprocess.Popen[str] | None: ...
@overload
def safe_popen(
args: _CMD,
bufsize: int = ...,
executable: str | bytes | None = ...,
stdin: _FILE = ...,
stdout: _FILE = ...,
stderr: _FILE = ...,
preexec_fn: Callable[[], Any] | None = ...,
close_fds: bool = ...,
shell: bool = ...,
cwd: str | bytes | None = ...,
env: _ENV | None = ...,
universal_newlines: Literal[False] = ...,
startupinfo: Any = ...,
creationflags: int = ...,
restore_signals: bool = ...,
start_new_session: bool = ...,
pass_fds: Sequence[int] = ...,
*,
text: Literal[False, None] = ...,
encoding: None = ...,
errors: None = ...,
user: str | int | None = ...,
group: str | int | None = ...,
extra_groups: Sequence[str | int] | None = ...,
umask: int = ...,
pipesize: int = ...,
) -> subprocess.Popen[bytes] | None: ...
@overload
def safe_popen(
args: _CMD,
bufsize: int = ...,
executable: str | bytes | None = ...,
stdin: _FILE = ...,
stdout: _FILE = ...,
stderr: _FILE = ...,
preexec_fn: Callable[[], Any] | None = ...,
close_fds: bool = ...,
shell: bool = ...,
cwd: str | bytes | None = ...,
env: _ENV | None = ...,
universal_newlines: bool = ...,
startupinfo: Any = ...,
creationflags: int = ...,
restore_signals: bool = ...,
start_new_session: bool = ...,
pass_fds: Sequence[int] = ...,
*,
text: bool | None = ...,
encoding: str | None = ...,
errors: str | None = ...,
user: str | int | None = ...,
group: str | int | None = ...,
extra_groups: Sequence[str | int] | None = ...,
umask: int = ...,
pipesize: int = ...,
) -> subprocess.Popen[Any] | None: ...
def safe_popen(
args: _CMD,
bufsize: int = -1,
executable: str | bytes | None = None,
stdin: _FILE = None,
stdout: _FILE = None,
stderr: _FILE = None,
preexec_fn: Callable[[], Any] | None = None,
close_fds: bool = True,
shell: bool = False,
cwd: str | bytes | None = None,
env: _ENV | None = None,
universal_newlines: bool = False,
startupinfo: Any = None,
creationflags: int = 0,
restore_signals: bool = True,
start_new_session: bool = False,
pass_fds: Sequence[int] = (),
*,
text: bool | None = None,
encoding: str | None = None,
errors: str | None = None,
user: str | int | None = None,
group: str | int | None = None,
extra_groups: Sequence[str | int] | None = None,
umask: int = -1,
pipesize: int = -1,
# Note: process_group is omitted because it was added in Python 3.11
) -> subprocess.Popen[Any] | None:
"""Wrapper around subprocess.Popen that never raises.
Returns None and logs the error if the subprocess cannot be created
(e.g. FileNotFoundError, PermissionError, OSError).
"""
try:
return subprocess.Popen(
args,
bufsize=bufsize,
executable=executable,
stdin=stdin,
stdout=stdout,
stderr=stderr,
preexec_fn=preexec_fn,
close_fds=close_fds,
shell=shell,
cwd=cwd,
env=env,
universal_newlines=universal_newlines,
startupinfo=startupinfo,
creationflags=creationflags,
restore_signals=restore_signals,
start_new_session=start_new_session,
pass_fds=pass_fds,
text=text,
encoding=encoding,
errors=errors,
user=user,
group=group,
extra_groups=extra_groups,
umask=umask,
pipesize=pipesize,
)
except Exception as e:
LOGGER.error("Failed to create subprocess for command %s: %s", args, e)
return None
+16
-5

@@ -7,2 +7,3 @@ # Copyright 2026 Marimo. All rights reserved.

import os
import shutil
import sys

@@ -26,4 +27,5 @@ import tempfile

from marimo._cli.file_path import validate_name
from marimo._cli.help_formatter import ColoredGroup
from marimo._cli.parse_args import parse_args
from marimo._cli.print import red
from marimo._cli.print import bright_green, light_blue, red
from marimo._cli.run_docker import (

@@ -85,3 +87,3 @@ prompt_run_in_docker_container,

" * "
+ key
+ light_blue(key, bold=True)
+ _sep(desc)

@@ -99,3 +101,3 @@ + " " * (max_length - len(key) + 2)

"\b",
"Getting started:",
bright_green("Getting started:", bold=True),
"",

@@ -109,3 +111,3 @@ _key_value_bullets(

"",
"Example usage:",
bright_green("Example usage:", bold=True),
"",

@@ -156,6 +158,15 @@ _key_value_bullets(

try:
MAX_TERM_WIDTH = shutil.get_terminal_size().columns
except Exception:
MAX_TERM_WIDTH = 80
@click.group(
cls=ColoredGroup,
help=main_help_msg,
context_settings={"help_option_names": ["-h", "--help"]},
context_settings={
"help_option_names": ["-h", "--help"],
"max_content_width": MAX_TERM_WIDTH,
},
)

@@ -162,0 +173,0 @@ @click.version_option(version=__version__, message="%(version)s")

@@ -9,2 +9,3 @@ # Copyright 2026 Marimo. All rights reserved.

from marimo._cli.config.utils import highlight_toml_headers
from marimo._cli.help_formatter import ColoredCommand, ColoredGroup
from marimo._cli.print import echo, green

@@ -18,3 +19,5 @@ from marimo._config.manager import (

@click.group(help="""Various commands for the marimo config.""")
@click.group(
cls=ColoredGroup, help="""Various commands for the marimo config."""
)
def config() -> None:

@@ -24,3 +27,3 @@ pass

@click.command(help="""Show the marimo config.""")
@click.command(cls=ColoredCommand, help="""Show the marimo config.""")
def show() -> None:

@@ -57,3 +60,3 @@ """

@click.command(help="""Describe the marimo config.""")
@click.command(cls=ColoredCommand, help="""Describe the marimo config.""")
def describe() -> None:

@@ -60,0 +63,0 @@ """Print documentation for all config options."""

@@ -13,2 +13,3 @@ # Copyright 2026 Marimo. All rights reserved.

from marimo._cli.help_formatter import ColoredCommand, ColoredGroup
from marimo._data.models import DataType

@@ -281,3 +282,5 @@ from marimo._messaging.errors import Error as MarimoError

@click.group(
help="""Various commands for the marimo development.""", hidden=True
cls=ColoredGroup,
help="""Various commands for the marimo development.""",
hidden=True,
)

@@ -288,3 +291,3 @@ def development() -> None:

@click.command(help="""Print the marimo OpenAPI schema""")
@click.command(cls=ColoredCommand, help="""Print the marimo OpenAPI schema""")
def openapi() -> None:

@@ -303,3 +306,7 @@ """

@click.group(help="Various commands for the marimo processes", hidden=True)
@click.group(
cls=ColoredGroup,
help="Various commands for the marimo processes",
hidden=True,
)
def ps() -> None:

@@ -378,3 +385,5 @@ pass

@click.command(
help="Inline packages according to PEP 723", name="inline-packages"
cls=ColoredCommand,
help="Inline packages according to PEP 723",
name="inline-packages",
)

@@ -458,3 +467,3 @@ @click.argument(

@click.command(help="Print all routes")
@click.command(cls=ColoredCommand, help="Print all routes")
def print_routes() -> None:

@@ -487,3 +496,3 @@ from starlette.applications import Starlette

@click.command(help="Preview a marimo file as static HTML")
@click.command(cls=ColoredCommand, help="Preview a marimo file as static HTML")
@click.argument(

@@ -490,0 +499,0 @@ "file_path",

@@ -11,5 +11,9 @@ # Copyright 2026 Marimo. All rights reserved.

from marimo._cli.export.cloudflare import create_cloudflare_files
from marimo._cli.export.thumbnail import thumbnail
from marimo._cli.help_formatter import ColoredCommand, ColoredGroup
from marimo._cli.parse_args import parse_args
from marimo._cli.print import echo, green
from marimo._cli.tools.thumbnails import thumbnail
from marimo._cli.print import (
echo,
green,
)
from marimo._cli.utils import prompt_to_overwrite

@@ -47,3 +51,5 @@ from marimo._dependencies.dependencies import DependencyManager

@click.group(help="""Export a notebook to various formats.""")
@click.group(
cls=ColoredGroup, help="""Export a notebook to various formats."""
)
def export() -> None:

@@ -142,2 +148,3 @@ pass

@click.command(
cls=ColoredCommand,
help="""Run a notebook and export it as an HTML file.

@@ -152,3 +159,3 @@

marimo export html notebook.py -o notebook.html -- -arg1 foo -arg2 bar
"""
""",
)

@@ -242,2 +249,3 @@ @click.option(

@click.command(
cls=ColoredCommand,
help="""

@@ -253,3 +261,3 @@ Export a marimo notebook as a flat script, in topological order.

marimo export script notebook.py -o notebook.script.py --watch
"""
""",
)

@@ -322,2 +330,3 @@ @click.option(

@click.command(
cls=ColoredCommand,
help="""

@@ -333,3 +342,3 @@ Export a marimo notebook as a code fenced Markdown file.

marimo export md notebook.py -o notebook.md --watch
"""
""",
)

@@ -402,2 +411,3 @@ @click.option(

@click.command(
cls=ColoredCommand,
help="""

@@ -415,3 +425,3 @@ Export a marimo notebook as a Jupyter notebook in topological order.

Requires nbformat to be installed.
"""
""",
)

@@ -522,2 +532,3 @@ @click.option(

@click.command(
cls=ColoredCommand,
help="""Export a marimo notebook as a PDF file.

@@ -534,3 +545,3 @@

Requires nbformat and nbconvert to be installed.
"""
""",
)

@@ -688,2 +699,3 @@ @click.option(

@click.command(
cls=ColoredCommand,
help="""Export a notebook as a WASM-powered standalone HTML file.

@@ -706,3 +718,3 @@

and cannot be opened directly from the file system (e.g. file://).
"""
""",
)

@@ -709,0 +721,0 @@ @click.option(

# Copyright 2026 Marimo. All rights reserved.
#
# NB: Do not import click top-level. This module is imported in WASM, which
# does not have access to click.

@@ -7,3 +10,3 @@ from __future__ import annotations

import sys
from typing import Any, cast
from typing import Any, Protocol, cast

@@ -43,51 +46,112 @@ from marimo._config.settings import GLOBAL_SETTINGS

_ANSI_COLORS = {
"black": 30,
"red": 31,
"green": 32,
"yellow": 33,
"blue": 34,
"magenta": 35,
"cyan": 36,
"white": 37,
"bright_black": 90,
"bright_red": 91,
"bright_green": 92,
"bright_yellow": 93,
"bright_blue": 94,
"bright_magenta": 95,
"bright_cyan": 96,
"bright_white": 97,
}
class _StyleFn(Protocol):
def __call__(
self,
text: str,
*,
fg: str | None = ...,
bold: bool = ...,
dim: bool = ...,
) -> str: ...
def _ansi_style(
text: str,
*,
fg: str | None = None,
bold: bool = False,
dim: bool = False,
) -> str:
"""Minimal ANSI fallback for environments without click (e.g. WASM)."""
codes: list[int] = []
if fg and fg in _ANSI_COLORS:
codes.append(_ANSI_COLORS[fg])
if bold:
codes.append(1)
if dim:
codes.append(2)
if not codes:
return text
return f"\033[{';'.join(str(c) for c in codes)}m{text}\033[0m"
def _noop_style(
text: str,
*,
fg: str | None = None,
bold: bool = False,
dim: bool = False,
) -> str:
del fg, bold, dim
return text
def _resolve_style() -> _StyleFn:
if not _USE_COLOR:
return _noop_style
try:
import click
return click.style
except ModuleNotFoundError:
return _ansi_style
_style: _StyleFn = _resolve_style()
def bold(text: str) -> str:
return "\033[1m" + text + "\033[0m" if _USE_COLOR else text
return _style(text, bold=True)
def green(text: str, bold: bool = False) -> str:
if not _USE_COLOR:
return text
prefix = "\033[32m" if not bold else "\033[1;32m"
return prefix + text + "\033[0m"
return _style(text, fg="green", bold=bold)
def bright_green(text: str, bold: bool = False) -> str:
return _style(text, fg="bright_green", bold=bold)
def yellow(text: str, bold: bool = False) -> str:
if not _USE_COLOR:
return text
prefix = "\033[33m" if not bold else "\033[1;33m"
return prefix + text + "\033[0m"
return _style(text, fg="yellow", bold=bold)
def orange(text: str, bold: bool = False) -> str:
if not _USE_COLOR:
return text
prefix = "\033[33m" if not bold else "\033[1;33m"
return prefix + text + "\033[0m"
return _style(text, fg="yellow", bold=bold)
def red(text: str, bold: bool = False) -> str:
if not _USE_COLOR:
return text
prefix = "\033[31m" if not bold else "\033[1;31m"
return prefix + text + "\033[0m"
return _style(text, fg="red", bold=bold)
def cyan(text: str, bold: bool = False) -> str:
if not _USE_COLOR:
return text
prefix = "\033[94m" if not bold else "\033[1;94m"
return prefix + text + "\033[0m"
return _style(text, fg="bright_blue", bold=bold)
def light_blue(text: str, bold: bool = False) -> str:
if not _USE_COLOR:
return text
prefix = "\033[96m" if not bold else "\033[1;96m"
return prefix + text + "\033[0m"
return _style(text, fg="bright_cyan", bold=bold)
def muted(text: str) -> str:
# Use dark gray (37 is white, 2 is dim) which is more widely supported than 90
return "\033[37;2m" + text + "\033[0m" if _USE_COLOR else text
return _style(text, fg="white", dim=True)

@@ -94,0 +158,0 @@

@@ -16,2 +16,3 @@ # Copyright 2026 Marimo. All rights reserved.

from marimo._runtime.packages.utils import append_version
from marimo._utils.subprocess import safe_popen

@@ -153,3 +154,3 @@ if TYPE_CHECKING:

# Stream output to both the callback and the terminal
proc = subprocess.Popen( # noqa: ASYNC220
proc = safe_popen( # noqa: ASYNC220
command,

@@ -162,2 +163,5 @@ stdout=subprocess.PIPE,

if proc is None:
return False
if proc.stdout:

@@ -164,0 +168,0 @@ for line in iter(proc.stdout.readline, b""):

@@ -24,2 +24,3 @@ # Copyright 2026 Marimo. All rights reserved.

from marimo._utils.platform import is_pyodide
from marimo._utils.subprocess import safe_popen
from marimo._utils.uv import find_uv_bin

@@ -321,3 +322,3 @@ from marimo._utils.uv_tree import DependencyTreeNode, parse_uv_tree

# Run the command and capture output
proc = subprocess.Popen( # noqa: ASYNC220
proc = safe_popen( # noqa: ASYNC220
cmd,

@@ -330,2 +331,5 @@ stdout=subprocess.PIPE,

if proc is None:
return False
output_lines: list[str] = []

@@ -332,0 +336,0 @@ if proc.stdout:

@@ -20,2 +20,3 @@ # Copyright 2026 Marimo. All rights reserved.

from marimo import _loggers
from marimo._server.api.auth import validate_auth
from marimo._server.router import APIRouter

@@ -136,2 +137,10 @@

# Validate authentication before proxying - prevents SSRF
if not validate_auth(request):
return Response(
content="Unauthorized",
status_code=401,
media_type="text/plain",
)
# Proxy to matplotlib server

@@ -233,4 +242,8 @@ # Determine the target port

global figure_endpoints
# Only authenticated users can register figure->port mappings
if not validate_auth(websocket):
await websocket.close(code=1008, reason="Unauthorized")
return
port = str(websocket.path_params["port"])
await websocket.accept()

@@ -237,0 +250,0 @@

@@ -69,3 +69,3 @@ <!DOCTYPE html>

<title>{{ title }}</title>
<script type="module" crossorigin src="./assets/index-DFrkvKWf.js"></script>
<script type="module" crossorigin src="./assets/index-CD6Gw4UH.js"></script>
<link rel="modulepreload" crossorigin href="./assets/preload-helper-D2MJg03u.js">

@@ -233,3 +233,3 @@ <link rel="modulepreload" crossorigin href="./assets/clsx-D8GwTfvk.js">

<link rel="modulepreload" crossorigin href="./assets/react-resizable-panels.browser.esm-Da3ksQXL.js">
<link rel="modulepreload" crossorigin href="./assets/utilities.esm-MA1QpjVT.js">
<link rel="modulepreload" crossorigin href="./assets/utilities.esm-dm9SQStE.js">
<link rel="modulepreload" crossorigin href="./assets/floating-outline-BtdqbkUq.js">

@@ -236,0 +236,0 @@ <link rel="modulepreload" crossorigin href="./assets/useAddCell-CmuX2hOk.js">

+15
-13
Metadata-Version: 2.3
Name: marimo
Version: 0.19.8
Version: 0.19.9
Summary: A library for making reactive notebooks and apps

@@ -239,2 +239,3 @@ License:

Requires-Dist: msgspec>=0.20.0
Requires-Dist: openai>=2.15.0
Requires-Dist: python-lsp-server>=1.13.0 ; extra == 'lsp'

@@ -326,6 +327,6 @@ Requires-Dist: python-lsp-ruff>=2.0.0 ; extra == 'lsp'

_Try marimo at [our online playground](https://marimo.app/l/c7h6pz), which runs entirely in the browser!_
_Get started instantly with [**mo**lab, our free online
notebook](https://molab.marimo.io/notebooks). Or jump to the
[quickstart](#quickstart) for a primer on our CLI._
_Jump to the [quickstart](#quickstart) for a primer on our CLI._
## A reactive programming environment

@@ -480,3 +481,3 @@

For example, here's an embedding visualizer made in marimo
([video](https://marimo.io/videos/landing/full.mp4)):
([try the notebook live on molab!](https://molab.marimo.io/notebooks/nb_jJiFFtznAy4BxkrrZA1o9b/app?show-code=true)):

@@ -527,19 +528,19 @@ <img src="https://raw.githubusercontent.com/marimo-team/marimo/main/docs/_static/embedding.gif" width="700px" />

<td>
<a target="_blank" href="https://marimo.app/l/c7h6pz">
<img src="https://marimo.io/shield.svg"/>
<a target="_blank" href="https://molab.marimo.io/notebooks/nb_TWVGCgZZK4L8zj5ziUBNVL">
<img src="https://marimo.io/molab-shield.svg"/>
</a>
</td>
<td>
<a target="_blank" href="https://marimo.app/l/0ue871">
<img src="https://marimo.io/shield.svg"/>
<a target="_blank" href="https://molab.marimo.io/notebooks/nb_WuoXgs7mjg5yqrMxJXjRpF">
<img src="https://marimo.io/molab-shield.svg"/>
</a>
</td>
<td>
<a target="_blank" href="https://marimo.app/l/lxp1jk">
<img src="https://marimo.io/shield.svg"/>
<a target="_blank" href="https://molab.marimo.io/notebooks/nb_vXxD13t2RoMTLjC89qdn6c">
<img src="https://marimo.io/molab-shield.svg"/>
</a>
</td>
<td>
<a target="_blank" href="https://marimo.app/l/14ovyr">
<img src="https://marimo.io/shield.svg"/>
<a target="_blank" href="https://molab.marimo.io/notebooks/nb_XpXx8MX99dWAjn4k1b3xiU">
<img src="https://marimo.io/molab-shield.svg"/>
</a>

@@ -570,2 +571,3 @@ </td>

- 🎥 [Subscribe on YouTube](https://www.youtube.com/@marimo-team)
- 🤖 [Follow us on Reddit](https://www.reddit.com/marimo_notebook)
- 🕴️ [Follow us on LinkedIn](https://www.linkedin.com/company/marimo-io)

@@ -572,0 +574,0 @@

@@ -7,3 +7,3 @@ [build-system]

name = "marimo"
version = "0.19.8"
version = "0.19.9"
description = "A library for making reactive notebooks and apps"

@@ -54,2 +54,3 @@ # We try to keep dependencies to a minimum, to avoid conflicts with

"msgspec>=0.20.0",
"openai>=2.15.0",
]

@@ -56,0 +57,0 @@ readme = "README.md"

+13
-12

@@ -63,6 +63,6 @@ <p align="center">

_Try marimo at [our online playground](https://marimo.app/l/c7h6pz), which runs entirely in the browser!_
_Get started instantly with [**mo**lab, our free online
notebook](https://molab.marimo.io/notebooks). Or jump to the
[quickstart](#quickstart) for a primer on our CLI._
_Jump to the [quickstart](#quickstart) for a primer on our CLI._
## A reactive programming environment

@@ -217,3 +217,3 @@

For example, here's an embedding visualizer made in marimo
([video](https://marimo.io/videos/landing/full.mp4)):
([try the notebook live on molab!](https://molab.marimo.io/notebooks/nb_jJiFFtznAy4BxkrrZA1o9b/app?show-code=true)):

@@ -264,19 +264,19 @@ <img src="https://raw.githubusercontent.com/marimo-team/marimo/main/docs/_static/embedding.gif" width="700px" />

<td>
<a target="_blank" href="https://marimo.app/l/c7h6pz">
<img src="https://marimo.io/shield.svg"/>
<a target="_blank" href="https://molab.marimo.io/notebooks/nb_TWVGCgZZK4L8zj5ziUBNVL">
<img src="https://marimo.io/molab-shield.svg"/>
</a>
</td>
<td>
<a target="_blank" href="https://marimo.app/l/0ue871">
<img src="https://marimo.io/shield.svg"/>
<a target="_blank" href="https://molab.marimo.io/notebooks/nb_WuoXgs7mjg5yqrMxJXjRpF">
<img src="https://marimo.io/molab-shield.svg"/>
</a>
</td>
<td>
<a target="_blank" href="https://marimo.app/l/lxp1jk">
<img src="https://marimo.io/shield.svg"/>
<a target="_blank" href="https://molab.marimo.io/notebooks/nb_vXxD13t2RoMTLjC89qdn6c">
<img src="https://marimo.io/molab-shield.svg"/>
</a>
</td>
<td>
<a target="_blank" href="https://marimo.app/l/14ovyr">
<img src="https://marimo.io/shield.svg"/>
<a target="_blank" href="https://molab.marimo.io/notebooks/nb_XpXx8MX99dWAjn4k1b3xiU">
<img src="https://marimo.io/molab-shield.svg"/>
</a>

@@ -307,2 +307,3 @@ </td>

- 🎥 [Subscribe on YouTube](https://www.youtube.com/@marimo-team)
- 🤖 [Follow us on Reddit](https://www.reddit.com/marimo_notebook)
- 🕴️ [Follow us on LinkedIn](https://www.linkedin.com/company/marimo-io)

@@ -309,0 +310,0 @@

# Copyright 2026 Marimo. All rights reserved.
# Copyright 2026 Marimo. All rights reserved.
from __future__ import annotations
import asyncio
import json
import subprocess
import threading
from contextlib import AbstractContextManager
from functools import partial
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path
from typing import TYPE_CHECKING, Any, Optional
import click
from marimo._cli.parse_args import parse_args
from marimo._cli.print import echo, green, red
from marimo._dependencies.dependencies import DependencyManager
from marimo._server.export import run_app_then_export_as_html
from marimo._server.file_router import flatten_files
from marimo._server.files.directory_scanner import DirectoryScanner
from marimo._server.utils import asyncio_run
from marimo._utils.http import HTTPException, HTTPStatus
from marimo._utils.marimo_path import MarimoPath
from marimo._utils.paths import marimo_package_path, maybe_make_dirs
if TYPE_CHECKING:
from collections.abc import Iterable
from types import TracebackType
_sandbox_message = (
"Render notebooks in an isolated environment, with dependencies tracked "
"via PEP 723 inline metadata. If already declared, dependencies will "
"install automatically. Requires uv. Only applies when --execute is used."
)
def _split_paths_and_args(
name: str, args: tuple[str, ...]
) -> tuple[list[str], tuple[str, ...]]:
paths = [name]
for index, arg in enumerate(args):
if arg == "--":
return paths, args[index + 1 :]
paths.append(arg)
return paths, ()
def _collect_notebooks(paths: Iterable[Path]) -> list[MarimoPath]:
notebooks: dict[str, MarimoPath] = {}
for path in paths:
if path.is_dir():
scanner = DirectoryScanner(str(path), include_markdown=True)
try:
file_infos = scanner.scan()
except HTTPException as e:
if e.status_code != HTTPStatus.REQUEST_TIMEOUT:
raise
# Match server behavior: use partial results on scan timeout.
file_infos = scanner.partial_results
for file_info in flatten_files(file_infos):
if not file_info.is_marimo_file or file_info.is_directory:
continue
absolute_path = str(Path(path) / file_info.path)
notebooks[absolute_path] = MarimoPath(absolute_path)
else:
notebooks[str(path)] = MarimoPath(str(path))
return [notebooks[k] for k in sorted(notebooks)]
async def _render_html(
marimo_path: MarimoPath,
*,
execute: bool,
include_code: bool,
args: tuple[str, ...],
asset_url: str | None = None,
venv_python: str | None = None,
) -> str:
if not execute:
from marimo._server.export import export_as_html_without_execution
result = await export_as_html_without_execution(
marimo_path, include_code=True, asset_url=asset_url
)
return result.text
if venv_python is None:
cli_args = parse_args(args) if args else {}
result = await run_app_then_export_as_html(
marimo_path,
include_code=include_code,
cli_args=cli_args,
argv=list(args),
asset_url=asset_url,
)
return result.text
payload = {
"path": marimo_path.absolute_name,
"include_code": include_code,
"args": list(args),
"asset_url": asset_url,
}
# Render in a separate process so we can use a sandboxed venv without polluting the current environment.
return await asyncio.to_thread(
_render_html_in_subprocess,
venv_python,
payload,
)
def _render_html_in_subprocess(
venv_python: str, payload: dict[str, Any]
) -> str:
"""Render a notebook to HTML in a separate Python process."""
script = r"""
import asyncio
import json
import sys
from marimo._cli.parse_args import parse_args
from marimo._server.export import run_app_then_export_as_html
from marimo._utils.marimo_path import MarimoPath
payload = json.loads(sys.argv[1])
path = MarimoPath(payload["path"])
include_code = bool(payload.get("include_code", False))
args = payload.get("args") or []
asset_url = payload.get("asset_url")
cli_args = parse_args(tuple(args)) if args else {}
result = asyncio.run(
run_app_then_export_as_html(
path,
include_code=include_code,
cli_args=cli_args,
argv=list(args),
asset_url=asset_url,
)
)
sys.stdout.write(result.text)
"""
result = subprocess.run(
[venv_python, "-c", script, json.dumps(payload)],
capture_output=True,
text=True,
)
if result.returncode != 0:
stderr = result.stderr.strip()
raise click.ClickException(
"Failed to render notebook in sandbox.\n\n"
f"Command:\n\n {venv_python} -c <script>\n\n"
f"Stderr:\n\n{stderr}"
)
return result.stdout
class _ThumbnailRequestHandler(SimpleHTTPRequestHandler):
def do_GET(self) -> None: # noqa: N802
if self.path.split("?", 1)[0] == "/__marimo_thumbnail__.html":
html = getattr(self.server, "thumbnail_html", "")
self.send_response(200)
self.send_header("Content-Type", "text/html; charset=utf-8")
self.send_header("Cache-Control", "no-store")
self.end_headers()
self.wfile.write(html.encode("utf-8"))
return
return super().do_GET()
def log_message(self, format: str, *args: Any) -> None: # noqa: A002
# Silence noisy server logs for CLI usage.
del format
del args
return
class _ThumbnailHTTPServer(ThreadingHTTPServer):
# Set by _ThumbnailAssetServer to serve a fresh HTML document per notebook.
thumbnail_html: str
class _ThumbnailAssetServer(AbstractContextManager["_ThumbnailAssetServer"]):
def __init__(self, *, directory: Path) -> None:
self._directory = directory
self._server: _ThumbnailHTTPServer | None = None
self._thread: threading.Thread | None = None
@property
def base_url(self) -> str:
assert self._server is not None
host, port = self._server.server_address[:2]
if isinstance(host, bytes):
host = host.decode("utf-8")
return f"http://{host}:{port}"
@property
def page_url(self) -> str:
return f"{self.base_url}/__marimo_thumbnail__.html"
def set_html(self, html: str) -> None:
assert self._server is not None
self._server.thumbnail_html = html
def __enter__(self) -> _ThumbnailAssetServer:
if not self._directory.is_dir():
raise click.ClickException(
f"Static assets not found at {self._directory}"
)
handler = partial(
_ThumbnailRequestHandler, directory=str(self._directory)
)
self._server = _ThumbnailHTTPServer(("127.0.0.1", 0), handler)
self._server.thumbnail_html = ""
self._thread = threading.Thread(
target=self._server.serve_forever, daemon=True
)
self._thread.start()
return self
def __exit__(
self,
exc_type: type[BaseException] | None,
exc: BaseException | None,
tb: TracebackType | None,
) -> None:
del exc_type
del exc
del tb
if self._server is not None:
self._server.shutdown()
self._server.server_close()
self._server = None
if self._thread is not None:
self._thread.join(timeout=1)
self._thread = None
return None
class _SandboxVenvPool:
def __init__(self) -> None:
self._envs: dict[tuple[str, ...], tuple[str, str]] = {}
def get_python(self, notebook_path: str) -> str:
"""Return a venv python path for the notebook's sandbox requirements."""
from marimo._cli.sandbox import (
build_sandbox_venv,
get_sandbox_requirements,
)
requirements = tuple(get_sandbox_requirements(notebook_path))
existing = self._envs.get(requirements)
if existing is not None:
return existing[1]
sandbox_dir, venv_python = build_sandbox_venv(notebook_path)
self._envs[requirements] = (sandbox_dir, venv_python)
return venv_python
def close(self) -> None:
"""Clean up any sandbox environments we created."""
from marimo._cli.sandbox import cleanup_sandbox_dir
for sandbox_dir, _ in self._envs.values():
cleanup_sandbox_dir(sandbox_dir)
self._envs.clear()
async def _generate_thumbnails(
*,
notebooks: list[MarimoPath],
width: int,
height: int,
scale: int,
timeout_ms: int,
output: Optional[Path],
overwrite: bool,
include_code: bool,
execute: bool,
notebook_args: tuple[str, ...],
continue_on_error: bool,
sandbox: bool,
) -> None:
from marimo._metadata.opengraph import default_opengraph_image
failures: list[tuple[MarimoPath, Exception]] = []
try:
from playwright.async_api import ( # type: ignore[import-not-found]
async_playwright,
)
except ModuleNotFoundError as e:
if getattr(e, "name", None) == "playwright":
raise click.ClickException(
"Playwright is required to generate thumbnails.\n\n"
" Tip: Install dependencies with:\n\n"
" pip install 'nbconvert[webpdf]'\n\n"
" and install Chromium with:\n\n"
" python -m playwright install chromium"
) from None
raise
if sandbox and not DependencyManager.which("uv"):
raise click.ClickException(
"uv is required for --sandbox thumbnail generation.\n\n"
" Tip: Install uv from https://github.com/astral-sh/uv"
)
static_dir = marimo_package_path() / "_static"
sandbox_pool: _SandboxVenvPool | None = (
_SandboxVenvPool() if sandbox else None
)
try:
with _ThumbnailAssetServer(directory=static_dir) as server:
async with async_playwright() as playwright:
browser = await playwright.chromium.launch()
context = await browser.new_context(
viewport={"width": width, "height": height},
device_scale_factor=scale,
)
page = await context.new_page()
await page.emulate_media(reduced_motion="reduce")
for index, notebook in enumerate(notebooks):
try:
notebook_dir = notebook.path.parent
out_path = (
output
if output is not None
else notebook_dir
/ default_opengraph_image(str(notebook.path))
)
if out_path.exists() and not overwrite:
echo(
red("skip")
+ f": {notebook.short_name} (exists, use --overwrite)"
)
continue
maybe_make_dirs(out_path)
echo(f"Rendering {notebook.short_name}...")
venv_python = (
sandbox_pool.get_python(str(notebook.path))
if sandbox_pool is not None
else None
)
html = await _render_html(
notebook,
execute=execute,
include_code=include_code,
args=notebook_args,
asset_url=server.base_url,
venv_python=venv_python,
)
server.set_html(html)
echo(f"Screenshotting -> {out_path}...")
page_url = f"{server.page_url}?v={index}"
await page.goto(page_url, wait_until="load")
# Hide chrome and watermarks marked for print so thumbnails stay focused on notebook content.
await page.add_style_tag(
content=(
'.print\\:hidden,[data-testid="watermark"]{display:none !important;}'
)
)
# Nb renderer starts cell contents as invisible for a short period to avoid flicker
# --> we wait for the first cell container to be visible before snapshotting.
await page.wait_for_function(
r"""
() => {
const root = document.getElementById("root");
if (!root) return false;
const cell = document.querySelector('div[id^="cell-"]');
if (cell) {
const style = window.getComputedStyle(cell);
return style.visibility !== "hidden" && style.display !== "none";
}
return root.childElementCount > 0;
}
""",
timeout=30_000,
)
await page.wait_for_timeout(timeout_ms)
await page.screenshot(
path=str(out_path), full_page=False
)
echo(green("ok") + f": {out_path}")
except Exception as e:
failures.append((notebook, e))
echo(red("error") + f": {notebook.short_name}: {e}")
if not continue_on_error:
raise
await context.close()
await browser.close()
finally:
if sandbox_pool is not None:
sandbox_pool.close()
if failures:
raise click.ClickException(
f"Failed to generate thumbnails for {len(failures)} notebooks."
)
@click.command(
"thumbnail", help="Generate OpenGraph thumbnails for notebooks."
)
@click.argument(
"name",
type=click.Path(
exists=True, file_okay=True, dir_okay=True, path_type=Path
),
)
@click.option(
"--width",
type=int,
default=1200,
show_default=True,
help="Viewport width for the screenshot.",
)
@click.option(
"--height",
type=int,
default=630,
show_default=True,
help="Viewport height for the screenshot.",
)
@click.option(
"--scale",
type=click.IntRange(min=1, max=4),
default=2,
show_default=True,
help=(
"Device scale factor for screenshots. Output resolution will be "
"`width*scale` x `height*scale`."
),
)
@click.option(
"--timeout-ms",
type=int,
default=1500,
show_default=True,
help="Additional time to wait after page load before screenshot.",
)
@click.option(
"--output",
type=click.Path(path_type=Path),
default=None,
help=(
"Output filename. If omitted, writes to "
"`<notebook_dir>/__marimo__/assets/<notebook_stem>/opengraph.png`."
),
)
@click.option(
"--overwrite/--no-overwrite",
default=False,
show_default=True,
help="Overwrite existing thumbnails.",
)
@click.option(
"--include-code/--no-include-code",
default=False,
show_default=True,
help="Whether to include code in the rendered HTML before screenshot.",
)
@click.option(
"--execute/--no-execute",
default=False,
show_default=True,
help=(
"Execute notebooks and include their outputs in thumbnails. "
"In --no-execute mode (default), thumbnails are generated from notebook "
"structure without running code (and will not include outputs)."
),
)
@click.option(
"--sandbox/--no-sandbox",
is_flag=True,
default=None,
show_default=False,
type=bool,
help=_sandbox_message,
)
@click.option(
"--continue-on-error/--fail-fast",
default=True,
show_default=True,
help="Continue processing other notebooks if one notebook fails.",
)
@click.argument("args", nargs=-1, type=click.UNPROCESSED)
def thumbnail(
name: Path,
width: int,
height: int,
scale: int,
timeout_ms: int,
output: Optional[Path],
overwrite: bool,
include_code: bool,
execute: bool,
sandbox: Optional[bool],
continue_on_error: bool,
args: tuple[str, ...],
) -> None:
"""Generate thumbnails for one or more notebooks (or directories)."""
try:
DependencyManager.playwright.require("for thumbnail generation")
except ModuleNotFoundError as e:
if getattr(e, "name", None) == "playwright":
raise click.ClickException(
"Playwright is required for thumbnail generation.\n\n"
" Tip: Install with:\n\n"
" python -m pip install playwright\n\n"
" and install Chromium with:\n\n"
" python -m playwright install chromium"
) from None
raise
paths, notebook_args = _split_paths_and_args(str(name), args)
notebooks = _collect_notebooks([Path(p) for p in paths])
if not notebooks:
raise click.ClickException("No marimo notebooks found.")
if output is not None and len(notebooks) > 1:
raise click.UsageError(
"--output can only be used when generating thumbnail for a single notebook."
)
from marimo._cli.sandbox import resolve_sandbox_mode
if not execute and sandbox:
raise click.UsageError("--sandbox requires --execute.")
sandbox_mode = (
resolve_sandbox_mode(sandbox=sandbox, name=str(name))
if execute
else None
)
asyncio_run(
_generate_thumbnails(
notebooks=notebooks,
width=width,
height=height,
scale=scale,
timeout_ms=timeout_ms,
output=output,
overwrite=overwrite,
include_code=include_code,
execute=execute,
notebook_args=notebook_args,
continue_on_error=continue_on_error,
sandbox=sandbox_mode is not None,
)
)

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

var TA=Object.defineProperty;var IA=(a,A,e)=>A in a?TA(a,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[A]=e;var GA=(a,A,e)=>IA(a,typeof A!="symbol"?A+"":A,e);import{s as cA}from"./chunk-LvLJmgfZ.js";import{d as _,i as gA,l as hA,u as j}from"./useEvent-BhXAndur.js";import{t as KA}from"./react-Bj1aDYRI.js";import{D as HA,Dt as UA,Et as VA,F as XA,L as JA,N as WA,Ot as qA,ai as zA,an as $A,en as Ae,ir as ee,l as ae,li as te,lr as dA,m as BA,vn as Ge,w as oe,y as se}from"./cells-DPp5cDaO.js";import{t as B}from"./compiler-runtime-B3qBwwSJ.js";import{n as re}from"./assertNever-CBU83Y6o.js";import{B as S,F as ne,I as ke,K as Re,L as ie,M as le,P as Ze,Q as uA,R as ce,S as ge,U as YA,X as he,Y as de,Z as Be,at as ue,et as Ye,it as me,nt as fe,q as pe}from"./utilities.esm-MA1QpjVT.js";import{a as mA,d as D}from"./hotkeys-BHHWjLlp.js";import{C as xe,b as we}from"./utils-YqBXNpsM.js";import{r as oA}from"./constants-B6Cb__3x.js";import{S as sA,b as F,c as De,h as ve,o as Ee,x}from"./config-Q0O7_stz.js";import{a as ye,d as Ce}from"./switch-dWLWbbtg.js";import{n as be}from"./ErrorBoundary-B9Ifj8Jf.js";import{t as Me}from"./useEventListener-Cb-RVVEn.js";import{t as Ne}from"./jsx-runtime-ZmTK25f3.js";import{t as rA}from"./button-CZ3Cs4qb.js";import{n as _e,t as f}from"./cn-BKtXLv3a.js";import{Y as fA}from"./JsonOutput-PE5ko4gi.js";import{t as je}from"./createReducer-B3rBsy4P.js";import{t as Se}from"./requests-B4FYHTZl.js";import{t as J}from"./createLucideIcon-BCdY6lG5.js";import{a as Fe,f as pA,i as xA,n as Qe,o as Le,s as Pe}from"./layout-_O8thjaV.js";import{m as Oe}from"./download-os8QlW6l.js";import{c as Te}from"./maps-D2_Mq1pZ.js";import{c as Ie}from"./markdown-renderer-DJy8ww5d.js";import{n as Ke}from"./spinner-DA8-7wQv.js";import{i as He,n as Ue}from"./readonly-python-code-WjTf6Pdd.js";import{t as Ve}from"./uuid-DXdzqzcr.js";import{t as nA}from"./use-toast-BDYuj3zG.js";import{i as Xe}from"./session-BOFn9QrD.js";import{s as Je,u as We}from"./Combination-BAEdC-rz.js";import{t as kA}from"./tooltip-CMQz28hC.js";import{a as qe,r as wA,t as ze}from"./mode-Bn7pdJvO.js";import{_ as $e,f as Aa,g as ea,h as DA,m as vA,p as EA,v as yA,y as aa}from"./alert-dialog-BW4srmS0.js";import{r as CA}from"./share-ipf2hrOh.js";import{r as bA}from"./errors-TZBmrJmc.js";import{t as ta}from"./RenderHTML-D-of_-s7.js";import{i as Ga}from"./cell-link-B9b7J8QK.js";import{t as oa}from"./error-banner-B9ts0mNl.js";import{n as sa}from"./useAsyncData-BMGLSTg8.js";import{t as ra}from"./requests-De5yEBc8.js";import{t as na}from"./ws-DcVtI9Wj.js";import{t as ka}from"./request-registry-C5_pVc8Y.js";import{n as Ra}from"./types-iYXk7c05.js";import{n as ia}from"./runs-YUGrkyfE.js";var la=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"}]]),MA=J("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]]),Za=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"}]]),ca=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"}]]),ga=B(),r=cA(Ne(),1);const ha=a=>{let A=(0,ga.c)(10),{reason:e,canTakeover:t}=a,o=t===void 0?!1:t,G=da;if(o){let n;A[0]===Symbol.for("react.memo_cache_sentinel")?(n=(0,r.jsx)("div",{className:"flex justify-between",children:(0,r.jsx)("span",{className:"font-bold text-xl flex items-center mb-2",children:"Notebook already connected"})}),A[0]=n):n=A[0];let k;A[1]===e?k=A[2]:(k=(0,r.jsx)("span",{children:e}),A[1]=e,A[2]=k);let R;A[3]===o?R=A[4]:(R=o&&(0,r.jsxs)(rA,{onClick:G,variant:"outline","data-testid":"takeover-button",className:"shrink-0",children:[(0,r.jsx)(Za,{className:"w-4 h-4 mr-2"}),"Take over session"]}),A[3]=o,A[4]=R);let i;return A[5]!==k||A[6]!==R?(i=(0,r.jsx)("div",{className:"flex justify-center",children:(0,r.jsxs)(oa,{kind:"info",className:"mt-10 flex flex-col rounded p-3 max-w-[800px] mx-4",children:[n,(0,r.jsxs)("div",{className:"flex justify-between items-end text-base gap-20",children:[k,R]})]})}),A[5]=k,A[6]=R,A[7]=i):i=A[7],i}let s;return A[8]===e?s=A[9]:(s=(0,r.jsx)("div",{className:"font-mono text-center text-base text-(--red-11)",children:(0,r.jsx)("p",{children:e})}),A[8]=e,A[9]=s),s};async function da(){try{let a=new URL(window.location.href).searchParams;await ye.post(`/kernel/takeover?${a.toString()}`,{}),CA()}catch(a){nA({title:"Failed to take over session",description:bA(a),variant:"danger"})}}var Ba=B(),u=cA(KA(),1);const ua=a=>{let A=(0,Ba.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,r.jsx)(ha,{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,r.jsxs)("div",{className:t,children:[o,G]}),A[4]=o,A[5]=t,A[6]=G,A[7]=s):s=A[7],s};var Ya=B();const ma=a=>{let A=(0,Ya.c)(10),{title:e}=a,[t,o]=(0,u.useState)(e),[G,s]=(0,u.useState)(!0),n,k;A[0]!==t||A[1]!==e?(n=()=>{if(e!==t){s(!1);let g=setTimeout(()=>{o(e),s(!0)},300);return()=>clearTimeout(g)}},k=[e,t],A[0]=t,A[1]=e,A[2]=n,A[3]=k):(n=A[2],k=A[3]),(0,u.useEffect)(n,k);let R;A[4]===Symbol.for("react.memo_cache_sentinel")?(R=(0,r.jsx)(Ke,{className:"size-20 animate-spin text-primary","data-testid":"large-spinner",strokeWidth:1}),A[4]=R):R=A[4];let i=G?"opacity-100":"opacity-0",l;A[5]===i?l=A[6]:(l=f("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,r.jsxs)("div",{className:"flex flex-col h-full flex-1 items-center justify-center p-4",children:[R,(0,r.jsx)("div",{className:l,children:t})]}),A[7]=t,A[8]=l,A[9]=c):c=A[9],c};var RA=B();const fa=a=>{let A=(0,RA.c)(2),{children:e}=a;if(!sA())return e;let t;return A[0]===e?t=A[1]:(t=(0,r.jsx)(pa,{children:e}),A[0]=e,A[1]=t),t};var pa=a=>{let A=(0,RA.c)(3),{children:e}=a,t;A[0]===Symbol.for("react.memo_cache_sentinel")?(t=[],A[0]=t):t=A[0];let{isPending:o,error:G}=sa(wa,t),s=j(de);if(o){let n;return A[1]===Symbol.for("react.memo_cache_sentinel")?(n=(0,r.jsx)(NA,{}),A[1]=n):n=A[1],n}if(!s&&ze()==="read"&&xa()){let n;return A[2]===Symbol.for("react.memo_cache_sentinel")?(n=(0,r.jsx)(NA,{}),A[2]=n):n=A[2],n}if(G)throw G;return e};function xa(){return Xe(oA.showCode,"false")||!gA.get(Ce)}const NA=a=>{let A=(0,RA.c)(2),e=j(he),t;return A[0]===e?t=A[1]:(t=(0,r.jsx)(ma,{title:e}),A[0]=e,A[1]=t),t};async function wa(){return await Re.INSTANCE.initialized.promise,!0}var Da={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 Q(a){return Da[a]}function va(a){if(document.visibilityState==="visible")return;let A=async()=>{a===0?new Notification("Execution completed",{body:"Your notebook run completed successfully.",icon:await Q("success")}):new Notification("Execution failed",{body:`Your notebook run encountered ${a} error(s).`,icon:await Q("error")})};!("Notification"in window)||Notification.permission==="denied"||(Notification.permission==="granted"?A():Notification.permission==="default"&&Notification.requestPermission().then(e=>{e==="granted"&&A()}))}const Ea=a=>{let{isRunning:A}=a,e=HA(),t=document.querySelector("link[rel~='icon']");t||(t=document.createElement("link"),t.rel="icon",document.getElementsByTagName("head")[0].append(t)),(0,u.useEffect)(()=>{!A&&t.href.includes("favicon")||(async()=>{let G;if(G=A?"running":e.length===0?"success":"error",t.href=await Q(G),!document.hasFocus())return;let s=setTimeout(async()=>{t.href=await Q("idle")},3e3);return()=>clearTimeout(s)})()},[A,e,t]);let o=ge(A)??A;return(0,u.useEffect)(()=>{o&&!A&&va(e.length)},[e,o,A]),Me(window,"focus",async G=>{A||(t.href=await Q("idle"))}),null};function ya(){let{cellRuntime:a}=gA.get(se),A=mA.entries(a).find(([e,t])=>t.status==="running");A&&Ga(A[0],"focus")}var L=B();const Ca=a=>{let A=(0,L.c)(22),{connection:e,isRunning:t}=a,{mode:o}=j(qe),G=e.state===x.CLOSED,s=e.state===x.OPEN,n;A[0]!==e.canTakeover||A[1]!==G?(n=G&&!e.canTakeover&&(0,r.jsx)(_a,{}),A[0]=e.canTakeover,A[1]=G,A[2]=n):n=A[2];let k=o==="read"?"fixed":"absolute",R;A[3]===k?R=A[4]:(R=f("z-50 top-4 left-4",k),A[3]=k,A[4]=R);let i;A[5]!==s||A[6]!==t?(i=s&&t&&(0,r.jsx)(Na,{}),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,r.jsx)(ba,{}),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,r.jsx)(Ma,{}),A[11]=e.canTakeover,A[12]=G,A[13]=c):c=A[13];let g;A[14]!==R||A[15]!==i||A[16]!==l||A[17]!==c?(g=(0,r.jsxs)("div",{className:R,children:[i,l,c]}),A[14]=R,A[15]=i,A[16]=l,A[17]=c,A[18]=g):g=A[18];let h;return A[19]!==n||A[20]!==g?(h=(0,r.jsxs)(r.Fragment,{children:[n,g]}),A[19]=n,A[20]=g,A[21]=h):h=A[21],h};var iA="print:hidden pointer-events-auto hover:cursor-pointer",ba=()=>{let a=(0,L.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,r.jsx)(kA,{content:"App disconnected",children:(0,r.jsx)("div",{className:iA,children:(0,r.jsx)(ca,{className:"w-[25px] h-[25px] text-(--red-11)"})})}),a[0]=A):A=a[0],A},Ma=()=>{let a=(0,L.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,r.jsx)(kA,{content:"Notebook locked",children:(0,r.jsx)("div",{className:iA,children:(0,r.jsx)(He,{className:"w-[25px] h-[25px] text-(--blue-11)"})})}),a[0]=A):A=a[0],A},Na=()=>{let a=(0,L.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,r.jsx)(kA,{content:"Jump to running cell",side:"right",children:(0,r.jsx)("div",{className:iA,"data-testid":"loading-indicator",onClick:ya,children:(0,r.jsx)(la,{className:"running-app-icon",size:30,strokeWidth:1})})}),a[0]=A):A=a[0],A},_a=()=>{let a=(0,L.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"noise"}),(0,r.jsx)("div",{className:"disconnected-gradient"})]}),a[0]=A):A=a[0],A},C=B(),ja=$e,Sa=aa,Fa=Je(ea),_A=u.forwardRef((a,A)=>{let e=(0,C.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=f("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,r.jsx)(DA,{className:G,...o,ref:A}),e[5]=o,e[6]=A,e[7]=G,e[8]=s):s=e[8],s});_A.displayName=DA.displayName;var Qa=_e("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"}}),jA=u.forwardRef((a,A)=>{let e=(0,C.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 n=s===void 0?"right":s,k;e[5]===Symbol.for("react.memo_cache_sentinel")?(k=(0,r.jsx)(_A,{}),e[5]=k):k=e[5];let R;e[6]!==o||e[7]!==n?(R=f(Qa({side:n}),o),e[6]=o,e[7]=n,e[8]=R):R=e[8];let i;e[9]===Symbol.for("react.memo_cache_sentinel")?(i=(0,r.jsxs)(Aa,{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,r.jsx)(Te,{className:"h-4 w-4"}),(0,r.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]!==R?(l=(0,r.jsx)(Fa,{children:(0,r.jsxs)(We,{children:[k,(0,r.jsxs)(EA,{ref:A,className:R,...G,children:[t,i]})]})}),e[10]=t,e[11]=G,e[12]=A,e[13]=R,e[14]=l):l=e[14],l});jA.displayName=EA.displayName;var La=a=>{let A=(0,C.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=f("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,r.jsx)("div",{className:o,...t}),A[5]=t,A[6]=o,A[7]=G):G=A[7],G};La.displayName="SheetHeader";var Pa=a=>{let A=(0,C.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=f("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,r.jsx)("div",{className:o,...t}),A[5]=t,A[6]=o,A[7]=G):G=A[7],G};Pa.displayName="SheetFooter";var Oa=u.forwardRef((a,A)=>{let e=(0,C.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=f("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,r.jsx)(yA,{ref:A,className:G,...o}),e[5]=o,e[6]=A,e[7]=G,e[8]=s):s=e[8],s});Oa.displayName=yA.displayName;var Ta=u.forwardRef((a,A)=>{let e=(0,C.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=f("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,r.jsx)(vA,{ref:A,className:G,...o}),e[5]=o,e[6]=A,e[7]=G,e[8]=s):s=e[8],s});Ta.displayName=vA.displayName;var Ia=B();const lA=(0,u.memo)(()=>{let a=(0,Ia.c)(1),A;return a[0]===Symbol.for("react.memo_cache_sentinel")?(A=(0,r.jsx)(me,{name:uA.SIDEBAR}),a[0]=A):A=a[0],A});lA.displayName="SidebarSlot";var Ka=B();const Ha=a=>{let A=(0,Ka.c)(6),{openWidth:e}=a,t;A[0]===Symbol.for("react.memo_cache_sentinel")?(t=(0,r.jsx)(Sa,{className:"lg:hidden",asChild:!0,children:(0,r.jsx)(rA,{variant:"ghost",className:"bg-background",children:(0,r.jsx)(MA,{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,r.jsx)(lA,{}),A[3]=G):G=A[3];let s;return A[4]===o?s=A[5]:(s=(0,r.jsxs)(ja,{children:[t,(0,r.jsx)(jA,{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 Ua=B();const Va=a=>{let A=(0,Ua.c)(7),{isOpen:e,toggle:t}=a,o=e?"rotate-0":"rotate-180",G;A[0]===o?G=A[1]:(G=f("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,r.jsx)(Oe,{className:G}),A[2]=G,A[3]=s);let n;return A[4]!==s||A[5]!==t?(n=(0,r.jsx)("div",{className:"invisible lg:visible absolute top-[12px] right-[16px] z-20",children:(0,r.jsx)(rA,{onClick:t,className:"w-10 h-8",variant:"ghost",size:"icon",children:s})}),A[4]=s,A[5]=t,A[6]=n):n=A[6],n};var Xa=B();const Ja=a=>{let A=(0,Xa.c)(11),{isOpen:e,toggle:t,width:o}=a,G=e?o:ne,s;A[0]===G?s=A[1]:(s={width:G},A[0]=G,A[1]=s);let n;A[2]===Symbol.for("react.memo_cache_sentinel")?(n=f("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]=n):n=A[2];let k;A[3]!==e||A[4]!==t?(k=(0,r.jsx)(Va,{isOpen:e,toggle:t}),A[3]=e,A[4]=t,A[5]=k):k=A[5];let R;A[6]===Symbol.for("react.memo_cache_sentinel")?(R=(0,r.jsx)("div",{className:"relative h-full flex flex-col px-3 pb-16 pt-14 overflow-y-auto shadow-sm border-l",children:(0,r.jsx)(lA,{})}),A[6]=R):R=A[6];let i;return A[7]!==e||A[8]!==s||A[9]!==k?(i=(0,r.jsxs)("aside",{"data-expanded":e,style:s,className:n,children:[k,R]}),A[7]=e,A[8]=s,A[9]=k,A[10]=i):i=A[10],i};var Wa=B();const qa=a=>{let A=(0,Wa.c)(15),{children:e}=a,[t,o]=hA(ie),{isOpen:G,width:s}=t;if(ue(uA.SIDEBAR).length===0)return e;let n;A[0]===s?n=A[1]:(n=ke(s),A[0]=s,A[1]=n);let k=n,R;A[2]!==o||A[3]!==G?(R=()=>o({type:"toggle",isOpen:!G}),A[2]=o,A[3]=G,A[4]=R):R=A[4];let i;A[5]!==G||A[6]!==k||A[7]!==R?(i=(0,r.jsx)(Ja,{isOpen:G,width:k,toggle:R}),A[5]=G,A[6]=k,A[7]=R,A[8]=i):i=A[8];let l;A[9]===k?l=A[10]:(l=(0,r.jsx)("div",{className:"absolute top-3 left-4 flex items-center z-50",children:(0,r.jsx)(Ha,{openWidth:k})}),A[9]=k,A[10]=l);let c;return A[11]!==e||A[12]!==i||A[13]!==l?(c=(0,r.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 za=B();const $a=a=>{let A=(0,za.c)(17),{width:e,connection:t,isRunning:o,children:G}=a,s=t.state,n;A[0]===o?n=A[1]:(n=(0,r.jsx)(Ea,{isRunning:o}),A[0]=o,A[1]=n);let k;A[2]!==t||A[3]!==o?(k=(0,r.jsx)(Ca,{connection:t,isRunning:o}),A[2]=t,A[3]=o,A[4]=k):k=A[4];let R;A[5]!==s||A[6]!==e?(R=f("mathjax_ignore",De(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]=R):R=A[7];let i;A[8]!==G||A[9]!==s||A[10]!==R||A[11]!==e?(i=(0,r.jsx)(fa,{children:(0,r.jsx)(qa,{children:(0,r.jsx)("div",{id:"App","data-config-width":e,"data-connection-state":s,className:R,children:G})})}),A[8]=G,A[9]=s,A[10]=R,A[11]=e,A[12]=i):i=A[12];let l;return A[13]!==n||A[14]!==k||A[15]!==i?(l=(0,r.jsxs)(r.Fragment,{children:[n,k,i]}),A[13]=n,A[14]=k,A[15]=i,A[16]=l):l=A[16],l};function At(a){return a.kind==="missing"}function SA(a){return a.kind==="installing"}var{valueAtom:et,useActions:at}=je(()=>({packageAlert:null,startupLogsAlert:null,packageLogs:{}}),{addPackageAlert:(a,A)=>{var o;let e={...a.packageLogs};if(SA(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)||Ve();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 tt=()=>j(et);function FA(){return at()}var QA=B();const LA=(0,u.memo)(a=>{let A=(0,QA.c)(11),{appConfig:e,mode:t,children:o}=a,{selectedLayout:G,layoutData:s}=Fe(),n=j(wA);if(t==="edit"&&!n)return o;let k;if(A[0]!==t||A[1]!==G){k=G;let c=new URLSearchParams(window.location.search);if(t==="read"&&c.has(oA.viewAs)){let g=c.get(oA.viewAs);Ra.includes(g)&&(k=g)}A[0]=t,A[1]=G,A[2]=k}else k=A[2];let R;A[3]===k?R=A[4]:(R=Le.find(c=>c.type===k),A[3]=k,A[4]=R);let i=R;if(!i)return o;let l;return A[5]!==e||A[6]!==k||A[7]!==s||A[8]!==t||A[9]!==i?(l=(0,r.jsx)(Gt,{appConfig:e,mode:t,plugin:i,layoutData:s,finalLayout:k}),A[5]=e,A[6]=k,A[7]=s,A[8]=t,A[9]=i,A[10]=l):l=A[10],l});LA.displayName="CellsRenderer";const Gt=a=>{let A=(0,QA.c)(18),{appConfig:e,mode:t,plugin:o,layoutData:G,finalLayout:s}=a,n=WA(),{setCurrentLayoutData:k}=xA(),R,i,l,c,g;if(A[0]!==e||A[1]!==s||A[2]!==G||A[3]!==t||A[4]!==n||A[5]!==o){let w=ae(n);R=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]=n,A[5]=o,A[6]=R,A[7]=i,A[8]=l,A[9]=c,A[10]=g}else R=A[6],i=A[7],l=A[8],c=A[9],g=A[10];let h;return A[11]!==R||A[12]!==k||A[13]!==i||A[14]!==l||A[15]!==c||A[16]!==g?(h=(0,r.jsx)(R,{appConfig:i,mode:l,cells:c,layout:g,setLayout:k}),A[11]=R,A[12]=k,A[13]=i,A[14]=l,A[15]=c,A[16]=g,A[17]=h):h=A[17],h};var ot=class PA{constructor(A){GA(this,"hasStarted",!1);GA(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=>{D.warn(o)})});this.uiElementRegistry=A}static get INSTANCE(){let A="_marimo_private_RuntimeState";return window[A]||(window[A]=new PA(S)),window[A]}get sendComponentValues(){if(!this._sendComponentValues)throw Error("sendComponentValues is not set");return this._sendComponentValues}start(A){if(this.hasStarted){D.warn("RuntimeState already started");return}this._sendComponentValues=A,document.addEventListener(YA.TYPE,this.handleReadyEvent),this.hasStarted=!0}stop(){if(!this.hasStarted){D.warn("RuntimeState already stopped");return}document.removeEventListener(YA.TYPE,this.handleReadyEvent),this.hasStarted=!1}};function st(a){if(a.static)return Be.empty();if(sA())return pe();let A=a.url;return new na(A,void 0,{maxRetries:10,debug:!1,startClosed:!0,connectionTimeout:1e4})}function rt(a){let{onOpen:A,onMessage:e,onClose:t,onError:o,waitToConnect:G}=a,[s]=(0,u.useState)(()=>{let n=st(a);return n.addEventListener("open",A),n.addEventListener("close",t),n.addEventListener("error",o),n.addEventListener("message",e),n});return(0,u.useEffect)(()=>(s.readyState===WebSocket.CLOSED&&G().then(()=>s.reconnect()).catch(n=>{D.error("Healthy connection never made",n),s.close()}),()=>{D.warn("useConnectionTransport is unmounting. This likely means there is a bug."),s.close(),s.removeEventListener("open",A),s.removeEventListener("close",t),s.removeEventListener("error",o),s.removeEventListener("message",e)}),[s]),s}function nt(a){let{codes:A,names:e,configs:t,cell_ids:o,last_executed_code:G,last_execution_time:s}=a,n=G||{},k=s||{};return A.map((R,i)=>{let l=o[i],c=n[l];return XA({id:l,code:R,edited:c?c!==R:!1,name:e[i],lastCodeRun:n[l]??null,lastExecutionTime:k[l]??null,config:t[i]})})}function kt(a,A,e){let t=Qe(),{layout:o}=a;if(o){let G=o.type,s=Pe({type:G,data:o.data,cells:A});t.selectedLayout=G,t.layoutData[G]=s,e({layoutView:G,data:s})}return t}function Rt(){let a=[],A=[];return S.entries.forEach((e,t)=>{a.push(t),A.push(e.value)}),{objectIds:a,values:A}}function it(a,A){let{existingCells:e,autoInstantiate:t,setCells:o,setLayoutData:G,setAppConfig:s,setCapabilities:n,setKernelState:k,onError:R}=A,{resumed:i,ui_values:l,app_config:c,capabilities:g,auto_instantiated:h}=a,w=e&&e.length>0,y=w&&!i?e:nt(a);o(y,kt(a,y,G));let v=xe.safeParse(c);if(v.success?s(v.data):D.error("Failed to parse app config",v.error),n(g),h)return;if(i){for(let[Y,m]of mA.entries(l||{}))S.set(Y,m);return}let{objectIds:b,values:M}=Rt(),N=w?Object.fromEntries(e.map(Y=>[Y.id,Y.code])):void 0;Se().sendInstantiate({objectIds:b,values:M,autoRun:t,codes:N}).then(()=>{k({isInstantiated:!0,error:null})}).catch(Y=>{k({isInstantiated:!1,error:Y}),R(Error("Failed to instantiate",{cause:Y}))})}function lt(a){let A=a.cell_id;S.removeElementsByCell(A),pA.INSTANCE.removeForCellId(A)}function Zt(a,A){A(a),pA.INSTANCE.track(a)}const W={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 ct=B();function gt(){return Object.values(BA().cellData).filter(a=>a.id!==zA)}function ht(a){let A=(0,ct.c)(37),e=(0,u.useRef)(!0),{autoInstantiate:t,sessionId:o,setCells:G}=a,{showBoundary:s}=be(),{handleCellMessage:n,setCellCodes:k,setCellIds:R}=oe(),{addCellNotification:i}=ia(),l=_(Ue),c=we(),{setVariables:g,setMetadata:h}=Ge(),{addColumnPreview:w}=dA(),{addDatasets:y,filterDatasetsFromVariables:v}=dA(),{addDataSourceConnection:b,filterDataSourcesFromVariables:M}=ee(),{setLayoutData:N}=xA(),[Y,m]=hA(ve),{addBanner:q}=fe(),{addPackageAlert:P,addStartupLog:z}=FA(),$=_(wA),AA=_($A),E=Ee(),eA=_(ra),aA=_(Ye),O;A[0]!==q||A[1]!==i||A[2]!==w||A[3]!==b||A[4]!==y||A[5]!==P||A[6]!==z||A[7]!==t||A[8]!==M||A[9]!==v||A[10]!==n||A[11]!==c||A[12]!==eA||A[13]!==AA||A[14]!==k||A[15]!==R||A[16]!==G||A[17]!==aA||A[18]!==l||A[19]!==$||A[20]!==N||A[21]!==h||A[22]!==g||A[23]!==s?(O=d=>{let Z=te(d.data);switch(Z.data.op){case"reload":CA();return;case"kernel-ready":{let p=gt();it(Z.data,{autoInstantiate:t,setCells:G,setLayoutData:N,setAppConfig:c,setCapabilities:AA,setKernelState:l,onError:s,existingCells:p}),$(Z.data.kiosk);return}case"completed-run":return;case"interrupted":return;case"kernel-startup-error":aA(Z.data.error);return;case"send-ui-element-message":{let p=Z.data.ui_element;if(p){let OA=Ie(Z.data);S.broadcastMessage(p,Z.data.message,OA)}return}case"model-lifecycle":Ze(le,Z.data);return;case"remove-ui-elements":lt(Z.data);return;case"completion-result":Ae.resolve(Z.data.completion_id,Z.data);return;case"function-call-result":ce.resolve(Z.data.function_call_id,Z.data);return;case"cell-op":{Zt(Z.data,n);let p=BA().cellData[Z.data.cell_id];if(!p)return;i({cellNotification:Z.data,code:p.code});return}case"variables":g(Z.data.variables.map(mt)),v(Z.data.variables.map(Yt)),M(Z.data.variables.map(ut));return;case"variable-values":h(Z.data.variables.map(Bt));return;case"alert":nA({title:Z.data.title,description:ta({html:Z.data.description}),variant:Z.data.variant});return;case"banner":q(Z.data);return;case"missing-package-alert":P({...Z.data,kind:"missing"});return;case"installing-package-alert":P({...Z.data,kind:"installing"});return;case"startup-logs":z({content:Z.data.content,status:Z.data.status});return;case"query-params-append":W.append(Z.data);return;case"query-params-set":W.set(Z.data);return;case"query-params-delete":W.delete(Z.data);return;case"query-params-clear":W.clear();return;case"datasets":y(Z.data);return;case"data-column-preview":w(Z.data);return;case"sql-table-preview":VA.resolve(Z.data.request_id,Z.data);return;case"sql-table-list-preview":UA.resolve(Z.data.request_id,Z.data);return;case"validate-sql-result":qA.resolve(Z.data.request_id,Z.data);return;case"secret-keys-result":ka.resolve(Z.data.request_id,Z.data);return;case"cache-info":eA(Z.data);return;case"cache-cleared":return;case"data-source-connections":b({connections:Z.data.connections.map(dt)});return;case"reconnected":return;case"focus-cell":JA(Z.data.cell_id);return;case"update-cell-codes":k({codes:Z.data.codes,ids:Z.data.cell_ids,codeIsStale:Z.data.code_is_stale});return;case"update-cell-ids":R({cellIds:Z.data.cell_ids});return;default:re(Z.data)}},A[0]=q,A[1]=i,A[2]=w,A[3]=b,A[4]=y,A[5]=P,A[6]=z,A[7]=t,A[8]=M,A[9]=v,A[10]=n,A[11]=c,A[12]=eA,A[13]=AA,A[14]=k,A[15]=R,A[16]=G,A[17]=aA,A[18]=l,A[19]=$,A[20]=N,A[21]=h,A[22]=g,A[23]=s,A[24]=O):O=A[24];let tA=O,ZA=(d,Z)=>{e.current&&(e.current=!1,V.reconnect(d,Z))},T;A[25]===Symbol.for("react.memo_cache_sentinel")?(T=fA(),A[25]=T):T=A[25];let I;A[26]!==E||A[27]!==o?(I=()=>E.getWsURL(o).toString(),A[26]=E,A[27]=o,A[28]=I):I=A[28];let K;A[29]===m?K=A[30]:(K=async()=>{e.current=!0,m({state:x.OPEN})},A[29]=m,A[30]=K);let H;A[31]===E?H=A[32]:(H=async()=>{fA()||sA()||E.isSameOrigin||await E.waitForHealthy()},A[31]=E,A[32]=H);let U;A[33]===tA?U=A[34]:(U=d=>{try{tA(d)}catch(Z){let p=Z;D.error("Failed to handle message",d.data,p),nA({title:"Failed to handle message",description:bA(p),variant:"danger"})}},A[33]=tA,A[34]=U);let V=rt({static:T,url:I,onOpen:K,waitToConnect:H,onMessage:U,onClose:d=>{switch(D.warn("WebSocket closed",d.code,d.reason),d.reason){case"MARIMO_ALREADY_CONNECTED":m({state:x.CLOSED,code:F.ALREADY_RUNNING,reason:"another browser tab is already connected to the kernel",canTakeover:!0}),V.close();return;case"MARIMO_WRONG_KERNEL_ID":case"MARIMO_NO_FILE_KEY":case"MARIMO_NO_SESSION_ID":case"MARIMO_NO_SESSION":case"MARIMO_SHUTDOWN":m({state:x.CLOSED,code:F.KERNEL_DISCONNECTED,reason:"kernel not found"}),V.close();return;case"MARIMO_MALFORMED_QUERY":m({state:x.CLOSED,code:F.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"){m({state:x.CLOSED,code:F.KERNEL_STARTUP_ERROR,reason:"Failed to start kernel sandbox"}),V.close();return}m({state:x.CONNECTING}),ZA(d.code,d.reason)}},onError:d=>{D.warn("WebSocket error",d),m({state:x.CLOSED,code:F.KERNEL_DISCONNECTED,reason:"kernel not found"}),ZA()}}),X;return A[35]===Y?X=A[36]:(X={connection:Y},A[35]=Y,A[36]=X),X}function dt(a){return{...a,name:a.name}}function Bt(a){return{name:a.name,dataType:a.datatype,value:a.value}}function ut(a){return a.name}function Yt(a){return a.name}function mt(a){return{name:a.name,declaredBy:a.declared_by,usedBy:a.used_by}}var ft=B();const pt=a=>{let A=(0,ft.c)(2),{children:e}=a,t;return A[0]===e?t=A[1]:(t=(0,r.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{SA as a,tt as c,MA as d,LA as i,$a as l,ht as n,At as o,ot as r,FA as s,pt as t,ua as u};
import{s as F}from"./chunk-LvLJmgfZ.js";import{u as J}from"./useEvent-BhXAndur.js";import{t as G}from"./react-Bj1aDYRI.js";import{Kr as H,b as ee,w as te}from"./cells-DPp5cDaO.js";import"./react-dom-CSu739Rf.js";import{t as V}from"./compiler-runtime-B3qBwwSJ.js";import"./tooltip-DxKBXCGp.js";import{w as re}from"./utilities.esm-MA1QpjVT.js";import{n as Y}from"./constants-B6Cb__3x.js";import{S as se,d as oe}from"./config-Q0O7_stz.js";import{t as ae}from"./jsx-runtime-ZmTK25f3.js";import{n as ie,t as $}from"./button-CZ3Cs4qb.js";import{t as le}from"./cn-BKtXLv3a.js";import"./dist-DBwNzi3C.js";import{E as me,Y as M}from"./JsonOutput-PE5ko4gi.js";import"./cjs-CH5Rj0g8.js";import"./main-U5Goe76G.js";import"./useNonce-CS26E0hA.js";import{r as ne}from"./requests-B4FYHTZl.js";import"./layout-_O8thjaV.js";import{t as ce}from"./arrow-left-VDC1u5rq.js";import{r as de}from"./download-os8QlW6l.js";import"./markdown-renderer-DJy8ww5d.js";import{t as pe}from"./copy-D-8y6iMN.js";import{t as he}from"./download-Dg7clfkc.js";import{i as fe,l as xe,n as be,r as Q,t as ye,u as je}from"./panels-IsIZwIow.js";import{t as ue}from"./spinner-DA8-7wQv.js";import"./dist-bBwmhqty.js";import"./dist-Btv5Rh1v.js";import"./dist-Dcqqg9UU.js";import"./dist-sMh6mJ2d.js";import"./dist-CoCQUAeM.js";import{t as ge}from"./use-toast-BDYuj3zG.js";import{t as ke}from"./session-BOFn9QrD.js";import"./Combination-BAEdC-rz.js";import"./dates-CrvjILe3.js";import{a as _e,c as Ne,l as we,n as ve,r as Se,t as Ce}from"./dialog-eb-NieZw.js";import"./popover-CH1FzjxU.js";import{t as ze}from"./share-ipf2hrOh.js";import"./vega-loader.browser-DXARUlxo.js";import"./defaultLocale-JieDVWC_.js";import"./defaultLocale-BLne0bXb.js";import{t as Ee}from"./copy-DHrHayPa.js";import"./purify.es-DZrAQFIu.js";import{a as Ie}from"./cell-link-B9b7J8QK.js";import"./chunk-5FQGJX7Z-DPlx2kjA.js";import"./katex-CDLTCvjQ.js";import"./html-to-image-CIQqSu-S.js";import"./esm-Bmu2DhPy.js";import{n as Pe,t as Ae}from"./react-resizable-panels.browser.esm-Da3ksQXL.js";import"./name-cell-input-Bc7geMVf.js";import{t as Re}from"./icon-32x32-DH9kM4Sh.js";import"./ws-DcVtI9Wj.js";import"./dist-tLOz534J.js";import"./dist-C5H5qIvq.js";import"./dist-B62Xo7-b.js";import"./dist-BpuNldXk.js";import"./dist-8kKeYgOg.js";import"./dist-BZWmfQbq.js";import"./dist-DLgWirXg.js";import"./dist-CF4gkF4y.js";import"./dist-CNW1zLeq.js";import"./esm-D82gQH1f.js";var Te=V(),Be=F(G(),1),t=F(ae(),1);const We=o=>{let e=(0,Te.c)(25),{appConfig:s}=o,{setCells:r}=te(),{sendComponentValues:y}=ne(),c;e[0]===y?c=e[1]:(c=()=>(Q.INSTANCE.start(y),Le),e[0]=y,e[1]=c);let a;e[2]===Symbol.for("react.memo_cache_sentinel")?(a=[],e[2]=a):a=e[2],(0,Be.useEffect)(c,a);let i;e[3]===Symbol.for("react.memo_cache_sentinel")?(i=ke(),e[3]=i):i=e[3];let j;e[4]===r?j=e[5]:(j={autoInstantiate:!0,setCells:r,sessionId:i},e[4]=r,e[5]=j);let{connection:l}=be(j),N=J(ee),u;e[6]===l.state?u=e[7]:(u=oe(l.state),e[6]=l.state,e[7]=u);let x=u,d;e[8]!==s||e[9]!==x?(d=()=>x?(0,t.jsxs)(me,{milliseconds:2e3,fallback:null,children:[(0,t.jsx)(ue,{className:"mx-auto"}),(0,t.jsx)("p",{className:"text-center text-sm text-muted-foreground mt-2",children:"Connecting..."})]}):(0,t.jsx)(fe,{appConfig:s,mode:"read"}),e[8]=s,e[9]=x,e[10]=d):d=e[10];let b=d,m;e:{if(typeof window>"u"){m=null;break e}let f,n;if(e[11]===Symbol.for("react.memo_cache_sentinel")){if(n=new URL(window.location.href),!n.searchParams.has("file")){m=null;break e}n.searchParams.delete("file"),f=n.searchParams.toString(),e[11]=f,e[12]=n,e[13]=m}else f=e[11],n=e[12],m=e[13];let w=f;m=w?`${n.pathname}?${w}`:n.pathname}let g=m,v=s.width,k;e[14]===Symbol.for("react.memo_cache_sentinel")?(k=g&&(0,t.jsx)("div",{className:"flex items-center px-6 pt-4 sm:-mt-8",children:(0,t.jsxs)("a",{href:g,"aria-label":"Back to gallery",className:le(ie({variant:"text",size:"sm"}),"gap-2 px-0 text-muted-foreground hover:text-foreground"),children:[(0,t.jsx)(ce,{className:"size-4","aria-hidden":!0}),(0,t.jsx)("span",{children:"Back"})]})}),e[14]=k):k=e[14];let p;e[15]===l?p=e[16]:(p=(0,t.jsx)(je,{connection:l,className:"sm:pt-8",children:k}),e[15]=l,e[16]=p);let h;e[17]===b?h=e[18]:(h=b(),e[17]=b,e[18]=h);let _;return e[19]!==s.width||e[20]!==l||e[21]!==N||e[22]!==p||e[23]!==h?(_=(0,t.jsxs)(xe,{connection:l,isRunning:N,width:v,children:[p,h]}),e[19]=s.width,e[20]=l,e[21]=N,e[22]=p,e[23]=h,e[24]=_):_=e[24],_};function Le(){Q.INSTANCE.stop()}var X=V();const Oe=()=>{let o=(0,X.c)(3),e=J(H);if(!M()||!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:Y.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)(Ue,{code:e})})]}),o[1]=e,o[2]=r),r};var Ue=o=>{let e=(0,X.c)(78),{code:s}=o,r=Ie()||"notebook.py",y=r.lastIndexOf("/");y!==-1&&(r=r.slice(y+1));let c=window.location.href,a,i,j,l,N,u,x,d,b,m,g,v,k,p,h,_,f,n,w;if(e[0]!==s||e[1]!==r){let q=ze({code:s});l=Ce,e[21]===Symbol.for("react.memo_cache_sentinel")?(g=(0,t.jsx)(we,{asChild:!0,children:(0,t.jsx)($,{"data-testid":"static-notebook-dialog-trigger",variant:"outline",size:"xs",children:"Run or Edit"})}),e[21]=g):g=e[21],j=ve,i=_e,e[22]===r?m=e[23]:(m=(0,t.jsx)(Ne,{children:r}),e[22]=r,e[23]=m),a=Se,u="pt-3 text-left space-y-3",e[24]===Symbol.for("react.memo_cache_sentinel")?(x=(0,t.jsxs)("p",{children:["This is a static"," ",(0,t.jsx)("a",{href:Y.githubPage,target:"_blank",className:"text-(--sky-11) hover:underline font-medium",children:"marimo"})," ","notebook. To run interactively:"]}),e[24]=x):x=e[24];let K;e[25]===Symbol.for("react.memo_cache_sentinel")?(K=(0,t.jsx)("br",{}),e[25]=K):K=e[25],e[26]===r?d=e[27]:(d=(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",K,"marimo edit ",r]})}),e[26]=r,e[27]=d),e[28]===Symbol.for("react.memo_cache_sentinel")?(b=!c.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[28]=b):b=e[28],w="pt-3 border-t border-(--sky-7)",_="text-sm text-(--sky-12) mb-2",e[29]===Symbol.for("react.memo_cache_sentinel")?(f=(0,t.jsx)("strong",{children:"Try in browser with WebAssembly:"}),e[29]=f):f=e[29],n=" ",N=q,v="_blank",k="text-(--sky-11) hover:underline break-all",p="noreferrer",h=q.slice(0,50),e[0]=s,e[1]=r,e[2]=a,e[3]=i,e[4]=j,e[5]=l,e[6]=N,e[7]=u,e[8]=x,e[9]=d,e[10]=b,e[11]=m,e[12]=g,e[13]=v,e[14]=k,e[15]=p,e[16]=h,e[17]=_,e[18]=f,e[19]=n,e[20]=w}else a=e[2],i=e[3],j=e[4],l=e[5],N=e[6],u=e[7],x=e[8],d=e[9],b=e[10],m=e[11],g=e[12],v=e[13],k=e[14],p=e[15],h=e[16],_=e[17],f=e[18],n=e[19],w=e[20];let S;e[30]!==N||e[31]!==v||e[32]!==k||e[33]!==p||e[34]!==h?(S=(0,t.jsxs)("a",{href:N,target:v,className:k,rel:p,children:[h,"..."]}),e[30]=N,e[31]=v,e[32]=k,e[33]=p,e[34]=h,e[35]=S):S=e[35];let C;e[36]!==S||e[37]!==_||e[38]!==f||e[39]!==n?(C=(0,t.jsxs)("p",{className:_,children:[f,n,S]}),e[36]=S,e[37]=_,e[38]=f,e[39]=n,e[40]=C):C=e[40];let L;e[41]===Symbol.for("react.memo_cache_sentinel")?(L=(0,t.jsx)("p",{className:"text-sm text-(--sky-12)",children:"Note: WebAssembly may not work for all notebooks. Additionally, some dependencies may not be available in the browser."}),e[41]=L):L=e[41];let z;e[42]!==C||e[43]!==w?(z=(0,t.jsxs)("div",{className:w,children:[C,L]}),e[42]=C,e[43]=w,e[44]=z):z=e[44];let E;e[45]!==a||e[46]!==u||e[47]!==x||e[48]!==d||e[49]!==b||e[50]!==z?(E=(0,t.jsxs)(a,{className:u,children:[x,d,b,z]}),e[45]=a,e[46]=u,e[47]=x,e[48]=d,e[49]=b,e[50]=z,e[51]=E):E=e[51];let I;e[52]!==i||e[53]!==m||e[54]!==E?(I=(0,t.jsxs)(i,{children:[m,E]}),e[52]=i,e[53]=m,e[54]=E,e[55]=I):I=e[55];let P;e[56]===s?P=e[57]:(P=async()=>{await Ee(s),ge({title:"Copied to clipboard"})},e[56]=s,e[57]=P);let O;e[58]===Symbol.for("react.memo_cache_sentinel")?(O=(0,t.jsx)(pe,{className:"w-3 h-3 mr-2"}),e[58]=O):O=e[58];let A;e[59]===P?A=e[60]:(A=(0,t.jsxs)($,{"data-testid":"copy-static-notebook-dialog-button",variant:"outline",size:"sm",onClick:P,children:[O,"Copy code"]}),e[59]=P,e[60]=A);let R;e[61]!==s||e[62]!==r?(R=()=>{de(new Blob([s],{type:"text/plain"}),r)},e[61]=s,e[62]=r,e[63]=R):R=e[63];let U;e[64]===Symbol.for("react.memo_cache_sentinel")?(U=(0,t.jsx)(he,{className:"w-3 h-3 mr-2"}),e[64]=U):U=e[64];let T;e[65]===R?T=e[66]:(T=(0,t.jsxs)($,{"data-testid":"download-static-notebook-dialog-button",variant:"outline",size:"sm",onClick:R,children:[U,"Download"]}),e[65]=R,e[66]=T);let B;e[67]!==A||e[68]!==T?(B=(0,t.jsxs)("div",{className:"flex gap-3 pt-2",children:[A,T]}),e[67]=A,e[68]=T,e[69]=B):B=e[69];let W;e[70]!==j||e[71]!==I||e[72]!==B?(W=(0,t.jsxs)(j,{children:[I,B]}),e[70]=j,e[71]=I,e[72]=B,e[73]=W):W=e[73];let D;return e[74]!==l||e[75]!==g||e[76]!==W?(D=(0,t.jsxs)(l,{children:[g,W]}),e[74]=l,e[75]=g,e[76]=W,e[77]=D):D=e[77],D},Z=V(),De=se()||M(),Ke=o=>{let e=(0,Z.c)(9),s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=(0,t.jsx)(Oe,{}),e[0]=s):s=e[0];let r;e[1]===o.appConfig?r=e[2]:(r=(0,t.jsx)(We,{appConfig:o.appConfig}),e[1]=o.appConfig,e[2]=r);let y;e[3]===Symbol.for("react.memo_cache_sentinel")?(y=De&&(0,t.jsx)(Ve,{}),e[3]=y):y=e[3];let c;e[4]===r?c=e[5]:(c=(0,t.jsxs)(Ae,{children:[s,r,y]}),e[4]=r,e[5]=c);let a;e[6]===Symbol.for("react.memo_cache_sentinel")?(a=(0,t.jsx)(re,{}),e[6]=a):a=e[6];let i;return e[7]===c?i=e[8]:(i=(0,t.jsx)(ye,{children:(0,t.jsxs)(Pe,{direction:"horizontal",autoSaveId:"marimo:chrome:v1:run1",children:[c,a]})}),e[7]=c,e[8]=i),i},Ve=()=>{let o=(0,Z.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:Y.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)("img",{src:Re,alt:"marimo",className:"h-4 w-auto"})]})}),o[0]=e):e=o[0],e},Ye=Ke;export{Ye as default};
var Ct=Object.defineProperty;var _e=t=>{throw TypeError(t)};var _t=(t,e,n)=>e in t?Ct(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var a=(t,e,n)=>_t(t,typeof e!="symbol"?e+"":e,n),ce=(t,e,n)=>e.has(t)||_e("Cannot "+n);var u=(t,e,n)=>(ce(t,e,"read from private field"),n?n.call(t):e.get(t)),N=(t,e,n)=>e.has(t)?_e("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),P=(t,e,n,r)=>(ce(t,e,"write to private field"),r?r.call(t,n):e.set(t,n),n),ee=(t,e,n)=>(ce(t,e,"access private method"),n);var j,Z,gt,yt,le,U,z,$,q,O,Y,I,H,D,vt,xt,Et,ue;import{s as Se}from"./chunk-LvLJmgfZ.js";import{i as de,l as te,p as T,u as St}from"./useEvent-BhXAndur.js";import{t as Rt}from"./react-Bj1aDYRI.js";import{Ur as kt,Yr as Ft,b as Nt,ei as qt,mn as Mt,ti as K,y as Pt}from"./cells-DPp5cDaO.js";import{t as Re}from"./compiler-runtime-B3qBwwSJ.js";import{t as jt}from"./get-6uJrSKbw.js";import{t as At}from"./assertNever-CBU83Y6o.js";import{t as It}from"./debounce-B3mjKxHe.js";import{t as Lt}from"./_baseSet-5Rdwpmr3.js";import{d as x,p as b}from"./hotkeys-BHHWjLlp.js";import{t as Tt}from"./invariant-CAG_dYON.js";import{S as Ut}from"./utils-YqBXNpsM.js";import{S as zt}from"./config-Q0O7_stz.js";import{a as Ot}from"./switch-dWLWbbtg.js";import{n as ke}from"./globals-BgACvYmr.js";import{t as Fe}from"./ErrorBoundary-B9Ifj8Jf.js";import{t as Dt}from"./jsx-runtime-ZmTK25f3.js";import{t as Wt}from"./button-CZ3Cs4qb.js";import{t as Ht}from"./cn-BKtXLv3a.js";import{Z as Bt}from"./JsonOutput-PE5ko4gi.js";import{t as Vt}from"./createReducer-B3rBsy4P.js";import{t as me}from"./requests-B4FYHTZl.js";import{t as Ne}from"./createLucideIcon-BCdY6lG5.js";import{t as Xt}from"./x-ZP5cObgf.js";import{a as qe,l as $t,r as Me}from"./markdown-renderer-DJy8ww5d.js";import{t as Yt}from"./DeferredRequestRegistry-CMf25YiV.js";import{t as fe}from"./Deferred-DxQeE5uh.js";import{t as Pe}from"./uuid-DXdzqzcr.js";import{t as Qt}from"./use-toast-BDYuj3zG.js";import{t as je}from"./tooltip-CMQz28hC.js";import{t as Ae}from"./mode-Bn7pdJvO.js";import{n as Gt,r as Kt,t as Jt}from"./share-ipf2hrOh.js";import{r as Zt,t as en}from"./react-resizable-panels.browser.esm-Da3ksQXL.js";import{t as Ie}from"./toggle-zVW4FXNz.js";function tn(t,e,n){return t==null?t:Lt(t,e,n)}var ne=tn,nn=Ne("crosshair",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12",key:"l9bcsi"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12",key:"13hhkx"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2",key:"10w3f3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18",key:"15g9kq"}]]),rn=Ne("pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]);function sn(t){return{all:t||(t=new Map),on:function(e,n){var r=t.get(e);r?r.push(n):t.set(e,[n])},off:function(e,n){var r=t.get(e);r&&(n?r.splice(r.indexOf(n)>>>0,1):t.set(e,[]))},emit:function(e,n){var r=t.get(e);r&&r.slice().map(function(s){s(n)}),(r=t.get("*"))&&r.slice().map(function(s){s(e,n)})}}}var c=Se(Rt(),1),pe=(0,c.createContext)(null),an=t=>{let{controller:e}=(0,c.useContext)(pe),n=c.useRef(Symbol("fill"));return(0,c.useEffect)(()=>(e.mount({name:t.name,ref:n.current,children:t.children}),()=>{e.unmount({name:t.name,ref:n.current})}),[]),(0,c.useEffect)(()=>{e.update({name:t.name,ref:n.current,children:t.children})}),null},on=Object.defineProperty,ln=(t,e,n)=>e in t?on(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Le=(t,e,n)=>(ln(t,typeof e=="symbol"?e:e+"",n),n),Te=console,un=class{constructor(t){Le(this,"_bus"),Le(this,"_db"),this._bus=t,this.handleFillMount=this.handleFillMount.bind(this),this.handleFillUpdated=this.handleFillUpdated.bind(this),this.handleFillUnmount=this.handleFillUnmount.bind(this),this._db={byName:new Map,byFill:new Map}}mount(){this._bus.on("fill-mount",this.handleFillMount),this._bus.on("fill-updated",this.handleFillUpdated),this._bus.on("fill-unmount",this.handleFillUnmount)}unmount(){this._bus.off("fill-mount",this.handleFillMount),this._bus.off("fill-updated",this.handleFillUpdated),this._bus.off("fill-unmount",this.handleFillUnmount)}handleFillMount({fill:t}){let e=c.Children.toArray(t.children),n=t.name,r={fill:t,children:e,name:n},s=this._db.byName.get(n);s?(s.components.push(r),s.listeners.forEach(i=>i([...s.components]))):this._db.byName.set(n,{listeners:[],components:[r]}),this._db.byFill.set(t.ref,r)}handleFillUpdated({fill:t}){let e=this._db.byFill.get(t.ref),n=c.Children.toArray(t.children);if(e){e.children=n;let r=this._db.byName.get(e.name);if(r)r.listeners.forEach(s=>s([...r.components]));else throw Error("registration was expected to be defined")}else{Te.error("[handleFillUpdated] component was expected to be defined");return}}handleFillUnmount({fill:t}){let e=this._db.byFill.get(t.ref);if(!e){Te.error("[handleFillUnmount] component was expected to be defined");return}let n=e.name,r=this._db.byName.get(n);if(!r)throw Error("registration was expected to be defined");r.components=r.components.filter(s=>s!==e),this._db.byFill.delete(t.ref),r.listeners.length===0&&r.components.length===0?this._db.byName.delete(n):r.listeners.forEach(s=>s([...r.components]))}onComponentsChange(t,e){let n=this._db.byName.get(t);n?(n.listeners.push(e),e(n.components)):(this._db.byName.set(t,{listeners:[e],components:[]}),e([]))}getFillsByName(t){let e=this._db.byName.get(t);return e?e.components.map(n=>n.fill):[]}getChildrenByName(t){let e=this._db.byName.get(t);return e?e.components.map(n=>n.children).reduce((n,r)=>n.concat(r),[]):[]}removeOnComponentsChange(t,e){let n=this._db.byName.get(t);if(!n)throw Error("expected registration to be defined");let r=n.listeners;r.splice(r.indexOf(e),1)}},cn=Object.defineProperty,dn=(t,e,n)=>e in t?cn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,mn=(t,e,n)=>(dn(t,typeof e=="symbol"?e:e+"",n),n),Ue=class{constructor(){mn(this,"bus",sn())}mount(t){this.bus.emit("fill-mount",{fill:t})}unmount(t){this.bus.emit("fill-unmount",{fill:t})}update(t){this.bus.emit("fill-updated",{fill:t})}};function fn(t){let e=t||new Ue;return{controller:e,manager:new un(e.bus)}}var pn=({controller:t,children:e})=>{let[n]=c.useState(()=>{let r=fn(t);return r.manager.mount(),r});return c.useEffect(()=>()=>{n.manager.unmount()},[]),c.createElement(pe.Provider,{value:n},e)};function he(t,e){let[n,r]=(0,c.useState)([]),{manager:s}=(0,c.useContext)(pe);return(0,c.useEffect)(()=>(s.onComponentsChange(t,r),()=>{s.removeOnComponentsChange(t,r)}),[t]),n.flatMap((i,m)=>{let{children:l}=i;return l.map((h,v)=>{if(typeof h=="number"||typeof h=="string")throw Error("Only element children will work here");return c.cloneElement(h,{key:m.toString()+v.toString(),...e})})})}var ze=t=>{let e=he(t.name,t.childProps);if(typeof t.children=="function"){let n=t.children(e);if(c.isValidElement(n)||n===null)return n;throw Error("Slot rendered with function must return a valid React Element.")}return e};const hn=T(null);var{valueAtom:gn,useActions:yn}=Vt(()=>({banners:[]}),{addBanner:(t,e)=>({...t,banners:[...t.banners,{...e,id:Pe()}]}),removeBanner:(t,e)=>({...t,banners:t.banners.filter(n=>n.id!==e)}),clearBanners:t=>({...t,banners:[]})});const bn=()=>St(gn);function wn(){return yn()}const vn=new Ue,re={SIDEBAR:"sidebar",CONTEXT_AWARE_PANEL:"context-aware-panel"};var xn=class{constructor(){a(this,"subscriptions",new Map)}addSubscription(t,e){var n;this.subscriptions.has(t)||this.subscriptions.set(t,new Set),(n=this.subscriptions.get(t))==null||n.add(e)}removeSubscription(t,e){var n;(n=this.subscriptions.get(t))==null||n.delete(e)}notify(t,e){for(let n of this.subscriptions.get(t)??[])n(e)}},Oe=class Ce{constructor(e){a(this,"subscriptions",new xn);this.producer=e}static withProducerCallback(e){return new Ce(e)}static empty(){return new Ce}startProducer(){this.producer&&this.producer(e=>{this.subscriptions.notify("message",e)})}connect(){return new Promise(e=>setTimeout(e,0)).then(()=>{this.subscriptions.notify("open",new Event("open"))})}get readyState(){return WebSocket.OPEN}reconnect(e,n){this.close(),this.connect()}close(){this.subscriptions.notify("close",new Event("close"))}send(e){return this.subscriptions.notify("message",new MessageEvent("message",{data:e})),Promise.resolve()}addEventListener(e,n){this.subscriptions.addSubscription(e,n),e==="open"&&n(new Event("open")),e==="message"&&this.startProducer()}removeEventListener(e,n){this.subscriptions.removeSubscription(e,n)}},En=1e10,Cn=1e3;function se(t,e){let n=t.map(r=>`"${r}"`).join(", ");return Error(`This RPC instance cannot ${e} because the transport did not provide one or more of these methods: ${n}`)}function _n(t={}){let e={};function n(o){e=o}let r={};function s(o){var f;r.unregisterHandler&&r.unregisterHandler(),r=o,(f=r.registerHandler)==null||f.call(r,G)}let i;function m(o){if(typeof o=="function"){i=o;return}i=(f,y)=>{let d=o[f];if(d)return d(y);let g=o._;if(!g)throw Error(`The requested method has no handler: ${f}`);return g(f,y)}}let{maxRequestTime:l=Cn}=t;t.transport&&s(t.transport),t.requestHandler&&m(t.requestHandler),t._debugHooks&&n(t._debugHooks);let h=0;function v(){return h<=En?++h:h=0}let E=new Map,w=new Map;function _(o,...f){let y=f[0];return new Promise((d,g)=>{var V;if(!r.send)throw se(["send"],"make requests");let A=v(),W={type:"request",id:A,method:o,params:y};E.set(A,{resolve:d,reject:g}),l!==1/0&&w.set(A,setTimeout(()=>{w.delete(A),g(Error("RPC request timed out."))},l)),(V=e.onSend)==null||V.call(e,W),r.send(W)})}let S=new Proxy(_,{get:(o,f,y)=>f in o?Reflect.get(o,f,y):d=>_(f,d)}),R=S;function k(o,...f){var g;let y=f[0];if(!r.send)throw se(["send"],"send messages");let d={type:"message",id:o,payload:y};(g=e.onSend)==null||g.call(e,d),r.send(d)}let F=new Proxy(k,{get:(o,f,y)=>f in o?Reflect.get(o,f,y):d=>k(f,d)}),C=F,M=new Map,L=new Set;function B(o,f){var y;if(!r.registerHandler)throw se(["registerHandler"],"register message listeners");if(o==="*"){L.add(f);return}M.has(o)||M.set(o,new Set),(y=M.get(o))==null||y.add(f)}function Q(o,f){var y,d;if(o==="*"){L.delete(f);return}(y=M.get(o))==null||y.delete(f),((d=M.get(o))==null?void 0:d.size)===0&&M.delete(o)}async function G(o){var f,y;if((f=e.onReceive)==null||f.call(e,o),!("type"in o))throw Error("Message does not contain a type.");if(o.type==="request"){if(!r.send||!i)throw se(["send","requestHandler"],"handle requests");let{id:d,method:g,params:A}=o,W;try{W={type:"response",id:d,success:!0,payload:await i(g,A)}}catch(V){if(!(V instanceof Error))throw V;W={type:"response",id:d,success:!1,error:V.message}}(y=e.onSend)==null||y.call(e,W),r.send(W);return}if(o.type==="response"){let d=w.get(o.id);d!=null&&clearTimeout(d);let{resolve:g,reject:A}=E.get(o.id)??{};o.success?g==null||g(o.payload):A==null||A(Error(o.error));return}if(o.type==="message"){for(let g of L)g(o.id,o.payload);let d=M.get(o.id);if(!d)return;for(let g of d)g(o.payload);return}throw Error(`Unexpected RPC message type: ${o.type}`)}return{setTransport:s,setRequestHandler:m,request:S,requestProxy:R,send:F,sendProxy:C,addMessageListener:B,removeMessageListener:Q,proxy:{send:C,request:R},_setDebugHooks:n}}function Sn(t){return _n(t)}var De="[transport-id]";function Rn(t,e){let{transportId:n}=e;return n==null?t:{[De]:n,data:t}}function kn(t,e){let{transportId:n,filter:r}=e,s=r==null?void 0:r();if(n!=null&&s!=null)throw Error("Cannot use both `transportId` and `filter` at the same time");let i=t;if(n){if(t[De]!==n)return[!0];i=t.data}return s===!1?[!0]:[!1,i]}function Fn(t,e={}){let{transportId:n,filter:r,remotePort:s}=e,i=t,m=s??t,l;return{send(h){m.postMessage(Rn(h,{transportId:n}))},registerHandler(h){l=v=>{let E=v.data,[w,_]=kn(E,{transportId:n,filter:()=>r==null?void 0:r(v)});w||h(_)},i.addEventListener("message",l)},unregisterHandler(){l&&i.removeEventListener("message",l)}}}function Nn(t,e){return Fn(t,e)}function We(t){return Sn({transport:Nn(t,{transportId:"marimo-transport"}),maxRequestTime:2e4,_debugHooks:{onSend:e=>{x.debug("[rpc] Parent -> Worker",e)},onReceive:e=>{x.debug("[rpc] Worker -> Parent",e)}}})}const He=T("Initializing..."),qn=T(t=>{let e=t(Pt),n=Object.values(e.cellRuntime);return n.some(r=>!$t(r.output))?!0:n.every(r=>r.status==="idle")});var Be=Gt(),Ve="marimo:file",Xe=new kt(null);const Mn={saveFile(t){Xe.set(Ve,t)},readFile(){return Xe.get(Ve)}};var Pn={saveFile(t){K.setCodeForHash((0,Be.compressToEncodedURIComponent)(t))},readFile(){let t=K.getCodeFromHash()||K.getCodeFromSearchParam();return t?(0,Be.decompressFromEncodedURIComponent)(t):null}};const jn={saveFile(t){},readFile(){let t=document.querySelector("marimo-code");return t?decodeURIComponent(t.textContent||"").trim():null}};var An={saveFile(t){},readFile(){if(window.location.hostname!=="marimo.app")return null;let t=new URL("files/wasm-intro.py",document.baseURI);return fetch(t.toString()).then(e=>e.ok?e.text():null).catch(()=>null)}},In={saveFile(t){},readFile(){return["import marimo","app = marimo.App()","","@app.cell","def __():"," return","",'if __name__ == "__main__":'," app.run()"].join(`
`)}},$e=class{constructor(t){this.stores=t}insert(t,e){this.stores.splice(t,0,e)}saveFile(t){this.stores.forEach(e=>e.saveFile(t))}readFile(){for(let t of this.stores){let e=t.readFile();if(e)return e}return null}};const ie=new $e([jn,Pn]),ge=new $e([Mn,An,In]);var Ye=class bt{constructor(){a(this,"initialized",new fe);a(this,"sendRename",async({filename:e})=>(e===null||(K.setFilename(e),await this.rpc.proxy.request.bridge({functionName:"rename_file",payload:e})),null));a(this,"sendSave",async e=>{if(!this.saveRpc)return x.warn("Save RPC not initialized"),null;await this.saveRpc.saveNotebook(e);let n=await this.readCode();return n.contents&&(ie.saveFile(n.contents),ge.saveFile(n.contents)),this.rpc.proxy.request.saveNotebook(e).catch(r=>{x.error(r)}),null});a(this,"sendCopy",async()=>{b()});a(this,"sendStdin",async e=>(await this.rpc.proxy.request.bridge({functionName:"put_input",payload:e.text}),null));a(this,"sendPdb",async()=>{b()});a(this,"sendRun",async e=>(await this.rpc.proxy.request.loadPackages(e.codes.join(`
`)),await this.putControlRequest({type:"execute-cells",...e}),null));a(this,"sendRunScratchpad",async e=>(await this.rpc.proxy.request.loadPackages(e.code),await this.putControlRequest({type:"execute-scratchpad",...e}),null));a(this,"sendInterrupt",async()=>(this.interruptBuffer!==void 0&&(this.interruptBuffer[0]=2),null));a(this,"sendShutdown",async()=>(window.close(),null));a(this,"sendFormat",async e=>await this.rpc.proxy.request.bridge({functionName:"format",payload:e}));a(this,"sendDeleteCell",async e=>(await this.putControlRequest({type:"delete-cell",...e}),null));a(this,"sendInstallMissingPackages",async e=>(this.putControlRequest({type:"install-packages",...e}),null));a(this,"sendCodeCompletionRequest",async e=>(de.get(Nt)||await this.rpc.proxy.request.bridge({functionName:"code_complete",payload:e}),null));a(this,"saveUserConfig",async e=>(await this.rpc.proxy.request.bridge({functionName:"save_user_config",payload:e}),Ot.post("/kernel/save_user_config",e,{baseUrl:"/"}).catch(n=>(x.error(n),null))));a(this,"saveAppConfig",async e=>(await this.rpc.proxy.request.bridge({functionName:"save_app_config",payload:e}),null));a(this,"saveCellConfig",async e=>(await this.putControlRequest({type:"update-cell-config",...e}),null));a(this,"sendRestart",async()=>{let e=await this.readCode();return e.contents&&(ie.saveFile(e.contents),ge.saveFile(e.contents)),Kt(),null});a(this,"readCode",async()=>this.saveRpc?{contents:await this.saveRpc.readNotebook()}:(x.warn("Save RPC not initialized"),{contents:""}));a(this,"readSnippets",async()=>await this.rpc.proxy.request.bridge({functionName:"read_snippets",payload:void 0}));a(this,"openFile",async({path:e})=>{let n=Jt({code:null,baseUrl:window.location.origin});return window.open(n,"_blank"),null});a(this,"sendListFiles",async e=>await this.rpc.proxy.request.bridge({functionName:"list_files",payload:e}));a(this,"sendSearchFiles",async e=>await this.rpc.proxy.request.bridge({functionName:"search_files",payload:e}));a(this,"sendComponentValues",async e=>(await this.putControlRequest({type:"update-ui-element",...e,token:Pe()}),null));a(this,"sendInstantiate",async e=>null);a(this,"sendFunctionRequest",async e=>(await this.putControlRequest({type:"invoke-function",...e}),null));a(this,"sendCreateFileOrFolder",async e=>await this.rpc.proxy.request.bridge({functionName:"create_file_or_directory",payload:e}));a(this,"sendDeleteFileOrFolder",async e=>await this.rpc.proxy.request.bridge({functionName:"delete_file_or_directory",payload:e}));a(this,"sendRenameFileOrFolder",async e=>await this.rpc.proxy.request.bridge({functionName:"move_file_or_directory",payload:e}));a(this,"sendUpdateFile",async e=>await this.rpc.proxy.request.bridge({functionName:"update_file",payload:e}));a(this,"sendFileDetails",async e=>await this.rpc.proxy.request.bridge({functionName:"file_details",payload:e}));a(this,"exportAsHTML",async e=>await this.rpc.proxy.request.bridge({functionName:"export_html",payload:e}));a(this,"exportAsMarkdown",async e=>await this.rpc.proxy.request.bridge({functionName:"export_markdown",payload:e}));a(this,"previewDatasetColumn",async e=>(await this.putControlRequest({type:"preview-dataset-column",...e}),null));a(this,"previewSQLTable",async e=>(await this.putControlRequest({type:"preview-sql-table",...e}),null));a(this,"previewSQLTableList",async e=>(await this.putControlRequest({type:"list-sql-tables",...e}),null));a(this,"previewDataSourceConnection",async e=>(await this.putControlRequest({type:"list-data-source-connection",...e}),null));a(this,"validateSQL",async e=>(await this.putControlRequest({type:"validate-sql",...e}),null));a(this,"sendModelValue",async e=>(await this.putControlRequest({type:"model",...e}),null));a(this,"syncCellIds",()=>Promise.resolve(null));a(this,"addPackage",async e=>this.rpc.proxy.request.addPackage(e));a(this,"removePackage",async e=>this.rpc.proxy.request.removePackage(e));a(this,"getPackageList",async()=>await this.rpc.proxy.request.listPackages());a(this,"getDependencyTree",async()=>({tree:{dependencies:[],name:"",tags:[],version:null}}));a(this,"listSecretKeys",async e=>(await this.putControlRequest({type:"list-secret-keys",...e}),null));a(this,"getUsageStats",b);a(this,"openTutorial",b);a(this,"getRecentFiles",b);a(this,"getWorkspaceFiles",b);a(this,"getRunningNotebooks",b);a(this,"shutdownSession",b);a(this,"exportAsPDF",b);a(this,"autoExportAsHTML",b);a(this,"autoExportAsMarkdown",b);a(this,"autoExportAsIPYNB",b);a(this,"updateCellOutputs",b);a(this,"writeSecret",b);a(this,"invokeAiTool",b);a(this,"clearCache",b);a(this,"getCacheInfo",b);zt()&&(this.rpc=We(new Worker(new URL(""+new URL("worker-BPV9SmHz.js",import.meta.url).href,""+import.meta.url),{type:"module",name:ke()})),this.rpc.addMessageListener("ready",()=>{this.startSession()}),this.rpc.addMessageListener("initialized",()=>{this.saveRpc=this.getSaveWorker(),this.setInterruptBuffer(),this.initialized.resolve()}),this.rpc.addMessageListener("initializingMessage",({message:e})=>{de.set(He,e)}),this.rpc.addMessageListener("initializedError",({error:e})=>{this.initialized.status==="resolved"&&(x.error(e),Qt({title:"Error initializing",description:e,variant:"danger"})),this.initialized.reject(Error(e))}),this.rpc.addMessageListener("kernelMessage",({message:e})=>{var n;(n=this.messageConsumer)==null||n.call(this,new MessageEvent("message",{data:e}))}))}static get INSTANCE(){let e="_marimo_private_PyodideBridge";return window[e]||(window[e]=new bt),window[e]}getSaveWorker(){return Ae()==="read"?(x.debug("Skipping SaveWorker in read-mode"),{readFile:b,readNotebook:b,saveNotebook:b}):We(new Worker(new URL(""+new URL("save-worker-CtJsIYIM.js",import.meta.url).href,""+import.meta.url),{type:"module",name:ke()})).proxy.request}async startSession(){let e=await ie.readFile(),n=await ge.readFile(),r=K.getFilename(),s=de.get(Ut),i={},m=new URLSearchParams(window.location.search);for(let l of m.keys()){let h=m.getAll(l);i[l]=h.length===1?h[0]:h}await this.rpc.proxy.request.startSession({queryParameters:i,code:e||n||"",filename:r,userConfig:{...s,runtime:{...s.runtime,auto_instantiate:Ae()==="read"?!0:s.runtime.auto_instantiate}}})}setInterruptBuffer(){crossOriginIsolated?(this.interruptBuffer=new Uint8Array(new SharedArrayBuffer(1)),this.rpc.proxy.request.setInterruptBuffer(this.interruptBuffer)):x.warn("Not running in a secure context; interrupts are not available.")}attachMessageConsumer(e){this.messageConsumer=e,this.rpc.proxy.send.consumerReady({})}async putControlRequest(e){await this.rpc.proxy.request.bridge({functionName:"put_control_request",payload:e})}};function Ln(){return Oe.withProducerCallback(t=>{Ye.INSTANCE.attachMessageConsumer(t)})}function ae(t){return()=>({TYPE:t,is(e){return e.type===t},create(e){return new CustomEvent(t,e)}})}const Qe=ae("marimo-value-input")(),Ge=ae("marimo-value-update")(),Ke=ae("marimo-value-ready")(),Je=ae("marimo-incoming-message")();function Tn(t,e){return Qe.create({bubbles:!0,composed:!0,detail:{value:t,element:e}})}var Ze=class wt{static get INSTANCE(){let e="_marimo_private_UIElementRegistry";return window[e]||(window[e]=new wt),window[e]}constructor(){this.entries=new Map}has(e){return this.entries.has(e)}set(e,n){this.entries.has(e)&&x.debug("UIElementRegistry overwriting entry for objectId.",e),this.entries.set(e,{objectId:e,value:n,elements:new Set})}registerInstance(e,n){let r=this.entries.get(e);r===void 0?this.entries.set(e,{objectId:e,value:qt(n,this),elements:new Set([n])}):r.elements.add(n)}removeInstance(e,n){let r=this.entries.get(e);r!=null&&r.elements.has(n)&&r.elements.delete(n)}removeElementsByCell(e){[...this.entries.keys()].filter(n=>n.startsWith(`${e}-`)).forEach(n=>{this.entries.delete(n)})}lookupValue(e){let n=this.entries.get(e);return n===void 0?void 0:n.value}broadcastMessage(e,n,r){let s=this.entries.get(e);s===void 0?x.warn("UIElementRegistry missing entry",e):s.elements.forEach(i=>{i.dispatchEvent(Je.create({bubbles:!1,composed:!0,detail:{objectId:e,message:n,buffers:r}}))})}broadcastValueUpdate(e,n,r){let s=this.entries.get(n);s===void 0?x.warn("UIElementRegistry missing entry",n):(s.value=r,s.elements.forEach(i=>{i!==e&&i.dispatchEvent(Ge.create({bubbles:!1,composed:!0,detail:{value:r,element:i}}))}),document.dispatchEvent(Ke.create({bubbles:!0,composed:!0,detail:{objectId:n}})))}};const Un=Ze.INSTANCE,zn=new Yt("function-call-result",async(t,e)=>{await me().sendFunctionRequest({functionCallId:t,...e})}),On="68px";var Dn="288px";const Wn=t=>t?/^\d+$/.test(t)?`${t}px`:t:Dn,Hn=Ft({isOpen:!0},(t,e)=>{if(!e)return t;switch(e.type){case"toggle":return{...t,isOpen:e.isOpen??t.isOpen};case"setWidth":return{...t,width:e.width};default:return t}});function ye(t,e=[]){let n=[];if(t instanceof DataView)n.push(e);else if(Array.isArray(t))for(let[r,s]of t.entries())n.push(...ye(s,[...e,r]));else if(typeof t=="object"&&t)for(let[r,s]of Object.entries(t))n.push(...ye(s,[...e,r]));return n}function Bn(t){let e=ye(t);if(e.length===0)return{state:t,buffers:[],bufferPaths:[]};let n=structuredClone(t),r=[],s=[];for(let i of e){let m=jt(t,i);if(m instanceof DataView){let l=qe(m);r.push(l),s.push(i),ne(n,i,l)}}return{state:n,buffers:r,bufferPaths:s}}function et(t){let{state:e,bufferPaths:n,buffers:r}=t;if(!n||n.length===0)return e;r&&Tt(r.length===n.length,"Buffers and buffer paths not the same length");let s=e;for(let[i,m]of n.entries()){let l=r==null?void 0:r[i];if(l==null){x.warn("[anywidget] Could not find buffer at path",m);continue}typeof l=="string"?ne(s,m,Me(l)):ne(s,m,l)}return s}var Vn=(gt=class{constructor(t=1e4){N(this,j,new Map);N(this,Z);P(this,Z,t)}get(t){let e=u(this,j).get(t);return e||(e=new fe,u(this,j).set(t,e),setTimeout(()=>{e.status==="pending"&&(e.reject(Error(`Model not found for key: ${t}`)),u(this,j).delete(t))},u(this,Z))),e.promise}set(t,e){let n=u(this,j).get(t);n||(n=new fe,u(this,j).set(t,n)),n.resolve(e)}has(t){let e=u(this,j).get(t);return e!==void 0&&e.status==="resolved"}getSync(t){let e=u(this,j).get(t);if(e&&e.status==="resolved")return e.value}delete(t){u(this,j).delete(t)}},j=new WeakMap,Z=new WeakMap,gt),tt=Symbol("marimo"),nt={invoke:async()=>{let t="anywidget.invoke not supported in marimo. Please file an issue at https://github.com/marimo-team/marimo/issues";throw x.warn(t),Error(t)}};function J(t){return t[tt]}const be=new Vn;var Xn=(yt=tt,H=class{constructor(e,n){N(this,D);N(this,le,"change");N(this,U);N(this,z);N(this,$);N(this,q,{});N(this,O,new AbortController);N(this,Y);N(this,I);a(this,yt,{updateAndEmitDiffs:e=>ee(this,D,xt).call(this,e),emitCustomMessage:(e,n)=>ee(this,D,Et).call(this,e,n),resolveWidget:async e=>{var s;if(u(this,I)&&u(this,Y)===e)return u(this,I);u(this,I)&&u(this,Y)!==e&&(u(this,O).abort(),P(this,O,new AbortController),P(this,I,void 0)),P(this,Y,e);let n=typeof e=="function"?await e():e,r=await((s=n.initialize)==null?void 0:s.call(n,{model:this,experimental:nt}));return r&&u(this,O).signal.addEventListener("abort",r),P(this,I,async(i,m)=>{var h;let l=await((h=n.render)==null?void 0:h.call(n,{model:this,el:i,experimental:nt}));l&&AbortSignal.any([m,u(this,O).signal]).addEventListener("abort",l)}),u(this,I)},destroy:()=>{u(this,O).abort()}});a(this,"widget_manager",{async get_model(e){let n=await H._modelManager.get(e);if(!n)throw Error(`Model not found with id: ${e}. This is likely because the model was not registered.`);return n}});N(this,ue,It(()=>{let e=u(this,q)[u(this,le)];if(e)for(let n of e)try{n()}catch(r){x.error("Error emitting event",r)}},0));P(this,z,e),P(this,$,n),P(this,U,new Map)}off(e,n){var r;if(!e){P(this,q,{});return}if(!n){u(this,q)[e]=new Set;return}(r=u(this,q)[e])==null||r.delete(n)}send(e,n,r){let s=(r??[]).map(i=>i instanceof ArrayBuffer?new DataView(i):new DataView(i.buffer,i.byteOffset,i.byteLength));return u(this,$).sendCustomMessage(e,s).then(()=>n==null?void 0:n())}get(e){return u(this,z)[e]}set(e,n){P(this,z,{...u(this,z),[e]:n}),u(this,U).set(e,n),ee(this,D,vt).call(this,`change:${e}`,n),u(this,ue).call(this)}save_changes(){if(u(this,U).size===0)return;let e=Object.fromEntries(u(this,U).entries());u(this,U).clear(),u(this,$).sendUpdate(e)}on(e,n){u(this,q)[e]||(u(this,q)[e]=new Set),u(this,q)[e].add(n)}},le=new WeakMap,U=new WeakMap,z=new WeakMap,$=new WeakMap,q=new WeakMap,O=new WeakMap,Y=new WeakMap,I=new WeakMap,D=new WeakSet,vt=function(e,n){if(!u(this,q)[e])return;let r=u(this,q)[e];for(let s of r)try{s(n)}catch(i){x.error("Error emitting event",i)}},xt=function(e){e!=null&&Object.keys(e).forEach(n=>{let r=n;u(this,z)[r]!==e[r]&&this.set(r,e[r])})},Et=function(e,n=[]){let r=u(this,q)["msg:custom"];if(r)for(let s of r)try{s(e.content,n)}catch(i){x.error("Error emitting event",i)}},ue=new WeakMap,a(H,"_modelManager",be),H);async function $n(t,e){let n=e.model_id,r=e.message;x.debug("AnyWidget message",r);let s=("buffers"in r?r.buffers:[]).map(Me);switch(r.method){case"open":{let{state:i,buffer_paths:m=[]}=r,l=et({state:i,bufferPaths:m,buffers:s}),h=t.getSync(n);if(h){J(h).updateAndEmitDiffs(l);return}let v=new Xn(l,{async sendUpdate(E){let{state:w,buffers:_,bufferPaths:S}=Bn(E);await me().sendModelValue({modelId:n,message:{method:"update",state:w,bufferPaths:S},buffers:_})},async sendCustomMessage(E,w){await me().sendModelValue({modelId:n,message:{method:"custom",content:E},buffers:w.map(qe)})}});t.set(n,v);return}case"custom":J(await t.get(n)).emitCustomMessage({method:"custom",content:r.content},s);return;case"close":{let i=t.getSync(n);i&&J(i).destroy(),t.delete(n);return}case"update":{let{state:i,buffer_paths:m=[]}=r,l=et({state:i,bufferPaths:m,buffers:s});J(await t.get(n)).updateAndEmitDiffs(l);return}default:At(r)}}Mt(be,"MODEL_MANAGER");const rt=T(null),Yn=T(null),st=T(!1),Qn=T(!1),it=T(!1);var Gn=Re();const at=t=>{let e=(0,Gn.c)(8),{onResize:n,startingWidth:r,minWidth:s,maxWidth:i}=t,m=(0,c.useRef)(null),l=(0,c.useRef)(null),h=(0,c.useRef)(null),v,E;e[0]!==i||e[1]!==s||e[2]!==n?(v=()=>{let R=m.current,k=l.current,F=h.current;if(!R||!k&&!F)return;let C=Number.parseInt(window.getComputedStyle(R).width,10),M=0,L=!1,B=null,Q=d=>{if(!R||!L||!B)return;let g=d.clientX-M;M=d.clientX,C=B==="left"?C-g:C+g,s&&(C=Math.max(s,C)),i&&(C=Math.min(i,C)),R.style.width=`${C}px`},G=()=>{L&&(n==null||n(C),L=!1,B=null),document.removeEventListener("mousemove",Q),document.removeEventListener("mouseup",G)},o=(d,g)=>{d.preventDefault(),L=!0,B=g,M=d.clientX,document.addEventListener("mousemove",Q),document.addEventListener("mouseup",G)},f=d=>o(d,"left"),y=d=>o(d,"right");return k&&k.addEventListener("mousedown",f),F&&F.addEventListener("mousedown",y),()=>{k&&k.removeEventListener("mousedown",f),F&&F.removeEventListener("mousedown",y),document.removeEventListener("mousemove",Q),document.removeEventListener("mouseup",G)}},E=[s,i,n],e[0]=i,e[1]=s,e[2]=n,e[3]=v,e[4]=E):(v=e[3],E=e[4]),(0,c.useEffect)(v,E);let w;e[5]===Symbol.for("react.memo_cache_sentinel")?(w={left:l,right:h},e[5]=w):w=e[5];let _=r==="contentWidth"?"var(--content-width-medium)":`${r}px`,S;return e[6]===_?S=e[7]:(S={resizableDivRef:m,handleRefs:w,style:{width:_}},e[6]=_,e[7]=S),S};function ot(t){t||window.dispatchEvent(new Event("resize"))}var lt=Re(),p=Se(Dt(),1);const Kn=()=>{let t=(0,lt.c)(16),[e,n]=te(rt),[r,s]=te(st),[i,m]=te(Qn),[l,h]=te(it),v;t[0]!==s||t[1]!==n?(v=()=>{n(null),s(!1)},t[0]=s,t[1]=n,t[2]=v):v=t[2];let E=v;if(he(re.CONTEXT_AWARE_PANEL).length===0||!e||!r)return null;let w;t[3]!==l||t[4]!==i||t[5]!==h||t[6]!==m?(w=()=>(0,p.jsxs)("div",{className:"flex flex-row items-center gap-3",children:[(0,p.jsx)(je,{content:i?"Unpin panel":"Pin panel",children:(0,p.jsx)(Ie,{size:"xs",onPressedChange:()=>m(!i),pressed:i,"aria-label":i?"Unpin panel":"Pin panel",children:i?(0,p.jsx)(rn,{className:"w-4 h-4"}):(0,p.jsx)(Bt,{className:"w-4 h-4"})})}),(0,p.jsx)(je,{content:l?(0,p.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,p.jsx)("span",{children:"Follow focused table"}),(0,p.jsx)("span",{className:"text-xs text-muted-foreground w-64",children:"The panel updates as cells that output tables are focused. Click to fix to the current cell."})]}):(0,p.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,p.jsx)("span",{children:"Focus on current table"}),(0,p.jsx)("span",{className:"text-xs text-muted-foreground w-64",children:"The panel is focused on the current table. Click to update based on which cell is focused."})]}),children:(0,p.jsx)(Ie,{size:"xs",onPressedChange:()=>h(!l),pressed:l,"aria-label":l?"Follow focused cell":"Fixed",children:(0,p.jsx)(nn,{className:Ht("w-4 h-4",l&&"text-primary")})})})]}),t[3]=l,t[4]=i,t[5]=h,t[6]=m,t[7]=w):w=t[7];let _=w,S;t[8]!==E||t[9]!==_?(S=()=>(0,p.jsxs)("div",{className:"mt-2 pb-7 mb-4 h-full overflow-auto",children:[(0,p.jsxs)("div",{className:"flex flex-row justify-between items-center mx-2",children:[_(),(0,p.jsx)(Wt,{variant:"linkDestructive",size:"icon",onClick:E,"aria-label":"Close selection panel",children:(0,p.jsx)(Xt,{className:"w-4 h-4"})})]}),(0,p.jsx)(Fe,{children:(0,p.jsx)(ze,{name:re.CONTEXT_AWARE_PANEL})})]}),t[8]=E,t[9]=_,t[10]=S):S=t[10];let R=S;if(!i){let C;return t[11]===R?C=t[12]:(C=(0,p.jsx)(Zn,{children:R()}),t[11]=R,t[12]=C),C}let k;t[13]===Symbol.for("react.memo_cache_sentinel")?(k=(0,p.jsx)(Zt,{onDragging:ot,className:"resize-handle border-border z-20 print:hidden border-l"}),t[13]=k):k=t[13];let F;return t[14]===R?F=t[15]:(F=(0,p.jsxs)(p.Fragment,{children:[k,(0,p.jsx)(en,{defaultSize:20,minSize:15,maxSize:80,children:R()})]}),t[14]=R,t[15]=F),F},Jn=t=>{let e=(0,lt.c)(2),{children:n}=t,r;return e[0]===n?r=e[1]:(r=(0,p.jsx)(Fe,{children:(0,p.jsx)(an,{name:re.CONTEXT_AWARE_PANEL,children:n})}),e[0]=n,e[1]=r),r};var Zn=({children:t})=>{let{resizableDivRef:e,handleRefs:n,style:r}=at({startingWidth:400,minWidth:300,maxWidth:1500});return(0,p.jsxs)("div",{className:"absolute z-40 right-0 h-full bg-background flex flex-row",children:[(0,p.jsx)("div",{ref:n.left,className:"w-1 h-full cursor-col-resize border-l"}),(0,p.jsx)("div",{ref:e,style:r,children:t})]})};function er(){var t=[...arguments];return(0,c.useMemo)(()=>e=>{t.forEach(n=>n(e))},t)}var ut=typeof window<"u"&&window.document!==void 0&&window.document.createElement!==void 0;function oe(t){let e=Object.prototype.toString.call(t);return e==="[object Window]"||e==="[object global]"}function we(t){return"nodeType"in t}function X(t){var e;return t?oe(t)?t:we(t)?((e=t.ownerDocument)==null?void 0:e.defaultView)??window:window:window}function ct(t){let{Document:e}=X(t);return t instanceof e}function dt(t){return oe(t)?!1:t instanceof X(t).HTMLElement}function mt(t){return t instanceof X(t).SVGElement}function tr(t){return t?oe(t)?t.document:we(t)?ct(t)?t:dt(t)||mt(t)?t.ownerDocument:document:document:document}var ve=ut?c.useLayoutEffect:c.useEffect;function ft(t){let e=(0,c.useRef)(t);return ve(()=>{e.current=t}),(0,c.useCallback)(function(){var n=[...arguments];return e.current==null?void 0:e.current(...n)},[])}function nr(){let t=(0,c.useRef)(null);return[(0,c.useCallback)((e,n)=>{t.current=setInterval(e,n)},[]),(0,c.useCallback)(()=>{t.current!==null&&(clearInterval(t.current),t.current=null)},[])]}function rr(t,e){e===void 0&&(e=[t]);let n=(0,c.useRef)(t);return ve(()=>{n.current!==t&&(n.current=t)},e),n}function sr(t,e){let n=(0,c.useRef)();return(0,c.useMemo)(()=>{let r=t(n.current);return n.current=r,r},[...e])}function ir(t){let e=ft(t),n=(0,c.useRef)(null);return[n,(0,c.useCallback)(r=>{r!==n.current&&(e==null||e(r,n.current)),n.current=r},[])]}function ar(t){let e=(0,c.useRef)();return(0,c.useEffect)(()=>{e.current=t},[t]),e.current}var xe={};function or(t,e){return(0,c.useMemo)(()=>{if(e)return e;let n=xe[t]==null?0:xe[t]+1;return xe[t]=n,t+"-"+n},[t,e])}function pt(t){return function(e){return[...arguments].slice(1).reduce((n,r)=>{let s=Object.entries(r);for(let[i,m]of s){let l=n[i];l!=null&&(n[i]=l+t*m)}return n},{...e})}}var lr=pt(1),ur=pt(-1);function cr(t){return"clientX"in t&&"clientY"in t}function dr(t){if(!t)return!1;let{KeyboardEvent:e}=X(t.target);return e&&t instanceof e}function mr(t){if(!t)return!1;let{TouchEvent:e}=X(t.target);return e&&t instanceof e}function fr(t){if(mr(t)){if(t.touches&&t.touches.length){let{clientX:e,clientY:n}=t.touches[0];return{x:e,y:n}}else if(t.changedTouches&&t.changedTouches.length){let{clientX:e,clientY:n}=t.changedTouches[0];return{x:e,y:n}}}return cr(t)?{x:t.clientX,y:t.clientY}:null}var Ee=Object.freeze({Translate:{toString(t){if(!t)return;let{x:e,y:n}=t;return"translate3d("+(e?Math.round(e):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(t){if(!t)return;let{scaleX:e,scaleY:n}=t;return"scaleX("+e+") scaleY("+n+")"}},Transform:{toString(t){if(t)return[Ee.Translate.toString(t),Ee.Scale.toString(t)].join(" ")}},Transition:{toString(t){let{property:e,duration:n,easing:r}=t;return e+" "+n+"ms "+r}}}),ht="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function pr(t){return t.matches(ht)?t:t.querySelector(ht)}export{vn as $,Yn as A,Un as B,or as C,at as D,ot as E,On as F,Tn as G,Qe as H,Wn as I,ie as J,Ye as K,Hn as L,be as M,J as N,st as O,$n as P,re as Q,zn as R,ar as S,Jn as T,Ke as U,Je as V,Ge as W,He as X,qn as Y,Oe as Z,nr as _,fr as a,he as at,sr as b,ct as c,we as d,hn as et,mt as f,ft as g,er as h,pr as i,ze as it,it as j,rt as k,dt as l,ur as m,lr as n,wn as nt,tr as o,ne as ot,oe as p,Ln as q,ut as r,pn as rt,X as s,Ee as t,bn as tt,dr as u,ve as v,Kn as w,ir as x,rr as y,Ze as z};