marimo
Advanced tools
| # 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( |
+92
-28
| # 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 @@ |
+2
-1
@@ -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}; |
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
116134863
0.01%1839
0.05%197209
0.23%