From 00813a9c573300f8a696681c7be6f93d6f2fba03 Mon Sep 17 00:00:00 2001 From: code0xff Date: Wed, 28 Oct 2026 23:40:36 +0900 Subject: [PATCH 01/13] chore: pin the viewer's Node.js version in .nvmrc The viewer's scripts run TypeScript directly, which older Node.js releases reject, and CI uses Node.js 26. Pinning it lets nvm select the same version locally. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry --- .nvmrc | 1 + docs/getting-started.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..6f4247a6 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +26 diff --git a/docs/getting-started.md b/docs/getting-started.md index 23f6ea60..0dbb7fbc 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -77,7 +77,7 @@ cargo clippy --all-targets --all-features -- -D warnings Enable this checkout's hooks once with `git config core.hooksPath .githooks`. The `pre-commit` hook runs the format check; `pre-push` runs the CI-equivalent gates for the changes in the push range. See [commit rules](../.agents/rules/commits.md) for commit-specific policy. -The viewer source requires Node.js 26 and installed dependencies: +The viewer source requires Node.js 26 (pinned in the root `.nvmrc`, so `nvm use` selects it) and installed dependencies: ```bash npm --prefix viewer-ui ci From c4eacedbec2542fe81181e3a7a0a6893bebf9663 Mon Sep 17 00:00:00 2001 From: code0xff Date: Thu, 29 Oct 2026 09:36:32 +0900 Subject: [PATCH 02/13] feat: let a terminal pane ask for its person with `nightcrow notify` `nightcrow notify [MESSAGE]`, run inside a pane, sends the pane's NIGHTCROW_PANE_TOKEN to the daemon as a one-shot request. The daemon asks each repository's hub which live pane holds the token; that hub broadcasts an `attention` frame, which now carries an optional message. Hubs also publish these to a session-wide `Notices` registry, for listeners not attached to the repository (Web Push, next). Entering a plugin's `needs_attention` recovery state is published the same way, once per entry. The web viewer decodes `attention` and shows the message as a toast. The TUI keeps its project-tab marker and ignores the message. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry --- README.md | 2 + docs/README.md | 1 + docs/architecture/plugin-host.md | 2 +- docs/notifications.md | 35 ++++ src/application/session_link.rs | 2 +- src/backend/hub.rs | 2 +- src/cli.rs | 15 ++ src/cli/notify.rs | 37 +++++ src/cli_tests.rs | 15 +- src/daemon/client.rs | 4 +- src/daemon/protocol.rs | 11 ++ src/daemon/protocol_tests.rs | 9 + src/daemon/requests.rs | 3 + src/daemon/serve/pre_attach.rs | 15 +- src/daemon/serve_tests/status.rs | 21 +++ src/main.rs | 4 +- src/session/catalog/catalog_runtime.rs | 5 +- src/session/catalog/views.rs | 16 ++ src/session/mod.rs | 5 +- src/session/notice.rs | 75 +++++++++ src/session/notice_tests.rs | 52 ++++++ src/session/operations.rs | 24 +++ src/session/terminal/frame.rs | 10 +- src/session/terminal/hub_attention.rs | 64 ++++++++ src/session/terminal/hub_helpers.rs | 7 + src/session/terminal/hub_recovery.rs | 24 ++- src/session/terminal/hub_relaunch.rs | 2 +- src/session/terminal/hub_run.rs | 16 +- src/session/terminal/mod.rs | 40 +++++ src/session/terminal/tests/attention.rs | 154 ++++++++++++++++++ src/session/terminal/tests/mod.rs | 1 + viewer-ui/dist/assets/Terminal-Lp7ty5Uw.js | 18 ++ viewer-ui/dist/assets/Terminal-TFqlge3z.js | 18 -- .../{index-CgaQ-fTb.js => index-DfOm43ao.js} | 4 +- viewer-ui/dist/index.html | 2 +- viewer-ui/src/api/terminal.test.ts | 5 + viewer-ui/src/api/terminal.ts | 6 + .../terminal/terminalSocketMessages.test.ts | 17 +- .../hooks/terminal/terminalSocketMessages.ts | 6 + 39 files changed, 695 insertions(+), 54 deletions(-) create mode 100644 docs/notifications.md create mode 100644 src/cli/notify.rs create mode 100644 src/session/notice.rs create mode 100644 src/session/notice_tests.rs create mode 100644 src/session/terminal/hub_attention.rs create mode 100644 src/session/terminal/tests/attention.rs create mode 100644 viewer-ui/dist/assets/Terminal-Lp7ty5Uw.js delete mode 100644 viewer-ui/dist/assets/Terminal-TFqlge3z.js rename viewer-ui/dist/assets/{index-CgaQ-fTb.js => index-DfOm43ao.js} (99%) diff --git a/README.md b/README.md index 4b363bc2..6494f5be 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,8 @@ nightcrow update # reinstall the binary; restart the session afterwards For foreground operation, use `nightcrow`; `nightcrow --daemon` starts the session as a background daemon and writes its output to `~/.nightcrow/daemon.out`. See [Getting started](docs/getting-started.md) for installation variants, startup panes, disconnects, updates, and build verification. +To have a terminal ask for you when its work is done, run `nightcrow notify [MESSAGE]` inside it, for example from an agent's completion hook; see [Notifications](docs/notifications.md). + To inspect a running daemon without attaching, run `nightcrow status [--socket PATH]`. It performs a read-only one-shot query and reports the PID, version, start time, uptime, web and attach endpoints, attached clients, repositories, and panes. Fields the daemon marks unavailable are reported as unavailable; the command never infers state from the process table or port scans, never auto-starts a daemon, and never opens the attach TUI or changes session state. Exit codes: diff --git a/docs/README.md b/docs/README.md index b423839d..29057597 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,6 +12,7 @@ Start with the [top-level README](../README.md) for the five-minute install and | [Session state](session-state.md) | Recent-activity indicator and files written between runs | | [Web viewer](web-viewer.md) | Browser access, cloning, mobile layout, and security | | [Configuration](configuration.md) | `~/.nightcrow/config.toml`, defaults, validation, and reload scope | +| [Notifications](notifications.md) | `nightcrow notify`, agent completion hooks, and plugin notices | | [Plugins](plugins.md) | Plugin installation, opt-in, and bundled recovery plugin | | [Releasing](releasing.md) | Patch-only versioning, fork promotion, and official binary Releases | diff --git a/docs/architecture/plugin-host.md b/docs/architecture/plugin-host.md index ba70ea35..3232ae3a 100644 --- a/docs/architecture/plugin-host.md +++ b/docs/architecture/plugin-host.md @@ -38,7 +38,7 @@ The repository hub's worker applies `[[plugin]]` enabled/opt-in settings and the ## Recovery surface -The hub does not interpret the meaning of plugin `Status` and `Attention` events; it broadcasts them to all clients. The hub owns only relaunch holds for exited pane slots, but since reports are broadcast once and plugins do not repeat them, the last report is cached per pane in `Shared.recovery` and replayed to clients that attach later. The cache is updated under the same lock as the broadcast, and `cancelled` removes its entry. When a hold ends through cancellation, TTL expiry, successful relaunch, or pane close, the hub sends `Recovery { state: "cancelled" }` to clear a stale deadline. Some paths can leave a report without a hold (a reload drops its watcher and releases the pane, or that pane exits/closes); these send `cancelled` only when a report is cached, while hub teardown clears every remaining report. If a host dies without notifying the hub, its report remains until reload or close; host supervision is an existing limitation. `CancelRecovery` processes a hold only in this order: `pane_closed → forget → retire_slot`. +The hub does not interpret the meaning of plugin `Status` and `Attention` events; it broadcasts them to all clients. One label is read: entering `needs_attention` is published, like an `Attention` command or a `nightcrow notify` from inside a pane, to the session's `Notices` listeners (`session::notice`), which reach clients that are not attached to that repository. The hub owns only relaunch holds for exited pane slots, but since reports are broadcast once and plugins do not repeat them, the last report is cached per pane in `Shared.recovery` and replayed to clients that attach later. The cache is updated under the same lock as the broadcast, and `cancelled` removes its entry. When a hold ends through cancellation, TTL expiry, successful relaunch, or pane close, the hub sends `Recovery { state: "cancelled" }` to clear a stale deadline. Some paths can leave a report without a hold (a reload drops its watcher and releases the pane, or that pane exits/closes); these send `cancelled` only when a report is cached, while hub teardown clears every remaining report. If a host dies without notifying the hub, its report remains until reload or close; host supervision is an existing limitation. `CancelRecovery` processes a hold only in this order: `pane_closed → forget → retire_slot`. The TUI shows recovery in the pane tab marker and notice-row chip; the web viewer shows it in the terminal toolbar/pane metadata. Recovery does not add a dedicated row or terminal overlay, so PTY geometry does not change. If there is no deadline, no time is guessed or drawn. Recovery details carry only short host/plugin text, never transcripts or raw payloads. diff --git a/docs/notifications.md b/docs/notifications.md new file mode 100644 index 00000000..33e1d9e0 --- /dev/null +++ b/docs/notifications.md @@ -0,0 +1,35 @@ +# Notifications + +A terminal pane can ask for its person. The attached TUI marks that project's tab, and an open web viewer shows the message as a toast. + +## `nightcrow notify` + +Run it inside a nightcrow terminal pane: + +```bash +nightcrow notify [MESSAGE...] [--socket PATH] +``` + +The words after `notify` become one message, trimmed and cut to 200 characters; with none, the notice carries no text. The pane is identified by `NIGHTCROW_PANE_TOKEN`, which nightcrow puts in every pane's environment and which the pane's child processes inherit. Outside a pane the variable is unset and the command fails. The daemon refuses a token that names no live pane in any open repository, and the command then exits non-zero. + +Chain it after a long command, or call it from an agent's completion hook. For Claude Code, a `Stop` hook in `.claude/settings.json`: + +```json +{ + "hooks": { + "Stop": [{ "hooks": [{ "type": "command", "command": "nightcrow notify Claude finished" }] }] + } +} +``` + +For Codex CLI, `notify` in `~/.codex/config.toml` runs a program when a turn completes. Codex appends a JSON description of the turn as a final argument, so wrap the command in a shell that ignores it; otherwise the JSON becomes part of the message: + +```toml +notify = ["sh", "-c", "nightcrow notify Codex finished", "codex-notify"] +``` + +Both hooks run inside the pane's process tree, so they inherit its token. + +## Plugin notices + +A plugin raises the same notice with its `attention` command. The bundled recovery plugin does not send that command; instead, when it reports a pane as `needs_attention`, the hub treats entering that state as a notice and uses the report's `detail` line as the message. A repeated `needs_attention` report for the same pane is not announced again until the pane leaves that state. diff --git a/src/application/session_link.rs b/src/application/session_link.rs index 79f96086..1f76a199 100644 --- a/src/application/session_link.rs +++ b/src/application/session_link.rs @@ -60,7 +60,7 @@ impl SessionLink { ServerMessage::Hello { .. } => {} // A status connection closes before attachment, so this is not // a response the long-lived session client can request. - ServerMessage::Status { .. } => {} + ServerMessage::Status { .. } | ServerMessage::Notified => {} // Only a refusal reaches here. A pane created, exited, or // reordered goes to that repository's backend. ServerMessage::Terminal { repo, event } => { diff --git a/src/backend/hub.rs b/src/backend/hub.rs index f2f45d11..95eaead6 100644 --- a/src/backend/hub.rs +++ b/src/backend/hub.rs @@ -146,7 +146,7 @@ impl TerminalBackend for HubBackend { TerminalMessage::Event(HubServerMessage::Reordered { order }) => { events.push(BackendEvent::Reordered { order }) } - TerminalMessage::Event(HubServerMessage::Attention { pane }) => { + TerminalMessage::Event(HubServerMessage::Attention { pane, .. }) => { events.push(BackendEvent::Attention { pane }) } TerminalMessage::Event(HubServerMessage::Recovery { diff --git a/src/cli.rs b/src/cli.rs index 4a2a7614..6db73515 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -4,6 +4,7 @@ use std::path::PathBuf; mod attach; mod daemon; mod init; +mod notify; pub(crate) mod plugin_cmd; pub(crate) mod status; mod stop; @@ -12,6 +13,7 @@ mod update; pub(crate) use attach::run_attach_detached; pub(crate) use daemon::run_daemon; pub(crate) use init::run_init; +pub(crate) use notify::run_notify; pub(crate) use status::run_status; pub(crate) use stop::run_stop; pub(crate) use update::run_update; @@ -92,6 +94,18 @@ pub(crate) enum Commands { #[arg(long)] socket: Option, }, + /// Tell the session this terminal wants you back. + /// + /// Run inside a nightcrow terminal pane — from an agent's completion hook, + /// or after a long command. The pane is marked in every attached client + /// and, where Web Push is enabled, a notification is sent. + Notify { + /// A short line to show with the notice. + message: Vec, + /// Path to the daemon socket. Defaults to the standard location. + #[arg(long)] + socket: Option, + }, /// Update nightcrow from an official binary release or an explicit source. /// /// With no source options, downloads the latest stable v0.1.x release. @@ -145,6 +159,7 @@ fn command_that_starts_no_session(command: &Commands) -> Option<&'static str> { Commands::Plugin { .. } => Some("plugin"), Commands::Stop { .. } => Some("stop"), Commands::Status { .. } => Some("status"), + Commands::Notify { .. } => Some("notify"), Commands::Update { .. } => Some("update"), Commands::Attach => None, } diff --git a/src/cli/notify.rs b/src/cli/notify.rs new file mode 100644 index 00000000..59b5fcdc --- /dev/null +++ b/src/cli/notify.rs @@ -0,0 +1,37 @@ +//! `nightcrow notify`: a program inside a terminal pane asks for its person. +//! +//! The pane is named by the token nightcrow put in that pane's environment, so +//! this only works from inside one — an agent's completion hook, or a long +//! command chained with `; nightcrow notify`. + +use crate::backend::identity::PANE_TOKEN_ENV; +use crate::daemon::one_shot::request; +use crate::daemon::protocol::{ClientMessage, ServerMessage}; +use anyhow::{Context, Result, bail}; +use std::path::PathBuf; +use std::time::Duration; + +/// Long enough for every open repository's hub to be asked in turn. +const NOTIFY_TIMEOUT: Duration = Duration::from_secs(10); + +pub(crate) fn run_notify(message: Vec, socket: Option) -> Result<()> { + let token = std::env::var(PANE_TOKEN_ENV).ok().filter(|t| !t.is_empty()); + let Some(token) = token else { + bail!("{PANE_TOKEN_ENV} is not set: run `nightcrow notify` inside a nightcrow terminal"); + }; + let path = match socket { + Some(path) => path, + None => crate::daemon::socket::default_socket_path() + .context("resolving the default daemon socket path")?, + }; + let message = Some(message.join(" ")).filter(|m| !m.trim().is_empty()); + match request( + &path, + &ClientMessage::Notify { token, message }, + NOTIFY_TIMEOUT, + )? { + ServerMessage::Notified => Ok(()), + ServerMessage::Error { message } => bail!("daemon refused the notice: {message}"), + other => bail!("protocol error: unexpected answer to notify: {other:?}"), + } +} diff --git a/src/cli_tests.rs b/src/cli_tests.rs index d7850f92..095edc8e 100644 --- a/src/cli_tests.rs +++ b/src/cli_tests.rs @@ -1,4 +1,4 @@ -use super::{Cli, reject_session_options}; +use super::{Cli, Commands, reject_session_options}; use clap::Parser; fn parse(args: &[&str]) -> Cli { @@ -51,3 +51,16 @@ fn the_default_command_accepts_every_session_option() { reject_session_options(&parse(&["nightcrow", "-d", "--port", "9000"])) .expect("this is the invocation the options exist for"); } + +#[test] +fn notify_takes_its_words_as_one_message_and_starts_no_session() { + let cli = parse(&["nightcrow", "notify", "build", "done"]); + let Some(Commands::Notify { message, socket }) = &cli.command else { + panic!("expected notify"); + }; + assert_eq!(message, &["build", "done"]); + assert!(socket.is_none()); + let error = reject_session_options(&parse(&["nightcrow", "--port", "9", "notify"])) + .expect_err("a session option is a mistake on notify"); + assert!(error.to_string().contains("notify"), "{error}"); +} diff --git a/src/daemon/client.rs b/src/daemon/client.rs index bfd7c438..cee39955 100644 --- a/src/daemon/client.rs +++ b/src/daemon/client.rs @@ -127,8 +127,8 @@ impl DaemonClient { ServerMessage::Reloaded { .. } => { tracing::debug!("attach: a reload answer arrived before the handshake"); } - ServerMessage::Status { .. } => { - bail!("daemon answered an attach handshake with a status response") + ServerMessage::Status { .. } | ServerMessage::Notified => { + bail!("daemon answered an attach handshake with a one-shot response") } } }; diff --git a/src/daemon/protocol.rs b/src/daemon/protocol.rs index 3427d29a..91f64c5f 100644 --- a/src/daemon/protocol.rs +++ b/src/daemon/protocol.rs @@ -59,6 +59,15 @@ pub enum ClientMessage { repo: String, message: HubClientMessage, }, + /// From a program inside a pane (`nightcrow notify`): that pane wants its + /// person back. One-shot, like [`Status`](Self::Status). `token` is the + /// pane's `NIGHTCROW_PANE_TOKEN`, the only proof of which pane is asking. + /// Answered with [`ServerMessage::Notified`] or an error. + Notify { + token: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + message: Option, + }, /// Ask the daemon to stop. Runs the same shutdown sequence as SIGINT/SIGTERM /// — reaping every child shell — and then closes the connection. No reply /// is sent; the connection closing is the acknowledgment. @@ -80,6 +89,8 @@ pub enum ServerMessage { /// One-shot answer to [`ClientMessage::Status`]. The connection closes /// after this response and is never registered as an attached client. Status { status: DaemonStatus }, + /// One-shot answer to [`ClientMessage::Notify`]: a pane took the notice. + Notified, /// The repository set, sent in answer to a list, open, close, or reorder. /// The whole set rather than a delta: another client may have changed it in /// between, and a delta applied to a stale list silently diverges. diff --git a/src/daemon/protocol_tests.rs b/src/daemon/protocol_tests.rs index de527c50..84739b14 100644 --- a/src/daemon/protocol_tests.rs +++ b/src/daemon/protocol_tests.rs @@ -30,6 +30,14 @@ fn every_client_message_survives_the_round_trip() { }, ClientMessage::SetAccent { accent: 3 }, ClientMessage::ReloadConfig, + ClientMessage::Notify { + token: "ab12".into(), + message: Some("done".into()), + }, + ClientMessage::Notify { + token: "ab12".into(), + message: None, + }, ]; for message in &messages { assert_eq!(&round_trip_client(message), message); @@ -49,6 +57,7 @@ fn a_repository_set_without_an_accent_is_refused_rather_than_read_as_yellow() { #[test] fn every_server_message_survives_the_round_trip() { let messages = vec![ + ServerMessage::Notified, ServerMessage::Hello { version: "0.1.0".into(), client: 3, diff --git a/src/daemon/requests.rs b/src/daemon/requests.rs index bf453d74..59760c59 100644 --- a/src/daemon/requests.rs +++ b/src/daemon/requests.rs @@ -48,6 +48,9 @@ fn handle(message: ClientMessage, id: u64, session: &Session) { ClientMessage::Status {} => { refuse(id, session, "status is only valid as the first request") } + ClientMessage::Notify { .. } => { + refuse(id, session, "notify is only valid as the first request") + } // Answered to the asker alone (nothing changed), but not from here — // the set is sent from one place, in session-change order. This records // that the asker is owed one and wakes the watcher. diff --git a/src/daemon/serve/pre_attach.rs b/src/daemon/serve/pre_attach.rs index f44ff1f8..99e84237 100644 --- a/src/daemon/serve/pre_attach.rs +++ b/src/daemon/serve/pre_attach.rs @@ -14,7 +14,7 @@ pub(super) fn read(stream: &mut UnixStream, session: &Session) -> Result Result { + let reply = + match crate::session::notify_pane(&session.state, &token, message.as_deref()) { + Ok(()) => ServerMessage::Notified, + Err(crate::session::NotifyError::UnknownPane) => { + error("no open nightcrow terminal has that pane token") + } + }; + reply_and_close(stream, reply)?; + Ok(None) + } ClientMessage::Shutdown => { // Stop is also one-shot: it must keep working with the handshake // now required by stateful attach, without registering a client. @@ -43,7 +54,7 @@ pub(super) fn read(stream: &mut UnixStream, session: &Session) -> Result { reply_and_close( stream, - error("first request must be hello, status, or shutdown"), + error("first request must be hello, status, notify, or shutdown"), )?; Ok(None) } diff --git a/src/daemon/serve_tests/status.rs b/src/daemon/serve_tests/status.rs index c4954745..cc48c484 100644 --- a/src/daemon/serve_tests/status.rs +++ b/src/daemon/serve_tests/status.rs @@ -166,3 +166,24 @@ fn diagnostics(daemon: &TestDaemon) -> Diagnostics { accent: crate::session::accent(daemon.state()), } } + +#[test] +fn notify_with_a_token_no_pane_holds_is_refused_without_attaching() { + let dir = tempfile::TempDir::new().unwrap(); + let daemon = daemon(&dir, &[]); + let before = diagnostics(&daemon); + let request = ClientMessage::Notify { + token: "0123456789abcdef0123456789abcdef".into(), + message: Some("done".into()), + }; + let (answer, mut stream) = one_shot( + daemon.path(), + Frame::control(serde_json::to_vec(&request).unwrap()), + ); + let ServerMessage::Error { message } = answer else { + panic!("expected a refusal, got {answer:?}"); + }; + assert!(message.contains("pane token"), "{message}"); + assert_eq!(diagnostics(&daemon), before); + assert!(read_frame(&mut stream).expect("clean close").is_none()); +} diff --git a/src/main.rs b/src/main.rs index cf474dd5..ba165add 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,7 +24,8 @@ use anyhow::Result; use clap::Parser; use crate::cli::{ - Cli, Commands, run_attach_detached, run_daemon, run_init, run_status, run_stop, run_update, + Cli, Commands, run_attach_detached, run_daemon, run_init, run_notify, run_status, run_stop, + run_update, }; /// Every path here runs to completion and returns; nothing in this process @@ -48,6 +49,7 @@ fn main() -> Result<()> { Some(Commands::Plugin { command }) => cli::plugin_cmd::run_plugin(command), Some(Commands::Stop { socket }) => run_stop(socket), Some(Commands::Status { socket }) => report_status_exit(run_status(socket)), + Some(Commands::Notify { message, socket }) => run_notify(message, socket), Some(Commands::Update { version, path, git }) => run_update(version, path, git), None => run_daemon(cli.exec, cli.port, cli.bind, cli.daemon), } diff --git a/src/session/catalog/catalog_runtime.rs b/src/session/catalog/catalog_runtime.rs index 89f28794..2024f3d0 100644 --- a/src/session/catalog/catalog_runtime.rs +++ b/src/session/catalog/catalog_runtime.rs @@ -15,6 +15,7 @@ pub(super) struct CatalogRuntime { terminal: crate::config::TerminalConfig, shell: crate::config::ShellConfig, ownership: Arc, + notices: Arc, status_encoder: StatusEncoder, } @@ -28,6 +29,7 @@ impl Default for CatalogRuntime { terminal: crate::config::TerminalConfig::default(), shell: crate::config::ShellConfig::default(), ownership: Arc::new(crate::session::size_owner::SizeOwnership::default()), + notices: Arc::default(), status_encoder: empty_status_payload, } } @@ -65,13 +67,14 @@ impl CatalogRuntime { name: repo_name(&member.path), display_path: display_path(&member.path), runtime: RepoRuntime::spawn(&member.path, self.status_encoder), - terminals: TerminalHub::spawn( + terminals: TerminalHub::spawn_with_notices( &member.path, self.startup_commands.clone(), self.plugins.clone(), self.terminal.auto_open, self.shell.clone(), Arc::clone(&self.ownership), + Arc::clone(&self.notices), ), id: member.id, path: member.path, diff --git a/src/session/catalog/views.rs b/src/session/catalog/views.rs index 073742e7..a5eae1a4 100644 --- a/src/session/catalog/views.rs +++ b/src/session/catalog/views.rs @@ -44,6 +44,22 @@ impl Catalog { .collect() } + /// Raise attention on the pane `token` names, in whichever repository + /// holds it. `false` when none does. The hubs are asked outside the + /// catalog lock, since each answer waits on that hub's worker. + pub fn notify(&self, token: &crate::backend::PaneToken, message: Option) -> bool { + let hubs: Vec<_> = self + .runtime + .lock() + .expect("catalog runtime poisoned") + .entries() + .iter() + .map(|entry| Arc::clone(&entry.terminals)) + .collect(); + hubs.iter() + .any(|hub| hub.notify(token.clone(), message.clone())) + } + /// The served list and, from that same snapshot, the id standing for /// `remembered` — one lock for both, because a client renders them together /// and a repository opened between two separate reads would yield an active diff --git a/src/session/mod.rs b/src/session/mod.rs index 66baecf8..3d20ab16 100644 --- a/src/session/mod.rs +++ b/src/session/mod.rs @@ -6,6 +6,7 @@ pub mod catalog; pub mod limits; +pub mod notice; pub mod prefs; pub mod reload; pub mod runtime; @@ -16,8 +17,8 @@ mod operations; mod state; pub use operations::{ - CloseError, OpenError, SessionRepo, accent, active_repo, close_repo, focus_repo, list_repos, - list_session_repos, open_repo, reorder_repos, set_accent, + CloseError, NotifyError, OpenError, SessionRepo, accent, active_repo, close_repo, focus_repo, + list_repos, list_session_repos, notify_pane, open_repo, reorder_repos, set_accent, }; #[cfg(test)] pub use state::test_status_encoder; diff --git a/src/session/notice.rs b/src/session/notice.rs new file mode 100644 index 00000000..72ba08d3 --- /dev/null +++ b/src/session/notice.rs @@ -0,0 +1,75 @@ +//! Session-wide "a terminal wants you back" announcements. +//! +//! A hub raises one when a plugin asks for attention, when a plugin reports a +//! pane as needing it, or when a program inside a pane runs `nightcrow notify`. +//! The hub's own clients already hear it as an `attention` control message; +//! this registry carries the same event past them to listeners that are not +//! attached to that repository at all — Web Push, which reaches a phone whose +//! browser is closed. The session owns the registry and knows nothing of what +//! listens: a listener is registered by the transport that delivers it. + +use crate::backend::PaneId; +use std::sync::{Arc, Mutex}; + +/// Longest message a notice carries, in characters. A notification shows a +/// line or two; anything longer is cut rather than refused. +pub const NOTICE_MESSAGE_MAX_CHARS: usize = 200; + +/// One announcement. Carries labels a person reads, never terminal content. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Notice { + /// The hub's working directory: the repository path as the catalog has it. + pub repo_path: String, + pub pane: PaneId, + /// The pane's current title, when it has one. + pub pane_title: Option, + /// What the sender said, when it said anything. + pub message: Option, +} + +type Listener = Arc; + +/// The listeners for every hub in one session. +#[derive(Default)] +pub struct Notices { + listeners: Mutex>, +} + +impl Notices { + // Until Web Push registers the first production listener. + #[cfg_attr(not(test), allow(dead_code))] + pub fn subscribe(&self, listener: impl Fn(&Notice) + Send + Sync + 'static) { + self.listeners + .lock() + .expect("notice listeners poisoned") + .push(Arc::new(listener)); + } + + /// Hand `notice` to every listener. The list is copied out first so a + /// listener is never called under the lock; each must return promptly + /// (queue, not send), because the caller is a hub's worker thread. + pub fn publish(&self, notice: &Notice) { + let listeners = self + .listeners + .lock() + .expect("notice listeners poisoned") + .clone(); + for listener in listeners { + listener(notice); + } + } +} + +/// `message` trimmed, emptied to `None`, and cut to +/// [`NOTICE_MESSAGE_MAX_CHARS`]. +pub fn clean_message(message: Option<&str>) -> Option { + let trimmed = message?.trim(); + if trimmed.is_empty() { + return None; + } + Some(trimmed.chars().take(NOTICE_MESSAGE_MAX_CHARS).collect()) +} + +#[cfg(test)] +#[path = "notice_tests.rs"] +mod tests; diff --git a/src/session/notice_tests.rs b/src/session/notice_tests.rs new file mode 100644 index 00000000..9b8bc0f9 --- /dev/null +++ b/src/session/notice_tests.rs @@ -0,0 +1,52 @@ +use super::*; +use std::sync::atomic::{AtomicUsize, Ordering}; + +fn notice() -> Notice { + Notice { + repo_path: "/work/app".into(), + pane: 3, + pane_title: Some("claude".into()), + message: Some("done".into()), + } +} + +#[test] +fn every_listener_hears_a_published_notice() { + let notices = Notices::default(); + let heard = Arc::new(AtomicUsize::new(0)); + for _ in 0..2 { + let heard = Arc::clone(&heard); + notices.subscribe(move |n| { + assert_eq!(n.pane, 3); + heard.fetch_add(1, Ordering::SeqCst); + }); + } + notices.publish(¬ice()); + assert_eq!(heard.load(Ordering::SeqCst), 2); +} + +#[test] +fn publishing_with_no_listener_is_a_no_op() { + Notices::default().publish(¬ice()); +} + +#[test] +fn a_listener_may_subscribe_another_without_deadlocking() { + let notices = Arc::new(Notices::default()); + let inner = Arc::clone(¬ices); + notices.subscribe(move |_| inner.subscribe(|_| {})); + notices.publish(¬ice()); + notices.publish(¬ice()); +} + +#[test] +fn messages_are_trimmed_emptied_and_cut() { + assert_eq!(clean_message(None), None); + assert_eq!(clean_message(Some(" ")), None); + assert_eq!(clean_message(Some(" hi \n")), Some("hi".into())); + let long = "가".repeat(NOTICE_MESSAGE_MAX_CHARS + 50); + assert_eq!( + clean_message(Some(&long)).unwrap().chars().count(), + NOTICE_MESSAGE_MAX_CHARS + ); +} diff --git a/src/session/operations.rs b/src/session/operations.rs index fb66fed5..5b88079a 100644 --- a/src/session/operations.rs +++ b/src/session/operations.rs @@ -253,3 +253,27 @@ fn persist_workspace(state: &SessionState) { .unwrap_or(0); crate::workspace::persistence::save_workspace(&ws); } + +/// Why `nightcrow notify` was refused. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum NotifyError { + /// The token is malformed, or names no live pane in any open repository. + UnknownPane, +} + +/// Raise attention on the pane a program inside it named by its token, so the +/// pane's clients mark it and the session's notice listeners hear of it. +pub fn notify_pane( + state: &SessionState, + token: &str, + message: Option<&str>, +) -> Result<(), NotifyError> { + let token: crate::backend::PaneToken = + serde_json::from_value(token.into()).map_err(|_| NotifyError::UnknownPane)?; + let message = crate::session::notice::clean_message(message); + if state.catalog.notify(&token, message) { + Ok(()) + } else { + Err(NotifyError::UnknownPane) + } +} diff --git a/src/session/terminal/frame.rs b/src/session/terminal/frame.rs index 1eb438a8..014c16ad 100644 --- a/src/session/terminal/frame.rs +++ b/src/session/terminal/frame.rs @@ -195,11 +195,15 @@ pub enum ServerMessage { /// `Shared::recovery`), not as a state machine of its own. The one label /// the hub itself sends is /// [`RECOVERY_CANCELLED`](super::hub_recovery::RECOVERY_CANCELLED). - /// A plugin says this pane wants the person back. Carries no reason and no - /// text: the client turns it into that project tab's unread marker, which - /// says "something happened here" and nothing more. + /// A plugin, or a program in the pane through `nightcrow notify`, says + /// this pane wants the person back. The TUI turns it into that project + /// tab's unread marker; the browser shows `message` when there is one. Attention { pane: PaneId, + /// A short line the sender chose, absent when it gave none. Never + /// transcript text: the hub only relays what was handed to it. + #[serde(default, skip_serializing_if = "Option::is_none")] + message: Option, }, Recovery { pane: PaneId, diff --git a/src/session/terminal/hub_attention.rs b/src/session/terminal/hub_attention.rs new file mode 100644 index 00000000..274ede8b --- /dev/null +++ b/src/session/terminal/hub_attention.rs @@ -0,0 +1,64 @@ +//! A pane asking for its person: told to this hub's clients, and announced to +//! the session's [`Notices`](crate::session::notice::Notices) listeners. + +use super::TerminalHub; +use super::frame::{ServerMessage, TerminalFrame}; +use super::hub_helpers::broadcast_locked; +use crate::backend::{PaneId, PaneToken, PtyBackend}; +use crate::session::notice::Notice; +use std::sync::mpsc::SyncSender; + +impl TerminalHub { + /// Tell every client `pane` wants a person back, then announce it. + pub(super) fn broadcast_attention(&self, pane: PaneId, message: Option) { + let Ok(json) = serde_json::to_string(&ServerMessage::Attention { + pane, + message: message.clone(), + }) else { + return; + }; + let mut state = self.state.lock().expect("terminal state poisoned"); + broadcast_locked(&mut state.clients, TerminalFrame::Control(json)); + drop(state); + self.publish_notice(pane, message); + } + + /// Announce `pane` to the session's listeners, labelled with its title. + pub(super) fn publish_notice(&self, pane: PaneId, message: Option) { + let pane_title = self + .state + .lock() + .expect("terminal state poisoned") + .panes + .iter() + .find(|p| p.id == pane) + .and_then(|p| p.title.clone()); + self.notices.publish(&Notice { + repo_path: self.cwd.clone(), + pane, + pane_title, + message, + }); + } + + /// `nightcrow notify` from inside a pane: answer whether `token` is one of + /// this hub's live panes, and raise attention there when it is. The token + /// is the only proof of origin — it reaches a process only through the + /// environment of the pane it names. + pub(super) fn notify_by_token( + &self, + backend: &PtyBackend, + token: &PaneToken, + message: Option, + reply: &SyncSender, + ) { + let pane = backend + .pane_for_token(token) + .filter(|&pane| self.pane_is_live(pane)); + if let Some(pane) = pane { + tracing::debug!(pane, "viewer: a pane asks for attention"); + self.broadcast_attention(pane, message); + } + let _ = reply.try_send(pane.is_some()); + } +} diff --git a/src/session/terminal/hub_helpers.rs b/src/session/terminal/hub_helpers.rs index 21d218c0..230dce8a 100644 --- a/src/session/terminal/hub_helpers.rs +++ b/src/session/terminal/hub_helpers.rs @@ -44,6 +44,13 @@ pub enum Command { ReloadPlugins { plugins: Vec, }, + /// On the queue because only the worker's backend can say which pane a + /// token names. `reply` carries whether one did. + Notify { + token: crate::backend::PaneToken, + message: Option, + reply: std::sync::mpsc::SyncSender, + }, } /// The newest size one connection wants for one pane. Resize traffic is kept diff --git a/src/session/terminal/hub_recovery.rs b/src/session/terminal/hub_recovery.rs index 0067edd9..f8bdfa51 100644 --- a/src/session/terminal/hub_recovery.rs +++ b/src/session/terminal/hub_recovery.rs @@ -47,6 +47,13 @@ pub(super) fn is_relaunchable(backend: &PtyBackend, pane: PaneId) -> bool { /// succeeded — cancelled by a person, or given up on when the hold ran out. pub(crate) const RECOVERY_CANCELLED: &str = "cancelled"; +/// The `state` a plugin reports when a pane is waiting on a person — the +/// bundled recovery plugin's label for an agent that finished or stalled. The +/// one plugin label the hub reads, and only to raise a [`Notice`] on entry. +/// +/// [`Notice`]: crate::session::notice::Notice +pub(crate) const RECOVERY_NEEDS_ATTENTION: &str = "needs_attention"; + impl TerminalHub { /// Tell every client the latest word on a pane's recovery. pub(super) fn broadcast_recovery( @@ -70,6 +77,10 @@ impl TerminalHub { // announcements are: a client either connects before this frame or after, // never into the middle of it. let mut shared = self.state.lock().expect("terminal state poisoned"); + // Entering the plugin's "needs attention" state is the one report that + // reaches past this hub's clients; a repeat of it is not news. + let newly_needs_attention = state == RECOVERY_NEEDS_ATTENTION + && shared.recovery.get(&pane).map(|r| r.state.as_str()) != Some(state); // The cache a later client is replayed from (`connect`), kept under the // rule every connected client's map follows: `cancelled` removes. // Updated under the same hold as the broadcast so the two cannot @@ -88,15 +99,10 @@ impl TerminalHub { ); } broadcast_locked(&mut shared.clients, TerminalFrame::Control(json)); - } - - /// Tell every client a plugin wants a person back at `pane`. - pub(super) fn broadcast_attention(&self, pane: PaneId) { - let Ok(json) = serde_json::to_string(&ServerMessage::Attention { pane }) else { - return; - }; - let mut state = self.state.lock().expect("terminal state poisoned"); - broadcast_locked(&mut state.clients, TerminalFrame::Control(json)); + drop(shared); + if newly_needs_attention { + self.publish_notice(pane, detail.map(str::to_string)); + } } /// Tell every client there is nothing pending for `pane` any more. Sent diff --git a/src/session/terminal/hub_relaunch.rs b/src/session/terminal/hub_relaunch.rs index d9fae9b5..abc9e654 100644 --- a/src/session/terminal/hub_relaunch.rs +++ b/src/session/terminal/hub_relaunch.rs @@ -80,7 +80,7 @@ impl TerminalHub { } Ok(Approved::Attention { pane }) => { tracing::debug!(plugin = %plugin, pane, "viewer: plugin asks for attention"); - self.broadcast_attention(pane); + self.broadcast_attention(pane, None); } Ok(Approved::WatchPane { pane }) => { self.watch_pane_for_plugin(backend, plugins, &plugin, pane) diff --git a/src/session/terminal/hub_run.rs b/src/session/terminal/hub_run.rs index 042e03f8..d027cb44 100644 --- a/src/session/terminal/hub_run.rs +++ b/src/session/terminal/hub_run.rs @@ -64,10 +64,8 @@ impl TerminalHub { continue; } match backend.open_pane(rows, cols, command.as_deref()) { - // Unnamed: a pane a client asked for is that client's - // to name. No plugin association either — a shell a - // client opened is nobody's to drive but the person - // at it. + // Unnamed and unwatched: a shell a client opened is + // that client's to name and nobody else's to drive. Ok(pane) => self.register_pane(pane, rows, cols, Some(client), None), Err(err) => { tracing::warn!(%err, "viewer: could not create a terminal"); @@ -95,15 +93,19 @@ impl TerminalHub { } } Command::Reorder { order } => self.reorder_panes(order), - // Deliberately not gated on the pane being live: a pane with - // a recovery pending is one whose process has already ended, - // so it is no longer in the client-visible list. + // Not gated on the pane being live: a pending recovery's + // process has already ended and left the visible list. Command::CancelRecovery { pane } => { self.cancel_recovery(&mut backend, &mut plugins, pane) } Command::ReloadPlugins { plugins: configs } => { self.reload_hub_plugins(&mut backend, &mut plugins, &configs) } + Command::Notify { + token, + message, + reply, + } => self.notify_by_token(&backend, &token, message, &reply), _ => {} } } diff --git a/src/session/terminal/mod.rs b/src/session/terminal/mod.rs index ee5df5d1..d4b4b3d9 100644 --- a/src/session/terminal/mod.rs +++ b/src/session/terminal/mod.rs @@ -16,6 +16,7 @@ //! disconnected when it overflows. pub mod frame; +mod hub_attention; mod hub_connect; mod hub_diag; #[cfg(test)] @@ -102,6 +103,10 @@ pub struct TerminalHub { /// Which screen the session's panes are fitted to — shared with every other /// hub because the answer is one per session, not one per repository. ownership: Arc, + /// The repository path this hub serves, which labels its notices. + cwd: String, + /// The session's listeners for panes asking for attention. + notices: Arc, #[cfg(test)] concurrency_test_hook: Mutex>, } @@ -113,6 +118,7 @@ impl TerminalHub { /// plugin table those commands may opt into. /// /// `ownership` is the session's, shared with every other hub. + #[cfg(test)] pub fn spawn( cwd: &str, startup: Vec, @@ -120,6 +126,20 @@ impl TerminalHub { auto_open: bool, shell: crate::config::ShellConfig, ownership: Arc, + ) -> Arc { + let notices = Arc::default(); + Self::spawn_with_notices(cwd, startup, plugins, auto_open, shell, ownership, notices) + } + + /// Start a hub as `spawn` does, announcing attention to the session's `notices`. + pub(crate) fn spawn_with_notices( + cwd: &str, + startup: Vec, + plugins: Vec, + auto_open: bool, + shell: crate::config::ShellConfig, + ownership: Arc, + notices: Arc, ) -> Arc { let (commands, command_rx) = mpsc::sync_channel::(256); let hub = Arc::new(Self { @@ -142,6 +162,8 @@ impl TerminalHub { shell, started: AtomicBool::new(false), ownership, + cwd: cwd.to_string(), + notices, #[cfg(test)] concurrency_test_hook: Mutex::new(None), }); @@ -157,6 +179,24 @@ impl TerminalHub { hub } + /// Raise attention on the live pane `token` names, if this hub holds it. + /// `false` when it does not, or when the worker is too busy or gone to + /// answer within a second — the caller then asks the next hub. + pub(crate) fn notify(&self, token: crate::backend::PaneToken, message: Option) -> bool { + let (reply, answer) = mpsc::sync_channel(1); + let command = Command::Notify { + token, + message, + reply, + }; + if self.commands.try_send(command).is_err() { + return false; + } + answer + .recv_timeout(std::time::Duration::from_secs(1)) + .unwrap_or(false) + } + /// The startup panes this hub was spawned with. Fixed for its life: the /// panes are created once and a config reload does not replace them. pub(crate) fn startup_commands(&self) -> &[crate::config::StartupCommand] { diff --git a/src/session/terminal/tests/attention.rs b/src/session/terminal/tests/attention.rs new file mode 100644 index 00000000..e8eae32a --- /dev/null +++ b/src/session/terminal/tests/attention.rs @@ -0,0 +1,154 @@ +//! A pane asking for its person: the frame its clients get, and the notice the +//! session's listeners get. + +use crate::backend::PaneToken; +use crate::session::notice::{Notice, Notices}; +use crate::session::terminal::TerminalHub; +use crate::session::terminal::hub_recovery::RECOVERY_NEEDS_ATTENTION; +use std::sync::{Arc, Mutex}; + +fn hub_with_listener(cwd: &str) -> (Arc, Arc>>) { + let notices = Arc::new(Notices::default()); + let heard = Arc::new(Mutex::new(Vec::new())); + let sink = Arc::clone(&heard); + notices.subscribe(move |n| sink.lock().unwrap().push(n.clone())); + let hub = TerminalHub::spawn_with_notices( + cwd, + Vec::new(), + Vec::new(), + true, + crate::config::ShellConfig::default(), + Default::default(), + notices, + ); + (hub, heard) +} + +// Only the pane-driven test reads frames, and it is Unix-only (see there). +#[cfg(unix)] +use super::{attach, created_pane, next_matching}; +#[cfg(unix)] +use crate::backend::PaneId; +#[cfg(unix)] +use crate::session::terminal::frame::{ClientMessage, TerminalFrame}; + +/// The message an `attention` frame carries, `Some(None)` for a bare one, or +/// `None` when the frame is something else. +#[cfg(unix)] +fn attention(frame: &TerminalFrame, pane: PaneId) -> Option> { + let TerminalFrame::Control(json) = frame else { + return None; + }; + let v: serde_json::Value = serde_json::from_str(json).ok()?; + if v["type"] != "attention" || v["pane"] != pane { + return None; + } + Some(v["message"].as_str().map(str::to_string)) +} + +/// The first `TOK<…>` whose contents look like a pane token. +#[cfg(unix)] +fn printed_token(seen: &str) -> Option { + seen.split("TOK<").skip(1).find_map(|rest| { + let inner = &rest[..rest.find('>')?]; + let hex = inner.len() == 32 && inner.chars().all(|c| c.is_ascii_hexdigit()); + hex.then(|| inner.to_string()) + }) +} + +#[test] +fn a_token_no_pane_holds_is_refused() { + let dir = tempfile::TempDir::new().unwrap(); + let (hub, heard) = hub_with_listener(&dir.path().to_string_lossy()); + assert!(!hub.notify(PaneToken::new().unwrap(), None)); + assert!(heard.lock().unwrap().is_empty()); + hub.stop(); +} + +#[test] +#[cfg(unix)] // Reads the token back through `printf` and `$VAR` expansion. +fn notifying_by_a_panes_own_token_marks_it_and_announces_it() { + let dir = tempfile::TempDir::new().unwrap(); + let cwd = dir.path().to_string_lossy().to_string(); + let (hub, heard) = hub_with_listener(&cwd); + let session = attach(&hub); + session.dispatch(ClientMessage::Create { rows: 24, cols: 80 }); + let pane = + created_pane(&next_matching(&session, |f| created_pane(f).is_some()).unwrap()).unwrap(); + + // The token is only in the pane's environment, so ask the pane for it. + session.dispatch(ClientMessage::Input { + pane, + data: "printf 'TOK<%s>' \"$NIGHTCROW_PANE_TOKEN\"\n".into(), + }); + // The echoed command line holds `TOK<%s>` too; only the printed hex counts. + let mut seen = String::new(); + next_matching(&session, |f| { + if let TerminalFrame::Output { data, .. } = f { + seen.push_str(&String::from_utf8_lossy(data)); + } + printed_token(&seen).is_some() + }) + .expect("the pane never printed its token"); + let token = printed_token(&seen).unwrap(); + let token: PaneToken = serde_json::from_value(token.into()).unwrap(); + + assert!(hub.notify(token, Some("build done".into()))); + let frame = + next_matching(&session, |f| attention(f, pane).is_some()).expect("no attention frame"); + assert_eq!(attention(&frame, pane), Some(Some("build done".into()))); + let heard = heard.lock().unwrap(); + assert_eq!(heard.len(), 1); + assert_eq!(heard[0].repo_path, cwd); + assert_eq!(heard[0].pane, pane); + assert_eq!(heard[0].message.as_deref(), Some("build done")); + drop(heard); + hub.stop(); +} + +#[test] +fn entering_needs_attention_announces_once_and_other_states_never() { + let dir = tempfile::TempDir::new().unwrap(); + let (hub, heard) = hub_with_listener(&dir.path().to_string_lossy()); + + hub.broadcast_recovery(7, "waiting_for_reset", None, None, 1); + hub.broadcast_recovery(7, RECOVERY_NEEDS_ATTENTION, Some("idle"), None, 1); + hub.broadcast_recovery(7, RECOVERY_NEEDS_ATTENTION, Some("idle"), None, 1); + { + let heard = heard.lock().unwrap(); + assert_eq!(heard.len(), 1, "a repeated report is not news"); + assert_eq!(heard[0].pane, 7); + assert_eq!(heard[0].message.as_deref(), Some("idle")); + } + + // Leaving the state and coming back is news again. + hub.broadcast_recovery(7, "resuming", None, None, 2); + hub.broadcast_recovery(7, RECOVERY_NEEDS_ATTENTION, None, None, 2); + assert_eq!(heard.lock().unwrap().len(), 2); + hub.stop(); +} + +#[test] +fn an_attention_frame_omits_an_absent_message_and_reads_the_old_shape() { + use crate::session::terminal::frame::ServerMessage; + let bare = ServerMessage::Attention { + pane: 2, + message: None, + }; + assert_eq!( + serde_json::to_string(&bare).unwrap(), + r#"{"type":"attention","pane":2}"# + ); + assert_eq!( + serde_json::from_str::(r#"{"type":"attention","pane":2}"#).unwrap(), + bare + ); + let said = ServerMessage::Attention { + pane: 2, + message: Some("done".into()), + }; + assert_eq!( + serde_json::to_string(&said).unwrap(), + r#"{"type":"attention","pane":2,"message":"done"}"# + ); +} diff --git a/src/session/terminal/tests/mod.rs b/src/session/terminal/tests/mod.rs index 52cb2de9..34e7997a 100644 --- a/src/session/terminal/tests/mod.rs +++ b/src/session/terminal/tests/mod.rs @@ -1,6 +1,7 @@ //! The hub's test harness: the shared deadline and the frame accessors every //! hub test reads its assertions through. The tests themselves live beside it. +mod attention; mod backpressure; mod behavior; mod identity; diff --git a/viewer-ui/dist/assets/Terminal-Lp7ty5Uw.js b/viewer-ui/dist/assets/Terminal-Lp7ty5Uw.js new file mode 100644 index 00000000..8de1523d --- /dev/null +++ b/viewer-ui/dist/assets/Terminal-Lp7ty5Uw.js @@ -0,0 +1,18 @@ +import{t as e}from"./jsx-runtime-EIAPxkjE.js";import{t}from"./react-BPk_wmJm.js";import{A as n,B as r,D as i,E as a,I as o,L as s,M as c,O as l,P as u,S as d,W as f,_ as p,a as m,b as h,c as g,d as _,dt as v,h as ee,i as y,k as te,l as b,lt as x,n as ne,nt as S,o as C,ot as w,p as re,q as T,r as ie,s as ae,st as oe,tt as E,u as se,ut as ce,v as le,x as ue,y as de}from"./visualViewport-hwlIeclE.js";import{t as fe}from"./api-CKtlIBMl.js";var D=t();function pe(e,t){for(;t;)[e,t]=[t,e%t];return e}function me(e,t){switch(e){case 1:return[1];case 2:return t?[2]:[1,1];case 3:return[2,1];case 4:return[2,2];case 5:return[3,2];case 6:return[3,3];case 7:return[4,3];default:return[4,4]}}function he(e,t){let n=me(e,t),r=n.reduce((e,t)=>e*t/pe(e,t),1),i=[];return n.forEach((e,t)=>{let n=r/e;for(let r=0;r1,g=()=>{c.current!==null&&clearTimeout(c.current),c.current=null},_=()=>{g(),l.current=!1,i.current=null,a.current=null,o.current=null,s.current=!1,d(null),p(null)};return{draggingPane:u,dragOverPane:f,reorderable:h,endPaneDrag:_,onPaneDragStart:(e,t,r)=>{if(e.target.closest(`button`))return;let o=r?.holdToDrag===!0&&e.pointerType===`touch`;if(o||n(t),e.button!==0||!h&&!o)return;if(i.current=t,a.current={x:e.clientX,y:e.clientY},s.current=!1,!o){e.currentTarget.setPointerCapture(e.pointerId);return}if(l.current=!0,!h)return;let u=e.currentTarget,f=e.pointerId;g(),c.current=setTimeout(()=>{c.current=null,l.current=!1,s.current=!0,d(t);try{u.setPointerCapture(f)}catch{_()}},350)},onPaneDragMove:e=>{let t=i.current,n=a.current;if(t===null||n===null)return;if(!s.current){if(!(Math.hypot(e.clientX-n.x,e.clientY-n.y)>=4))return;if(l.current){_();return}}s.current=!0,d(t);let r=document.elementFromPoint(e.clientX,e.clientY)?.closest(`[data-pane-id]`),c=r?Number(r.getAttribute(`data-pane-id`)):null,u=c!==null&&c!==t?c:null;o.current=u,p(u)},onPaneDragEnd:()=>{let t=i.current,a=o.current;t!==null&&l.current&&n(t),t!==null&&s.current&&a!==null&&r(m(e,t,a)),_()}}}function _e(e){return typeof e==`number`&&Number.isSafeInteger(e)}function O(e){return _e(e)&&e>=0}function ve(e){return typeof e==`string`&&/^[0-9]+$/.test(e)}function ye(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t,r;switch(n.type){case`created`:r=O(n.pane)&&O(n.rows)&&O(n.cols)&&(n.client===void 0||O(n.client))&&(n.title===void 0||typeof n.title==`string`);break;case`exited`:r=O(n.pane);break;case`resized`:r=O(n.pane)&&O(n.rows)&&O(n.cols);break;case`hello`:r=O(n.client)&&O(n.panes);break;case`replay_complete`:r=!0;break;case`size_owner`:r=typeof n.owned==`boolean`&&(n.generation===void 0||ve(n.generation));break;case`error`:r=typeof n.message==`string`;break;case`reordered`:r=Array.isArray(n.order)&&n.order.every(O);break;case`zoomed`:r=n.pane===null||O(n.pane);break;case`pending`:r=O(n.count);break;case`attention`:r=O(n.pane)&&(n.message===void 0||typeof n.message==`string`);break;case`recovery`:r=O(n.pane)&&typeof n.state==`string`&&(n.detail===void 0||typeof n.detail==`string`)&&(n.deadline_epoch===void 0||_e(n.deadline_epoch))&&O(n.attempt);break;default:return null}return r?n:null}function be(e,t){return!e||e.readyState!==WebSocket.OPEN?!1:(e.send(JSON.stringify(t)),!0)}function xe(e){return e.byteLength<4?null:{pane:new DataView(e).getUint32(0,!0),data:new Uint8Array(e,4)}}function Se(e){let[t,n]=(0,D.useState)({});return{recovery:t,setRecovery:n,cancelRecovery:(0,D.useCallback)(t=>{be(e.current,{type:`cancel_recovery`,pane:t})},[e])}}var Ce=240,we=`cubic-bezier(0.2, 0, 0, 1)`;function Te(){return typeof window>`u`||typeof window.matchMedia!=`function`||window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}function Ee(e){return e instanceof HTMLElement&&typeof e.animate==`function`&&!Te()}function De(e,t){if(!Ee(e)){t();return}let n=!1,r=()=>{n||(n=!0,t())},i=e.animate([{opacity:1,transform:`translateY(0)`},{opacity:0,transform:`translateY(12px)`}],{duration:200,easing:we,fill:`forwards`});i.onfinish=r,i.oncancel=r}function Oe(e){Ee(e)&&e.animate([{opacity:0},{opacity:1}],{duration:Ce,easing:we})}var ke={esc:`\x1B`,tab:` `,"shift-tab":`\x1B[Z`,"ctrl-b":``,"ctrl-c":``,"ctrl-d":``,"ctrl-z":``,"ctrl-l":`\f`,"ctrl-r":``,up:`\x1B[A`,down:`\x1B[B`,right:`\x1B[C`,left:`\x1B[D`},Ae={up:`\x1BOA`,down:`\x1BOB`,right:`\x1BOC`,left:`\x1BOD`};function je(e,t=!1){if(t){let t=Ae[e];if(t)return t}return ke[e]}function Me(e){if(e.length!==1)return null;if(e===` `)return`\0`;if(e===`?`)return``;let t=e.charCodeAt(0);return t>=97&&t<=122&&(t-=32),t<64||t>95?null:String.fromCharCode(t&31)}function Ne(e,t){return e?t.startsWith(`\x1B`)?{data:t,armed:!0}:{data:Me(t)??t,armed:!1}:{data:t,armed:!1}}function Pe(e,t){return e?t.startsWith(`\x1B`)?{data:t,armed:!0}:{data:[...t].length===1?`\x1b${t}`:t,armed:!1}:{data:t,armed:!1}}function Fe(e){return e===`shown`||e===`hidden`?e:null}function Ie(e,t){return e||t<768}var Le=[{kind:`key`,key:`esc`,label:`Esc`,aria:`Escape`},{kind:`key`,key:`tab`,label:`Tab`,aria:`Tab`},{kind:`key`,key:`shift-tab`,label:`⇧Tab`,aria:`Shift Tab`},{kind:`latch`,latch:`alt`,label:`Alt`,aria:`Alt for the next key`},{kind:`latch`,latch:`ctrl`,label:`Ctrl`,aria:`Control for the next key`},{kind:`key`,key:`ctrl-b`,label:`^B`,aria:`Control B`},{kind:`key`,key:`ctrl-c`,label:`^C`,aria:`Control C`},{kind:`key`,key:`ctrl-d`,label:`^D`,aria:`Control D`},{kind:`key`,key:`ctrl-z`,label:`^Z`,aria:`Control Z`},{kind:`key`,key:`ctrl-l`,label:`^L`,aria:`Control L`},{kind:`key`,key:`ctrl-r`,label:`^R`,aria:`Control R`},{kind:`key`,key:`left`,label:`←`,aria:`Left arrow`},{kind:`key`,key:`down`,label:`↓`,aria:`Down arrow`},{kind:`key`,key:`up`,label:`↑`,aria:`Up arrow`},{kind:`key`,key:`right`,label:`→`,aria:`Right arrow`}];function Re(e,t){return e!==null&&t.includes(e)?e:null}function ze(e,t){return e!==null&&Re(e,t)===null}function Be(e,t){return e===t?null:t}function Ve({socketRef:e,viewsRef:t,zoomed:n,zoomAskedRef:r,active:i,onForceFit:a}){let o=t=>be(e.current,t),s=()=>o({type:`create`,rows:24,cols:80}),c=e=>{let t=Be(r.current===void 0?n:r.current,e);o({type:`zoom`,pane:t})&&(r.current=t)},l=()=>o({type:`claim_size`});return{create:s,toggleZoom:c,claimSize:()=>{l()&&a()},requestSize:l,closePane:e=>De(document.querySelector(`[data-pane-cell][data-pane-id="${e}"]`),()=>o({type:`close`,pane:e})),reorder:e=>o({type:`reorder`,order:e}),sendKey:e=>{if(i===null)return;let n=t.current.get(i)?.term.modes.applicationCursorKeysMode??!1;o({type:`input`,pane:i,data:je(e,n)})}}}function He(e){return e===`live`}function Ue(e,t,n,r,i){let a=r!==void 0&&r!==t.current;n&&(!e.current||a)&&i(),e.current=n,t.current=r??null}function We(e,t){let[n,r]=(0,D.useState)(0);return re(()=>{He(e)&&be(t.current,{type:`claim_size`})},e===`live`),{refitEpoch:n,forceFit:(0,D.useCallback)(()=>r(e=>e+1),[])}}function Ge(){let[e,t]=(0,D.useState)(null),[n,r]=(0,D.useState)(`connecting`),[i,a]=(0,D.useState)(0),[o,s]=(0,D.useState)([]),[c,l]=(0,D.useState)(null),[u,d]=(0,D.useState)(null),[f,p]=(0,D.useState)({}),[m,h]=(0,D.useState)(null),[g,_]=(0,D.useState)(!0);return{pending:e,setPending:t,link:n,setLink:r,replayLeft:i,setReplayLeft:a,panes:o,setPanes:s,active:c,setActive:l,zoomed:u,setZoomed:d,titles:f,setTitles:p,closing:m,setClosing:h,ownsSize:g,setOwnsSize:_}}function Ke(e){let t=e.indexOf(`;`);if(t===-1)return{kind:`ignore`};let n=e.slice(0,t),r=e.slice(t+1);if(!Ye(n)||r===`?`||r===``)return{kind:`ignore`};let i=Xe(r);return i===null?{kind:`ignore`}:{kind:`write`,text:i}}var qe=`cpqs01234567`,Je=`cs`;function Ye(e){if(e===``)return!0;let t=[...e];return t.every(e=>qe.includes(e))?t.some(e=>Je.includes(e)):!1}function Xe(e){try{let t=atob(e),n=Uint8Array.from(t,e=>e.charCodeAt(0));return new TextDecoder(`utf-8`,{fatal:!0}).decode(n)}catch{return null}}function Ze(e,t,n){e.write(``,()=>{t.release(),n()})}function Qe(e){let t=e[0];return Array.isArray(t)?t[0]:t}function $e(e,t,n){let r=t,i=()=>r;return e.parser.registerCsiHandler({final:`n`},i),e.parser.registerCsiHandler({prefix:`?`,final:`n`},i),e.parser.registerCsiHandler({final:`c`},i),e.parser.registerCsiHandler({prefix:`>`,final:`c`},i),e.parser.registerCsiHandler({prefix:`=`,final:`c`},i),e.parser.registerCsiHandler({intermediates:`$`,final:`p`},i),e.parser.registerCsiHandler({prefix:`?`,intermediates:`$`,final:`p`},i),e.parser.registerCsiHandler({final:`t`},e=>r&&[14,16,18].includes(Qe(e)??-1)),e.parser.registerDcsHandler({intermediates:`$`,final:`q`},i),e.parser.registerDcsHandler({prefix:`?`,intermediates:`$`,final:`q`},i),e.parser.registerOscHandler(52,e=>(r||n(e),!0)),{begin(){r=!0},release(){r=!1}}}function et(){return{active:!1,panes:new Map}}function tt(){return{containerRef:(0,D.useRef)(null),socketRef:(0,D.useRef)(null),viewsRef:(0,D.useRef)(new Map),bodyRefs:(0,D.useRef)(new Map),ptySizesRef:(0,D.useRef)(new Map),askedSizesRef:(0,D.useRef)(new Map),desiredSizesRef:(0,D.useRef)(new Map),ownsSizeRef:(0,D.useRef)(!0),sizeOwnerGenerationRef:(0,D.useRef)(null),pendingRef:(0,D.useRef)(new Map),replayRef:(0,D.useRef)(et()),zoomAskedRef:(0,D.useRef)(void 0),slotRefs:(0,D.useRef)(new Map)}}function nt({socketRef:e,panes:t,active:n,zoom:r,link:i,commands:a,focusPane:o,cancelRecovery:s,openCompose:c}){let l=p(),u=(0,D.useRef)({commands:a,focusPane:o,cancelRecovery:s,openCompose:c,socketRef:e});u.current={commands:a,focusPane:o,cancelRecovery:s,openCompose:c,socketRef:e};let d=(0,D.useMemo)(()=>{let e={"terminal.newPane":()=>u.current.commands.create(),paneCursor:()=>({index:n===null?-1:t.indexOf(n),count:t.length})};t.length>0&&(e.focusPaneAt=e=>{let n=t[e];n!==void 0&&(r!==null&&n!==r?u.current.commands.toggleZoom(n):u.current.focusPane(n))});for(let n of f){let r=T(n.id);if(r===null)continue;let i=ie(t,r);i!==null&&(e[n.id]=()=>u.current.focusPane(i))}return n===null||(e[`terminal.closePane`]=()=>u.current.commands.closePane(n),e[`terminal.claimSizing`]=()=>u.current.commands.claimSize(),e[`terminal.cancelRecovery`]=()=>u.current.cancelRecovery(n),e[`terminal.composeMessage`]=()=>u.current.openCompose(),e[`terminal.swapPanePrompt`]=rt,e.swapPanes=e=>{let r=ie(t,e);r!==null&&u.current.commands.reorder(C(t,n,r))},e.zoomActivePane=()=>u.current.commands.toggleZoom(n),e.sendInput=e=>void be(u.current.socketRef.current,{type:`input`,pane:n,data:e})),e},[t,n,r]);ee(d);let m=l?.disarm;(0,D.useEffect)(()=>{i!==`live`&&m?.()},[i,m])}function rt(){}function it({termHeight:e,bodyHeight:t,rows:n,cursorRow:r,atLive:i}){let a=e-t;if(a<=0||n<=0||!i)return 0;let o=e/n,s=(Math.min(Math.max(r,0),n-1)+1)*o,c=Math.min(Math.max(s-t,0),a);return Math.round(a-c)}function at({panes:e,viewsRef:t,bodyRefs:n,keyboardOpen:r,size:i,zoomed:a,mode:o}){(0,D.useEffect)(()=>{let r=[];for(let i of e){let e=t.current.get(i),a=n.current.get(i),o=e?.term.element;if(!e||!a||!o)continue;let{term:s}=e,c=()=>{let e=s.buffer.active,t=it({termHeight:o.offsetHeight,bodyHeight:a.clientHeight,rows:s.rows,cursorRow:e.cursorY,atLive:e.viewportY===e.baseY}),n=t>0?`-${t}px`:``;o.style.marginBottom!==n&&(o.style.marginBottom=n)};c();let l=s.onRender(c),u=s.onScroll(c),d=new ResizeObserver(c);d.observe(a),r.push(()=>{l.dispose(),u.dispose(),d.disconnect()})}return()=>{for(let e of r)e()}},[e,t,n,r,i,a,o])}var ot=`nightcrow.pane.active`;function st(){try{let e=sessionStorage.getItem(ot);if(!e)return{};let t=JSON.parse(e);if(!t||typeof t!=`object`||Array.isArray(t))return{};let n={};for(let[e,r]of Object.entries(t))typeof r==`number`&&Number.isInteger(r)&&(n[e]=r);return n}catch{return{}}}function ct(e){try{sessionStorage.setItem(ot,JSON.stringify(e))}catch{}}function lt(e){return st()[e]}function ut(e,t){let n=st();n[e]!==t&&(n[e]=t,ct(n))}function dt(e,t){let n=st();n[e]===t&&(delete n[e],ct(n))}function ft({repo:e,panes:t,replayLeft:n,active:r,setActive:i,zoomed:a,zoom:o,viewsRef:s,panelRef:c,size:l,mode:u}){(0,D.useEffect)(()=>{if(ze(a,t))return;let o=ue(r,t,n,lt(e));o!==null&&(i(o),ut(e,o))},[r,t,n,e,a,i]),(0,D.useEffect)(()=>{o!==null&&o!==r&&(i(o),ut(e,o))},[o,r,e,i]);let f=(0,D.useRef)(null);(0,D.useEffect)(()=>{let e=r===null?void 0:s.current.get(r),t=e?.term.element,n=d(r,!!t&&t.clientHeight>0,f.current);if(!n.focus||!e){f.current=n.held;return}let i=de(document.activeElement,c.current);h(i)&&(e.term.focus(),f.current=n.held)},[r,t,l,u,o,s,c])}var pt=60;function mt({panes:e,size:t,zoomed:n,mode:r,screenScale:i,socketRef:a,viewsRef:o,bodyRefs:s,ptySizesRef:c,desiredSizesRef:l,askedSizesRef:u,ownsSize:d,layoutPending:f,keyboardOpen:p,refitEpoch:m}){let h=(0,D.useRef)(null),g=(0,D.useRef)(m),_=(0,D.useCallback)(()=>{for(let[e,t]of o.current){let n=s.current.get(e);if(!n||n.clientHeight===0||n.clientWidth===0)continue;let r=l.current.get(e)??{rows:t.term.rows,cols:t.term.cols},i=u.current.get(e);i&&i.rows===r.rows&&i.cols===r.cols||be(a.current,{type:`resize`,pane:e,rows:r.rows,cols:r.cols})&&u.current.set(e,r)}},[a,o,s,u,l]);(0,D.useEffect)(()=>{if(!p){g.current!==m&&(u.current.clear(),g.current=m);for(let[e,t]of o.current){let n=s.current.get(e);if(n&&n.clientHeight!==0&&n.clientWidth!==0){if(!d||f){let n=c.current.get(e);n?(t.term.resize(n.cols,n.rows),l.current.set(e,n)):t.term.resize(t.term.cols,t.term.rows)}else t.term.resize(t.term.cols,t.term.rows),t.fit.fit(),l.current.set(e,{rows:t.term.rows,cols:t.term.cols})}}if(d&&!f)return h.current&&clearTimeout(h.current),h.current=setTimeout(_,pt),()=>{h.current&&clearTimeout(h.current)}}},[e,n,r,i,m,t,_,o,s,c,l,u,d,f,p])}var ht=Object.defineProperty,gt=Object.getOwnPropertyDescriptor,_t=(e,t)=>{for(var n in t)ht(e,n,{get:t[n],enumerable:!0})},k=(e,t,n,r)=>{for(var i=r>1?void 0:r?gt(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&&ht(t,n,i),i},A=(e,t)=>(n,r)=>t(n,r,e),vt=`Terminal input`,yt={get:()=>vt,set:e=>vt=e},bt=`Too much output to announce, navigate to rows manually to read`,xt={get:()=>bt,set:e=>bt=e};function St(e){return e.replace(/\r?\n/g,`\r`)}function Ct(e,t){return t?`\x1B[200~`+e+`\x1B[201~`:e}function wt(e,t){e.clipboardData&&e.clipboardData.setData(`text/plain`,t.selectionText),e.preventDefault()}function Tt(e,t,n,r){e.stopPropagation(),e.clipboardData&&Et(e.clipboardData.getData(`text/plain`),t,n,r)}function Et(e,t,n,r){e=St(e),e=Ct(e,n.decPrivateModes.bracketedPasteMode&&r.rawOptions.ignoreBracketedPasteMode!==!0),n.triggerDataEvent(e,!0),t.value=``}function Dt(e,t,n){let r=n.getBoundingClientRect(),i=e.clientX-r.left-10,a=e.clientY-r.top-10;t.style.width=`20px`,t.style.height=`20px`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.zIndex=`1000`,t.focus()}function Ot(e,t,n,r,i){Dt(e,t,n),i&&r.rightClickSelect(e),t.value=r.selectionText,t.select()}function kt(e){return e>65535?(e-=65536,String.fromCharCode((e>>10)+55296)+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)}function At(e,t=0,n=e.length){let r=``;for(let i=t;i65535?(t-=65536,r+=String.fromCharCode((t>>10)+55296)+String.fromCharCode(t%1024+56320)):r+=String.fromCharCode(t)}return r}var jt=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i=0;if(this._interim){let n=e.charCodeAt(i++);56320<=n&&n<=57343?t[r++]=(this._interim-55296)*1024+n-56320+65536:(t[r++]=this._interim,t[r++]=n),this._interim=0}for(let a=i;a=n)return this._interim=i,r;let o=e.charCodeAt(a);56320<=o&&o<=57343?t[r++]=(i-55296)*1024+o-56320+65536:(t[r++]=i,t[r++]=o)}else i!==65279&&(t[r++]=i)}return r}},Mt=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i,a,o,s,c=0,l=0;if(this.interim[0]){let i=!1,a=this.interim[0];a&=(a&224)==192?31:(a&240)==224?15:7;let o=0,s;for(;(s=this.interim[++o]&63)&&o<4;)a<<=6,a|=s;let c=(this.interim[0]&224)==192?2:(this.interim[0]&240)==224?3:4,u=c-o;for(;l=n)return 0;if(s=e[l++],(s&192)!=128){l--,i=!0;break}this.interim[o++]=s,a<<=6,a|=s&63}i||(c===2?a<128?l--:t[r++]=a:c===3?a<2048||a>=55296&&a<=57343||a===65279||(t[r++]=a):a<65536||a>1114111||(t[r++]=a)),this.interim.fill(0)}let u=n-4,d=l;for(;d=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128||(c=(i&31)<<6|a&63,c<128)){d--;continue}t[r++]=c}else if((i&240)==224){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(c=(i&15)<<12|(a&63)<<6|o&63,c<2048||c>=55296&&c<=57343||c===65279)continue;t[r++]=c}else if((i&248)==240){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,this.interim[2]=o,r;if(s=e[d++],(s&192)!=128){d--;continue}if(c=(i&7)<<18|(a&63)<<12|(o&63)<<6|s&63,c<65536||c>1114111)continue;t[r++]=c}}return r}},Nt=``,Pt=` `,Ft=class e{constructor(){this.fg=0,this.bg=0,this.extended=new It}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)==50331648}isBgRGB(){return(this.bg&50331648)==50331648}isFgPalette(){return(this.fg&50331648)==16777216||(this.fg&50331648)==33554432}isBgPalette(){return(this.bg&50331648)==16777216||(this.bg&50331648)==33554432}isFgDefault(){return!(this.fg&50331648)}isBgDefault(){return!(this.bg&50331648)}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==16777216||(this.extended.underlineColor&50331648)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?!(this.extended.underlineColor&50331648):this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},It=class e{constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new e(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}},Lt=class e extends Ft{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new It,this.combinedData=``}static fromCharData(t){let n=new e;return n.setFromCharData(t),n}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?kt(this.content&2097151):``}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let n=e[1].charCodeAt(0);if(55296<=n&&n<=56319){let r=e[1].charCodeAt(1);56320<=r&&r<=57343?this.content=(n-55296)*1024+r-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},Rt=`di$target`,zt=`di$dependencies`,Bt=new Map;function Vt(e){return e[zt]||[]}function j(e){if(Bt.has(e))return Bt.get(e);let t=function(e,n,r){if(arguments.length!==3)throw Error(`@IServiceName-decorator can only be used to decorate a parameter`);Ht(t,e,r)};return t._id=e,Bt.set(e,t),t}function Ht(e,t,n){t[Rt]===t?t[zt].push({id:e,index:n}):(t[zt]=[{id:e,index:n}],t[Rt]=t)}var Ut=j(`BufferService`),Wt=j(`CoreMouseService`),Gt=j(`CoreService`),Kt=j(`CharsetService`),qt=j(`InstantiationService`),Jt=j(`LogService`),Yt=j(`OptionsService`),Xt=j(`OscLinkService`),Zt=j(`UnicodeService`),Qt=j(`DecorationService`),$t=class{constructor(e,t,n){this._bufferService=e,this._optionsService=t,this._oscLinkService=n}provideLinks(e,t){let n=this._bufferService.buffer.lines.get(e-1);if(!n){t(void 0);return}let r=[],i=this._optionsService.rawOptions.linkHandler,a=new Lt,o=n.getTrimmedLength(),s=-1,c=-1,l=!1;for(let t=0;ti?i.activate(e,t,a):en(e,t),hover:(e,t)=>i?.hover?.(e,t,a),leave:(e,t)=>i?.leave?.(e,t,a)})}l=!1,a.hasExtendedAttrs()&&a.extended.urlId?(c=t,s=a.extended.urlId):(c=-1,s=-1)}}t(r)}};$t=k([A(0,Ut),A(1,Yt),A(2,Xt)],$t);function en(e,t){if(confirm(`Do you want to navigate to ${t}? + +WARNING: This link could potentially be dangerous`)){let e=window.open();if(e){try{e.opener=null}catch{}e.location.href=t}else console.warn(`Opening link blocked as opener could not be cleared`)}}var tn=j(`CharSizeService`),nn=j(`CoreBrowserService`),rn=j(`MouseService`),an=j(`RenderService`),on=j(`SelectionService`),sn=j(`CharacterJoinerService`),cn=j(`ThemeService`),ln=j(`LinkProviderService`),un=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?gn.isErrorNoTelemetry(e)?new gn(e.message+` + +`+e.stack):Error(e.message+` + +`+e.stack):e},0)}}addListener(e){return this.listeners.push(e),()=>{this._removeListener(e)}}emit(e){this.listeners.forEach(t=>{t(e)})}_removeListener(e){this.listeners.splice(this.listeners.indexOf(e),1)}setUnexpectedErrorHandler(e){this.unexpectedErrorHandler=e}getUnexpectedErrorHandler(){return this.unexpectedErrorHandler}onUnexpectedError(e){this.unexpectedErrorHandler(e),this.emit(e)}onUnexpectedExternalError(e){this.unexpectedErrorHandler(e)}};function dn(e){pn(e)||un.onUnexpectedError(e)}var fn=`Canceled`;function pn(e){return e instanceof mn||e instanceof Error&&e.name===fn&&e.message===fn}var mn=class extends Error{constructor(){super(fn),this.name=this.message}};function hn(e){return Error(e?`Illegal argument: ${e}`:`Illegal argument`)}var gn=class e extends Error{constructor(e){super(e),this.name=`CodeExpectedError`}static fromError(t){if(t instanceof e)return t;let n=new e;return n.message=t.message,n.stack=t.stack,n}static isErrorNoTelemetry(e){return e.name===`CodeExpectedError`}},_n=class e extends Error{constructor(t){super(t||`An unexpected bug occurred.`),Object.setPrototypeOf(this,e.prototype)}};function vn(e,t=0){return e[e.length-(1+t)]}var yn;(e=>{function t(e){return e<0}e.isLessThan=t;function n(e){return e<=0}e.isLessThanOrEqual=n;function r(e){return e>0}e.isGreaterThan=r;function i(e){return e===0}e.isNeitherLessOrGreaterThan=i,e.greaterThan=1,e.lessThan=-1,e.neitherLessOrGreaterThan=0})(yn||={});var bn=class e{constructor(e){this.iterate=e}forEach(e){this.iterate(t=>(e(t),!0))}toArray(){let e=[];return this.iterate(t=>(e.push(t),!0)),e}filter(t){return new e(e=>this.iterate(n=>!t(n)||e(n)))}map(t){return new e(e=>this.iterate(n=>e(t(n))))}some(e){let t=!1;return this.iterate(n=>(t=e(n),!t)),t}findFirst(e){let t;return this.iterate(n=>!e(n)||(t=n,!1)),t}findLast(e){let t;return this.iterate(n=>(e(n)&&(t=n),!0)),t}findLastMaxBy(e){let t,n=!0;return this.iterate(r=>((n||yn.isGreaterThan(e(r,t)))&&(n=!1,t=r),!0)),t}};bn.empty=new bn(e=>{});function xn(e,t){let n=this,r=!1,i;return function(){if(r)return i;if(r=!0,t)try{i=e.apply(n,arguments)}finally{t()}else i=e.apply(n,arguments);return i}}var Sn;(e=>{function t(e){return e&&typeof e==`object`&&typeof e[Symbol.iterator]==`function`}e.is=t;let n=Object.freeze([]);function r(){return n}e.empty=r;function*i(e){yield e}e.single=i;function a(e){return t(e)?e:i(e)}e.wrap=a;function o(e){return e||n}e.from=o;function*s(e){for(let t=e.length-1;t>=0;t--)yield e[t]}e.reverse=s;function c(e){return!e||e[Symbol.iterator]().next().done===!0}e.isEmpty=c;function l(e){return e[Symbol.iterator]().next().value}e.first=l;function u(e,t){let n=0;for(let r of e)if(t(r,n++))return!0;return!1}e.some=u;function d(e,t){for(let n of e)if(t(n))return n}e.find=d;function*f(e,t){for(let n of e)t(n)&&(yield n)}e.filter=f;function*p(e,t){let n=0;for(let r of e)yield t(r,n++)}e.map=p;function*m(e,t){let n=0;for(let r of e)yield*t(r,n++)}e.flatMap=m;function*h(...e){for(let t of e)yield*t}e.concat=h;function g(e,t,n){let r=n;for(let n of e)r=t(r,n);return r}e.reduce=g;function*_(e,t,n=e.length){for(t<0&&(t+=e.length),n<0?n+=e.length:n>e.length&&(n=e.length);t1)throw AggregateError(t,`Encountered errors while disposing of store`);return Array.isArray(e)?[]:e}if(e)return e.dispose(),e}function kn(...e){return M(()=>On(e))}function M(e){let t=wn({dispose:xn(()=>{Tn(t),e()})});return t}var An=class e{constructor(){this._toDispose=new Set,this._isDisposed=!1,wn(this)}dispose(){this._isDisposed||(Tn(this),this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(this._toDispose.size!==0)try{On(this._toDispose)}finally{this._toDispose.clear()}}add(t){if(!t)return t;if(t===this)throw Error(`Cannot register a disposable on itself!`);return En(t,this),this._isDisposed?e.DISABLE_DISPOSED_WARNING||console.warn(Error(`Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!`).stack):this._toDispose.add(t),t}delete(e){if(e){if(e===this)throw Error(`Cannot dispose a disposable on itself!`);this._toDispose.delete(e),e.dispose()}}deleteAndLeak(e){e&&this._toDispose.has(e)&&(this._toDispose.delete(e),En(e,null))}};An.DISABLE_DISPOSED_WARNING=!1;var jn=An,N=class{constructor(){this._store=new jn,wn(this),En(this._store,this)}dispose(){Tn(this),this._store.dispose()}_register(e){if(e===this)throw Error(`Cannot register a disposable on itself!`);return this._store.add(e)}};N.None=Object.freeze({dispose(){}});var Mn=class{constructor(){this._isDisposed=!1,wn(this)}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),e&&En(e,this),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,Tn(this),this._value?.dispose(),this._value=void 0}clearAndLeak(){let e=this._value;return this._value=void 0,e&&En(e,null),e}},Nn=typeof window==`object`?window:globalThis,Pn=class e{constructor(t){this.element=t,this.next=e.Undefined,this.prev=e.Undefined}};Pn.Undefined=new Pn(void 0);var P=Pn,Fn=class{constructor(){this._first=P.Undefined,this._last=P.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===P.Undefined}clear(){let e=this._first;for(;e!==P.Undefined;){let t=e.next;e.prev=P.Undefined,e.next=P.Undefined,e=t}this._first=P.Undefined,this._last=P.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){let n=new P(e);if(this._first===P.Undefined)this._first=n,this._last=n;else if(t){let e=this._last;this._last=n,n.prev=e,e.next=n}else{let e=this._first;this._first=n,n.next=e,e.prev=n}this._size+=1;let r=!1;return()=>{r||(r=!0,this._remove(n))}}shift(){if(this._first!==P.Undefined){let e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==P.Undefined){let e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==P.Undefined&&e.next!==P.Undefined){let t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===P.Undefined&&e.next===P.Undefined?(this._first=P.Undefined,this._last=P.Undefined):e.next===P.Undefined?(this._last=this._last.prev,this._last.next=P.Undefined):e.prev===P.Undefined&&(this._first=this._first.next,this._first.prev=P.Undefined);--this._size}*[Symbol.iterator](){let e=this._first;for(;e!==P.Undefined;)yield e.element,e=e.next}},In=globalThis.performance&&typeof globalThis.performance.now==`function`,Ln=class e{static create(t){return new e(t)}constructor(e){this._now=In&&e===!1?Date.now:globalThis.performance.now.bind(globalThis.performance),this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}reset(){this._startTime=this._now(),this._stopTime=-1}elapsed(){return this._stopTime===-1?this._now()-this._startTime:this._stopTime-this._startTime}},Rn;(e=>{e.None=()=>N.None;function t(e,t){return d(e,()=>{},0,void 0,!0,void 0,t)}e.defer=t;function n(e){return(t,n=null,r)=>{let i=!1,a;return a=e(e=>{if(!i)return a?a.dispose():i=!0,t.call(n,e)},null,r),i&&a.dispose(),a}}e.once=n;function r(e,t,n){return l((n,r=null,i)=>e(e=>n.call(r,t(e)),null,i),n)}e.map=r;function i(e,t,n){return l((n,r=null,i)=>e(e=>{t(e),n.call(r,e)},null,i),n)}e.forEach=i;function a(e,t,n){return l((n,r=null,i)=>e(e=>t(e)&&n.call(r,e),null,i),n)}e.filter=a;function o(e){return e}e.signal=o;function s(...e){return(t,n=null,r)=>u(kn(...e.map(e=>e(e=>t.call(n,e)))),r)}e.any=s;function c(e,t,n,i){let a=n;return r(e,e=>(a=t(a,e),a),i)}e.reduce=c;function l(e,t){let n,r=new F({onWillAddFirstListener(){n=e(r.fire,r)},onDidRemoveLastListener(){n?.dispose()}});return t?.add(r),r.event}function u(e,t){return t instanceof Array?t.push(e):t&&t.add(e),e}function d(e,t,n=100,r=!1,i=!1,a,o){let s,c,l,u=0,d,f=new F({leakWarningThreshold:a,onWillAddFirstListener(){s=e(e=>{u++,c=t(c,e),r&&!l&&(f.fire(c),c=void 0),d=()=>{let e=c;c=void 0,l=void 0,(!r||u>1)&&f.fire(e),u=0},typeof n==`number`?(clearTimeout(l),l=setTimeout(d,n)):l===void 0&&(l=0,queueMicrotask(d))})},onWillRemoveListener(){i&&u>0&&d?.()},onDidRemoveLastListener(){d=void 0,s.dispose()}});return o?.add(f),f.event}e.debounce=d;function f(t,n=0,r){return e.debounce(t,(e,t)=>e?(e.push(t),e):[t],n,void 0,!0,void 0,r)}e.accumulate=f;function p(e,t=(e,t)=>e===t,n){let r=!0,i;return a(e,e=>{let n=r||!t(e,i);return r=!1,i=e,n},n)}e.latch=p;function m(t,n,r){return[e.filter(t,n,r),e.filter(t,e=>!n(e),r)]}e.split=m;function h(e,t=!1,n=[],r){let i=n.slice(),a=e(e=>{i?i.push(e):s.fire(e)});r&&r.add(a);let o=()=>{i?.forEach(e=>s.fire(e)),i=null},s=new F({onWillAddFirstListener(){a||(a=e(e=>s.fire(e)),r&&r.add(a))},onDidAddFirstListener(){i&&(t?setTimeout(o):o())},onDidRemoveLastListener(){a&&a.dispose(),a=null}});return r&&r.add(s),s.event}e.buffer=h;function g(e,t){return(n,r,i)=>{let a=t(new v);return e(function(e){let t=a.evaluate(e);t!==_&&n.call(r,t)},void 0,i)}}e.chain=g;let _=Symbol(`HaltChainable`);class v{constructor(){this.steps=[]}map(e){return this.steps.push(e),this}forEach(e){return this.steps.push(t=>(e(t),t)),this}filter(e){return this.steps.push(t=>e(t)?t:_),this}reduce(e,t){let n=t;return this.steps.push(t=>(n=e(n,t),n)),this}latch(e=(e,t)=>e===t){let t=!0,n;return this.steps.push(r=>{let i=t||!e(r,n);return t=!1,n=r,i?r:_}),this}evaluate(e){for(let t of this.steps)if(e=t(e),e===_)break;return e}}function ee(e,t,n=e=>e){let r=(...e)=>i.fire(n(...e)),i=new F({onWillAddFirstListener:()=>e.on(t,r),onDidRemoveLastListener:()=>e.removeListener(t,r)});return i.event}e.fromNodeEventEmitter=ee;function y(e,t,n=e=>e){let r=(...e)=>i.fire(n(...e)),i=new F({onWillAddFirstListener:()=>e.addEventListener(t,r),onDidRemoveLastListener:()=>e.removeEventListener(t,r)});return i.event}e.fromDOMEventEmitter=y;function te(e){return new Promise(t=>n(e)(t))}e.toPromise=te;function b(e){let t=new F;return e.then(e=>{t.fire(e)},()=>{t.fire(void 0)}).finally(()=>{t.dispose()}),t.event}e.fromPromise=b;function x(e,t){return e(e=>t.fire(e))}e.forward=x;function ne(e,t,n){return t(n),e(e=>t(e))}e.runAndSubscribe=ne;class S{constructor(e,t){this._observable=e,this._counter=0,this._hasChanged=!1;let n={onWillAddFirstListener:()=>{e.addObserver(this)},onDidRemoveLastListener:()=>{e.removeObserver(this)}};this.emitter=new F(n),t&&t.add(this.emitter)}beginUpdate(e){this._counter++}handlePossibleChange(e){}handleChange(e,t){this._hasChanged=!0}endUpdate(e){this._counter--,this._counter===0&&(this._observable.reportChanges(),this._hasChanged&&(this._hasChanged=!1,this.emitter.fire(this._observable.get())))}}function C(e,t){return new S(e,t).emitter.event}e.fromObservable=C;function w(e){return(t,n,r)=>{let i=0,a=!1,o={beginUpdate(){i++},endUpdate(){i--,i===0&&(e.reportChanges(),a&&(a=!1,t.call(n)))},handlePossibleChange(){},handleChange(){a=!0}};e.addObserver(o),e.reportChanges();let s={dispose(){e.removeObserver(o)}};return r instanceof jn?r.add(s):Array.isArray(r)&&r.push(s),s}}e.fromObservableLight=w})(Rn||={});var zn=class e{constructor(t){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${t}_${e._idPool++}`,e.all.add(this)}start(e){this._stopWatch=new Ln,this.listenerCount=e}stop(){if(this._stopWatch){let e=this._stopWatch.elapsed();this.durations.push(e),this.elapsedOverall+=e,this.invocationCount+=1,this._stopWatch=void 0}}};zn.all=new Set,zn._idPool=0;var Bn=zn,Vn=-1,Hn=class e{constructor(t,n,r=(e._idPool++).toString(16).padStart(3,`0`)){this._errorHandler=t,this.threshold=n,this.name=r,this._warnCountdown=0}dispose(){this._stacks?.clear()}check(e,t){let n=this.threshold;if(n<=0||t{let t=this._stacks.get(e.value)||0;this._stacks.set(e.value,t-1)}}getMostFrequentStack(){if(!this._stacks)return;let e,t=0;for(let[n,r]of this._stacks)(!e||t0||this._options?.leakWarningThreshold?new Un(e?.onListenerError??dn,this._options?.leakWarningThreshold??Vn):void 0,this._perfMon=this._options?._profName?new Bn(this._options._profName):void 0,this._deliveryQueue=this._options?.deliveryQueue}dispose(){this._disposed||(this._disposed=!0,this._deliveryQueue?.current===this&&this._deliveryQueue.reset(),this._listeners&&(this._listeners=void 0,this._size=0),this._options?.onDidRemoveLastListener?.(),this._leakageMon?.dispose())}get event(){return this._event??=(e,t,n)=>{if(this._leakageMon&&this._size>this._leakageMon.threshold**2){let e=`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;console.warn(e);let t=this._leakageMon.getMostFrequentStack()??[`UNKNOWN stack`,-1],n=new Kn(`${e}. HINT: Stack shows most frequent listener (${t[1]}-times)`,t[0]);return(this._options?.onListenerError||dn)(n),N.None}if(this._disposed)return N.None;t&&(e=e.bind(t));let r=new Jn(e),i;this._leakageMon&&this._size>=Math.ceil(this._leakageMon.threshold*.2)&&(r.stack=Wn.create(),i=this._leakageMon.check(r.stack,this._size+1)),this._listeners?this._listeners instanceof Jn?(this._deliveryQueue??=new Xn,this._listeners=[this._listeners,r]):this._listeners.push(r):(this._options?.onWillAddFirstListener?.(this),this._listeners=r,this._options?.onDidAddFirstListener?.(this)),this._size++;let a=M(()=>{i?.(),this._removeListener(r)});return n instanceof jn?n.add(a):Array.isArray(n)&&n.push(a),a},this._event}_removeListener(e){if(this._options?.onWillRemoveListener?.(this),!this._listeners)return;if(this._size===1){this._listeners=void 0,this._options?.onDidRemoveLastListener?.(this),this._size=0;return}let t=this._listeners,n=t.indexOf(e);if(n===-1)throw console.log(`disposed?`,this._disposed),console.log(`size?`,this._size),console.log(`arr?`,JSON.stringify(this._listeners)),Error(`Attempted to dispose unknown listener`);this._size--,t[n]=void 0;let r=this._deliveryQueue.current===this;if(this._size*Yn<=t.length){let e=0;for(let n=0;n0}},Xn=class{constructor(){this.i=-1,this.end=0}enqueue(e,t,n){this.i=0,this.end=n,this.current=e,this.value=t}reset(){this.i=this.end,this.current=void 0,this.value=void 0}},Zn=class{constructor(){this.mapWindowIdToZoomLevel=new Map,this._onDidChangeZoomLevel=new F,this.onDidChangeZoomLevel=this._onDidChangeZoomLevel.event,this.mapWindowIdToZoomFactor=new Map,this._onDidChangeFullscreen=new F,this.onDidChangeFullscreen=this._onDidChangeFullscreen.event,this.mapWindowIdToFullScreen=new Map}getZoomLevel(e){return this.mapWindowIdToZoomLevel.get(this.getWindowId(e))??0}setZoomLevel(e,t){if(this.getZoomLevel(t)===e)return;let n=this.getWindowId(t);this.mapWindowIdToZoomLevel.set(n,e),this._onDidChangeZoomLevel.fire(n)}getZoomFactor(e){return this.mapWindowIdToZoomFactor.get(this.getWindowId(e))??1}setZoomFactor(e,t){this.mapWindowIdToZoomFactor.set(this.getWindowId(t),e)}setFullscreen(e,t){if(this.isFullscreen(t)===e)return;let n=this.getWindowId(t);this.mapWindowIdToFullScreen.set(n,e),this._onDidChangeFullscreen.fire(n)}isFullscreen(e){return!!this.mapWindowIdToFullScreen.get(this.getWindowId(e))}getWindowId(e){return e.vscodeWindowId}};Zn.INSTANCE=new Zn;var Qn=Zn;function $n(e,t,n){typeof t==`string`&&(t=e.matchMedia(t)),t.addEventListener(`change`,n)}Qn.INSTANCE.onDidChangeZoomLevel;function er(e){return Qn.INSTANCE.getZoomFactor(e)}Qn.INSTANCE.onDidChangeFullscreen;var tr=typeof navigator==`object`?navigator.userAgent:``,nr=tr.indexOf(`Firefox`)>=0,rr=tr.indexOf(`AppleWebKit`)>=0,ir=tr.indexOf(`Chrome`)>=0,ar=!ir&&tr.indexOf(`Safari`)>=0;tr.indexOf(`Electron/`),tr.indexOf(`Android`);var or=!1;if(typeof Nn.matchMedia==`function`){let e=Nn.matchMedia(`(display-mode: standalone) or (display-mode: window-controls-overlay)`),t=Nn.matchMedia(`(display-mode: fullscreen)`);or=e.matches,$n(Nn,e,({matches:e})=>{or&&t.matches||(or=e)})}function sr(){return or}var cr=`en`,lr=!1,ur=!1,dr=!1,fr=!1,pr=!1,mr=cr,hr,gr=globalThis,_r;typeof gr.vscode<`u`&&typeof gr.vscode.process<`u`?_r=gr.vscode.process:typeof process<`u`&&typeof process?.versions?.node==`string`&&(_r=process);var vr=typeof _r?.versions?.electron==`string`&&_r?.type===`renderer`;if(typeof _r==`object`){lr=_r.platform===`win32`,ur=_r.platform===`darwin`,dr=_r.platform===`linux`,dr&&_r.env.SNAP&&_r.env.SNAP_REVISION,_r.env.CI||_r.env.BUILD_ARTIFACTSTAGINGDIRECTORY,mr=cr;let e=_r.env.VSCODE_NLS_CONFIG;if(e)try{let t=JSON.parse(e);t.userLocale,t.osLocale,mr=t.resolvedLanguage||cr,t.languagePack?.translationsConfigFile}catch{}fr=!0}else typeof navigator==`object`&&!vr?(hr=navigator.userAgent,lr=hr.indexOf(`Windows`)>=0,ur=hr.indexOf(`Macintosh`)>=0,(hr.indexOf(`Macintosh`)>=0||hr.indexOf(`iPad`)>=0||hr.indexOf(`iPhone`)>=0)&&navigator.maxTouchPoints&&navigator.maxTouchPoints,dr=hr.indexOf(`Linux`)>=0,hr?.indexOf(`Mobi`),pr=!0,mr=globalThis._VSCODE_NLS_LANGUAGE||cr,navigator.language.toLowerCase()):console.error(`Unable to resolve platform.`);var yr=lr,br=ur,xr=dr,Sr=fr;pr&&typeof gr.importScripts==`function`&&gr.origin;var Cr=hr,wr=mr,Tr;(e=>{function t(){return wr}e.value=t;function n(){return wr.length===2?wr===`en`:wr.length>=3&&wr[0]===`e`&&wr[1]===`n`&&wr[2]===`-`}e.isDefaultVariant=n;function r(){return wr===`en`}e.isDefault=r})(Tr||={});var Er=typeof gr.postMessage==`function`&&!gr.importScripts;(()=>{if(Er){let e=[];gr.addEventListener(`message`,t=>{if(t.data&&t.data.vscodeScheduleAsyncWork)for(let n=0,r=e.length;n{let r=++t;e.push({id:r,callback:n}),gr.postMessage({vscodeScheduleAsyncWork:r},`*`)}}return e=>setTimeout(e)})();var Dr=!!(Cr&&Cr.indexOf(`Chrome`)>=0);Cr&&Cr.indexOf(`Firefox`),!Dr&&Cr&&Cr.indexOf(`Safari`),Cr&&Cr.indexOf(`Edg/`),Cr&&Cr.indexOf(`Android`);var Or=typeof navigator==`object`?navigator:{};Sr||document.queryCommandSupported&&document.queryCommandSupported(`copy`)||Or&&Or.clipboard&&Or.clipboard.writeText,Sr||Or&&Or.clipboard&&Or.clipboard.readText,Sr||sr()||Or.keyboard,`ontouchstart`in Nn||Or.maxTouchPoints,Nn.PointerEvent&&(`ontouchstart`in Nn||navigator.maxTouchPoints);var kr=class{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(e,t){this._keyCodeToStr[e]=t,this._strToKeyCode[t.toLowerCase()]=e}keyCodeToStr(e){return this._keyCodeToStr[e]}strToKeyCode(e){return this._strToKeyCode[e.toLowerCase()]||0}},Ar=new kr,jr=new kr,Mr=new kr,Nr=Array(230),Pr;(e=>{function t(e){return Ar.keyCodeToStr(e)}e.toString=t;function n(e){return Ar.strToKeyCode(e)}e.fromString=n;function r(e){return jr.keyCodeToStr(e)}e.toUserSettingsUS=r;function i(e){return Mr.keyCodeToStr(e)}e.toUserSettingsGeneral=i;function a(e){return jr.strToKeyCode(e)||Mr.strToKeyCode(e)}e.fromUserSettings=a;function o(e){if(e>=98&&e<=113)return null;switch(e){case 16:return`Up`;case 18:return`Down`;case 15:return`Left`;case 17:return`Right`}return Ar.keyCodeToStr(e)}e.toElectronAccelerator=o})(Pr||={});var Fr=class e{constructor(e,t,n,r,i){this.ctrlKey=e,this.shiftKey=t,this.altKey=n,this.metaKey=r,this.keyCode=i}equals(t){return t instanceof e&&this.ctrlKey===t.ctrlKey&&this.shiftKey===t.shiftKey&&this.altKey===t.altKey&&this.metaKey===t.metaKey&&this.keyCode===t.keyCode}getHashCode(){return`K${this.ctrlKey?`1`:`0`}${this.shiftKey?`1`:`0`}${this.altKey?`1`:`0`}${this.metaKey?`1`:`0`}${this.keyCode}`}isModifierKey(){return this.keyCode===0||this.keyCode===5||this.keyCode===57||this.keyCode===6||this.keyCode===4}toKeybinding(){return new Ir([this])}isDuplicateModifierCase(){return this.ctrlKey&&this.keyCode===5||this.shiftKey&&this.keyCode===4||this.altKey&&this.keyCode===6||this.metaKey&&this.keyCode===57}},Ir=class{constructor(e){if(e.length===0)throw hn(`chords`);this.chords=e}getHashCode(){let e=``;for(let t=0,n=this.chords.length;t{function t(t){return t===e.None||t===e.Cancelled||t instanceof Xr?!0:!t||typeof t!=`object`?!1:typeof t.isCancellationRequested==`boolean`&&typeof t.onCancellationRequested==`function`}e.isCancellationToken=t,e.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:Rn.None}),e.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:Jr})})(Yr||={});var Xr=class{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?Jr:(this._emitter||=new F,this._emitter.event)}dispose(){this._emitter&&=(this._emitter.dispose(),null)}},Zr=class{constructor(e,t){this._isDisposed=!1,this._token=-1,typeof e==`function`&&typeof t==`number`&&this.setIfNotSet(e,t)}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._token!==-1&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(e,t){if(this._isDisposed)throw new _n(`Calling 'cancelAndSet' on a disposed TimeoutTimer`);this.cancel(),this._token=setTimeout(()=>{this._token=-1,e()},t)}setIfNotSet(e,t){if(this._isDisposed)throw new _n(`Calling 'setIfNotSet' on a disposed TimeoutTimer`);this._token===-1&&(this._token=setTimeout(()=>{this._token=-1,e()},t))}},Qr=class{constructor(){this.disposable=void 0,this.isDisposed=!1}cancel(){this.disposable?.dispose(),this.disposable=void 0}cancelAndSet(e,t,n=globalThis){if(this.isDisposed)throw new _n(`Calling 'cancelAndSet' on a disposed IntervalTimer`);this.cancel();let r=n.setInterval(()=>{e()},t);this.disposable=M(()=>{n.clearInterval(r),this.disposable=void 0})}dispose(){this.cancel(),this.isDisposed=!0}};(function(){typeof globalThis.requestIdleCallback!=`function`||globalThis.cancelIdleCallback})();var $r;(e=>{async function t(e){let t,n=await Promise.all(e.map(e=>e.then(e=>e,e=>{t||=e})));if(typeof t<`u`)throw t;return n}e.settled=t;function n(e){return new Promise(async(t,n)=>{try{await e(t,n)}catch(e){n(e)}})}e.withAsyncBody=n})($r||={});var ei=class e{static fromArray(t){return new e(e=>{e.emitMany(t)})}static fromPromise(t){return new e(async e=>{e.emitMany(await t)})}static fromPromises(t){return new e(async e=>{await Promise.all(t.map(async t=>e.emitOne(await t)))})}static merge(t){return new e(async e=>{await Promise.all(t.map(async t=>{for await(let n of t)e.emitOne(n)}))})}constructor(e,t){this._state=0,this._results=[],this._error=null,this._onReturn=t,this._onStateChanged=new F,queueMicrotask(async()=>{let t={emitOne:e=>this.emitOne(e),emitMany:e=>this.emitMany(e),reject:e=>this.reject(e)};try{await Promise.resolve(e(t)),this.resolve()}catch(e){this.reject(e)}finally{t.emitOne=void 0,t.emitMany=void 0,t.reject=void 0}})}[Symbol.asyncIterator](){let e=0;return{next:async()=>{do{if(this._state===2)throw this._error;if(e(this._onReturn?.(),{done:!0,value:void 0})}}static map(t,n){return new e(async e=>{for await(let r of t)e.emitOne(n(r))})}map(t){return e.map(this,t)}static filter(t,n){return new e(async e=>{for await(let r of t)n(r)&&e.emitOne(r)})}filter(t){return e.filter(this,t)}static coalesce(t){return e.filter(t,e=>!!e)}coalesce(){return e.coalesce(this)}static async toPromise(e){let t=[];for await(let n of e)t.push(n);return t}toPromise(){return e.toPromise(this)}emitOne(e){this._state===0&&(this._results.push(e),this._onStateChanged.fire())}emitMany(e){this._state===0&&(this._results=this._results.concat(e),this._onStateChanged.fire())}resolve(){this._state===0&&(this._state=1,this._onStateChanged.fire())}reject(e){this._state===0&&(this._state=2,this._error=e,this._onStateChanged.fire())}};ei.EMPTY=ei.fromArray([]);function ti(e){return ni(e,0)}function ni(e,t){switch(typeof e){case`object`:return e===null?ri(349,t):Array.isArray(e)?oi(e,t):si(e,t);case`string`:return ai(e,t);case`boolean`:return ii(e,t);case`number`:return ri(e,t);case`undefined`:return ri(937,t);default:return ri(617,t)}}function ri(e,t){return(t<<5)-t+e|0}function ii(e,t){return ri(e?433:863,t)}function ai(e,t){t=ri(149417,t);for(let n=0,r=e.length;nni(t,e),t)}function si(e,t){return t=ri(181387,t),Object.keys(e).sort().reduce((t,n)=>(t=ai(n,t),ni(e[n],t)),t)}var{registerWindow:ci,getWindow:li,getDocument:ui,getWindows:di,getWindowsCount:fi,getWindowId:pi,getWindowById:mi,hasWindow:hi,onDidRegisterWindow:gi,onWillUnregisterWindow:_i,onDidUnregisterWindow:vi}=function(){let e=new Map,t={window:Nn,disposables:new jn};e.set(Nn.vscodeWindowId,t);let n=new F,r=new F,i=new F;function a(n,r){return(typeof n==`number`?e.get(n):void 0)??(r?t:void 0)}return{onDidRegisterWindow:n.event,onWillUnregisterWindow:i.event,onDidUnregisterWindow:r.event,registerWindow(t){if(e.has(t.vscodeWindowId))return N.None;let a=new jn,o={window:t,disposables:a.add(new jn)};return e.set(t.vscodeWindowId,o),a.add(M(()=>{e.delete(t.vscodeWindowId),r.fire(t)})),a.add(I(t,L.BEFORE_UNLOAD,()=>{i.fire(t)})),n.fire(o),a},getWindows(){return e.values()},getWindowsCount(){return e.size},getWindowId(e){return e.vscodeWindowId},hasWindow(t){return e.has(t)},getWindowById:a,getWindow(e){let t=e;if(t?.ownerDocument?.defaultView)return t.ownerDocument.defaultView.window;let n=e;return n?.view?n.view.window:Nn},getDocument(e){return li(e).document}}}(),yi=class{constructor(e,t,n,r){this._node=e,this._type=t,this._handler=n,this._options=r||!1,this._node.addEventListener(this._type,this._handler,this._options)}dispose(){this._handler&&=(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,null)}};function I(e,t,n,r){return new yi(e,t,n,r)}function bi(e,t){return function(n){return t(new Kr(e,n))}}function xi(e){return function(t){return e(new Hr(t))}}var Si=function(e,t,n,r){let i=n;return t===`click`||t===`mousedown`||t===`contextmenu`?i=bi(li(e),n):(t===`keydown`||t===`keypress`||t===`keyup`)&&(i=xi(n)),I(e,t,i,r)},Ci,wi=class extends Qr{constructor(e){super(),this.defaultTarget=e&&li(e)}cancelAndSet(e,t,n){return super.cancelAndSet(e,t,n??this.defaultTarget)}},Ti=class{constructor(e,t=0){this._runner=e,this.priority=t,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(e){dn(e)}}static sort(e,t){return t.priority-e.priority}};(function(){let e=new Map,t=new Map,n=new Map,r=new Map,i=i=>{n.set(i,!1);let a=e.get(i)??[];for(t.set(i,a),e.set(i,[]),r.set(i,!0);a.length>0;)a.sort(Ti.sort),a.shift().execute();r.set(i,!1)};Ci=(t,r,a=0)=>{let o=pi(t),s=new Ti(r,a),c=e.get(o);return c||(c=[],e.set(o,c)),c.push(s),n.get(o)||(n.set(o,!0),t.requestAnimationFrame(()=>i(o))),s}})();var Ei=class e{constructor(e,t){this.width=e,this.height=t}with(t=this.width,n=this.height){return t!==this.width||n!==this.height?new e(t,n):this}static is(e){return typeof e==`object`&&typeof e.height==`number`&&typeof e.width==`number`}static lift(t){return t instanceof e?t:new e(t.width,t.height)}static equals(e,t){return e===t?!0:!e||!t?!1:e.width===t.width&&e.height===t.height}};Ei.None=new Ei(0,0);function Di(e){let t=e.getBoundingClientRect(),n=li(e);return{left:t.left+n.scrollX,top:t.top+n.scrollY,width:t.width,height:t.height}}new class{constructor(){this.mutationObservers=new Map}observe(e,t,n){let r=this.mutationObservers.get(e);r||(r=new Map,this.mutationObservers.set(e,r));let i=ti(n),a=r.get(i);if(a)a.users+=1;else{let o=new F,s=new MutationObserver(e=>o.fire(e));s.observe(e,n);let c=a={users:1,observer:s,onDidMutate:o.event};t.add(M(()=>{--c.users,c.users===0&&(o.dispose(),s.disconnect(),r?.delete(i),r?.size===0&&this.mutationObservers.delete(e))})),r.set(i,a)}return a.onDidMutate}};var L={CLICK:`click`,AUXCLICK:`auxclick`,DBLCLICK:`dblclick`,MOUSE_UP:`mouseup`,MOUSE_DOWN:`mousedown`,MOUSE_OVER:`mouseover`,MOUSE_MOVE:`mousemove`,MOUSE_OUT:`mouseout`,MOUSE_ENTER:`mouseenter`,MOUSE_LEAVE:`mouseleave`,MOUSE_WHEEL:`wheel`,POINTER_UP:`pointerup`,POINTER_DOWN:`pointerdown`,POINTER_MOVE:`pointermove`,POINTER_LEAVE:`pointerleave`,CONTEXT_MENU:`contextmenu`,WHEEL:`wheel`,KEY_DOWN:`keydown`,KEY_PRESS:`keypress`,KEY_UP:`keyup`,LOAD:`load`,BEFORE_UNLOAD:`beforeunload`,UNLOAD:`unload`,PAGE_SHOW:`pageshow`,PAGE_HIDE:`pagehide`,PASTE:`paste`,ABORT:`abort`,ERROR:`error`,RESIZE:`resize`,SCROLL:`scroll`,FULLSCREEN_CHANGE:`fullscreenchange`,WK_FULLSCREEN_CHANGE:`webkitfullscreenchange`,SELECT:`select`,CHANGE:`change`,SUBMIT:`submit`,RESET:`reset`,FOCUS:`focus`,FOCUS_IN:`focusin`,FOCUS_OUT:`focusout`,BLUR:`blur`,INPUT:`input`,STORAGE:`storage`,DRAG_START:`dragstart`,DRAG:`drag`,DRAG_ENTER:`dragenter`,DRAG_LEAVE:`dragleave`,DRAG_OVER:`dragover`,DROP:`drop`,DRAG_END:`dragend`,ANIMATION_START:rr?`webkitAnimationStart`:`animationstart`,ANIMATION_END:rr?`webkitAnimationEnd`:`animationend`,ANIMATION_ITERATION:rr?`webkitAnimationIteration`:`animationiteration`},Oi=class{constructor(e){this.domNode=e,this._maxWidth=``,this._width=``,this._height=``,this._top=``,this._left=``,this._bottom=``,this._right=``,this._paddingTop=``,this._paddingLeft=``,this._paddingBottom=``,this._paddingRight=``,this._fontFamily=``,this._fontWeight=``,this._fontSize=``,this._fontStyle=``,this._fontFeatureSettings=``,this._fontVariationSettings=``,this._textDecoration=``,this._lineHeight=``,this._letterSpacing=``,this._className=``,this._display=``,this._position=``,this._visibility=``,this._color=``,this._backgroundColor=``,this._layerHint=!1,this._contain=`none`,this._boxShadow=``}setMaxWidth(e){let t=ki(e);this._maxWidth!==t&&(this._maxWidth=t,this.domNode.style.maxWidth=this._maxWidth)}setWidth(e){let t=ki(e);this._width!==t&&(this._width=t,this.domNode.style.width=this._width)}setHeight(e){let t=ki(e);this._height!==t&&(this._height=t,this.domNode.style.height=this._height)}setTop(e){let t=ki(e);this._top!==t&&(this._top=t,this.domNode.style.top=this._top)}setLeft(e){let t=ki(e);this._left!==t&&(this._left=t,this.domNode.style.left=this._left)}setBottom(e){let t=ki(e);this._bottom!==t&&(this._bottom=t,this.domNode.style.bottom=this._bottom)}setRight(e){let t=ki(e);this._right!==t&&(this._right=t,this.domNode.style.right=this._right)}setPaddingTop(e){let t=ki(e);this._paddingTop!==t&&(this._paddingTop=t,this.domNode.style.paddingTop=this._paddingTop)}setPaddingLeft(e){let t=ki(e);this._paddingLeft!==t&&(this._paddingLeft=t,this.domNode.style.paddingLeft=this._paddingLeft)}setPaddingBottom(e){let t=ki(e);this._paddingBottom!==t&&(this._paddingBottom=t,this.domNode.style.paddingBottom=this._paddingBottom)}setPaddingRight(e){let t=ki(e);this._paddingRight!==t&&(this._paddingRight=t,this.domNode.style.paddingRight=this._paddingRight)}setFontFamily(e){this._fontFamily!==e&&(this._fontFamily=e,this.domNode.style.fontFamily=this._fontFamily)}setFontWeight(e){this._fontWeight!==e&&(this._fontWeight=e,this.domNode.style.fontWeight=this._fontWeight)}setFontSize(e){let t=ki(e);this._fontSize!==t&&(this._fontSize=t,this.domNode.style.fontSize=this._fontSize)}setFontStyle(e){this._fontStyle!==e&&(this._fontStyle=e,this.domNode.style.fontStyle=this._fontStyle)}setFontFeatureSettings(e){this._fontFeatureSettings!==e&&(this._fontFeatureSettings=e,this.domNode.style.fontFeatureSettings=this._fontFeatureSettings)}setFontVariationSettings(e){this._fontVariationSettings!==e&&(this._fontVariationSettings=e,this.domNode.style.fontVariationSettings=this._fontVariationSettings)}setTextDecoration(e){this._textDecoration!==e&&(this._textDecoration=e,this.domNode.style.textDecoration=this._textDecoration)}setLineHeight(e){let t=ki(e);this._lineHeight!==t&&(this._lineHeight=t,this.domNode.style.lineHeight=this._lineHeight)}setLetterSpacing(e){let t=ki(e);this._letterSpacing!==t&&(this._letterSpacing=t,this.domNode.style.letterSpacing=this._letterSpacing)}setClassName(e){this._className!==e&&(this._className=e,this.domNode.className=this._className)}toggleClassName(e,t){this.domNode.classList.toggle(e,t),this._className=this.domNode.className}setDisplay(e){this._display!==e&&(this._display=e,this.domNode.style.display=this._display)}setPosition(e){this._position!==e&&(this._position=e,this.domNode.style.position=this._position)}setVisibility(e){this._visibility!==e&&(this._visibility=e,this.domNode.style.visibility=this._visibility)}setColor(e){this._color!==e&&(this._color=e,this.domNode.style.color=this._color)}setBackgroundColor(e){this._backgroundColor!==e&&(this._backgroundColor=e,this.domNode.style.backgroundColor=this._backgroundColor)}setLayerHinting(e){this._layerHint!==e&&(this._layerHint=e,this.domNode.style.transform=this._layerHint?`translate3d(0px, 0px, 0px)`:``)}setBoxShadow(e){this._boxShadow!==e&&(this._boxShadow=e,this.domNode.style.boxShadow=e)}setContain(e){this._contain!==e&&(this._contain=e,this.domNode.style.contain=this._contain)}setAttribute(e,t){this.domNode.setAttribute(e,t)}removeAttribute(e){this.domNode.removeAttribute(e)}appendChild(e){this.domNode.appendChild(e.domNode)}removeChild(e){this.domNode.removeChild(e.domNode)}};function ki(e){return typeof e==`number`?`${e}px`:e}function Ai(e){return new Oi(e)}var ji=class{constructor(){this._hooks=new jn,this._pointerMoveCallback=null,this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(e,t){if(!this.isMonitoring())return;this._hooks.clear(),this._pointerMoveCallback=null;let n=this._onStopCallback;this._onStopCallback=null,e&&n&&n(t)}isMonitoring(){return!!this._pointerMoveCallback}startMonitoring(e,t,n,r,i){this.isMonitoring()&&this.stopMonitoring(!1),this._pointerMoveCallback=r,this._onStopCallback=i;let a=e;try{e.setPointerCapture(t),this._hooks.add(M(()=>{try{e.releasePointerCapture(t)}catch{}}))}catch{a=li(e)}this._hooks.add(I(a,L.POINTER_MOVE,e=>{e.buttons===n?(e.preventDefault(),this._pointerMoveCallback(e)):this.stopMonitoring(!0)})),this._hooks.add(I(a,L.POINTER_UP,e=>this.stopMonitoring(!0)))}};function Mi(e,t,n){let r=null,i=null;if(typeof n.value==`function`?(r=`value`,i=n.value,i.length!==0&&console.warn(`Memoize should only be used in functions with zero parameters`)):typeof n.get==`function`&&(r=`get`,i=n.get),!i)throw Error(`not supported`);let a=`$memoize$${t}`;n[r]=function(...e){return this.hasOwnProperty(a)||Object.defineProperty(this,a,{configurable:!1,enumerable:!1,writable:!1,value:i.apply(this,e)}),this[a]}}var Ni;(e=>(e.Tap=`-xterm-gesturetap`,e.Change=`-xterm-gesturechange`,e.Start=`-xterm-gesturestart`,e.End=`-xterm-gesturesend`,e.Contextmenu=`-xterm-gesturecontextmenu`))(Ni||={});var Pi=class e extends N{constructor(){super(),this.dispatched=!1,this.targets=new Fn,this.ignoreTargets=new Fn,this.activeTouches={},this.handle=null,this._lastSetTapCountTime=0,this._register(Rn.runAndSubscribe(gi,({window:e,disposables:t})=>{t.add(I(e.document,`touchstart`,e=>this.onTouchStart(e),{passive:!1})),t.add(I(e.document,`touchend`,t=>this.onTouchEnd(e,t))),t.add(I(e.document,`touchmove`,e=>this.onTouchMove(e),{passive:!1}))},{window:Nn,disposables:this._store}))}static addTarget(t){return e.isTouchDevice()?(e.INSTANCE||=Dn(new e),M(e.INSTANCE.targets.push(t))):N.None}static ignoreTarget(t){return e.isTouchDevice()?(e.INSTANCE||=Dn(new e),M(e.INSTANCE.ignoreTargets.push(t))):N.None}static isTouchDevice(){return`ontouchstart`in Nn||navigator.maxTouchPoints>0}dispose(){this.handle&&=(this.handle.dispose(),null),super.dispose()}onTouchStart(e){let t=Date.now();this.handle&&=(this.handle.dispose(),null);for(let n=0,r=e.targetTouches.length;n=e.HOLD_DELAY&&Math.abs(s.initialPageX-vn(s.rollingPageX))<30&&Math.abs(s.initialPageY-vn(s.rollingPageY))<30){let e=this.newGestureEvent(Ni.Contextmenu,s.initialTarget);e.pageX=vn(s.rollingPageX),e.pageY=vn(s.rollingPageY),this.dispatchEvent(e)}else if(i===1){let e=vn(s.rollingPageX),n=vn(s.rollingPageY),i=vn(s.rollingTimestamps)-s.rollingTimestamps[0],a=e-s.rollingPageX[0],o=n-s.rollingPageY[0],c=[...this.targets].filter(e=>s.initialTarget instanceof Node&&e.contains(s.initialTarget));this.inertia(t,c,r,Math.abs(a)/i,a>0?1:-1,e,Math.abs(o)/i,o>0?1:-1,n)}this.dispatchEvent(this.newGestureEvent(Ni.End,s.initialTarget)),delete this.activeTouches[o.identifier]}this.dispatched&&=(n.preventDefault(),n.stopPropagation(),!1)}newGestureEvent(e,t){let n=document.createEvent(`CustomEvent`);return n.initEvent(e,!1,!0),n.initialTarget=t,n.tapCount=0,n}dispatchEvent(t){if(t.type===Ni.Tap){let n=new Date().getTime(),r=0;r=n-this._lastSetTapCountTime>e.CLEAR_TAP_COUNT_TIME?1:2,this._lastSetTapCountTime=n,t.tapCount=r}else(t.type===Ni.Change||t.type===Ni.Contextmenu)&&(this._lastSetTapCountTime=0);if(t.initialTarget instanceof Node){for(let e of this.ignoreTargets)if(e.contains(t.initialTarget))return;let e=[];for(let n of this.targets)if(n.contains(t.initialTarget)){let r=0,i=t.initialTarget;for(;i&&i!==n;)r++,i=i.parentElement;e.push([r,n])}e.sort((e,t)=>e[0]-t[0]);for(let[n,r]of e)r.dispatchEvent(t),this.dispatched=!0}}inertia(t,n,r,i,a,o,s,c,l){this.handle=Ci(t,()=>{let u=Date.now(),d=u-r,f=0,p=0,m=!0;i+=e.SCROLL_FRICTION*d,s+=e.SCROLL_FRICTION*d,i>0&&(m=!1,f=a*i*d),s>0&&(m=!1,p=c*s*d);let h=this.newGestureEvent(Ni.Change);h.translationX=f,h.translationY=p,n.forEach(e=>e.dispatchEvent(h)),m||this.inertia(t,n,u,i,a,o+f,s,c,l+p)})}onTouchMove(e){let t=Date.now();for(let n=0,r=e.changedTouches.length;n3&&(i.rollingPageX.shift(),i.rollingPageY.shift(),i.rollingTimestamps.shift()),i.rollingPageX.push(r.pageX),i.rollingPageY.push(r.pageY),i.rollingTimestamps.push(t)}this.dispatched&&=(e.preventDefault(),e.stopPropagation(),!1)}};Pi.SCROLL_FRICTION=-.005,Pi.HOLD_DELAY=700,Pi.CLEAR_TAP_COUNT_TIME=400,k([Mi],Pi,`isTouchDevice`,1);var Fi=Pi,Ii=class extends N{onclick(e,t){this._register(I(e,L.CLICK,n=>t(new Kr(li(e),n))))}onmousedown(e,t){this._register(I(e,L.MOUSE_DOWN,n=>t(new Kr(li(e),n))))}onmouseover(e,t){this._register(I(e,L.MOUSE_OVER,n=>t(new Kr(li(e),n))))}onmouseleave(e,t){this._register(I(e,L.MOUSE_LEAVE,n=>t(new Kr(li(e),n))))}onkeydown(e,t){this._register(I(e,L.KEY_DOWN,e=>t(new Hr(e))))}onkeyup(e,t){this._register(I(e,L.KEY_UP,e=>t(new Hr(e))))}oninput(e,t){this._register(I(e,L.INPUT,t))}onblur(e,t){this._register(I(e,L.BLUR,t))}onfocus(e,t){this._register(I(e,L.FOCUS,t))}onchange(e,t){this._register(I(e,L.CHANGE,t))}ignoreGesture(e){return Fi.ignoreTarget(e)}},Li=11,Ri=class extends Ii{constructor(e){super(),this._onActivate=e.onActivate,this.bgDomNode=document.createElement(`div`),this.bgDomNode.className=`arrow-background`,this.bgDomNode.style.position=`absolute`,this.bgDomNode.style.width=e.bgWidth+`px`,this.bgDomNode.style.height=e.bgHeight+`px`,typeof e.top<`u`&&(this.bgDomNode.style.top=`0px`),typeof e.left<`u`&&(this.bgDomNode.style.left=`0px`),typeof e.bottom<`u`&&(this.bgDomNode.style.bottom=`0px`),typeof e.right<`u`&&(this.bgDomNode.style.right=`0px`),this.domNode=document.createElement(`div`),this.domNode.className=e.className,this.domNode.style.position=`absolute`,this.domNode.style.width=Li+`px`,this.domNode.style.height=Li+`px`,typeof e.top<`u`&&(this.domNode.style.top=e.top+`px`),typeof e.left<`u`&&(this.domNode.style.left=e.left+`px`),typeof e.bottom<`u`&&(this.domNode.style.bottom=e.bottom+`px`),typeof e.right<`u`&&(this.domNode.style.right=e.right+`px`),this._pointerMoveMonitor=this._register(new ji),this._register(Si(this.bgDomNode,L.POINTER_DOWN,e=>this._arrowPointerDown(e))),this._register(Si(this.domNode,L.POINTER_DOWN,e=>this._arrowPointerDown(e))),this._pointerdownRepeatTimer=this._register(new wi),this._pointerdownScheduleRepeatTimer=this._register(new Zr)}_arrowPointerDown(e){e.target&&e.target instanceof Element&&(this._onActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._onActivate(),1e3/24,li(e))},200),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),e.preventDefault())}},zi=class e{constructor(e,t,n,r,i,a,o){this._forceIntegerValues=e,this._scrollStateBrand=void 0,this._forceIntegerValues&&(t|=0,n|=0,r|=0,i|=0,a|=0,o|=0),this.rawScrollLeft=r,this.rawScrollTop=o,t<0&&(t=0),r+t>n&&(r=n-t),r<0&&(r=0),i<0&&(i=0),o+i>a&&(o=a-i),o<0&&(o=0),this.width=t,this.scrollWidth=n,this.scrollLeft=r,this.height=i,this.scrollHeight=a,this.scrollTop=o}equals(e){return this.rawScrollLeft===e.rawScrollLeft&&this.rawScrollTop===e.rawScrollTop&&this.width===e.width&&this.scrollWidth===e.scrollWidth&&this.scrollLeft===e.scrollLeft&&this.height===e.height&&this.scrollHeight===e.scrollHeight&&this.scrollTop===e.scrollTop}withScrollDimensions(t,n){return new e(this._forceIntegerValues,typeof t.width<`u`?t.width:this.width,typeof t.scrollWidth<`u`?t.scrollWidth:this.scrollWidth,n?this.rawScrollLeft:this.scrollLeft,typeof t.height<`u`?t.height:this.height,typeof t.scrollHeight<`u`?t.scrollHeight:this.scrollHeight,n?this.rawScrollTop:this.scrollTop)}withScrollPosition(t){return new e(this._forceIntegerValues,this.width,this.scrollWidth,typeof t.scrollLeft<`u`?t.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,typeof t.scrollTop<`u`?t.scrollTop:this.rawScrollTop)}createScrollEvent(e,t){let n=this.width!==e.width,r=this.scrollWidth!==e.scrollWidth,i=this.scrollLeft!==e.scrollLeft,a=this.height!==e.height,o=this.scrollHeight!==e.scrollHeight,s=this.scrollTop!==e.scrollTop;return{inSmoothScrolling:t,oldWidth:e.width,oldScrollWidth:e.scrollWidth,oldScrollLeft:e.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:e.height,oldScrollHeight:e.scrollHeight,oldScrollTop:e.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:n,scrollWidthChanged:r,scrollLeftChanged:i,heightChanged:a,scrollHeightChanged:o,scrollTopChanged:s}}},Bi=class extends N{constructor(e){super(),this._scrollableBrand=void 0,this._onScroll=this._register(new F),this.onScroll=this._onScroll.event,this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new zi(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&=(this._smoothScrolling.dispose(),null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){let n=this._state.withScrollDimensions(e,t);this._setState(n,!!this._smoothScrolling),this._smoothScrolling?.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){let t=this._state.withScrollPosition(e);this._smoothScrolling&&=(this._smoothScrolling.dispose(),null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(this._smoothScrollDuration===0)return this.setScrollPositionNow(e);if(this._smoothScrolling){e={scrollLeft:typeof e.scrollLeft>`u`?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:typeof e.scrollTop>`u`?this._smoothScrolling.to.scrollTop:e.scrollTop};let n=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===n.scrollLeft&&this._smoothScrolling.to.scrollTop===n.scrollTop)return;let r;r=t?new Wi(this._smoothScrolling.from,n,this._smoothScrolling.startTime,this._smoothScrolling.duration):this._smoothScrolling.combine(this._state,n,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=r}else{let t=this._state.withScrollPosition(e);this._smoothScrolling=Wi.start(this._state,t,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}hasPendingScrollAnimation(){return!!this._smoothScrolling}_performSmoothScrolling(){if(!this._smoothScrolling)return;let e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);if(this._setState(t,!0),this._smoothScrolling){if(e.isDone){this._smoothScrolling.dispose(),this._smoothScrolling=null;return}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}}_setState(e,t){let n=this._state;n.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(n,t)))}},Vi=class{constructor(e,t,n){this.scrollLeft=e,this.scrollTop=t,this.isDone=n}};function Hi(e,t){let n=t-e;return function(t){return e+n*Ki(t)}}function Ui(e,t,n){return function(r){return r2.5*n){let r,i;return e{this._domNode?.setClassName(this._visibleClassName)},0))}_hide(e){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode?.setClassName(this._invisibleClassName+(e?` fade`:``)))}},Ji=140,Yi=class extends Ii{constructor(e){super(),this._lazyRender=e.lazyRender,this._host=e.host,this._scrollable=e.scrollable,this._scrollByPage=e.scrollByPage,this._scrollbarState=e.scrollbarState,this._visibilityController=this._register(new qi(e.visibility,`visible scrollbar `+e.extraScrollbarClassName,`invisible scrollbar `+e.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._pointerMoveMonitor=this._register(new ji),this._shouldRender=!0,this.domNode=Ai(document.createElement(`div`)),this.domNode.setAttribute(`role`,`presentation`),this.domNode.setAttribute(`aria-hidden`,`true`),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition(`absolute`),this._register(I(this.domNode.domNode,L.POINTER_DOWN,e=>this._domNodePointerDown(e)))}_createArrow(e){let t=this._register(new Ri(e));this.domNode.domNode.appendChild(t.bgDomNode),this.domNode.domNode.appendChild(t.domNode)}_createSlider(e,t,n,r){this.slider=Ai(document.createElement(`div`)),this.slider.setClassName(`slider`),this.slider.setPosition(`absolute`),this.slider.setTop(e),this.slider.setLeft(t),typeof n==`number`&&this.slider.setWidth(n),typeof r==`number`&&this.slider.setHeight(r),this.slider.setLayerHinting(!0),this.slider.setContain(`strict`),this.domNode.domNode.appendChild(this.slider.domNode),this._register(I(this.slider.domNode,L.POINTER_DOWN,e=>{e.button===0&&(e.preventDefault(),this._sliderPointerDown(e))})),this.onclick(this.slider.domNode,e=>{e.leftButton&&e.stopPropagation()})}_onElementSize(e){return this._scrollbarState.setVisibleSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollSize(e){return this._scrollbarState.setScrollSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollPosition(e){return this._scrollbarState.setScrollPosition(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(e){e.target===this.domNode.domNode&&this._onPointerDown(e)}delegatePointerDown(e){let t=this.domNode.domNode.getClientRects()[0].top,n=t+this._scrollbarState.getSliderPosition(),r=t+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),i=this._sliderPointerPosition(e);n<=i&&i<=r?e.button===0&&(e.preventDefault(),this._sliderPointerDown(e)):this._onPointerDown(e)}_onPointerDown(e){let t,n;if(e.target===this.domNode.domNode&&typeof e.offsetX==`number`&&typeof e.offsetY==`number`)t=e.offsetX,n=e.offsetY;else{let r=Di(this.domNode.domNode);t=e.pageX-r.left,n=e.pageY-r.top}let r=this._pointerDownRelativePosition(t,n);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(r):this._scrollbarState.getDesiredScrollPositionFromOffset(r)),e.button===0&&(e.preventDefault(),this._sliderPointerDown(e))}_sliderPointerDown(e){if(!e.target||!(e.target instanceof Element))return;let t=this._sliderPointerPosition(e),n=this._sliderOrthogonalPointerPosition(e),r=this._scrollbarState.clone();this.slider.toggleClassName(`active`,!0),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{let i=this._sliderOrthogonalPointerPosition(e),a=Math.abs(i-n);if(yr&&a>Ji){this._setDesiredScrollPositionNow(r.getScrollPosition());return}let o=this._sliderPointerPosition(e)-t;this._setDesiredScrollPositionNow(r.getDesiredScrollPositionFromDelta(o))},()=>{this.slider.toggleClassName(`active`,!1),this._host.onDragEnd()}),this._host.onDragStart()}_setDesiredScrollPositionNow(e){let t={};this.writeScrollPosition(t,e),this._scrollable.setScrollPositionNow(t)}updateScrollbarSize(e){this._updateScrollbarSize(e),this._scrollbarState.setScrollbarSize(e),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}},Xi=class e{constructor(e,t,n,r,i,a){this._scrollbarSize=Math.round(t),this._oppositeScrollbarSize=Math.round(n),this._arrowSize=Math.round(e),this._visibleSize=r,this._scrollSize=i,this._scrollPosition=a,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new e(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(e){let t=Math.round(e);return this._visibleSize!==t&&(this._visibleSize=t,this._refreshComputedValues(),!0)}setScrollSize(e){let t=Math.round(e);return this._scrollSize!==t&&(this._scrollSize=t,this._refreshComputedValues(),!0)}setScrollPosition(e){let t=Math.round(e);return this._scrollPosition!==t&&(this._scrollPosition=t,this._refreshComputedValues(),!0)}setScrollbarSize(e){this._scrollbarSize=Math.round(e)}setOppositeScrollbarSize(e){this._oppositeScrollbarSize=Math.round(e)}static _computeValues(e,t,n,r,i){let a=Math.max(0,n-e),o=Math.max(0,a-2*t),s=r>0&&r>n;if(!s)return{computedAvailableSize:Math.round(a),computedIsNeeded:s,computedSliderSize:Math.round(o),computedSliderRatio:0,computedSliderPosition:0};let c=Math.round(Math.max(20,Math.floor(n*o/r))),l=(o-c)/(r-n),u=i*l;return{computedAvailableSize:Math.round(a),computedIsNeeded:s,computedSliderSize:Math.round(c),computedSliderRatio:l,computedSliderPosition:Math.round(u)}}_refreshComputedValues(){let t=e._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=t.computedAvailableSize,this._computedIsNeeded=t.computedIsNeeded,this._computedSliderSize=t.computedSliderSize,this._computedSliderRatio=t.computedSliderRatio,this._computedSliderPosition=t.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(e){if(!this._computedIsNeeded)return 0;let t=e-this._arrowSize-this._computedSliderSize/2;return Math.round(t/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(e){if(!this._computedIsNeeded)return 0;let t=e-this._arrowSize,n=this._scrollPosition;return t0&&Math.abs(e.deltaY)>0)return 1;let n=.5;if(this._isAlmostInt(e.deltaX)&&this._isAlmostInt(e.deltaY)||(n+=.25),t){let r=Math.abs(e.deltaX),i=Math.abs(e.deltaY),a=Math.abs(t.deltaX),o=Math.abs(t.deltaY),s=Math.max(Math.min(r,a),1),c=Math.max(Math.min(i,o),1),l=Math.max(r,a),u=Math.max(i,o);l%s===0&&u%c===0&&(n-=.5)}return Math.min(Math.max(n,0),1)}_isAlmostInt(e){return Math.abs(Math.round(e)-e)<.01}};ra.INSTANCE=new ra;var ia=ra,aa=class extends Ii{constructor(e,t,n){super(),this._onScroll=this._register(new F),this.onScroll=this._onScroll.event,this._onWillScroll=this._register(new F),this.onWillScroll=this._onWillScroll.event,this._options=sa(t),this._scrollable=n,this._register(this._scrollable.onScroll(e=>{this._onWillScroll.fire(e),this._onDidScroll(e),this._onScroll.fire(e)}));let r={onMouseWheel:e=>this._onMouseWheel(e),onDragStart:()=>this._onDragStart(),onDragEnd:()=>this._onDragEnd()};this._verticalScrollbar=this._register(new Qi(this._scrollable,this._options,r)),this._horizontalScrollbar=this._register(new Zi(this._scrollable,this._options,r)),this._domNode=document.createElement(`div`),this._domNode.className=`xterm-scrollable-element `+this._options.className,this._domNode.setAttribute(`role`,`presentation`),this._domNode.style.position=`relative`,this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=Ai(document.createElement(`div`)),this._leftShadowDomNode.setClassName(`shadow`),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=Ai(document.createElement(`div`)),this._topShadowDomNode.setClassName(`shadow`),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=Ai(document.createElement(`div`)),this._topLeftShadowDomNode.setClassName(`shadow`),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode||this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this.onmouseover(this._listenOnDomNode,e=>this._onMouseOver(e)),this.onmouseleave(this._listenOnDomNode,e=>this._onMouseLeave(e)),this._hideTimeout=this._register(new Zr),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}get options(){return this._options}dispose(){this._mouseWheelToDispose=On(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getOverviewRulerLayoutInfo(){return{parent:this._domNode,insertBefore:this._verticalScrollbar.domNode.domNode}}delegateVerticalScrollbarPointerDown(e){this._verticalScrollbar.delegatePointerDown(e)}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}updateClassName(e){this._options.className=e,br&&(this._options.className+=` mac`),this._domNode.className=`xterm-scrollable-element `+this._options.className}updateOptions(e){typeof e.handleMouseWheel<`u`&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),typeof e.mouseWheelScrollSensitivity<`u`&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),typeof e.fastScrollSensitivity<`u`&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),typeof e.scrollPredominantAxis<`u`&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),typeof e.horizontal<`u`&&(this._options.horizontal=e.horizontal),typeof e.vertical<`u`&&(this._options.vertical=e.vertical),typeof e.horizontalScrollbarSize<`u`&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),typeof e.verticalScrollbarSize<`u`&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),typeof e.scrollByPage<`u`&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}setRevealOnScroll(e){this._revealOnScroll=e}delegateScrollFromMouseWheelEvent(e){this._onMouseWheel(new qr(e))}_setListeningToMouseWheel(e){this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=On(this._mouseWheelToDispose),e)&&this._mouseWheelToDispose.push(I(this._listenOnDomNode,L.MOUSE_WHEEL,e=>{this._onMouseWheel(new qr(e))},{passive:!1}))}_onMouseWheel(e){if(e.browserEvent?.defaultPrevented)return;let t=ia.INSTANCE;ta&&t.acceptStandardWheelEvent(e);let n=!1;if(e.deltaY||e.deltaX){let r=e.deltaY*this._options.mouseWheelScrollSensitivity,i=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&i+r===0?i=r=0:Math.abs(r)>=Math.abs(i)?i=0:r=0),this._options.flipAxes&&([r,i]=[i,r]);let a=!br&&e.browserEvent&&e.browserEvent.shiftKey;(this._options.scrollYToX||a)&&!i&&(i=r,r=0),e.browserEvent&&e.browserEvent.altKey&&(i*=this._options.fastScrollSensitivity,r*=this._options.fastScrollSensitivity);let o=this._scrollable.getFutureScrollPosition(),s={};if(r){let e=ea*r,t=o.scrollTop-(e<0?Math.floor(e):Math.ceil(e));this._verticalScrollbar.writeScrollPosition(s,t)}if(i){let e=ea*i,t=o.scrollLeft-(e<0?Math.floor(e):Math.ceil(e));this._horizontalScrollbar.writeScrollPosition(s,t)}s=this._scrollable.validateScrollPosition(s),(o.scrollLeft!==s.scrollLeft||o.scrollTop!==s.scrollTop)&&(ta&&this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(s):this._scrollable.setScrollPositionNow(s),n=!0)}let r=n;!r&&this._options.alwaysConsumeMouseWheel&&(r=!0),!r&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(r=!0),r&&(e.preventDefault(),e.stopPropagation())}_onDidScroll(e){this._shouldRender=this._horizontalScrollbar.onDidScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.onDidScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){let e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,n=e.scrollLeft>0,r=n?` left`:``,i=t?` top`:``,a=n||t?` top-left-corner`:``;this._leftShadowDomNode.setClassName(`shadow${r}`),this._topShadowDomNode.setClassName(`shadow${i}`),this._topLeftShadowDomNode.setClassName(`shadow${a}${i}${r}`)}}_onDragStart(){this._isDragging=!0,this._reveal()}_onDragEnd(){this._isDragging=!1,this._hide()}_onMouseLeave(e){this._mouseIsOver=!1,this._hide()}_onMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){!this._mouseIsOver&&!this._isDragging&&(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){!this._mouseIsOver&&!this._isDragging&&this._hideTimeout.cancelAndSet(()=>this._hide(),$i)}},oa=class extends aa{constructor(e,t,n){super(e,t,n)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}};function sa(e){let t={lazyRender:typeof e.lazyRender<`u`&&e.lazyRender,className:typeof e.className<`u`?e.className:``,useShadows:typeof e.useShadows<`u`?e.useShadows:!0,handleMouseWheel:typeof e.handleMouseWheel<`u`?e.handleMouseWheel:!0,flipAxes:typeof e.flipAxes<`u`&&e.flipAxes,consumeMouseWheelIfScrollbarIsNeeded:typeof e.consumeMouseWheelIfScrollbarIsNeeded<`u`&&e.consumeMouseWheelIfScrollbarIsNeeded,alwaysConsumeMouseWheel:typeof e.alwaysConsumeMouseWheel<`u`&&e.alwaysConsumeMouseWheel,scrollYToX:typeof e.scrollYToX<`u`&&e.scrollYToX,mouseWheelScrollSensitivity:typeof e.mouseWheelScrollSensitivity<`u`?e.mouseWheelScrollSensitivity:1,fastScrollSensitivity:typeof e.fastScrollSensitivity<`u`?e.fastScrollSensitivity:5,scrollPredominantAxis:typeof e.scrollPredominantAxis<`u`?e.scrollPredominantAxis:!0,mouseWheelSmoothScroll:typeof e.mouseWheelSmoothScroll<`u`?e.mouseWheelSmoothScroll:!0,arrowSize:typeof e.arrowSize<`u`?e.arrowSize:11,listenOnDomNode:typeof e.listenOnDomNode<`u`?e.listenOnDomNode:null,horizontal:typeof e.horizontal<`u`?e.horizontal:1,horizontalScrollbarSize:typeof e.horizontalScrollbarSize<`u`?e.horizontalScrollbarSize:10,horizontalSliderSize:typeof e.horizontalSliderSize<`u`?e.horizontalSliderSize:0,horizontalHasArrows:typeof e.horizontalHasArrows<`u`&&e.horizontalHasArrows,vertical:typeof e.vertical<`u`?e.vertical:1,verticalScrollbarSize:typeof e.verticalScrollbarSize<`u`?e.verticalScrollbarSize:10,verticalHasArrows:typeof e.verticalHasArrows<`u`&&e.verticalHasArrows,verticalSliderSize:typeof e.verticalSliderSize<`u`?e.verticalSliderSize:0,scrollByPage:typeof e.scrollByPage<`u`&&e.scrollByPage};return t.horizontalSliderSize=typeof e.horizontalSliderSize<`u`?e.horizontalSliderSize:t.horizontalScrollbarSize,t.verticalSliderSize=typeof e.verticalSliderSize<`u`?e.verticalSliderSize:t.verticalScrollbarSize,br&&(t.className+=` mac`),t}var ca=class extends N{constructor(e,t,n,r,i,a,o,s){super(),this._bufferService=n,this._optionsService=o,this._renderService=s,this._onRequestScrollLines=this._register(new F),this.onRequestScrollLines=this._onRequestScrollLines.event,this._isSyncing=!1,this._isHandlingScroll=!1,this._suppressOnScrollHandler=!1;let c=this._register(new Bi({forceIntegerValues:!1,smoothScrollDuration:this._optionsService.rawOptions.smoothScrollDuration,scheduleAtNextAnimationFrame:e=>Ci(r.window,e)}));this._register(this._optionsService.onSpecificOptionChange(`smoothScrollDuration`,()=>{c.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration)})),this._scrollableElement=this._register(new oa(t,{vertical:1,horizontal:2,useShadows:!1,mouseWheelSmoothScroll:!0,...this._getChangeOptions()},c)),this._register(this._optionsService.onMultipleOptionChange([`scrollSensitivity`,`fastScrollSensitivity`,`overviewRuler`],()=>this._scrollableElement.updateOptions(this._getChangeOptions()))),this._register(i.onProtocolChange(e=>{this._scrollableElement.updateOptions({handleMouseWheel:!(e&16)})})),this._scrollableElement.setScrollDimensions({height:0,scrollHeight:0}),this._register(Rn.runAndSubscribe(a.onChangeColors,()=>{this._scrollableElement.getDomNode().style.backgroundColor=a.colors.background.css})),e.appendChild(this._scrollableElement.getDomNode()),this._register(M(()=>this._scrollableElement.getDomNode().remove())),this._styleElement=r.mainDocument.createElement(`style`),t.appendChild(this._styleElement),this._register(M(()=>this._styleElement.remove())),this._register(Rn.runAndSubscribe(a.onChangeColors,()=>{this._styleElement.textContent=[`.xterm .xterm-scrollable-element > .scrollbar > .slider {`,` background: ${a.colors.scrollbarSliderBackground.css};`,`}`,`.xterm .xterm-scrollable-element > .scrollbar > .slider:hover {`,` background: ${a.colors.scrollbarSliderHoverBackground.css};`,`}`,`.xterm .xterm-scrollable-element > .scrollbar > .slider.active {`,` background: ${a.colors.scrollbarSliderActiveBackground.css};`,`}`].join(` +`)})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._sync())),this._register(this._scrollableElement.onScroll(e=>this._handleScroll(e)))}scrollLines(e){let t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({reuseAnimation:!0,scrollTop:t.scrollTop+e*this._renderService.dimensions.css.cell.height})}scrollToLine(e,t){t&&(this._latestYDisp=e),this._scrollableElement.setScrollPosition({reuseAnimation:!t,scrollTop:e*this._renderService.dimensions.css.cell.height})}_getChangeOptions(){return{mouseWheelScrollSensitivity:this._optionsService.rawOptions.scrollSensitivity,fastScrollSensitivity:this._optionsService.rawOptions.fastScrollSensitivity,verticalScrollbarSize:this._optionsService.rawOptions.overviewRuler?.width||14}}queueSync(e){e!==void 0&&(this._latestYDisp=e),this._queuedAnimationFrame===void 0&&(this._queuedAnimationFrame=this._renderService.addRefreshCallback(()=>{this._queuedAnimationFrame=void 0,this._sync(this._latestYDisp)}))}_sync(e=this._bufferService.buffer.ydisp){!this._renderService||this._isSyncing||(this._isSyncing=!0,this._suppressOnScrollHandler=!0,this._scrollableElement.setScrollDimensions({height:this._renderService.dimensions.css.canvas.height,scrollHeight:this._renderService.dimensions.css.cell.height*this._bufferService.buffer.lines.length}),this._suppressOnScrollHandler=!1,e!==this._latestYDisp&&this._scrollableElement.setScrollPosition({scrollTop:e*this._renderService.dimensions.css.cell.height}),this._isSyncing=!1)}_handleScroll(e){if(!this._renderService||this._isHandlingScroll||this._suppressOnScrollHandler)return;this._isHandlingScroll=!0;let t=Math.round(e.scrollTop/this._renderService.dimensions.css.cell.height),n=t-this._bufferService.buffer.ydisp;n!==0&&(this._latestYDisp=t,this._onRequestScrollLines.fire(n)),this._isHandlingScroll=!1}};ca=k([A(2,Ut),A(3,nn),A(4,Wt),A(5,cn),A(6,Yt),A(7,an)],ca);var la=class extends N{constructor(e,t,n,r,i){super(),this._screenElement=e,this._bufferService=t,this._coreBrowserService=n,this._decorationService=r,this._renderService=i,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement(`div`),this._container.classList.add(`xterm-decoration-container`),this._screenElement.appendChild(this._container),this._register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this._register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this._register(this._decorationService.onDecorationRemoved(e=>this._removeDecoration(e))),this._register(M(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){this._animationFrame===void 0&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(let e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){let t=this._coreBrowserService.mainDocument.createElement(`div`);t.classList.add(`xterm-decoration`),t.classList.toggle(`xterm-decoration-top-layer`,e?.options?.layer===`top`),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,t.style.top=`${(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height}px`,t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;let n=e.options.x??0;return n&&n>this._bufferService.cols&&(t.style.display=`none`),this._refreshXPosition(e,t),t}_refreshStyle(e){let t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display=`none`,e.onRenderEmitter.fire(e.element));else{let n=this._decorationElements.get(e);n||(n=this._createElement(e),e.element=n,this._decorationElements.set(e,n),this._container.appendChild(n),e.onDispose(()=>{this._decorationElements.delete(e),n.remove()})),n.style.display=this._altBufferIsActive?`none`:`block`,this._altBufferIsActive||(n.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,n.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,n.style.top=`${t*this._renderService.dimensions.css.cell.height}px`,n.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`),e.onRenderEmitter.fire(n)}}_refreshXPosition(e,t=e.element){if(!t)return;let n=e.options.x??0;(e.options.anchor||`left`)===`right`?t.style.right=n?`${n*this._renderService.dimensions.css.cell.width}px`:``:t.style.left=n?`${n*this._renderService.dimensions.css.cell.width}px`:``}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};la=k([A(1,Ut),A(2,nn),A(3,Qt),A(4,an)],la);var ua=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(e){if(e.options.overviewRulerOptions){for(let t of this._zones)if(t.color===e.options.overviewRulerOptions.color&&t.position===e.options.overviewRulerOptions.position){if(this._lineIntersectsZone(t,e.marker.line))return;if(this._lineAdjacentToZone(t,e.marker.line,e.options.overviewRulerOptions.position)){this._addLineToZone(t,e.marker.line);return}}if(this._zonePoolIndex=e.startBufferLine&&t<=e.endBufferLine}_lineAdjacentToZone(e,t,n){return t>=e.startBufferLine-this._linePadding[n||`full`]&&t<=e.endBufferLine+this._linePadding[n||`full`]}_addLineToZone(e,t){e.startBufferLine=Math.min(e.startBufferLine,t),e.endBufferLine=Math.max(e.endBufferLine,t)}},da={full:0,left:0,center:0,right:0},fa={full:0,left:0,center:0,right:0},pa={full:0,left:0,center:0,right:0},ma=class extends N{constructor(e,t,n,r,i,a,o,s){super(),this._viewportElement=e,this._screenElement=t,this._bufferService=n,this._decorationService=r,this._renderService=i,this._optionsService=a,this._themeService=o,this._coreBrowserService=s,this._colorZoneStore=new ua,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=this._coreBrowserService.mainDocument.createElement(`canvas`),this._canvas.classList.add(`xterm-decoration-overview-ruler`),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement),this._register(M(()=>this._canvas?.remove()));let c=this._canvas.getContext(`2d`);if(c)this._ctx=c;else throw Error(`Ctx cannot be null`);this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this._register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0))),this._register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?`none`:`block`})),this._register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})),this._register(this._renderService.onRender(()=>{this._containerHeight&&this._containerHeight===this._screenElement.clientHeight||(this._queueRefresh(!0),this._containerHeight=this._screenElement.clientHeight)})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._register(this._optionsService.onSpecificOptionChange(`overviewRuler`,()=>this._queueRefresh(!0))),this._register(this._themeService.onChangeColors(()=>this._queueRefresh())),this._queueRefresh(!0)}get _width(){return this._optionsService.options.overviewRuler?.width||0}_refreshDrawConstants(){let e=Math.floor((this._canvas.width-1)/3),t=Math.ceil((this._canvas.width-1)/3);fa.full=this._canvas.width,fa.left=e,fa.center=t,fa.right=e,this._refreshDrawHeightConstants(),pa.full=1,pa.left=1,pa.center=1+fa.left,pa.right=1+fa.left+fa.center}_refreshDrawHeightConstants(){da.full=Math.round(2*this._coreBrowserService.dpr);let e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);da.left=t,da.center=t,da.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*da.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*da.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*da.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*da.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${this._screenElement.clientHeight}px`,this._canvas.height=Math.round(this._screenElement.clientHeight*this._coreBrowserService.dpr),this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(let e of this._decorationService.decorations)this._colorZoneStore.addDecoration(e);this._ctx.lineWidth=1,this._renderRulerOutline();let e=this._colorZoneStore.zones;for(let t of e)t.position!==`full`&&this._renderColorZone(t);for(let t of e)t.position===`full`&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderRulerOutline(){this._ctx.fillStyle=this._themeService.colors.overviewRulerBorder.css,this._ctx.fillRect(0,0,1,this._canvas.height),this._optionsService.rawOptions.overviewRuler.showTopBorder&&this._ctx.fillRect(1,0,this._canvas.width-1,1),this._optionsService.rawOptions.overviewRuler.showBottomBorder&&this._ctx.fillRect(1,this._canvas.height-1,this._canvas.width-1,this._canvas.height)}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(pa[e.position||`full`],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-da[e.position||`full`]/2),fa[e.position||`full`],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+da[e.position||`full`]))}_queueRefresh(e,t){this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._refreshDecorations(),this._animationFrame=void 0}))}};ma=k([A(2,Ut),A(3,Qt),A(4,an),A(5,Yt),A(6,cn),A(7,nn)],ma);var R;(e=>(e.NUL=`\0`,e.SOH=``,e.STX=``,e.ETX=``,e.EOT=``,e.ENQ=``,e.ACK=``,e.BEL=`\x07`,e.BS=`\b`,e.HT=` `,e.LF=` +`,e.VT=`\v`,e.FF=`\f`,e.CR=`\r`,e.SO=``,e.SI=``,e.DLE=``,e.DC1=``,e.DC2=``,e.DC3=``,e.DC4=``,e.NAK=``,e.SYN=``,e.ETB=``,e.CAN=``,e.EM=``,e.SUB=``,e.ESC=`\x1B`,e.FS=``,e.GS=``,e.RS=``,e.US=``,e.SP=` `,e.DEL=``))(R||={});var ha;(e=>(e.PAD=`€`,e.HOP=``,e.BPH=`‚`,e.NBH=`ƒ`,e.IND=`„`,e.NEL=`…`,e.SSA=`†`,e.ESA=`‡`,e.HTS=`ˆ`,e.HTJ=`‰`,e.VTS=`Š`,e.PLD=`‹`,e.PLU=`Œ`,e.RI=``,e.SS2=`Ž`,e.SS3=``,e.DCS=``,e.PU1=`‘`,e.PU2=`’`,e.STS=`“`,e.CCH=`”`,e.MW=`•`,e.SPA=`–`,e.EPA=`—`,e.SOS=`˜`,e.SGCI=`™`,e.SCI=`š`,e.CSI=`›`,e.ST=`œ`,e.OSC=``,e.PM=`ž`,e.APC=`Ÿ`))(ha||={});var ga;(e=>e.ST=`${R.ESC}\\`)(ga||={});var _a=class{constructor(e,t,n,r,i,a){this._textarea=e,this._compositionView=t,this._bufferService=n,this._optionsService=r,this._coreService=i,this._renderService=a,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=``}get isComposing(){return this._isComposing}compositionstart(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent=``,this._dataAlreadySent=``,this._compositionView.classList.add(`active`)}compositionupdate(e){this._compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout(()=>{this._compositionPosition.end=this._textarea.value.length},0)}compositionend(){this._finalizeComposition(!0)}keydown(e){if(this._isComposing||this._isSendingComposition){if(e.keyCode===20||e.keyCode===229||e.keyCode===16||e.keyCode===17||e.keyCode===18)return!1;this._finalizeComposition(!1)}return e.keyCode!==229||(this._handleAnyTextareaChanges(),!1)}_finalizeComposition(e){if(this._compositionView.classList.remove(`active`),this._isComposing=!1,e){let e={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout(()=>{if(this._isSendingComposition){this._isSendingComposition=!1;let t;e.start+=this._dataAlreadySent.length,t=this._isComposing?this._textarea.value.substring(e.start,this._compositionPosition.start):this._textarea.value.substring(e.start),t.length>0&&this._coreService.triggerDataEvent(t,!0)}},0)}else{this._isSendingComposition=!1;let e=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(e,!0)}}_handleAnyTextareaChanges(){let e=this._textarea.value;setTimeout(()=>{if(!this._isComposing){let t=this._textarea.value,n=t.replace(e,``);this._dataAlreadySent=n,t.length>e.length?this._coreService.triggerDataEvent(n,!0):t.lengththis.updateCompositionElements(!0),0)}}};_a=k([A(2,Ut),A(3,Yt),A(4,Gt),A(5,an)],_a);var z=0,B=0,V=0,H=0,va={css:`#00000000`,rgba:0},U;(e=>{function t(e,t,n,r){return r===void 0?`#${xa(e)}${xa(t)}${xa(n)}`:`#${xa(e)}${xa(t)}${xa(n)}${xa(r)}`}e.toCss=t;function n(e,t,n,r=255){return(e<<24|t<<16|n<<8|r)>>>0}e.toRgba=n;function r(t,n,r,i){return{css:e.toCss(t,n,r,i),rgba:e.toRgba(t,n,r,i)}}e.toColor=r})(U||={});var W;(e=>{function t(e,t){if(H=(t.rgba&255)/255,H===1)return{css:t.css,rgba:t.rgba};let n=t.rgba>>24&255,r=t.rgba>>16&255,i=t.rgba>>8&255,a=e.rgba>>24&255,o=e.rgba>>16&255,s=e.rgba>>8&255;return z=a+Math.round((n-a)*H),B=o+Math.round((r-o)*H),V=s+Math.round((i-s)*H),{css:U.toCss(z,B,V),rgba:U.toRgba(z,B,V)}}e.blend=t;function n(e){return(e.rgba&255)==255}e.isOpaque=n;function r(e,t,n){let r=ba.ensureContrastRatio(e.rgba,t.rgba,n);if(r)return U.toColor(r>>24&255,r>>16&255,r>>8&255)}e.ensureContrastRatio=r;function i(e){let t=(e.rgba|255)>>>0;return[z,B,V]=ba.toChannels(t),{css:U.toCss(z,B,V),rgba:t}}e.opaque=i;function a(e,t){return H=Math.round(t*255),[z,B,V]=ba.toChannels(e.rgba),{css:U.toCss(z,B,V,H),rgba:U.toRgba(z,B,V,H)}}e.opacity=a;function o(e,t){return H=e.rgba&255,a(e,H*t/255)}e.multiplyOpacity=o;function s(e){return[e.rgba>>24&255,e.rgba>>16&255,e.rgba>>8&255]}e.toColorRGB=s})(W||={});var G;(e=>{let t,n;try{let e=document.createElement(`canvas`);e.width=1,e.height=1;let r=e.getContext(`2d`,{willReadFrequently:!0});r&&(t=r,t.globalCompositeOperation=`copy`,n=t.createLinearGradient(0,0,1,1))}catch{}function r(e){if(e.match(/#[\da-f]{3,8}/i))switch(e.length){case 4:return z=parseInt(e.slice(1,2).repeat(2),16),B=parseInt(e.slice(2,3).repeat(2),16),V=parseInt(e.slice(3,4).repeat(2),16),U.toColor(z,B,V);case 5:return z=parseInt(e.slice(1,2).repeat(2),16),B=parseInt(e.slice(2,3).repeat(2),16),V=parseInt(e.slice(3,4).repeat(2),16),H=parseInt(e.slice(4,5).repeat(2),16),U.toColor(z,B,V,H);case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}let r=e.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(r)return z=parseInt(r[1]),B=parseInt(r[2]),V=parseInt(r[3]),H=Math.round((r[5]===void 0?1:parseFloat(r[5]))*255),U.toColor(z,B,V,H);if(!t||!n||(t.fillStyle=n,t.fillStyle=e,typeof t.fillStyle!=`string`)||(t.fillRect(0,0,1,1),[z,B,V,H]=t.getImageData(0,0,1,1).data,H!==255))throw Error(`css.toColor: Unsupported css format`);return{rgba:U.toRgba(z,B,V,H),css:e}}e.toColor=r})(G||={});var ya;(e=>{function t(e){return n(e>>16&255,e>>8&255,e&255)}e.relativeLuminance=t;function n(e,t,n){let r=e/255,i=t/255,a=n/255,o=r<=.03928?r/12.92:((r+.055)/1.055)**2.4,s=i<=.03928?i/12.92:((i+.055)/1.055)**2.4,c=a<=.03928?a/12.92:((a+.055)/1.055)**2.4;return o*.2126+s*.7152+c*.0722}e.relativeLuminance2=n})(ya||={});var ba;(e=>{function t(e,t){if(H=(t&255)/255,H===1)return t;let n=t>>24&255,r=t>>16&255,i=t>>8&255,a=e>>24&255,o=e>>16&255,s=e>>8&255;return z=a+Math.round((n-a)*H),B=o+Math.round((r-o)*H),V=s+Math.round((i-s)*H),U.toRgba(z,B,V)}e.blend=t;function n(e,t,n){let a=ya.relativeLuminance(e>>8),o=ya.relativeLuminance(t>>8);if(Sa(a,o)>8));if(sSa(a,ya.relativeLuminance(r>>8))?o:r}return o}let s=i(e,t,n),c=Sa(a,ya.relativeLuminance(s>>8));if(cSa(a,ya.relativeLuminance(i>>8))?s:i}return s}}e.ensureContrastRatio=n;function r(e,t,n){let r=e>>24&255,i=e>>16&255,a=e>>8&255,o=t>>24&255,s=t>>16&255,c=t>>8&255,l=Sa(ya.relativeLuminance2(o,s,c),ya.relativeLuminance2(r,i,a));for(;l0||s>0||c>0);)o-=Math.max(0,Math.ceil(o*.1)),s-=Math.max(0,Math.ceil(s*.1)),c-=Math.max(0,Math.ceil(c*.1)),l=Sa(ya.relativeLuminance2(o,s,c),ya.relativeLuminance2(r,i,a));return(o<<24|s<<16|c<<8|255)>>>0}e.reduceLuminance=r;function i(e,t,n){let r=e>>24&255,i=e>>16&255,a=e>>8&255,o=t>>24&255,s=t>>16&255,c=t>>8&255,l=Sa(ya.relativeLuminance2(o,s,c),ya.relativeLuminance2(r,i,a));for(;l>>0}e.increaseLuminance=i;function a(e){return[e>>24&255,e>>16&255,e>>8&255,e&255]}e.toChannels=a})(ba||={});function xa(e){let t=e.toString(16);return t.length<2?`0`+t:t}function Sa(e,t){return e1){let e=this._getJoinedRanges(r,o,a,t,i);for(let t=0;t1){let e=this._getJoinedRanges(r,o,a,t,i);for(let t=0;t=C,oe=T,E=this._workCell;if(f.length>0&&T===f[0][0]&&ae){let r=f.shift(),i=this._isCellInSelection(r[0],t);for(v=r[0]+1;v=r[1],ae?(ie=!0,E=new Ca(this._workCell,e.translateToString(!0,r[0],r[1]),r[1]-r[0]),oe=r[1]-1,m=E.getWidth()):C=r[1]}let se=this._isCellInSelection(T,t),ce=n&&T===a,le=re&&T>=l&&T<=u,ue=!1;this._decorationService.forEachDecorationAtCell(T,t,void 0,e=>{ue=!0});let de=E.getChars()||Pt;if(de===` `&&(E.isUnderline()||E.isOverline())&&(de=`\xA0`),S=m*s-c.get(de,E.isBold(),E.isItalic()),!h)h=this._document.createElement(`span`);else if(g&&(se&&ne||!se&&!ne&&E.bg===ee)&&(se&&ne&&p.selectionForeground||E.fg===y)&&E.extended.ext===te&&le===b&&S===x&&!ce&&!ie&&!ue&&ae){E.isInvisible()?_+=Pt:_+=de,g++;continue}else g&&(h.textContent=_),h=this._document.createElement(`span`),g=0,_=``;if(ee=E.bg,y=E.fg,te=E.extended.ext,b=le,x=S,ne=se,ie&&a>=T&&a<=oe&&(a=T),!this._coreService.isCursorHidden&&ce&&this._coreService.isCursorInitialized){if(w.push(`xterm-cursor`),this._coreBrowserService.isFocused)o&&w.push(`xterm-cursor-blink`),w.push(r===`bar`?`xterm-cursor-bar`:r===`underline`?`xterm-cursor-underline`:`xterm-cursor-block`);else if(i)switch(i){case`outline`:w.push(`xterm-cursor-outline`);break;case`block`:w.push(`xterm-cursor-block`);break;case`bar`:w.push(`xterm-cursor-bar`);break;case`underline`:w.push(`xterm-cursor-underline`)}}if(E.isBold()&&w.push(`xterm-bold`),E.isItalic()&&w.push(`xterm-italic`),E.isDim()&&w.push(`xterm-dim`),_=E.isInvisible()?Pt:E.getChars()||Pt,E.isUnderline()&&(w.push(`xterm-underline-${E.extended.underlineStyle}`),_===` `&&(_=`\xA0`),!E.isUnderlineColorDefault())){if(E.isUnderlineColorRGB())h.style.textDecorationColor=`rgb(${Ft.toColorRGB(E.getUnderlineColor()).join(`,`)})`;else{let e=E.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&E.isBold()&&e<8&&(e+=8),h.style.textDecorationColor=p.ansi[e].css}}E.isOverline()&&(w.push(`xterm-overline`),_===` `&&(_=`\xA0`)),E.isStrikethrough()&&w.push(`xterm-strikethrough`),le&&(h.style.textDecoration=`underline`);let fe=E.getFgColor(),D=E.getFgColorMode(),pe=E.getBgColor(),me=E.getBgColorMode(),he=!!E.isInverse();if(he){let e=fe;fe=pe,pe=e;let t=D;D=me,me=t}let ge,_e,O=!1;this._decorationService.forEachDecorationAtCell(T,t,void 0,e=>{e.options.layer!==`top`&&O||(e.backgroundColorRGB&&(me=50331648,pe=e.backgroundColorRGB.rgba>>8&16777215,ge=e.backgroundColorRGB),e.foregroundColorRGB&&(D=50331648,fe=e.foregroundColorRGB.rgba>>8&16777215,_e=e.foregroundColorRGB),O=e.options.layer===`top`)}),!O&&se&&(ge=this._coreBrowserService.isFocused?p.selectionBackgroundOpaque:p.selectionInactiveBackgroundOpaque,pe=ge.rgba>>8&16777215,me=50331648,O=!0,p.selectionForeground&&(D=50331648,fe=p.selectionForeground.rgba>>8&16777215,_e=p.selectionForeground)),O&&w.push(`xterm-decoration-top`);let ve;switch(me){case 16777216:case 33554432:ve=p.ansi[pe],w.push(`xterm-bg-${pe}`);break;case 50331648:ve=U.toColor(pe>>16,pe>>8&255,pe&255),this._addStyle(h,`background-color:#${ja((pe>>>0).toString(16),`0`,6)}`);break;default:he?(ve=p.foreground,w.push(`xterm-bg-257`)):ve=p.background}switch(ge||E.isDim()&&(ge=W.multiplyOpacity(ve,.5)),D){case 16777216:case 33554432:E.isBold()&&fe<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(fe+=8),this._applyMinimumContrast(h,ve,p.ansi[fe],E,ge,void 0)||w.push(`xterm-fg-${fe}`);break;case 50331648:let e=U.toColor(fe>>16&255,fe>>8&255,fe&255);this._applyMinimumContrast(h,ve,e,E,ge,_e)||this._addStyle(h,`color:#${ja(fe.toString(16),`0`,6)}`);break;default:this._applyMinimumContrast(h,ve,p.foreground,E,ge,_e)||he&&w.push(`xterm-fg-257`)}w.length&&=(h.className=w.join(` `),0),!ce&&!ie&&!ue&&ae?g++:h.textContent=_,S!==this.defaultSpacing&&(h.style.letterSpacing=`${S}px`),d.push(h),T=oe}return h&&g&&(h.textContent=_),d}_applyMinimumContrast(e,t,n,r,i,a){if(this._optionsService.rawOptions.minimumContrastRatio===1||Da(r.getCode()))return!1;let o=this._getContrastCache(r),s;if(!i&&!a&&(s=o.getColor(t.rgba,n.rgba)),s===void 0){let e=this._optionsService.rawOptions.minimumContrastRatio/(r.isDim()?2:1);s=W.ensureContrastRatio(i||t,a||n,e),o.setColor((i||t).rgba,(a||n).rgba,s??null)}return s?(this._addStyle(e,`color:${s.css}`),!0):!1}_getContrastCache(e){return e.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(e,t){e.setAttribute(`style`,`${e.getAttribute(`style`)||``}${t};`)}_isCellInSelection(e,t){let n=this._selectionStart,r=this._selectionEnd;return!n||!r?!1:this._columnSelectMode?n[0]<=r[0]?e>=n[0]&&t>=n[1]&&e=n[1]&&e>=r[0]&&t<=r[1]:t>n[1]&&t=n[0]&&e=n[0]}};Aa=k([A(1,sn),A(2,Yt),A(3,nn),A(4,Gt),A(5,Qt),A(6,cn)],Aa);function ja(e,t,n){for(;e.length0&&(this._flat[r]=t),t}let i=e;t&&(i+=`B`),n&&(i+=`I`);let a=this._holey.get(i);if(a===void 0){let r=0;t&&(r|=1),n&&(r|=2),a=this._measure(e,r),a>0&&this._holey.set(i,a)}return a}_measure(e,t){let n=this._measureElements[t];return n.textContent=e.repeat(32),n.offsetWidth/32}},Na=class{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(e,t,n,r=!1){if(this.selectionStart=t,this.selectionEnd=n,!t||!n||t[0]===n[0]&&t[1]===n[1]){this.clear();return}let i=e.buffers.active.ydisp,a=t[1]-i,o=n[1]-i,s=Math.max(a,0),c=Math.min(o,e.rows-1);s>=e.rows||c<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=r,this.viewportStartRow=a,this.viewportEndRow=o,this.viewportCappedStartRow=s,this.viewportCappedEndRow=c,this.startCol=t[0],this.endCol=n[0])}isCellSelected(e,t,n){return this.hasSelection?(n-=e.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?t>=this.startCol&&n>=this.viewportCappedStartRow&&t=this.viewportCappedStartRow&&t>=this.endCol&&n<=this.viewportCappedEndRow:n>this.viewportStartRow&&n=this.startCol&&t=this.startCol):!1}};function Pa(){return new Na}var Fa=`xterm-dom-renderer-owner-`,Ia=`xterm-rows`,La=`xterm-fg-`,Ra=`xterm-bg-`,za=`xterm-focus`,Ba=`xterm-selection`,Va=1,Ha=class extends N{constructor(e,t,n,r,i,a,o,s,c,l,u,d,f,p){super(),this._terminal=e,this._document=t,this._element=n,this._screenElement=r,this._viewportElement=i,this._helperContainer=a,this._linkifier2=o,this._charSizeService=c,this._optionsService=l,this._bufferService=u,this._coreService=d,this._coreBrowserService=f,this._themeService=p,this._terminalClass=Va++,this._rowElements=[],this._selectionRenderModel=Pa(),this.onRequestRedraw=this._register(new F).event,this._rowContainer=this._document.createElement(`div`),this._rowContainer.classList.add(Ia),this._rowContainer.style.lineHeight=`normal`,this._rowContainer.setAttribute(`aria-hidden`,`true`),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement(`div`),this._selectionContainer.classList.add(Ba),this._selectionContainer.setAttribute(`aria-hidden`,`true`),this.dimensions=Oa(),this._updateDimensions(),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._themeService.onChangeColors(e=>this._injectCss(e))),this._injectCss(this._themeService.colors),this._rowFactory=s.createInstance(Aa,document),this._element.classList.add(Fa+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this._register(this._linkifier2.onShowLinkUnderline(e=>this._handleLinkHover(e))),this._register(this._linkifier2.onHideLinkUnderline(e=>this._handleLinkLeave(e))),this._register(M(()=>{this._element.classList.remove(Fa+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new Ma(this._document,this._helperContainer),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){let e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(let e of this._rowElements)e.style.width=`${this.dimensions.css.canvas.width}px`,e.style.height=`${this.dimensions.css.cell.height}px`,e.style.lineHeight=`${this.dimensions.css.cell.height}px`,e.style.overflow=`hidden`;this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement(`style`),this._screenElement.appendChild(this._dimensionsStyleElement));let t=`${this._terminalSelector} .${Ia} span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement(`style`),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .${Ia} { pointer-events: none; color: ${e.foreground.css}; font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`;t+=`${this._terminalSelector} .${Ia} .xterm-dim { color: ${W.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}`;let n=`blink_underline_${this._terminalClass}`,r=`blink_bar_${this._terminalClass}`,i=`blink_block_${this._terminalClass}`;t+=`@keyframes ${n} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${r} { 50% { box-shadow: none; }}`,t+=`@keyframes ${i} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .${Ia}.${za} .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${n} 1s step-end infinite;}${this._terminalSelector} .${Ia}.${za} .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .${Ia}.${za} .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${i} 1s step-end infinite;}${this._terminalSelector} .${Ia} .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .${Ia} .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .${Ia} .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .${Ia} .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .${Ia} .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .${Ba} { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .${Ba} div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .${Ba} div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(let[n,r]of e.ansi.entries())t+=`${this._terminalSelector} .${La}${n} { color: ${r.css}; }${this._terminalSelector} .${La}${n}.xterm-dim { color: ${W.multiplyOpacity(r,.5).css}; }${this._terminalSelector} .${Ra}${n} { background-color: ${r.css}; }`;t+=`${this._terminalSelector} .${La}257 { color: ${W.opaque(e.background).css}; }${this._terminalSelector} .${La}257.xterm-dim { color: ${W.multiplyOpacity(W.opaque(e.background),.5).css}; }${this._terminalSelector} .${Ra}257 { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){let e=this.dimensions.css.cell.width-this._widthCache.get(`W`,!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let e=this._rowElements.length;e<=t;e++){let e=this._document.createElement(`div`);this._rowContainer.appendChild(e),this._rowElements.push(e)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop())}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove(za),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add(za),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleSelectionChanged(e,t,n){if(this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,n),this.renderRows(0,this._bufferService.rows-1),!e||!t||(this._selectionRenderModel.update(this._terminal,e,t,n),!this._selectionRenderModel.hasSelection))return;let r=this._selectionRenderModel.viewportStartRow,i=this._selectionRenderModel.viewportEndRow,a=this._selectionRenderModel.viewportCappedStartRow,o=this._selectionRenderModel.viewportCappedEndRow,s=this._document.createDocumentFragment();if(n){let n=e[0]>t[0];s.appendChild(this._createSelectionElement(a,n?t[0]:e[0],n?e[0]:t[0],o-a+1))}else{let n=r===a?e[0]:0,c=a===i?t[0]:this._bufferService.cols;s.appendChild(this._createSelectionElement(a,n,c));let l=o-a-1;if(s.appendChild(this._createSelectionElement(a+1,0,this._bufferService.cols,l)),a!==o){let e=i===o?t[0]:this._bufferService.cols;s.appendChild(this._createSelectionElement(o,0,e))}}this._selectionContainer.appendChild(s)}_createSelectionElement(e,t,n,r=1){let i=this._document.createElement(`div`),a=t*this.dimensions.css.cell.width,o=this.dimensions.css.cell.width*(n-t);return a+o>this.dimensions.css.canvas.width&&(o=this.dimensions.css.canvas.width-a),i.style.height=`${r*this.dimensions.css.cell.height}px`,i.style.top=`${e*this.dimensions.css.cell.height}px`,i.style.left=`${a}px`,i.style.width=`${o}px`,i}handleCursorMove(){}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(let e of this._rowElements)e.replaceChildren()}renderRows(e,t){let n=this._bufferService.buffer,r=n.ybase+n.y,i=Math.min(n.x,this._bufferService.cols-1),a=this._coreService.decPrivateModes.cursorBlink??this._optionsService.rawOptions.cursorBlink,o=this._coreService.decPrivateModes.cursorStyle??this._optionsService.rawOptions.cursorStyle,s=this._optionsService.rawOptions.cursorInactiveStyle;for(let c=e;c<=t;c++){let e=c+n.ydisp,t=this._rowElements[c],l=n.lines.get(e);if(!t||!l)break;t.replaceChildren(...this._rowFactory.createRow(l,e,e===r,o,s,i,a,this.dimensions.css.cell.width,this._widthCache,-1,-1))}}get _terminalSelector(){return`.${Fa}${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,n,r,i,a){n<0&&(e=0),r<0&&(t=0);let o=this._bufferService.rows-1;n=Math.max(Math.min(n,o),0),r=Math.max(Math.min(r,o),0),i=Math.min(i,this._bufferService.cols);let s=this._bufferService.buffer,c=s.ybase+s.y,l=Math.min(s.x,i-1),u=this._optionsService.rawOptions.cursorBlink,d=this._optionsService.rawOptions.cursorStyle,f=this._optionsService.rawOptions.cursorInactiveStyle;for(let o=n;o<=r;++o){let p=o+s.ydisp,m=this._rowElements[o],h=s.lines.get(p);if(!m||!h)break;m.replaceChildren(...this._rowFactory.createRow(h,p,p===c,d,f,l,u,this.dimensions.css.cell.width,this._widthCache,a?o===n?e:0:-1,a?(o===r?t:i)-1:-1))}}};Ha=k([A(7,qt),A(8,tn),A(9,Yt),A(10,Ut),A(11,Gt),A(12,nn),A(13,cn)],Ha);var Ua=class extends N{constructor(e,t,n){super(),this._optionsService=n,this.width=0,this.height=0,this._onCharSizeChange=this._register(new F),this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this._register(new Ka(this._optionsService))}catch{this._measureStrategy=this._register(new Ga(e,t,this._optionsService))}this._register(this._optionsService.onMultipleOptionChange([`fontFamily`,`fontSize`],()=>this.measure()))}get hasValidSize(){return this.width>0&&this.height>0}measure(){let e=this._measureStrategy.measure();(e.width!==this.width||e.height!==this.height)&&(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};Ua=k([A(2,Yt)],Ua);var Wa=class extends N{constructor(){super(...arguments),this._result={width:0,height:0}}_validateAndSet(e,t){e!==void 0&&e>0&&t!==void 0&&t>0&&(this._result.width=e,this._result.height=t)}},Ga=class extends Wa{constructor(e,t,n){super(),this._document=e,this._parentElement=t,this._optionsService=n,this._measureElement=this._document.createElement(`span`),this._measureElement.classList.add(`xterm-char-measure-element`),this._measureElement.textContent=`W`.repeat(32),this._measureElement.setAttribute(`aria-hidden`,`true`),this._measureElement.style.whiteSpace=`pre`,this._measureElement.style.fontKerning=`none`,this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}},Ka=class extends Wa{constructor(e){super(),this._optionsService=e,this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext(`2d`);let t=this._ctx.measureText(`W`);if(!(`width`in t&&`fontBoundingBoxAscent`in t&&`fontBoundingBoxDescent`in t))throw Error(`Required font metrics not supported`)}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;let e=this._ctx.measureText(`W`);return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}},qa=class extends N{constructor(e,t,n){super(),this._textarea=e,this._window=t,this.mainDocument=n,this._isFocused=!1,this._cachedIsFocused=void 0,this._screenDprMonitor=this._register(new Ja(this._window)),this._onDprChange=this._register(new F),this.onDprChange=this._onDprChange.event,this._onWindowChange=this._register(new F),this.onWindowChange=this._onWindowChange.event,this._register(this.onWindowChange(e=>this._screenDprMonitor.setWindow(e))),this._register(Rn.forward(this._screenDprMonitor.onDprChange,this._onDprChange)),this._register(I(this._textarea,`focus`,()=>this._isFocused=!0)),this._register(I(this._textarea,`blur`,()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return this._cachedIsFocused===void 0&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}},Ja=class extends N{constructor(e){super(),this._parentWindow=e,this._windowResizeListener=this._register(new Mn),this._onDprChange=this._register(new F),this.onDprChange=this._onDprChange.event,this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this._register(M(()=>this.clearListener()))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=I(this._parentWindow,`resize`,()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){!this._resolutionMediaMatchList||!this._outerListener||(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}},Ya=class extends N{constructor(){super(),this.linkProviders=[],this._register(M(()=>this.linkProviders.length=0))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{let t=this.linkProviders.indexOf(e);t!==-1&&this.linkProviders.splice(t,1)}}}};function Xa(e,t,n){let r=n.getBoundingClientRect(),i=e.getComputedStyle(n),a=parseInt(i.getPropertyValue(`padding-left`)),o=parseInt(i.getPropertyValue(`padding-top`));return[t.clientX-r.left-a,t.clientY-r.top-o]}function Za(e,t,n,r,i,a,o,s,c){if(!a)return;let l=Xa(e,t,n);if(l)return l[0]=Math.ceil((l[0]+(c?o/2:0))/o),l[1]=Math.ceil(l[1]/s),l[0]=Math.min(Math.max(l[0],1),r+ +!!c),l[1]=Math.min(Math.max(l[1],1),i),l}var Qa=class{constructor(e,t){this._renderService=e,this._charSizeService=t}getCoords(e,t,n,r,i){return Za(window,e,t,n,r,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,i)}getMouseReportCoords(e,t){let n=Xa(window,e,t);if(this._charSizeService.hasValidSize)return n[0]=Math.min(Math.max(n[0],0),this._renderService.dimensions.css.canvas.width-1),n[1]=Math.min(Math.max(n[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(n[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(n[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(n[0]),y:Math.floor(n[1])}}};Qa=k([A(0,an),A(1,tn)],Qa);var $a=class{constructor(e,t){this._renderCallback=e,this._coreBrowserService=t,this._refreshCallbacks=[]}dispose(){this._animationFrame&&=(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),void 0)}addRefreshCallback(e){return this._refreshCallbacks.push(e),this._animationFrame||=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()),this._animationFrame}refresh(e,t,n){this._rowCount=n,e=e===void 0?0:e,t=t===void 0?this._rowCount-1:t,this._rowStart=this._rowStart===void 0?e:Math.min(this._rowStart,e),this._rowEnd=this._rowEnd===void 0?t:Math.max(this._rowEnd,t),!this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0){this._runRefreshCallbacks();return}let e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(let e of this._refreshCallbacks)e(0);this._refreshCallbacks=[]}},eo={};_t(eo,{getSafariVersion:()=>so,isChromeOS:()=>mo,isFirefox:()=>io,isIpad:()=>lo,isIphone:()=>uo,isLegacyEdge:()=>ao,isLinux:()=>po,isMac:()=>co,isNode:()=>to,isSafari:()=>oo,isWindows:()=>fo});var to=typeof process<`u`&&`title`in process,no=to?`node`:navigator.userAgent,ro=to?`node`:navigator.platform,io=no.includes(`Firefox`),ao=no.includes(`Edge`),oo=/^((?!chrome|android).)*safari/i.test(no);function so(){if(!oo)return 0;let e=no.match(/Version\/(\d+)/);return e===null||e.length<2?0:parseInt(e[1])}var co=[`Macintosh`,`MacIntel`,`MacPPC`,`Mac68K`].includes(ro),lo=ro===`iPad`,uo=ro===`iPhone`,fo=[`Windows`,`Win16`,`Win32`,`WinCE`].includes(ro),po=ro.indexOf(`Linux`)>=0,mo=/\bCrOS\b/.test(no),ho=class{constructor(){this._tasks=[],this._i=0}enqueue(e){this._tasks.push(e),this._start()}flush(){for(;this._ii){r-t<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-t))}ms`),this._start();return}r=i}this.clear()}},go=class extends ho{_requestCallback(e){return setTimeout(()=>e(this._createDeadline(16)))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){let t=performance.now()+e;return{timeRemaining:()=>Math.max(0,t-performance.now())}}},_o=class extends ho{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}},vo=!to&&`requestIdleCallback`in window?_o:go,yo=class{constructor(){this._queue=new vo}set(e){this._queue.clear(),this._queue.enqueue(e)}flush(){this._queue.flush()}},bo=class extends N{constructor(e,t,n,r,i,a,o,s,c){super(),this._rowCount=e,this._optionsService=n,this._charSizeService=r,this._coreService=i,this._coreBrowserService=s,this._renderer=this._register(new Mn),this._pausedResizeTask=new yo,this._observerDisposable=this._register(new Mn),this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this._register(new F),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this._register(new F),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this._register(new F),this.onRender=this._onRender.event,this._onRefreshRequest=this._register(new F),this.onRefreshRequest=this._onRefreshRequest.event,this._renderDebouncer=new $a((e,t)=>this._renderRows(e,t),this._coreBrowserService),this._register(this._renderDebouncer),this._syncOutputHandler=new xo(this._coreBrowserService,this._coreService,()=>this._fullRefresh()),this._register(M(()=>this._syncOutputHandler.dispose())),this._register(this._coreBrowserService.onDprChange(()=>this.handleDevicePixelRatioChange())),this._register(o.onResize(()=>this._fullRefresh())),this._register(o.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this._register(a.onDecorationRegistered(()=>this._fullRefresh())),this._register(a.onDecorationRemoved(()=>this._fullRefresh())),this._register(this._optionsService.onMultipleOptionChange([`customGlyphs`,`drawBoldTextInBrightColors`,`letterSpacing`,`lineHeight`,`fontFamily`,`fontSize`,`fontWeight`,`fontWeightBold`,`minimumContrastRatio`,`rescaleOverlappingGlyphs`],()=>{this.clear(),this.handleResize(o.cols,o.rows),this._fullRefresh()})),this._register(this._optionsService.onMultipleOptionChange([`cursorBlink`,`cursorStyle`],()=>this.refreshRows(o.buffer.y,o.buffer.y,!0))),this._register(c.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(this._coreBrowserService.window,t),this._register(this._coreBrowserService.onWindowChange(e=>this._registerIntersectionObserver(e,t)))}get dimensions(){return this._renderer.value.dimensions}_registerIntersectionObserver(e,t){if(`IntersectionObserver`in e){let n=new e.IntersectionObserver(e=>this._handleIntersectionChange(e[e.length-1]),{threshold:0});n.observe(t),this._observerDisposable.value=M(()=>n.disconnect())}}_handleIntersectionChange(e){this._isPaused=e.isIntersecting===void 0?e.intersectionRatio===0:!e.isIntersecting,!this._isPaused&&!this._charSizeService.hasValidSize&&this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,n=!1){if(this._isPaused){this._needsFullRefresh=!0;return}if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}let r=this._syncOutputHandler.flush();r&&(e=Math.min(e,r.start),t=Math.max(t,r.end)),n||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(e,t,this._rowCount)}_renderRows(e,t){if(this._renderer.value){if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&=(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0}}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(e=>this.refreshRows(e.start,e.end,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,t)):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,n){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=n,this._renderer.value?.handleSelectionChanged(e,t,n)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};bo=k([A(2,Yt),A(3,tn),A(4,Gt),A(5,Qt),A(6,Ut),A(7,nn),A(8,cn)],bo);var xo=class{constructor(e,t,n){this._coreBrowserService=e,this._coreService=t,this._onTimeout=n,this._start=0,this._end=0,this._isBuffering=!1}bufferRows(e,t){this._isBuffering?(this._start=Math.min(this._start,e),this._end=Math.max(this._end,t)):(this._start=e,this._end=t,this._isBuffering=!0),this._timeout===void 0&&(this._timeout=this._coreBrowserService.window.setTimeout(()=>{this._timeout=void 0,this._coreService.decPrivateModes.synchronizedOutput=!1,this._onTimeout()},1e3))}flush(){if(this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0),!this._isBuffering)return;let e={start:this._start,end:this._end};return this._isBuffering=!1,e}dispose(){this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0)}};function So(e,t,n,r){let i=n.buffer.x,a=n.buffer.y;if(!n.buffer.hasScrollback)return To(i,a,e,t,n,r)+Eo(a,t,n,r)+Do(i,a,e,t,n,r);let o;if(a===t)return o=i>e?`D`:`C`,Po(Math.abs(i-e),No(o,r));o=a>t?`D`:`C`;let s=Math.abs(a-t);return Po(wo(a>t?e:i,n)+(s-1)*n.cols+1+Co(a>t?i:e,n),No(o,r))}function Co(e,t){return e-1}function wo(e,t){return t.cols-e}function To(e,t,n,r,i,a){return Eo(t,r,i,a).length===0?``:Po(Mo(e,t,e,t-ko(t,i),!1,i).length,No(`D`,a))}function Eo(e,t,n,r){let i=e-ko(e,n),a=t-ko(t,n);return Po(Math.abs(i-a)-Oo(e,t,n),No(jo(e,t),r))}function Do(e,t,n,r,i,a){let o;o=Eo(t,r,i,a).length>0?r-ko(r,i):t;let s=r,c=Ao(e,t,n,r,i,a);return Po(Mo(e,o,n,s,c===`C`,i).length,No(c,a))}function Oo(e,t,n){let r=0,i=e-ko(e,n),a=t-ko(t,n);for(let o=0;o=0&&e0?r-ko(r,i):t,e=n&&ot?`A`:`B`}function Mo(e,t,n,r,i,a){let o=e,s=t,c=``;for(;(o!==n||s!==r)&&s>=0&&sa.cols-1?(c+=a.buffer.translateBufferLineToString(s,!1,e,o),o=0,e=0,s++):!i&&o<0&&(c+=a.buffer.translateBufferLineToString(s,!1,0,e+1),o=a.cols-1,e=o,s--);return c+a.buffer.translateBufferLineToString(s,!1,e,o)}function No(e,t){let n=t?`O`:`[`;return R.ESC+n+e}function Po(e,t){e=Math.floor(e);let n=``;for(let r=0;rthis._bufferService.cols?e%this._bufferService.cols===0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)-1]:[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){let e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[Math.max(e,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){let e=this.selectionStart,t=this.selectionEnd;return!e||!t?!1:e[1]>t[1]||e[1]===t[1]&&e[0]>t[0]}handleTrim(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)}};function Io(e,t){if(e.start.y>e.end.y)throw Error(`Buffer range end (${e.end.x}, ${e.end.y}) cannot be before start (${e.start.x}, ${e.start.y})`);return t*(e.end.y-e.start.y)+(e.end.x-e.start.x+1)}var Lo=50,Ro=15,zo=50,Bo=500,Vo=RegExp(`\xA0`,`g`),Ho=class extends N{constructor(e,t,n,r,i,a,o,s,c){super(),this._element=e,this._screenElement=t,this._linkifier=n,this._bufferService=r,this._coreService=i,this._mouseService=a,this._optionsService=o,this._renderService=s,this._coreBrowserService=c,this._dragScrollAmount=0,this._enabled=!0,this._workCell=new Lt,this._mouseDownTimeStamp=0,this._oldHasSelection=!1,this._oldSelectionStart=void 0,this._oldSelectionEnd=void 0,this._onLinuxMouseSelection=this._register(new F),this.onLinuxMouseSelection=this._onLinuxMouseSelection.event,this._onRedrawRequest=this._register(new F),this.onRequestRedraw=this._onRedrawRequest.event,this._onSelectionChange=this._register(new F),this.onSelectionChange=this._onSelectionChange.event,this._onRequestScrollLines=this._register(new F),this.onRequestScrollLines=this._onRequestScrollLines.event,this._mouseMoveListener=e=>this._handleMouseMove(e),this._mouseUpListener=e=>this._handleMouseUp(e),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener=this._bufferService.buffer.lines.onTrim(e=>this._handleTrim(e)),this._register(this._bufferService.buffers.onBufferActivate(e=>this._handleBufferActivate(e))),this.enable(),this._model=new Fo(this._bufferService),this._activeSelectionMode=0,this._register(M(()=>{this._removeMouseDownListeners()})),this._register(this._bufferService.onResize(e=>{e.rowsChanged&&this.clearSelection()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!e||!t?!1:e[0]!==t[0]||e[1]!==t[1]}get selectionText(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return``;let n=this._bufferService.buffer,r=[];if(this._activeSelectionMode===3){if(e[0]===t[0])return``;let i=e[0]e.replace(Vo,` `)).join(fo?`\r +`:` +`)}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh()),po&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:this._activeSelectionMode===3})}_isClickInSelection(e){let t=this._getMouseBufferCoords(e),n=this._model.finalSelectionStart,r=this._model.finalSelectionEnd;return!n||!r||!t?!1:this._areCoordsInSelection(t,n,r)}isCellInSelection(e,t){let n=this._model.finalSelectionStart,r=this._model.finalSelectionEnd;return!n||!r?!1:this._areCoordsInSelection([e,t],n,r)}_areCoordsInSelection(e,t,n){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){let n=this._linkifier.currentLink?.link?.range;if(n)return this._model.selectionStart=[n.start.x-1,n.start.y-1],this._model.selectionStartLength=Io(n,this._bufferService.cols),this._model.selectionEnd=void 0,!0;let r=this._getMouseBufferCoords(e);return r?(this._selectWordAt(r,t),this._model.selectionEnd=void 0,!0):!1}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){let t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=Xa(this._coreBrowserService.window,e,this._screenElement)[1],n=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=n?0:(t>n&&(t-=n),t=Math.min(Math.max(t,-Lo),Lo),t/=Lo,t/Math.abs(t)+Math.round(t*(Ro-1)))}shouldForceSelection(e){return co?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,!(e.button===2&&this.hasSelection)&&e.button===0){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):e.detail===1?this._handleSingleClick(e):e.detail===2?this._handleDoubleClick(e):e.detail===3&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener(`mousemove`,this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener(`mouseup`,this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),zo)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener(`mousemove`,this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener(`mouseup`,this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0;let t=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);t&&t.length!==this._model.selectionStart[0]&&t.hasWidth(this._model.selectionStart[0])===0&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){let t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return e.altKey&&!(co&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;let t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd){this.refresh(!0);return}this._activeSelectionMode===2?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));let n=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows,e.lines.length-1)):(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){let t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&tthis._handleTrim(e))}_convertViewportColToCharacterIndex(e,t){let n=t;for(let r=0;t>=r;r++){let i=e.loadCell(r,this._workCell).getChars().length;this._workCell.getWidth()===0?n--:i>1&&t!==r&&(n+=i-1)}return n}setSelection(e,t,n){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=n,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,n=!0,r=!0){if(e[0]>=this._bufferService.cols)return;let i=this._bufferService.buffer,a=i.lines.get(e[1]);if(!a)return;let o=i.translateBufferLineToString(e[1],!1),s=this._convertViewportColToCharacterIndex(a,e[0]),c=s,l=e[0]-s,u=0,d=0,f=0,p=0;if(o.charAt(s)===` `){for(;s>0&&o.charAt(s-1)===` `;)s--;for(;c1&&(p+=r-1,c+=r-1);t>0&&s>0&&!this._isCharWordSeparator(a.loadCell(t-1,this._workCell));){a.loadCell(t-1,this._workCell);let e=this._workCell.getChars().length;this._workCell.getWidth()===0?(u++,t--):e>1&&(f+=e-1,s-=e-1),s--,t--}for(;n1&&(p+=e-1,c+=e-1),c++,n++}}c++;let m=s+l-u+f,h=Math.min(this._bufferService.cols,c-s+u+d-f-p);if(t||o.slice(s,c).trim()!==``){if(n&&m===0&&a.getCodePoint(0)!==32){let t=i.lines.get(e[1]-1);if(t&&a.isWrapped&&t.getCodePoint(this._bufferService.cols-1)!==32){let t=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(t){let e=this._bufferService.cols-t.start;m-=e,h+=e}}}if(r&&m+h===this._bufferService.cols&&a.getCodePoint(this._bufferService.cols-1)!==32){let t=i.lines.get(e[1]+1);if(t?.isWrapped&&t.getCodePoint(0)!==32){let t=this._getWordAt([0,e[1]+1],!1,!1,!0);t&&(h+=t.length)}}return{start:m,length:h}}}_selectWordAt(e,t){let n=this._getWordAt(e,t);if(n){for(;n.start<0;)n.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[n.start,e[1]],this._model.selectionStartLength=n.length}}_selectToWordAt(e){let t=this._getWordAt(e,!0);if(t){let n=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,n--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,n++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,n]}}_isCharWordSeparator(e){return e.getWidth()!==0&&this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){let t=this._bufferService.buffer.getWrappedRangeForLine(e),n={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=Io(n,this._bufferService.cols)}};Ho=k([A(3,Ut),A(4,Gt),A(5,rn),A(6,Yt),A(7,an),A(8,nn)],Ho);var Uo=class{constructor(){this._data={}}set(e,t,n){this._data[e]||(this._data[e]={}),this._data[e][t]=n}get(e,t){return this._data[e]?this._data[e][t]:void 0}clear(){this._data={}}},Wo=class{constructor(){this._color=new Uo,this._css=new Uo}setCss(e,t,n){this._css.set(e,t,n)}getCss(e,t){return this._css.get(e,t)}setColor(e,t,n){this._color.set(e,t,n)}getColor(e,t){return this._color.get(e,t)}clear(){this._color.clear(),this._css.clear()}},K=Object.freeze((()=>{let e=[G.toColor(`#2e3436`),G.toColor(`#cc0000`),G.toColor(`#4e9a06`),G.toColor(`#c4a000`),G.toColor(`#3465a4`),G.toColor(`#75507b`),G.toColor(`#06989a`),G.toColor(`#d3d7cf`),G.toColor(`#555753`),G.toColor(`#ef2929`),G.toColor(`#8ae234`),G.toColor(`#fce94f`),G.toColor(`#729fcf`),G.toColor(`#ad7fa8`),G.toColor(`#34e2e2`),G.toColor(`#eeeeec`)],t=[0,95,135,175,215,255];for(let n=0;n<216;n++){let r=t[n/36%6|0],i=t[n/6%6|0],a=t[n%6];e.push({css:U.toCss(r,i,a),rgba:U.toRgba(r,i,a)})}for(let t=0;t<24;t++){let n=8+t*10;e.push({css:U.toCss(n,n,n),rgba:U.toRgba(n,n,n)})}return e})()),Go=G.toColor(`#ffffff`),Ko=G.toColor(`#000000`),qo=G.toColor(`#ffffff`),Jo=Ko,Yo={css:`rgba(255, 255, 255, 0.3)`,rgba:4294967117},Xo=Go,Zo=class extends N{constructor(e){super(),this._optionsService=e,this._contrastCache=new Wo,this._halfContrastCache=new Wo,this._onChangeColors=this._register(new F),this.onChangeColors=this._onChangeColors.event,this._colors={foreground:Go,background:Ko,cursor:qo,cursorAccent:Jo,selectionForeground:void 0,selectionBackgroundTransparent:Yo,selectionBackgroundOpaque:W.blend(Ko,Yo),selectionInactiveBackgroundTransparent:Yo,selectionInactiveBackgroundOpaque:W.blend(Ko,Yo),scrollbarSliderBackground:W.opacity(Go,.2),scrollbarSliderHoverBackground:W.opacity(Go,.4),scrollbarSliderActiveBackground:W.opacity(Go,.5),overviewRulerBorder:Go,ansi:K.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this._register(this._optionsService.onSpecificOptionChange(`minimumContrastRatio`,()=>this._contrastCache.clear())),this._register(this._optionsService.onSpecificOptionChange(`theme`,()=>this._setTheme(this._optionsService.rawOptions.theme)))}get colors(){return this._colors}_setTheme(e={}){let t=this._colors;if(t.foreground=q(e.foreground,Go),t.background=q(e.background,Ko),t.cursor=W.blend(t.background,q(e.cursor,qo)),t.cursorAccent=W.blend(t.background,q(e.cursorAccent,Jo)),t.selectionBackgroundTransparent=q(e.selectionBackground,Yo),t.selectionBackgroundOpaque=W.blend(t.background,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundTransparent=q(e.selectionInactiveBackground,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundOpaque=W.blend(t.background,t.selectionInactiveBackgroundTransparent),t.selectionForeground=e.selectionForeground?q(e.selectionForeground,va):void 0,t.selectionForeground===va&&(t.selectionForeground=void 0),W.isOpaque(t.selectionBackgroundTransparent)&&(t.selectionBackgroundTransparent=W.opacity(t.selectionBackgroundTransparent,.3)),W.isOpaque(t.selectionInactiveBackgroundTransparent)&&(t.selectionInactiveBackgroundTransparent=W.opacity(t.selectionInactiveBackgroundTransparent,.3)),t.scrollbarSliderBackground=q(e.scrollbarSliderBackground,W.opacity(t.foreground,.2)),t.scrollbarSliderHoverBackground=q(e.scrollbarSliderHoverBackground,W.opacity(t.foreground,.4)),t.scrollbarSliderActiveBackground=q(e.scrollbarSliderActiveBackground,W.opacity(t.foreground,.5)),t.overviewRulerBorder=q(e.overviewRulerBorder,Xo),t.ansi=K.slice(),t.ansi[0]=q(e.black,K[0]),t.ansi[1]=q(e.red,K[1]),t.ansi[2]=q(e.green,K[2]),t.ansi[3]=q(e.yellow,K[3]),t.ansi[4]=q(e.blue,K[4]),t.ansi[5]=q(e.magenta,K[5]),t.ansi[6]=q(e.cyan,K[6]),t.ansi[7]=q(e.white,K[7]),t.ansi[8]=q(e.brightBlack,K[8]),t.ansi[9]=q(e.brightRed,K[9]),t.ansi[10]=q(e.brightGreen,K[10]),t.ansi[11]=q(e.brightYellow,K[11]),t.ansi[12]=q(e.brightBlue,K[12]),t.ansi[13]=q(e.brightMagenta,K[13]),t.ansi[14]=q(e.brightCyan,K[14]),t.ansi[15]=q(e.brightWhite,K[15]),e.extendedAnsi){let n=Math.min(t.ansi.length-16,e.extendedAnsi.length);for(let r=0;re.index-t.index),r=[];for(let t of n){let n=this._services.get(t.id);if(!n)throw Error(`[createInstance] ${e.name} depends on UNKNOWN service ${t.id._id}.`);r.push(n)}let i=n.length>0?n[0].index:t.length;if(t.length!==i)throw Error(`[createInstance] First service dependency of ${e.name} at position ${i+1} conflicts with ${t.length} static arguments`);return new e(...t,...r)}},es={trace:0,debug:1,info:2,warn:3,error:4,off:5},ts=`xterm.js: `,ns=class extends N{constructor(e){super(),this._optionsService=e,this._logLevel=5,this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange(`logLevel`,()=>this._updateLogLevel())),rs=this}get logLevel(){return this._logLevel}_updateLogLevel(){this._logLevel=es[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;tthis._length)for(let t=this._length;t=e;t--)this._array[this._getCyclicIndex(t+n.length)]=this._array[this._getCyclicIndex(t)];for(let t=0;tthis._maxLength){let e=this._length+n.length-this._maxLength;this._startIndex+=e,this._length=this._maxLength,this.onTrimEmitter.fire(e)}else this._length+=n.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,n){if(!(t<=0)){if(e<0||e>=this._length)throw Error(`start argument out of range`);if(e+n<0)throw Error(`Cannot shift elements in list beyond index 0`);if(n>0){for(let r=t-1;r>=0;r--)this.set(e+r+n,this.get(e+r));let r=e+t+n-this._length;if(r>0)for(this._length+=r;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let r=0;r>22,t&2097152?this._combined[e].charCodeAt(this._combined[e].length-1):n]}set(e,t){this._data[e*J+1]=t[0],t[1].length>1?(this._combined[e]=t[1],this._data[e*J+0]=e|2097152|t[2]<<22):this._data[e*J+0]=t[1].charCodeAt(0)|t[2]<<22}getWidth(e){return this._data[e*J+0]>>22}hasWidth(e){return this._data[e*J+0]&12582912}getFg(e){return this._data[e*J+1]}getBg(e){return this._data[e*J+2]}hasContent(e){return this._data[e*J+0]&4194303}getCodePoint(e){let t=this._data[e*J+0];return t&2097152?this._combined[e].charCodeAt(this._combined[e].length-1):t&2097151}isCombined(e){return this._data[e*J+0]&2097152}getString(e){let t=this._data[e*J+0];return t&2097152?this._combined[e]:t&2097151?kt(t&2097151):``}isProtected(e){return this._data[e*J+2]&536870912}loadCell(e,t){return as=e*J,t.content=this._data[as+0],t.fg=this._data[as+1],t.bg=this._data[as+2],t.content&2097152&&(t.combinedData=this._combined[e]),t.bg&268435456&&(t.extended=this._extendedAttrs[e]),t}setCell(e,t){t.content&2097152&&(this._combined[e]=t.combinedData),t.bg&268435456&&(this._extendedAttrs[e]=t.extended),this._data[e*J+0]=t.content,this._data[e*J+1]=t.fg,this._data[e*J+2]=t.bg}setCellFromCodepoint(e,t,n,r){r.bg&268435456&&(this._extendedAttrs[e]=r.extended),this._data[e*J+0]=t|n<<22,this._data[e*J+1]=r.fg,this._data[e*J+2]=r.bg}addCodepointToCell(e,t,n){let r=this._data[e*J+0];r&2097152?this._combined[e]+=kt(t):r&2097151?(this._combined[e]=kt(r&2097151)+kt(t),r&=-2097152,r|=2097152):r=t|1<<22,n&&(r&=-12582913,r|=n<<22),this._data[e*J+0]=r}insertCells(e,t,n){if(e%=this.length,e&&this.getWidth(e-1)===2&&this.setCellFromCodepoint(e-1,0,1,n),t=0;--n)this.setCell(e+t+n,this.loadCell(e+n,r));for(let r=0;rthis.length){if(this._data.buffer.byteLength>=n*4)this._data=new Uint32Array(this._data.buffer,0,n);else{let e=new Uint32Array(n);e.set(this._data),this._data=e}for(let n=this.length;n=e&&delete this._combined[r]}let r=Object.keys(this._extendedAttrs);for(let t=0;t=e&&delete this._extendedAttrs[n]}}return this.length=e,n*4*os=0;--e)if(this._data[e*J+0]&4194303)return e+(this._data[e*J+0]>>22);return 0}getNoBgTrimmedLength(){for(let e=this.length-1;e>=0;--e)if(this._data[e*J+0]&4194303||this._data[e*J+2]&50331648)return e+(this._data[e*J+0]>>22);return 0}copyCellsFrom(e,t,n,r,i){let a=e._data;if(i)for(let i=r-1;i>=0;i--){for(let e=0;e=t&&(this._combined[i-t+n]=e._combined[i])}}translateToString(e,t,n,r){t??=0,n??=this.length,e&&(n=Math.min(n,this.getTrimmedLength())),r&&(r.length=0);let i=``;for(;t>22||1}return r&&r.push(t),i}};function cs(e,t,n,r,i,a){let o=[];for(let s=0;s=s&&r0&&(e>d||u[e].getTrimmedLength()===0);e--)h++;h>0&&(o.push(s+u.length-h),o.push(h)),s+=u.length-1}return o}function ls(e,t){let n=[],r=0,i=t[r],a=0;for(let o=0;ofs(e,r,t)).reduce((e,t)=>e+t),a=0,o=0,s=0;for(;sc&&(a-=c,o++);let l=e[o].getWidth(a-1)===2;l&&a--;let u=l?n-1:n;r.push(u),s+=u}return r}function fs(e,t,n){if(t===e.length-1)return e[t].getTrimmedLength();let r=!e[t].hasContent(n-1)&&e[t].getWidth(n-1)===1,i=e[t+1].getWidth(0)===2;return r&&i?n-1:n}var ps=class e{constructor(t){this.line=t,this.isDisposed=!1,this._disposables=[],this._id=e._nextId++,this._onDispose=this.register(new F),this.onDispose=this._onDispose.event}get id(){return this._id}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),On(this._disposables),this._disposables.length=0)}register(e){return this._disposables.push(e),e}};ps._nextId=1;var ms=ps,X={},hs=X.B;X[0]={"`":`◆`,a:`▒`,b:`␉`,c:`␌`,d:`␍`,e:`␊`,f:`°`,g:`±`,h:`␤`,i:`␋`,j:`┘`,k:`┐`,l:`┌`,m:`└`,n:`┼`,o:`⎺`,p:`⎻`,q:`─`,r:`⎼`,s:`⎽`,t:`├`,u:`┤`,v:`┴`,w:`┬`,x:`│`,y:`≤`,z:`≥`,"{":`π`,"|":`≠`,"}":`£`,"~":`·`},X.A={"#":`£`},X.B=void 0,X[4]={"#":`£`,"@":`¾`,"[":`ij`,"\\":`½`,"]":`|`,"{":`¨`,"|":`f`,"}":`¼`,"~":`´`},X.C=X[5]={"[":`Ä`,"\\":`Ö`,"]":`Å`,"^":`Ü`,"`":`é`,"{":`ä`,"|":`ö`,"}":`å`,"~":`ü`},X.R={"#":`£`,"@":`à`,"[":`°`,"\\":`ç`,"]":`§`,"{":`é`,"|":`ù`,"}":`è`,"~":`¨`},X.Q={"@":`à`,"[":`â`,"\\":`ç`,"]":`ê`,"^":`î`,"`":`ô`,"{":`é`,"|":`ù`,"}":`è`,"~":`û`},X.K={"@":`§`,"[":`Ä`,"\\":`Ö`,"]":`Ü`,"{":`ä`,"|":`ö`,"}":`ü`,"~":`ß`},X.Y={"#":`£`,"@":`§`,"[":`°`,"\\":`ç`,"]":`é`,"`":`ù`,"{":`à`,"|":`ò`,"}":`è`,"~":`ì`},X.E=X[6]={"@":`Ä`,"[":`Æ`,"\\":`Ø`,"]":`Å`,"^":`Ü`,"`":`ä`,"{":`æ`,"|":`ø`,"}":`å`,"~":`ü`},X.Z={"#":`£`,"@":`§`,"[":`¡`,"\\":`Ñ`,"]":`¿`,"{":`°`,"|":`ñ`,"}":`ç`},X.H=X[7]={"@":`É`,"[":`Ä`,"\\":`Ö`,"]":`Å`,"^":`Ü`,"`":`é`,"{":`ä`,"|":`ö`,"}":`å`,"~":`ü`},X[`=`]={"#":`ù`,"@":`à`,"[":`é`,"\\":`ç`,"]":`ê`,"^":`î`,_:`è`,"`":`ô`,"{":`ä`,"|":`ö`,"}":`ü`,"~":`û`};var gs=4294967295,_s=class{constructor(e,t,n){this._hasScrollback=e,this._optionsService=t,this._bufferService=n,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=Y.clone(),this.savedCharset=hs,this.markers=[],this._nullCell=Lt.fromCharData([0,Nt,1,0]),this._whitespaceCell=Lt.fromCharData([0,Pt,1,32]),this._isClearing=!1,this._memoryCleanupQueue=new vo,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new is(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new It),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new It),this._whitespaceCell}getBlankLine(e,t){return new ss(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let e=this.ybase+this.y-this.ydisp;return e>=0&&egs?gs:t}fillViewportRows(e){if(this.lines.length===0){e===void 0&&(e=Y);let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new is(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){let n=this.getNullCell(Y),r=0,i=this._getCorrectBufferLength(t);if(i>this.lines.maxLength&&(this.lines.maxLength=i),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+a+1?(this.ybase--,a++,this.ydisp>0&&this.ydisp--):this.lines.push(new ss(e,n)));else for(let e=this._rows;e>t;e--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(i0&&(this.lines.trimStart(e),this.ybase=Math.max(this.ybase-e,0),this.ydisp=Math.max(this.ydisp-e,0),this.savedY=Math.max(this.savedY-e,0)),this.lines.maxLength=i}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),a&&(this.y+=a),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let t=0;t.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){let e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&e.backend===`conpty`&&e.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){let n=this._optionsService.rawOptions.reflowCursorLine,r=cs(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(Y),n);if(r.length>0){let n=ls(this.lines,r);us(this.lines,n.layout),this._reflowLargerAdjustViewport(e,t,n.countRemoved)}}_reflowLargerAdjustViewport(e,t,n){let r=this.getNullCell(Y),i=n;for(;i-->0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length=0;o--){let s=this.lines.get(o);if(!s||!s.isWrapped&&s.getTrimmedLength()<=e)continue;let c=[s];for(;s.isWrapped&&o>0;)s=this.lines.get(--o),c.unshift(s);if(!n){let e=this.ybase+this.y;if(e>=o&&e0&&(i.push({start:o+c.length+a,newLines:p}),a+=p.length),c.push(...p);let m=u.length-1,h=u[m];h===0&&(m--,h=u[m]);let g=c.length-d-1,_=l;for(;g>=0;){let e=Math.min(_,h);if(c[m]===void 0)break;c[m].copyCellsFrom(c[g],_-e,h-e,e,!0),h-=e,h===0&&(m--,h=u[m]),_-=e,_===0&&(g--,_=fs(c,Math.max(g,0),this._cols))}for(let t=0;t0;)this.ybase===0?this.y0){let e=[],t=[];for(let e=0;e=0;l--)if(s&&s.start>r+c){for(let e=s.newLines.length-1;e>=0;e--)this.lines.set(l--,s.newLines[e]);l++,e.push({index:r+1,amount:s.newLines.length}),c+=s.newLines.length,s=i[++o]}else this.lines.set(l,t[r--]);let l=0;for(let t=e.length-1;t>=0;t--)e[t].index+=l,this.lines.onInsertEmitter.fire(e[t]),l+=e[t].amount;let u=Math.max(0,n+a-this.lines.maxLength);u>0&&this.lines.onTrimEmitter.fire(u)}}translateBufferLineToString(e,t,n=0,r){let i=this.lines.get(e);return i?i.translateToString(t,n,r):``}getWrappedRangeForLine(e){let t=e,n=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;n+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(e??=this.x;!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=e,t.line<0&&t.dispose()})),t.register(this.lines.onInsert(e=>{t.line>=e.index&&(t.line+=e.amount)})),t.register(this.lines.onDelete(e=>{t.line>=e.index&&t.linee.index&&(t.line-=e.amount)})),t.register(t.onDispose(()=>this._removeMarker(t))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}},vs=class extends N{constructor(e,t){super(),this._optionsService=e,this._bufferService=t,this._onBufferActivate=this._register(new F),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this._register(this._optionsService.onSpecificOptionChange(`scrollback`,()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this._register(this._optionsService.onSpecificOptionChange(`tabStopWidth`,()=>this.setupTabStops()))}reset(){this._normal=new _s(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new _s(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}},ys=2,bs=1,xs=class extends N{constructor(e){super(),this.isUserScrolling=!1,this._onResize=this._register(new F),this.onResize=this._onResize.event,this._onScroll=this._register(new F),this.onScroll=this._onScroll.event,this.cols=Math.max(e.rawOptions.cols||0,ys),this.rows=Math.max(e.rawOptions.rows||0,bs),this.buffers=this._register(new vs(e,this)),this._register(this.buffers.onBufferActivate(e=>{this._onScroll.fire(e.activeBuffer.ydisp)}))}get buffer(){return this.buffers.active}resize(e,t){let n=this.cols!==e,r=this.rows!==t;this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t,colsChanged:n,rowsChanged:r})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){let n=this.buffer,r;r=this._cachedBlankLine,r&&r.length===this.cols&&r.getFg(0)===e.fg&&r.getBg(0)===e.bg||(r=n.getBlankLine(e,t),this._cachedBlankLine=r),r.isWrapped=t;let i=n.ybase+n.scrollTop,a=n.ybase+n.scrollBottom;if(n.scrollTop===0){let e=n.lines.isFull;a===n.lines.length-1?e?n.lines.recycle().copyFrom(r):n.lines.push(r.clone()):n.lines.splice(a+1,0,r.clone()),e?this.isUserScrolling&&(n.ydisp=Math.max(n.ydisp-1,0)):(n.ybase++,this.isUserScrolling||n.ydisp++)}else{let e=a-i+1;n.lines.shiftElements(i+1,e-1,-1),n.lines.set(a,r.clone())}this.isUserScrolling||(n.ydisp=n.ybase),this._onScroll.fire(n.ydisp)}scrollLines(e,t){let n=this.buffer;if(e<0){if(n.ydisp===0)return;this.isUserScrolling=!0}else e+n.ydisp>=n.ybase&&(this.isUserScrolling=!1);let r=n.ydisp;n.ydisp=Math.max(Math.min(n.ydisp+e,n.ybase),0),r!==n.ydisp&&(t||this._onScroll.fire(n.ydisp))}};xs=k([A(0,Yt)],xs);var Ss={cols:80,rows:24,cursorBlink:!1,cursorStyle:`block`,cursorWidth:1,cursorInactiveStyle:`outline`,customGlyphs:!0,drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollModifier:`alt`,fastScrollSensitivity:5,fontFamily:`monospace`,fontSize:15,fontWeight:`normal`,fontWeightBold:`bold`,ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:`info`,logger:null,scrollback:1e3,scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:co,windowOptions:{},windowsMode:!1,windowsPty:{},wordSeparator:` ()[]{}',"\``,altClickMovesCursor:!0,convertEol:!1,termName:`xterm`,cancelEvents:!1,overviewRuler:{}},Cs=[`normal`,`bold`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`],ws=class extends N{constructor(e){super(),this._onOptionChange=this._register(new F),this.onOptionChange=this._onOptionChange.event;let t={...Ss};for(let n in e)if(n in t)try{let r=e[n];t[n]=this._sanitizeAndValidateOption(n,r)}catch(e){console.error(e)}this.rawOptions=t,this.options={...t},this._setupOptions(),this._register(M(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(e,t){return this.onOptionChange(n=>{n===e&&t(this.rawOptions[e])})}onMultipleOptionChange(e,t){return this.onOptionChange(n=>{e.indexOf(n)!==-1&&t()})}_setupOptions(){let e=e=>{if(!(e in Ss))throw Error(`No option with key "${e}"`);return this.rawOptions[e]},t=(e,t)=>{if(!(e in Ss))throw Error(`No option with key "${e}"`);t=this._sanitizeAndValidateOption(e,t),this.rawOptions[e]!==t&&(this.rawOptions[e]=t,this._onOptionChange.fire(e))};for(let n in this.rawOptions){let r={get:e.bind(this,n),set:t.bind(this,n)};Object.defineProperty(this.options,n,r)}}_sanitizeAndValidateOption(e,t){switch(e){case`cursorStyle`:if(t||=Ss[e],!Ts(t))throw Error(`"${t}" is not a valid value for ${e}`);break;case`wordSeparator`:t||=Ss[e];break;case`fontWeight`:case`fontWeightBold`:if(typeof t==`number`&&1<=t&&t<=1e3)break;t=Cs.includes(t)?t:Ss[e];break;case`cursorWidth`:t=Math.floor(t);case`lineHeight`:case`tabStopWidth`:if(t<1)throw Error(`${e} cannot be less than 1, value: ${t}`);break;case`minimumContrastRatio`:t=Math.max(1,Math.min(21,Math.round(t*10)/10));break;case`scrollback`:if(t=Math.min(t,4294967295),t<0)throw Error(`${e} cannot be less than 0, value: ${t}`);break;case`fastScrollSensitivity`:case`scrollSensitivity`:if(t<=0)throw Error(`${e} cannot be less than or equal to 0, value: ${t}`);break;case`rows`:case`cols`:if(!t&&t!==0)throw Error(`${e} must be numeric, value: ${t}`);break;case`windowsPty`:t??={}}return t}};function Ts(e){return e===`block`||e===`underline`||e===`bar`}function Es(e,t=5){if(typeof e!=`object`)return e;let n=Array.isArray(e)?[]:{};for(let r in e)n[r]=t<=1?e[r]:e[r]&&Es(e[r],t-1);return n}var Ds=Object.freeze({insertMode:!1}),Os=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,wraparound:!0}),ks=class extends N{constructor(e,t,n){super(),this._bufferService=e,this._logService=t,this._optionsService=n,this.isCursorInitialized=!1,this.isCursorHidden=!1,this._onData=this._register(new F),this.onData=this._onData.event,this._onUserInput=this._register(new F),this.onUserInput=this._onUserInput.event,this._onBinary=this._register(new F),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this._register(new F),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.modes=Es(Ds),this.decPrivateModes=Es(Os)}reset(){this.modes=Es(Ds),this.decPrivateModes=Es(Os)}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;let n=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&n.ybase!==n.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data "${e}"`),this._logService.trace(`sending data (codes)`,()=>e.split(``).map(e=>e.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${e}"`),this._logService.trace(`sending binary (codes)`,()=>e.split(``).map(e=>e.charCodeAt(0))),this._onBinary.fire(e))}};ks=k([A(0,Ut),A(1,Jt),A(2,Yt)],ks);var As={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:e=>e.button===4||e.action!==1?!1:(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)},VT200:{events:19,restrict:e=>e.action!==32},DRAG:{events:23,restrict:e=>e.action!==32||e.button!==3},ANY:{events:31,restrict:e=>!0}};function js(e,t){let n=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return e.button===4?(n|=64,n|=e.action):(n|=e.button&3,e.button&4&&(n|=64),e.button&8&&(n|=128),e.action===32?n|=32:e.action===0&&!t&&(n|=3)),n}var Ms=String.fromCharCode,Ns={DEFAULT:e=>{let t=[js(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?``:`\x1B[M${Ms(t[0])}${Ms(t[1])}${Ms(t[2])}`},SGR:e=>{let t=e.action===0&&e.button!==4?`m`:`M`;return`\x1B[<${js(e,!0)};${e.col};${e.row}${t}`},SGR_PIXELS:e=>{let t=e.action===0&&e.button!==4?`m`:`M`;return`\x1B[<${js(e,!0)};${e.x};${e.y}${t}`}},Ps=class extends N{constructor(e,t,n){super(),this._bufferService=e,this._coreService=t,this._optionsService=n,this._protocols={},this._encodings={},this._activeProtocol=``,this._activeEncoding=``,this._lastEvent=null,this._wheelPartialScroll=0,this._onProtocolChange=this._register(new F),this.onProtocolChange=this._onProtocolChange.event;for(let e of Object.keys(As))this.addProtocol(e,As[e]);for(let e of Object.keys(Ns))this.addEncoding(e,Ns[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(e){if(!this._protocols[e])throw Error(`unknown protocol "${e}"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw Error(`unknown encoding "${e}"`);this._activeEncoding=e}reset(){this.activeProtocol=`NONE`,this.activeEncoding=`DEFAULT`,this._lastEvent=null,this._wheelPartialScroll=0}consumeWheelEvent(e,t,n){if(e.deltaY===0||e.shiftKey||t===void 0||n===void 0)return 0;let r=t/n,i=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(i/=r+0,Math.abs(e.deltaY)<50&&(i*=.3),this._wheelPartialScroll+=i,i=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(i*=this._bufferService.rows),i}_applyScrollModifier(e,t){return t.altKey||t.ctrlKey||t.shiftKey?e*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:e*this._optionsService.rawOptions.scrollSensitivity}triggerMouseEvent(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows||e.button===4&&e.action===32||e.button===3&&e.action!==32||e.button!==4&&(e.action===2||e.action===3)||(e.col++,e.row++,e.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,e,this._activeEncoding===`SGR_PIXELS`))||!this._protocols[this._activeProtocol].restrict(e))return!1;let t=this._encodings[this._activeEncoding](e);return t&&(this._activeEncoding===`DEFAULT`?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0}explainEvents(e){return{down:!!(e&1),up:!!(e&2),drag:!!(e&4),move:!!(e&8),wheel:!!(e&16)}}_equalEvents(e,t,n){if(n){if(e.x!==t.x||e.y!==t.y)return!1}else if(e.col!==t.col||e.row!==t.row)return!1;return e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift}};Ps=k([A(0,Ut),A(1,Gt),A(2,Yt)],Ps);var Fs=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],Is=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],Z;function Ls(e,t){let n=0,r=t.length-1,i;if(et[r][1])return!1;for(;r>=n;)if(i=n+r>>1,e>t[i][1])n=i+1;else if(e=131072&&e<=196605||e>=196608&&e<=262141?2:1}charProperties(e,t){let n=this.wcwidth(e),r=n===0&&t!==0;if(r){let e=zs.extractWidth(t);e===0?r=!1:e>n&&(n=e)}return zs.createPropertyValue(0,n,r)}},zs=class e{constructor(){this._providers=Object.create(null),this._active=``,this._onChange=new F,this.onChange=this._onChange.event;let e=new Rs;this.register(e),this._active=e.version,this._activeProvider=e}static extractShouldJoin(e){return!!(e&1)}static extractWidth(e){return e>>1&3}static extractCharKind(e){return e>>3}static createPropertyValue(e,t,n=!1){return(e&16777215)<<3|(t&3)<<1|!!n}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(e){if(!this._providers[e])throw Error(`unknown Unicode version "${e}"`);this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)}register(e){this._providers[e.version]=e}wcwidth(e){return this._activeProvider.wcwidth(e)}getStringCellWidth(t){let n=0,r=0,i=t.length;for(let a=0;a=i)return n+this.wcwidth(o);let e=t.charCodeAt(a);56320<=e&&e<=57343?o=(o-55296)*1024+e-56320+65536:n+=this.wcwidth(e)}let s=this.charProperties(o,r),c=e.extractWidth(s);e.extractShouldJoin(s)&&(c-=e.extractWidth(r)),n+=c,r=s}return n}charProperties(e,t){return this._activeProvider.charProperties(e,t)}},Bs=class{constructor(){this.glevel=0,this._charsets=[]}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(e){this.glevel=e,this.charset=this._charsets[e]}setgCharset(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)}};function Vs(e){let t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1)?.get(e.cols-1),n=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);n&&t&&(n.isWrapped=t[3]!==0&&t[3]!==32)}var Hs=2147483647,Us=256,Ws=class e{constructor(e=32,t=32){if(this.maxLength=e,this.maxSubParamsLength=t,t>Us)throw Error(`maxSubParamsLength must not be greater than 256`);this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}static fromArray(t){let n=new e;if(!t.length)return n;for(let e=+!!Array.isArray(t[0]);e>8,r=this._subParamsIdx[t]&255;r-n>0&&e.push(Array.prototype.slice.call(this._subParams,n,r))}return e}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}addParam(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw Error(`values lesser than -1 are not allowed`);this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>Hs?Hs:e}}addSubParam(e){if(this._digitIsSub=!0,this.length){if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength){this._rejectSubDigits=!0;return}if(e<-1)throw Error(`values lesser than -1 are not allowed`);this._subParams[this._subParamsLength++]=e>Hs?Hs:e,this._subParamsIdx[this.length-1]++}}hasSubParams(e){return(this._subParamsIdx[e]&255)-(this._subParamsIdx[e]>>8)>0}getSubParams(e){let t=this._subParamsIdx[e]>>8,n=this._subParamsIdx[e]&255;return n-t>0?this._subParams.subarray(t,n):null}getSubParamsAll(){let e={};for(let t=0;t>8,r=this._subParamsIdx[t]&255;r-n>0&&(e[t]=this._subParams.slice(n,r))}return e}addDigit(e){let t;if(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;let n=this._digitIsSub?this._subParams:this.params,r=n[t-1];n[t-1]=~r?Math.min(r*10+e,Hs):e}},Gs=[],Ks=class{constructor(){this._state=0,this._active=Gs,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){this._handlers[e]===void 0&&(this._handlers[e]=[]);let n=this._handlers[e];return n.push(t),{dispose:()=>{let e=n.indexOf(t);e!==-1&&n.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=Gs}reset(){if(this._state===2)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=Gs,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||Gs,!this._active.length)this._handlerFb(this._id,`START`);else for(let e=this._active.length-1;e>=0;e--)this._active[e].start()}_put(e,t,n){if(!this._active.length)this._handlerFb(this._id,`PUT`,At(e,t,n));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(e,t,n)}start(){this.reset(),this._state=1}put(e,t,n){if(this._state!==3){if(this._state===1)for(;t0&&this._put(e,t,n)}}end(e,t=!0){if(this._state!==0){if(this._state!==3){if(this._state===1&&this._start(),!this._active.length)this._handlerFb(this._id,`END`,e);else{let n=!1,r=this._active.length-1,i=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,n=t,i=this._stack.fallThrough,this._stack.paused=!1),!i&&n===!1){for(;r>=0&&(n=this._active[r].end(e),n!==!0);r--)if(n instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,n;r--}for(;r>=0;r--)if(n=this._active[r].end(!1),n instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,n}}this._active=Gs,this._id=-1,this._state=0}}},qs=class{constructor(e){this._handler=e,this._data=``,this._hitLimit=!1}start(){this._data=``,this._hitLimit=!1}put(e,t,n){this._hitLimit||(this._data+=At(e,t,n),this._data.length>1e7&&(this._data=``,this._hitLimit=!0))}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data),t instanceof Promise))return t.then(e=>(this._data=``,this._hitLimit=!1,e));return this._data=``,this._hitLimit=!1,t}},Js=[],Ys=class{constructor(){this._handlers=Object.create(null),this._active=Js,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=Js}registerHandler(e,t){this._handlers[e]===void 0&&(this._handlers[e]=[]);let n=this._handlers[e];return n.push(t),{dispose:()=>{let e=n.indexOf(t);e!==-1&&n.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=Js,this._ident=0}hook(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||Js,!this._active.length)this._handlerFb(this._ident,`HOOK`,t);else for(let e=this._active.length-1;e>=0;e--)this._active[e].hook(t)}put(e,t,n){if(!this._active.length)this._handlerFb(this._ident,`PUT`,At(e,t,n));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(e,t,n)}unhook(e,t=!0){if(!this._active.length)this._handlerFb(this._ident,`UNHOOK`,e);else{let n=!1,r=this._active.length-1,i=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,n=t,i=this._stack.fallThrough,this._stack.paused=!1),!i&&n===!1){for(;r>=0&&(n=this._active[r].unhook(e),n!==!0);r--)if(n instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,n;r--}for(;r>=0;r--)if(n=this._active[r].unhook(!1),n instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,n}this._active=Js,this._ident=0}},Xs=new Ws;Xs.addParam(0);var Zs=class{constructor(e){this._handler=e,this._data=``,this._params=Xs,this._hitLimit=!1}hook(e){this._params=e.length>1||e.params[0]?e.clone():Xs,this._data=``,this._hitLimit=!1}put(e,t,n){this._hitLimit||(this._data+=At(e,t,n),this._data.length>1e7&&(this._data=``,this._hitLimit=!0))}unhook(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data,this._params),t instanceof Promise))return t.then(e=>(this._params=Xs,this._data=``,this._hitLimit=!1,e));return this._params=Xs,this._data=``,this._hitLimit=!1,t}},Qs=class{constructor(e){this.table=new Uint8Array(e)}setDefault(e,t){this.table.fill(e<<4|t)}add(e,t,n,r){this.table[t<<8|e]=n<<4|r}addMany(e,t,n,r){for(let i=0;it),n=(e,n)=>t.slice(e,n),r=n(32,127),i=n(0,24);i.push(25),i.push.apply(i,n(28,32));let a=n(0,14),o;for(o in e.setDefault(1,0),e.addMany(r,0,2,0),a)e.addMany([24,26,153,154],o,3,0),e.addMany(n(128,144),o,3,0),e.addMany(n(144,152),o,3,0),e.add(156,o,0,0),e.add(27,o,11,1),e.add(157,o,4,8),e.addMany([152,158,159],o,0,7),e.add(155,o,11,3),e.add(144,o,11,9);return e.addMany(i,0,3,0),e.addMany(i,1,3,1),e.add(127,1,0,1),e.addMany(i,8,0,8),e.addMany(i,3,3,3),e.add(127,3,0,3),e.addMany(i,4,3,4),e.add(127,4,0,4),e.addMany(i,6,3,6),e.addMany(i,5,3,5),e.add(127,5,0,5),e.addMany(i,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(r,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(n(28,32),8,0,8),e.addMany([88,94,95],1,0,7),e.addMany(r,7,0,7),e.addMany(i,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(91,1,11,3),e.addMany(n(64,127),3,7,0),e.addMany(n(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(n(48,60),4,8,4),e.addMany(n(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(n(32,64),6,0,6),e.add(127,6,0,6),e.addMany(n(64,127),6,0,0),e.addMany(n(32,48),3,9,5),e.addMany(n(32,48),5,9,5),e.addMany(n(48,64),5,0,6),e.addMany(n(64,127),5,7,0),e.addMany(n(32,48),4,9,5),e.addMany(n(32,48),1,9,2),e.addMany(n(32,48),2,9,2),e.addMany(n(48,127),2,10,0),e.addMany(n(48,80),1,10,0),e.addMany(n(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(n(96,127),1,10,0),e.add(80,1,11,9),e.addMany(i,9,0,9),e.add(127,9,0,9),e.addMany(n(28,32),9,0,9),e.addMany(n(32,48),9,9,12),e.addMany(n(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(i,11,0,11),e.addMany(n(32,128),11,0,11),e.addMany(n(28,32),11,0,11),e.addMany(i,10,0,10),e.add(127,10,0,10),e.addMany(n(28,32),10,0,10),e.addMany(n(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(n(32,48),10,9,12),e.addMany(i,12,0,12),e.add(127,12,0,12),e.addMany(n(28,32),12,0,12),e.addMany(n(32,48),12,9,12),e.addMany(n(48,64),12,0,11),e.addMany(n(64,127),12,12,13),e.addMany(n(64,127),10,12,13),e.addMany(n(64,127),9,12,13),e.addMany(i,13,13,13),e.addMany(r,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add($s,0,2,0),e.add($s,8,5,8),e.add($s,6,0,6),e.add($s,11,0,11),e.add($s,13,13,13),e}(),tc=class extends N{constructor(e=ec){super(),this._transitions=e,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new Ws,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(e,t,n)=>{},this._executeHandlerFb=e=>{},this._csiHandlerFb=(e,t)=>{},this._escHandlerFb=e=>{},this._errorHandlerFb=e=>e,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register(M(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null)})),this._oscParser=this._register(new Ks),this._dcsParser=this._register(new Ys),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:`\\`},()=>!0)}_identifier(e,t=[64,126]){let n=0;if(e.prefix){if(e.prefix.length>1)throw Error(`only one byte as prefix supported`);if(n=e.prefix.charCodeAt(0),n&&60>n||n>63)throw Error(`prefix must be in range 0x3c .. 0x3f`)}if(e.intermediates){if(e.intermediates.length>2)throw Error(`only two bytes as intermediates are supported`);for(let t=0;tr||r>47)throw Error(`intermediate must be in range 0x20 .. 0x2f`);n<<=8,n|=r}}if(e.final.length!==1)throw Error(`final must be a single byte`);let r=e.final.charCodeAt(0);if(t[0]>r||r>t[1])throw Error(`final must be in range ${t[0]} .. ${t[1]}`);return n<<=8,n|=r,n}identToString(e){let t=[];for(;e;)t.push(String.fromCharCode(e&255)),e>>=8;return t.reverse().join(``)}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){let n=this._identifier(e,[48,126]);this._escHandlers[n]===void 0&&(this._escHandlers[n]=[]);let r=this._escHandlers[n];return r.push(t),{dispose:()=>{let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){this._executeHandlers[e.charCodeAt(0)]=t}clearExecuteHandler(e){this._executeHandlers[e.charCodeAt(0)]&&delete this._executeHandlers[e.charCodeAt(0)]}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){let n=this._identifier(e);this._csiHandlers[n]===void 0&&(this._csiHandlers[n]=[]);let r=this._csiHandlers[n];return r.push(t),{dispose:()=>{let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._parseStack.state!==0&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,n,r,i){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=n,this._parseStack.transition=r,this._parseStack.chunkPos=i}parse(e,t,n){let r=0,i=0,a=0,o;if(this._parseStack.state){if(this._parseStack.state===2)this._parseStack.state=0,a=this._parseStack.chunkPos+1;else{if(n===void 0||this._parseStack.state===1)throw this._parseStack.state=1,Error(`improper continuation due to previous async handler, giving up parsing`);let t=this._parseStack.handlers,i=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(n===!1&&i>-1){for(;i>=0&&(o=t[i](this._params),o!==!0);i--)if(o instanceof Promise)return this._parseStack.handlerPos=i,o}this._parseStack.handlers=[];break;case 4:if(n===!1&&i>-1){for(;i>=0&&(o=t[i](),o!==!0);i--)if(o instanceof Promise)return this._parseStack.handlerPos=i,o}this._parseStack.handlers=[];break;case 6:if(r=e[this._parseStack.chunkPos],o=this._dcsParser.unhook(r!==24&&r!==26,n),o)return o;r===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(r=e[this._parseStack.chunkPos],o=this._oscParser.end(r!==24&&r!==26,n),o)return o;r===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,a=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=this._parseStack.transition&15}}for(let n=a;n>4){case 2:for(let i=n+1;;++i)if(i>=t||(r=e[i])<32||r>126&&r<$s||++i>=t||(r=e[i])<32||r>126&&r<$s||++i>=t||(r=e[i])<32||r>126&&r<$s||++i>=t||(r=e[i])<32||r>126&&r<$s){this._printHandler(e,n,i),n=i-1;break}break;case 3:this._executeHandlers[r]?this._executeHandlers[r]():this._executeHandlerFb(r),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:n,code:r,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:let a=this._csiHandlers[this._collect<<8|r],s=a?a.length-1:-1;for(;s>=0&&(o=a[s](this._params),o!==!0);s--)if(o instanceof Promise)return this._preserveStack(3,a,s,i,n),o;s<0&&this._csiHandlerFb(this._collect<<8|r,this._params),this.precedingJoinState=0;break;case 8:do switch(r){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(r-48)}while(++n47&&r<60);n--;break;case 9:this._collect<<=8,this._collect|=r;break;case 10:let c=this._escHandlers[this._collect<<8|r],l=c?c.length-1:-1;for(;l>=0&&(o=c[l](),o!==!0);l--)if(o instanceof Promise)return this._preserveStack(4,c,l,i,n),o;l<0&&this._escHandlerFb(this._collect<<8|r),this.precedingJoinState=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|r,this._params);break;case 13:for(let i=n+1;;++i)if(i>=t||(r=e[i])===24||r===26||r===27||r>127&&r<$s){this._dcsParser.put(e,n,i),n=i-1;break}break;case 14:if(o=this._dcsParser.unhook(r!==24&&r!==26),o)return this._preserveStack(6,[],0,i,n),o;r===27&&(i|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0;break;case 4:this._oscParser.start();break;case 5:for(let i=n+1;;i++)if(i>=t||(r=e[i])<32||r>127&&r<$s){this._oscParser.put(e,n,i),n=i-1;break}break;case 6:if(o=this._oscParser.end(r!==24&&r!==26),o)return this._preserveStack(5,[],0,i,n),o;r===27&&(i|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0}this.currentState=i&15}}},nc=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,rc=/^[\da-f]+$/;function ic(e){if(!e)return;let t=e.toLowerCase();if(t.indexOf(`rgb:`)===0){t=t.slice(4);let e=nc.exec(t);if(e){let t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(t.indexOf(`#`)===0&&(t=t.slice(1),rc.exec(t)&&[3,6,9,12].includes(t.length))){let e=t.length/3,n=[0,0,0];for(let r=0;r<3;++r){let i=parseInt(t.slice(e*r,e*r+e),16);n[r]=e===1?i<<4:e===2?i:e===3?i>>4:i>>8}return n}}function ac(e,t){let n=e.toString(16),r=n.length<2?`0`+n:n;switch(t){case 4:return n[0];case 8:return r;case 12:return(r+r).slice(0,3);default:return r+r}}function oc(e,t=16){let[n,r,i]=e;return`rgb:${ac(n,t)}/${ac(r,t)}/${ac(i,t)}`}var sc={"(":0,")":1,"*":2,"+":3,"-":1,".":2},cc=131072,lc=10;function uc(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}var dc=5e3,fc=0,pc=class extends N{constructor(e,t,n,r,i,a,o,s,c=new tc){super(),this._bufferService=e,this._charsetService=t,this._coreService=n,this._logService=r,this._optionsService=i,this._oscLinkService=a,this._coreMouseService=o,this._unicodeService=s,this._parser=c,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new jt,this._utf8Decoder=new Mt,this._windowTitle=``,this._iconName=``,this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=Y.clone(),this._eraseAttrDataInternal=Y.clone(),this._onRequestBell=this._register(new F),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new F),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new F),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new F),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new F),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new F),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new F),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new F),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new F),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new F),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new F),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new F),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new F),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this._register(this._parser),this._dirtyRowTracker=new mc(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate(e=>this._activeBuffer=e.activeBuffer)),this._parser.setCsiHandlerFallback((e,t)=>{this._logService.debug(`Unknown CSI code: `,{identifier:this._parser.identToString(e),params:t.toArray()})}),this._parser.setEscHandlerFallback(e=>{this._logService.debug(`Unknown ESC code: `,{identifier:this._parser.identToString(e)})}),this._parser.setExecuteHandlerFallback(e=>{this._logService.debug(`Unknown EXECUTE code: `,{code:e})}),this._parser.setOscHandlerFallback((e,t,n)=>{this._logService.debug(`Unknown OSC code: `,{identifier:e,action:t,data:n})}),this._parser.setDcsHandlerFallback((e,t,n)=>{t===`HOOK`&&(n=n.toArray()),this._logService.debug(`Unknown DCS code: `,{identifier:this._parser.identToString(e),action:t,payload:n})}),this._parser.setPrintHandler((e,t,n)=>this.print(e,t,n)),this._parser.registerCsiHandler({final:`@`},e=>this.insertChars(e)),this._parser.registerCsiHandler({intermediates:` `,final:`@`},e=>this.scrollLeft(e)),this._parser.registerCsiHandler({final:`A`},e=>this.cursorUp(e)),this._parser.registerCsiHandler({intermediates:` `,final:`A`},e=>this.scrollRight(e)),this._parser.registerCsiHandler({final:`B`},e=>this.cursorDown(e)),this._parser.registerCsiHandler({final:`C`},e=>this.cursorForward(e)),this._parser.registerCsiHandler({final:`D`},e=>this.cursorBackward(e)),this._parser.registerCsiHandler({final:`E`},e=>this.cursorNextLine(e)),this._parser.registerCsiHandler({final:`F`},e=>this.cursorPrecedingLine(e)),this._parser.registerCsiHandler({final:`G`},e=>this.cursorCharAbsolute(e)),this._parser.registerCsiHandler({final:`H`},e=>this.cursorPosition(e)),this._parser.registerCsiHandler({final:`I`},e=>this.cursorForwardTab(e)),this._parser.registerCsiHandler({final:`J`},e=>this.eraseInDisplay(e,!1)),this._parser.registerCsiHandler({prefix:`?`,final:`J`},e=>this.eraseInDisplay(e,!0)),this._parser.registerCsiHandler({final:`K`},e=>this.eraseInLine(e,!1)),this._parser.registerCsiHandler({prefix:`?`,final:`K`},e=>this.eraseInLine(e,!0)),this._parser.registerCsiHandler({final:`L`},e=>this.insertLines(e)),this._parser.registerCsiHandler({final:`M`},e=>this.deleteLines(e)),this._parser.registerCsiHandler({final:`P`},e=>this.deleteChars(e)),this._parser.registerCsiHandler({final:`S`},e=>this.scrollUp(e)),this._parser.registerCsiHandler({final:`T`},e=>this.scrollDown(e)),this._parser.registerCsiHandler({final:`X`},e=>this.eraseChars(e)),this._parser.registerCsiHandler({final:`Z`},e=>this.cursorBackwardTab(e)),this._parser.registerCsiHandler({final:"`"},e=>this.charPosAbsolute(e)),this._parser.registerCsiHandler({final:`a`},e=>this.hPositionRelative(e)),this._parser.registerCsiHandler({final:`b`},e=>this.repeatPrecedingCharacter(e)),this._parser.registerCsiHandler({final:`c`},e=>this.sendDeviceAttributesPrimary(e)),this._parser.registerCsiHandler({prefix:`>`,final:`c`},e=>this.sendDeviceAttributesSecondary(e)),this._parser.registerCsiHandler({final:`d`},e=>this.linePosAbsolute(e)),this._parser.registerCsiHandler({final:`e`},e=>this.vPositionRelative(e)),this._parser.registerCsiHandler({final:`f`},e=>this.hVPosition(e)),this._parser.registerCsiHandler({final:`g`},e=>this.tabClear(e)),this._parser.registerCsiHandler({final:`h`},e=>this.setMode(e)),this._parser.registerCsiHandler({prefix:`?`,final:`h`},e=>this.setModePrivate(e)),this._parser.registerCsiHandler({final:`l`},e=>this.resetMode(e)),this._parser.registerCsiHandler({prefix:`?`,final:`l`},e=>this.resetModePrivate(e)),this._parser.registerCsiHandler({final:`m`},e=>this.charAttributes(e)),this._parser.registerCsiHandler({final:`n`},e=>this.deviceStatus(e)),this._parser.registerCsiHandler({prefix:`?`,final:`n`},e=>this.deviceStatusPrivate(e)),this._parser.registerCsiHandler({intermediates:`!`,final:`p`},e=>this.softReset(e)),this._parser.registerCsiHandler({intermediates:` `,final:`q`},e=>this.setCursorStyle(e)),this._parser.registerCsiHandler({final:`r`},e=>this.setScrollRegion(e)),this._parser.registerCsiHandler({final:`s`},e=>this.saveCursor(e)),this._parser.registerCsiHandler({final:`t`},e=>this.windowOptions(e)),this._parser.registerCsiHandler({final:`u`},e=>this.restoreCursor(e)),this._parser.registerCsiHandler({intermediates:`'`,final:`}`},e=>this.insertColumns(e)),this._parser.registerCsiHandler({intermediates:`'`,final:`~`},e=>this.deleteColumns(e)),this._parser.registerCsiHandler({intermediates:`"`,final:`q`},e=>this.selectProtected(e)),this._parser.registerCsiHandler({intermediates:`$`,final:`p`},e=>this.requestMode(e,!0)),this._parser.registerCsiHandler({prefix:`?`,intermediates:`$`,final:`p`},e=>this.requestMode(e,!1)),this._parser.setExecuteHandler(R.BEL,()=>this.bell()),this._parser.setExecuteHandler(R.LF,()=>this.lineFeed()),this._parser.setExecuteHandler(R.VT,()=>this.lineFeed()),this._parser.setExecuteHandler(R.FF,()=>this.lineFeed()),this._parser.setExecuteHandler(R.CR,()=>this.carriageReturn()),this._parser.setExecuteHandler(R.BS,()=>this.backspace()),this._parser.setExecuteHandler(R.HT,()=>this.tab()),this._parser.setExecuteHandler(R.SO,()=>this.shiftOut()),this._parser.setExecuteHandler(R.SI,()=>this.shiftIn()),this._parser.setExecuteHandler(ha.IND,()=>this.index()),this._parser.setExecuteHandler(ha.NEL,()=>this.nextLine()),this._parser.setExecuteHandler(ha.HTS,()=>this.tabSet()),this._parser.registerOscHandler(0,new qs(e=>(this.setTitle(e),this.setIconName(e),!0))),this._parser.registerOscHandler(1,new qs(e=>this.setIconName(e))),this._parser.registerOscHandler(2,new qs(e=>this.setTitle(e))),this._parser.registerOscHandler(4,new qs(e=>this.setOrReportIndexedColor(e))),this._parser.registerOscHandler(8,new qs(e=>this.setHyperlink(e))),this._parser.registerOscHandler(10,new qs(e=>this.setOrReportFgColor(e))),this._parser.registerOscHandler(11,new qs(e=>this.setOrReportBgColor(e))),this._parser.registerOscHandler(12,new qs(e=>this.setOrReportCursorColor(e))),this._parser.registerOscHandler(104,new qs(e=>this.restoreIndexedColor(e))),this._parser.registerOscHandler(110,new qs(e=>this.restoreFgColor(e))),this._parser.registerOscHandler(111,new qs(e=>this.restoreBgColor(e))),this._parser.registerOscHandler(112,new qs(e=>this.restoreCursorColor(e))),this._parser.registerEscHandler({final:`7`},()=>this.saveCursor()),this._parser.registerEscHandler({final:`8`},()=>this.restoreCursor()),this._parser.registerEscHandler({final:`D`},()=>this.index()),this._parser.registerEscHandler({final:`E`},()=>this.nextLine()),this._parser.registerEscHandler({final:`H`},()=>this.tabSet()),this._parser.registerEscHandler({final:`M`},()=>this.reverseIndex()),this._parser.registerEscHandler({final:`=`},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:`>`},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:`c`},()=>this.fullReset()),this._parser.registerEscHandler({final:`n`},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:`o`},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:`|`},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:`}`},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:`~`},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:`%`,final:`@`},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:`%`,final:`G`},()=>this.selectDefaultCharset());for(let e in X)this._parser.registerEscHandler({intermediates:`(`,final:e},()=>this.selectCharset(`(`+e)),this._parser.registerEscHandler({intermediates:`)`,final:e},()=>this.selectCharset(`)`+e)),this._parser.registerEscHandler({intermediates:`*`,final:e},()=>this.selectCharset(`*`+e)),this._parser.registerEscHandler({intermediates:`+`,final:e},()=>this.selectCharset(`+`+e)),this._parser.registerEscHandler({intermediates:`-`,final:e},()=>this.selectCharset(`-`+e)),this._parser.registerEscHandler({intermediates:`.`,final:e},()=>this.selectCharset(`.`+e)),this._parser.registerEscHandler({intermediates:`/`,final:e},()=>this.selectCharset(`/`+e));this._parser.registerEscHandler({intermediates:`#`,final:`8`},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(e=>(this._logService.error(`Parsing error: `,e),e)),this._parser.registerDcsHandler({intermediates:`$`,final:`q`},new Zs((e,t)=>this.requestStatusString(e,t)))}getAttrData(){return this._curAttrData}_preserveStack(e,t,n,r){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=n,this._parseStack.position=r}_logSlowResolvingAsync(e){this._logService.logLevel<=3&&Promise.race([e,new Promise((e,t)=>setTimeout(()=>t(`#SLOW_TIMEOUT`),dc))]).catch(e=>{if(e!==`#SLOW_TIMEOUT`)throw e;console.warn(`async parser handler taking longer than ${dc} ms`)})}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let n,r=this._activeBuffer.x,i=this._activeBuffer.y,a=0,o=this._parseStack.paused;if(o){if(n=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(n),n;r=this._parseStack.cursorStartX,i=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>cc&&(a=this._parseStack.position+cc)}if(this._logService.logLevel<=1&&this._logService.debug(`parsing data ${typeof e==`string`?` "${e}"`:` "${Array.prototype.map.call(e,e=>String.fromCharCode(e)).join(``)}"`}`),this._logService.logLevel===0&&this._logService.trace(`parsing data (codes)`,typeof e==`string`?e.split(``).map(e=>e.charCodeAt(0)):e),this._parseBuffer.lengthcc)for(let t=a;t0&&d.getWidth(this._activeBuffer.x-1)===2&&d.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let f=this._parser.precedingJoinState;for(let p=t;ps){if(c){let e=d,t=this._activeBuffer.x-m;for(this._activeBuffer.x=m,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),d=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),m>0&&d instanceof ss&&d.copyCellsFrom(e,t,0,m,!1);t=0;)d.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}else if(l&&(d.insertCells(this._activeBuffer.x,i-m,this._activeBuffer.getNullCell(u)),d.getWidth(s-1)===2&&d.setCellFromCodepoint(s-1,0,1,u)),d.setCellFromCodepoint(this._activeBuffer.x++,r,i,u),i>0)for(;--i;)d.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=f,this._activeBuffer.x0&&d.getWidth(this._activeBuffer.x)===0&&!d.hasContent(this._activeBuffer.x)&&d.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return e.final===`t`&&!e.prefix&&!e.intermediates?this._parser.registerCsiHandler(e,e=>!uc(e.params[0],this._optionsService.rawOptions.windowOptions)||t(e)):this._parser.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new Zs(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new qs(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){let t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){let t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){let t=e.params[0];return t===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:t===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){let t=e.params[0];return t===1&&(this._curAttrData.bg|=536870912),(t===2||t===0)&&(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,n,r=!1,i=!1){let a=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);a.replaceCells(t,n,this._activeBuffer.getNullCell(this._eraseAttrData()),i),r&&(a.isWrapped=!1)}_resetBufferLine(e,t=!1){let n=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);n&&(n.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),n.isWrapped=!1)}eraseInDisplay(e,t=!1){this._restrictCursor(this._bufferService.cols);let n;switch(e.params[0]){case 0:for(n=this._activeBuffer.y,this._dirtyRowTracker.markDirty(n),this._eraseInBufferLine(n++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);n=this._bufferService.cols&&(this._activeBuffer.lines.get(n+1).isWrapped=!1);n--;)this._resetBufferLine(n,t);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(n=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,n-1);n--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+n)?.getTrimmedLength(););for(;n>=0;n--)this._bufferService.scroll(this._eraseAttrData())}else{for(n=this._bufferService.rows,this._dirtyRowTracker.markDirty(n-1);n--;)this._resetBufferLine(n,t);this._dirtyRowTracker.markDirty(0)}break;case 3:let e=this._activeBuffer.lines.length-this._bufferService.rows;e>0&&(this._activeBuffer.lines.trimStart(e),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-e,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-e,0),this._onScroll.fire(0))}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let c=s;for(let e=1;e0||(this._is(`xterm`)||this._is(`rxvt-unicode`)||this._is(`screen`)?this._coreService.triggerDataEvent(R.ESC+`[?1;2c`):this._is(`linux`)&&this._coreService.triggerDataEvent(R.ESC+`[?6c`)),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is(`xterm`)?this._coreService.triggerDataEvent(R.ESC+`[>0;276;0c`):this._is(`rxvt-unicode`)?this._coreService.triggerDataEvent(R.ESC+`[>85;95;0c`):this._is(`linux`)?this._coreService.triggerDataEvent(e.params[0]+`c`):this._is(`screen`)&&this._coreService.triggerDataEvent(R.ESC+`[>83;40003;0c`)),!0}_is(e){return(this._optionsService.rawOptions.termName+``).indexOf(e)===0}setMode(e){for(let t=0;t(e[e.NOT_RECOGNIZED=0]=`NOT_RECOGNIZED`,e[e.SET=1]=`SET`,e[e.RESET=2]=`RESET`,e[e.PERMANENTLY_SET=3]=`PERMANENTLY_SET`,e[e.PERMANENTLY_RESET=4]=`PERMANENTLY_RESET`))(n||={});let r=this._coreService.decPrivateModes,{activeProtocol:i,activeEncoding:a}=this._coreMouseService,o=this._coreService,{buffers:s,cols:c}=this._bufferService,{active:l,alt:u}=s,d=this._optionsService.rawOptions,f=(e,n)=>(o.triggerDataEvent(`${R.ESC}[${t?``:`?`}${e};${n}$y`),!0),p=e=>e?1:2,m=e.params[0];return t?m===2?f(m,4):m===4?f(m,p(o.modes.insertMode)):m===12?f(m,3):m===20?f(m,p(d.convertEol)):f(m,0):m===1?f(m,p(r.applicationCursorKeys)):m===3?f(m,d.windowOptions.setWinLines?c===80?2:+(c===132):0):m===6?f(m,p(r.origin)):m===7?f(m,p(r.wraparound)):m===8?f(m,3):m===9?f(m,p(i===`X10`)):m===12?f(m,p(d.cursorBlink)):m===25?f(m,p(!o.isCursorHidden)):m===45?f(m,p(r.reverseWraparound)):m===66?f(m,p(r.applicationKeypad)):m===67?f(m,4):m===1e3?f(m,p(i===`VT200`)):m===1002?f(m,p(i===`DRAG`)):m===1003?f(m,p(i===`ANY`)):m===1004?f(m,p(r.sendFocus)):m===1005?f(m,4):m===1006?f(m,p(a===`SGR`)):m===1015?f(m,4):m===1016?f(m,p(a===`SGR_PIXELS`)):m===1048?f(m,1):m===47||m===1047||m===1049?f(m,p(l===u)):m===2004?f(m,p(r.bracketedPasteMode)):m===2026?f(m,p(r.synchronizedOutput)):f(m,0)}_updateAttrColor(e,t,n,r,i){return t===2?(e|=50331648,e&=-16777216,e|=Ft.fromColorRGB([n,r,i])):t===5&&(e&=-50331904,e|=33554432|n&255),e}_extractColor(e,t,n){let r=[0,0,-1,0,0,0],i=0,a=0;do{if(r[a+i]=e.params[t+a],e.hasSubParams(t+a)){let n=e.getSubParams(t+a),o=0;do r[1]===5&&(i=1),r[a+o+1+i]=n[o];while(++o=2||r[1]===2&&a+i>=5)break;r[1]&&(i=1)}while(++a+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,e===0&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=Y.fg,e.bg=Y.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(e.length===1&&e.params[0]===0)return this._processSGR0(this._curAttrData),!0;let t=e.length,n,r=this._curAttrData;for(let i=0;i=30&&n<=37?(r.fg&=-50331904,r.fg|=16777216|n-30):n>=40&&n<=47?(r.bg&=-50331904,r.bg|=16777216|n-40):n>=90&&n<=97?(r.fg&=-50331904,r.fg|=n-90|16777224):n>=100&&n<=107?(r.bg&=-50331904,r.bg|=n-100|16777224):n===0?this._processSGR0(r):n===1?r.fg|=134217728:n===3?r.bg|=67108864:n===4?(r.fg|=268435456,this._processUnderline(e.hasSubParams(i)?e.getSubParams(i)[0]:1,r)):n===5?r.fg|=536870912:n===7?r.fg|=67108864:n===8?r.fg|=1073741824:n===9?r.fg|=2147483648:n===2?r.bg|=134217728:n===21?this._processUnderline(2,r):n===22?(r.fg&=-134217729,r.bg&=-134217729):n===23?r.bg&=-67108865:n===24?(r.fg&=-268435457,this._processUnderline(0,r)):n===25?r.fg&=-536870913:n===27?r.fg&=-67108865:n===28?r.fg&=-1073741825:n===29?r.fg&=2147483647:n===39?(r.fg&=-67108864,r.fg|=Y.fg&16777215):n===49?(r.bg&=-67108864,r.bg|=Y.bg&16777215):n===38||n===48||n===58?i+=this._extractColor(e,i,r):n===53?r.bg|=1073741824:n===55?r.bg&=-1073741825:n===59?(r.extended=r.extended.clone(),r.extended.underlineColor=-1,r.updateExtended()):n===100?(r.fg&=-67108864,r.fg|=Y.fg&16777215,r.bg&=-67108864,r.bg|=Y.bg&16777215):this._logService.debug(`Unknown SGR attribute: %d.`,n);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent(`${R.ESC}[0n`);break;case 6:let e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${R.ESC}[${e};${t}R`)}return!0}deviceStatusPrivate(e){if(e.params[0]===6){let e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${R.ESC}[?${e};${t}R`)}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=Y.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){let t=e.length===0?1:e.params[0];if(t===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(t){case 1:case 2:this._coreService.decPrivateModes.cursorStyle=`block`;break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle=`underline`;break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle=`bar`}let e=t%2==1;this._coreService.decPrivateModes.cursorBlink=e}return!0}setScrollRegion(e){let t=e.params[0]||1,n;return(e.length<2||(n=e.params[1])>this._bufferService.rows||n===0)&&(n=this._bufferService.rows),n>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=n-1,this._setCursor(0,0)),!0}windowOptions(e){if(!uc(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;let t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:t!==2&&this._onRequestWindowsOptionsReport.fire(0);break;case 16:this._onRequestWindowsOptionsReport.fire(1);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${R.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:(t===0||t===2)&&(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>lc&&this._windowTitleStack.shift()),(t===0||t===1)&&(this._iconNameStack.push(this._iconName),this._iconNameStack.length>lc&&this._iconNameStack.shift());break;case 23:(t===0||t===2)&&this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),(t===0||t===1)&&this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0}restoreCursor(e){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0}setTitle(e){return this._windowTitle=e,this._onTitleChange.fire(e),!0}setIconName(e){return this._iconName=e,!0}setOrReportIndexedColor(e){let t=[],n=e.split(`;`);for(;n.length>1;){let e=n.shift(),r=n.shift();if(/^\d+$/.exec(e)){let n=parseInt(e);if(hc(n)){if(r===`?`)t.push({type:0,index:n});else{let e=ic(r);e&&t.push({type:1,index:n,color:e})}}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){let t=e.indexOf(`;`);if(t===-1)return!0;let n=e.slice(0,t).trim(),r=e.slice(t+1);return r?this._createHyperlink(n,r):!n.trim()&&this._finishHyperlink()}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();let n=e.split(`:`),r,i=n.findIndex(e=>e.startsWith(`id=`));return i!==-1&&(r=n[i].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:r,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){let n=e.split(`;`);for(let e=0;e=this._specialColors.length);++e,++t)if(n[e]===`?`)this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{let r=ic(n[e]);r&&this._onColor.fire([{type:1,index:this._specialColors[t],color:r}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;let t=[],n=e.split(`;`);for(let e=0;e=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){let e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=Y.clone(),this._eraseAttrDataInternal=Y.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=this._curAttrData.bg&67108863,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){let e=new Lt;e.content=4194373,e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`${R.ESC}${e}${R.ESC}\\`),!0),r=this._bufferService.buffer,i=this._optionsService.rawOptions;return n(e===`"q`?`P1$r${+!!this._curAttrData.isProtected()}"q`:e===`"p`?`P1$r61;1"p`:e===`r`?`P1$r${r.scrollTop+1};${r.scrollBottom+1}r`:e===`m`?`P1$r0m`:e===` q`?`P1$r${{block:2,underline:4,bar:6}[i.cursorStyle]-+!!i.cursorBlink} q`:`P0$r`)}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}},mc=class{constructor(e){this._bufferService=e,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(e){ethis.end&&(this.end=e)}markRangeDirty(e,t){e>t&&(fc=e,e=t,t=fc),ethis.end&&(this.end=t)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};mc=k([A(0,Ut)],mc);function hc(e){return 0<=e&&e<256}var gc=5e7,_c=12,vc=50,yc=class extends N{constructor(e){super(),this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._onWriteParsed=this._register(new F),this.onWriteParsed=this._onWriteParsed.event}handleUserInput(){this._didUserInput=!0}writeSync(e,t){if(t!==void 0&&this._syncCalls>t){this._syncCalls=0;return}if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;this._isSyncWriting=!0;let n;for(;n=this._writeBuffer.shift();){this._action(n);let e=this._callbacks.shift();e&&e()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(this._pendingData>gc)throw Error(`write data discarded, use flow control to avoid losing data`);if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput){this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),this._innerWrite();return}setTimeout(()=>this._innerWrite())}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}_innerWrite(e=0,t=!0){let n=e||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){let e=this._writeBuffer[this._bufferOffset],r=this._action(e,t);if(r){r.catch(e=>(queueMicrotask(()=>{throw e}),Promise.resolve(!1))).then(e=>performance.now()-n>=_c?setTimeout(()=>this._innerWrite(0,e)):this._innerWrite(n,e));return}let i=this._callbacks[this._bufferOffset];if(i&&i(),this._bufferOffset++,this._pendingData-=e.length,performance.now()-n>=_c)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>vc&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout(()=>this._innerWrite())):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}},bc=class{constructor(e){this._bufferService=e,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(e){let t=this._bufferService.buffer;if(e.id===void 0){let n=t.addMarker(t.ybase+t.y),r={data:e,id:this._nextId++,lines:[n]};return n.onDispose(()=>this._removeMarkerFromLink(r,n)),this._dataByLinkId.set(r.id,r),r.id}let n=e,r=this._getEntryIdKey(n),i=this._entriesWithId.get(r);if(i)return this.addLineToLink(i.id,t.ybase+t.y),i.id;let a=t.addMarker(t.ybase+t.y),o={id:this._nextId++,key:this._getEntryIdKey(n),data:n,lines:[a]};return a.onDispose(()=>this._removeMarkerFromLink(o,a)),this._entriesWithId.set(o.key,o),this._dataByLinkId.set(o.id,o),o.id}addLineToLink(e,t){let n=this._dataByLinkId.get(e);if(n&&n.lines.every(e=>e.line!==t)){let e=this._bufferService.buffer.addMarker(t);n.lines.push(e),e.onDispose(()=>this._removeMarkerFromLink(n,e))}}getLinkData(e){return this._dataByLinkId.get(e)?.data}_getEntryIdKey(e){return`${e.id};;${e.uri}`}_removeMarkerFromLink(e,t){let n=e.lines.indexOf(t);n!==-1&&(e.lines.splice(n,1),e.lines.length===0&&(e.data.id!==void 0&&this._entriesWithId.delete(e.key),this._dataByLinkId.delete(e.id)))}};bc=k([A(0,Ut)],bc);var xc=!1,Sc=class extends N{constructor(e){super(),this._windowsWrappingHeuristics=this._register(new Mn),this._onBinary=this._register(new F),this.onBinary=this._onBinary.event,this._onData=this._register(new F),this.onData=this._onData.event,this._onLineFeed=this._register(new F),this.onLineFeed=this._onLineFeed.event,this._onResize=this._register(new F),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new F),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new F),this._instantiationService=new $o,this.optionsService=this._register(new ws(e)),this._instantiationService.setService(Yt,this.optionsService),this._bufferService=this._register(this._instantiationService.createInstance(xs)),this._instantiationService.setService(Ut,this._bufferService),this._logService=this._register(this._instantiationService.createInstance(ns)),this._instantiationService.setService(Jt,this._logService),this.coreService=this._register(this._instantiationService.createInstance(ks)),this._instantiationService.setService(Gt,this.coreService),this.coreMouseService=this._register(this._instantiationService.createInstance(Ps)),this._instantiationService.setService(Wt,this.coreMouseService),this.unicodeService=this._register(this._instantiationService.createInstance(zs)),this._instantiationService.setService(Zt,this.unicodeService),this._charsetService=this._instantiationService.createInstance(Bs),this._instantiationService.setService(Kt,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(bc),this._instantiationService.setService(Xt,this._oscLinkService),this._inputHandler=this._register(new pc(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this._register(Rn.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(this._inputHandler),this._register(Rn.forward(this._bufferService.onResize,this._onResize)),this._register(Rn.forward(this.coreService.onData,this._onData)),this._register(Rn.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom(!0))),this._register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this._register(this.optionsService.onMultipleOptionChange([`windowsMode`,`windowsPty`],()=>this._handleWindowsPtyOptionChange())),this._register(this._bufferService.onScroll(()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this._register(new yc((e,t)=>this._inputHandler.parse(e,t))),this._register(Rn.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new F),this._onScroll.event(e=>{this._onScrollApi?.fire(e.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(let t in e)this.optionsService.options[t]=e[t]}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=3&&!xc&&(this._logService.warn(`writeSync is unreliable and will be removed soon.`),xc=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,ys),t=Math.max(t,bs),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t){this._bufferService.scrollLines(e,t)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let e=!1,t=this.optionsService.rawOptions.windowsPty;t&&t.buildNumber!==void 0&&t.buildNumber!==void 0?e=t.backend===`conpty`&&t.buildNumber<21376:this.optionsService.rawOptions.windowsMode&&(e=!0),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let e=[];e.push(this.onLineFeed(Vs.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:`H`},()=>(Vs(this._bufferService),!1))),this._windowsWrappingHeuristics.value=M(()=>{for(let t of e)t.dispose()})}}},Cc={48:[`0`,`)`],49:[`1`,`!`],50:[`2`,`@`],51:[`3`,`#`],52:[`4`,`$`],53:[`5`,`%`],54:[`6`,`^`],55:[`7`,`&`],56:[`8`,`*`],57:[`9`,`(`],186:[`;`,`:`],187:[`=`,`+`],188:[`,`,`<`],189:[`-`,`_`],190:[`.`,`>`],191:[`/`,`?`],192:["`",`~`],219:[`[`,`{`],220:[`\\`,`|`],221:[`]`,`}`],222:[`'`,`"`]};function wc(e,t,n,r){let i={type:0,cancel:!1,key:void 0},a=+!!e.shiftKey|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:e.key===`UIKeyInputUpArrow`?i.key=t?R.ESC+`OA`:R.ESC+`[A`:e.key===`UIKeyInputLeftArrow`?i.key=t?R.ESC+`OD`:R.ESC+`[D`:e.key===`UIKeyInputRightArrow`?i.key=t?R.ESC+`OC`:R.ESC+`[C`:e.key===`UIKeyInputDownArrow`&&(i.key=t?R.ESC+`OB`:R.ESC+`[B`);break;case 8:i.key=e.ctrlKey?`\b`:R.DEL,e.altKey&&(i.key=R.ESC+i.key);break;case 9:if(e.shiftKey){i.key=R.ESC+`[Z`;break}i.key=R.HT,i.cancel=!0;break;case 13:i.key=e.altKey?R.ESC+R.CR:R.CR,i.cancel=!0;break;case 27:i.key=R.ESC,e.altKey&&(i.key=R.ESC+R.ESC),i.cancel=!0;break;case 37:if(e.metaKey)break;i.key=a?R.ESC+`[1;`+(a+1)+`D`:t?R.ESC+`OD`:R.ESC+`[D`;break;case 39:if(e.metaKey)break;i.key=a?R.ESC+`[1;`+(a+1)+`C`:t?R.ESC+`OC`:R.ESC+`[C`;break;case 38:if(e.metaKey)break;i.key=a?R.ESC+`[1;`+(a+1)+`A`:t?R.ESC+`OA`:R.ESC+`[A`;break;case 40:if(e.metaKey)break;i.key=a?R.ESC+`[1;`+(a+1)+`B`:t?R.ESC+`OB`:R.ESC+`[B`;break;case 45:!e.shiftKey&&!e.ctrlKey&&(i.key=R.ESC+`[2~`);break;case 46:i.key=a?R.ESC+`[3;`+(a+1)+`~`:R.ESC+`[3~`;break;case 36:i.key=a?R.ESC+`[1;`+(a+1)+`H`:t?R.ESC+`OH`:R.ESC+`[H`;break;case 35:i.key=a?R.ESC+`[1;`+(a+1)+`F`:t?R.ESC+`OF`:R.ESC+`[F`;break;case 33:e.shiftKey?i.type=2:i.key=e.ctrlKey?R.ESC+`[5;`+(a+1)+`~`:R.ESC+`[5~`;break;case 34:e.shiftKey?i.type=3:i.key=e.ctrlKey?R.ESC+`[6;`+(a+1)+`~`:R.ESC+`[6~`;break;case 112:i.key=a?R.ESC+`[1;`+(a+1)+`P`:R.ESC+`OP`;break;case 113:i.key=a?R.ESC+`[1;`+(a+1)+`Q`:R.ESC+`OQ`;break;case 114:i.key=a?R.ESC+`[1;`+(a+1)+`R`:R.ESC+`OR`;break;case 115:i.key=a?R.ESC+`[1;`+(a+1)+`S`:R.ESC+`OS`;break;case 116:i.key=a?R.ESC+`[15;`+(a+1)+`~`:R.ESC+`[15~`;break;case 117:i.key=a?R.ESC+`[17;`+(a+1)+`~`:R.ESC+`[17~`;break;case 118:i.key=a?R.ESC+`[18;`+(a+1)+`~`:R.ESC+`[18~`;break;case 119:i.key=a?R.ESC+`[19;`+(a+1)+`~`:R.ESC+`[19~`;break;case 120:i.key=a?R.ESC+`[20;`+(a+1)+`~`:R.ESC+`[20~`;break;case 121:i.key=a?R.ESC+`[21;`+(a+1)+`~`:R.ESC+`[21~`;break;case 122:i.key=a?R.ESC+`[23;`+(a+1)+`~`:R.ESC+`[23~`;break;case 123:i.key=a?R.ESC+`[24;`+(a+1)+`~`:R.ESC+`[24~`;break;default:if(e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey)e.keyCode>=65&&e.keyCode<=90?i.key=String.fromCharCode(e.keyCode-64):e.keyCode===32?i.key=R.NUL:e.keyCode>=51&&e.keyCode<=55?i.key=String.fromCharCode(e.keyCode-51+27):e.keyCode===56?i.key=R.DEL:e.keyCode===219?i.key=R.ESC:e.keyCode===220?i.key=R.FS:e.keyCode===221&&(i.key=R.GS);else if((!n||r)&&e.altKey&&!e.metaKey){let t=Cc[e.keyCode]?.[+!!e.shiftKey];if(t)i.key=R.ESC+t;else if(e.keyCode>=65&&e.keyCode<=90){let t=e.ctrlKey?e.keyCode-64:e.keyCode+32,n=String.fromCharCode(t);e.shiftKey&&(n=n.toUpperCase()),i.key=R.ESC+n}else if(e.keyCode===32)i.key=R.ESC+(e.ctrlKey?R.NUL:` `);else if(e.key===`Dead`&&e.code.startsWith(`Key`)){let t=e.code.slice(3,4);e.shiftKey||(t=t.toLowerCase()),i.key=R.ESC+t,i.cancel=!0}}else n&&!e.altKey&&!e.ctrlKey&&!e.shiftKey&&e.metaKey?e.keyCode===65&&(i.type=1):e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&e.key.length===1?i.key=e.key:e.key&&e.ctrlKey&&(e.key===`_`&&(i.key=R.US),e.key===`@`&&(i.key=R.NUL))}return i}var Q=0,Tc=class{constructor(e){this._getKey=e,this._array=[],this._insertedValues=[],this._flushInsertedTask=new vo,this._isFlushingInserted=!1,this._deletedIndices=[],this._flushDeletedTask=new vo,this._isFlushingDeleted=!1}clear(){this._array.length=0,this._insertedValues.length=0,this._flushInsertedTask.clear(),this._isFlushingInserted=!1,this._deletedIndices.length=0,this._flushDeletedTask.clear(),this._isFlushingDeleted=!1}insert(e){this._flushCleanupDeleted(),this._insertedValues.length===0&&this._flushInsertedTask.enqueue(()=>this._flushInserted()),this._insertedValues.push(e)}_flushInserted(){let e=this._insertedValues.sort((e,t)=>this._getKey(e)-this._getKey(t)),t=0,n=0,r=Array(this._array.length+this._insertedValues.length);for(let i=0;i=this._array.length||this._getKey(e[t])<=this._getKey(this._array[n])?(r[i]=e[t],t++):r[i]=this._array[n++];this._array=r,this._insertedValues.length=0}_flushCleanupInserted(){!this._isFlushingInserted&&this._insertedValues.length>0&&this._flushInsertedTask.flush()}delete(e){if(this._flushCleanupInserted(),this._array.length===0)return!1;let t=this._getKey(e);if(t===void 0||(Q=this._search(t),Q===-1)||this._getKey(this._array[Q])!==t)return!1;do if(this._array[Q]===e)return this._deletedIndices.length===0&&this._flushDeletedTask.enqueue(()=>this._flushDeleted()),this._deletedIndices.push(Q),!0;while(++Qe-t),t=0,n=Array(this._array.length-e.length),r=0;for(let i=0;i0&&this._flushDeletedTask.flush()}*getKeyIterator(e){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),this._array.length!==0&&(Q=this._search(e),!(Q<0||Q>=this._array.length)&&this._getKey(this._array[Q])===e))do yield this._array[Q];while(++Q=this._array.length)&&this._getKey(this._array[Q])===e))do t(this._array[Q]);while(++Q=t;){let r=t+n>>1,i=this._getKey(this._array[r]);if(i>e)n=r-1;else if(i0&&this._getKey(this._array[r-1])===e;)r--;return r}}return t}},Ec=0,Dc=0,Oc=class extends N{constructor(){super(),this._decorations=new Tc(e=>e?.marker.line),this._onDecorationRegistered=this._register(new F),this.onDecorationRegistered=this._onDecorationRegistered.event,this._onDecorationRemoved=this._register(new F),this.onDecorationRemoved=this._onDecorationRemoved.event,this._register(M(()=>this.reset()))}get decorations(){return this._decorations.values()}registerDecoration(e){if(e.marker.isDisposed)return;let t=new kc(e);if(t){let e=t.marker.onDispose(()=>t.dispose()),n=t.onDispose(()=>{n.dispose(),t&&(this._decorations.delete(t)&&this._onDecorationRemoved.fire(t),e.dispose())});this._decorations.insert(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(let e of this._decorations.values())e.dispose();this._decorations.clear()}*getDecorationsAtCell(e,t,n){let r=0,i=0;for(let a of this._decorations.getKeyIterator(t))r=a.options.x??0,i=r+(a.options.width??1),e>=r&&e{Ec=t.options.x??0,Dc=Ec+(t.options.width??1),e>=Ec&&e=this._debounceThresholdMS)this._lastRefreshMs=r,this._innerRefresh();else if(!this._additionalRefreshRequested){let e=r-this._lastRefreshMs,t=this._debounceThresholdMS-e;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=performance.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},t)}}_innerRefresh(){if(this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return;let e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}},Mc=20,Nc=class extends N{constructor(e,t,n,r){super(),this._terminal=e,this._coreBrowserService=n,this._renderService=r,this._rowColumns=new WeakMap,this._liveRegionLineCount=0,this._charsToConsume=[],this._charsToAnnounce=``;let i=this._coreBrowserService.mainDocument;this._accessibilityContainer=i.createElement(`div`),this._accessibilityContainer.classList.add(`xterm-accessibility`),this._rowContainer=i.createElement(`div`),this._rowContainer.setAttribute(`role`,`list`),this._rowContainer.classList.add(`xterm-accessibility-tree`),this._rowElements=[];for(let e=0;ethis._handleBoundaryFocus(e,0),this._bottomBoundaryFocusListener=e=>this._handleBoundaryFocus(e,1),this._rowElements[0].addEventListener(`focus`,this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=i.createElement(`div`),this._liveRegion.classList.add(`live-region`),this._liveRegion.setAttribute(`aria-live`,`assertive`),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this._register(new jc(this._renderRows.bind(this))),!this._terminal.element)throw Error(`Cannot enable accessibility before Terminal.open`);this._terminal.element.insertAdjacentElement(`afterbegin`,this._accessibilityContainer),this._register(this._terminal.onResize(e=>this._handleResize(e.rows))),this._register(this._terminal.onRender(e=>this._refreshRows(e.start,e.end))),this._register(this._terminal.onScroll(()=>this._refreshRows())),this._register(this._terminal.onA11yChar(e=>this._handleChar(e))),this._register(this._terminal.onLineFeed(()=>this._handleChar(` +`))),this._register(this._terminal.onA11yTab(e=>this._handleTab(e))),this._register(this._terminal.onKey(e=>this._handleKey(e.key))),this._register(this._terminal.onBlur(()=>this._clearLiveRegion())),this._register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this._register(I(i,`selectionchange`,()=>this._handleSelectionChange())),this._register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRowsDimensions(),this._refreshRows(),this._register(M(()=>{this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,e===` +`&&(this._liveRegionLineCount++,this._liveRegionLineCount===Mc+1&&(this._liveRegion.textContent+=xt.get())))}_clearLiveRegion(){this._liveRegion.textContent=``,this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){let n=this._terminal.buffer,r=n.lines.length.toString();for(let i=e;i<=t;i++){let e=n.lines.get(n.ydisp+i),t=[],a=e?.translateToString(!0,void 0,void 0,t)||``,o=(n.ydisp+i+1).toString(),s=this._rowElements[i];s&&(a.length===0?(s.textContent=`\xA0`,this._rowColumns.set(s,[0,1])):(s.textContent=a,this._rowColumns.set(s,t)),s.setAttribute(`aria-posinset`,o),s.setAttribute(`aria-setsize`,r),this._alignRowWidth(s))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce=``)}_handleBoundaryFocus(e,t){let n=e.target,r=this._rowElements[t===0?1:this._rowElements.length-2];if(n.getAttribute(`aria-posinset`)===(t===0?`1`:`${this._terminal.buffer.lines.length}`)||e.relatedTarget!==r)return;let i,a;if(t===0?(i=n,a=this._rowElements.pop(),this._rowContainer.removeChild(a)):(i=this._rowElements.shift(),a=n,this._rowContainer.removeChild(i)),i.removeEventListener(`focus`,this._topBoundaryFocusListener),a.removeEventListener(`focus`,this._bottomBoundaryFocusListener),t===0){let e=this._createAccessibilityTreeNode();this._rowElements.unshift(e),this._rowContainer.insertAdjacentElement(`afterbegin`,e)}else{let e=this._createAccessibilityTreeNode();this._rowElements.push(e),this._rowContainer.appendChild(e)}this._rowElements[0].addEventListener(`focus`,this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._terminal.scrollLines(t===0?-1:1),this._rowElements[t===0?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(this._rowElements.length===0)return;let e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed){this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection();return}if(!e.anchorNode||!e.focusNode){console.error(`anchorNode and/or focusNode are null`);return}let t={node:e.anchorNode,offset:e.anchorOffset},n={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(n.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===n.node&&t.offset>n.offset)&&([t,n]=[n,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;let r=this._rowElements.slice(-1)[0];if(n.node.compareDocumentPosition(r)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(n={node:r,offset:r.textContent?.length??0}),!this._rowContainer.contains(n.node))return;let i=({node:e,offset:t})=>{let n=e instanceof Text?e.parentNode:e,r=parseInt(n?.getAttribute(`aria-posinset`),10)-1;if(isNaN(r))return console.warn(`row is invalid. Race condition?`),null;let i=this._rowColumns.get(n);if(!i)return console.warn(`columns is null. Race condition?`),null;let a=t=this._terminal.cols&&(++r,a=0),{row:r,column:a}},a=i(t),o=i(n);if(a&&o){if(a.row>o.row||a.row===o.row&&a.column>=o.column)throw Error(`invalid range`);this._terminal.select(a.column,a.row,(o.row-a.row)*this._terminal.cols-a.column+o.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener(`focus`,this._bottomBoundaryFocusListener);for(let e=this._rowContainer.children.length;ee;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){let e=this._coreBrowserService.mainDocument.createElement(`div`);return e.setAttribute(`role`,`listitem`),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e{On(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register(I(this._element,`mouseleave`,()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register(I(this._element,`mousemove`,this._handleMouseMove.bind(this))),this._register(I(this._element,`mousedown`,this._handleMouseDown.bind(this))),this._register(I(this._element,`mouseup`,this._handleMouseUp.bind(this)))}get currentLink(){return this._currentLink}_handleMouseMove(e){this._lastMouseEvent=e;let t=this._positionFromMouseEvent(e,this._element,this._mouseService);if(!t)return;this._isMouseOut=!1;let n=e.composedPath();for(let e=0;e{e?.forEach(e=>{e.link.dispose&&e.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let n=!1;for(let[r,i]of this._linkProviderService.linkProviders.entries())t?this._activeProviderReplies?.get(r)&&(n=this._checkLinkProviderResult(r,e,n)):i.provideLinks(e.y,t=>{if(this._isMouseOut)return;let i=t?.map(e=>({link:e}));this._activeProviderReplies?.set(r,i),n=this._checkLinkProviderResult(r,e,n),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){let n=new Set;for(let r=0;re?this._bufferService.cols:r.link.range.end.x;for(let e=a;e<=o;e++){if(n.has(e)){i.splice(t--,1);break}n.add(e)}}}}_checkLinkProviderResult(e,t,n){if(!this._activeProviderReplies)return n;let r=this._activeProviderReplies.get(e),i=!1;for(let t=0;tthis._linkAtPosition(e.link,t));e&&(n=!0,this._handleNewLink(e))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!n)for(let e=0;ethis._linkAtPosition(e.link,t));if(r){n=!0,this._handleNewLink(r);break}}return n}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;let t=this._positionFromMouseEvent(e,this._element,this._mouseService);t&&this._mouseDownLink&&Fc(this._mouseDownLink.link,this._currentLink.link)&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){!this._currentLink||!this._lastMouseEvent||(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,On(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;let t=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:e.link.decorations===void 0||e.link.decorations.underline,pointerCursor:e.link.decorations===void 0||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:e=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==e&&(this._currentLink.state.decorations.pointerCursor=e,this._currentLink.state.isHovered&&this._element.classList.toggle(`xterm-cursor-pointer`,e))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:t=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,t))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e=>{if(!this._currentLink)return;let t=e.start===0?0:e.start+1+this._bufferService.buffer.ydisp,n=this._bufferService.buffer.ydisp+1+e.end;if(this._currentLink.link.range.start.y>=t&&this._currentLink.link.range.end.y<=n&&(this._clearCurrentLink(t,n),this._lastMouseEvent)){let e=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);e&&this._askForLink(e,!1)}})))}_linkHover(e,t,n){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add(`xterm-cursor-pointer`)),t.hover&&t.hover(n,t.text)}_fireUnderlineEvent(e,t){let n=e.range,r=this._bufferService.buffer.ydisp,i=this._createLinkUnderlineEvent(n.start.x-1,n.start.y-r-1,n.end.x,n.end.y-r-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(i)}_linkLeave(e,t,n){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove(`xterm-cursor-pointer`)),t.leave&&t.leave(n,t.text)}_linkAtPosition(e,t){let n=e.range.start.y*this._bufferService.cols+e.range.start.x,r=e.range.end.y*this._bufferService.cols+e.range.end.x,i=t.y*this._bufferService.cols+t.x;return n<=i&&i<=r}_positionFromMouseEvent(e,t,n){let r=n.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(r)return{x:r[0],y:r[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,n,r,i){return{x1:e,y1:t,x2:n,y2:r,cols:this._bufferService.cols,fg:i}}};Pc=k([A(1,rn),A(2,an),A(3,Ut),A(4,ln)],Pc);function Fc(e,t){return e.text===t.text&&e.range.start.x===t.range.start.x&&e.range.start.y===t.range.start.y&&e.range.end.x===t.range.end.x&&e.range.end.y===t.range.end.y}var Ic=class extends Sc{constructor(e={}){super(e),this._linkifier=this._register(new Mn),this.browser=eo,this._keyDownHandled=!1,this._keyDownSeen=!1,this._keyPressHandled=!1,this._unprocessedDeadKey=!1,this._accessibilityManager=this._register(new Mn),this._onCursorMove=this._register(new F),this.onCursorMove=this._onCursorMove.event,this._onKey=this._register(new F),this.onKey=this._onKey.event,this._onRender=this._register(new F),this.onRender=this._onRender.event,this._onSelectionChange=this._register(new F),this.onSelectionChange=this._onSelectionChange.event,this._onTitleChange=this._register(new F),this.onTitleChange=this._onTitleChange.event,this._onBell=this._register(new F),this.onBell=this._onBell.event,this._onFocus=this._register(new F),this._onBlur=this._register(new F),this._onA11yCharEmitter=this._register(new F),this._onA11yTabEmitter=this._register(new F),this._onWillOpen=this._register(new F),this._setup(),this._decorationService=this._instantiationService.createInstance(Oc),this._instantiationService.setService(Qt,this._decorationService),this._linkProviderService=this._instantiationService.createInstance(Ya),this._instantiationService.setService(ln,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance($t)),this._register(this._inputHandler.onRequestBell(()=>this._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(e=>this.refresh(e?.start??0,e?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(e=>this._reportWindowsOptions(e))),this._register(this._inputHandler.onColor(e=>this._handleColorEvent(e))),this._register(Rn.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(Rn.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(Rn.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(Rn.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(e=>this._afterResize(e.cols,e.rows))),this._register(M(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}get linkifier(){return this._linkifier.value}get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}_handleColorEvent(e){if(this._themeService)for(let t of e){let e,n=``;switch(t.index){case 256:e=`foreground`,n=`10`;break;case 257:e=`background`,n=`11`;break;case 258:e=`cursor`,n=`12`;break;default:e=`ansi`,n=`4;`+t.index}switch(t.type){case 0:let r=W.toColorRGB(e===`ansi`?this._themeService.colors.ansi[t.index]:this._themeService.colors[e]);this.coreService.triggerDataEvent(`${R.ESC}]${n};${oc(r)}${ga.ST}`);break;case 1:if(e===`ansi`)this._themeService.modifyColors(e=>e.ansi[t.index]=U.toColor(...t.color));else{let n=e;this._themeService.modifyColors(e=>e[n]=U.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index)}}}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(e){e?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(Nc,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(R.ESC+`[I`),this.element.classList.add(`focus`),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this.textarea.value=``,this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(R.ESC+`[O`),this.element.classList.remove(`focus`),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;let e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(!t)return;let n=Math.min(this.buffer.x,this.cols-1),r=this._renderService.dimensions.css.cell.height,i=t.getWidth(n),a=this._renderService.dimensions.css.cell.width*i,o=this.buffer.y*this._renderService.dimensions.css.cell.height,s=n*this._renderService.dimensions.css.cell.width;this.textarea.style.left=s+`px`,this.textarea.style.top=o+`px`,this.textarea.style.width=a+`px`,this.textarea.style.height=r+`px`,this.textarea.style.lineHeight=r+`px`,this.textarea.style.zIndex=`-5`}_initGlobal(){this._bindKeys(),this._register(I(this.element,`copy`,e=>{this.hasSelection()&&wt(e,this._selectionService)}));let e=e=>Tt(e,this.textarea,this.coreService,this.optionsService);this._register(I(this.textarea,`paste`,e)),this._register(I(this.element,`paste`,e)),io?this._register(I(this.element,`mousedown`,e=>{e.button===2&&Ot(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register(I(this.element,`contextmenu`,e=>{Ot(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),po&&this._register(I(this.element,`auxclick`,e=>{e.button===1&&Dt(e,this.textarea,this.screenElement)}))}_bindKeys(){this._register(I(this.textarea,`keyup`,e=>this._keyUp(e),!0)),this._register(I(this.textarea,`keydown`,e=>this._keyDown(e),!0)),this._register(I(this.textarea,`keypress`,e=>this._keyPress(e),!0)),this._register(I(this.textarea,`compositionstart`,()=>this._compositionHelper.compositionstart())),this._register(I(this.textarea,`compositionupdate`,e=>this._compositionHelper.compositionupdate(e))),this._register(I(this.textarea,`compositionend`,()=>this._compositionHelper.compositionend())),this._register(I(this.textarea,`input`,e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw Error(`Terminal requires a parent element.`);if(e.isConnected||this._logService.debug(`Terminal.open was called on an element that was not attached to the DOM`),this.element?.ownerDocument.defaultView&&this._coreBrowserService){this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView);return}this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement(`div`),this.element.dir=`ltr`,this.element.classList.add(`terminal`),this.element.classList.add(`xterm`),e.appendChild(this.element);let t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement(`div`),this._viewportElement.classList.add(`xterm-viewport`),t.appendChild(this._viewportElement),this.screenElement=this._document.createElement(`div`),this.screenElement.classList.add(`xterm-screen`),this._register(I(this.screenElement,`mousemove`,e=>this.updateCursorStyle(e))),this._helperContainer=this._document.createElement(`div`),this._helperContainer.classList.add(`xterm-helpers`),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);let n=this.textarea=this._document.createElement(`textarea`);this.textarea.classList.add(`xterm-helper-textarea`),this.textarea.setAttribute(`aria-label`,yt.get()),mo||this.textarea.setAttribute(`aria-multiline`,`false`),this.textarea.setAttribute(`autocorrect`,`off`),this.textarea.setAttribute(`autocapitalize`,`off`),this.textarea.setAttribute(`spellcheck`,`false`),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange(`disableStdin`,()=>n.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(qa,this.textarea,e.ownerDocument.defaultView??window,this._document??typeof window<`u`?window.document:null)),this._instantiationService.setService(nn,this._coreBrowserService),this._register(I(this.textarea,`focus`,e=>this._handleTextAreaFocus(e))),this._register(I(this.textarea,`blur`,()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(Ua,this._document,this._helperContainer),this._instantiationService.setService(tn,this._charSizeService),this._themeService=this._instantiationService.createInstance(Zo),this._instantiationService.setService(cn,this._themeService),this._characterJoinerService=this._instantiationService.createInstance(wa),this._instantiationService.setService(sn,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(bo,this.rows,this.screenElement)),this._instantiationService.setService(an,this._renderService),this._register(this._renderService.onRenderedViewportChange(e=>this._onRender.fire(e))),this.onResize(e=>this._renderService.resize(e.cols,e.rows)),this._compositionView=this._document.createElement(`div`),this._compositionView.classList.add(`composition-view`),this._compositionHelper=this._instantiationService.createInstance(_a,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseService=this._instantiationService.createInstance(Qa),this._instantiationService.setService(rn,this._mouseService);let r=this._linkifier.value=this._register(this._instantiationService.createInstance(Pc,this.screenElement));this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch{}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>this._renderService.handleResize(this.cols,this.rows))),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(ca,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(e=>{super.scrollLines(e,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(Ho,this.element,this.screenElement,r)),this._instantiationService.setService(on,this._selectionService),this._register(this._selectionService.onRequestScrollLines(e=>this.scrollLines(e.amount,e.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(e=>this._renderService.handleSelectionChanged(e.start,e.end,e.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(e=>{this.textarea.value=e,this.textarea.focus(),this.textarea.select()})),this._register(Rn.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(la,this.screenElement)),this._register(I(this.element,`mousedown`,e=>this._selectionService.handleMouseDown(e))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add(`enable-mouse-events`)):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(Nc,this)),this._register(this.optionsService.onSpecificOptionChange(`screenReaderMode`,e=>this._handleScreenReaderModeOptionChange(e))),this.options.overviewRuler.width&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(ma,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange(`overviewRuler`,e=>{!this._overviewRulerRenderer&&e&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(ma,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()}_createRenderer(){return this._instantiationService.createInstance(Ha,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}bindMouse(){let e=this,t=this.element;function n(t){let n=e._mouseService.getMouseReportCoords(t,e.screenElement);if(!n)return!1;let r,i;switch(t.overrideType||t.type){case`mousemove`:i=32,t.buttons===void 0?(r=3,t.button!==void 0&&(r=t.button<3?t.button:3)):r=t.buttons&1?0:t.buttons&4?1:t.buttons&2?2:3;break;case`mouseup`:i=0,r=t.button<3?t.button:3;break;case`mousedown`:i=1,r=t.button<3?t.button:3;break;case`wheel`:if(e._customWheelEventHandler&&e._customWheelEventHandler(t)===!1)return!1;let n=t.deltaY;if(n===0||e.coreMouseService.consumeWheelEvent(t,e._renderService?.dimensions?.device?.cell?.height,e._coreBrowserService?.dpr)===0)return!1;i=n<0?0:1,r=4;break;default:return!1}return i===void 0||r===void 0||r>4?!1:e.coreMouseService.triggerMouseEvent({col:n.col,row:n.row,x:n.x,y:n.y,button:r,action:i,ctrl:t.ctrlKey,alt:t.altKey,shift:t.shiftKey})}let r={mouseup:null,wheel:null,mousedrag:null,mousemove:null},i={mouseup:e=>(n(e),e.buttons||(this._document.removeEventListener(`mouseup`,r.mouseup),r.mousedrag&&this._document.removeEventListener(`mousemove`,r.mousedrag)),this.cancel(e)),wheel:e=>(n(e),this.cancel(e,!0)),mousedrag:e=>{e.buttons&&n(e)},mousemove:e=>{e.buttons||n(e)}};this._register(this.coreMouseService.onProtocolChange(e=>{e?(this.optionsService.rawOptions.logLevel===`debug`&&this._logService.debug(`Binding to mouse events:`,this.coreMouseService.explainEvents(e)),this.element.classList.add(`enable-mouse-events`),this._selectionService.disable()):(this._logService.debug(`Unbinding from mouse events.`),this.element.classList.remove(`enable-mouse-events`),this._selectionService.enable()),e&8?r.mousemove||=(t.addEventListener(`mousemove`,i.mousemove),i.mousemove):(t.removeEventListener(`mousemove`,r.mousemove),r.mousemove=null),e&16?r.wheel||=(t.addEventListener(`wheel`,i.wheel,{passive:!1}),i.wheel):(t.removeEventListener(`wheel`,r.wheel),r.wheel=null),e&2?r.mouseup||=i.mouseup:(this._document.removeEventListener(`mouseup`,r.mouseup),r.mouseup=null),e&4?r.mousedrag||=i.mousedrag:(this._document.removeEventListener(`mousemove`,r.mousedrag),r.mousedrag=null)})),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this._register(I(t,`mousedown`,e=>{if(e.preventDefault(),this.focus(),this.coreMouseService.areMouseEventsActive&&!this._selectionService.shouldForceSelection(e))return n(e),r.mouseup&&this._document.addEventListener(`mouseup`,r.mouseup),r.mousedrag&&this._document.addEventListener(`mousemove`,r.mousedrag),this.cancel(e)})),this._register(I(t,`wheel`,t=>{if(!r.wheel){if(this._customWheelEventHandler&&this._customWheelEventHandler(t)===!1)return!1;if(!this.buffer.hasScrollback){if(t.deltaY===0)return!1;if(e.coreMouseService.consumeWheelEvent(t,e._renderService?.dimensions?.device?.cell?.height,e._coreBrowserService?.dpr)===0)return this.cancel(t,!0);let n=R.ESC+(this.coreService.decPrivateModes.applicationCursorKeys?`O`:`[`)+(t.deltaY<0?`A`:`B`);return this.coreService.triggerDataEvent(n,!0),this.cancel(t,!0)}}},{passive:!1}))}refresh(e,t){this._renderService?.refreshRows(e,t)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add(`column-select`):this.element.classList.remove(`column-select`)}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,t),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}paste(e){Et(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this._customWheelEventHandler=e}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw Error(`Terminal must be opened first`);let t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw Error(`Terminal must be opened first`);this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return this._selectionService?this._selectionService.hasSelection:!1}select(e,t,n){this._selectionService.setSelection(e,t,n)}getSelection(){return this._selectionService?this._selectionService.selectionText:``}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;let t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;t||e.key!==`Dead`&&e.key!==`AltGraph`||(this._unprocessedDeadKey=!0);let n=wc(e,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(e),n.type===3||n.type===2){let t=this.rows-1;return this.scrollLines(n.type===2?-t:t),this.cancel(e,!0)}if(n.type===1&&this.selectAll(),this._isThirdLevelShift(this.browser,e)||(n.cancel&&this.cancel(e,!0),!n.key)||e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.key.length===1&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;if((n.key===R.ETX||n.key===R.CR)&&(this.textarea.value=``),this._onKey.fire({key:n.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(n.key,!0),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return this.cancel(e,!0);this._keyDownHandled=!0}_isThirdLevelShift(e,t){let n=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState(`AltGraph`);return t.type===`keypress`?n:n&&(!t.keyCode||t.keyCode>47)}_keyUp(e){this._keyDownSeen=!1,!(this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)&&(Lc(e)||this.focus(),this.updateCursorStyle(e),this._keyPressHandled=!1)}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;if(this.cancel(e),e.charCode)t=e.charCode;else if(e.which===null||e.which===void 0)t=e.keyCode;else if(e.which!==0&&e.charCode!==0)t=e.which;else return!1;return!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)?!1:(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,!0)}_inputEvent(e){if(e.data&&e.inputType===`insertText`&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;let t=e.data;return this.coreService.triggerDataEvent(t,!0),this.cancel(e),!0}return!1}resize(e,t){e===this.cols&&t===this.rows?this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure():super.resize(e,t)}_afterResize(e,t){this._charSizeService?.measure()}clear(){if(this.buffer.ybase!==0||this.buffer.y!==0){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e=0;e--)this._addons[e].instance.dispose()}loadAddon(e,t){let n={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(n),t.dispose=()=>this._wrappedAddonDispose(n),t.activate(e)}_wrappedAddonDispose(e){if(e.isDisposed)return;let t=-1;for(let n=0;n=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new Lt)}translateToString(e,t,n){return this._line.translateToString(e,t,n)}},Bc=class{constructor(e,t){this._buffer=e,this.type=t}init(e){return this._buffer=e,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(e){let t=this._buffer.lines.get(e);if(t)return new zc(t)}getNullCell(){return new Lt}},Vc=class extends N{constructor(e){super(),this._core=e,this._onBufferChange=this._register(new F),this.onBufferChange=this._onBufferChange.event,this._normal=new Bc(this._core.buffers.normal,`normal`),this._alternate=new Bc(this._core.buffers.alt,`alternate`),this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw Error(`Active buffer is neither normal nor alternate`)}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}},Hc=class{constructor(e){this._core=e}registerCsiHandler(e,t){return this._core.registerCsiHandler(e,e=>t(e.toArray()))}addCsiHandler(e,t){return this.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._core.registerDcsHandler(e,(e,n)=>t(e,n.toArray()))}addDcsHandler(e,t){return this.registerDcsHandler(e,t)}registerEscHandler(e,t){return this._core.registerEscHandler(e,t)}addEscHandler(e,t){return this.registerEscHandler(e,t)}registerOscHandler(e,t){return this._core.registerOscHandler(e,t)}addOscHandler(e,t){return this.registerOscHandler(e,t)}},Uc=class{constructor(e){this._core=e}register(e){this._core.unicodeService.register(e)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(e){this._core.unicodeService.activeVersion=e}},Wc=[`cols`,`rows`],Gc=0,Kc=class extends N{constructor(e){super(),this._core=this._register(new Ic(e)),this._addonManager=this._register(new Rc),this._publicOptions={...this._core.options};let t=e=>this._core.options[e],n=(e,t)=>{this._checkReadonlyOptions(e),this._core.options[e]=t};for(let e in this._core.options){let r={get:t.bind(this,e),set:n.bind(this,e)};Object.defineProperty(this._publicOptions,e,r)}}_checkReadonlyOptions(e){if(Wc.includes(e))throw Error(`Option "${e}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw Error(`You must set the allowProposedApi option to true to use proposed API`)}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get element(){return this._core.element}get parser(){return this._parser||=new Hc(this._core),this._parser}get unicode(){return this._checkProposedApi(),new Uc(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer||=this._register(new Vc(this._core)),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){let e=this._core.coreService.decPrivateModes,t=`none`;switch(this._core.coreMouseService.activeProtocol){case`X10`:t=`x10`;break;case`VT200`:t=`vt200`;break;case`DRAG`:t=`drag`;break;case`ANY`:t=`any`}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,synchronizedOutputMode:e.synchronizedOutput,wraparoundMode:e.wraparound}}get options(){return this._publicOptions}set options(e){for(let t in e)this._publicOptions[t]=e[t]}blur(){this._core.blur()}focus(){this._core.focus()}input(e,t=!0){this._core.input(e,t)}resize(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)}open(e){this._core.open(e)}attachCustomKeyEventHandler(e){this._core.attachCustomKeyEventHandler(e)}attachCustomWheelEventHandler(e){this._core.attachCustomWheelEventHandler(e)}registerLinkProvider(e){return this._core.registerLinkProvider(e)}registerCharacterJoiner(e){return this._checkProposedApi(),this._core.registerCharacterJoiner(e)}deregisterCharacterJoiner(e){this._checkProposedApi(),this._core.deregisterCharacterJoiner(e)}registerMarker(e=0){return this._verifyIntegers(e),this._core.registerMarker(e)}registerDecoration(e){return this._checkProposedApi(),this._verifyPositiveIntegers(e.x??0,e.width??0,e.height??0),this._core.registerDecoration(e)}hasSelection(){return this._core.hasSelection()}select(e,t,n){this._verifyIntegers(e,t,n),this._core.select(e,t,n)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)}dispose(){super.dispose()}scrollLines(e){this._verifyIntegers(e),this._core.scrollLines(e)}scrollPages(e){this._verifyIntegers(e),this._core.scrollPages(e)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(e){this._verifyIntegers(e),this._core.scrollToLine(e)}clear(){this._core.clear()}write(e,t){this._core.write(e,t)}writeln(e,t){this._core.write(e),this._core.write(`\r +`,t)}paste(e){this._core.paste(e)}refresh(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(e){this._addonManager.loadAddon(this,e)}static get strings(){return{get promptLabel(){return yt.get()},set promptLabel(e){yt.set(e)},get tooMuchOutput(){return xt.get()},set tooMuchOutput(e){xt.set(e)}}}_verifyIntegers(...e){for(Gc of e)if(Gc===1/0||isNaN(Gc)||Gc%1!=0)throw Error(`This API only accepts integers`)}_verifyPositiveIntegers(...e){for(Gc of e)if(Gc&&(Gc===1/0||isNaN(Gc)||Gc%1!=0||Gc<0))throw Error(`This API only accepts positive integers`)}},qc=2,Jc=1,Yc=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;(this._terminal.rows!==e.rows||this._terminal.cols!==e.cols)&&(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let e=this._terminal._core._renderService.dimensions;if(e.css.cell.width===0||e.css.cell.height===0)return;let t=this._terminal.options.scrollback===0?0:this._terminal.options.overviewRuler?.width||14,n=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(n.getPropertyValue(`height`)),i=Math.max(0,parseInt(n.getPropertyValue(`width`))),a=window.getComputedStyle(this._terminal.element),o={top:parseInt(a.getPropertyValue(`padding-top`)),bottom:parseInt(a.getPropertyValue(`padding-bottom`)),right:parseInt(a.getPropertyValue(`padding-right`)),left:parseInt(a.getPropertyValue(`padding-left`))},s=o.top+o.bottom,c=o.right+o.left,l=r-s,u=i-c-t;return{cols:Math.max(qc,Math.floor(u/e.css.cell.width)),rows:Math.max(Jc,Math.floor(l/e.css.cell.height))}}};function Xc(e=a()){return{fontSize:typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(pointer: coarse)`).matches?13*e/100:12*e/100,fontFamily:getComputedStyle(document.body).fontFamily}}function Zc({pending:e,size:t,screenScale:n,socketRef:r,slotRefs:i,panesExist:a,onAnswered:o}){(0,D.useEffect)(()=>{if(e===null)return;let t=r.current;if(!t||t.readyState!==WebSocket.OPEN)return;let s=[];for(let n=0;n{let t=new Kc(Xc(n)),r=new Yc;t.loadAddon(r),t.open(e);let i=r.proposeDimensions();if(t.dispose(),!i)throw Error(`could not measure the cell`);return{rows:i.rows,cols:i.cols}})}catch{c=[]}be(t,{type:`start`,sizes:c})&&o()},[e,t,n,r,i,a,o])}var Qc=`nightcrow.viewer`;function $c(){return globalThis.crypto?.randomUUID?.()||`tab-${Math.floor(Math.random()*2**48).toString(36)}`}function el(){try{let e=sessionStorage.getItem(Qc);if(e)return e;let t=$c();return sessionStorage.setItem(Qc,t),t}catch{return $c()}}function tl(e,t){return t.state===`cancelled`?nl(e,t.pane):{...e,[t.pane]:{state:t.state,detail:t.detail,deadlineEpoch:t.deadline_epoch,attempt:t.attempt}}}function nl(e,t){if(!(t in e))return e;let n={...e};return delete n[t],n}function rl(e,t){return Object.keys(e).map(Number).filter(e=>!t.includes(e)).sort((e,t)=>e-t)}function il(e){if(e===void 0||!Number.isFinite(e))return;let t=new Date(e*1e3);if(!Number.isNaN(t.getTime()))return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function al(e){let t=il(e.deadlineEpoch),n=[e.state];return t&&n.push(`until ${t}`),e.attempt>0&&n.push(`attempt ${e.attempt}`),n.join(` · `)}function ol(e,t){if(typeof e==`string`){let n=ye(e);n&&sl(n,t);return}if(!(e instanceof ArrayBuffer))return;let n=xe(e);if(!n)return;let r;t.replayRef.current.active&&(r=t.replayRef.current.panes.get(n.pane),r||(r=Symbol(),t.replayRef.current.panes.set(n.pane,r)));let i=t.viewsRef.current.get(n.pane);if(i){r&&i.replayGate.begin(),i.term.write(n.data);return}let a=t.pendingRef.current.get(n.pane)??[];a.push(n.data),t.pendingRef.current.set(n.pane,a)}function sl(e,t){switch(e.type){case`hello`:t.clientIdRef.current=e.client,t.setLink(`live`),t.replayRef.current.active=!0,t.replayRef.current.panes.clear(),t.setReplayLeft(e.panes);return;case`replay_complete`:cl(t);return;case`pending`:t.setPending(e.count);return;case`created`:{let n=e.pane;t.replayRef.current.active&&t.replayRef.current.panes.set(n,Symbol()),t.ptySizesRef.current.set(n,{rows:e.rows,cols:e.cols});let r=e.title;r&&t.setTitles(e=>({...e,[n]:r})),t.setPanes(e=>[...e,n]),t.setReplayLeft(e=>e>0?e-1:0),e.client!=null&&e.client===t.clientIdRef.current?(t.setActive(n),ut(t.repo,n)):lt(t.repo)===n&&t.setActive(n);return}case`exited`:t.setPanes(t=>t.filter(t=>t!==e.pane)),t.setActive(t=>t===e.pane?null:t),t.pendingRef.current.delete(e.pane),t.replayRef.current.panes.delete(e.pane),t.ptySizesRef.current.delete(e.pane),t.askedSizesRef.current.delete(e.pane),t.desiredSizesRef.current.delete(e.pane),dt(t.repo,e.pane),t.setTitles(t=>{if(!(e.pane in t))return t;let n={...t};return delete n[e.pane],n});return;case`resized`:t.ptySizesRef.current.set(e.pane,{rows:e.rows,cols:e.cols}),t.viewsRef.current.get(e.pane)?.term.resize(e.cols,e.rows);return;case`recovery`:t.setRecovery(t=>tl(t,e));return;case`size_owner`:Ue(t.ownsSizeRef,t.sizeOwnerGenerationRef,e.owned,e.generation,()=>{t.askedSizesRef.current.clear(),t.onSizeAcquired()}),t.setOwnsSize(e.owned);return;case`reordered`:t.setPanes(t=>y(t,e.order));return;case`zoomed`:t.zoomAskedRef.current=void 0,t.setZoomed(e.pane??null);return;case`error`:x.error(e.message);return;case`attention`:x.info(e.message??`A terminal wants your attention`);return}return e}function cl(e){let t=e.replayRef.current;if(t.active){t.active=!1,e.setReplayLeft(0);for(let[n,r]of t.panes){let i=e.viewsRef.current.get(n);if(i)Ze(i.term,i.replayGate,()=>{e.viewsRef.current.get(n)===i&&t.panes.get(n)===r&&t.panes.delete(n)});else{let t=e.pendingRef.current.get(n)??[];t.push({kind:`replay_complete`,token:r}),e.pendingRef.current.set(n,t)}}}}function ll({repo:e,socketRef:t,viewsRef:n,pendingRef:r,replayRef:i,ptySizesRef:a,askedSizesRef:o,desiredSizesRef:s,ownsSizeRef:c,sizeOwnerGenerationRef:l,onSizeAcquired:u,zoomAskedRef:d,setLink:f,setPending:p,setReplayLeft:m,setPanes:h,setActive:g,setZoomed:_,setTitles:v,setOwnsSize:ee,setRecovery:y}){let te=(0,D.useRef)(null);(0,D.useLayoutEffect)(()=>{let b=!1,x,ne=!1,S=e=>{e===`live`&&(ne=!0),f(e)},C=()=>ne?`reconnecting`:`connecting`,w={repo:e,clientIdRef:te,viewsRef:n,pendingRef:r,replayRef:i,ptySizesRef:a,askedSizesRef:o,desiredSizesRef:s,ownsSizeRef:c,sizeOwnerGenerationRef:l,onSizeAcquired:u,zoomAskedRef:d,setLink:S,setPending:p,setReplayLeft:m,setPanes:h,setActive:g,setZoomed:_,setTitles:v,setOwnsSize:ee,setRecovery:y},re=()=>{n.current.forEach(e=>e.term.dispose()),n.current.clear(),r.current.clear(),i.current.active=!1,i.current.panes.clear(),a.current.clear(),o.current.clear(),s.current.clear()},T=()=>{te.current=null,c.current=!1,l.current=null,S(C()),m(0),d.current=void 0,p(null),h([]),g(null),_(null),v({}),y({}),re();let n=location.protocol===`https:`?`wss:`:`ws:`,r=new URLSearchParams({repo:e,viewer:el()}),i=new WebSocket(`${n}//${location.host}/ws/term?${r}`);i.binaryType=`arraybuffer`,t.current=i,i.onmessage=e=>{t.current===i&&ol(e.data,w)},i.onclose=()=>{b||(S(C()),x=setTimeout(T,1e3))}};return T(),()=>{b=!0,x&&clearTimeout(x),t.current?.close(),re()}},[e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,ee,y])}var ul=`\x1B`,dl=`${ul}[200~`,fl=`${ul}[201~`;function pl(e,t){let n=e.split(ul).join(``).replace(/\r?\n/g,`\r`);return t?dl+n+fl:n}function ml(e){return e.trim().length>0}function hl(e){return/mac|iphone|ipad|ipod/i.test(e)?`⌘↩`:`Ctrl+Enter`}var gl=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`];function _l(e){if(!e||e.getData(`text/plain`))return null;for(let t of Array.from(e.files))if(gl.includes(t.type))return t;return null}function vl(e){return/[\s"']/.test(e)?`"${e.replace(/"/g,`\\"`)}" `:`${e} `}function yl(e){if(!(e instanceof Element))return null;let t=e.closest(`[data-pane-id]`)?.getAttribute(`data-pane-id`);return t==null?null:Number(t)}function bl({containerRef:e,socketRef:t,viewsRef:n}){(0,D.useEffect)(()=>{let r=e.current;if(!r)return;let i=async(e,r)=>{try{let i=await fe.pasteImage(r),a=n.current.get(e)?.term.modes.bracketedPasteMode??!1;be(t.current,{type:`input`,pane:e,data:pl(vl(i),a)})||x.error(`Not connected — the image was not pasted.`)}catch(e){x.error(e instanceof Error?`Could not paste the image: ${e.message}`:`Could not paste the image.`)}},a=(e,t)=>{let n=_l(t);if(!n)return;let r=yl(e.target);r!==null&&(e.preventDefault(),e.stopPropagation(),i(r,n))},o=e=>a(e,e.clipboardData),s=e=>a(e,e.dataTransfer),c=e=>{_l(e.dataTransfer)&&e.preventDefault()};return r.addEventListener(`paste`,o,!0),r.addEventListener(`drop`,s,!0),r.addEventListener(`dragover`,c,!0),()=>{r.removeEventListener(`paste`,o,!0),r.removeEventListener(`drop`,s,!0),r.removeEventListener(`dragover`,c,!0)}},[e,t,n])}var xl=250;function Sl(e){return e.type===`keydown`&&e.ctrlKey&&!e.altKey&&!e.metaKey&&(e.code===`KeyL`||e.key===`l`||e.key===`L`)}var Cl=class{seen=null;noteKey(e,t){Sl(e)&&(this.seen={at:t,trusted:e.isTrusted,repeat:e.repeat,code:e.code})}report(e,t){if(!e.includes(`\f`))return null;let n=this.seen;return this.seen=null,!n||t-n.at>xl||t{let e=Ml;e!==null&&Al(e).then(n=>{n&&Ml===e&&(Ml=null,oe(t))})}}})}function Pl({panes:e,size:t,zoomed:n,mode:r,screenScale:i,socketRef:a,viewsRef:o,bodyRefs:s,pendingRef:c,replayRef:l,ptySizesRef:u,consumeLatches:d,setTitles:f}){(0,D.useEffect)(()=>{let t=Xc(i);for(let n of e){let e=o.current.get(n);if(e){e.term.options.fontSize!==t.fontSize&&(e.term.options.fontSize=t.fontSize),e.term.options.fontFamily!==t.fontFamily&&(e.term.options.fontFamily=t.fontFamily);continue}let r=s.current.get(n);if(!r)continue;let i=new Kc({...t,theme:{background:`#111112`,foreground:`#f2f2f3`},cursorBlink:!0,macOptionClickForcesSelection:!0}),p=new Yc;i.loadAddon(p);let m=new Cl;i.attachCustomKeyEventHandler(e=>{if(m.noteKey(e,performance.now()),El(e,navigator.platform))return!1;let t=Tl(e);return t===null||(i.input(t),!1)}),i.onData(e=>{let t=m.report(e,performance.now()),r=d(e);be(a.current,{type:`input`,pane:n,data:r})&&t&&be(a.current,{type:`clear_key_report`,pane:n,...t})});let h=$e(i,l.current.panes.has(n),e=>{kl(e).catch(e=>{console.error(`nightcrow: a pane's clipboard request failed`,e)})});i.onTitleChange(e=>{let t=e.replace(/\s+/g,` `).trim();t&&f(e=>({...e,[n]:t}))}),i.open(r);let g=u.current.get(n);g&&i.resize(g.cols,g.rows);let _={term:i,fit:p,replayGate:h};o.current.set(n,_);let v=c.current.get(n);if(v){for(let e of v)e instanceof Uint8Array?i.write(e):Ze(i,_.replayGate,()=>{o.current.get(n)===_&&l.current.panes.get(n)===e.token&&l.current.panes.delete(n)});c.current.delete(n),i.write(``,()=>i.scrollToBottom())}}for(let[t,n]of o.current)e.includes(t)||(n.term.dispose(),o.current.delete(t))},[e,t,n,r,i,a,o,s,c,l,u,d,f])}function Fl({repo:e,refs:t,size:n,mode:r,panes:i,active:a,replayLeft:o,pending:s,ownsSize:c,keyboardOpen:l,screenScale:u,refitEpoch:d,zoomShown:f,zoomServer:p,consumeLatches:m,setLink:h,setPending:g,setReplayLeft:_,setPanes:v,setActive:ee,setZoomed:y,setTitles:te,setOwnsSize:b,onSizeAcquired:x,setRecovery:ne}){let{containerRef:S,socketRef:C,viewsRef:w,bodyRefs:re,ptySizesRef:T,askedSizesRef:ie,desiredSizesRef:ae,ownsSizeRef:oe,sizeOwnerGenerationRef:E,pendingRef:se,replayRef:ce,zoomAskedRef:le,slotRefs:ue}=t;ll({repo:e,socketRef:C,viewsRef:w,pendingRef:se,replayRef:ce,ptySizesRef:T,askedSizesRef:ie,desiredSizesRef:ae,ownsSizeRef:oe,sizeOwnerGenerationRef:E,zoomAskedRef:le,setLink:h,setPending:g,setReplayLeft:_,setPanes:v,setActive:ee,setZoomed:y,setTitles:te,setOwnsSize:b,onSizeAcquired:x,setRecovery:ne}),bl({containerRef:S,socketRef:C,viewsRef:w}),Pl({panes:i,size:n,zoomed:f,mode:r,screenScale:u,socketRef:C,viewsRef:w,bodyRefs:re,pendingRef:se,replayRef:ce,ptySizesRef:T,consumeLatches:m,setTitles:te});let de=(0,D.useCallback)(()=>g(null),[g]);Zc({pending:s,size:n,screenScale:u,socketRef:C,slotRefs:ue,panesExist:i.length>0,onAnswered:de}),mt({panes:i,size:n,zoomed:f,mode:r,screenScale:u,socketRef:C,viewsRef:w,bodyRefs:re,ptySizesRef:T,askedSizesRef:ie,desiredSizesRef:ae,ownsSize:c,layoutPending:ze(p,i),keyboardOpen:l,refitEpoch:d}),at({panes:i,viewsRef:w,bodyRefs:re,keyboardOpen:l,size:n,zoomed:f,mode:r}),ft({repo:e,panes:i,replayLeft:o,active:a,setActive:ee,zoomed:p,zoom:f,viewsRef:w,panelRef:S,size:n,mode:r})}var Il=()=>Rl(Ne),Ll=()=>Rl(Pe);function Rl(e){let[t,n]=(0,D.useState)(!1),r=(0,D.useRef)(!1),i=(0,D.useCallback)(e=>{r.current=e,n(e)},[]),a=(0,D.useCallback)(t=>{let n=e(r.current,t);return n.armed!==r.current&&i(n.armed),n.data},[e,i]);return{armed:t,toggle:(0,D.useCallback)(()=>{let e=!r.current;return i(e),e},[i]),clear:(0,D.useCallback)(()=>i(!1),[i]),consume:a}}function zl(e){let[t,n]=(0,D.useState)({w:0,h:0});return(0,D.useEffect)(()=>{let t=e.current;if(!t)return;let r=new ResizeObserver(()=>{let e=t.clientWidth,r=t.clientHeight;n(t=>t.w===e&&t.h===r?t:{w:e,h:r})});return r.observe(t),()=>r.disconnect()},[e]),t}function Bl(e=window){return(0,D.useSyncExternalStore)(t=>Vl(e,t),()=>ne(e)>0,()=>!1)}function Vl(e,t){let n=e.visualViewport;return e.addEventListener(`resize`,t),n?.addEventListener(`resize`,t),n?.addEventListener(`scroll`,t),()=>{e.removeEventListener(`resize`,t),n?.removeEventListener(`resize`,t),n?.removeEventListener(`scroll`,t)}}function Hl({link:e,panes:t,replayLeft:n,pending:r}){return e===`live`?n>0?{kind:`attaching`,left:n}:t>0?{kind:`ready`}:r===null?{kind:`empty`}:{kind:`starting`,count:r}:{kind:e}}function Ul(e){switch(e.kind){case`connecting`:return`Connecting…`;case`reconnecting`:return`Reconnecting…`;case`attaching`:return`Attaching ${Wl(e.left)}…`;case`starting`:return`Starting ${Wl(e.count)}…`;case`empty`:case`ready`:return null}}function Wl(e){return`${e} terminal${e===1?``:`s`}`}var $=e();function Gl({status:e}){if(e.kind===`empty`)return(0,$.jsxs)(`p`,{className:`p-3 text-ink-400`,children:[`No terminal open. Press `,(0,$.jsx)(`span`,{className:`text-accent`,children:`+`}),` above to start one.`]});let t=e.kind===`starting`?null:Ul(e);return t?(0,$.jsx)(`div`,{role:`status`,className:`pointer-events-none absolute inset-0 z-10 flex items-center justify-center p-6`,children:(0,$.jsxs)(`span`,{className:`flex animate-pulse items-center gap-2 text-caption text-ink-400 uppercase`,children:[(0,$.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-accent`}),t]})}):null}var Kl=100;function ql({socketRef:e,viewsRef:t,active:n,panes:r,onSent:i}){let[a,o]=(0,D.useState)(null),[s,c]=(0,D.useState)({}),[l,u]=(0,D.useState)(!1),[d,f]=(0,D.useState)(null),p=(0,D.useRef)(null),m=(0,D.useRef)(r),h=(0,D.useRef)(0),g=(0,D.useRef)(!1);m.current=r;let _=a!==null&&r.includes(a)?a:null,v=_===null?``:s[_]??``,ee=()=>{h.current+=1,g.current=!1,u(!1),f(null)};(0,D.useEffect)(()=>()=>{h.current+=1,g.current=!1,p.current=null},[]),(0,D.useEffect)(()=>{a!==null&&!r.includes(a)&&(p.current=null,ee(),o(null))},[a,r]);let y=e=>{_!==null&&c(t=>({...t,[_]:e}))};return{target:_,draft:v,setDraft:y,open:()=>{p.current===null&&n!==null&&(ee(),p.current=n,o(n))},close:()=>{p.current=null,ee(),o(null)},send:()=>{if(_===null||g.current||d!==null||!ml(v))return!1;let n=t.current.get(_)?.term.modes.bracketedPasteMode??!1,r=pl(v,n);return be(e.current,{type:`input`,pane:_,data:r})?(window.setTimeout(()=>{be(e.current,{type:`input`,pane:_,data:`\r`})},Kl),y(``),p.current=null,ee(),o(null),i(_),!0):!1},attachImage:async e=>{if(_===null||g.current)return;if(!gl.includes(e.type)){f(`Choose a PNG, JPEG, GIF, or WebP image.`);return}if(e.size>10485760){f(`Image must be 10 MiB or smaller.`);return}let t=_,n=h.current,r=()=>n===h.current&&p.current===t&&m.current.includes(t);g.current=!0,u(!0),f(null);try{let n=await fe.pasteImage(e);if(!n)throw Error(`the server returned no image path`);if(!r())return;c(e=>{let r=e[t]??``,i=r.length>0&&!/\s$/.test(r)?` `:``;return{...e,[t]:`${r}${i}${vl(n)}`}})}catch(e){r()&&f(e instanceof Error?`Could not attach image: ${e.message}`:`Could not attach image.`)}finally{r()&&(g.current=!1,u(!1))}},uploading:l,uploadError:d,dismissUploadError:()=>f(null)}}var Jl=v(),Yl=`nc-compose-title`;function Xl(){let e=navigator;return e.userAgentData?.platform||e.platform||``}function Zl({label:e,draft:t,onChange:n,onSend:r,onAttachImage:i,uploading:a,uploadError:o,onDismissUploadError:s,onClose:c}){let l=(0,D.useRef)(null),u=(0,D.useRef)(null),[d,f]=(0,D.useState)(!1),p=ml(t)&&!a&&o===null,m=hl(Xl());(0,D.useEffect)(()=>{let e=l.current;e?.focus(),e?.setSelectionRange(e.value.length,e.value.length)},[]),(0,D.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!e.isComposing&&c()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[c]);let h=()=>{p&&f(!r())};return(0,Jl.createPortal)((0,$.jsx)(`div`,{className:`nc-fade-in fixed inset-0 z-50 flex items-start justify-center bg-black/60 p-4 pt-[8vh]`,onClick:c,children:(0,$.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":Yl,className:`nc-rise-in flex w-[56rem] max-w-full flex-col rounded-lg border border-ink-700 bg-ink-900`,onClick:e=>e.stopPropagation(),children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-ink-700 px-3 py-2`,children:[(0,$.jsxs)(`span`,{id:Yl,className:`min-w-0 truncate font-medium text-ink-50`,children:[`Send to `,e]}),(0,$.jsx)(`button`,{type:`button`,onClick:c,"aria-label":`close`,className:`ml-auto flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-ink-200`,children:(0,$.jsx)(w,{})})]}),(0,$.jsx)(`textarea`,{ref:l,value:t,onChange:e=>{n(e.target.value),f(!1)},onKeyDown:e=>{e.key!==`Enter`||e.nativeEvent.isComposing||(e.metaKey||e.ctrlKey)&&(e.preventDefault(),h())},rows:10,"aria-label":`message`,className:`m-3 resize-y rounded-sm border border-ink-700 bg-ink-950 p-2 font-mono text-[16px] text-ink-50 focus:border-accent focus:outline-none`}),(0,$.jsx)(`input`,{ref:u,type:`file`,accept:gl.join(`,`),"aria-label":`Choose an image`,tabIndex:-1,className:`hidden`,onChange:e=>{let t=e.currentTarget.files?.[0];e.currentTarget.value=``,t&&i(t)}}),(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 px-3 pb-3`,children:[(0,$.jsx)(`button`,{type:`button`,onClick:()=>u.current?.click(),disabled:a,"aria-label":`Attach image`,className:`min-h-11 rounded-sm border border-ink-700 px-3 text-ink-200 hover:text-ink-50 disabled:text-ink-500`,children:`Attach image`}),a&&(0,$.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`text-ink-300`,children:`Uploading image…`}),o&&(0,$.jsxs)(`span`,{role:`alert`,className:`flex basis-full items-center gap-2 text-removed`,children:[(0,$.jsx)(`span`,{className:`min-w-0`,children:o}),(0,$.jsx)(`button`,{type:`button`,onClick:s,className:`min-h-11 shrink-0 rounded-sm px-2 underline`,children:`Dismiss`})]}),d&&(0,$.jsx)(`span`,{role:`alert`,className:`min-w-0 basis-full truncate text-removed`,children:`Not connected — nothing was sent.`}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>{n(``),f(!1),l.current?.focus()},disabled:t.length===0,className:`ml-auto min-h-11 rounded-sm px-3 text-ink-200 hover:text-ink-50 disabled:text-ink-600`,children:`Clear`}),(0,$.jsxs)(`button`,{type:`button`,onClick:h,disabled:!p,title:`Send and run (${m})`,"aria-keyshortcuts":`Meta+Enter Control+Enter`,className:`flex min-h-11 items-center gap-1.5 rounded-sm bg-accent px-3 py-1.5 font-medium text-ink-950 disabled:bg-ink-700 disabled:text-ink-400`,children:[(0,$.jsx)(`kbd`,{"aria-hidden":`true`,className:`font-sans opacity-70`,children:m}),`Send`]})]})]})}),document.body)}function Ql({closing:e,panes:t,paneLabel:n,onConfirmClose:r,onCancelClose:i,compose:a}){return(0,$.jsxs)($.Fragment,{children:[e!==null&&t.includes(e)&&(0,$.jsx)(ce,{label:n(e),detail:`The process running in it will be terminated.`,onConfirm:()=>r(e),onCancel:i}),a.target!==null&&(0,$.jsx)(Zl,{label:n(a.target),draft:a.draft,onChange:a.setDraft,onSend:a.send,onAttachImage:a.attachImage,uploading:a.uploading,uploadError:a.uploadError,onDismissUploadError:a.dismissUploadError,onClose:a.close})]})}function $l({report:e,pane:t,onCancel:n}){let r=t===void 0?al(e):`pane ${t} · ${al(e)}`;return(0,$.jsxs)(`span`,{className:`flex min-w-0 shrink items-center gap-1 rounded-sm bg-ink-800 px-1 text-accent`,title:e.detail??r,children:[(0,$.jsx)(`span`,{className:`truncate`,children:r}),e.detail&&(0,$.jsx)(`span`,{className:`hidden min-w-0 truncate text-ink-400 md:inline`,children:e.detail}),(0,$.jsx)(`button`,{onMouseDown:e=>e.stopPropagation(),onClick:n,title:`Stop waiting and release this pane's slot`,"aria-label":`cancel recovery${t===void 0?``:` for pane ${t}`}`,className:`flex h-5 w-5 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-removed`,children:(0,$.jsx)(w,{className:`h-3 w-3`})})]})}function eu({pane:e,index:t,label:i,cellStyle:a,isActive:s,isZoomed:c,showZoom:l,isDragged:u,isDropTarget:d,reorderable:f,showHeader:p,recovery:m,onCancelRecovery:h,onFocus:g,onToggleZoom:_,onClose:v,onPaneDragStart:ee,onPaneDragMove:y,onPaneDragEnd:te,onPaneDragCancel:b,bodyRef:x,bodyTouch:ne}){let S=r(),C=(e,t)=>s?S(e,t):{title:t};return(0,$.jsxs)(`div`,{"data-pane-id":e,"data-pane-cell":!0,onMouseDown:g,style:a,className:`nc-cell-in relative min-h-0 min-w-0 flex-col overflow-hidden rounded-sm border ${d?`border-accent ring-1 ring-accent`:s?`border-accent`:`border-ink-700`} ${u?`opacity-60`:``}`,children:[!p&&m&&(0,$.jsx)(`div`,{className:`absolute top-1 right-1 z-10 text-xs`,children:(0,$.jsx)($l,{report:m,onCancel:h})}),p&&(0,$.jsxs)(`div`,{onPointerDown:ee,onPointerMove:y,onPointerUp:te,onPointerCancel:b,"data-active":s,className:`nc-title-target flex shrink-0 items-center gap-1 select-none bg-ink-900 px-2 py-0.5 text-xs ${f?u?`cursor-grabbing touch-none`:`cursor-grab touch-none`:``}`,children:[(0,$.jsx)(`span`,{title:i,className:`min-w-0 flex-1 ${s?`text-ink-50`:`text-ink-400`}`,children:(0,$.jsx)(o,{title:i})}),m&&(0,$.jsx)($l,{report:m,onCancel:h}),l&&(0,$.jsx)(`button`,{onMouseDown:e=>e.stopPropagation(),onClick:_,"aria-pressed":c,...C(`view.toggleMaximize`,c?`Restore the grid`:`Zoom this terminal`),"aria-label":c?`Restore the grid`:`Zoom this terminal`,className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent md:h-6 md:w-6`,children:(0,$.jsx)(n,{maximized:c})}),(0,$.jsx)(`button`,{onMouseDown:e=>e.stopPropagation(),onClick:v,...C(`terminal.closePane`,`Close terminal`),"aria-label":`close terminal ${t+1}`,className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-removed md:h-6 md:w-6`,children:(0,$.jsx)(w,{})})]}),(0,$.jsx)(`div`,{ref:x,...ne,className:`nc-pane-body flex min-h-0 flex-1 flex-col justify-end overflow-hidden touch-pinch-zoom`})]})}function tu({count:e,slotStyle:t,showHeader:n,bodyTouch:r,slotRefs:i}){return Array.from({length:e},(e,a)=>(0,$.jsx)(eu,{pane:-1-a,index:a,label:`starting…`,cellStyle:t(a),isActive:!1,isZoomed:!1,showZoom:!1,isDragged:!1,isDropTarget:!1,reorderable:!1,showHeader:n,bodyTouch:r,onCancelRecovery:()=>{},onFocus:()=>{},onToggleZoom:()=>{},onClose:()=>{},onPaneDragStart:()=>{},onPaneDragMove:()=>{},onPaneDragEnd:()=>{},onPaneDragCancel:()=>{},bodyRef:e=>{e?i.current.set(a,e):i.current.delete(a)}},`slot-${a}`))}function nu(e,t){let n=(0,D.useRef)(t);(0,D.useLayoutEffect)(()=>{n.current!==t&&(n.current=t,Oe(e.current))},[e,t])}function ru({containerRef:e,mode:t,panes:n,titles:r,active:i,shown:a,layout:o,pending:s,maximized:c=!1,recovery:l,draggingPane:u,dragOverPane:d,reorderable:f,bodyTouch:p,slotRefs:m,bodyRefs:h,onFocus:g,onToggleZoom:v,onClose:ee,onCancelRecovery:y,onPaneDragStart:te,onPaneDragMove:b,onPaneDragEnd:x,onPaneDragCancel:ne}){let S=t===`tabs`;nu(e,`${t}:${a}:${o.cols}x${o.rows}:${c}`);let C=e=>{let t=o.cells[e];return{display:`flex`,gridColumn:`${t.colStart} / span ${t.colSpan}`,gridRow:`${t.row}`}},w=(e,t)=>S?_(e===a):a===null?C(t):{display:e===a?`flex`:`none`};return(0,$.jsxs)(`div`,{ref:e,className:S?`relative h-full`:`grid h-full gap-1`,style:S?void 0:a===null?{gridTemplateColumns:`repeat(${o.cols}, minmax(0, 1fr))`,gridTemplateRows:`repeat(${o.rows}, minmax(0, 1fr))`}:{gridTemplateColumns:`1fr`,gridTemplateRows:`1fr`},children:[n.length===0&&s!==null&&(0,$.jsx)(tu,{count:s,showHeader:!S,bodyTouch:p,slotStyle:e=>S?_(e===0):C(e),slotRefs:m}),n.map((e,t)=>(0,$.jsx)(eu,{pane:e,index:t,label:r[e]??`term ${t+1}`,cellStyle:w(e,t),isActive:e===i,isZoomed:!S&&a===e,showZoom:!S&&n.length>1,isDragged:u===e,isDropTarget:d===e,reorderable:f,showHeader:!S,bodyTouch:p,recovery:l[e],onCancelRecovery:()=>y(e),onFocus:()=>g(e),onToggleZoom:()=>v(e),onClose:()=>ee(e),onPaneDragStart:t=>te(t,e),onPaneDragMove:b,onPaneDragEnd:x,onPaneDragCancel:ne,bodyRef:t=>{t?h.current.set(e,t):h.current.delete(e)}},e))]})}function iu({panes:e,titles:t,shown:n,reorderable:r,draggingPane:i,dragOverPane:a,onClose:c,onPaneDragStart:l,onPaneDragMove:u,onPaneDragEnd:d,onPaneDragCancel:f}){let p=(0,D.useRef)(new Map);(0,D.useEffect)(()=>{n!==null&&p.current.get(n)?.scrollIntoView({block:`nearest`,inline:`nearest`})},[n,e.length]);let m=(0,D.useRef)(null),h=(0,D.useRef)(!1);return(0,D.useEffect)(()=>{h.current=i!==null},[i]),(0,D.useEffect)(()=>{let e=m.current;if(!e)return;let t=e=>{h.current&&e.cancelable&&e.preventDefault()};return e.addEventListener(`touchmove`,t,{passive:!1}),()=>e.removeEventListener(`touchmove`,t)},[]),(0,$.jsx)(`div`,{ref:m,role:`tablist`,"aria-label":`Terminals`,className:`-my-1 flex min-w-0 flex-1 items-stretch self-stretch overflow-x-auto`,children:e.map((e,m)=>{let h=t[e]??`term ${m+1}`,g=e===n;return(0,$.jsxs)(`div`,{"data-pane-id":e,ref:t=>{t?p.current.set(e,t):p.current.delete(e)},role:`tab`,"aria-selected":g,title:h,onPointerDown:t=>l(t,e,{holdToDrag:!0}),onPointerMove:u,onPointerUp:d,onPointerCancel:f,onLostPointerCapture:f,className:`nc-title-target flex shrink-0 touch-pan-x items-center border-r border-ink-700 whitespace-nowrap select-none [-webkit-touch-callout:none] ${r?`cursor-grab`:``} ${i===e?`opacity-60`:``} ${a===e?`bg-ink-800 ring-1 ring-inset ring-accent`:``} ${g?`bg-ink-950 text-ink-50 shadow-[inset_0_-1px_0_0_var(--color-accent)]`:`text-ink-400 hover:bg-ink-850 hover:text-ink-200`}`,children:[(0,$.jsx)(`span`,{className:`flex min-w-0 items-center self-stretch pr-1 pl-3`,children:(0,$.jsx)(o,{title:h,className:s})}),(0,$.jsx)(`button`,{onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),c(e)},"data-tab-close":!0,title:`Close terminal`,"aria-label":`close terminal ${m+1}`,className:`mr-1 flex h-5 w-5 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:bg-ink-700 hover:text-removed`,children:(0,$.jsx)(w,{className:`h-3.5 w-3.5`})})]},e)})})}var au=`flex min-h-9 min-w-9 shrink-0 items-center justify-center rounded-xs border px-2 text-xs active:bg-ink-700 active:text-accent`,ou=`border-ink-700 bg-ink-850 text-ink-200`,su=`border-accent bg-ink-700 text-accent`;function cu({onKey:e,ctrl:t,alt:n,onArm:r}){(0,D.useEffect)(()=>t.clear,[t.clear]),(0,D.useEffect)(()=>n.clear,[n.clear]);let i=()=>{t.clear(),n.clear()};return(0,$.jsx)(`div`,{className:`flex shrink-0 items-stretch gap-1 overflow-x-auto border-t border-chrome-line bg-ink-900 px-1 py-1`,children:Le.map(a=>a.kind===`latch`?(0,$.jsx)(lu,{latch:a.latch===`ctrl`?t:n,label:a.label,aria:a.aria,onArm:r},a.latch):(0,$.jsx)(`button`,{onPointerDown:e=>e.preventDefault(),onClick:()=>{i(),e(a.key)},"aria-label":a.aria,className:`${au} ${ou}`,children:a.label},a.key))})}function lu({latch:e,label:t,aria:n,onArm:r}){return(0,$.jsx)(`button`,{onPointerDown:e=>e.preventDefault(),onClick:()=>{e.toggle()&&r()},"aria-pressed":e.armed,"aria-label":n,className:`${au} ${e.armed?su:ou}`,children:t})}function uu(e){return{lastY:e,pending:0,scrolling:!1}}function du(e,t){let n=e.pending+(e.lastY-t);return Math.abs(n)<50?{next:{...e,lastY:t,pending:n},deltaY:0}:{next:{lastY:t,pending:0,scrolling:!0},deltaY:n}}function fu({viewsRef:e,bodyRefs:t}){let n=(0,D.useRef)(null),r=(0,D.useRef)(null),i=(0,D.useCallback)(()=>{n.current=null,r.current=null},[]),a=(0,D.useCallback)(e=>{e.pointerType===`touch`&&(n.current===null?(n.current=e.pointerId,r.current=uu(e.clientY)):i())},[i]),o=(0,D.useCallback)(i=>{if(i.pointerId!==n.current)return;let a=r.current;if(!a)return;let{next:o,deltaY:s}=du(a,i.clientY);if(r.current=o,s===0)return;i.preventDefault();let c=i.currentTarget;mu(c,i,s,pu(c,e,t))},[e,t]),s=(0,D.useCallback)(e=>{e.pointerId===n.current&&i()},[i]);return{onPointerDown:a,onPointerMove:o,onPointerUp:s,onPointerCancel:s}}function pu(e,t,n){for(let[r,i]of n.current)if(i===e)return t.current.get(r)}function mu(e,t,n,r){let i=e.querySelector(`.xterm`);if(!i)return;let a=new WheelEvent(`wheel`,{deltaY:n,deltaMode:WheelEvent.DOM_DELTA_PIXEL,clientX:t.clientX,clientY:t.clientY,bubbles:!0,cancelable:!0,view:window});if(i.dispatchEvent(a),a.defaultPrevented||!r)return;let o=r.term.rows,s=o>0?i.clientHeight/o:0;if(s<=0)return;let c=Math.round(n/s);r.term.scrollLines(n<0?Math.min(-1,c):Math.max(1,c))}var hu=`nightcrow.paneViewMode`;function gu(){try{return g(localStorage.getItem(hu))}catch{return null}}function _u(e){try{localStorage.setItem(hu,e)}catch{}}function vu(){return typeof window>`u`?768:window.innerWidth}function yu(){let[e,t]=(0,D.useState)(gu),[n,r]=(0,D.useState)(vu);(0,D.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>r(window.innerWidth);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let i=b(e,n),a=ae(n);return{mode:i,toggle:(0,D.useCallback)(()=>{if(!a)return;let e=i===`tabs`?`grid`:`tabs`;_u(e),t(e)},[i,a]),canToggle:a}}var bu=`nightcrow.termKeyBar`,xu=`(pointer: coarse)`;function Su(){try{return Fe(localStorage.getItem(bu))}catch{return null}}function Cu(e){try{localStorage.setItem(bu,e)}catch{}}function wu(){return typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(xu).matches}function Tu(){return typeof window>`u`?768:window.innerWidth}function Eu(){let[e,t]=(0,D.useState)(Su),[n,r]=(0,D.useState)(wu),[i,a]=(0,D.useState)(Tu);(0,D.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>a(window.innerWidth);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),(0,D.useEffect)(()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=window.matchMedia(xu),t=()=>r(e.matches);return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let o=e?e===`shown`:Ie(n,i);return{shown:o,toggle:(0,D.useCallback)(()=>{let e=o?`hidden`:`shown`;Cu(e),t(e)},[o])}}function Du({showDivider:e,draggingUpper:t,onUpperDragStart:n,onUpperDragMove:r,onUpperDragEnd:i,onUpperDragCancel:a}){return e?(0,$.jsx)(`div`,{role:`separator`,"aria-orientation":`horizontal`,"aria-label":`Resize the terminal panel (double-click to reset)`,title:`Drag to resize · double-click to reset`,onPointerDown:n,onPointerMove:r,onPointerUp:i,onPointerCancel:a,onLostPointerCapture:i,className:`absolute -top-px left-0 z-10 hidden h-1.5 w-full cursor-row-resize touch-none md:block ${t?`bg-accent`:`hover:bg-accent`}`}):null}function Ou({mode:e,onToggleMode:t,canToggleMode:i,tabs:a,ownsSize:o,maximized:s,keyBarShown:d,waiting:f,recovery:p,panes:m,onCancelRecovery:h,onClaimSize:g,onCreate:_,onCompose:v,onToggleKeyBar:ee,onToggleMaximized:y}){let b=r(),x=(0,D.useRef)(null),ne=(0,D.useRef)(m.length);(0,D.useLayoutEffect)(()=>{let e=ne.current;ne.current=m.length;let t=document.activeElement===null||document.activeElement===document.body;le(m.length,e,t)&&x.current?.focus()},[m.length]);let C=`flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent`;return(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 bg-ink-900 px-2 py-1 text-xs`,children:[f&&(0,$.jsxs)(`span`,{role:`status`,className:`flex min-w-0 shrink animate-pulse items-center gap-1 rounded-sm bg-ink-800 px-1 text-ink-400`,children:[(0,$.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-accent`}),(0,$.jsx)(`span`,{className:`truncate`,children:f})]}),rl(p,m).map(e=>(0,$.jsx)($l,{pane:e,report:p[e],onCancel:()=>h(e)},e)),a,!o&&(0,$.jsx)(`button`,{onClick:g,...b(`terminal.claimSizing`,`These panes are sized for another client. Resize them to fit this screen.`),"aria-label":`Fit the panes to this screen`,className:`ml-auto ${C}`,children:(0,$.jsx)(l,{})}),(0,$.jsx)(`button`,{ref:x,onClick:_,...b(`terminal.newPane`,`New terminal`),"aria-label":`New terminal`,className:`${C} ${o?`ml-auto`:``}`,children:(0,$.jsx)(S,{})}),i&&(0,$.jsx)(`button`,{onClick:t,"aria-pressed":e===`tabs`,title:e===`tabs`?`Show the panes side by side`:`Show one pane per tab`,"aria-label":e===`tabs`?`Show the panes side by side`:`Show one pane per tab`,className:C,children:e===`tabs`?(0,$.jsx)(c,{}):(0,$.jsx)(u,{})}),m.length>0&&(0,$.jsx)(`button`,{onClick:v,...b(`terminal.composeMessage`,`Write a message to the active terminal`),"aria-label":`Write a message to the active terminal`,className:C,children:(0,$.jsx)(E,{})}),m.length>0&&(0,$.jsx)(`button`,{onClick:ee,"aria-pressed":d,title:d?`Hide the key bar`:`Show the key bar`,"aria-label":d?`Hide the key bar`:`Show the key bar`,className:`${C} ${d?`text-accent`:``}`,children:(0,$.jsx)(te,{})}),(0,$.jsx)(`button`,{onClick:y,"aria-pressed":s,...b(`view.toggleMaximize`,s?`Restore panel height`:`Maximize the panel`),"aria-label":s?`Restore panel height`:`Maximize the panel`,className:`hidden md:flex ${C}`,children:(0,$.jsx)(n,{maximized:s})})]})}function ku({repo:e,maximized:t,onToggleMaximized:n,className:r=``,sectionRef:a,...o}){let s=tt(),{containerRef:c,socketRef:l,viewsRef:u,bodyRefs:d,zoomAskedRef:f,slotRefs:p}=s,{pending:m,setPending:h,link:g,setLink:_,replayLeft:v,setReplayLeft:ee,panes:y,setPanes:te,active:b,setActive:x,zoomed:ne,setZoomed:S,titles:C,setTitles:w,closing:re,setClosing:T,ownsSize:ie,setOwnsSize:ae}=Ge(),oe=zl(c),{scale:E}=i(),{refitEpoch:ce,forceFit:le}=We(g,l),ue=Bl(),{recovery:de,setRecovery:fe,cancelRecovery:pe}=Se(l),me=Re(ne,y),_e=fu({viewsRef:u,bodyRefs:d}),{mode:O,toggle:ve,canToggle:ye}=yu(),be=Eu(),xe=Il(),Ce=Ll(),we=xe.consume,Te=Ce.consume,Ee=(0,D.useCallback)(e=>Te(we(e)),[Te,we]),De=O===`tabs`,Oe=De?null:me,ke=De?null:ne,Ae=De?se(b,y):me;Fl({repo:e,refs:s,size:oe,mode:O,panes:y,active:b,replayLeft:v,pending:m,ownsSize:ie,keyboardOpen:ue,screenScale:E,refitEpoch:ce,zoomShown:Oe,zoomServer:ke,consumeLatches:Ee,setLink:_,setPending:h,setReplayLeft:ee,setPanes:te,setActive:x,setZoomed:S,setTitles:w,setOwnsSize:ae,onSizeAcquired:le,setRecovery:fe});let je=t=>{x(t),ut(e,t),u.current.get(t)?.term.focus()},Me=e=>C[e]||`terminal ${y.indexOf(e)+1}`,Ne=()=>b!==null&&je(b),Pe=ql({socketRef:l,viewsRef:u,active:b,panes:y,onSent:e=>{xe.clear(),Ce.clear(),je(e)}}),Fe=Ve({socketRef:l,viewsRef:u,zoomed:me,zoomAskedRef:f,active:b,onForceFit:le}),{create:Ie,toggleZoom:Le,claimSize:ze,closePane:Be,reorder:He,sendKey:Ue}=Fe;nt({socketRef:l,panes:y,active:b,zoom:Oe,link:g,commands:Fe,focusPane:je,cancelRecovery:pe,openCompose:Pe.open});let{draggingPane:Ke,dragOverPane:qe,reorderable:Je,endPaneDrag:Ye,onPaneDragStart:Xe,onPaneDragMove:Ze,onPaneDragEnd:Qe}=ge({panes:y,zoomed:Oe,onFocus:je,onReorder:He}),$e=he(y.length+v>0?y.length+v:m??0,oe.w>=oe.h),et=Hl({link:g,panes:y.length,replayLeft:v,pending:m});return(0,$.jsxs)(`section`,{ref:a,"data-terminal-panel":``,className:`relative flex min-h-0 min-w-0 flex-col border-t border-chrome-line ${r}`,children:[(0,$.jsx)(Du,{...o}),(0,$.jsx)(Ou,{mode:O,onToggleMode:ve,canToggleMode:ye,tabs:De&&y.length>0?(0,$.jsx)(iu,{panes:y,titles:C,shown:Ae,reorderable:Je,draggingPane:Ke,dragOverPane:qe,onClose:T,onPaneDragStart:Xe,onPaneDragMove:Ze,onPaneDragEnd:Qe,onPaneDragCancel:Ye}):void 0,ownsSize:ie,maximized:t,keyBarShown:be.shown,waiting:y.length>0?Ul(et):null,recovery:de,panes:y,onCancelRecovery:pe,onClaimSize:ze,onCreate:Ie,onCompose:Pe.open,onToggleKeyBar:be.toggle,onToggleMaximized:n}),(0,$.jsxs)(`div`,{className:`relative min-h-0 flex-1 overflow-hidden bg-ink-950 p-1`,children:[y.length===0&&(0,$.jsx)(Gl,{status:et}),(0,$.jsx)(ru,{containerRef:c,mode:O,maximized:t,panes:y,titles:C,active:b,shown:Ae,layout:$e,pending:m,recovery:de,draggingPane:Ke,dragOverPane:qe,reorderable:Je,bodyTouch:_e,slotRefs:p,bodyRefs:d,onFocus:je,onToggleZoom:Le,onClose:T,onCancelRecovery:pe,onPaneDragStart:Xe,onPaneDragMove:Ze,onPaneDragEnd:Qe,onPaneDragCancel:Ye})]}),y.length>0&&be.shown&&(0,$.jsx)(cu,{onKey:Ue,ctrl:xe,alt:Ce,onArm:Ne}),(0,$.jsx)(Ql,{closing:re,panes:y,paneLabel:Me,onConfirmClose:e=>{T(null),Be(e)},onCancelClose:()=>{T(null),Ne()},compose:Pe})]})}export{ku as TerminalPanel}; \ No newline at end of file diff --git a/viewer-ui/dist/assets/Terminal-TFqlge3z.js b/viewer-ui/dist/assets/Terminal-TFqlge3z.js deleted file mode 100644 index bc01dbfc..00000000 --- a/viewer-ui/dist/assets/Terminal-TFqlge3z.js +++ /dev/null @@ -1,18 +0,0 @@ -import{t as e}from"./jsx-runtime-EIAPxkjE.js";import{t}from"./react-BPk_wmJm.js";import{A as n,B as r,D as i,E as a,I as o,L as s,M as c,O as l,P as u,S as d,W as f,_ as p,a as m,b as h,c as g,d as _,dt as v,h as ee,i as y,k as te,l as b,lt as ne,n as re,nt as x,o as S,ot as C,p as ie,q as w,r as ae,s as oe,st as se,tt as T,u as ce,ut as le,v as ue,x as de,y as fe}from"./visualViewport-hwlIeclE.js";import{t as pe}from"./api-CKtlIBMl.js";var E=t();function me(e,t){for(;t;)[e,t]=[t,e%t];return e}function he(e,t){switch(e){case 1:return[1];case 2:return t?[2]:[1,1];case 3:return[2,1];case 4:return[2,2];case 5:return[3,2];case 6:return[3,3];case 7:return[4,3];default:return[4,4]}}function ge(e,t){let n=he(e,t),r=n.reduce((e,t)=>e*t/me(e,t),1),i=[];return n.forEach((e,t)=>{let n=r/e;for(let r=0;r1,g=()=>{c.current!==null&&clearTimeout(c.current),c.current=null},_=()=>{g(),l.current=!1,i.current=null,a.current=null,o.current=null,s.current=!1,d(null),p(null)};return{draggingPane:u,dragOverPane:f,reorderable:h,endPaneDrag:_,onPaneDragStart:(e,t,r)=>{if(e.target.closest(`button`))return;let o=r?.holdToDrag===!0&&e.pointerType===`touch`;if(o||n(t),e.button!==0||!h&&!o)return;if(i.current=t,a.current={x:e.clientX,y:e.clientY},s.current=!1,!o){e.currentTarget.setPointerCapture(e.pointerId);return}if(l.current=!0,!h)return;let u=e.currentTarget,f=e.pointerId;g(),c.current=setTimeout(()=>{c.current=null,l.current=!1,s.current=!0,d(t);try{u.setPointerCapture(f)}catch{_()}},350)},onPaneDragMove:e=>{let t=i.current,n=a.current;if(t===null||n===null)return;if(!s.current){if(!(Math.hypot(e.clientX-n.x,e.clientY-n.y)>=4))return;if(l.current){_();return}}s.current=!0,d(t);let r=document.elementFromPoint(e.clientX,e.clientY)?.closest(`[data-pane-id]`),c=r?Number(r.getAttribute(`data-pane-id`)):null,u=c!==null&&c!==t?c:null;o.current=u,p(u)},onPaneDragEnd:()=>{let t=i.current,a=o.current;t!==null&&l.current&&n(t),t!==null&&s.current&&a!==null&&r(m(e,t,a)),_()}}}function ve(e){return typeof e==`number`&&Number.isSafeInteger(e)}function D(e){return ve(e)&&e>=0}function ye(e){return typeof e==`string`&&/^[0-9]+$/.test(e)}function be(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t,r;switch(n.type){case`created`:r=D(n.pane)&&D(n.rows)&&D(n.cols)&&(n.client===void 0||D(n.client))&&(n.title===void 0||typeof n.title==`string`);break;case`exited`:r=D(n.pane);break;case`resized`:r=D(n.pane)&&D(n.rows)&&D(n.cols);break;case`hello`:r=D(n.client)&&D(n.panes);break;case`replay_complete`:r=!0;break;case`size_owner`:r=typeof n.owned==`boolean`&&(n.generation===void 0||ye(n.generation));break;case`error`:r=typeof n.message==`string`;break;case`reordered`:r=Array.isArray(n.order)&&n.order.every(D);break;case`zoomed`:r=n.pane===null||D(n.pane);break;case`pending`:r=D(n.count);break;case`recovery`:r=D(n.pane)&&typeof n.state==`string`&&(n.detail===void 0||typeof n.detail==`string`)&&(n.deadline_epoch===void 0||ve(n.deadline_epoch))&&D(n.attempt);break;default:return null}return r?n:null}function xe(e,t){return!e||e.readyState!==WebSocket.OPEN?!1:(e.send(JSON.stringify(t)),!0)}function Se(e){return e.byteLength<4?null:{pane:new DataView(e).getUint32(0,!0),data:new Uint8Array(e,4)}}function Ce(e){let[t,n]=(0,E.useState)({});return{recovery:t,setRecovery:n,cancelRecovery:(0,E.useCallback)(t=>{xe(e.current,{type:`cancel_recovery`,pane:t})},[e])}}var we=240,Te=`cubic-bezier(0.2, 0, 0, 1)`;function Ee(){return typeof window>`u`||typeof window.matchMedia!=`function`||window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}function De(e){return e instanceof HTMLElement&&typeof e.animate==`function`&&!Ee()}function Oe(e,t){if(!De(e)){t();return}let n=!1,r=()=>{n||(n=!0,t())},i=e.animate([{opacity:1,transform:`translateY(0)`},{opacity:0,transform:`translateY(12px)`}],{duration:200,easing:Te,fill:`forwards`});i.onfinish=r,i.oncancel=r}function ke(e){De(e)&&e.animate([{opacity:0},{opacity:1}],{duration:we,easing:Te})}var Ae={esc:`\x1B`,tab:` `,"shift-tab":`\x1B[Z`,"ctrl-b":``,"ctrl-c":``,"ctrl-d":``,"ctrl-z":``,"ctrl-l":`\f`,"ctrl-r":``,up:`\x1B[A`,down:`\x1B[B`,right:`\x1B[C`,left:`\x1B[D`},je={up:`\x1BOA`,down:`\x1BOB`,right:`\x1BOC`,left:`\x1BOD`};function Me(e,t=!1){if(t){let t=je[e];if(t)return t}return Ae[e]}function Ne(e){if(e.length!==1)return null;if(e===` `)return`\0`;if(e===`?`)return``;let t=e.charCodeAt(0);return t>=97&&t<=122&&(t-=32),t<64||t>95?null:String.fromCharCode(t&31)}function Pe(e,t){return e?t.startsWith(`\x1B`)?{data:t,armed:!0}:{data:Ne(t)??t,armed:!1}:{data:t,armed:!1}}function Fe(e,t){return e?t.startsWith(`\x1B`)?{data:t,armed:!0}:{data:[...t].length===1?`\x1b${t}`:t,armed:!1}:{data:t,armed:!1}}function Ie(e){return e===`shown`||e===`hidden`?e:null}function Le(e,t){return e||t<768}var Re=[{kind:`key`,key:`esc`,label:`Esc`,aria:`Escape`},{kind:`key`,key:`tab`,label:`Tab`,aria:`Tab`},{kind:`key`,key:`shift-tab`,label:`⇧Tab`,aria:`Shift Tab`},{kind:`latch`,latch:`alt`,label:`Alt`,aria:`Alt for the next key`},{kind:`latch`,latch:`ctrl`,label:`Ctrl`,aria:`Control for the next key`},{kind:`key`,key:`ctrl-b`,label:`^B`,aria:`Control B`},{kind:`key`,key:`ctrl-c`,label:`^C`,aria:`Control C`},{kind:`key`,key:`ctrl-d`,label:`^D`,aria:`Control D`},{kind:`key`,key:`ctrl-z`,label:`^Z`,aria:`Control Z`},{kind:`key`,key:`ctrl-l`,label:`^L`,aria:`Control L`},{kind:`key`,key:`ctrl-r`,label:`^R`,aria:`Control R`},{kind:`key`,key:`left`,label:`←`,aria:`Left arrow`},{kind:`key`,key:`down`,label:`↓`,aria:`Down arrow`},{kind:`key`,key:`up`,label:`↑`,aria:`Up arrow`},{kind:`key`,key:`right`,label:`→`,aria:`Right arrow`}];function ze(e,t){return e!==null&&t.includes(e)?e:null}function Be(e,t){return e!==null&&ze(e,t)===null}function Ve(e,t){return e===t?null:t}function He({socketRef:e,viewsRef:t,zoomed:n,zoomAskedRef:r,active:i,onForceFit:a}){let o=t=>xe(e.current,t),s=()=>o({type:`create`,rows:24,cols:80}),c=e=>{let t=Ve(r.current===void 0?n:r.current,e);o({type:`zoom`,pane:t})&&(r.current=t)},l=()=>o({type:`claim_size`});return{create:s,toggleZoom:c,claimSize:()=>{l()&&a()},requestSize:l,closePane:e=>Oe(document.querySelector(`[data-pane-cell][data-pane-id="${e}"]`),()=>o({type:`close`,pane:e})),reorder:e=>o({type:`reorder`,order:e}),sendKey:e=>{if(i===null)return;let n=t.current.get(i)?.term.modes.applicationCursorKeysMode??!1;o({type:`input`,pane:i,data:Me(e,n)})}}}function Ue(e){return e===`live`}function We(e,t,n,r,i){let a=r!==void 0&&r!==t.current;n&&(!e.current||a)&&i(),e.current=n,t.current=r??null}function Ge(e,t){let[n,r]=(0,E.useState)(0);return ie(()=>{Ue(e)&&xe(t.current,{type:`claim_size`})},e===`live`),{refitEpoch:n,forceFit:(0,E.useCallback)(()=>r(e=>e+1),[])}}function Ke(){let[e,t]=(0,E.useState)(null),[n,r]=(0,E.useState)(`connecting`),[i,a]=(0,E.useState)(0),[o,s]=(0,E.useState)([]),[c,l]=(0,E.useState)(null),[u,d]=(0,E.useState)(null),[f,p]=(0,E.useState)({}),[m,h]=(0,E.useState)(null),[g,_]=(0,E.useState)(!0);return{pending:e,setPending:t,link:n,setLink:r,replayLeft:i,setReplayLeft:a,panes:o,setPanes:s,active:c,setActive:l,zoomed:u,setZoomed:d,titles:f,setTitles:p,closing:m,setClosing:h,ownsSize:g,setOwnsSize:_}}function qe(e){let t=e.indexOf(`;`);if(t===-1)return{kind:`ignore`};let n=e.slice(0,t),r=e.slice(t+1);if(!Xe(n)||r===`?`||r===``)return{kind:`ignore`};let i=Ze(r);return i===null?{kind:`ignore`}:{kind:`write`,text:i}}var Je=`cpqs01234567`,Ye=`cs`;function Xe(e){if(e===``)return!0;let t=[...e];return t.every(e=>Je.includes(e))?t.some(e=>Ye.includes(e)):!1}function Ze(e){try{let t=atob(e),n=Uint8Array.from(t,e=>e.charCodeAt(0));return new TextDecoder(`utf-8`,{fatal:!0}).decode(n)}catch{return null}}function Qe(e,t,n){e.write(``,()=>{t.release(),n()})}function $e(e){let t=e[0];return Array.isArray(t)?t[0]:t}function et(e,t,n){let r=t,i=()=>r;return e.parser.registerCsiHandler({final:`n`},i),e.parser.registerCsiHandler({prefix:`?`,final:`n`},i),e.parser.registerCsiHandler({final:`c`},i),e.parser.registerCsiHandler({prefix:`>`,final:`c`},i),e.parser.registerCsiHandler({prefix:`=`,final:`c`},i),e.parser.registerCsiHandler({intermediates:`$`,final:`p`},i),e.parser.registerCsiHandler({prefix:`?`,intermediates:`$`,final:`p`},i),e.parser.registerCsiHandler({final:`t`},e=>r&&[14,16,18].includes($e(e)??-1)),e.parser.registerDcsHandler({intermediates:`$`,final:`q`},i),e.parser.registerDcsHandler({prefix:`?`,intermediates:`$`,final:`q`},i),e.parser.registerOscHandler(52,e=>(r||n(e),!0)),{begin(){r=!0},release(){r=!1}}}function tt(){return{active:!1,panes:new Map}}function nt(){return{containerRef:(0,E.useRef)(null),socketRef:(0,E.useRef)(null),viewsRef:(0,E.useRef)(new Map),bodyRefs:(0,E.useRef)(new Map),ptySizesRef:(0,E.useRef)(new Map),askedSizesRef:(0,E.useRef)(new Map),desiredSizesRef:(0,E.useRef)(new Map),ownsSizeRef:(0,E.useRef)(!0),sizeOwnerGenerationRef:(0,E.useRef)(null),pendingRef:(0,E.useRef)(new Map),replayRef:(0,E.useRef)(tt()),zoomAskedRef:(0,E.useRef)(void 0),slotRefs:(0,E.useRef)(new Map)}}function rt({socketRef:e,panes:t,active:n,zoom:r,link:i,commands:a,focusPane:o,cancelRecovery:s,openCompose:c}){let l=p(),u=(0,E.useRef)({commands:a,focusPane:o,cancelRecovery:s,openCompose:c,socketRef:e});u.current={commands:a,focusPane:o,cancelRecovery:s,openCompose:c,socketRef:e};let d=(0,E.useMemo)(()=>{let e={"terminal.newPane":()=>u.current.commands.create(),paneCursor:()=>({index:n===null?-1:t.indexOf(n),count:t.length})};t.length>0&&(e.focusPaneAt=e=>{let n=t[e];n!==void 0&&(r!==null&&n!==r?u.current.commands.toggleZoom(n):u.current.focusPane(n))});for(let n of f){let r=w(n.id);if(r===null)continue;let i=ae(t,r);i!==null&&(e[n.id]=()=>u.current.focusPane(i))}return n===null||(e[`terminal.closePane`]=()=>u.current.commands.closePane(n),e[`terminal.claimSizing`]=()=>u.current.commands.claimSize(),e[`terminal.cancelRecovery`]=()=>u.current.cancelRecovery(n),e[`terminal.composeMessage`]=()=>u.current.openCompose(),e[`terminal.swapPanePrompt`]=it,e.swapPanes=e=>{let r=ae(t,e);r!==null&&u.current.commands.reorder(S(t,n,r))},e.zoomActivePane=()=>u.current.commands.toggleZoom(n),e.sendInput=e=>void xe(u.current.socketRef.current,{type:`input`,pane:n,data:e})),e},[t,n,r]);ee(d);let m=l?.disarm;(0,E.useEffect)(()=>{i!==`live`&&m?.()},[i,m])}function it(){}function at({termHeight:e,bodyHeight:t,rows:n,cursorRow:r,atLive:i}){let a=e-t;if(a<=0||n<=0||!i)return 0;let o=e/n,s=(Math.min(Math.max(r,0),n-1)+1)*o,c=Math.min(Math.max(s-t,0),a);return Math.round(a-c)}function ot({panes:e,viewsRef:t,bodyRefs:n,keyboardOpen:r,size:i,zoomed:a,mode:o}){(0,E.useEffect)(()=>{let r=[];for(let i of e){let e=t.current.get(i),a=n.current.get(i),o=e?.term.element;if(!e||!a||!o)continue;let{term:s}=e,c=()=>{let e=s.buffer.active,t=at({termHeight:o.offsetHeight,bodyHeight:a.clientHeight,rows:s.rows,cursorRow:e.cursorY,atLive:e.viewportY===e.baseY}),n=t>0?`-${t}px`:``;o.style.marginBottom!==n&&(o.style.marginBottom=n)};c();let l=s.onRender(c),u=s.onScroll(c),d=new ResizeObserver(c);d.observe(a),r.push(()=>{l.dispose(),u.dispose(),d.disconnect()})}return()=>{for(let e of r)e()}},[e,t,n,r,i,a,o])}var st=`nightcrow.pane.active`;function ct(){try{let e=sessionStorage.getItem(st);if(!e)return{};let t=JSON.parse(e);if(!t||typeof t!=`object`||Array.isArray(t))return{};let n={};for(let[e,r]of Object.entries(t))typeof r==`number`&&Number.isInteger(r)&&(n[e]=r);return n}catch{return{}}}function lt(e){try{sessionStorage.setItem(st,JSON.stringify(e))}catch{}}function ut(e){return ct()[e]}function dt(e,t){let n=ct();n[e]!==t&&(n[e]=t,lt(n))}function ft(e,t){let n=ct();n[e]===t&&(delete n[e],lt(n))}function pt({repo:e,panes:t,replayLeft:n,active:r,setActive:i,zoomed:a,zoom:o,viewsRef:s,panelRef:c,size:l,mode:u}){(0,E.useEffect)(()=>{if(Be(a,t))return;let o=de(r,t,n,ut(e));o!==null&&(i(o),dt(e,o))},[r,t,n,e,a,i]),(0,E.useEffect)(()=>{o!==null&&o!==r&&(i(o),dt(e,o))},[o,r,e,i]);let f=(0,E.useRef)(null);(0,E.useEffect)(()=>{let e=r===null?void 0:s.current.get(r),t=e?.term.element,n=d(r,!!t&&t.clientHeight>0,f.current);if(!n.focus||!e){f.current=n.held;return}let i=fe(document.activeElement,c.current);h(i)&&(e.term.focus(),f.current=n.held)},[r,t,l,u,o,s,c])}var mt=60;function ht({panes:e,size:t,zoomed:n,mode:r,screenScale:i,socketRef:a,viewsRef:o,bodyRefs:s,ptySizesRef:c,desiredSizesRef:l,askedSizesRef:u,ownsSize:d,layoutPending:f,keyboardOpen:p,refitEpoch:m}){let h=(0,E.useRef)(null),g=(0,E.useRef)(m),_=(0,E.useCallback)(()=>{for(let[e,t]of o.current){let n=s.current.get(e);if(!n||n.clientHeight===0||n.clientWidth===0)continue;let r=l.current.get(e)??{rows:t.term.rows,cols:t.term.cols},i=u.current.get(e);i&&i.rows===r.rows&&i.cols===r.cols||xe(a.current,{type:`resize`,pane:e,rows:r.rows,cols:r.cols})&&u.current.set(e,r)}},[a,o,s,u,l]);(0,E.useEffect)(()=>{if(!p){g.current!==m&&(u.current.clear(),g.current=m);for(let[e,t]of o.current){let n=s.current.get(e);if(n&&n.clientHeight!==0&&n.clientWidth!==0){if(!d||f){let n=c.current.get(e);n?(t.term.resize(n.cols,n.rows),l.current.set(e,n)):t.term.resize(t.term.cols,t.term.rows)}else t.term.resize(t.term.cols,t.term.rows),t.fit.fit(),l.current.set(e,{rows:t.term.rows,cols:t.term.cols})}}if(d&&!f)return h.current&&clearTimeout(h.current),h.current=setTimeout(_,mt),()=>{h.current&&clearTimeout(h.current)}}},[e,n,r,i,m,t,_,o,s,c,l,u,d,f,p])}var gt=Object.defineProperty,_t=Object.getOwnPropertyDescriptor,vt=(e,t)=>{for(var n in t)gt(e,n,{get:t[n],enumerable:!0})},O=(e,t,n,r)=>{for(var i=r>1?void 0:r?_t(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&>(t,n,i),i},k=(e,t)=>(n,r)=>t(n,r,e),yt=`Terminal input`,bt={get:()=>yt,set:e=>yt=e},xt=`Too much output to announce, navigate to rows manually to read`,St={get:()=>xt,set:e=>xt=e};function Ct(e){return e.replace(/\r?\n/g,`\r`)}function wt(e,t){return t?`\x1B[200~`+e+`\x1B[201~`:e}function Tt(e,t){e.clipboardData&&e.clipboardData.setData(`text/plain`,t.selectionText),e.preventDefault()}function Et(e,t,n,r){e.stopPropagation(),e.clipboardData&&Dt(e.clipboardData.getData(`text/plain`),t,n,r)}function Dt(e,t,n,r){e=Ct(e),e=wt(e,n.decPrivateModes.bracketedPasteMode&&r.rawOptions.ignoreBracketedPasteMode!==!0),n.triggerDataEvent(e,!0),t.value=``}function Ot(e,t,n){let r=n.getBoundingClientRect(),i=e.clientX-r.left-10,a=e.clientY-r.top-10;t.style.width=`20px`,t.style.height=`20px`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.zIndex=`1000`,t.focus()}function kt(e,t,n,r,i){Ot(e,t,n),i&&r.rightClickSelect(e),t.value=r.selectionText,t.select()}function At(e){return e>65535?(e-=65536,String.fromCharCode((e>>10)+55296)+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)}function jt(e,t=0,n=e.length){let r=``;for(let i=t;i65535?(t-=65536,r+=String.fromCharCode((t>>10)+55296)+String.fromCharCode(t%1024+56320)):r+=String.fromCharCode(t)}return r}var Mt=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i=0;if(this._interim){let n=e.charCodeAt(i++);56320<=n&&n<=57343?t[r++]=(this._interim-55296)*1024+n-56320+65536:(t[r++]=this._interim,t[r++]=n),this._interim=0}for(let a=i;a=n)return this._interim=i,r;let o=e.charCodeAt(a);56320<=o&&o<=57343?t[r++]=(i-55296)*1024+o-56320+65536:(t[r++]=i,t[r++]=o)}else i!==65279&&(t[r++]=i)}return r}},Nt=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i,a,o,s,c=0,l=0;if(this.interim[0]){let i=!1,a=this.interim[0];a&=(a&224)==192?31:(a&240)==224?15:7;let o=0,s;for(;(s=this.interim[++o]&63)&&o<4;)a<<=6,a|=s;let c=(this.interim[0]&224)==192?2:(this.interim[0]&240)==224?3:4,u=c-o;for(;l=n)return 0;if(s=e[l++],(s&192)!=128){l--,i=!0;break}this.interim[o++]=s,a<<=6,a|=s&63}i||(c===2?a<128?l--:t[r++]=a:c===3?a<2048||a>=55296&&a<=57343||a===65279||(t[r++]=a):a<65536||a>1114111||(t[r++]=a)),this.interim.fill(0)}let u=n-4,d=l;for(;d=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128||(c=(i&31)<<6|a&63,c<128)){d--;continue}t[r++]=c}else if((i&240)==224){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(c=(i&15)<<12|(a&63)<<6|o&63,c<2048||c>=55296&&c<=57343||c===65279)continue;t[r++]=c}else if((i&248)==240){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,this.interim[2]=o,r;if(s=e[d++],(s&192)!=128){d--;continue}if(c=(i&7)<<18|(a&63)<<12|(o&63)<<6|s&63,c<65536||c>1114111)continue;t[r++]=c}}return r}},Pt=``,Ft=` `,It=class e{constructor(){this.fg=0,this.bg=0,this.extended=new Lt}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)==50331648}isBgRGB(){return(this.bg&50331648)==50331648}isFgPalette(){return(this.fg&50331648)==16777216||(this.fg&50331648)==33554432}isBgPalette(){return(this.bg&50331648)==16777216||(this.bg&50331648)==33554432}isFgDefault(){return!(this.fg&50331648)}isBgDefault(){return!(this.bg&50331648)}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==16777216||(this.extended.underlineColor&50331648)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?!(this.extended.underlineColor&50331648):this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},Lt=class e{constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new e(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}},Rt=class e extends It{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new Lt,this.combinedData=``}static fromCharData(t){let n=new e;return n.setFromCharData(t),n}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?At(this.content&2097151):``}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let n=e[1].charCodeAt(0);if(55296<=n&&n<=56319){let r=e[1].charCodeAt(1);56320<=r&&r<=57343?this.content=(n-55296)*1024+r-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},zt=`di$target`,Bt=`di$dependencies`,Vt=new Map;function Ht(e){return e[Bt]||[]}function A(e){if(Vt.has(e))return Vt.get(e);let t=function(e,n,r){if(arguments.length!==3)throw Error(`@IServiceName-decorator can only be used to decorate a parameter`);Ut(t,e,r)};return t._id=e,Vt.set(e,t),t}function Ut(e,t,n){t[zt]===t?t[Bt].push({id:e,index:n}):(t[Bt]=[{id:e,index:n}],t[zt]=t)}var Wt=A(`BufferService`),Gt=A(`CoreMouseService`),Kt=A(`CoreService`),qt=A(`CharsetService`),Jt=A(`InstantiationService`),Yt=A(`LogService`),Xt=A(`OptionsService`),Zt=A(`OscLinkService`),Qt=A(`UnicodeService`),$t=A(`DecorationService`),en=class{constructor(e,t,n){this._bufferService=e,this._optionsService=t,this._oscLinkService=n}provideLinks(e,t){let n=this._bufferService.buffer.lines.get(e-1);if(!n){t(void 0);return}let r=[],i=this._optionsService.rawOptions.linkHandler,a=new Rt,o=n.getTrimmedLength(),s=-1,c=-1,l=!1;for(let t=0;ti?i.activate(e,t,a):tn(e,t),hover:(e,t)=>i?.hover?.(e,t,a),leave:(e,t)=>i?.leave?.(e,t,a)})}l=!1,a.hasExtendedAttrs()&&a.extended.urlId?(c=t,s=a.extended.urlId):(c=-1,s=-1)}}t(r)}};en=O([k(0,Wt),k(1,Xt),k(2,Zt)],en);function tn(e,t){if(confirm(`Do you want to navigate to ${t}? - -WARNING: This link could potentially be dangerous`)){let e=window.open();if(e){try{e.opener=null}catch{}e.location.href=t}else console.warn(`Opening link blocked as opener could not be cleared`)}}var nn=A(`CharSizeService`),rn=A(`CoreBrowserService`),an=A(`MouseService`),on=A(`RenderService`),sn=A(`SelectionService`),cn=A(`CharacterJoinerService`),ln=A(`ThemeService`),un=A(`LinkProviderService`),dn=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?_n.isErrorNoTelemetry(e)?new _n(e.message+` - -`+e.stack):Error(e.message+` - -`+e.stack):e},0)}}addListener(e){return this.listeners.push(e),()=>{this._removeListener(e)}}emit(e){this.listeners.forEach(t=>{t(e)})}_removeListener(e){this.listeners.splice(this.listeners.indexOf(e),1)}setUnexpectedErrorHandler(e){this.unexpectedErrorHandler=e}getUnexpectedErrorHandler(){return this.unexpectedErrorHandler}onUnexpectedError(e){this.unexpectedErrorHandler(e),this.emit(e)}onUnexpectedExternalError(e){this.unexpectedErrorHandler(e)}};function fn(e){mn(e)||dn.onUnexpectedError(e)}var pn=`Canceled`;function mn(e){return e instanceof hn||e instanceof Error&&e.name===pn&&e.message===pn}var hn=class extends Error{constructor(){super(pn),this.name=this.message}};function gn(e){return Error(e?`Illegal argument: ${e}`:`Illegal argument`)}var _n=class e extends Error{constructor(e){super(e),this.name=`CodeExpectedError`}static fromError(t){if(t instanceof e)return t;let n=new e;return n.message=t.message,n.stack=t.stack,n}static isErrorNoTelemetry(e){return e.name===`CodeExpectedError`}},vn=class e extends Error{constructor(t){super(t||`An unexpected bug occurred.`),Object.setPrototypeOf(this,e.prototype)}};function yn(e,t=0){return e[e.length-(1+t)]}var bn;(e=>{function t(e){return e<0}e.isLessThan=t;function n(e){return e<=0}e.isLessThanOrEqual=n;function r(e){return e>0}e.isGreaterThan=r;function i(e){return e===0}e.isNeitherLessOrGreaterThan=i,e.greaterThan=1,e.lessThan=-1,e.neitherLessOrGreaterThan=0})(bn||={});var xn=class e{constructor(e){this.iterate=e}forEach(e){this.iterate(t=>(e(t),!0))}toArray(){let e=[];return this.iterate(t=>(e.push(t),!0)),e}filter(t){return new e(e=>this.iterate(n=>!t(n)||e(n)))}map(t){return new e(e=>this.iterate(n=>e(t(n))))}some(e){let t=!1;return this.iterate(n=>(t=e(n),!t)),t}findFirst(e){let t;return this.iterate(n=>!e(n)||(t=n,!1)),t}findLast(e){let t;return this.iterate(n=>(e(n)&&(t=n),!0)),t}findLastMaxBy(e){let t,n=!0;return this.iterate(r=>((n||bn.isGreaterThan(e(r,t)))&&(n=!1,t=r),!0)),t}};xn.empty=new xn(e=>{});function Sn(e,t){let n=this,r=!1,i;return function(){if(r)return i;if(r=!0,t)try{i=e.apply(n,arguments)}finally{t()}else i=e.apply(n,arguments);return i}}var Cn;(e=>{function t(e){return e&&typeof e==`object`&&typeof e[Symbol.iterator]==`function`}e.is=t;let n=Object.freeze([]);function r(){return n}e.empty=r;function*i(e){yield e}e.single=i;function a(e){return t(e)?e:i(e)}e.wrap=a;function o(e){return e||n}e.from=o;function*s(e){for(let t=e.length-1;t>=0;t--)yield e[t]}e.reverse=s;function c(e){return!e||e[Symbol.iterator]().next().done===!0}e.isEmpty=c;function l(e){return e[Symbol.iterator]().next().value}e.first=l;function u(e,t){let n=0;for(let r of e)if(t(r,n++))return!0;return!1}e.some=u;function d(e,t){for(let n of e)if(t(n))return n}e.find=d;function*f(e,t){for(let n of e)t(n)&&(yield n)}e.filter=f;function*p(e,t){let n=0;for(let r of e)yield t(r,n++)}e.map=p;function*m(e,t){let n=0;for(let r of e)yield*t(r,n++)}e.flatMap=m;function*h(...e){for(let t of e)yield*t}e.concat=h;function g(e,t,n){let r=n;for(let n of e)r=t(r,n);return r}e.reduce=g;function*_(e,t,n=e.length){for(t<0&&(t+=e.length),n<0?n+=e.length:n>e.length&&(n=e.length);t1)throw AggregateError(t,`Encountered errors while disposing of store`);return Array.isArray(e)?[]:e}if(e)return e.dispose(),e}function An(...e){return j(()=>kn(e))}function j(e){let t=Tn({dispose:Sn(()=>{En(t),e()})});return t}var jn=class e{constructor(){this._toDispose=new Set,this._isDisposed=!1,Tn(this)}dispose(){this._isDisposed||(En(this),this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(this._toDispose.size!==0)try{kn(this._toDispose)}finally{this._toDispose.clear()}}add(t){if(!t)return t;if(t===this)throw Error(`Cannot register a disposable on itself!`);return Dn(t,this),this._isDisposed?e.DISABLE_DISPOSED_WARNING||console.warn(Error(`Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!`).stack):this._toDispose.add(t),t}delete(e){if(e){if(e===this)throw Error(`Cannot dispose a disposable on itself!`);this._toDispose.delete(e),e.dispose()}}deleteAndLeak(e){e&&this._toDispose.has(e)&&(this._toDispose.delete(e),Dn(e,null))}};jn.DISABLE_DISPOSED_WARNING=!1;var Mn=jn,M=class{constructor(){this._store=new Mn,Tn(this),Dn(this._store,this)}dispose(){En(this),this._store.dispose()}_register(e){if(e===this)throw Error(`Cannot register a disposable on itself!`);return this._store.add(e)}};M.None=Object.freeze({dispose(){}});var Nn=class{constructor(){this._isDisposed=!1,Tn(this)}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),e&&Dn(e,this),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,En(this),this._value?.dispose(),this._value=void 0}clearAndLeak(){let e=this._value;return this._value=void 0,e&&Dn(e,null),e}},Pn=typeof window==`object`?window:globalThis,Fn=class e{constructor(t){this.element=t,this.next=e.Undefined,this.prev=e.Undefined}};Fn.Undefined=new Fn(void 0);var N=Fn,In=class{constructor(){this._first=N.Undefined,this._last=N.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===N.Undefined}clear(){let e=this._first;for(;e!==N.Undefined;){let t=e.next;e.prev=N.Undefined,e.next=N.Undefined,e=t}this._first=N.Undefined,this._last=N.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){let n=new N(e);if(this._first===N.Undefined)this._first=n,this._last=n;else if(t){let e=this._last;this._last=n,n.prev=e,e.next=n}else{let e=this._first;this._first=n,n.next=e,e.prev=n}this._size+=1;let r=!1;return()=>{r||(r=!0,this._remove(n))}}shift(){if(this._first!==N.Undefined){let e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==N.Undefined){let e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==N.Undefined&&e.next!==N.Undefined){let t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===N.Undefined&&e.next===N.Undefined?(this._first=N.Undefined,this._last=N.Undefined):e.next===N.Undefined?(this._last=this._last.prev,this._last.next=N.Undefined):e.prev===N.Undefined&&(this._first=this._first.next,this._first.prev=N.Undefined);--this._size}*[Symbol.iterator](){let e=this._first;for(;e!==N.Undefined;)yield e.element,e=e.next}},Ln=globalThis.performance&&typeof globalThis.performance.now==`function`,Rn=class e{static create(t){return new e(t)}constructor(e){this._now=Ln&&e===!1?Date.now:globalThis.performance.now.bind(globalThis.performance),this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}reset(){this._startTime=this._now(),this._stopTime=-1}elapsed(){return this._stopTime===-1?this._now()-this._startTime:this._stopTime-this._startTime}},P;(e=>{e.None=()=>M.None;function t(e,t){return d(e,()=>{},0,void 0,!0,void 0,t)}e.defer=t;function n(e){return(t,n=null,r)=>{let i=!1,a;return a=e(e=>{if(!i)return a?a.dispose():i=!0,t.call(n,e)},null,r),i&&a.dispose(),a}}e.once=n;function r(e,t,n){return l((n,r=null,i)=>e(e=>n.call(r,t(e)),null,i),n)}e.map=r;function i(e,t,n){return l((n,r=null,i)=>e(e=>{t(e),n.call(r,e)},null,i),n)}e.forEach=i;function a(e,t,n){return l((n,r=null,i)=>e(e=>t(e)&&n.call(r,e),null,i),n)}e.filter=a;function o(e){return e}e.signal=o;function s(...e){return(t,n=null,r)=>u(An(...e.map(e=>e(e=>t.call(n,e)))),r)}e.any=s;function c(e,t,n,i){let a=n;return r(e,e=>(a=t(a,e),a),i)}e.reduce=c;function l(e,t){let n,r=new F({onWillAddFirstListener(){n=e(r.fire,r)},onDidRemoveLastListener(){n?.dispose()}});return t?.add(r),r.event}function u(e,t){return t instanceof Array?t.push(e):t&&t.add(e),e}function d(e,t,n=100,r=!1,i=!1,a,o){let s,c,l,u=0,d,f=new F({leakWarningThreshold:a,onWillAddFirstListener(){s=e(e=>{u++,c=t(c,e),r&&!l&&(f.fire(c),c=void 0),d=()=>{let e=c;c=void 0,l=void 0,(!r||u>1)&&f.fire(e),u=0},typeof n==`number`?(clearTimeout(l),l=setTimeout(d,n)):l===void 0&&(l=0,queueMicrotask(d))})},onWillRemoveListener(){i&&u>0&&d?.()},onDidRemoveLastListener(){d=void 0,s.dispose()}});return o?.add(f),f.event}e.debounce=d;function f(t,n=0,r){return e.debounce(t,(e,t)=>e?(e.push(t),e):[t],n,void 0,!0,void 0,r)}e.accumulate=f;function p(e,t=(e,t)=>e===t,n){let r=!0,i;return a(e,e=>{let n=r||!t(e,i);return r=!1,i=e,n},n)}e.latch=p;function m(t,n,r){return[e.filter(t,n,r),e.filter(t,e=>!n(e),r)]}e.split=m;function h(e,t=!1,n=[],r){let i=n.slice(),a=e(e=>{i?i.push(e):s.fire(e)});r&&r.add(a);let o=()=>{i?.forEach(e=>s.fire(e)),i=null},s=new F({onWillAddFirstListener(){a||(a=e(e=>s.fire(e)),r&&r.add(a))},onDidAddFirstListener(){i&&(t?setTimeout(o):o())},onDidRemoveLastListener(){a&&a.dispose(),a=null}});return r&&r.add(s),s.event}e.buffer=h;function g(e,t){return(n,r,i)=>{let a=t(new v);return e(function(e){let t=a.evaluate(e);t!==_&&n.call(r,t)},void 0,i)}}e.chain=g;let _=Symbol(`HaltChainable`);class v{constructor(){this.steps=[]}map(e){return this.steps.push(e),this}forEach(e){return this.steps.push(t=>(e(t),t)),this}filter(e){return this.steps.push(t=>e(t)?t:_),this}reduce(e,t){let n=t;return this.steps.push(t=>(n=e(n,t),n)),this}latch(e=(e,t)=>e===t){let t=!0,n;return this.steps.push(r=>{let i=t||!e(r,n);return t=!1,n=r,i?r:_}),this}evaluate(e){for(let t of this.steps)if(e=t(e),e===_)break;return e}}function ee(e,t,n=e=>e){let r=(...e)=>i.fire(n(...e)),i=new F({onWillAddFirstListener:()=>e.on(t,r),onDidRemoveLastListener:()=>e.removeListener(t,r)});return i.event}e.fromNodeEventEmitter=ee;function y(e,t,n=e=>e){let r=(...e)=>i.fire(n(...e)),i=new F({onWillAddFirstListener:()=>e.addEventListener(t,r),onDidRemoveLastListener:()=>e.removeEventListener(t,r)});return i.event}e.fromDOMEventEmitter=y;function te(e){return new Promise(t=>n(e)(t))}e.toPromise=te;function b(e){let t=new F;return e.then(e=>{t.fire(e)},()=>{t.fire(void 0)}).finally(()=>{t.dispose()}),t.event}e.fromPromise=b;function ne(e,t){return e(e=>t.fire(e))}e.forward=ne;function re(e,t,n){return t(n),e(e=>t(e))}e.runAndSubscribe=re;class x{constructor(e,t){this._observable=e,this._counter=0,this._hasChanged=!1;let n={onWillAddFirstListener:()=>{e.addObserver(this)},onDidRemoveLastListener:()=>{e.removeObserver(this)}};this.emitter=new F(n),t&&t.add(this.emitter)}beginUpdate(e){this._counter++}handlePossibleChange(e){}handleChange(e,t){this._hasChanged=!0}endUpdate(e){this._counter--,this._counter===0&&(this._observable.reportChanges(),this._hasChanged&&(this._hasChanged=!1,this.emitter.fire(this._observable.get())))}}function S(e,t){return new x(e,t).emitter.event}e.fromObservable=S;function C(e){return(t,n,r)=>{let i=0,a=!1,o={beginUpdate(){i++},endUpdate(){i--,i===0&&(e.reportChanges(),a&&(a=!1,t.call(n)))},handlePossibleChange(){},handleChange(){a=!0}};e.addObserver(o),e.reportChanges();let s={dispose(){e.removeObserver(o)}};return r instanceof Mn?r.add(s):Array.isArray(r)&&r.push(s),s}}e.fromObservableLight=C})(P||={});var zn=class e{constructor(t){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${t}_${e._idPool++}`,e.all.add(this)}start(e){this._stopWatch=new Rn,this.listenerCount=e}stop(){if(this._stopWatch){let e=this._stopWatch.elapsed();this.durations.push(e),this.elapsedOverall+=e,this.invocationCount+=1,this._stopWatch=void 0}}};zn.all=new Set,zn._idPool=0;var Bn=zn,Vn=-1,Hn=class e{constructor(t,n,r=(e._idPool++).toString(16).padStart(3,`0`)){this._errorHandler=t,this.threshold=n,this.name=r,this._warnCountdown=0}dispose(){this._stacks?.clear()}check(e,t){let n=this.threshold;if(n<=0||t{let t=this._stacks.get(e.value)||0;this._stacks.set(e.value,t-1)}}getMostFrequentStack(){if(!this._stacks)return;let e,t=0;for(let[n,r]of this._stacks)(!e||t0||this._options?.leakWarningThreshold?new Un(e?.onListenerError??fn,this._options?.leakWarningThreshold??Vn):void 0,this._perfMon=this._options?._profName?new Bn(this._options._profName):void 0,this._deliveryQueue=this._options?.deliveryQueue}dispose(){this._disposed||(this._disposed=!0,this._deliveryQueue?.current===this&&this._deliveryQueue.reset(),this._listeners&&(this._listeners=void 0,this._size=0),this._options?.onDidRemoveLastListener?.(),this._leakageMon?.dispose())}get event(){return this._event??=(e,t,n)=>{if(this._leakageMon&&this._size>this._leakageMon.threshold**2){let e=`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;console.warn(e);let t=this._leakageMon.getMostFrequentStack()??[`UNKNOWN stack`,-1],n=new Kn(`${e}. HINT: Stack shows most frequent listener (${t[1]}-times)`,t[0]);return(this._options?.onListenerError||fn)(n),M.None}if(this._disposed)return M.None;t&&(e=e.bind(t));let r=new Jn(e),i;this._leakageMon&&this._size>=Math.ceil(this._leakageMon.threshold*.2)&&(r.stack=Wn.create(),i=this._leakageMon.check(r.stack,this._size+1)),this._listeners?this._listeners instanceof Jn?(this._deliveryQueue??=new Xn,this._listeners=[this._listeners,r]):this._listeners.push(r):(this._options?.onWillAddFirstListener?.(this),this._listeners=r,this._options?.onDidAddFirstListener?.(this)),this._size++;let a=j(()=>{i?.(),this._removeListener(r)});return n instanceof Mn?n.add(a):Array.isArray(n)&&n.push(a),a},this._event}_removeListener(e){if(this._options?.onWillRemoveListener?.(this),!this._listeners)return;if(this._size===1){this._listeners=void 0,this._options?.onDidRemoveLastListener?.(this),this._size=0;return}let t=this._listeners,n=t.indexOf(e);if(n===-1)throw console.log(`disposed?`,this._disposed),console.log(`size?`,this._size),console.log(`arr?`,JSON.stringify(this._listeners)),Error(`Attempted to dispose unknown listener`);this._size--,t[n]=void 0;let r=this._deliveryQueue.current===this;if(this._size*Yn<=t.length){let e=0;for(let n=0;n0}},Xn=class{constructor(){this.i=-1,this.end=0}enqueue(e,t,n){this.i=0,this.end=n,this.current=e,this.value=t}reset(){this.i=this.end,this.current=void 0,this.value=void 0}},Zn=class{constructor(){this.mapWindowIdToZoomLevel=new Map,this._onDidChangeZoomLevel=new F,this.onDidChangeZoomLevel=this._onDidChangeZoomLevel.event,this.mapWindowIdToZoomFactor=new Map,this._onDidChangeFullscreen=new F,this.onDidChangeFullscreen=this._onDidChangeFullscreen.event,this.mapWindowIdToFullScreen=new Map}getZoomLevel(e){return this.mapWindowIdToZoomLevel.get(this.getWindowId(e))??0}setZoomLevel(e,t){if(this.getZoomLevel(t)===e)return;let n=this.getWindowId(t);this.mapWindowIdToZoomLevel.set(n,e),this._onDidChangeZoomLevel.fire(n)}getZoomFactor(e){return this.mapWindowIdToZoomFactor.get(this.getWindowId(e))??1}setZoomFactor(e,t){this.mapWindowIdToZoomFactor.set(this.getWindowId(t),e)}setFullscreen(e,t){if(this.isFullscreen(t)===e)return;let n=this.getWindowId(t);this.mapWindowIdToFullScreen.set(n,e),this._onDidChangeFullscreen.fire(n)}isFullscreen(e){return!!this.mapWindowIdToFullScreen.get(this.getWindowId(e))}getWindowId(e){return e.vscodeWindowId}};Zn.INSTANCE=new Zn;var Qn=Zn;function $n(e,t,n){typeof t==`string`&&(t=e.matchMedia(t)),t.addEventListener(`change`,n)}Qn.INSTANCE.onDidChangeZoomLevel;function er(e){return Qn.INSTANCE.getZoomFactor(e)}Qn.INSTANCE.onDidChangeFullscreen;var tr=typeof navigator==`object`?navigator.userAgent:``,nr=tr.indexOf(`Firefox`)>=0,rr=tr.indexOf(`AppleWebKit`)>=0,ir=tr.indexOf(`Chrome`)>=0,ar=!ir&&tr.indexOf(`Safari`)>=0;tr.indexOf(`Electron/`),tr.indexOf(`Android`);var or=!1;if(typeof Pn.matchMedia==`function`){let e=Pn.matchMedia(`(display-mode: standalone) or (display-mode: window-controls-overlay)`),t=Pn.matchMedia(`(display-mode: fullscreen)`);or=e.matches,$n(Pn,e,({matches:e})=>{or&&t.matches||(or=e)})}function sr(){return or}var cr=`en`,lr=!1,ur=!1,dr=!1,fr=!1,pr=!1,mr=cr,hr,gr=globalThis,_r;typeof gr.vscode<`u`&&typeof gr.vscode.process<`u`?_r=gr.vscode.process:typeof process<`u`&&typeof process?.versions?.node==`string`&&(_r=process);var vr=typeof _r?.versions?.electron==`string`&&_r?.type===`renderer`;if(typeof _r==`object`){lr=_r.platform===`win32`,ur=_r.platform===`darwin`,dr=_r.platform===`linux`,dr&&_r.env.SNAP&&_r.env.SNAP_REVISION,_r.env.CI||_r.env.BUILD_ARTIFACTSTAGINGDIRECTORY,mr=cr;let e=_r.env.VSCODE_NLS_CONFIG;if(e)try{let t=JSON.parse(e);t.userLocale,t.osLocale,mr=t.resolvedLanguage||cr,t.languagePack?.translationsConfigFile}catch{}fr=!0}else typeof navigator==`object`&&!vr?(hr=navigator.userAgent,lr=hr.indexOf(`Windows`)>=0,ur=hr.indexOf(`Macintosh`)>=0,(hr.indexOf(`Macintosh`)>=0||hr.indexOf(`iPad`)>=0||hr.indexOf(`iPhone`)>=0)&&navigator.maxTouchPoints&&navigator.maxTouchPoints,dr=hr.indexOf(`Linux`)>=0,hr?.indexOf(`Mobi`),pr=!0,mr=globalThis._VSCODE_NLS_LANGUAGE||cr,navigator.language.toLowerCase()):console.error(`Unable to resolve platform.`);var yr=lr,br=ur,xr=dr,Sr=fr;pr&&typeof gr.importScripts==`function`&&gr.origin;var Cr=hr,wr=mr,Tr;(e=>{function t(){return wr}e.value=t;function n(){return wr.length===2?wr===`en`:wr.length>=3&&wr[0]===`e`&&wr[1]===`n`&&wr[2]===`-`}e.isDefaultVariant=n;function r(){return wr===`en`}e.isDefault=r})(Tr||={});var Er=typeof gr.postMessage==`function`&&!gr.importScripts;(()=>{if(Er){let e=[];gr.addEventListener(`message`,t=>{if(t.data&&t.data.vscodeScheduleAsyncWork)for(let n=0,r=e.length;n{let r=++t;e.push({id:r,callback:n}),gr.postMessage({vscodeScheduleAsyncWork:r},`*`)}}return e=>setTimeout(e)})();var Dr=!!(Cr&&Cr.indexOf(`Chrome`)>=0);Cr&&Cr.indexOf(`Firefox`),!Dr&&Cr&&Cr.indexOf(`Safari`),Cr&&Cr.indexOf(`Edg/`),Cr&&Cr.indexOf(`Android`);var Or=typeof navigator==`object`?navigator:{};Sr||document.queryCommandSupported&&document.queryCommandSupported(`copy`)||Or&&Or.clipboard&&Or.clipboard.writeText,Sr||Or&&Or.clipboard&&Or.clipboard.readText,Sr||sr()||Or.keyboard,`ontouchstart`in Pn||Or.maxTouchPoints,Pn.PointerEvent&&(`ontouchstart`in Pn||navigator.maxTouchPoints);var kr=class{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(e,t){this._keyCodeToStr[e]=t,this._strToKeyCode[t.toLowerCase()]=e}keyCodeToStr(e){return this._keyCodeToStr[e]}strToKeyCode(e){return this._strToKeyCode[e.toLowerCase()]||0}},Ar=new kr,jr=new kr,Mr=new kr,Nr=Array(230),Pr;(e=>{function t(e){return Ar.keyCodeToStr(e)}e.toString=t;function n(e){return Ar.strToKeyCode(e)}e.fromString=n;function r(e){return jr.keyCodeToStr(e)}e.toUserSettingsUS=r;function i(e){return Mr.keyCodeToStr(e)}e.toUserSettingsGeneral=i;function a(e){return jr.strToKeyCode(e)||Mr.strToKeyCode(e)}e.fromUserSettings=a;function o(e){if(e>=98&&e<=113)return null;switch(e){case 16:return`Up`;case 18:return`Down`;case 15:return`Left`;case 17:return`Right`}return Ar.keyCodeToStr(e)}e.toElectronAccelerator=o})(Pr||={});var Fr=class e{constructor(e,t,n,r,i){this.ctrlKey=e,this.shiftKey=t,this.altKey=n,this.metaKey=r,this.keyCode=i}equals(t){return t instanceof e&&this.ctrlKey===t.ctrlKey&&this.shiftKey===t.shiftKey&&this.altKey===t.altKey&&this.metaKey===t.metaKey&&this.keyCode===t.keyCode}getHashCode(){return`K${this.ctrlKey?`1`:`0`}${this.shiftKey?`1`:`0`}${this.altKey?`1`:`0`}${this.metaKey?`1`:`0`}${this.keyCode}`}isModifierKey(){return this.keyCode===0||this.keyCode===5||this.keyCode===57||this.keyCode===6||this.keyCode===4}toKeybinding(){return new Ir([this])}isDuplicateModifierCase(){return this.ctrlKey&&this.keyCode===5||this.shiftKey&&this.keyCode===4||this.altKey&&this.keyCode===6||this.metaKey&&this.keyCode===57}},Ir=class{constructor(e){if(e.length===0)throw gn(`chords`);this.chords=e}getHashCode(){let e=``;for(let t=0,n=this.chords.length;t{function t(t){return t===e.None||t===e.Cancelled||t instanceof Xr?!0:!t||typeof t!=`object`?!1:typeof t.isCancellationRequested==`boolean`&&typeof t.onCancellationRequested==`function`}e.isCancellationToken=t,e.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:P.None}),e.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:Jr})})(Yr||={});var Xr=class{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?Jr:(this._emitter||=new F,this._emitter.event)}dispose(){this._emitter&&=(this._emitter.dispose(),null)}},Zr=class{constructor(e,t){this._isDisposed=!1,this._token=-1,typeof e==`function`&&typeof t==`number`&&this.setIfNotSet(e,t)}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._token!==-1&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(e,t){if(this._isDisposed)throw new vn(`Calling 'cancelAndSet' on a disposed TimeoutTimer`);this.cancel(),this._token=setTimeout(()=>{this._token=-1,e()},t)}setIfNotSet(e,t){if(this._isDisposed)throw new vn(`Calling 'setIfNotSet' on a disposed TimeoutTimer`);this._token===-1&&(this._token=setTimeout(()=>{this._token=-1,e()},t))}},Qr=class{constructor(){this.disposable=void 0,this.isDisposed=!1}cancel(){this.disposable?.dispose(),this.disposable=void 0}cancelAndSet(e,t,n=globalThis){if(this.isDisposed)throw new vn(`Calling 'cancelAndSet' on a disposed IntervalTimer`);this.cancel();let r=n.setInterval(()=>{e()},t);this.disposable=j(()=>{n.clearInterval(r),this.disposable=void 0})}dispose(){this.cancel(),this.isDisposed=!0}};(function(){typeof globalThis.requestIdleCallback!=`function`||globalThis.cancelIdleCallback})();var $r;(e=>{async function t(e){let t,n=await Promise.all(e.map(e=>e.then(e=>e,e=>{t||=e})));if(typeof t<`u`)throw t;return n}e.settled=t;function n(e){return new Promise(async(t,n)=>{try{await e(t,n)}catch(e){n(e)}})}e.withAsyncBody=n})($r||={});var ei=class e{static fromArray(t){return new e(e=>{e.emitMany(t)})}static fromPromise(t){return new e(async e=>{e.emitMany(await t)})}static fromPromises(t){return new e(async e=>{await Promise.all(t.map(async t=>e.emitOne(await t)))})}static merge(t){return new e(async e=>{await Promise.all(t.map(async t=>{for await(let n of t)e.emitOne(n)}))})}constructor(e,t){this._state=0,this._results=[],this._error=null,this._onReturn=t,this._onStateChanged=new F,queueMicrotask(async()=>{let t={emitOne:e=>this.emitOne(e),emitMany:e=>this.emitMany(e),reject:e=>this.reject(e)};try{await Promise.resolve(e(t)),this.resolve()}catch(e){this.reject(e)}finally{t.emitOne=void 0,t.emitMany=void 0,t.reject=void 0}})}[Symbol.asyncIterator](){let e=0;return{next:async()=>{do{if(this._state===2)throw this._error;if(e(this._onReturn?.(),{done:!0,value:void 0})}}static map(t,n){return new e(async e=>{for await(let r of t)e.emitOne(n(r))})}map(t){return e.map(this,t)}static filter(t,n){return new e(async e=>{for await(let r of t)n(r)&&e.emitOne(r)})}filter(t){return e.filter(this,t)}static coalesce(t){return e.filter(t,e=>!!e)}coalesce(){return e.coalesce(this)}static async toPromise(e){let t=[];for await(let n of e)t.push(n);return t}toPromise(){return e.toPromise(this)}emitOne(e){this._state===0&&(this._results.push(e),this._onStateChanged.fire())}emitMany(e){this._state===0&&(this._results=this._results.concat(e),this._onStateChanged.fire())}resolve(){this._state===0&&(this._state=1,this._onStateChanged.fire())}reject(e){this._state===0&&(this._state=2,this._error=e,this._onStateChanged.fire())}};ei.EMPTY=ei.fromArray([]);function ti(e){return ni(e,0)}function ni(e,t){switch(typeof e){case`object`:return e===null?ri(349,t):Array.isArray(e)?oi(e,t):si(e,t);case`string`:return ai(e,t);case`boolean`:return ii(e,t);case`number`:return ri(e,t);case`undefined`:return ri(937,t);default:return ri(617,t)}}function ri(e,t){return(t<<5)-t+e|0}function ii(e,t){return ri(e?433:863,t)}function ai(e,t){t=ri(149417,t);for(let n=0,r=e.length;nni(t,e),t)}function si(e,t){return t=ri(181387,t),Object.keys(e).sort().reduce((t,n)=>(t=ai(n,t),ni(e[n],t)),t)}var{registerWindow:ci,getWindow:li,getDocument:ui,getWindows:di,getWindowsCount:fi,getWindowId:pi,getWindowById:mi,hasWindow:hi,onDidRegisterWindow:gi,onWillUnregisterWindow:_i,onDidUnregisterWindow:vi}=function(){let e=new Map,t={window:Pn,disposables:new Mn};e.set(Pn.vscodeWindowId,t);let n=new F,r=new F,i=new F;function a(n,r){return(typeof n==`number`?e.get(n):void 0)??(r?t:void 0)}return{onDidRegisterWindow:n.event,onWillUnregisterWindow:i.event,onDidUnregisterWindow:r.event,registerWindow(t){if(e.has(t.vscodeWindowId))return M.None;let a=new Mn,o={window:t,disposables:a.add(new Mn)};return e.set(t.vscodeWindowId,o),a.add(j(()=>{e.delete(t.vscodeWindowId),r.fire(t)})),a.add(I(t,L.BEFORE_UNLOAD,()=>{i.fire(t)})),n.fire(o),a},getWindows(){return e.values()},getWindowsCount(){return e.size},getWindowId(e){return e.vscodeWindowId},hasWindow(t){return e.has(t)},getWindowById:a,getWindow(e){let t=e;if(t?.ownerDocument?.defaultView)return t.ownerDocument.defaultView.window;let n=e;return n?.view?n.view.window:Pn},getDocument(e){return li(e).document}}}(),yi=class{constructor(e,t,n,r){this._node=e,this._type=t,this._handler=n,this._options=r||!1,this._node.addEventListener(this._type,this._handler,this._options)}dispose(){this._handler&&=(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,null)}};function I(e,t,n,r){return new yi(e,t,n,r)}function bi(e,t){return function(n){return t(new Kr(e,n))}}function xi(e){return function(t){return e(new Hr(t))}}var Si=function(e,t,n,r){let i=n;return t===`click`||t===`mousedown`||t===`contextmenu`?i=bi(li(e),n):(t===`keydown`||t===`keypress`||t===`keyup`)&&(i=xi(n)),I(e,t,i,r)},Ci,wi=class extends Qr{constructor(e){super(),this.defaultTarget=e&&li(e)}cancelAndSet(e,t,n){return super.cancelAndSet(e,t,n??this.defaultTarget)}},Ti=class{constructor(e,t=0){this._runner=e,this.priority=t,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(e){fn(e)}}static sort(e,t){return t.priority-e.priority}};(function(){let e=new Map,t=new Map,n=new Map,r=new Map,i=i=>{n.set(i,!1);let a=e.get(i)??[];for(t.set(i,a),e.set(i,[]),r.set(i,!0);a.length>0;)a.sort(Ti.sort),a.shift().execute();r.set(i,!1)};Ci=(t,r,a=0)=>{let o=pi(t),s=new Ti(r,a),c=e.get(o);return c||(c=[],e.set(o,c)),c.push(s),n.get(o)||(n.set(o,!0),t.requestAnimationFrame(()=>i(o))),s}})();var Ei=class e{constructor(e,t){this.width=e,this.height=t}with(t=this.width,n=this.height){return t!==this.width||n!==this.height?new e(t,n):this}static is(e){return typeof e==`object`&&typeof e.height==`number`&&typeof e.width==`number`}static lift(t){return t instanceof e?t:new e(t.width,t.height)}static equals(e,t){return e===t?!0:!e||!t?!1:e.width===t.width&&e.height===t.height}};Ei.None=new Ei(0,0);function Di(e){let t=e.getBoundingClientRect(),n=li(e);return{left:t.left+n.scrollX,top:t.top+n.scrollY,width:t.width,height:t.height}}new class{constructor(){this.mutationObservers=new Map}observe(e,t,n){let r=this.mutationObservers.get(e);r||(r=new Map,this.mutationObservers.set(e,r));let i=ti(n),a=r.get(i);if(a)a.users+=1;else{let o=new F,s=new MutationObserver(e=>o.fire(e));s.observe(e,n);let c=a={users:1,observer:s,onDidMutate:o.event};t.add(j(()=>{--c.users,c.users===0&&(o.dispose(),s.disconnect(),r?.delete(i),r?.size===0&&this.mutationObservers.delete(e))})),r.set(i,a)}return a.onDidMutate}};var L={CLICK:`click`,AUXCLICK:`auxclick`,DBLCLICK:`dblclick`,MOUSE_UP:`mouseup`,MOUSE_DOWN:`mousedown`,MOUSE_OVER:`mouseover`,MOUSE_MOVE:`mousemove`,MOUSE_OUT:`mouseout`,MOUSE_ENTER:`mouseenter`,MOUSE_LEAVE:`mouseleave`,MOUSE_WHEEL:`wheel`,POINTER_UP:`pointerup`,POINTER_DOWN:`pointerdown`,POINTER_MOVE:`pointermove`,POINTER_LEAVE:`pointerleave`,CONTEXT_MENU:`contextmenu`,WHEEL:`wheel`,KEY_DOWN:`keydown`,KEY_PRESS:`keypress`,KEY_UP:`keyup`,LOAD:`load`,BEFORE_UNLOAD:`beforeunload`,UNLOAD:`unload`,PAGE_SHOW:`pageshow`,PAGE_HIDE:`pagehide`,PASTE:`paste`,ABORT:`abort`,ERROR:`error`,RESIZE:`resize`,SCROLL:`scroll`,FULLSCREEN_CHANGE:`fullscreenchange`,WK_FULLSCREEN_CHANGE:`webkitfullscreenchange`,SELECT:`select`,CHANGE:`change`,SUBMIT:`submit`,RESET:`reset`,FOCUS:`focus`,FOCUS_IN:`focusin`,FOCUS_OUT:`focusout`,BLUR:`blur`,INPUT:`input`,STORAGE:`storage`,DRAG_START:`dragstart`,DRAG:`drag`,DRAG_ENTER:`dragenter`,DRAG_LEAVE:`dragleave`,DRAG_OVER:`dragover`,DROP:`drop`,DRAG_END:`dragend`,ANIMATION_START:rr?`webkitAnimationStart`:`animationstart`,ANIMATION_END:rr?`webkitAnimationEnd`:`animationend`,ANIMATION_ITERATION:rr?`webkitAnimationIteration`:`animationiteration`},Oi=class{constructor(e){this.domNode=e,this._maxWidth=``,this._width=``,this._height=``,this._top=``,this._left=``,this._bottom=``,this._right=``,this._paddingTop=``,this._paddingLeft=``,this._paddingBottom=``,this._paddingRight=``,this._fontFamily=``,this._fontWeight=``,this._fontSize=``,this._fontStyle=``,this._fontFeatureSettings=``,this._fontVariationSettings=``,this._textDecoration=``,this._lineHeight=``,this._letterSpacing=``,this._className=``,this._display=``,this._position=``,this._visibility=``,this._color=``,this._backgroundColor=``,this._layerHint=!1,this._contain=`none`,this._boxShadow=``}setMaxWidth(e){let t=ki(e);this._maxWidth!==t&&(this._maxWidth=t,this.domNode.style.maxWidth=this._maxWidth)}setWidth(e){let t=ki(e);this._width!==t&&(this._width=t,this.domNode.style.width=this._width)}setHeight(e){let t=ki(e);this._height!==t&&(this._height=t,this.domNode.style.height=this._height)}setTop(e){let t=ki(e);this._top!==t&&(this._top=t,this.domNode.style.top=this._top)}setLeft(e){let t=ki(e);this._left!==t&&(this._left=t,this.domNode.style.left=this._left)}setBottom(e){let t=ki(e);this._bottom!==t&&(this._bottom=t,this.domNode.style.bottom=this._bottom)}setRight(e){let t=ki(e);this._right!==t&&(this._right=t,this.domNode.style.right=this._right)}setPaddingTop(e){let t=ki(e);this._paddingTop!==t&&(this._paddingTop=t,this.domNode.style.paddingTop=this._paddingTop)}setPaddingLeft(e){let t=ki(e);this._paddingLeft!==t&&(this._paddingLeft=t,this.domNode.style.paddingLeft=this._paddingLeft)}setPaddingBottom(e){let t=ki(e);this._paddingBottom!==t&&(this._paddingBottom=t,this.domNode.style.paddingBottom=this._paddingBottom)}setPaddingRight(e){let t=ki(e);this._paddingRight!==t&&(this._paddingRight=t,this.domNode.style.paddingRight=this._paddingRight)}setFontFamily(e){this._fontFamily!==e&&(this._fontFamily=e,this.domNode.style.fontFamily=this._fontFamily)}setFontWeight(e){this._fontWeight!==e&&(this._fontWeight=e,this.domNode.style.fontWeight=this._fontWeight)}setFontSize(e){let t=ki(e);this._fontSize!==t&&(this._fontSize=t,this.domNode.style.fontSize=this._fontSize)}setFontStyle(e){this._fontStyle!==e&&(this._fontStyle=e,this.domNode.style.fontStyle=this._fontStyle)}setFontFeatureSettings(e){this._fontFeatureSettings!==e&&(this._fontFeatureSettings=e,this.domNode.style.fontFeatureSettings=this._fontFeatureSettings)}setFontVariationSettings(e){this._fontVariationSettings!==e&&(this._fontVariationSettings=e,this.domNode.style.fontVariationSettings=this._fontVariationSettings)}setTextDecoration(e){this._textDecoration!==e&&(this._textDecoration=e,this.domNode.style.textDecoration=this._textDecoration)}setLineHeight(e){let t=ki(e);this._lineHeight!==t&&(this._lineHeight=t,this.domNode.style.lineHeight=this._lineHeight)}setLetterSpacing(e){let t=ki(e);this._letterSpacing!==t&&(this._letterSpacing=t,this.domNode.style.letterSpacing=this._letterSpacing)}setClassName(e){this._className!==e&&(this._className=e,this.domNode.className=this._className)}toggleClassName(e,t){this.domNode.classList.toggle(e,t),this._className=this.domNode.className}setDisplay(e){this._display!==e&&(this._display=e,this.domNode.style.display=this._display)}setPosition(e){this._position!==e&&(this._position=e,this.domNode.style.position=this._position)}setVisibility(e){this._visibility!==e&&(this._visibility=e,this.domNode.style.visibility=this._visibility)}setColor(e){this._color!==e&&(this._color=e,this.domNode.style.color=this._color)}setBackgroundColor(e){this._backgroundColor!==e&&(this._backgroundColor=e,this.domNode.style.backgroundColor=this._backgroundColor)}setLayerHinting(e){this._layerHint!==e&&(this._layerHint=e,this.domNode.style.transform=this._layerHint?`translate3d(0px, 0px, 0px)`:``)}setBoxShadow(e){this._boxShadow!==e&&(this._boxShadow=e,this.domNode.style.boxShadow=e)}setContain(e){this._contain!==e&&(this._contain=e,this.domNode.style.contain=this._contain)}setAttribute(e,t){this.domNode.setAttribute(e,t)}removeAttribute(e){this.domNode.removeAttribute(e)}appendChild(e){this.domNode.appendChild(e.domNode)}removeChild(e){this.domNode.removeChild(e.domNode)}};function ki(e){return typeof e==`number`?`${e}px`:e}function Ai(e){return new Oi(e)}var ji=class{constructor(){this._hooks=new Mn,this._pointerMoveCallback=null,this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(e,t){if(!this.isMonitoring())return;this._hooks.clear(),this._pointerMoveCallback=null;let n=this._onStopCallback;this._onStopCallback=null,e&&n&&n(t)}isMonitoring(){return!!this._pointerMoveCallback}startMonitoring(e,t,n,r,i){this.isMonitoring()&&this.stopMonitoring(!1),this._pointerMoveCallback=r,this._onStopCallback=i;let a=e;try{e.setPointerCapture(t),this._hooks.add(j(()=>{try{e.releasePointerCapture(t)}catch{}}))}catch{a=li(e)}this._hooks.add(I(a,L.POINTER_MOVE,e=>{e.buttons===n?(e.preventDefault(),this._pointerMoveCallback(e)):this.stopMonitoring(!0)})),this._hooks.add(I(a,L.POINTER_UP,e=>this.stopMonitoring(!0)))}};function Mi(e,t,n){let r=null,i=null;if(typeof n.value==`function`?(r=`value`,i=n.value,i.length!==0&&console.warn(`Memoize should only be used in functions with zero parameters`)):typeof n.get==`function`&&(r=`get`,i=n.get),!i)throw Error(`not supported`);let a=`$memoize$${t}`;n[r]=function(...e){return this.hasOwnProperty(a)||Object.defineProperty(this,a,{configurable:!1,enumerable:!1,writable:!1,value:i.apply(this,e)}),this[a]}}var Ni;(e=>(e.Tap=`-xterm-gesturetap`,e.Change=`-xterm-gesturechange`,e.Start=`-xterm-gesturestart`,e.End=`-xterm-gesturesend`,e.Contextmenu=`-xterm-gesturecontextmenu`))(Ni||={});var Pi=class e extends M{constructor(){super(),this.dispatched=!1,this.targets=new In,this.ignoreTargets=new In,this.activeTouches={},this.handle=null,this._lastSetTapCountTime=0,this._register(P.runAndSubscribe(gi,({window:e,disposables:t})=>{t.add(I(e.document,`touchstart`,e=>this.onTouchStart(e),{passive:!1})),t.add(I(e.document,`touchend`,t=>this.onTouchEnd(e,t))),t.add(I(e.document,`touchmove`,e=>this.onTouchMove(e),{passive:!1}))},{window:Pn,disposables:this._store}))}static addTarget(t){return e.isTouchDevice()?(e.INSTANCE||=On(new e),j(e.INSTANCE.targets.push(t))):M.None}static ignoreTarget(t){return e.isTouchDevice()?(e.INSTANCE||=On(new e),j(e.INSTANCE.ignoreTargets.push(t))):M.None}static isTouchDevice(){return`ontouchstart`in Pn||navigator.maxTouchPoints>0}dispose(){this.handle&&=(this.handle.dispose(),null),super.dispose()}onTouchStart(e){let t=Date.now();this.handle&&=(this.handle.dispose(),null);for(let n=0,r=e.targetTouches.length;n=e.HOLD_DELAY&&Math.abs(s.initialPageX-yn(s.rollingPageX))<30&&Math.abs(s.initialPageY-yn(s.rollingPageY))<30){let e=this.newGestureEvent(Ni.Contextmenu,s.initialTarget);e.pageX=yn(s.rollingPageX),e.pageY=yn(s.rollingPageY),this.dispatchEvent(e)}else if(i===1){let e=yn(s.rollingPageX),n=yn(s.rollingPageY),i=yn(s.rollingTimestamps)-s.rollingTimestamps[0],a=e-s.rollingPageX[0],o=n-s.rollingPageY[0],c=[...this.targets].filter(e=>s.initialTarget instanceof Node&&e.contains(s.initialTarget));this.inertia(t,c,r,Math.abs(a)/i,a>0?1:-1,e,Math.abs(o)/i,o>0?1:-1,n)}this.dispatchEvent(this.newGestureEvent(Ni.End,s.initialTarget)),delete this.activeTouches[o.identifier]}this.dispatched&&=(n.preventDefault(),n.stopPropagation(),!1)}newGestureEvent(e,t){let n=document.createEvent(`CustomEvent`);return n.initEvent(e,!1,!0),n.initialTarget=t,n.tapCount=0,n}dispatchEvent(t){if(t.type===Ni.Tap){let n=new Date().getTime(),r=0;r=n-this._lastSetTapCountTime>e.CLEAR_TAP_COUNT_TIME?1:2,this._lastSetTapCountTime=n,t.tapCount=r}else(t.type===Ni.Change||t.type===Ni.Contextmenu)&&(this._lastSetTapCountTime=0);if(t.initialTarget instanceof Node){for(let e of this.ignoreTargets)if(e.contains(t.initialTarget))return;let e=[];for(let n of this.targets)if(n.contains(t.initialTarget)){let r=0,i=t.initialTarget;for(;i&&i!==n;)r++,i=i.parentElement;e.push([r,n])}e.sort((e,t)=>e[0]-t[0]);for(let[n,r]of e)r.dispatchEvent(t),this.dispatched=!0}}inertia(t,n,r,i,a,o,s,c,l){this.handle=Ci(t,()=>{let u=Date.now(),d=u-r,f=0,p=0,m=!0;i+=e.SCROLL_FRICTION*d,s+=e.SCROLL_FRICTION*d,i>0&&(m=!1,f=a*i*d),s>0&&(m=!1,p=c*s*d);let h=this.newGestureEvent(Ni.Change);h.translationX=f,h.translationY=p,n.forEach(e=>e.dispatchEvent(h)),m||this.inertia(t,n,u,i,a,o+f,s,c,l+p)})}onTouchMove(e){let t=Date.now();for(let n=0,r=e.changedTouches.length;n3&&(i.rollingPageX.shift(),i.rollingPageY.shift(),i.rollingTimestamps.shift()),i.rollingPageX.push(r.pageX),i.rollingPageY.push(r.pageY),i.rollingTimestamps.push(t)}this.dispatched&&=(e.preventDefault(),e.stopPropagation(),!1)}};Pi.SCROLL_FRICTION=-.005,Pi.HOLD_DELAY=700,Pi.CLEAR_TAP_COUNT_TIME=400,O([Mi],Pi,`isTouchDevice`,1);var Fi=Pi,Ii=class extends M{onclick(e,t){this._register(I(e,L.CLICK,n=>t(new Kr(li(e),n))))}onmousedown(e,t){this._register(I(e,L.MOUSE_DOWN,n=>t(new Kr(li(e),n))))}onmouseover(e,t){this._register(I(e,L.MOUSE_OVER,n=>t(new Kr(li(e),n))))}onmouseleave(e,t){this._register(I(e,L.MOUSE_LEAVE,n=>t(new Kr(li(e),n))))}onkeydown(e,t){this._register(I(e,L.KEY_DOWN,e=>t(new Hr(e))))}onkeyup(e,t){this._register(I(e,L.KEY_UP,e=>t(new Hr(e))))}oninput(e,t){this._register(I(e,L.INPUT,t))}onblur(e,t){this._register(I(e,L.BLUR,t))}onfocus(e,t){this._register(I(e,L.FOCUS,t))}onchange(e,t){this._register(I(e,L.CHANGE,t))}ignoreGesture(e){return Fi.ignoreTarget(e)}},Li=11,Ri=class extends Ii{constructor(e){super(),this._onActivate=e.onActivate,this.bgDomNode=document.createElement(`div`),this.bgDomNode.className=`arrow-background`,this.bgDomNode.style.position=`absolute`,this.bgDomNode.style.width=e.bgWidth+`px`,this.bgDomNode.style.height=e.bgHeight+`px`,typeof e.top<`u`&&(this.bgDomNode.style.top=`0px`),typeof e.left<`u`&&(this.bgDomNode.style.left=`0px`),typeof e.bottom<`u`&&(this.bgDomNode.style.bottom=`0px`),typeof e.right<`u`&&(this.bgDomNode.style.right=`0px`),this.domNode=document.createElement(`div`),this.domNode.className=e.className,this.domNode.style.position=`absolute`,this.domNode.style.width=Li+`px`,this.domNode.style.height=Li+`px`,typeof e.top<`u`&&(this.domNode.style.top=e.top+`px`),typeof e.left<`u`&&(this.domNode.style.left=e.left+`px`),typeof e.bottom<`u`&&(this.domNode.style.bottom=e.bottom+`px`),typeof e.right<`u`&&(this.domNode.style.right=e.right+`px`),this._pointerMoveMonitor=this._register(new ji),this._register(Si(this.bgDomNode,L.POINTER_DOWN,e=>this._arrowPointerDown(e))),this._register(Si(this.domNode,L.POINTER_DOWN,e=>this._arrowPointerDown(e))),this._pointerdownRepeatTimer=this._register(new wi),this._pointerdownScheduleRepeatTimer=this._register(new Zr)}_arrowPointerDown(e){e.target&&e.target instanceof Element&&(this._onActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._onActivate(),1e3/24,li(e))},200),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),e.preventDefault())}},zi=class e{constructor(e,t,n,r,i,a,o){this._forceIntegerValues=e,this._scrollStateBrand=void 0,this._forceIntegerValues&&(t|=0,n|=0,r|=0,i|=0,a|=0,o|=0),this.rawScrollLeft=r,this.rawScrollTop=o,t<0&&(t=0),r+t>n&&(r=n-t),r<0&&(r=0),i<0&&(i=0),o+i>a&&(o=a-i),o<0&&(o=0),this.width=t,this.scrollWidth=n,this.scrollLeft=r,this.height=i,this.scrollHeight=a,this.scrollTop=o}equals(e){return this.rawScrollLeft===e.rawScrollLeft&&this.rawScrollTop===e.rawScrollTop&&this.width===e.width&&this.scrollWidth===e.scrollWidth&&this.scrollLeft===e.scrollLeft&&this.height===e.height&&this.scrollHeight===e.scrollHeight&&this.scrollTop===e.scrollTop}withScrollDimensions(t,n){return new e(this._forceIntegerValues,typeof t.width<`u`?t.width:this.width,typeof t.scrollWidth<`u`?t.scrollWidth:this.scrollWidth,n?this.rawScrollLeft:this.scrollLeft,typeof t.height<`u`?t.height:this.height,typeof t.scrollHeight<`u`?t.scrollHeight:this.scrollHeight,n?this.rawScrollTop:this.scrollTop)}withScrollPosition(t){return new e(this._forceIntegerValues,this.width,this.scrollWidth,typeof t.scrollLeft<`u`?t.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,typeof t.scrollTop<`u`?t.scrollTop:this.rawScrollTop)}createScrollEvent(e,t){let n=this.width!==e.width,r=this.scrollWidth!==e.scrollWidth,i=this.scrollLeft!==e.scrollLeft,a=this.height!==e.height,o=this.scrollHeight!==e.scrollHeight,s=this.scrollTop!==e.scrollTop;return{inSmoothScrolling:t,oldWidth:e.width,oldScrollWidth:e.scrollWidth,oldScrollLeft:e.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:e.height,oldScrollHeight:e.scrollHeight,oldScrollTop:e.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:n,scrollWidthChanged:r,scrollLeftChanged:i,heightChanged:a,scrollHeightChanged:o,scrollTopChanged:s}}},Bi=class extends M{constructor(e){super(),this._scrollableBrand=void 0,this._onScroll=this._register(new F),this.onScroll=this._onScroll.event,this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new zi(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&=(this._smoothScrolling.dispose(),null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){let n=this._state.withScrollDimensions(e,t);this._setState(n,!!this._smoothScrolling),this._smoothScrolling?.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){let t=this._state.withScrollPosition(e);this._smoothScrolling&&=(this._smoothScrolling.dispose(),null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(this._smoothScrollDuration===0)return this.setScrollPositionNow(e);if(this._smoothScrolling){e={scrollLeft:typeof e.scrollLeft>`u`?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:typeof e.scrollTop>`u`?this._smoothScrolling.to.scrollTop:e.scrollTop};let n=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===n.scrollLeft&&this._smoothScrolling.to.scrollTop===n.scrollTop)return;let r;r=t?new Wi(this._smoothScrolling.from,n,this._smoothScrolling.startTime,this._smoothScrolling.duration):this._smoothScrolling.combine(this._state,n,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=r}else{let t=this._state.withScrollPosition(e);this._smoothScrolling=Wi.start(this._state,t,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}hasPendingScrollAnimation(){return!!this._smoothScrolling}_performSmoothScrolling(){if(!this._smoothScrolling)return;let e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);if(this._setState(t,!0),this._smoothScrolling){if(e.isDone){this._smoothScrolling.dispose(),this._smoothScrolling=null;return}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}}_setState(e,t){let n=this._state;n.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(n,t)))}},Vi=class{constructor(e,t,n){this.scrollLeft=e,this.scrollTop=t,this.isDone=n}};function Hi(e,t){let n=t-e;return function(t){return e+n*Ki(t)}}function Ui(e,t,n){return function(r){return r2.5*n){let r,i;return e{this._domNode?.setClassName(this._visibleClassName)},0))}_hide(e){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode?.setClassName(this._invisibleClassName+(e?` fade`:``)))}},Ji=140,Yi=class extends Ii{constructor(e){super(),this._lazyRender=e.lazyRender,this._host=e.host,this._scrollable=e.scrollable,this._scrollByPage=e.scrollByPage,this._scrollbarState=e.scrollbarState,this._visibilityController=this._register(new qi(e.visibility,`visible scrollbar `+e.extraScrollbarClassName,`invisible scrollbar `+e.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._pointerMoveMonitor=this._register(new ji),this._shouldRender=!0,this.domNode=Ai(document.createElement(`div`)),this.domNode.setAttribute(`role`,`presentation`),this.domNode.setAttribute(`aria-hidden`,`true`),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition(`absolute`),this._register(I(this.domNode.domNode,L.POINTER_DOWN,e=>this._domNodePointerDown(e)))}_createArrow(e){let t=this._register(new Ri(e));this.domNode.domNode.appendChild(t.bgDomNode),this.domNode.domNode.appendChild(t.domNode)}_createSlider(e,t,n,r){this.slider=Ai(document.createElement(`div`)),this.slider.setClassName(`slider`),this.slider.setPosition(`absolute`),this.slider.setTop(e),this.slider.setLeft(t),typeof n==`number`&&this.slider.setWidth(n),typeof r==`number`&&this.slider.setHeight(r),this.slider.setLayerHinting(!0),this.slider.setContain(`strict`),this.domNode.domNode.appendChild(this.slider.domNode),this._register(I(this.slider.domNode,L.POINTER_DOWN,e=>{e.button===0&&(e.preventDefault(),this._sliderPointerDown(e))})),this.onclick(this.slider.domNode,e=>{e.leftButton&&e.stopPropagation()})}_onElementSize(e){return this._scrollbarState.setVisibleSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollSize(e){return this._scrollbarState.setScrollSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollPosition(e){return this._scrollbarState.setScrollPosition(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(e){e.target===this.domNode.domNode&&this._onPointerDown(e)}delegatePointerDown(e){let t=this.domNode.domNode.getClientRects()[0].top,n=t+this._scrollbarState.getSliderPosition(),r=t+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),i=this._sliderPointerPosition(e);n<=i&&i<=r?e.button===0&&(e.preventDefault(),this._sliderPointerDown(e)):this._onPointerDown(e)}_onPointerDown(e){let t,n;if(e.target===this.domNode.domNode&&typeof e.offsetX==`number`&&typeof e.offsetY==`number`)t=e.offsetX,n=e.offsetY;else{let r=Di(this.domNode.domNode);t=e.pageX-r.left,n=e.pageY-r.top}let r=this._pointerDownRelativePosition(t,n);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(r):this._scrollbarState.getDesiredScrollPositionFromOffset(r)),e.button===0&&(e.preventDefault(),this._sliderPointerDown(e))}_sliderPointerDown(e){if(!e.target||!(e.target instanceof Element))return;let t=this._sliderPointerPosition(e),n=this._sliderOrthogonalPointerPosition(e),r=this._scrollbarState.clone();this.slider.toggleClassName(`active`,!0),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{let i=this._sliderOrthogonalPointerPosition(e),a=Math.abs(i-n);if(yr&&a>Ji){this._setDesiredScrollPositionNow(r.getScrollPosition());return}let o=this._sliderPointerPosition(e)-t;this._setDesiredScrollPositionNow(r.getDesiredScrollPositionFromDelta(o))},()=>{this.slider.toggleClassName(`active`,!1),this._host.onDragEnd()}),this._host.onDragStart()}_setDesiredScrollPositionNow(e){let t={};this.writeScrollPosition(t,e),this._scrollable.setScrollPositionNow(t)}updateScrollbarSize(e){this._updateScrollbarSize(e),this._scrollbarState.setScrollbarSize(e),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}},Xi=class e{constructor(e,t,n,r,i,a){this._scrollbarSize=Math.round(t),this._oppositeScrollbarSize=Math.round(n),this._arrowSize=Math.round(e),this._visibleSize=r,this._scrollSize=i,this._scrollPosition=a,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new e(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(e){let t=Math.round(e);return this._visibleSize!==t&&(this._visibleSize=t,this._refreshComputedValues(),!0)}setScrollSize(e){let t=Math.round(e);return this._scrollSize!==t&&(this._scrollSize=t,this._refreshComputedValues(),!0)}setScrollPosition(e){let t=Math.round(e);return this._scrollPosition!==t&&(this._scrollPosition=t,this._refreshComputedValues(),!0)}setScrollbarSize(e){this._scrollbarSize=Math.round(e)}setOppositeScrollbarSize(e){this._oppositeScrollbarSize=Math.round(e)}static _computeValues(e,t,n,r,i){let a=Math.max(0,n-e),o=Math.max(0,a-2*t),s=r>0&&r>n;if(!s)return{computedAvailableSize:Math.round(a),computedIsNeeded:s,computedSliderSize:Math.round(o),computedSliderRatio:0,computedSliderPosition:0};let c=Math.round(Math.max(20,Math.floor(n*o/r))),l=(o-c)/(r-n),u=i*l;return{computedAvailableSize:Math.round(a),computedIsNeeded:s,computedSliderSize:Math.round(c),computedSliderRatio:l,computedSliderPosition:Math.round(u)}}_refreshComputedValues(){let t=e._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=t.computedAvailableSize,this._computedIsNeeded=t.computedIsNeeded,this._computedSliderSize=t.computedSliderSize,this._computedSliderRatio=t.computedSliderRatio,this._computedSliderPosition=t.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(e){if(!this._computedIsNeeded)return 0;let t=e-this._arrowSize-this._computedSliderSize/2;return Math.round(t/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(e){if(!this._computedIsNeeded)return 0;let t=e-this._arrowSize,n=this._scrollPosition;return t0&&Math.abs(e.deltaY)>0)return 1;let n=.5;if(this._isAlmostInt(e.deltaX)&&this._isAlmostInt(e.deltaY)||(n+=.25),t){let r=Math.abs(e.deltaX),i=Math.abs(e.deltaY),a=Math.abs(t.deltaX),o=Math.abs(t.deltaY),s=Math.max(Math.min(r,a),1),c=Math.max(Math.min(i,o),1),l=Math.max(r,a),u=Math.max(i,o);l%s===0&&u%c===0&&(n-=.5)}return Math.min(Math.max(n,0),1)}_isAlmostInt(e){return Math.abs(Math.round(e)-e)<.01}};ra.INSTANCE=new ra;var ia=ra,aa=class extends Ii{constructor(e,t,n){super(),this._onScroll=this._register(new F),this.onScroll=this._onScroll.event,this._onWillScroll=this._register(new F),this.onWillScroll=this._onWillScroll.event,this._options=sa(t),this._scrollable=n,this._register(this._scrollable.onScroll(e=>{this._onWillScroll.fire(e),this._onDidScroll(e),this._onScroll.fire(e)}));let r={onMouseWheel:e=>this._onMouseWheel(e),onDragStart:()=>this._onDragStart(),onDragEnd:()=>this._onDragEnd()};this._verticalScrollbar=this._register(new Qi(this._scrollable,this._options,r)),this._horizontalScrollbar=this._register(new Zi(this._scrollable,this._options,r)),this._domNode=document.createElement(`div`),this._domNode.className=`xterm-scrollable-element `+this._options.className,this._domNode.setAttribute(`role`,`presentation`),this._domNode.style.position=`relative`,this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=Ai(document.createElement(`div`)),this._leftShadowDomNode.setClassName(`shadow`),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=Ai(document.createElement(`div`)),this._topShadowDomNode.setClassName(`shadow`),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=Ai(document.createElement(`div`)),this._topLeftShadowDomNode.setClassName(`shadow`),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode||this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this.onmouseover(this._listenOnDomNode,e=>this._onMouseOver(e)),this.onmouseleave(this._listenOnDomNode,e=>this._onMouseLeave(e)),this._hideTimeout=this._register(new Zr),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}get options(){return this._options}dispose(){this._mouseWheelToDispose=kn(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getOverviewRulerLayoutInfo(){return{parent:this._domNode,insertBefore:this._verticalScrollbar.domNode.domNode}}delegateVerticalScrollbarPointerDown(e){this._verticalScrollbar.delegatePointerDown(e)}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}updateClassName(e){this._options.className=e,br&&(this._options.className+=` mac`),this._domNode.className=`xterm-scrollable-element `+this._options.className}updateOptions(e){typeof e.handleMouseWheel<`u`&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),typeof e.mouseWheelScrollSensitivity<`u`&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),typeof e.fastScrollSensitivity<`u`&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),typeof e.scrollPredominantAxis<`u`&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),typeof e.horizontal<`u`&&(this._options.horizontal=e.horizontal),typeof e.vertical<`u`&&(this._options.vertical=e.vertical),typeof e.horizontalScrollbarSize<`u`&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),typeof e.verticalScrollbarSize<`u`&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),typeof e.scrollByPage<`u`&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}setRevealOnScroll(e){this._revealOnScroll=e}delegateScrollFromMouseWheelEvent(e){this._onMouseWheel(new qr(e))}_setListeningToMouseWheel(e){this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=kn(this._mouseWheelToDispose),e)&&this._mouseWheelToDispose.push(I(this._listenOnDomNode,L.MOUSE_WHEEL,e=>{this._onMouseWheel(new qr(e))},{passive:!1}))}_onMouseWheel(e){if(e.browserEvent?.defaultPrevented)return;let t=ia.INSTANCE;ta&&t.acceptStandardWheelEvent(e);let n=!1;if(e.deltaY||e.deltaX){let r=e.deltaY*this._options.mouseWheelScrollSensitivity,i=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&i+r===0?i=r=0:Math.abs(r)>=Math.abs(i)?i=0:r=0),this._options.flipAxes&&([r,i]=[i,r]);let a=!br&&e.browserEvent&&e.browserEvent.shiftKey;(this._options.scrollYToX||a)&&!i&&(i=r,r=0),e.browserEvent&&e.browserEvent.altKey&&(i*=this._options.fastScrollSensitivity,r*=this._options.fastScrollSensitivity);let o=this._scrollable.getFutureScrollPosition(),s={};if(r){let e=ea*r,t=o.scrollTop-(e<0?Math.floor(e):Math.ceil(e));this._verticalScrollbar.writeScrollPosition(s,t)}if(i){let e=ea*i,t=o.scrollLeft-(e<0?Math.floor(e):Math.ceil(e));this._horizontalScrollbar.writeScrollPosition(s,t)}s=this._scrollable.validateScrollPosition(s),(o.scrollLeft!==s.scrollLeft||o.scrollTop!==s.scrollTop)&&(ta&&this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(s):this._scrollable.setScrollPositionNow(s),n=!0)}let r=n;!r&&this._options.alwaysConsumeMouseWheel&&(r=!0),!r&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(r=!0),r&&(e.preventDefault(),e.stopPropagation())}_onDidScroll(e){this._shouldRender=this._horizontalScrollbar.onDidScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.onDidScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){let e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,n=e.scrollLeft>0,r=n?` left`:``,i=t?` top`:``,a=n||t?` top-left-corner`:``;this._leftShadowDomNode.setClassName(`shadow${r}`),this._topShadowDomNode.setClassName(`shadow${i}`),this._topLeftShadowDomNode.setClassName(`shadow${a}${i}${r}`)}}_onDragStart(){this._isDragging=!0,this._reveal()}_onDragEnd(){this._isDragging=!1,this._hide()}_onMouseLeave(e){this._mouseIsOver=!1,this._hide()}_onMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){!this._mouseIsOver&&!this._isDragging&&(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){!this._mouseIsOver&&!this._isDragging&&this._hideTimeout.cancelAndSet(()=>this._hide(),$i)}},oa=class extends aa{constructor(e,t,n){super(e,t,n)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}};function sa(e){let t={lazyRender:typeof e.lazyRender<`u`&&e.lazyRender,className:typeof e.className<`u`?e.className:``,useShadows:typeof e.useShadows<`u`?e.useShadows:!0,handleMouseWheel:typeof e.handleMouseWheel<`u`?e.handleMouseWheel:!0,flipAxes:typeof e.flipAxes<`u`&&e.flipAxes,consumeMouseWheelIfScrollbarIsNeeded:typeof e.consumeMouseWheelIfScrollbarIsNeeded<`u`&&e.consumeMouseWheelIfScrollbarIsNeeded,alwaysConsumeMouseWheel:typeof e.alwaysConsumeMouseWheel<`u`&&e.alwaysConsumeMouseWheel,scrollYToX:typeof e.scrollYToX<`u`&&e.scrollYToX,mouseWheelScrollSensitivity:typeof e.mouseWheelScrollSensitivity<`u`?e.mouseWheelScrollSensitivity:1,fastScrollSensitivity:typeof e.fastScrollSensitivity<`u`?e.fastScrollSensitivity:5,scrollPredominantAxis:typeof e.scrollPredominantAxis<`u`?e.scrollPredominantAxis:!0,mouseWheelSmoothScroll:typeof e.mouseWheelSmoothScroll<`u`?e.mouseWheelSmoothScroll:!0,arrowSize:typeof e.arrowSize<`u`?e.arrowSize:11,listenOnDomNode:typeof e.listenOnDomNode<`u`?e.listenOnDomNode:null,horizontal:typeof e.horizontal<`u`?e.horizontal:1,horizontalScrollbarSize:typeof e.horizontalScrollbarSize<`u`?e.horizontalScrollbarSize:10,horizontalSliderSize:typeof e.horizontalSliderSize<`u`?e.horizontalSliderSize:0,horizontalHasArrows:typeof e.horizontalHasArrows<`u`&&e.horizontalHasArrows,vertical:typeof e.vertical<`u`?e.vertical:1,verticalScrollbarSize:typeof e.verticalScrollbarSize<`u`?e.verticalScrollbarSize:10,verticalHasArrows:typeof e.verticalHasArrows<`u`&&e.verticalHasArrows,verticalSliderSize:typeof e.verticalSliderSize<`u`?e.verticalSliderSize:0,scrollByPage:typeof e.scrollByPage<`u`&&e.scrollByPage};return t.horizontalSliderSize=typeof e.horizontalSliderSize<`u`?e.horizontalSliderSize:t.horizontalScrollbarSize,t.verticalSliderSize=typeof e.verticalSliderSize<`u`?e.verticalSliderSize:t.verticalScrollbarSize,br&&(t.className+=` mac`),t}var ca=class extends M{constructor(e,t,n,r,i,a,o,s){super(),this._bufferService=n,this._optionsService=o,this._renderService=s,this._onRequestScrollLines=this._register(new F),this.onRequestScrollLines=this._onRequestScrollLines.event,this._isSyncing=!1,this._isHandlingScroll=!1,this._suppressOnScrollHandler=!1;let c=this._register(new Bi({forceIntegerValues:!1,smoothScrollDuration:this._optionsService.rawOptions.smoothScrollDuration,scheduleAtNextAnimationFrame:e=>Ci(r.window,e)}));this._register(this._optionsService.onSpecificOptionChange(`smoothScrollDuration`,()=>{c.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration)})),this._scrollableElement=this._register(new oa(t,{vertical:1,horizontal:2,useShadows:!1,mouseWheelSmoothScroll:!0,...this._getChangeOptions()},c)),this._register(this._optionsService.onMultipleOptionChange([`scrollSensitivity`,`fastScrollSensitivity`,`overviewRuler`],()=>this._scrollableElement.updateOptions(this._getChangeOptions()))),this._register(i.onProtocolChange(e=>{this._scrollableElement.updateOptions({handleMouseWheel:!(e&16)})})),this._scrollableElement.setScrollDimensions({height:0,scrollHeight:0}),this._register(P.runAndSubscribe(a.onChangeColors,()=>{this._scrollableElement.getDomNode().style.backgroundColor=a.colors.background.css})),e.appendChild(this._scrollableElement.getDomNode()),this._register(j(()=>this._scrollableElement.getDomNode().remove())),this._styleElement=r.mainDocument.createElement(`style`),t.appendChild(this._styleElement),this._register(j(()=>this._styleElement.remove())),this._register(P.runAndSubscribe(a.onChangeColors,()=>{this._styleElement.textContent=[`.xterm .xterm-scrollable-element > .scrollbar > .slider {`,` background: ${a.colors.scrollbarSliderBackground.css};`,`}`,`.xterm .xterm-scrollable-element > .scrollbar > .slider:hover {`,` background: ${a.colors.scrollbarSliderHoverBackground.css};`,`}`,`.xterm .xterm-scrollable-element > .scrollbar > .slider.active {`,` background: ${a.colors.scrollbarSliderActiveBackground.css};`,`}`].join(` -`)})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._sync())),this._register(this._scrollableElement.onScroll(e=>this._handleScroll(e)))}scrollLines(e){let t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({reuseAnimation:!0,scrollTop:t.scrollTop+e*this._renderService.dimensions.css.cell.height})}scrollToLine(e,t){t&&(this._latestYDisp=e),this._scrollableElement.setScrollPosition({reuseAnimation:!t,scrollTop:e*this._renderService.dimensions.css.cell.height})}_getChangeOptions(){return{mouseWheelScrollSensitivity:this._optionsService.rawOptions.scrollSensitivity,fastScrollSensitivity:this._optionsService.rawOptions.fastScrollSensitivity,verticalScrollbarSize:this._optionsService.rawOptions.overviewRuler?.width||14}}queueSync(e){e!==void 0&&(this._latestYDisp=e),this._queuedAnimationFrame===void 0&&(this._queuedAnimationFrame=this._renderService.addRefreshCallback(()=>{this._queuedAnimationFrame=void 0,this._sync(this._latestYDisp)}))}_sync(e=this._bufferService.buffer.ydisp){!this._renderService||this._isSyncing||(this._isSyncing=!0,this._suppressOnScrollHandler=!0,this._scrollableElement.setScrollDimensions({height:this._renderService.dimensions.css.canvas.height,scrollHeight:this._renderService.dimensions.css.cell.height*this._bufferService.buffer.lines.length}),this._suppressOnScrollHandler=!1,e!==this._latestYDisp&&this._scrollableElement.setScrollPosition({scrollTop:e*this._renderService.dimensions.css.cell.height}),this._isSyncing=!1)}_handleScroll(e){if(!this._renderService||this._isHandlingScroll||this._suppressOnScrollHandler)return;this._isHandlingScroll=!0;let t=Math.round(e.scrollTop/this._renderService.dimensions.css.cell.height),n=t-this._bufferService.buffer.ydisp;n!==0&&(this._latestYDisp=t,this._onRequestScrollLines.fire(n)),this._isHandlingScroll=!1}};ca=O([k(2,Wt),k(3,rn),k(4,Gt),k(5,ln),k(6,Xt),k(7,on)],ca);var la=class extends M{constructor(e,t,n,r,i){super(),this._screenElement=e,this._bufferService=t,this._coreBrowserService=n,this._decorationService=r,this._renderService=i,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement(`div`),this._container.classList.add(`xterm-decoration-container`),this._screenElement.appendChild(this._container),this._register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this._register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this._register(this._decorationService.onDecorationRemoved(e=>this._removeDecoration(e))),this._register(j(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){this._animationFrame===void 0&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(let e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){let t=this._coreBrowserService.mainDocument.createElement(`div`);t.classList.add(`xterm-decoration`),t.classList.toggle(`xterm-decoration-top-layer`,e?.options?.layer===`top`),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,t.style.top=`${(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height}px`,t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;let n=e.options.x??0;return n&&n>this._bufferService.cols&&(t.style.display=`none`),this._refreshXPosition(e,t),t}_refreshStyle(e){let t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display=`none`,e.onRenderEmitter.fire(e.element));else{let n=this._decorationElements.get(e);n||(n=this._createElement(e),e.element=n,this._decorationElements.set(e,n),this._container.appendChild(n),e.onDispose(()=>{this._decorationElements.delete(e),n.remove()})),n.style.display=this._altBufferIsActive?`none`:`block`,this._altBufferIsActive||(n.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,n.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,n.style.top=`${t*this._renderService.dimensions.css.cell.height}px`,n.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`),e.onRenderEmitter.fire(n)}}_refreshXPosition(e,t=e.element){if(!t)return;let n=e.options.x??0;(e.options.anchor||`left`)===`right`?t.style.right=n?`${n*this._renderService.dimensions.css.cell.width}px`:``:t.style.left=n?`${n*this._renderService.dimensions.css.cell.width}px`:``}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};la=O([k(1,Wt),k(2,rn),k(3,$t),k(4,on)],la);var ua=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(e){if(e.options.overviewRulerOptions){for(let t of this._zones)if(t.color===e.options.overviewRulerOptions.color&&t.position===e.options.overviewRulerOptions.position){if(this._lineIntersectsZone(t,e.marker.line))return;if(this._lineAdjacentToZone(t,e.marker.line,e.options.overviewRulerOptions.position)){this._addLineToZone(t,e.marker.line);return}}if(this._zonePoolIndex=e.startBufferLine&&t<=e.endBufferLine}_lineAdjacentToZone(e,t,n){return t>=e.startBufferLine-this._linePadding[n||`full`]&&t<=e.endBufferLine+this._linePadding[n||`full`]}_addLineToZone(e,t){e.startBufferLine=Math.min(e.startBufferLine,t),e.endBufferLine=Math.max(e.endBufferLine,t)}},da={full:0,left:0,center:0,right:0},fa={full:0,left:0,center:0,right:0},pa={full:0,left:0,center:0,right:0},ma=class extends M{constructor(e,t,n,r,i,a,o,s){super(),this._viewportElement=e,this._screenElement=t,this._bufferService=n,this._decorationService=r,this._renderService=i,this._optionsService=a,this._themeService=o,this._coreBrowserService=s,this._colorZoneStore=new ua,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=this._coreBrowserService.mainDocument.createElement(`canvas`),this._canvas.classList.add(`xterm-decoration-overview-ruler`),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement),this._register(j(()=>this._canvas?.remove()));let c=this._canvas.getContext(`2d`);if(c)this._ctx=c;else throw Error(`Ctx cannot be null`);this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this._register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0))),this._register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?`none`:`block`})),this._register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})),this._register(this._renderService.onRender(()=>{this._containerHeight&&this._containerHeight===this._screenElement.clientHeight||(this._queueRefresh(!0),this._containerHeight=this._screenElement.clientHeight)})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._register(this._optionsService.onSpecificOptionChange(`overviewRuler`,()=>this._queueRefresh(!0))),this._register(this._themeService.onChangeColors(()=>this._queueRefresh())),this._queueRefresh(!0)}get _width(){return this._optionsService.options.overviewRuler?.width||0}_refreshDrawConstants(){let e=Math.floor((this._canvas.width-1)/3),t=Math.ceil((this._canvas.width-1)/3);fa.full=this._canvas.width,fa.left=e,fa.center=t,fa.right=e,this._refreshDrawHeightConstants(),pa.full=1,pa.left=1,pa.center=1+fa.left,pa.right=1+fa.left+fa.center}_refreshDrawHeightConstants(){da.full=Math.round(2*this._coreBrowserService.dpr);let e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);da.left=t,da.center=t,da.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*da.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*da.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*da.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*da.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${this._screenElement.clientHeight}px`,this._canvas.height=Math.round(this._screenElement.clientHeight*this._coreBrowserService.dpr),this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(let e of this._decorationService.decorations)this._colorZoneStore.addDecoration(e);this._ctx.lineWidth=1,this._renderRulerOutline();let e=this._colorZoneStore.zones;for(let t of e)t.position!==`full`&&this._renderColorZone(t);for(let t of e)t.position===`full`&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderRulerOutline(){this._ctx.fillStyle=this._themeService.colors.overviewRulerBorder.css,this._ctx.fillRect(0,0,1,this._canvas.height),this._optionsService.rawOptions.overviewRuler.showTopBorder&&this._ctx.fillRect(1,0,this._canvas.width-1,1),this._optionsService.rawOptions.overviewRuler.showBottomBorder&&this._ctx.fillRect(1,this._canvas.height-1,this._canvas.width-1,this._canvas.height)}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(pa[e.position||`full`],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-da[e.position||`full`]/2),fa[e.position||`full`],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+da[e.position||`full`]))}_queueRefresh(e,t){this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._refreshDecorations(),this._animationFrame=void 0}))}};ma=O([k(2,Wt),k(3,$t),k(4,on),k(5,Xt),k(6,ln),k(7,rn)],ma);var R;(e=>(e.NUL=`\0`,e.SOH=``,e.STX=``,e.ETX=``,e.EOT=``,e.ENQ=``,e.ACK=``,e.BEL=`\x07`,e.BS=`\b`,e.HT=` `,e.LF=` -`,e.VT=`\v`,e.FF=`\f`,e.CR=`\r`,e.SO=``,e.SI=``,e.DLE=``,e.DC1=``,e.DC2=``,e.DC3=``,e.DC4=``,e.NAK=``,e.SYN=``,e.ETB=``,e.CAN=``,e.EM=``,e.SUB=``,e.ESC=`\x1B`,e.FS=``,e.GS=``,e.RS=``,e.US=``,e.SP=` `,e.DEL=``))(R||={});var ha;(e=>(e.PAD=`€`,e.HOP=``,e.BPH=`‚`,e.NBH=`ƒ`,e.IND=`„`,e.NEL=`…`,e.SSA=`†`,e.ESA=`‡`,e.HTS=`ˆ`,e.HTJ=`‰`,e.VTS=`Š`,e.PLD=`‹`,e.PLU=`Œ`,e.RI=``,e.SS2=`Ž`,e.SS3=``,e.DCS=``,e.PU1=`‘`,e.PU2=`’`,e.STS=`“`,e.CCH=`”`,e.MW=`•`,e.SPA=`–`,e.EPA=`—`,e.SOS=`˜`,e.SGCI=`™`,e.SCI=`š`,e.CSI=`›`,e.ST=`œ`,e.OSC=``,e.PM=`ž`,e.APC=`Ÿ`))(ha||={});var ga;(e=>e.ST=`${R.ESC}\\`)(ga||={});var _a=class{constructor(e,t,n,r,i,a){this._textarea=e,this._compositionView=t,this._bufferService=n,this._optionsService=r,this._coreService=i,this._renderService=a,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=``}get isComposing(){return this._isComposing}compositionstart(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent=``,this._dataAlreadySent=``,this._compositionView.classList.add(`active`)}compositionupdate(e){this._compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout(()=>{this._compositionPosition.end=this._textarea.value.length},0)}compositionend(){this._finalizeComposition(!0)}keydown(e){if(this._isComposing||this._isSendingComposition){if(e.keyCode===20||e.keyCode===229||e.keyCode===16||e.keyCode===17||e.keyCode===18)return!1;this._finalizeComposition(!1)}return e.keyCode!==229||(this._handleAnyTextareaChanges(),!1)}_finalizeComposition(e){if(this._compositionView.classList.remove(`active`),this._isComposing=!1,e){let e={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout(()=>{if(this._isSendingComposition){this._isSendingComposition=!1;let t;e.start+=this._dataAlreadySent.length,t=this._isComposing?this._textarea.value.substring(e.start,this._compositionPosition.start):this._textarea.value.substring(e.start),t.length>0&&this._coreService.triggerDataEvent(t,!0)}},0)}else{this._isSendingComposition=!1;let e=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(e,!0)}}_handleAnyTextareaChanges(){let e=this._textarea.value;setTimeout(()=>{if(!this._isComposing){let t=this._textarea.value,n=t.replace(e,``);this._dataAlreadySent=n,t.length>e.length?this._coreService.triggerDataEvent(n,!0):t.lengththis.updateCompositionElements(!0),0)}}};_a=O([k(2,Wt),k(3,Xt),k(4,Kt),k(5,on)],_a);var z=0,B=0,V=0,H=0,va={css:`#00000000`,rgba:0},U;(e=>{function t(e,t,n,r){return r===void 0?`#${xa(e)}${xa(t)}${xa(n)}`:`#${xa(e)}${xa(t)}${xa(n)}${xa(r)}`}e.toCss=t;function n(e,t,n,r=255){return(e<<24|t<<16|n<<8|r)>>>0}e.toRgba=n;function r(t,n,r,i){return{css:e.toCss(t,n,r,i),rgba:e.toRgba(t,n,r,i)}}e.toColor=r})(U||={});var W;(e=>{function t(e,t){if(H=(t.rgba&255)/255,H===1)return{css:t.css,rgba:t.rgba};let n=t.rgba>>24&255,r=t.rgba>>16&255,i=t.rgba>>8&255,a=e.rgba>>24&255,o=e.rgba>>16&255,s=e.rgba>>8&255;return z=a+Math.round((n-a)*H),B=o+Math.round((r-o)*H),V=s+Math.round((i-s)*H),{css:U.toCss(z,B,V),rgba:U.toRgba(z,B,V)}}e.blend=t;function n(e){return(e.rgba&255)==255}e.isOpaque=n;function r(e,t,n){let r=ba.ensureContrastRatio(e.rgba,t.rgba,n);if(r)return U.toColor(r>>24&255,r>>16&255,r>>8&255)}e.ensureContrastRatio=r;function i(e){let t=(e.rgba|255)>>>0;return[z,B,V]=ba.toChannels(t),{css:U.toCss(z,B,V),rgba:t}}e.opaque=i;function a(e,t){return H=Math.round(t*255),[z,B,V]=ba.toChannels(e.rgba),{css:U.toCss(z,B,V,H),rgba:U.toRgba(z,B,V,H)}}e.opacity=a;function o(e,t){return H=e.rgba&255,a(e,H*t/255)}e.multiplyOpacity=o;function s(e){return[e.rgba>>24&255,e.rgba>>16&255,e.rgba>>8&255]}e.toColorRGB=s})(W||={});var G;(e=>{let t,n;try{let e=document.createElement(`canvas`);e.width=1,e.height=1;let r=e.getContext(`2d`,{willReadFrequently:!0});r&&(t=r,t.globalCompositeOperation=`copy`,n=t.createLinearGradient(0,0,1,1))}catch{}function r(e){if(e.match(/#[\da-f]{3,8}/i))switch(e.length){case 4:return z=parseInt(e.slice(1,2).repeat(2),16),B=parseInt(e.slice(2,3).repeat(2),16),V=parseInt(e.slice(3,4).repeat(2),16),U.toColor(z,B,V);case 5:return z=parseInt(e.slice(1,2).repeat(2),16),B=parseInt(e.slice(2,3).repeat(2),16),V=parseInt(e.slice(3,4).repeat(2),16),H=parseInt(e.slice(4,5).repeat(2),16),U.toColor(z,B,V,H);case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}let r=e.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(r)return z=parseInt(r[1]),B=parseInt(r[2]),V=parseInt(r[3]),H=Math.round((r[5]===void 0?1:parseFloat(r[5]))*255),U.toColor(z,B,V,H);if(!t||!n||(t.fillStyle=n,t.fillStyle=e,typeof t.fillStyle!=`string`)||(t.fillRect(0,0,1,1),[z,B,V,H]=t.getImageData(0,0,1,1).data,H!==255))throw Error(`css.toColor: Unsupported css format`);return{rgba:U.toRgba(z,B,V,H),css:e}}e.toColor=r})(G||={});var ya;(e=>{function t(e){return n(e>>16&255,e>>8&255,e&255)}e.relativeLuminance=t;function n(e,t,n){let r=e/255,i=t/255,a=n/255,o=r<=.03928?r/12.92:((r+.055)/1.055)**2.4,s=i<=.03928?i/12.92:((i+.055)/1.055)**2.4,c=a<=.03928?a/12.92:((a+.055)/1.055)**2.4;return o*.2126+s*.7152+c*.0722}e.relativeLuminance2=n})(ya||={});var ba;(e=>{function t(e,t){if(H=(t&255)/255,H===1)return t;let n=t>>24&255,r=t>>16&255,i=t>>8&255,a=e>>24&255,o=e>>16&255,s=e>>8&255;return z=a+Math.round((n-a)*H),B=o+Math.round((r-o)*H),V=s+Math.round((i-s)*H),U.toRgba(z,B,V)}e.blend=t;function n(e,t,n){let a=ya.relativeLuminance(e>>8),o=ya.relativeLuminance(t>>8);if(Sa(a,o)>8));if(sSa(a,ya.relativeLuminance(r>>8))?o:r}return o}let s=i(e,t,n),c=Sa(a,ya.relativeLuminance(s>>8));if(cSa(a,ya.relativeLuminance(i>>8))?s:i}return s}}e.ensureContrastRatio=n;function r(e,t,n){let r=e>>24&255,i=e>>16&255,a=e>>8&255,o=t>>24&255,s=t>>16&255,c=t>>8&255,l=Sa(ya.relativeLuminance2(o,s,c),ya.relativeLuminance2(r,i,a));for(;l0||s>0||c>0);)o-=Math.max(0,Math.ceil(o*.1)),s-=Math.max(0,Math.ceil(s*.1)),c-=Math.max(0,Math.ceil(c*.1)),l=Sa(ya.relativeLuminance2(o,s,c),ya.relativeLuminance2(r,i,a));return(o<<24|s<<16|c<<8|255)>>>0}e.reduceLuminance=r;function i(e,t,n){let r=e>>24&255,i=e>>16&255,a=e>>8&255,o=t>>24&255,s=t>>16&255,c=t>>8&255,l=Sa(ya.relativeLuminance2(o,s,c),ya.relativeLuminance2(r,i,a));for(;l>>0}e.increaseLuminance=i;function a(e){return[e>>24&255,e>>16&255,e>>8&255,e&255]}e.toChannels=a})(ba||={});function xa(e){let t=e.toString(16);return t.length<2?`0`+t:t}function Sa(e,t){return e1){let e=this._getJoinedRanges(r,o,a,t,i);for(let t=0;t1){let e=this._getJoinedRanges(r,o,a,t,i);for(let t=0;t=S,se=w,T=this._workCell;if(f.length>0&&w===f[0][0]&&oe){let r=f.shift(),i=this._isCellInSelection(r[0],t);for(v=r[0]+1;v=r[1],oe?(ae=!0,T=new Ca(this._workCell,e.translateToString(!0,r[0],r[1]),r[1]-r[0]),se=r[1]-1,m=T.getWidth()):S=r[1]}let ce=this._isCellInSelection(w,t),le=n&&w===a,ue=ie&&w>=l&&w<=u,de=!1;this._decorationService.forEachDecorationAtCell(w,t,void 0,e=>{de=!0});let fe=T.getChars()||Ft;if(fe===` `&&(T.isUnderline()||T.isOverline())&&(fe=`\xA0`),x=m*s-c.get(fe,T.isBold(),T.isItalic()),!h)h=this._document.createElement(`span`);else if(g&&(ce&&re||!ce&&!re&&T.bg===ee)&&(ce&&re&&p.selectionForeground||T.fg===y)&&T.extended.ext===te&&ue===b&&x===ne&&!le&&!ae&&!de&&oe){T.isInvisible()?_+=Ft:_+=fe,g++;continue}else g&&(h.textContent=_),h=this._document.createElement(`span`),g=0,_=``;if(ee=T.bg,y=T.fg,te=T.extended.ext,b=ue,ne=x,re=ce,ae&&a>=w&&a<=se&&(a=w),!this._coreService.isCursorHidden&&le&&this._coreService.isCursorInitialized){if(C.push(`xterm-cursor`),this._coreBrowserService.isFocused)o&&C.push(`xterm-cursor-blink`),C.push(r===`bar`?`xterm-cursor-bar`:r===`underline`?`xterm-cursor-underline`:`xterm-cursor-block`);else if(i)switch(i){case`outline`:C.push(`xterm-cursor-outline`);break;case`block`:C.push(`xterm-cursor-block`);break;case`bar`:C.push(`xterm-cursor-bar`);break;case`underline`:C.push(`xterm-cursor-underline`)}}if(T.isBold()&&C.push(`xterm-bold`),T.isItalic()&&C.push(`xterm-italic`),T.isDim()&&C.push(`xterm-dim`),_=T.isInvisible()?Ft:T.getChars()||Ft,T.isUnderline()&&(C.push(`xterm-underline-${T.extended.underlineStyle}`),_===` `&&(_=`\xA0`),!T.isUnderlineColorDefault())){if(T.isUnderlineColorRGB())h.style.textDecorationColor=`rgb(${It.toColorRGB(T.getUnderlineColor()).join(`,`)})`;else{let e=T.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&T.isBold()&&e<8&&(e+=8),h.style.textDecorationColor=p.ansi[e].css}}T.isOverline()&&(C.push(`xterm-overline`),_===` `&&(_=`\xA0`)),T.isStrikethrough()&&C.push(`xterm-strikethrough`),ue&&(h.style.textDecoration=`underline`);let pe=T.getFgColor(),E=T.getFgColorMode(),me=T.getBgColor(),he=T.getBgColorMode(),ge=!!T.isInverse();if(ge){let e=pe;pe=me,me=e;let t=E;E=he,he=t}let _e,ve,D=!1;this._decorationService.forEachDecorationAtCell(w,t,void 0,e=>{e.options.layer!==`top`&&D||(e.backgroundColorRGB&&(he=50331648,me=e.backgroundColorRGB.rgba>>8&16777215,_e=e.backgroundColorRGB),e.foregroundColorRGB&&(E=50331648,pe=e.foregroundColorRGB.rgba>>8&16777215,ve=e.foregroundColorRGB),D=e.options.layer===`top`)}),!D&&ce&&(_e=this._coreBrowserService.isFocused?p.selectionBackgroundOpaque:p.selectionInactiveBackgroundOpaque,me=_e.rgba>>8&16777215,he=50331648,D=!0,p.selectionForeground&&(E=50331648,pe=p.selectionForeground.rgba>>8&16777215,ve=p.selectionForeground)),D&&C.push(`xterm-decoration-top`);let ye;switch(he){case 16777216:case 33554432:ye=p.ansi[me],C.push(`xterm-bg-${me}`);break;case 50331648:ye=U.toColor(me>>16,me>>8&255,me&255),this._addStyle(h,`background-color:#${ja((me>>>0).toString(16),`0`,6)}`);break;default:ge?(ye=p.foreground,C.push(`xterm-bg-257`)):ye=p.background}switch(_e||T.isDim()&&(_e=W.multiplyOpacity(ye,.5)),E){case 16777216:case 33554432:T.isBold()&&pe<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(pe+=8),this._applyMinimumContrast(h,ye,p.ansi[pe],T,_e,void 0)||C.push(`xterm-fg-${pe}`);break;case 50331648:let e=U.toColor(pe>>16&255,pe>>8&255,pe&255);this._applyMinimumContrast(h,ye,e,T,_e,ve)||this._addStyle(h,`color:#${ja(pe.toString(16),`0`,6)}`);break;default:this._applyMinimumContrast(h,ye,p.foreground,T,_e,ve)||ge&&C.push(`xterm-fg-257`)}C.length&&=(h.className=C.join(` `),0),!le&&!ae&&!de&&oe?g++:h.textContent=_,x!==this.defaultSpacing&&(h.style.letterSpacing=`${x}px`),d.push(h),w=se}return h&&g&&(h.textContent=_),d}_applyMinimumContrast(e,t,n,r,i,a){if(this._optionsService.rawOptions.minimumContrastRatio===1||Da(r.getCode()))return!1;let o=this._getContrastCache(r),s;if(!i&&!a&&(s=o.getColor(t.rgba,n.rgba)),s===void 0){let e=this._optionsService.rawOptions.minimumContrastRatio/(r.isDim()?2:1);s=W.ensureContrastRatio(i||t,a||n,e),o.setColor((i||t).rgba,(a||n).rgba,s??null)}return s?(this._addStyle(e,`color:${s.css}`),!0):!1}_getContrastCache(e){return e.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(e,t){e.setAttribute(`style`,`${e.getAttribute(`style`)||``}${t};`)}_isCellInSelection(e,t){let n=this._selectionStart,r=this._selectionEnd;return!n||!r?!1:this._columnSelectMode?n[0]<=r[0]?e>=n[0]&&t>=n[1]&&e=n[1]&&e>=r[0]&&t<=r[1]:t>n[1]&&t=n[0]&&e=n[0]}};Aa=O([k(1,cn),k(2,Xt),k(3,rn),k(4,Kt),k(5,$t),k(6,ln)],Aa);function ja(e,t,n){for(;e.length0&&(this._flat[r]=t),t}let i=e;t&&(i+=`B`),n&&(i+=`I`);let a=this._holey.get(i);if(a===void 0){let r=0;t&&(r|=1),n&&(r|=2),a=this._measure(e,r),a>0&&this._holey.set(i,a)}return a}_measure(e,t){let n=this._measureElements[t];return n.textContent=e.repeat(32),n.offsetWidth/32}},Na=class{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(e,t,n,r=!1){if(this.selectionStart=t,this.selectionEnd=n,!t||!n||t[0]===n[0]&&t[1]===n[1]){this.clear();return}let i=e.buffers.active.ydisp,a=t[1]-i,o=n[1]-i,s=Math.max(a,0),c=Math.min(o,e.rows-1);s>=e.rows||c<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=r,this.viewportStartRow=a,this.viewportEndRow=o,this.viewportCappedStartRow=s,this.viewportCappedEndRow=c,this.startCol=t[0],this.endCol=n[0])}isCellSelected(e,t,n){return this.hasSelection?(n-=e.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?t>=this.startCol&&n>=this.viewportCappedStartRow&&t=this.viewportCappedStartRow&&t>=this.endCol&&n<=this.viewportCappedEndRow:n>this.viewportStartRow&&n=this.startCol&&t=this.startCol):!1}};function Pa(){return new Na}var Fa=`xterm-dom-renderer-owner-`,Ia=`xterm-rows`,La=`xterm-fg-`,Ra=`xterm-bg-`,za=`xterm-focus`,Ba=`xterm-selection`,Va=1,Ha=class extends M{constructor(e,t,n,r,i,a,o,s,c,l,u,d,f,p){super(),this._terminal=e,this._document=t,this._element=n,this._screenElement=r,this._viewportElement=i,this._helperContainer=a,this._linkifier2=o,this._charSizeService=c,this._optionsService=l,this._bufferService=u,this._coreService=d,this._coreBrowserService=f,this._themeService=p,this._terminalClass=Va++,this._rowElements=[],this._selectionRenderModel=Pa(),this.onRequestRedraw=this._register(new F).event,this._rowContainer=this._document.createElement(`div`),this._rowContainer.classList.add(Ia),this._rowContainer.style.lineHeight=`normal`,this._rowContainer.setAttribute(`aria-hidden`,`true`),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement(`div`),this._selectionContainer.classList.add(Ba),this._selectionContainer.setAttribute(`aria-hidden`,`true`),this.dimensions=Oa(),this._updateDimensions(),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._themeService.onChangeColors(e=>this._injectCss(e))),this._injectCss(this._themeService.colors),this._rowFactory=s.createInstance(Aa,document),this._element.classList.add(Fa+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this._register(this._linkifier2.onShowLinkUnderline(e=>this._handleLinkHover(e))),this._register(this._linkifier2.onHideLinkUnderline(e=>this._handleLinkLeave(e))),this._register(j(()=>{this._element.classList.remove(Fa+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new Ma(this._document,this._helperContainer),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){let e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(let e of this._rowElements)e.style.width=`${this.dimensions.css.canvas.width}px`,e.style.height=`${this.dimensions.css.cell.height}px`,e.style.lineHeight=`${this.dimensions.css.cell.height}px`,e.style.overflow=`hidden`;this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement(`style`),this._screenElement.appendChild(this._dimensionsStyleElement));let t=`${this._terminalSelector} .${Ia} span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement(`style`),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .${Ia} { pointer-events: none; color: ${e.foreground.css}; font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`;t+=`${this._terminalSelector} .${Ia} .xterm-dim { color: ${W.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}`;let n=`blink_underline_${this._terminalClass}`,r=`blink_bar_${this._terminalClass}`,i=`blink_block_${this._terminalClass}`;t+=`@keyframes ${n} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${r} { 50% { box-shadow: none; }}`,t+=`@keyframes ${i} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .${Ia}.${za} .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${n} 1s step-end infinite;}${this._terminalSelector} .${Ia}.${za} .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .${Ia}.${za} .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${i} 1s step-end infinite;}${this._terminalSelector} .${Ia} .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .${Ia} .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .${Ia} .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .${Ia} .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .${Ia} .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .${Ba} { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .${Ba} div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .${Ba} div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(let[n,r]of e.ansi.entries())t+=`${this._terminalSelector} .${La}${n} { color: ${r.css}; }${this._terminalSelector} .${La}${n}.xterm-dim { color: ${W.multiplyOpacity(r,.5).css}; }${this._terminalSelector} .${Ra}${n} { background-color: ${r.css}; }`;t+=`${this._terminalSelector} .${La}257 { color: ${W.opaque(e.background).css}; }${this._terminalSelector} .${La}257.xterm-dim { color: ${W.multiplyOpacity(W.opaque(e.background),.5).css}; }${this._terminalSelector} .${Ra}257 { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){let e=this.dimensions.css.cell.width-this._widthCache.get(`W`,!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let e=this._rowElements.length;e<=t;e++){let e=this._document.createElement(`div`);this._rowContainer.appendChild(e),this._rowElements.push(e)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop())}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove(za),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add(za),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleSelectionChanged(e,t,n){if(this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,n),this.renderRows(0,this._bufferService.rows-1),!e||!t||(this._selectionRenderModel.update(this._terminal,e,t,n),!this._selectionRenderModel.hasSelection))return;let r=this._selectionRenderModel.viewportStartRow,i=this._selectionRenderModel.viewportEndRow,a=this._selectionRenderModel.viewportCappedStartRow,o=this._selectionRenderModel.viewportCappedEndRow,s=this._document.createDocumentFragment();if(n){let n=e[0]>t[0];s.appendChild(this._createSelectionElement(a,n?t[0]:e[0],n?e[0]:t[0],o-a+1))}else{let n=r===a?e[0]:0,c=a===i?t[0]:this._bufferService.cols;s.appendChild(this._createSelectionElement(a,n,c));let l=o-a-1;if(s.appendChild(this._createSelectionElement(a+1,0,this._bufferService.cols,l)),a!==o){let e=i===o?t[0]:this._bufferService.cols;s.appendChild(this._createSelectionElement(o,0,e))}}this._selectionContainer.appendChild(s)}_createSelectionElement(e,t,n,r=1){let i=this._document.createElement(`div`),a=t*this.dimensions.css.cell.width,o=this.dimensions.css.cell.width*(n-t);return a+o>this.dimensions.css.canvas.width&&(o=this.dimensions.css.canvas.width-a),i.style.height=`${r*this.dimensions.css.cell.height}px`,i.style.top=`${e*this.dimensions.css.cell.height}px`,i.style.left=`${a}px`,i.style.width=`${o}px`,i}handleCursorMove(){}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(let e of this._rowElements)e.replaceChildren()}renderRows(e,t){let n=this._bufferService.buffer,r=n.ybase+n.y,i=Math.min(n.x,this._bufferService.cols-1),a=this._coreService.decPrivateModes.cursorBlink??this._optionsService.rawOptions.cursorBlink,o=this._coreService.decPrivateModes.cursorStyle??this._optionsService.rawOptions.cursorStyle,s=this._optionsService.rawOptions.cursorInactiveStyle;for(let c=e;c<=t;c++){let e=c+n.ydisp,t=this._rowElements[c],l=n.lines.get(e);if(!t||!l)break;t.replaceChildren(...this._rowFactory.createRow(l,e,e===r,o,s,i,a,this.dimensions.css.cell.width,this._widthCache,-1,-1))}}get _terminalSelector(){return`.${Fa}${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,n,r,i,a){n<0&&(e=0),r<0&&(t=0);let o=this._bufferService.rows-1;n=Math.max(Math.min(n,o),0),r=Math.max(Math.min(r,o),0),i=Math.min(i,this._bufferService.cols);let s=this._bufferService.buffer,c=s.ybase+s.y,l=Math.min(s.x,i-1),u=this._optionsService.rawOptions.cursorBlink,d=this._optionsService.rawOptions.cursorStyle,f=this._optionsService.rawOptions.cursorInactiveStyle;for(let o=n;o<=r;++o){let p=o+s.ydisp,m=this._rowElements[o],h=s.lines.get(p);if(!m||!h)break;m.replaceChildren(...this._rowFactory.createRow(h,p,p===c,d,f,l,u,this.dimensions.css.cell.width,this._widthCache,a?o===n?e:0:-1,a?(o===r?t:i)-1:-1))}}};Ha=O([k(7,Jt),k(8,nn),k(9,Xt),k(10,Wt),k(11,Kt),k(12,rn),k(13,ln)],Ha);var Ua=class extends M{constructor(e,t,n){super(),this._optionsService=n,this.width=0,this.height=0,this._onCharSizeChange=this._register(new F),this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this._register(new Ka(this._optionsService))}catch{this._measureStrategy=this._register(new Ga(e,t,this._optionsService))}this._register(this._optionsService.onMultipleOptionChange([`fontFamily`,`fontSize`],()=>this.measure()))}get hasValidSize(){return this.width>0&&this.height>0}measure(){let e=this._measureStrategy.measure();(e.width!==this.width||e.height!==this.height)&&(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};Ua=O([k(2,Xt)],Ua);var Wa=class extends M{constructor(){super(...arguments),this._result={width:0,height:0}}_validateAndSet(e,t){e!==void 0&&e>0&&t!==void 0&&t>0&&(this._result.width=e,this._result.height=t)}},Ga=class extends Wa{constructor(e,t,n){super(),this._document=e,this._parentElement=t,this._optionsService=n,this._measureElement=this._document.createElement(`span`),this._measureElement.classList.add(`xterm-char-measure-element`),this._measureElement.textContent=`W`.repeat(32),this._measureElement.setAttribute(`aria-hidden`,`true`),this._measureElement.style.whiteSpace=`pre`,this._measureElement.style.fontKerning=`none`,this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}},Ka=class extends Wa{constructor(e){super(),this._optionsService=e,this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext(`2d`);let t=this._ctx.measureText(`W`);if(!(`width`in t&&`fontBoundingBoxAscent`in t&&`fontBoundingBoxDescent`in t))throw Error(`Required font metrics not supported`)}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;let e=this._ctx.measureText(`W`);return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}},qa=class extends M{constructor(e,t,n){super(),this._textarea=e,this._window=t,this.mainDocument=n,this._isFocused=!1,this._cachedIsFocused=void 0,this._screenDprMonitor=this._register(new Ja(this._window)),this._onDprChange=this._register(new F),this.onDprChange=this._onDprChange.event,this._onWindowChange=this._register(new F),this.onWindowChange=this._onWindowChange.event,this._register(this.onWindowChange(e=>this._screenDprMonitor.setWindow(e))),this._register(P.forward(this._screenDprMonitor.onDprChange,this._onDprChange)),this._register(I(this._textarea,`focus`,()=>this._isFocused=!0)),this._register(I(this._textarea,`blur`,()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return this._cachedIsFocused===void 0&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}},Ja=class extends M{constructor(e){super(),this._parentWindow=e,this._windowResizeListener=this._register(new Nn),this._onDprChange=this._register(new F),this.onDprChange=this._onDprChange.event,this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this._register(j(()=>this.clearListener()))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=I(this._parentWindow,`resize`,()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){!this._resolutionMediaMatchList||!this._outerListener||(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}},Ya=class extends M{constructor(){super(),this.linkProviders=[],this._register(j(()=>this.linkProviders.length=0))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{let t=this.linkProviders.indexOf(e);t!==-1&&this.linkProviders.splice(t,1)}}}};function Xa(e,t,n){let r=n.getBoundingClientRect(),i=e.getComputedStyle(n),a=parseInt(i.getPropertyValue(`padding-left`)),o=parseInt(i.getPropertyValue(`padding-top`));return[t.clientX-r.left-a,t.clientY-r.top-o]}function Za(e,t,n,r,i,a,o,s,c){if(!a)return;let l=Xa(e,t,n);if(l)return l[0]=Math.ceil((l[0]+(c?o/2:0))/o),l[1]=Math.ceil(l[1]/s),l[0]=Math.min(Math.max(l[0],1),r+ +!!c),l[1]=Math.min(Math.max(l[1],1),i),l}var Qa=class{constructor(e,t){this._renderService=e,this._charSizeService=t}getCoords(e,t,n,r,i){return Za(window,e,t,n,r,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,i)}getMouseReportCoords(e,t){let n=Xa(window,e,t);if(this._charSizeService.hasValidSize)return n[0]=Math.min(Math.max(n[0],0),this._renderService.dimensions.css.canvas.width-1),n[1]=Math.min(Math.max(n[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(n[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(n[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(n[0]),y:Math.floor(n[1])}}};Qa=O([k(0,on),k(1,nn)],Qa);var $a=class{constructor(e,t){this._renderCallback=e,this._coreBrowserService=t,this._refreshCallbacks=[]}dispose(){this._animationFrame&&=(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),void 0)}addRefreshCallback(e){return this._refreshCallbacks.push(e),this._animationFrame||=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()),this._animationFrame}refresh(e,t,n){this._rowCount=n,e=e===void 0?0:e,t=t===void 0?this._rowCount-1:t,this._rowStart=this._rowStart===void 0?e:Math.min(this._rowStart,e),this._rowEnd=this._rowEnd===void 0?t:Math.max(this._rowEnd,t),!this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0){this._runRefreshCallbacks();return}let e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(let e of this._refreshCallbacks)e(0);this._refreshCallbacks=[]}},eo={};vt(eo,{getSafariVersion:()=>so,isChromeOS:()=>mo,isFirefox:()=>io,isIpad:()=>lo,isIphone:()=>uo,isLegacyEdge:()=>ao,isLinux:()=>po,isMac:()=>co,isNode:()=>to,isSafari:()=>oo,isWindows:()=>fo});var to=typeof process<`u`&&`title`in process,no=to?`node`:navigator.userAgent,ro=to?`node`:navigator.platform,io=no.includes(`Firefox`),ao=no.includes(`Edge`),oo=/^((?!chrome|android).)*safari/i.test(no);function so(){if(!oo)return 0;let e=no.match(/Version\/(\d+)/);return e===null||e.length<2?0:parseInt(e[1])}var co=[`Macintosh`,`MacIntel`,`MacPPC`,`Mac68K`].includes(ro),lo=ro===`iPad`,uo=ro===`iPhone`,fo=[`Windows`,`Win16`,`Win32`,`WinCE`].includes(ro),po=ro.indexOf(`Linux`)>=0,mo=/\bCrOS\b/.test(no),ho=class{constructor(){this._tasks=[],this._i=0}enqueue(e){this._tasks.push(e),this._start()}flush(){for(;this._ii){r-t<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-t))}ms`),this._start();return}r=i}this.clear()}},go=class extends ho{_requestCallback(e){return setTimeout(()=>e(this._createDeadline(16)))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){let t=performance.now()+e;return{timeRemaining:()=>Math.max(0,t-performance.now())}}},_o=class extends ho{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}},vo=!to&&`requestIdleCallback`in window?_o:go,yo=class{constructor(){this._queue=new vo}set(e){this._queue.clear(),this._queue.enqueue(e)}flush(){this._queue.flush()}},bo=class extends M{constructor(e,t,n,r,i,a,o,s,c){super(),this._rowCount=e,this._optionsService=n,this._charSizeService=r,this._coreService=i,this._coreBrowserService=s,this._renderer=this._register(new Nn),this._pausedResizeTask=new yo,this._observerDisposable=this._register(new Nn),this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this._register(new F),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this._register(new F),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this._register(new F),this.onRender=this._onRender.event,this._onRefreshRequest=this._register(new F),this.onRefreshRequest=this._onRefreshRequest.event,this._renderDebouncer=new $a((e,t)=>this._renderRows(e,t),this._coreBrowserService),this._register(this._renderDebouncer),this._syncOutputHandler=new xo(this._coreBrowserService,this._coreService,()=>this._fullRefresh()),this._register(j(()=>this._syncOutputHandler.dispose())),this._register(this._coreBrowserService.onDprChange(()=>this.handleDevicePixelRatioChange())),this._register(o.onResize(()=>this._fullRefresh())),this._register(o.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this._register(a.onDecorationRegistered(()=>this._fullRefresh())),this._register(a.onDecorationRemoved(()=>this._fullRefresh())),this._register(this._optionsService.onMultipleOptionChange([`customGlyphs`,`drawBoldTextInBrightColors`,`letterSpacing`,`lineHeight`,`fontFamily`,`fontSize`,`fontWeight`,`fontWeightBold`,`minimumContrastRatio`,`rescaleOverlappingGlyphs`],()=>{this.clear(),this.handleResize(o.cols,o.rows),this._fullRefresh()})),this._register(this._optionsService.onMultipleOptionChange([`cursorBlink`,`cursorStyle`],()=>this.refreshRows(o.buffer.y,o.buffer.y,!0))),this._register(c.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(this._coreBrowserService.window,t),this._register(this._coreBrowserService.onWindowChange(e=>this._registerIntersectionObserver(e,t)))}get dimensions(){return this._renderer.value.dimensions}_registerIntersectionObserver(e,t){if(`IntersectionObserver`in e){let n=new e.IntersectionObserver(e=>this._handleIntersectionChange(e[e.length-1]),{threshold:0});n.observe(t),this._observerDisposable.value=j(()=>n.disconnect())}}_handleIntersectionChange(e){this._isPaused=e.isIntersecting===void 0?e.intersectionRatio===0:!e.isIntersecting,!this._isPaused&&!this._charSizeService.hasValidSize&&this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,n=!1){if(this._isPaused){this._needsFullRefresh=!0;return}if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}let r=this._syncOutputHandler.flush();r&&(e=Math.min(e,r.start),t=Math.max(t,r.end)),n||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(e,t,this._rowCount)}_renderRows(e,t){if(this._renderer.value){if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&=(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0}}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(e=>this.refreshRows(e.start,e.end,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,t)):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,n){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=n,this._renderer.value?.handleSelectionChanged(e,t,n)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};bo=O([k(2,Xt),k(3,nn),k(4,Kt),k(5,$t),k(6,Wt),k(7,rn),k(8,ln)],bo);var xo=class{constructor(e,t,n){this._coreBrowserService=e,this._coreService=t,this._onTimeout=n,this._start=0,this._end=0,this._isBuffering=!1}bufferRows(e,t){this._isBuffering?(this._start=Math.min(this._start,e),this._end=Math.max(this._end,t)):(this._start=e,this._end=t,this._isBuffering=!0),this._timeout===void 0&&(this._timeout=this._coreBrowserService.window.setTimeout(()=>{this._timeout=void 0,this._coreService.decPrivateModes.synchronizedOutput=!1,this._onTimeout()},1e3))}flush(){if(this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0),!this._isBuffering)return;let e={start:this._start,end:this._end};return this._isBuffering=!1,e}dispose(){this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0)}};function So(e,t,n,r){let i=n.buffer.x,a=n.buffer.y;if(!n.buffer.hasScrollback)return To(i,a,e,t,n,r)+Eo(a,t,n,r)+Do(i,a,e,t,n,r);let o;if(a===t)return o=i>e?`D`:`C`,Po(Math.abs(i-e),No(o,r));o=a>t?`D`:`C`;let s=Math.abs(a-t);return Po(wo(a>t?e:i,n)+(s-1)*n.cols+1+Co(a>t?i:e,n),No(o,r))}function Co(e,t){return e-1}function wo(e,t){return t.cols-e}function To(e,t,n,r,i,a){return Eo(t,r,i,a).length===0?``:Po(Mo(e,t,e,t-ko(t,i),!1,i).length,No(`D`,a))}function Eo(e,t,n,r){let i=e-ko(e,n),a=t-ko(t,n);return Po(Math.abs(i-a)-Oo(e,t,n),No(jo(e,t),r))}function Do(e,t,n,r,i,a){let o;o=Eo(t,r,i,a).length>0?r-ko(r,i):t;let s=r,c=Ao(e,t,n,r,i,a);return Po(Mo(e,o,n,s,c===`C`,i).length,No(c,a))}function Oo(e,t,n){let r=0,i=e-ko(e,n),a=t-ko(t,n);for(let o=0;o=0&&e0?r-ko(r,i):t,e=n&&ot?`A`:`B`}function Mo(e,t,n,r,i,a){let o=e,s=t,c=``;for(;(o!==n||s!==r)&&s>=0&&sa.cols-1?(c+=a.buffer.translateBufferLineToString(s,!1,e,o),o=0,e=0,s++):!i&&o<0&&(c+=a.buffer.translateBufferLineToString(s,!1,0,e+1),o=a.cols-1,e=o,s--);return c+a.buffer.translateBufferLineToString(s,!1,e,o)}function No(e,t){let n=t?`O`:`[`;return R.ESC+n+e}function Po(e,t){e=Math.floor(e);let n=``;for(let r=0;rthis._bufferService.cols?e%this._bufferService.cols===0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)-1]:[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){let e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[Math.max(e,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){let e=this.selectionStart,t=this.selectionEnd;return!e||!t?!1:e[1]>t[1]||e[1]===t[1]&&e[0]>t[0]}handleTrim(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)}};function Io(e,t){if(e.start.y>e.end.y)throw Error(`Buffer range end (${e.end.x}, ${e.end.y}) cannot be before start (${e.start.x}, ${e.start.y})`);return t*(e.end.y-e.start.y)+(e.end.x-e.start.x+1)}var Lo=50,Ro=15,zo=50,Bo=500,Vo=RegExp(`\xA0`,`g`),Ho=class extends M{constructor(e,t,n,r,i,a,o,s,c){super(),this._element=e,this._screenElement=t,this._linkifier=n,this._bufferService=r,this._coreService=i,this._mouseService=a,this._optionsService=o,this._renderService=s,this._coreBrowserService=c,this._dragScrollAmount=0,this._enabled=!0,this._workCell=new Rt,this._mouseDownTimeStamp=0,this._oldHasSelection=!1,this._oldSelectionStart=void 0,this._oldSelectionEnd=void 0,this._onLinuxMouseSelection=this._register(new F),this.onLinuxMouseSelection=this._onLinuxMouseSelection.event,this._onRedrawRequest=this._register(new F),this.onRequestRedraw=this._onRedrawRequest.event,this._onSelectionChange=this._register(new F),this.onSelectionChange=this._onSelectionChange.event,this._onRequestScrollLines=this._register(new F),this.onRequestScrollLines=this._onRequestScrollLines.event,this._mouseMoveListener=e=>this._handleMouseMove(e),this._mouseUpListener=e=>this._handleMouseUp(e),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener=this._bufferService.buffer.lines.onTrim(e=>this._handleTrim(e)),this._register(this._bufferService.buffers.onBufferActivate(e=>this._handleBufferActivate(e))),this.enable(),this._model=new Fo(this._bufferService),this._activeSelectionMode=0,this._register(j(()=>{this._removeMouseDownListeners()})),this._register(this._bufferService.onResize(e=>{e.rowsChanged&&this.clearSelection()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!e||!t?!1:e[0]!==t[0]||e[1]!==t[1]}get selectionText(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return``;let n=this._bufferService.buffer,r=[];if(this._activeSelectionMode===3){if(e[0]===t[0])return``;let i=e[0]e.replace(Vo,` `)).join(fo?`\r -`:` -`)}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh()),po&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:this._activeSelectionMode===3})}_isClickInSelection(e){let t=this._getMouseBufferCoords(e),n=this._model.finalSelectionStart,r=this._model.finalSelectionEnd;return!n||!r||!t?!1:this._areCoordsInSelection(t,n,r)}isCellInSelection(e,t){let n=this._model.finalSelectionStart,r=this._model.finalSelectionEnd;return!n||!r?!1:this._areCoordsInSelection([e,t],n,r)}_areCoordsInSelection(e,t,n){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){let n=this._linkifier.currentLink?.link?.range;if(n)return this._model.selectionStart=[n.start.x-1,n.start.y-1],this._model.selectionStartLength=Io(n,this._bufferService.cols),this._model.selectionEnd=void 0,!0;let r=this._getMouseBufferCoords(e);return r?(this._selectWordAt(r,t),this._model.selectionEnd=void 0,!0):!1}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){let t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=Xa(this._coreBrowserService.window,e,this._screenElement)[1],n=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=n?0:(t>n&&(t-=n),t=Math.min(Math.max(t,-Lo),Lo),t/=Lo,t/Math.abs(t)+Math.round(t*(Ro-1)))}shouldForceSelection(e){return co?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,!(e.button===2&&this.hasSelection)&&e.button===0){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):e.detail===1?this._handleSingleClick(e):e.detail===2?this._handleDoubleClick(e):e.detail===3&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener(`mousemove`,this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener(`mouseup`,this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),zo)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener(`mousemove`,this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener(`mouseup`,this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0;let t=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);t&&t.length!==this._model.selectionStart[0]&&t.hasWidth(this._model.selectionStart[0])===0&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){let t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return e.altKey&&!(co&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;let t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd){this.refresh(!0);return}this._activeSelectionMode===2?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));let n=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows,e.lines.length-1)):(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){let t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&tthis._handleTrim(e))}_convertViewportColToCharacterIndex(e,t){let n=t;for(let r=0;t>=r;r++){let i=e.loadCell(r,this._workCell).getChars().length;this._workCell.getWidth()===0?n--:i>1&&t!==r&&(n+=i-1)}return n}setSelection(e,t,n){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=n,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,n=!0,r=!0){if(e[0]>=this._bufferService.cols)return;let i=this._bufferService.buffer,a=i.lines.get(e[1]);if(!a)return;let o=i.translateBufferLineToString(e[1],!1),s=this._convertViewportColToCharacterIndex(a,e[0]),c=s,l=e[0]-s,u=0,d=0,f=0,p=0;if(o.charAt(s)===` `){for(;s>0&&o.charAt(s-1)===` `;)s--;for(;c1&&(p+=r-1,c+=r-1);t>0&&s>0&&!this._isCharWordSeparator(a.loadCell(t-1,this._workCell));){a.loadCell(t-1,this._workCell);let e=this._workCell.getChars().length;this._workCell.getWidth()===0?(u++,t--):e>1&&(f+=e-1,s-=e-1),s--,t--}for(;n1&&(p+=e-1,c+=e-1),c++,n++}}c++;let m=s+l-u+f,h=Math.min(this._bufferService.cols,c-s+u+d-f-p);if(t||o.slice(s,c).trim()!==``){if(n&&m===0&&a.getCodePoint(0)!==32){let t=i.lines.get(e[1]-1);if(t&&a.isWrapped&&t.getCodePoint(this._bufferService.cols-1)!==32){let t=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(t){let e=this._bufferService.cols-t.start;m-=e,h+=e}}}if(r&&m+h===this._bufferService.cols&&a.getCodePoint(this._bufferService.cols-1)!==32){let t=i.lines.get(e[1]+1);if(t?.isWrapped&&t.getCodePoint(0)!==32){let t=this._getWordAt([0,e[1]+1],!1,!1,!0);t&&(h+=t.length)}}return{start:m,length:h}}}_selectWordAt(e,t){let n=this._getWordAt(e,t);if(n){for(;n.start<0;)n.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[n.start,e[1]],this._model.selectionStartLength=n.length}}_selectToWordAt(e){let t=this._getWordAt(e,!0);if(t){let n=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,n--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,n++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,n]}}_isCharWordSeparator(e){return e.getWidth()!==0&&this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){let t=this._bufferService.buffer.getWrappedRangeForLine(e),n={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=Io(n,this._bufferService.cols)}};Ho=O([k(3,Wt),k(4,Kt),k(5,an),k(6,Xt),k(7,on),k(8,rn)],Ho);var Uo=class{constructor(){this._data={}}set(e,t,n){this._data[e]||(this._data[e]={}),this._data[e][t]=n}get(e,t){return this._data[e]?this._data[e][t]:void 0}clear(){this._data={}}},Wo=class{constructor(){this._color=new Uo,this._css=new Uo}setCss(e,t,n){this._css.set(e,t,n)}getCss(e,t){return this._css.get(e,t)}setColor(e,t,n){this._color.set(e,t,n)}getColor(e,t){return this._color.get(e,t)}clear(){this._color.clear(),this._css.clear()}},K=Object.freeze((()=>{let e=[G.toColor(`#2e3436`),G.toColor(`#cc0000`),G.toColor(`#4e9a06`),G.toColor(`#c4a000`),G.toColor(`#3465a4`),G.toColor(`#75507b`),G.toColor(`#06989a`),G.toColor(`#d3d7cf`),G.toColor(`#555753`),G.toColor(`#ef2929`),G.toColor(`#8ae234`),G.toColor(`#fce94f`),G.toColor(`#729fcf`),G.toColor(`#ad7fa8`),G.toColor(`#34e2e2`),G.toColor(`#eeeeec`)],t=[0,95,135,175,215,255];for(let n=0;n<216;n++){let r=t[n/36%6|0],i=t[n/6%6|0],a=t[n%6];e.push({css:U.toCss(r,i,a),rgba:U.toRgba(r,i,a)})}for(let t=0;t<24;t++){let n=8+t*10;e.push({css:U.toCss(n,n,n),rgba:U.toRgba(n,n,n)})}return e})()),Go=G.toColor(`#ffffff`),Ko=G.toColor(`#000000`),qo=G.toColor(`#ffffff`),Jo=Ko,Yo={css:`rgba(255, 255, 255, 0.3)`,rgba:4294967117},Xo=Go,Zo=class extends M{constructor(e){super(),this._optionsService=e,this._contrastCache=new Wo,this._halfContrastCache=new Wo,this._onChangeColors=this._register(new F),this.onChangeColors=this._onChangeColors.event,this._colors={foreground:Go,background:Ko,cursor:qo,cursorAccent:Jo,selectionForeground:void 0,selectionBackgroundTransparent:Yo,selectionBackgroundOpaque:W.blend(Ko,Yo),selectionInactiveBackgroundTransparent:Yo,selectionInactiveBackgroundOpaque:W.blend(Ko,Yo),scrollbarSliderBackground:W.opacity(Go,.2),scrollbarSliderHoverBackground:W.opacity(Go,.4),scrollbarSliderActiveBackground:W.opacity(Go,.5),overviewRulerBorder:Go,ansi:K.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this._register(this._optionsService.onSpecificOptionChange(`minimumContrastRatio`,()=>this._contrastCache.clear())),this._register(this._optionsService.onSpecificOptionChange(`theme`,()=>this._setTheme(this._optionsService.rawOptions.theme)))}get colors(){return this._colors}_setTheme(e={}){let t=this._colors;if(t.foreground=q(e.foreground,Go),t.background=q(e.background,Ko),t.cursor=W.blend(t.background,q(e.cursor,qo)),t.cursorAccent=W.blend(t.background,q(e.cursorAccent,Jo)),t.selectionBackgroundTransparent=q(e.selectionBackground,Yo),t.selectionBackgroundOpaque=W.blend(t.background,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundTransparent=q(e.selectionInactiveBackground,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundOpaque=W.blend(t.background,t.selectionInactiveBackgroundTransparent),t.selectionForeground=e.selectionForeground?q(e.selectionForeground,va):void 0,t.selectionForeground===va&&(t.selectionForeground=void 0),W.isOpaque(t.selectionBackgroundTransparent)&&(t.selectionBackgroundTransparent=W.opacity(t.selectionBackgroundTransparent,.3)),W.isOpaque(t.selectionInactiveBackgroundTransparent)&&(t.selectionInactiveBackgroundTransparent=W.opacity(t.selectionInactiveBackgroundTransparent,.3)),t.scrollbarSliderBackground=q(e.scrollbarSliderBackground,W.opacity(t.foreground,.2)),t.scrollbarSliderHoverBackground=q(e.scrollbarSliderHoverBackground,W.opacity(t.foreground,.4)),t.scrollbarSliderActiveBackground=q(e.scrollbarSliderActiveBackground,W.opacity(t.foreground,.5)),t.overviewRulerBorder=q(e.overviewRulerBorder,Xo),t.ansi=K.slice(),t.ansi[0]=q(e.black,K[0]),t.ansi[1]=q(e.red,K[1]),t.ansi[2]=q(e.green,K[2]),t.ansi[3]=q(e.yellow,K[3]),t.ansi[4]=q(e.blue,K[4]),t.ansi[5]=q(e.magenta,K[5]),t.ansi[6]=q(e.cyan,K[6]),t.ansi[7]=q(e.white,K[7]),t.ansi[8]=q(e.brightBlack,K[8]),t.ansi[9]=q(e.brightRed,K[9]),t.ansi[10]=q(e.brightGreen,K[10]),t.ansi[11]=q(e.brightYellow,K[11]),t.ansi[12]=q(e.brightBlue,K[12]),t.ansi[13]=q(e.brightMagenta,K[13]),t.ansi[14]=q(e.brightCyan,K[14]),t.ansi[15]=q(e.brightWhite,K[15]),e.extendedAnsi){let n=Math.min(t.ansi.length-16,e.extendedAnsi.length);for(let r=0;re.index-t.index),r=[];for(let t of n){let n=this._services.get(t.id);if(!n)throw Error(`[createInstance] ${e.name} depends on UNKNOWN service ${t.id._id}.`);r.push(n)}let i=n.length>0?n[0].index:t.length;if(t.length!==i)throw Error(`[createInstance] First service dependency of ${e.name} at position ${i+1} conflicts with ${t.length} static arguments`);return new e(...t,...r)}},es={trace:0,debug:1,info:2,warn:3,error:4,off:5},ts=`xterm.js: `,ns=class extends M{constructor(e){super(),this._optionsService=e,this._logLevel=5,this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange(`logLevel`,()=>this._updateLogLevel())),rs=this}get logLevel(){return this._logLevel}_updateLogLevel(){this._logLevel=es[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;tthis._length)for(let t=this._length;t=e;t--)this._array[this._getCyclicIndex(t+n.length)]=this._array[this._getCyclicIndex(t)];for(let t=0;tthis._maxLength){let e=this._length+n.length-this._maxLength;this._startIndex+=e,this._length=this._maxLength,this.onTrimEmitter.fire(e)}else this._length+=n.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,n){if(!(t<=0)){if(e<0||e>=this._length)throw Error(`start argument out of range`);if(e+n<0)throw Error(`Cannot shift elements in list beyond index 0`);if(n>0){for(let r=t-1;r>=0;r--)this.set(e+r+n,this.get(e+r));let r=e+t+n-this._length;if(r>0)for(this._length+=r;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let r=0;r>22,t&2097152?this._combined[e].charCodeAt(this._combined[e].length-1):n]}set(e,t){this._data[e*J+1]=t[0],t[1].length>1?(this._combined[e]=t[1],this._data[e*J+0]=e|2097152|t[2]<<22):this._data[e*J+0]=t[1].charCodeAt(0)|t[2]<<22}getWidth(e){return this._data[e*J+0]>>22}hasWidth(e){return this._data[e*J+0]&12582912}getFg(e){return this._data[e*J+1]}getBg(e){return this._data[e*J+2]}hasContent(e){return this._data[e*J+0]&4194303}getCodePoint(e){let t=this._data[e*J+0];return t&2097152?this._combined[e].charCodeAt(this._combined[e].length-1):t&2097151}isCombined(e){return this._data[e*J+0]&2097152}getString(e){let t=this._data[e*J+0];return t&2097152?this._combined[e]:t&2097151?At(t&2097151):``}isProtected(e){return this._data[e*J+2]&536870912}loadCell(e,t){return as=e*J,t.content=this._data[as+0],t.fg=this._data[as+1],t.bg=this._data[as+2],t.content&2097152&&(t.combinedData=this._combined[e]),t.bg&268435456&&(t.extended=this._extendedAttrs[e]),t}setCell(e,t){t.content&2097152&&(this._combined[e]=t.combinedData),t.bg&268435456&&(this._extendedAttrs[e]=t.extended),this._data[e*J+0]=t.content,this._data[e*J+1]=t.fg,this._data[e*J+2]=t.bg}setCellFromCodepoint(e,t,n,r){r.bg&268435456&&(this._extendedAttrs[e]=r.extended),this._data[e*J+0]=t|n<<22,this._data[e*J+1]=r.fg,this._data[e*J+2]=r.bg}addCodepointToCell(e,t,n){let r=this._data[e*J+0];r&2097152?this._combined[e]+=At(t):r&2097151?(this._combined[e]=At(r&2097151)+At(t),r&=-2097152,r|=2097152):r=t|1<<22,n&&(r&=-12582913,r|=n<<22),this._data[e*J+0]=r}insertCells(e,t,n){if(e%=this.length,e&&this.getWidth(e-1)===2&&this.setCellFromCodepoint(e-1,0,1,n),t=0;--n)this.setCell(e+t+n,this.loadCell(e+n,r));for(let r=0;rthis.length){if(this._data.buffer.byteLength>=n*4)this._data=new Uint32Array(this._data.buffer,0,n);else{let e=new Uint32Array(n);e.set(this._data),this._data=e}for(let n=this.length;n=e&&delete this._combined[r]}let r=Object.keys(this._extendedAttrs);for(let t=0;t=e&&delete this._extendedAttrs[n]}}return this.length=e,n*4*os=0;--e)if(this._data[e*J+0]&4194303)return e+(this._data[e*J+0]>>22);return 0}getNoBgTrimmedLength(){for(let e=this.length-1;e>=0;--e)if(this._data[e*J+0]&4194303||this._data[e*J+2]&50331648)return e+(this._data[e*J+0]>>22);return 0}copyCellsFrom(e,t,n,r,i){let a=e._data;if(i)for(let i=r-1;i>=0;i--){for(let e=0;e=t&&(this._combined[i-t+n]=e._combined[i])}}translateToString(e,t,n,r){t??=0,n??=this.length,e&&(n=Math.min(n,this.getTrimmedLength())),r&&(r.length=0);let i=``;for(;t>22||1}return r&&r.push(t),i}};function cs(e,t,n,r,i,a){let o=[];for(let s=0;s=s&&r0&&(e>d||u[e].getTrimmedLength()===0);e--)h++;h>0&&(o.push(s+u.length-h),o.push(h)),s+=u.length-1}return o}function ls(e,t){let n=[],r=0,i=t[r],a=0;for(let o=0;ofs(e,r,t)).reduce((e,t)=>e+t),a=0,o=0,s=0;for(;sc&&(a-=c,o++);let l=e[o].getWidth(a-1)===2;l&&a--;let u=l?n-1:n;r.push(u),s+=u}return r}function fs(e,t,n){if(t===e.length-1)return e[t].getTrimmedLength();let r=!e[t].hasContent(n-1)&&e[t].getWidth(n-1)===1,i=e[t+1].getWidth(0)===2;return r&&i?n-1:n}var ps=class e{constructor(t){this.line=t,this.isDisposed=!1,this._disposables=[],this._id=e._nextId++,this._onDispose=this.register(new F),this.onDispose=this._onDispose.event}get id(){return this._id}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),kn(this._disposables),this._disposables.length=0)}register(e){return this._disposables.push(e),e}};ps._nextId=1;var ms=ps,X={},hs=X.B;X[0]={"`":`◆`,a:`▒`,b:`␉`,c:`␌`,d:`␍`,e:`␊`,f:`°`,g:`±`,h:`␤`,i:`␋`,j:`┘`,k:`┐`,l:`┌`,m:`└`,n:`┼`,o:`⎺`,p:`⎻`,q:`─`,r:`⎼`,s:`⎽`,t:`├`,u:`┤`,v:`┴`,w:`┬`,x:`│`,y:`≤`,z:`≥`,"{":`π`,"|":`≠`,"}":`£`,"~":`·`},X.A={"#":`£`},X.B=void 0,X[4]={"#":`£`,"@":`¾`,"[":`ij`,"\\":`½`,"]":`|`,"{":`¨`,"|":`f`,"}":`¼`,"~":`´`},X.C=X[5]={"[":`Ä`,"\\":`Ö`,"]":`Å`,"^":`Ü`,"`":`é`,"{":`ä`,"|":`ö`,"}":`å`,"~":`ü`},X.R={"#":`£`,"@":`à`,"[":`°`,"\\":`ç`,"]":`§`,"{":`é`,"|":`ù`,"}":`è`,"~":`¨`},X.Q={"@":`à`,"[":`â`,"\\":`ç`,"]":`ê`,"^":`î`,"`":`ô`,"{":`é`,"|":`ù`,"}":`è`,"~":`û`},X.K={"@":`§`,"[":`Ä`,"\\":`Ö`,"]":`Ü`,"{":`ä`,"|":`ö`,"}":`ü`,"~":`ß`},X.Y={"#":`£`,"@":`§`,"[":`°`,"\\":`ç`,"]":`é`,"`":`ù`,"{":`à`,"|":`ò`,"}":`è`,"~":`ì`},X.E=X[6]={"@":`Ä`,"[":`Æ`,"\\":`Ø`,"]":`Å`,"^":`Ü`,"`":`ä`,"{":`æ`,"|":`ø`,"}":`å`,"~":`ü`},X.Z={"#":`£`,"@":`§`,"[":`¡`,"\\":`Ñ`,"]":`¿`,"{":`°`,"|":`ñ`,"}":`ç`},X.H=X[7]={"@":`É`,"[":`Ä`,"\\":`Ö`,"]":`Å`,"^":`Ü`,"`":`é`,"{":`ä`,"|":`ö`,"}":`å`,"~":`ü`},X[`=`]={"#":`ù`,"@":`à`,"[":`é`,"\\":`ç`,"]":`ê`,"^":`î`,_:`è`,"`":`ô`,"{":`ä`,"|":`ö`,"}":`ü`,"~":`û`};var gs=4294967295,_s=class{constructor(e,t,n){this._hasScrollback=e,this._optionsService=t,this._bufferService=n,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=Y.clone(),this.savedCharset=hs,this.markers=[],this._nullCell=Rt.fromCharData([0,Pt,1,0]),this._whitespaceCell=Rt.fromCharData([0,Ft,1,32]),this._isClearing=!1,this._memoryCleanupQueue=new vo,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new is(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new Lt),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new Lt),this._whitespaceCell}getBlankLine(e,t){return new ss(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let e=this.ybase+this.y-this.ydisp;return e>=0&&egs?gs:t}fillViewportRows(e){if(this.lines.length===0){e===void 0&&(e=Y);let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new is(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){let n=this.getNullCell(Y),r=0,i=this._getCorrectBufferLength(t);if(i>this.lines.maxLength&&(this.lines.maxLength=i),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+a+1?(this.ybase--,a++,this.ydisp>0&&this.ydisp--):this.lines.push(new ss(e,n)));else for(let e=this._rows;e>t;e--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(i0&&(this.lines.trimStart(e),this.ybase=Math.max(this.ybase-e,0),this.ydisp=Math.max(this.ydisp-e,0),this.savedY=Math.max(this.savedY-e,0)),this.lines.maxLength=i}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),a&&(this.y+=a),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let t=0;t.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){let e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&e.backend===`conpty`&&e.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){let n=this._optionsService.rawOptions.reflowCursorLine,r=cs(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(Y),n);if(r.length>0){let n=ls(this.lines,r);us(this.lines,n.layout),this._reflowLargerAdjustViewport(e,t,n.countRemoved)}}_reflowLargerAdjustViewport(e,t,n){let r=this.getNullCell(Y),i=n;for(;i-->0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length=0;o--){let s=this.lines.get(o);if(!s||!s.isWrapped&&s.getTrimmedLength()<=e)continue;let c=[s];for(;s.isWrapped&&o>0;)s=this.lines.get(--o),c.unshift(s);if(!n){let e=this.ybase+this.y;if(e>=o&&e0&&(i.push({start:o+c.length+a,newLines:p}),a+=p.length),c.push(...p);let m=u.length-1,h=u[m];h===0&&(m--,h=u[m]);let g=c.length-d-1,_=l;for(;g>=0;){let e=Math.min(_,h);if(c[m]===void 0)break;c[m].copyCellsFrom(c[g],_-e,h-e,e,!0),h-=e,h===0&&(m--,h=u[m]),_-=e,_===0&&(g--,_=fs(c,Math.max(g,0),this._cols))}for(let t=0;t0;)this.ybase===0?this.y0){let e=[],t=[];for(let e=0;e=0;l--)if(s&&s.start>r+c){for(let e=s.newLines.length-1;e>=0;e--)this.lines.set(l--,s.newLines[e]);l++,e.push({index:r+1,amount:s.newLines.length}),c+=s.newLines.length,s=i[++o]}else this.lines.set(l,t[r--]);let l=0;for(let t=e.length-1;t>=0;t--)e[t].index+=l,this.lines.onInsertEmitter.fire(e[t]),l+=e[t].amount;let u=Math.max(0,n+a-this.lines.maxLength);u>0&&this.lines.onTrimEmitter.fire(u)}}translateBufferLineToString(e,t,n=0,r){let i=this.lines.get(e);return i?i.translateToString(t,n,r):``}getWrappedRangeForLine(e){let t=e,n=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;n+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(e??=this.x;!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=e,t.line<0&&t.dispose()})),t.register(this.lines.onInsert(e=>{t.line>=e.index&&(t.line+=e.amount)})),t.register(this.lines.onDelete(e=>{t.line>=e.index&&t.linee.index&&(t.line-=e.amount)})),t.register(t.onDispose(()=>this._removeMarker(t))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}},vs=class extends M{constructor(e,t){super(),this._optionsService=e,this._bufferService=t,this._onBufferActivate=this._register(new F),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this._register(this._optionsService.onSpecificOptionChange(`scrollback`,()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this._register(this._optionsService.onSpecificOptionChange(`tabStopWidth`,()=>this.setupTabStops()))}reset(){this._normal=new _s(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new _s(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}},ys=2,bs=1,xs=class extends M{constructor(e){super(),this.isUserScrolling=!1,this._onResize=this._register(new F),this.onResize=this._onResize.event,this._onScroll=this._register(new F),this.onScroll=this._onScroll.event,this.cols=Math.max(e.rawOptions.cols||0,ys),this.rows=Math.max(e.rawOptions.rows||0,bs),this.buffers=this._register(new vs(e,this)),this._register(this.buffers.onBufferActivate(e=>{this._onScroll.fire(e.activeBuffer.ydisp)}))}get buffer(){return this.buffers.active}resize(e,t){let n=this.cols!==e,r=this.rows!==t;this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t,colsChanged:n,rowsChanged:r})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){let n=this.buffer,r;r=this._cachedBlankLine,r&&r.length===this.cols&&r.getFg(0)===e.fg&&r.getBg(0)===e.bg||(r=n.getBlankLine(e,t),this._cachedBlankLine=r),r.isWrapped=t;let i=n.ybase+n.scrollTop,a=n.ybase+n.scrollBottom;if(n.scrollTop===0){let e=n.lines.isFull;a===n.lines.length-1?e?n.lines.recycle().copyFrom(r):n.lines.push(r.clone()):n.lines.splice(a+1,0,r.clone()),e?this.isUserScrolling&&(n.ydisp=Math.max(n.ydisp-1,0)):(n.ybase++,this.isUserScrolling||n.ydisp++)}else{let e=a-i+1;n.lines.shiftElements(i+1,e-1,-1),n.lines.set(a,r.clone())}this.isUserScrolling||(n.ydisp=n.ybase),this._onScroll.fire(n.ydisp)}scrollLines(e,t){let n=this.buffer;if(e<0){if(n.ydisp===0)return;this.isUserScrolling=!0}else e+n.ydisp>=n.ybase&&(this.isUserScrolling=!1);let r=n.ydisp;n.ydisp=Math.max(Math.min(n.ydisp+e,n.ybase),0),r!==n.ydisp&&(t||this._onScroll.fire(n.ydisp))}};xs=O([k(0,Xt)],xs);var Ss={cols:80,rows:24,cursorBlink:!1,cursorStyle:`block`,cursorWidth:1,cursorInactiveStyle:`outline`,customGlyphs:!0,drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollModifier:`alt`,fastScrollSensitivity:5,fontFamily:`monospace`,fontSize:15,fontWeight:`normal`,fontWeightBold:`bold`,ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:`info`,logger:null,scrollback:1e3,scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:co,windowOptions:{},windowsMode:!1,windowsPty:{},wordSeparator:` ()[]{}',"\``,altClickMovesCursor:!0,convertEol:!1,termName:`xterm`,cancelEvents:!1,overviewRuler:{}},Cs=[`normal`,`bold`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`],ws=class extends M{constructor(e){super(),this._onOptionChange=this._register(new F),this.onOptionChange=this._onOptionChange.event;let t={...Ss};for(let n in e)if(n in t)try{let r=e[n];t[n]=this._sanitizeAndValidateOption(n,r)}catch(e){console.error(e)}this.rawOptions=t,this.options={...t},this._setupOptions(),this._register(j(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(e,t){return this.onOptionChange(n=>{n===e&&t(this.rawOptions[e])})}onMultipleOptionChange(e,t){return this.onOptionChange(n=>{e.indexOf(n)!==-1&&t()})}_setupOptions(){let e=e=>{if(!(e in Ss))throw Error(`No option with key "${e}"`);return this.rawOptions[e]},t=(e,t)=>{if(!(e in Ss))throw Error(`No option with key "${e}"`);t=this._sanitizeAndValidateOption(e,t),this.rawOptions[e]!==t&&(this.rawOptions[e]=t,this._onOptionChange.fire(e))};for(let n in this.rawOptions){let r={get:e.bind(this,n),set:t.bind(this,n)};Object.defineProperty(this.options,n,r)}}_sanitizeAndValidateOption(e,t){switch(e){case`cursorStyle`:if(t||=Ss[e],!Ts(t))throw Error(`"${t}" is not a valid value for ${e}`);break;case`wordSeparator`:t||=Ss[e];break;case`fontWeight`:case`fontWeightBold`:if(typeof t==`number`&&1<=t&&t<=1e3)break;t=Cs.includes(t)?t:Ss[e];break;case`cursorWidth`:t=Math.floor(t);case`lineHeight`:case`tabStopWidth`:if(t<1)throw Error(`${e} cannot be less than 1, value: ${t}`);break;case`minimumContrastRatio`:t=Math.max(1,Math.min(21,Math.round(t*10)/10));break;case`scrollback`:if(t=Math.min(t,4294967295),t<0)throw Error(`${e} cannot be less than 0, value: ${t}`);break;case`fastScrollSensitivity`:case`scrollSensitivity`:if(t<=0)throw Error(`${e} cannot be less than or equal to 0, value: ${t}`);break;case`rows`:case`cols`:if(!t&&t!==0)throw Error(`${e} must be numeric, value: ${t}`);break;case`windowsPty`:t??={}}return t}};function Ts(e){return e===`block`||e===`underline`||e===`bar`}function Es(e,t=5){if(typeof e!=`object`)return e;let n=Array.isArray(e)?[]:{};for(let r in e)n[r]=t<=1?e[r]:e[r]&&Es(e[r],t-1);return n}var Ds=Object.freeze({insertMode:!1}),Os=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,wraparound:!0}),ks=class extends M{constructor(e,t,n){super(),this._bufferService=e,this._logService=t,this._optionsService=n,this.isCursorInitialized=!1,this.isCursorHidden=!1,this._onData=this._register(new F),this.onData=this._onData.event,this._onUserInput=this._register(new F),this.onUserInput=this._onUserInput.event,this._onBinary=this._register(new F),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this._register(new F),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.modes=Es(Ds),this.decPrivateModes=Es(Os)}reset(){this.modes=Es(Ds),this.decPrivateModes=Es(Os)}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;let n=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&n.ybase!==n.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data "${e}"`),this._logService.trace(`sending data (codes)`,()=>e.split(``).map(e=>e.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${e}"`),this._logService.trace(`sending binary (codes)`,()=>e.split(``).map(e=>e.charCodeAt(0))),this._onBinary.fire(e))}};ks=O([k(0,Wt),k(1,Yt),k(2,Xt)],ks);var As={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:e=>e.button===4||e.action!==1?!1:(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)},VT200:{events:19,restrict:e=>e.action!==32},DRAG:{events:23,restrict:e=>e.action!==32||e.button!==3},ANY:{events:31,restrict:e=>!0}};function js(e,t){let n=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return e.button===4?(n|=64,n|=e.action):(n|=e.button&3,e.button&4&&(n|=64),e.button&8&&(n|=128),e.action===32?n|=32:e.action===0&&!t&&(n|=3)),n}var Ms=String.fromCharCode,Ns={DEFAULT:e=>{let t=[js(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?``:`\x1B[M${Ms(t[0])}${Ms(t[1])}${Ms(t[2])}`},SGR:e=>{let t=e.action===0&&e.button!==4?`m`:`M`;return`\x1B[<${js(e,!0)};${e.col};${e.row}${t}`},SGR_PIXELS:e=>{let t=e.action===0&&e.button!==4?`m`:`M`;return`\x1B[<${js(e,!0)};${e.x};${e.y}${t}`}},Ps=class extends M{constructor(e,t,n){super(),this._bufferService=e,this._coreService=t,this._optionsService=n,this._protocols={},this._encodings={},this._activeProtocol=``,this._activeEncoding=``,this._lastEvent=null,this._wheelPartialScroll=0,this._onProtocolChange=this._register(new F),this.onProtocolChange=this._onProtocolChange.event;for(let e of Object.keys(As))this.addProtocol(e,As[e]);for(let e of Object.keys(Ns))this.addEncoding(e,Ns[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(e){if(!this._protocols[e])throw Error(`unknown protocol "${e}"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw Error(`unknown encoding "${e}"`);this._activeEncoding=e}reset(){this.activeProtocol=`NONE`,this.activeEncoding=`DEFAULT`,this._lastEvent=null,this._wheelPartialScroll=0}consumeWheelEvent(e,t,n){if(e.deltaY===0||e.shiftKey||t===void 0||n===void 0)return 0;let r=t/n,i=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(i/=r+0,Math.abs(e.deltaY)<50&&(i*=.3),this._wheelPartialScroll+=i,i=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(i*=this._bufferService.rows),i}_applyScrollModifier(e,t){return t.altKey||t.ctrlKey||t.shiftKey?e*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:e*this._optionsService.rawOptions.scrollSensitivity}triggerMouseEvent(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows||e.button===4&&e.action===32||e.button===3&&e.action!==32||e.button!==4&&(e.action===2||e.action===3)||(e.col++,e.row++,e.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,e,this._activeEncoding===`SGR_PIXELS`))||!this._protocols[this._activeProtocol].restrict(e))return!1;let t=this._encodings[this._activeEncoding](e);return t&&(this._activeEncoding===`DEFAULT`?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0}explainEvents(e){return{down:!!(e&1),up:!!(e&2),drag:!!(e&4),move:!!(e&8),wheel:!!(e&16)}}_equalEvents(e,t,n){if(n){if(e.x!==t.x||e.y!==t.y)return!1}else if(e.col!==t.col||e.row!==t.row)return!1;return e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift}};Ps=O([k(0,Wt),k(1,Kt),k(2,Xt)],Ps);var Fs=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],Is=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],Z;function Ls(e,t){let n=0,r=t.length-1,i;if(et[r][1])return!1;for(;r>=n;)if(i=n+r>>1,e>t[i][1])n=i+1;else if(e=131072&&e<=196605||e>=196608&&e<=262141?2:1}charProperties(e,t){let n=this.wcwidth(e),r=n===0&&t!==0;if(r){let e=zs.extractWidth(t);e===0?r=!1:e>n&&(n=e)}return zs.createPropertyValue(0,n,r)}},zs=class e{constructor(){this._providers=Object.create(null),this._active=``,this._onChange=new F,this.onChange=this._onChange.event;let e=new Rs;this.register(e),this._active=e.version,this._activeProvider=e}static extractShouldJoin(e){return!!(e&1)}static extractWidth(e){return e>>1&3}static extractCharKind(e){return e>>3}static createPropertyValue(e,t,n=!1){return(e&16777215)<<3|(t&3)<<1|!!n}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(e){if(!this._providers[e])throw Error(`unknown Unicode version "${e}"`);this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)}register(e){this._providers[e.version]=e}wcwidth(e){return this._activeProvider.wcwidth(e)}getStringCellWidth(t){let n=0,r=0,i=t.length;for(let a=0;a=i)return n+this.wcwidth(o);let e=t.charCodeAt(a);56320<=e&&e<=57343?o=(o-55296)*1024+e-56320+65536:n+=this.wcwidth(e)}let s=this.charProperties(o,r),c=e.extractWidth(s);e.extractShouldJoin(s)&&(c-=e.extractWidth(r)),n+=c,r=s}return n}charProperties(e,t){return this._activeProvider.charProperties(e,t)}},Bs=class{constructor(){this.glevel=0,this._charsets=[]}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(e){this.glevel=e,this.charset=this._charsets[e]}setgCharset(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)}};function Vs(e){let t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1)?.get(e.cols-1),n=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);n&&t&&(n.isWrapped=t[3]!==0&&t[3]!==32)}var Hs=2147483647,Us=256,Ws=class e{constructor(e=32,t=32){if(this.maxLength=e,this.maxSubParamsLength=t,t>Us)throw Error(`maxSubParamsLength must not be greater than 256`);this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}static fromArray(t){let n=new e;if(!t.length)return n;for(let e=+!!Array.isArray(t[0]);e>8,r=this._subParamsIdx[t]&255;r-n>0&&e.push(Array.prototype.slice.call(this._subParams,n,r))}return e}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}addParam(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw Error(`values lesser than -1 are not allowed`);this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>Hs?Hs:e}}addSubParam(e){if(this._digitIsSub=!0,this.length){if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength){this._rejectSubDigits=!0;return}if(e<-1)throw Error(`values lesser than -1 are not allowed`);this._subParams[this._subParamsLength++]=e>Hs?Hs:e,this._subParamsIdx[this.length-1]++}}hasSubParams(e){return(this._subParamsIdx[e]&255)-(this._subParamsIdx[e]>>8)>0}getSubParams(e){let t=this._subParamsIdx[e]>>8,n=this._subParamsIdx[e]&255;return n-t>0?this._subParams.subarray(t,n):null}getSubParamsAll(){let e={};for(let t=0;t>8,r=this._subParamsIdx[t]&255;r-n>0&&(e[t]=this._subParams.slice(n,r))}return e}addDigit(e){let t;if(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;let n=this._digitIsSub?this._subParams:this.params,r=n[t-1];n[t-1]=~r?Math.min(r*10+e,Hs):e}},Gs=[],Ks=class{constructor(){this._state=0,this._active=Gs,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){this._handlers[e]===void 0&&(this._handlers[e]=[]);let n=this._handlers[e];return n.push(t),{dispose:()=>{let e=n.indexOf(t);e!==-1&&n.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=Gs}reset(){if(this._state===2)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=Gs,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||Gs,!this._active.length)this._handlerFb(this._id,`START`);else for(let e=this._active.length-1;e>=0;e--)this._active[e].start()}_put(e,t,n){if(!this._active.length)this._handlerFb(this._id,`PUT`,jt(e,t,n));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(e,t,n)}start(){this.reset(),this._state=1}put(e,t,n){if(this._state!==3){if(this._state===1)for(;t0&&this._put(e,t,n)}}end(e,t=!0){if(this._state!==0){if(this._state!==3){if(this._state===1&&this._start(),!this._active.length)this._handlerFb(this._id,`END`,e);else{let n=!1,r=this._active.length-1,i=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,n=t,i=this._stack.fallThrough,this._stack.paused=!1),!i&&n===!1){for(;r>=0&&(n=this._active[r].end(e),n!==!0);r--)if(n instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,n;r--}for(;r>=0;r--)if(n=this._active[r].end(!1),n instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,n}}this._active=Gs,this._id=-1,this._state=0}}},qs=class{constructor(e){this._handler=e,this._data=``,this._hitLimit=!1}start(){this._data=``,this._hitLimit=!1}put(e,t,n){this._hitLimit||(this._data+=jt(e,t,n),this._data.length>1e7&&(this._data=``,this._hitLimit=!0))}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data),t instanceof Promise))return t.then(e=>(this._data=``,this._hitLimit=!1,e));return this._data=``,this._hitLimit=!1,t}},Js=[],Ys=class{constructor(){this._handlers=Object.create(null),this._active=Js,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=Js}registerHandler(e,t){this._handlers[e]===void 0&&(this._handlers[e]=[]);let n=this._handlers[e];return n.push(t),{dispose:()=>{let e=n.indexOf(t);e!==-1&&n.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=Js,this._ident=0}hook(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||Js,!this._active.length)this._handlerFb(this._ident,`HOOK`,t);else for(let e=this._active.length-1;e>=0;e--)this._active[e].hook(t)}put(e,t,n){if(!this._active.length)this._handlerFb(this._ident,`PUT`,jt(e,t,n));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(e,t,n)}unhook(e,t=!0){if(!this._active.length)this._handlerFb(this._ident,`UNHOOK`,e);else{let n=!1,r=this._active.length-1,i=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,n=t,i=this._stack.fallThrough,this._stack.paused=!1),!i&&n===!1){for(;r>=0&&(n=this._active[r].unhook(e),n!==!0);r--)if(n instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,n;r--}for(;r>=0;r--)if(n=this._active[r].unhook(!1),n instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,n}this._active=Js,this._ident=0}},Xs=new Ws;Xs.addParam(0);var Zs=class{constructor(e){this._handler=e,this._data=``,this._params=Xs,this._hitLimit=!1}hook(e){this._params=e.length>1||e.params[0]?e.clone():Xs,this._data=``,this._hitLimit=!1}put(e,t,n){this._hitLimit||(this._data+=jt(e,t,n),this._data.length>1e7&&(this._data=``,this._hitLimit=!0))}unhook(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data,this._params),t instanceof Promise))return t.then(e=>(this._params=Xs,this._data=``,this._hitLimit=!1,e));return this._params=Xs,this._data=``,this._hitLimit=!1,t}},Qs=class{constructor(e){this.table=new Uint8Array(e)}setDefault(e,t){this.table.fill(e<<4|t)}add(e,t,n,r){this.table[t<<8|e]=n<<4|r}addMany(e,t,n,r){for(let i=0;it),n=(e,n)=>t.slice(e,n),r=n(32,127),i=n(0,24);i.push(25),i.push.apply(i,n(28,32));let a=n(0,14),o;for(o in e.setDefault(1,0),e.addMany(r,0,2,0),a)e.addMany([24,26,153,154],o,3,0),e.addMany(n(128,144),o,3,0),e.addMany(n(144,152),o,3,0),e.add(156,o,0,0),e.add(27,o,11,1),e.add(157,o,4,8),e.addMany([152,158,159],o,0,7),e.add(155,o,11,3),e.add(144,o,11,9);return e.addMany(i,0,3,0),e.addMany(i,1,3,1),e.add(127,1,0,1),e.addMany(i,8,0,8),e.addMany(i,3,3,3),e.add(127,3,0,3),e.addMany(i,4,3,4),e.add(127,4,0,4),e.addMany(i,6,3,6),e.addMany(i,5,3,5),e.add(127,5,0,5),e.addMany(i,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(r,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(n(28,32),8,0,8),e.addMany([88,94,95],1,0,7),e.addMany(r,7,0,7),e.addMany(i,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(91,1,11,3),e.addMany(n(64,127),3,7,0),e.addMany(n(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(n(48,60),4,8,4),e.addMany(n(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(n(32,64),6,0,6),e.add(127,6,0,6),e.addMany(n(64,127),6,0,0),e.addMany(n(32,48),3,9,5),e.addMany(n(32,48),5,9,5),e.addMany(n(48,64),5,0,6),e.addMany(n(64,127),5,7,0),e.addMany(n(32,48),4,9,5),e.addMany(n(32,48),1,9,2),e.addMany(n(32,48),2,9,2),e.addMany(n(48,127),2,10,0),e.addMany(n(48,80),1,10,0),e.addMany(n(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(n(96,127),1,10,0),e.add(80,1,11,9),e.addMany(i,9,0,9),e.add(127,9,0,9),e.addMany(n(28,32),9,0,9),e.addMany(n(32,48),9,9,12),e.addMany(n(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(i,11,0,11),e.addMany(n(32,128),11,0,11),e.addMany(n(28,32),11,0,11),e.addMany(i,10,0,10),e.add(127,10,0,10),e.addMany(n(28,32),10,0,10),e.addMany(n(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(n(32,48),10,9,12),e.addMany(i,12,0,12),e.add(127,12,0,12),e.addMany(n(28,32),12,0,12),e.addMany(n(32,48),12,9,12),e.addMany(n(48,64),12,0,11),e.addMany(n(64,127),12,12,13),e.addMany(n(64,127),10,12,13),e.addMany(n(64,127),9,12,13),e.addMany(i,13,13,13),e.addMany(r,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add($s,0,2,0),e.add($s,8,5,8),e.add($s,6,0,6),e.add($s,11,0,11),e.add($s,13,13,13),e}(),tc=class extends M{constructor(e=ec){super(),this._transitions=e,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new Ws,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(e,t,n)=>{},this._executeHandlerFb=e=>{},this._csiHandlerFb=(e,t)=>{},this._escHandlerFb=e=>{},this._errorHandlerFb=e=>e,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register(j(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null)})),this._oscParser=this._register(new Ks),this._dcsParser=this._register(new Ys),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:`\\`},()=>!0)}_identifier(e,t=[64,126]){let n=0;if(e.prefix){if(e.prefix.length>1)throw Error(`only one byte as prefix supported`);if(n=e.prefix.charCodeAt(0),n&&60>n||n>63)throw Error(`prefix must be in range 0x3c .. 0x3f`)}if(e.intermediates){if(e.intermediates.length>2)throw Error(`only two bytes as intermediates are supported`);for(let t=0;tr||r>47)throw Error(`intermediate must be in range 0x20 .. 0x2f`);n<<=8,n|=r}}if(e.final.length!==1)throw Error(`final must be a single byte`);let r=e.final.charCodeAt(0);if(t[0]>r||r>t[1])throw Error(`final must be in range ${t[0]} .. ${t[1]}`);return n<<=8,n|=r,n}identToString(e){let t=[];for(;e;)t.push(String.fromCharCode(e&255)),e>>=8;return t.reverse().join(``)}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){let n=this._identifier(e,[48,126]);this._escHandlers[n]===void 0&&(this._escHandlers[n]=[]);let r=this._escHandlers[n];return r.push(t),{dispose:()=>{let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){this._executeHandlers[e.charCodeAt(0)]=t}clearExecuteHandler(e){this._executeHandlers[e.charCodeAt(0)]&&delete this._executeHandlers[e.charCodeAt(0)]}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){let n=this._identifier(e);this._csiHandlers[n]===void 0&&(this._csiHandlers[n]=[]);let r=this._csiHandlers[n];return r.push(t),{dispose:()=>{let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._parseStack.state!==0&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,n,r,i){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=n,this._parseStack.transition=r,this._parseStack.chunkPos=i}parse(e,t,n){let r=0,i=0,a=0,o;if(this._parseStack.state){if(this._parseStack.state===2)this._parseStack.state=0,a=this._parseStack.chunkPos+1;else{if(n===void 0||this._parseStack.state===1)throw this._parseStack.state=1,Error(`improper continuation due to previous async handler, giving up parsing`);let t=this._parseStack.handlers,i=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(n===!1&&i>-1){for(;i>=0&&(o=t[i](this._params),o!==!0);i--)if(o instanceof Promise)return this._parseStack.handlerPos=i,o}this._parseStack.handlers=[];break;case 4:if(n===!1&&i>-1){for(;i>=0&&(o=t[i](),o!==!0);i--)if(o instanceof Promise)return this._parseStack.handlerPos=i,o}this._parseStack.handlers=[];break;case 6:if(r=e[this._parseStack.chunkPos],o=this._dcsParser.unhook(r!==24&&r!==26,n),o)return o;r===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(r=e[this._parseStack.chunkPos],o=this._oscParser.end(r!==24&&r!==26,n),o)return o;r===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,a=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=this._parseStack.transition&15}}for(let n=a;n>4){case 2:for(let i=n+1;;++i)if(i>=t||(r=e[i])<32||r>126&&r<$s||++i>=t||(r=e[i])<32||r>126&&r<$s||++i>=t||(r=e[i])<32||r>126&&r<$s||++i>=t||(r=e[i])<32||r>126&&r<$s){this._printHandler(e,n,i),n=i-1;break}break;case 3:this._executeHandlers[r]?this._executeHandlers[r]():this._executeHandlerFb(r),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:n,code:r,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:let a=this._csiHandlers[this._collect<<8|r],s=a?a.length-1:-1;for(;s>=0&&(o=a[s](this._params),o!==!0);s--)if(o instanceof Promise)return this._preserveStack(3,a,s,i,n),o;s<0&&this._csiHandlerFb(this._collect<<8|r,this._params),this.precedingJoinState=0;break;case 8:do switch(r){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(r-48)}while(++n47&&r<60);n--;break;case 9:this._collect<<=8,this._collect|=r;break;case 10:let c=this._escHandlers[this._collect<<8|r],l=c?c.length-1:-1;for(;l>=0&&(o=c[l](),o!==!0);l--)if(o instanceof Promise)return this._preserveStack(4,c,l,i,n),o;l<0&&this._escHandlerFb(this._collect<<8|r),this.precedingJoinState=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|r,this._params);break;case 13:for(let i=n+1;;++i)if(i>=t||(r=e[i])===24||r===26||r===27||r>127&&r<$s){this._dcsParser.put(e,n,i),n=i-1;break}break;case 14:if(o=this._dcsParser.unhook(r!==24&&r!==26),o)return this._preserveStack(6,[],0,i,n),o;r===27&&(i|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0;break;case 4:this._oscParser.start();break;case 5:for(let i=n+1;;i++)if(i>=t||(r=e[i])<32||r>127&&r<$s){this._oscParser.put(e,n,i),n=i-1;break}break;case 6:if(o=this._oscParser.end(r!==24&&r!==26),o)return this._preserveStack(5,[],0,i,n),o;r===27&&(i|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0}this.currentState=i&15}}},nc=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,rc=/^[\da-f]+$/;function ic(e){if(!e)return;let t=e.toLowerCase();if(t.indexOf(`rgb:`)===0){t=t.slice(4);let e=nc.exec(t);if(e){let t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(t.indexOf(`#`)===0&&(t=t.slice(1),rc.exec(t)&&[3,6,9,12].includes(t.length))){let e=t.length/3,n=[0,0,0];for(let r=0;r<3;++r){let i=parseInt(t.slice(e*r,e*r+e),16);n[r]=e===1?i<<4:e===2?i:e===3?i>>4:i>>8}return n}}function ac(e,t){let n=e.toString(16),r=n.length<2?`0`+n:n;switch(t){case 4:return n[0];case 8:return r;case 12:return(r+r).slice(0,3);default:return r+r}}function oc(e,t=16){let[n,r,i]=e;return`rgb:${ac(n,t)}/${ac(r,t)}/${ac(i,t)}`}var sc={"(":0,")":1,"*":2,"+":3,"-":1,".":2},cc=131072,lc=10;function uc(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}var dc=5e3,fc=0,pc=class extends M{constructor(e,t,n,r,i,a,o,s,c=new tc){super(),this._bufferService=e,this._charsetService=t,this._coreService=n,this._logService=r,this._optionsService=i,this._oscLinkService=a,this._coreMouseService=o,this._unicodeService=s,this._parser=c,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new Mt,this._utf8Decoder=new Nt,this._windowTitle=``,this._iconName=``,this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=Y.clone(),this._eraseAttrDataInternal=Y.clone(),this._onRequestBell=this._register(new F),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new F),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new F),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new F),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new F),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new F),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new F),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new F),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new F),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new F),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new F),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new F),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new F),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this._register(this._parser),this._dirtyRowTracker=new mc(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate(e=>this._activeBuffer=e.activeBuffer)),this._parser.setCsiHandlerFallback((e,t)=>{this._logService.debug(`Unknown CSI code: `,{identifier:this._parser.identToString(e),params:t.toArray()})}),this._parser.setEscHandlerFallback(e=>{this._logService.debug(`Unknown ESC code: `,{identifier:this._parser.identToString(e)})}),this._parser.setExecuteHandlerFallback(e=>{this._logService.debug(`Unknown EXECUTE code: `,{code:e})}),this._parser.setOscHandlerFallback((e,t,n)=>{this._logService.debug(`Unknown OSC code: `,{identifier:e,action:t,data:n})}),this._parser.setDcsHandlerFallback((e,t,n)=>{t===`HOOK`&&(n=n.toArray()),this._logService.debug(`Unknown DCS code: `,{identifier:this._parser.identToString(e),action:t,payload:n})}),this._parser.setPrintHandler((e,t,n)=>this.print(e,t,n)),this._parser.registerCsiHandler({final:`@`},e=>this.insertChars(e)),this._parser.registerCsiHandler({intermediates:` `,final:`@`},e=>this.scrollLeft(e)),this._parser.registerCsiHandler({final:`A`},e=>this.cursorUp(e)),this._parser.registerCsiHandler({intermediates:` `,final:`A`},e=>this.scrollRight(e)),this._parser.registerCsiHandler({final:`B`},e=>this.cursorDown(e)),this._parser.registerCsiHandler({final:`C`},e=>this.cursorForward(e)),this._parser.registerCsiHandler({final:`D`},e=>this.cursorBackward(e)),this._parser.registerCsiHandler({final:`E`},e=>this.cursorNextLine(e)),this._parser.registerCsiHandler({final:`F`},e=>this.cursorPrecedingLine(e)),this._parser.registerCsiHandler({final:`G`},e=>this.cursorCharAbsolute(e)),this._parser.registerCsiHandler({final:`H`},e=>this.cursorPosition(e)),this._parser.registerCsiHandler({final:`I`},e=>this.cursorForwardTab(e)),this._parser.registerCsiHandler({final:`J`},e=>this.eraseInDisplay(e,!1)),this._parser.registerCsiHandler({prefix:`?`,final:`J`},e=>this.eraseInDisplay(e,!0)),this._parser.registerCsiHandler({final:`K`},e=>this.eraseInLine(e,!1)),this._parser.registerCsiHandler({prefix:`?`,final:`K`},e=>this.eraseInLine(e,!0)),this._parser.registerCsiHandler({final:`L`},e=>this.insertLines(e)),this._parser.registerCsiHandler({final:`M`},e=>this.deleteLines(e)),this._parser.registerCsiHandler({final:`P`},e=>this.deleteChars(e)),this._parser.registerCsiHandler({final:`S`},e=>this.scrollUp(e)),this._parser.registerCsiHandler({final:`T`},e=>this.scrollDown(e)),this._parser.registerCsiHandler({final:`X`},e=>this.eraseChars(e)),this._parser.registerCsiHandler({final:`Z`},e=>this.cursorBackwardTab(e)),this._parser.registerCsiHandler({final:"`"},e=>this.charPosAbsolute(e)),this._parser.registerCsiHandler({final:`a`},e=>this.hPositionRelative(e)),this._parser.registerCsiHandler({final:`b`},e=>this.repeatPrecedingCharacter(e)),this._parser.registerCsiHandler({final:`c`},e=>this.sendDeviceAttributesPrimary(e)),this._parser.registerCsiHandler({prefix:`>`,final:`c`},e=>this.sendDeviceAttributesSecondary(e)),this._parser.registerCsiHandler({final:`d`},e=>this.linePosAbsolute(e)),this._parser.registerCsiHandler({final:`e`},e=>this.vPositionRelative(e)),this._parser.registerCsiHandler({final:`f`},e=>this.hVPosition(e)),this._parser.registerCsiHandler({final:`g`},e=>this.tabClear(e)),this._parser.registerCsiHandler({final:`h`},e=>this.setMode(e)),this._parser.registerCsiHandler({prefix:`?`,final:`h`},e=>this.setModePrivate(e)),this._parser.registerCsiHandler({final:`l`},e=>this.resetMode(e)),this._parser.registerCsiHandler({prefix:`?`,final:`l`},e=>this.resetModePrivate(e)),this._parser.registerCsiHandler({final:`m`},e=>this.charAttributes(e)),this._parser.registerCsiHandler({final:`n`},e=>this.deviceStatus(e)),this._parser.registerCsiHandler({prefix:`?`,final:`n`},e=>this.deviceStatusPrivate(e)),this._parser.registerCsiHandler({intermediates:`!`,final:`p`},e=>this.softReset(e)),this._parser.registerCsiHandler({intermediates:` `,final:`q`},e=>this.setCursorStyle(e)),this._parser.registerCsiHandler({final:`r`},e=>this.setScrollRegion(e)),this._parser.registerCsiHandler({final:`s`},e=>this.saveCursor(e)),this._parser.registerCsiHandler({final:`t`},e=>this.windowOptions(e)),this._parser.registerCsiHandler({final:`u`},e=>this.restoreCursor(e)),this._parser.registerCsiHandler({intermediates:`'`,final:`}`},e=>this.insertColumns(e)),this._parser.registerCsiHandler({intermediates:`'`,final:`~`},e=>this.deleteColumns(e)),this._parser.registerCsiHandler({intermediates:`"`,final:`q`},e=>this.selectProtected(e)),this._parser.registerCsiHandler({intermediates:`$`,final:`p`},e=>this.requestMode(e,!0)),this._parser.registerCsiHandler({prefix:`?`,intermediates:`$`,final:`p`},e=>this.requestMode(e,!1)),this._parser.setExecuteHandler(R.BEL,()=>this.bell()),this._parser.setExecuteHandler(R.LF,()=>this.lineFeed()),this._parser.setExecuteHandler(R.VT,()=>this.lineFeed()),this._parser.setExecuteHandler(R.FF,()=>this.lineFeed()),this._parser.setExecuteHandler(R.CR,()=>this.carriageReturn()),this._parser.setExecuteHandler(R.BS,()=>this.backspace()),this._parser.setExecuteHandler(R.HT,()=>this.tab()),this._parser.setExecuteHandler(R.SO,()=>this.shiftOut()),this._parser.setExecuteHandler(R.SI,()=>this.shiftIn()),this._parser.setExecuteHandler(ha.IND,()=>this.index()),this._parser.setExecuteHandler(ha.NEL,()=>this.nextLine()),this._parser.setExecuteHandler(ha.HTS,()=>this.tabSet()),this._parser.registerOscHandler(0,new qs(e=>(this.setTitle(e),this.setIconName(e),!0))),this._parser.registerOscHandler(1,new qs(e=>this.setIconName(e))),this._parser.registerOscHandler(2,new qs(e=>this.setTitle(e))),this._parser.registerOscHandler(4,new qs(e=>this.setOrReportIndexedColor(e))),this._parser.registerOscHandler(8,new qs(e=>this.setHyperlink(e))),this._parser.registerOscHandler(10,new qs(e=>this.setOrReportFgColor(e))),this._parser.registerOscHandler(11,new qs(e=>this.setOrReportBgColor(e))),this._parser.registerOscHandler(12,new qs(e=>this.setOrReportCursorColor(e))),this._parser.registerOscHandler(104,new qs(e=>this.restoreIndexedColor(e))),this._parser.registerOscHandler(110,new qs(e=>this.restoreFgColor(e))),this._parser.registerOscHandler(111,new qs(e=>this.restoreBgColor(e))),this._parser.registerOscHandler(112,new qs(e=>this.restoreCursorColor(e))),this._parser.registerEscHandler({final:`7`},()=>this.saveCursor()),this._parser.registerEscHandler({final:`8`},()=>this.restoreCursor()),this._parser.registerEscHandler({final:`D`},()=>this.index()),this._parser.registerEscHandler({final:`E`},()=>this.nextLine()),this._parser.registerEscHandler({final:`H`},()=>this.tabSet()),this._parser.registerEscHandler({final:`M`},()=>this.reverseIndex()),this._parser.registerEscHandler({final:`=`},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:`>`},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:`c`},()=>this.fullReset()),this._parser.registerEscHandler({final:`n`},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:`o`},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:`|`},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:`}`},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:`~`},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:`%`,final:`@`},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:`%`,final:`G`},()=>this.selectDefaultCharset());for(let e in X)this._parser.registerEscHandler({intermediates:`(`,final:e},()=>this.selectCharset(`(`+e)),this._parser.registerEscHandler({intermediates:`)`,final:e},()=>this.selectCharset(`)`+e)),this._parser.registerEscHandler({intermediates:`*`,final:e},()=>this.selectCharset(`*`+e)),this._parser.registerEscHandler({intermediates:`+`,final:e},()=>this.selectCharset(`+`+e)),this._parser.registerEscHandler({intermediates:`-`,final:e},()=>this.selectCharset(`-`+e)),this._parser.registerEscHandler({intermediates:`.`,final:e},()=>this.selectCharset(`.`+e)),this._parser.registerEscHandler({intermediates:`/`,final:e},()=>this.selectCharset(`/`+e));this._parser.registerEscHandler({intermediates:`#`,final:`8`},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(e=>(this._logService.error(`Parsing error: `,e),e)),this._parser.registerDcsHandler({intermediates:`$`,final:`q`},new Zs((e,t)=>this.requestStatusString(e,t)))}getAttrData(){return this._curAttrData}_preserveStack(e,t,n,r){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=n,this._parseStack.position=r}_logSlowResolvingAsync(e){this._logService.logLevel<=3&&Promise.race([e,new Promise((e,t)=>setTimeout(()=>t(`#SLOW_TIMEOUT`),dc))]).catch(e=>{if(e!==`#SLOW_TIMEOUT`)throw e;console.warn(`async parser handler taking longer than ${dc} ms`)})}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let n,r=this._activeBuffer.x,i=this._activeBuffer.y,a=0,o=this._parseStack.paused;if(o){if(n=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(n),n;r=this._parseStack.cursorStartX,i=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>cc&&(a=this._parseStack.position+cc)}if(this._logService.logLevel<=1&&this._logService.debug(`parsing data ${typeof e==`string`?` "${e}"`:` "${Array.prototype.map.call(e,e=>String.fromCharCode(e)).join(``)}"`}`),this._logService.logLevel===0&&this._logService.trace(`parsing data (codes)`,typeof e==`string`?e.split(``).map(e=>e.charCodeAt(0)):e),this._parseBuffer.lengthcc)for(let t=a;t0&&d.getWidth(this._activeBuffer.x-1)===2&&d.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let f=this._parser.precedingJoinState;for(let p=t;ps){if(c){let e=d,t=this._activeBuffer.x-m;for(this._activeBuffer.x=m,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),d=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),m>0&&d instanceof ss&&d.copyCellsFrom(e,t,0,m,!1);t=0;)d.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}else if(l&&(d.insertCells(this._activeBuffer.x,i-m,this._activeBuffer.getNullCell(u)),d.getWidth(s-1)===2&&d.setCellFromCodepoint(s-1,0,1,u)),d.setCellFromCodepoint(this._activeBuffer.x++,r,i,u),i>0)for(;--i;)d.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=f,this._activeBuffer.x0&&d.getWidth(this._activeBuffer.x)===0&&!d.hasContent(this._activeBuffer.x)&&d.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return e.final===`t`&&!e.prefix&&!e.intermediates?this._parser.registerCsiHandler(e,e=>!uc(e.params[0],this._optionsService.rawOptions.windowOptions)||t(e)):this._parser.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new Zs(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new qs(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){let t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){let t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){let t=e.params[0];return t===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:t===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){let t=e.params[0];return t===1&&(this._curAttrData.bg|=536870912),(t===2||t===0)&&(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,n,r=!1,i=!1){let a=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);a.replaceCells(t,n,this._activeBuffer.getNullCell(this._eraseAttrData()),i),r&&(a.isWrapped=!1)}_resetBufferLine(e,t=!1){let n=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);n&&(n.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),n.isWrapped=!1)}eraseInDisplay(e,t=!1){this._restrictCursor(this._bufferService.cols);let n;switch(e.params[0]){case 0:for(n=this._activeBuffer.y,this._dirtyRowTracker.markDirty(n),this._eraseInBufferLine(n++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);n=this._bufferService.cols&&(this._activeBuffer.lines.get(n+1).isWrapped=!1);n--;)this._resetBufferLine(n,t);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(n=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,n-1);n--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+n)?.getTrimmedLength(););for(;n>=0;n--)this._bufferService.scroll(this._eraseAttrData())}else{for(n=this._bufferService.rows,this._dirtyRowTracker.markDirty(n-1);n--;)this._resetBufferLine(n,t);this._dirtyRowTracker.markDirty(0)}break;case 3:let e=this._activeBuffer.lines.length-this._bufferService.rows;e>0&&(this._activeBuffer.lines.trimStart(e),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-e,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-e,0),this._onScroll.fire(0))}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let c=s;for(let e=1;e0||(this._is(`xterm`)||this._is(`rxvt-unicode`)||this._is(`screen`)?this._coreService.triggerDataEvent(R.ESC+`[?1;2c`):this._is(`linux`)&&this._coreService.triggerDataEvent(R.ESC+`[?6c`)),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is(`xterm`)?this._coreService.triggerDataEvent(R.ESC+`[>0;276;0c`):this._is(`rxvt-unicode`)?this._coreService.triggerDataEvent(R.ESC+`[>85;95;0c`):this._is(`linux`)?this._coreService.triggerDataEvent(e.params[0]+`c`):this._is(`screen`)&&this._coreService.triggerDataEvent(R.ESC+`[>83;40003;0c`)),!0}_is(e){return(this._optionsService.rawOptions.termName+``).indexOf(e)===0}setMode(e){for(let t=0;t(e[e.NOT_RECOGNIZED=0]=`NOT_RECOGNIZED`,e[e.SET=1]=`SET`,e[e.RESET=2]=`RESET`,e[e.PERMANENTLY_SET=3]=`PERMANENTLY_SET`,e[e.PERMANENTLY_RESET=4]=`PERMANENTLY_RESET`))(n||={});let r=this._coreService.decPrivateModes,{activeProtocol:i,activeEncoding:a}=this._coreMouseService,o=this._coreService,{buffers:s,cols:c}=this._bufferService,{active:l,alt:u}=s,d=this._optionsService.rawOptions,f=(e,n)=>(o.triggerDataEvent(`${R.ESC}[${t?``:`?`}${e};${n}$y`),!0),p=e=>e?1:2,m=e.params[0];return t?m===2?f(m,4):m===4?f(m,p(o.modes.insertMode)):m===12?f(m,3):m===20?f(m,p(d.convertEol)):f(m,0):m===1?f(m,p(r.applicationCursorKeys)):m===3?f(m,d.windowOptions.setWinLines?c===80?2:+(c===132):0):m===6?f(m,p(r.origin)):m===7?f(m,p(r.wraparound)):m===8?f(m,3):m===9?f(m,p(i===`X10`)):m===12?f(m,p(d.cursorBlink)):m===25?f(m,p(!o.isCursorHidden)):m===45?f(m,p(r.reverseWraparound)):m===66?f(m,p(r.applicationKeypad)):m===67?f(m,4):m===1e3?f(m,p(i===`VT200`)):m===1002?f(m,p(i===`DRAG`)):m===1003?f(m,p(i===`ANY`)):m===1004?f(m,p(r.sendFocus)):m===1005?f(m,4):m===1006?f(m,p(a===`SGR`)):m===1015?f(m,4):m===1016?f(m,p(a===`SGR_PIXELS`)):m===1048?f(m,1):m===47||m===1047||m===1049?f(m,p(l===u)):m===2004?f(m,p(r.bracketedPasteMode)):m===2026?f(m,p(r.synchronizedOutput)):f(m,0)}_updateAttrColor(e,t,n,r,i){return t===2?(e|=50331648,e&=-16777216,e|=It.fromColorRGB([n,r,i])):t===5&&(e&=-50331904,e|=33554432|n&255),e}_extractColor(e,t,n){let r=[0,0,-1,0,0,0],i=0,a=0;do{if(r[a+i]=e.params[t+a],e.hasSubParams(t+a)){let n=e.getSubParams(t+a),o=0;do r[1]===5&&(i=1),r[a+o+1+i]=n[o];while(++o=2||r[1]===2&&a+i>=5)break;r[1]&&(i=1)}while(++a+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,e===0&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=Y.fg,e.bg=Y.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(e.length===1&&e.params[0]===0)return this._processSGR0(this._curAttrData),!0;let t=e.length,n,r=this._curAttrData;for(let i=0;i=30&&n<=37?(r.fg&=-50331904,r.fg|=16777216|n-30):n>=40&&n<=47?(r.bg&=-50331904,r.bg|=16777216|n-40):n>=90&&n<=97?(r.fg&=-50331904,r.fg|=n-90|16777224):n>=100&&n<=107?(r.bg&=-50331904,r.bg|=n-100|16777224):n===0?this._processSGR0(r):n===1?r.fg|=134217728:n===3?r.bg|=67108864:n===4?(r.fg|=268435456,this._processUnderline(e.hasSubParams(i)?e.getSubParams(i)[0]:1,r)):n===5?r.fg|=536870912:n===7?r.fg|=67108864:n===8?r.fg|=1073741824:n===9?r.fg|=2147483648:n===2?r.bg|=134217728:n===21?this._processUnderline(2,r):n===22?(r.fg&=-134217729,r.bg&=-134217729):n===23?r.bg&=-67108865:n===24?(r.fg&=-268435457,this._processUnderline(0,r)):n===25?r.fg&=-536870913:n===27?r.fg&=-67108865:n===28?r.fg&=-1073741825:n===29?r.fg&=2147483647:n===39?(r.fg&=-67108864,r.fg|=Y.fg&16777215):n===49?(r.bg&=-67108864,r.bg|=Y.bg&16777215):n===38||n===48||n===58?i+=this._extractColor(e,i,r):n===53?r.bg|=1073741824:n===55?r.bg&=-1073741825:n===59?(r.extended=r.extended.clone(),r.extended.underlineColor=-1,r.updateExtended()):n===100?(r.fg&=-67108864,r.fg|=Y.fg&16777215,r.bg&=-67108864,r.bg|=Y.bg&16777215):this._logService.debug(`Unknown SGR attribute: %d.`,n);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent(`${R.ESC}[0n`);break;case 6:let e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${R.ESC}[${e};${t}R`)}return!0}deviceStatusPrivate(e){if(e.params[0]===6){let e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${R.ESC}[?${e};${t}R`)}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=Y.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){let t=e.length===0?1:e.params[0];if(t===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(t){case 1:case 2:this._coreService.decPrivateModes.cursorStyle=`block`;break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle=`underline`;break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle=`bar`}let e=t%2==1;this._coreService.decPrivateModes.cursorBlink=e}return!0}setScrollRegion(e){let t=e.params[0]||1,n;return(e.length<2||(n=e.params[1])>this._bufferService.rows||n===0)&&(n=this._bufferService.rows),n>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=n-1,this._setCursor(0,0)),!0}windowOptions(e){if(!uc(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;let t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:t!==2&&this._onRequestWindowsOptionsReport.fire(0);break;case 16:this._onRequestWindowsOptionsReport.fire(1);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${R.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:(t===0||t===2)&&(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>lc&&this._windowTitleStack.shift()),(t===0||t===1)&&(this._iconNameStack.push(this._iconName),this._iconNameStack.length>lc&&this._iconNameStack.shift());break;case 23:(t===0||t===2)&&this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),(t===0||t===1)&&this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0}restoreCursor(e){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0}setTitle(e){return this._windowTitle=e,this._onTitleChange.fire(e),!0}setIconName(e){return this._iconName=e,!0}setOrReportIndexedColor(e){let t=[],n=e.split(`;`);for(;n.length>1;){let e=n.shift(),r=n.shift();if(/^\d+$/.exec(e)){let n=parseInt(e);if(hc(n)){if(r===`?`)t.push({type:0,index:n});else{let e=ic(r);e&&t.push({type:1,index:n,color:e})}}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){let t=e.indexOf(`;`);if(t===-1)return!0;let n=e.slice(0,t).trim(),r=e.slice(t+1);return r?this._createHyperlink(n,r):!n.trim()&&this._finishHyperlink()}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();let n=e.split(`:`),r,i=n.findIndex(e=>e.startsWith(`id=`));return i!==-1&&(r=n[i].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:r,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){let n=e.split(`;`);for(let e=0;e=this._specialColors.length);++e,++t)if(n[e]===`?`)this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{let r=ic(n[e]);r&&this._onColor.fire([{type:1,index:this._specialColors[t],color:r}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;let t=[],n=e.split(`;`);for(let e=0;e=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){let e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=Y.clone(),this._eraseAttrDataInternal=Y.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=this._curAttrData.bg&67108863,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){let e=new Rt;e.content=4194373,e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`${R.ESC}${e}${R.ESC}\\`),!0),r=this._bufferService.buffer,i=this._optionsService.rawOptions;return n(e===`"q`?`P1$r${+!!this._curAttrData.isProtected()}"q`:e===`"p`?`P1$r61;1"p`:e===`r`?`P1$r${r.scrollTop+1};${r.scrollBottom+1}r`:e===`m`?`P1$r0m`:e===` q`?`P1$r${{block:2,underline:4,bar:6}[i.cursorStyle]-+!!i.cursorBlink} q`:`P0$r`)}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}},mc=class{constructor(e){this._bufferService=e,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(e){ethis.end&&(this.end=e)}markRangeDirty(e,t){e>t&&(fc=e,e=t,t=fc),ethis.end&&(this.end=t)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};mc=O([k(0,Wt)],mc);function hc(e){return 0<=e&&e<256}var gc=5e7,_c=12,vc=50,yc=class extends M{constructor(e){super(),this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._onWriteParsed=this._register(new F),this.onWriteParsed=this._onWriteParsed.event}handleUserInput(){this._didUserInput=!0}writeSync(e,t){if(t!==void 0&&this._syncCalls>t){this._syncCalls=0;return}if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;this._isSyncWriting=!0;let n;for(;n=this._writeBuffer.shift();){this._action(n);let e=this._callbacks.shift();e&&e()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(this._pendingData>gc)throw Error(`write data discarded, use flow control to avoid losing data`);if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput){this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),this._innerWrite();return}setTimeout(()=>this._innerWrite())}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}_innerWrite(e=0,t=!0){let n=e||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){let e=this._writeBuffer[this._bufferOffset],r=this._action(e,t);if(r){r.catch(e=>(queueMicrotask(()=>{throw e}),Promise.resolve(!1))).then(e=>performance.now()-n>=_c?setTimeout(()=>this._innerWrite(0,e)):this._innerWrite(n,e));return}let i=this._callbacks[this._bufferOffset];if(i&&i(),this._bufferOffset++,this._pendingData-=e.length,performance.now()-n>=_c)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>vc&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout(()=>this._innerWrite())):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}},bc=class{constructor(e){this._bufferService=e,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(e){let t=this._bufferService.buffer;if(e.id===void 0){let n=t.addMarker(t.ybase+t.y),r={data:e,id:this._nextId++,lines:[n]};return n.onDispose(()=>this._removeMarkerFromLink(r,n)),this._dataByLinkId.set(r.id,r),r.id}let n=e,r=this._getEntryIdKey(n),i=this._entriesWithId.get(r);if(i)return this.addLineToLink(i.id,t.ybase+t.y),i.id;let a=t.addMarker(t.ybase+t.y),o={id:this._nextId++,key:this._getEntryIdKey(n),data:n,lines:[a]};return a.onDispose(()=>this._removeMarkerFromLink(o,a)),this._entriesWithId.set(o.key,o),this._dataByLinkId.set(o.id,o),o.id}addLineToLink(e,t){let n=this._dataByLinkId.get(e);if(n&&n.lines.every(e=>e.line!==t)){let e=this._bufferService.buffer.addMarker(t);n.lines.push(e),e.onDispose(()=>this._removeMarkerFromLink(n,e))}}getLinkData(e){return this._dataByLinkId.get(e)?.data}_getEntryIdKey(e){return`${e.id};;${e.uri}`}_removeMarkerFromLink(e,t){let n=e.lines.indexOf(t);n!==-1&&(e.lines.splice(n,1),e.lines.length===0&&(e.data.id!==void 0&&this._entriesWithId.delete(e.key),this._dataByLinkId.delete(e.id)))}};bc=O([k(0,Wt)],bc);var xc=!1,Sc=class extends M{constructor(e){super(),this._windowsWrappingHeuristics=this._register(new Nn),this._onBinary=this._register(new F),this.onBinary=this._onBinary.event,this._onData=this._register(new F),this.onData=this._onData.event,this._onLineFeed=this._register(new F),this.onLineFeed=this._onLineFeed.event,this._onResize=this._register(new F),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new F),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new F),this._instantiationService=new $o,this.optionsService=this._register(new ws(e)),this._instantiationService.setService(Xt,this.optionsService),this._bufferService=this._register(this._instantiationService.createInstance(xs)),this._instantiationService.setService(Wt,this._bufferService),this._logService=this._register(this._instantiationService.createInstance(ns)),this._instantiationService.setService(Yt,this._logService),this.coreService=this._register(this._instantiationService.createInstance(ks)),this._instantiationService.setService(Kt,this.coreService),this.coreMouseService=this._register(this._instantiationService.createInstance(Ps)),this._instantiationService.setService(Gt,this.coreMouseService),this.unicodeService=this._register(this._instantiationService.createInstance(zs)),this._instantiationService.setService(Qt,this.unicodeService),this._charsetService=this._instantiationService.createInstance(Bs),this._instantiationService.setService(qt,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(bc),this._instantiationService.setService(Zt,this._oscLinkService),this._inputHandler=this._register(new pc(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this._register(P.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(this._inputHandler),this._register(P.forward(this._bufferService.onResize,this._onResize)),this._register(P.forward(this.coreService.onData,this._onData)),this._register(P.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom(!0))),this._register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this._register(this.optionsService.onMultipleOptionChange([`windowsMode`,`windowsPty`],()=>this._handleWindowsPtyOptionChange())),this._register(this._bufferService.onScroll(()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this._register(new yc((e,t)=>this._inputHandler.parse(e,t))),this._register(P.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new F),this._onScroll.event(e=>{this._onScrollApi?.fire(e.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(let t in e)this.optionsService.options[t]=e[t]}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=3&&!xc&&(this._logService.warn(`writeSync is unreliable and will be removed soon.`),xc=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,ys),t=Math.max(t,bs),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t){this._bufferService.scrollLines(e,t)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let e=!1,t=this.optionsService.rawOptions.windowsPty;t&&t.buildNumber!==void 0&&t.buildNumber!==void 0?e=t.backend===`conpty`&&t.buildNumber<21376:this.optionsService.rawOptions.windowsMode&&(e=!0),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let e=[];e.push(this.onLineFeed(Vs.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:`H`},()=>(Vs(this._bufferService),!1))),this._windowsWrappingHeuristics.value=j(()=>{for(let t of e)t.dispose()})}}},Cc={48:[`0`,`)`],49:[`1`,`!`],50:[`2`,`@`],51:[`3`,`#`],52:[`4`,`$`],53:[`5`,`%`],54:[`6`,`^`],55:[`7`,`&`],56:[`8`,`*`],57:[`9`,`(`],186:[`;`,`:`],187:[`=`,`+`],188:[`,`,`<`],189:[`-`,`_`],190:[`.`,`>`],191:[`/`,`?`],192:["`",`~`],219:[`[`,`{`],220:[`\\`,`|`],221:[`]`,`}`],222:[`'`,`"`]};function wc(e,t,n,r){let i={type:0,cancel:!1,key:void 0},a=+!!e.shiftKey|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:e.key===`UIKeyInputUpArrow`?i.key=t?R.ESC+`OA`:R.ESC+`[A`:e.key===`UIKeyInputLeftArrow`?i.key=t?R.ESC+`OD`:R.ESC+`[D`:e.key===`UIKeyInputRightArrow`?i.key=t?R.ESC+`OC`:R.ESC+`[C`:e.key===`UIKeyInputDownArrow`&&(i.key=t?R.ESC+`OB`:R.ESC+`[B`);break;case 8:i.key=e.ctrlKey?`\b`:R.DEL,e.altKey&&(i.key=R.ESC+i.key);break;case 9:if(e.shiftKey){i.key=R.ESC+`[Z`;break}i.key=R.HT,i.cancel=!0;break;case 13:i.key=e.altKey?R.ESC+R.CR:R.CR,i.cancel=!0;break;case 27:i.key=R.ESC,e.altKey&&(i.key=R.ESC+R.ESC),i.cancel=!0;break;case 37:if(e.metaKey)break;i.key=a?R.ESC+`[1;`+(a+1)+`D`:t?R.ESC+`OD`:R.ESC+`[D`;break;case 39:if(e.metaKey)break;i.key=a?R.ESC+`[1;`+(a+1)+`C`:t?R.ESC+`OC`:R.ESC+`[C`;break;case 38:if(e.metaKey)break;i.key=a?R.ESC+`[1;`+(a+1)+`A`:t?R.ESC+`OA`:R.ESC+`[A`;break;case 40:if(e.metaKey)break;i.key=a?R.ESC+`[1;`+(a+1)+`B`:t?R.ESC+`OB`:R.ESC+`[B`;break;case 45:!e.shiftKey&&!e.ctrlKey&&(i.key=R.ESC+`[2~`);break;case 46:i.key=a?R.ESC+`[3;`+(a+1)+`~`:R.ESC+`[3~`;break;case 36:i.key=a?R.ESC+`[1;`+(a+1)+`H`:t?R.ESC+`OH`:R.ESC+`[H`;break;case 35:i.key=a?R.ESC+`[1;`+(a+1)+`F`:t?R.ESC+`OF`:R.ESC+`[F`;break;case 33:e.shiftKey?i.type=2:i.key=e.ctrlKey?R.ESC+`[5;`+(a+1)+`~`:R.ESC+`[5~`;break;case 34:e.shiftKey?i.type=3:i.key=e.ctrlKey?R.ESC+`[6;`+(a+1)+`~`:R.ESC+`[6~`;break;case 112:i.key=a?R.ESC+`[1;`+(a+1)+`P`:R.ESC+`OP`;break;case 113:i.key=a?R.ESC+`[1;`+(a+1)+`Q`:R.ESC+`OQ`;break;case 114:i.key=a?R.ESC+`[1;`+(a+1)+`R`:R.ESC+`OR`;break;case 115:i.key=a?R.ESC+`[1;`+(a+1)+`S`:R.ESC+`OS`;break;case 116:i.key=a?R.ESC+`[15;`+(a+1)+`~`:R.ESC+`[15~`;break;case 117:i.key=a?R.ESC+`[17;`+(a+1)+`~`:R.ESC+`[17~`;break;case 118:i.key=a?R.ESC+`[18;`+(a+1)+`~`:R.ESC+`[18~`;break;case 119:i.key=a?R.ESC+`[19;`+(a+1)+`~`:R.ESC+`[19~`;break;case 120:i.key=a?R.ESC+`[20;`+(a+1)+`~`:R.ESC+`[20~`;break;case 121:i.key=a?R.ESC+`[21;`+(a+1)+`~`:R.ESC+`[21~`;break;case 122:i.key=a?R.ESC+`[23;`+(a+1)+`~`:R.ESC+`[23~`;break;case 123:i.key=a?R.ESC+`[24;`+(a+1)+`~`:R.ESC+`[24~`;break;default:if(e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey)e.keyCode>=65&&e.keyCode<=90?i.key=String.fromCharCode(e.keyCode-64):e.keyCode===32?i.key=R.NUL:e.keyCode>=51&&e.keyCode<=55?i.key=String.fromCharCode(e.keyCode-51+27):e.keyCode===56?i.key=R.DEL:e.keyCode===219?i.key=R.ESC:e.keyCode===220?i.key=R.FS:e.keyCode===221&&(i.key=R.GS);else if((!n||r)&&e.altKey&&!e.metaKey){let t=Cc[e.keyCode]?.[+!!e.shiftKey];if(t)i.key=R.ESC+t;else if(e.keyCode>=65&&e.keyCode<=90){let t=e.ctrlKey?e.keyCode-64:e.keyCode+32,n=String.fromCharCode(t);e.shiftKey&&(n=n.toUpperCase()),i.key=R.ESC+n}else if(e.keyCode===32)i.key=R.ESC+(e.ctrlKey?R.NUL:` `);else if(e.key===`Dead`&&e.code.startsWith(`Key`)){let t=e.code.slice(3,4);e.shiftKey||(t=t.toLowerCase()),i.key=R.ESC+t,i.cancel=!0}}else n&&!e.altKey&&!e.ctrlKey&&!e.shiftKey&&e.metaKey?e.keyCode===65&&(i.type=1):e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&e.key.length===1?i.key=e.key:e.key&&e.ctrlKey&&(e.key===`_`&&(i.key=R.US),e.key===`@`&&(i.key=R.NUL))}return i}var Q=0,Tc=class{constructor(e){this._getKey=e,this._array=[],this._insertedValues=[],this._flushInsertedTask=new vo,this._isFlushingInserted=!1,this._deletedIndices=[],this._flushDeletedTask=new vo,this._isFlushingDeleted=!1}clear(){this._array.length=0,this._insertedValues.length=0,this._flushInsertedTask.clear(),this._isFlushingInserted=!1,this._deletedIndices.length=0,this._flushDeletedTask.clear(),this._isFlushingDeleted=!1}insert(e){this._flushCleanupDeleted(),this._insertedValues.length===0&&this._flushInsertedTask.enqueue(()=>this._flushInserted()),this._insertedValues.push(e)}_flushInserted(){let e=this._insertedValues.sort((e,t)=>this._getKey(e)-this._getKey(t)),t=0,n=0,r=Array(this._array.length+this._insertedValues.length);for(let i=0;i=this._array.length||this._getKey(e[t])<=this._getKey(this._array[n])?(r[i]=e[t],t++):r[i]=this._array[n++];this._array=r,this._insertedValues.length=0}_flushCleanupInserted(){!this._isFlushingInserted&&this._insertedValues.length>0&&this._flushInsertedTask.flush()}delete(e){if(this._flushCleanupInserted(),this._array.length===0)return!1;let t=this._getKey(e);if(t===void 0||(Q=this._search(t),Q===-1)||this._getKey(this._array[Q])!==t)return!1;do if(this._array[Q]===e)return this._deletedIndices.length===0&&this._flushDeletedTask.enqueue(()=>this._flushDeleted()),this._deletedIndices.push(Q),!0;while(++Qe-t),t=0,n=Array(this._array.length-e.length),r=0;for(let i=0;i0&&this._flushDeletedTask.flush()}*getKeyIterator(e){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),this._array.length!==0&&(Q=this._search(e),!(Q<0||Q>=this._array.length)&&this._getKey(this._array[Q])===e))do yield this._array[Q];while(++Q=this._array.length)&&this._getKey(this._array[Q])===e))do t(this._array[Q]);while(++Q=t;){let r=t+n>>1,i=this._getKey(this._array[r]);if(i>e)n=r-1;else if(i0&&this._getKey(this._array[r-1])===e;)r--;return r}}return t}},Ec=0,Dc=0,Oc=class extends M{constructor(){super(),this._decorations=new Tc(e=>e?.marker.line),this._onDecorationRegistered=this._register(new F),this.onDecorationRegistered=this._onDecorationRegistered.event,this._onDecorationRemoved=this._register(new F),this.onDecorationRemoved=this._onDecorationRemoved.event,this._register(j(()=>this.reset()))}get decorations(){return this._decorations.values()}registerDecoration(e){if(e.marker.isDisposed)return;let t=new kc(e);if(t){let e=t.marker.onDispose(()=>t.dispose()),n=t.onDispose(()=>{n.dispose(),t&&(this._decorations.delete(t)&&this._onDecorationRemoved.fire(t),e.dispose())});this._decorations.insert(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(let e of this._decorations.values())e.dispose();this._decorations.clear()}*getDecorationsAtCell(e,t,n){let r=0,i=0;for(let a of this._decorations.getKeyIterator(t))r=a.options.x??0,i=r+(a.options.width??1),e>=r&&e{Ec=t.options.x??0,Dc=Ec+(t.options.width??1),e>=Ec&&e=this._debounceThresholdMS)this._lastRefreshMs=r,this._innerRefresh();else if(!this._additionalRefreshRequested){let e=r-this._lastRefreshMs,t=this._debounceThresholdMS-e;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=performance.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},t)}}_innerRefresh(){if(this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return;let e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}},Mc=20,Nc=class extends M{constructor(e,t,n,r){super(),this._terminal=e,this._coreBrowserService=n,this._renderService=r,this._rowColumns=new WeakMap,this._liveRegionLineCount=0,this._charsToConsume=[],this._charsToAnnounce=``;let i=this._coreBrowserService.mainDocument;this._accessibilityContainer=i.createElement(`div`),this._accessibilityContainer.classList.add(`xterm-accessibility`),this._rowContainer=i.createElement(`div`),this._rowContainer.setAttribute(`role`,`list`),this._rowContainer.classList.add(`xterm-accessibility-tree`),this._rowElements=[];for(let e=0;ethis._handleBoundaryFocus(e,0),this._bottomBoundaryFocusListener=e=>this._handleBoundaryFocus(e,1),this._rowElements[0].addEventListener(`focus`,this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=i.createElement(`div`),this._liveRegion.classList.add(`live-region`),this._liveRegion.setAttribute(`aria-live`,`assertive`),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this._register(new jc(this._renderRows.bind(this))),!this._terminal.element)throw Error(`Cannot enable accessibility before Terminal.open`);this._terminal.element.insertAdjacentElement(`afterbegin`,this._accessibilityContainer),this._register(this._terminal.onResize(e=>this._handleResize(e.rows))),this._register(this._terminal.onRender(e=>this._refreshRows(e.start,e.end))),this._register(this._terminal.onScroll(()=>this._refreshRows())),this._register(this._terminal.onA11yChar(e=>this._handleChar(e))),this._register(this._terminal.onLineFeed(()=>this._handleChar(` -`))),this._register(this._terminal.onA11yTab(e=>this._handleTab(e))),this._register(this._terminal.onKey(e=>this._handleKey(e.key))),this._register(this._terminal.onBlur(()=>this._clearLiveRegion())),this._register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this._register(I(i,`selectionchange`,()=>this._handleSelectionChange())),this._register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRowsDimensions(),this._refreshRows(),this._register(j(()=>{this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,e===` -`&&(this._liveRegionLineCount++,this._liveRegionLineCount===Mc+1&&(this._liveRegion.textContent+=St.get())))}_clearLiveRegion(){this._liveRegion.textContent=``,this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){let n=this._terminal.buffer,r=n.lines.length.toString();for(let i=e;i<=t;i++){let e=n.lines.get(n.ydisp+i),t=[],a=e?.translateToString(!0,void 0,void 0,t)||``,o=(n.ydisp+i+1).toString(),s=this._rowElements[i];s&&(a.length===0?(s.textContent=`\xA0`,this._rowColumns.set(s,[0,1])):(s.textContent=a,this._rowColumns.set(s,t)),s.setAttribute(`aria-posinset`,o),s.setAttribute(`aria-setsize`,r),this._alignRowWidth(s))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce=``)}_handleBoundaryFocus(e,t){let n=e.target,r=this._rowElements[t===0?1:this._rowElements.length-2];if(n.getAttribute(`aria-posinset`)===(t===0?`1`:`${this._terminal.buffer.lines.length}`)||e.relatedTarget!==r)return;let i,a;if(t===0?(i=n,a=this._rowElements.pop(),this._rowContainer.removeChild(a)):(i=this._rowElements.shift(),a=n,this._rowContainer.removeChild(i)),i.removeEventListener(`focus`,this._topBoundaryFocusListener),a.removeEventListener(`focus`,this._bottomBoundaryFocusListener),t===0){let e=this._createAccessibilityTreeNode();this._rowElements.unshift(e),this._rowContainer.insertAdjacentElement(`afterbegin`,e)}else{let e=this._createAccessibilityTreeNode();this._rowElements.push(e),this._rowContainer.appendChild(e)}this._rowElements[0].addEventListener(`focus`,this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._terminal.scrollLines(t===0?-1:1),this._rowElements[t===0?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(this._rowElements.length===0)return;let e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed){this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection();return}if(!e.anchorNode||!e.focusNode){console.error(`anchorNode and/or focusNode are null`);return}let t={node:e.anchorNode,offset:e.anchorOffset},n={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(n.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===n.node&&t.offset>n.offset)&&([t,n]=[n,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;let r=this._rowElements.slice(-1)[0];if(n.node.compareDocumentPosition(r)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(n={node:r,offset:r.textContent?.length??0}),!this._rowContainer.contains(n.node))return;let i=({node:e,offset:t})=>{let n=e instanceof Text?e.parentNode:e,r=parseInt(n?.getAttribute(`aria-posinset`),10)-1;if(isNaN(r))return console.warn(`row is invalid. Race condition?`),null;let i=this._rowColumns.get(n);if(!i)return console.warn(`columns is null. Race condition?`),null;let a=t=this._terminal.cols&&(++r,a=0),{row:r,column:a}},a=i(t),o=i(n);if(a&&o){if(a.row>o.row||a.row===o.row&&a.column>=o.column)throw Error(`invalid range`);this._terminal.select(a.column,a.row,(o.row-a.row)*this._terminal.cols-a.column+o.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener(`focus`,this._bottomBoundaryFocusListener);for(let e=this._rowContainer.children.length;ee;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){let e=this._coreBrowserService.mainDocument.createElement(`div`);return e.setAttribute(`role`,`listitem`),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e{kn(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register(I(this._element,`mouseleave`,()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register(I(this._element,`mousemove`,this._handleMouseMove.bind(this))),this._register(I(this._element,`mousedown`,this._handleMouseDown.bind(this))),this._register(I(this._element,`mouseup`,this._handleMouseUp.bind(this)))}get currentLink(){return this._currentLink}_handleMouseMove(e){this._lastMouseEvent=e;let t=this._positionFromMouseEvent(e,this._element,this._mouseService);if(!t)return;this._isMouseOut=!1;let n=e.composedPath();for(let e=0;e{e?.forEach(e=>{e.link.dispose&&e.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let n=!1;for(let[r,i]of this._linkProviderService.linkProviders.entries())t?this._activeProviderReplies?.get(r)&&(n=this._checkLinkProviderResult(r,e,n)):i.provideLinks(e.y,t=>{if(this._isMouseOut)return;let i=t?.map(e=>({link:e}));this._activeProviderReplies?.set(r,i),n=this._checkLinkProviderResult(r,e,n),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){let n=new Set;for(let r=0;re?this._bufferService.cols:r.link.range.end.x;for(let e=a;e<=o;e++){if(n.has(e)){i.splice(t--,1);break}n.add(e)}}}}_checkLinkProviderResult(e,t,n){if(!this._activeProviderReplies)return n;let r=this._activeProviderReplies.get(e),i=!1;for(let t=0;tthis._linkAtPosition(e.link,t));e&&(n=!0,this._handleNewLink(e))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!n)for(let e=0;ethis._linkAtPosition(e.link,t));if(r){n=!0,this._handleNewLink(r);break}}return n}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;let t=this._positionFromMouseEvent(e,this._element,this._mouseService);t&&this._mouseDownLink&&Fc(this._mouseDownLink.link,this._currentLink.link)&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){!this._currentLink||!this._lastMouseEvent||(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,kn(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;let t=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:e.link.decorations===void 0||e.link.decorations.underline,pointerCursor:e.link.decorations===void 0||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:e=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==e&&(this._currentLink.state.decorations.pointerCursor=e,this._currentLink.state.isHovered&&this._element.classList.toggle(`xterm-cursor-pointer`,e))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:t=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,t))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e=>{if(!this._currentLink)return;let t=e.start===0?0:e.start+1+this._bufferService.buffer.ydisp,n=this._bufferService.buffer.ydisp+1+e.end;if(this._currentLink.link.range.start.y>=t&&this._currentLink.link.range.end.y<=n&&(this._clearCurrentLink(t,n),this._lastMouseEvent)){let e=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);e&&this._askForLink(e,!1)}})))}_linkHover(e,t,n){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add(`xterm-cursor-pointer`)),t.hover&&t.hover(n,t.text)}_fireUnderlineEvent(e,t){let n=e.range,r=this._bufferService.buffer.ydisp,i=this._createLinkUnderlineEvent(n.start.x-1,n.start.y-r-1,n.end.x,n.end.y-r-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(i)}_linkLeave(e,t,n){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove(`xterm-cursor-pointer`)),t.leave&&t.leave(n,t.text)}_linkAtPosition(e,t){let n=e.range.start.y*this._bufferService.cols+e.range.start.x,r=e.range.end.y*this._bufferService.cols+e.range.end.x,i=t.y*this._bufferService.cols+t.x;return n<=i&&i<=r}_positionFromMouseEvent(e,t,n){let r=n.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(r)return{x:r[0],y:r[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,n,r,i){return{x1:e,y1:t,x2:n,y2:r,cols:this._bufferService.cols,fg:i}}};Pc=O([k(1,an),k(2,on),k(3,Wt),k(4,un)],Pc);function Fc(e,t){return e.text===t.text&&e.range.start.x===t.range.start.x&&e.range.start.y===t.range.start.y&&e.range.end.x===t.range.end.x&&e.range.end.y===t.range.end.y}var Ic=class extends Sc{constructor(e={}){super(e),this._linkifier=this._register(new Nn),this.browser=eo,this._keyDownHandled=!1,this._keyDownSeen=!1,this._keyPressHandled=!1,this._unprocessedDeadKey=!1,this._accessibilityManager=this._register(new Nn),this._onCursorMove=this._register(new F),this.onCursorMove=this._onCursorMove.event,this._onKey=this._register(new F),this.onKey=this._onKey.event,this._onRender=this._register(new F),this.onRender=this._onRender.event,this._onSelectionChange=this._register(new F),this.onSelectionChange=this._onSelectionChange.event,this._onTitleChange=this._register(new F),this.onTitleChange=this._onTitleChange.event,this._onBell=this._register(new F),this.onBell=this._onBell.event,this._onFocus=this._register(new F),this._onBlur=this._register(new F),this._onA11yCharEmitter=this._register(new F),this._onA11yTabEmitter=this._register(new F),this._onWillOpen=this._register(new F),this._setup(),this._decorationService=this._instantiationService.createInstance(Oc),this._instantiationService.setService($t,this._decorationService),this._linkProviderService=this._instantiationService.createInstance(Ya),this._instantiationService.setService(un,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(en)),this._register(this._inputHandler.onRequestBell(()=>this._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(e=>this.refresh(e?.start??0,e?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(e=>this._reportWindowsOptions(e))),this._register(this._inputHandler.onColor(e=>this._handleColorEvent(e))),this._register(P.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(P.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(P.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(P.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(e=>this._afterResize(e.cols,e.rows))),this._register(j(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}get linkifier(){return this._linkifier.value}get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}_handleColorEvent(e){if(this._themeService)for(let t of e){let e,n=``;switch(t.index){case 256:e=`foreground`,n=`10`;break;case 257:e=`background`,n=`11`;break;case 258:e=`cursor`,n=`12`;break;default:e=`ansi`,n=`4;`+t.index}switch(t.type){case 0:let r=W.toColorRGB(e===`ansi`?this._themeService.colors.ansi[t.index]:this._themeService.colors[e]);this.coreService.triggerDataEvent(`${R.ESC}]${n};${oc(r)}${ga.ST}`);break;case 1:if(e===`ansi`)this._themeService.modifyColors(e=>e.ansi[t.index]=U.toColor(...t.color));else{let n=e;this._themeService.modifyColors(e=>e[n]=U.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index)}}}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(e){e?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(Nc,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(R.ESC+`[I`),this.element.classList.add(`focus`),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this.textarea.value=``,this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(R.ESC+`[O`),this.element.classList.remove(`focus`),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;let e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(!t)return;let n=Math.min(this.buffer.x,this.cols-1),r=this._renderService.dimensions.css.cell.height,i=t.getWidth(n),a=this._renderService.dimensions.css.cell.width*i,o=this.buffer.y*this._renderService.dimensions.css.cell.height,s=n*this._renderService.dimensions.css.cell.width;this.textarea.style.left=s+`px`,this.textarea.style.top=o+`px`,this.textarea.style.width=a+`px`,this.textarea.style.height=r+`px`,this.textarea.style.lineHeight=r+`px`,this.textarea.style.zIndex=`-5`}_initGlobal(){this._bindKeys(),this._register(I(this.element,`copy`,e=>{this.hasSelection()&&Tt(e,this._selectionService)}));let e=e=>Et(e,this.textarea,this.coreService,this.optionsService);this._register(I(this.textarea,`paste`,e)),this._register(I(this.element,`paste`,e)),io?this._register(I(this.element,`mousedown`,e=>{e.button===2&&kt(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register(I(this.element,`contextmenu`,e=>{kt(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),po&&this._register(I(this.element,`auxclick`,e=>{e.button===1&&Ot(e,this.textarea,this.screenElement)}))}_bindKeys(){this._register(I(this.textarea,`keyup`,e=>this._keyUp(e),!0)),this._register(I(this.textarea,`keydown`,e=>this._keyDown(e),!0)),this._register(I(this.textarea,`keypress`,e=>this._keyPress(e),!0)),this._register(I(this.textarea,`compositionstart`,()=>this._compositionHelper.compositionstart())),this._register(I(this.textarea,`compositionupdate`,e=>this._compositionHelper.compositionupdate(e))),this._register(I(this.textarea,`compositionend`,()=>this._compositionHelper.compositionend())),this._register(I(this.textarea,`input`,e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw Error(`Terminal requires a parent element.`);if(e.isConnected||this._logService.debug(`Terminal.open was called on an element that was not attached to the DOM`),this.element?.ownerDocument.defaultView&&this._coreBrowserService){this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView);return}this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement(`div`),this.element.dir=`ltr`,this.element.classList.add(`terminal`),this.element.classList.add(`xterm`),e.appendChild(this.element);let t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement(`div`),this._viewportElement.classList.add(`xterm-viewport`),t.appendChild(this._viewportElement),this.screenElement=this._document.createElement(`div`),this.screenElement.classList.add(`xterm-screen`),this._register(I(this.screenElement,`mousemove`,e=>this.updateCursorStyle(e))),this._helperContainer=this._document.createElement(`div`),this._helperContainer.classList.add(`xterm-helpers`),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);let n=this.textarea=this._document.createElement(`textarea`);this.textarea.classList.add(`xterm-helper-textarea`),this.textarea.setAttribute(`aria-label`,bt.get()),mo||this.textarea.setAttribute(`aria-multiline`,`false`),this.textarea.setAttribute(`autocorrect`,`off`),this.textarea.setAttribute(`autocapitalize`,`off`),this.textarea.setAttribute(`spellcheck`,`false`),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange(`disableStdin`,()=>n.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(qa,this.textarea,e.ownerDocument.defaultView??window,this._document??typeof window<`u`?window.document:null)),this._instantiationService.setService(rn,this._coreBrowserService),this._register(I(this.textarea,`focus`,e=>this._handleTextAreaFocus(e))),this._register(I(this.textarea,`blur`,()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(Ua,this._document,this._helperContainer),this._instantiationService.setService(nn,this._charSizeService),this._themeService=this._instantiationService.createInstance(Zo),this._instantiationService.setService(ln,this._themeService),this._characterJoinerService=this._instantiationService.createInstance(wa),this._instantiationService.setService(cn,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(bo,this.rows,this.screenElement)),this._instantiationService.setService(on,this._renderService),this._register(this._renderService.onRenderedViewportChange(e=>this._onRender.fire(e))),this.onResize(e=>this._renderService.resize(e.cols,e.rows)),this._compositionView=this._document.createElement(`div`),this._compositionView.classList.add(`composition-view`),this._compositionHelper=this._instantiationService.createInstance(_a,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseService=this._instantiationService.createInstance(Qa),this._instantiationService.setService(an,this._mouseService);let r=this._linkifier.value=this._register(this._instantiationService.createInstance(Pc,this.screenElement));this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch{}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>this._renderService.handleResize(this.cols,this.rows))),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(ca,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(e=>{super.scrollLines(e,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(Ho,this.element,this.screenElement,r)),this._instantiationService.setService(sn,this._selectionService),this._register(this._selectionService.onRequestScrollLines(e=>this.scrollLines(e.amount,e.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(e=>this._renderService.handleSelectionChanged(e.start,e.end,e.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(e=>{this.textarea.value=e,this.textarea.focus(),this.textarea.select()})),this._register(P.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(la,this.screenElement)),this._register(I(this.element,`mousedown`,e=>this._selectionService.handleMouseDown(e))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add(`enable-mouse-events`)):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(Nc,this)),this._register(this.optionsService.onSpecificOptionChange(`screenReaderMode`,e=>this._handleScreenReaderModeOptionChange(e))),this.options.overviewRuler.width&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(ma,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange(`overviewRuler`,e=>{!this._overviewRulerRenderer&&e&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(ma,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()}_createRenderer(){return this._instantiationService.createInstance(Ha,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}bindMouse(){let e=this,t=this.element;function n(t){let n=e._mouseService.getMouseReportCoords(t,e.screenElement);if(!n)return!1;let r,i;switch(t.overrideType||t.type){case`mousemove`:i=32,t.buttons===void 0?(r=3,t.button!==void 0&&(r=t.button<3?t.button:3)):r=t.buttons&1?0:t.buttons&4?1:t.buttons&2?2:3;break;case`mouseup`:i=0,r=t.button<3?t.button:3;break;case`mousedown`:i=1,r=t.button<3?t.button:3;break;case`wheel`:if(e._customWheelEventHandler&&e._customWheelEventHandler(t)===!1)return!1;let n=t.deltaY;if(n===0||e.coreMouseService.consumeWheelEvent(t,e._renderService?.dimensions?.device?.cell?.height,e._coreBrowserService?.dpr)===0)return!1;i=n<0?0:1,r=4;break;default:return!1}return i===void 0||r===void 0||r>4?!1:e.coreMouseService.triggerMouseEvent({col:n.col,row:n.row,x:n.x,y:n.y,button:r,action:i,ctrl:t.ctrlKey,alt:t.altKey,shift:t.shiftKey})}let r={mouseup:null,wheel:null,mousedrag:null,mousemove:null},i={mouseup:e=>(n(e),e.buttons||(this._document.removeEventListener(`mouseup`,r.mouseup),r.mousedrag&&this._document.removeEventListener(`mousemove`,r.mousedrag)),this.cancel(e)),wheel:e=>(n(e),this.cancel(e,!0)),mousedrag:e=>{e.buttons&&n(e)},mousemove:e=>{e.buttons||n(e)}};this._register(this.coreMouseService.onProtocolChange(e=>{e?(this.optionsService.rawOptions.logLevel===`debug`&&this._logService.debug(`Binding to mouse events:`,this.coreMouseService.explainEvents(e)),this.element.classList.add(`enable-mouse-events`),this._selectionService.disable()):(this._logService.debug(`Unbinding from mouse events.`),this.element.classList.remove(`enable-mouse-events`),this._selectionService.enable()),e&8?r.mousemove||=(t.addEventListener(`mousemove`,i.mousemove),i.mousemove):(t.removeEventListener(`mousemove`,r.mousemove),r.mousemove=null),e&16?r.wheel||=(t.addEventListener(`wheel`,i.wheel,{passive:!1}),i.wheel):(t.removeEventListener(`wheel`,r.wheel),r.wheel=null),e&2?r.mouseup||=i.mouseup:(this._document.removeEventListener(`mouseup`,r.mouseup),r.mouseup=null),e&4?r.mousedrag||=i.mousedrag:(this._document.removeEventListener(`mousemove`,r.mousedrag),r.mousedrag=null)})),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this._register(I(t,`mousedown`,e=>{if(e.preventDefault(),this.focus(),this.coreMouseService.areMouseEventsActive&&!this._selectionService.shouldForceSelection(e))return n(e),r.mouseup&&this._document.addEventListener(`mouseup`,r.mouseup),r.mousedrag&&this._document.addEventListener(`mousemove`,r.mousedrag),this.cancel(e)})),this._register(I(t,`wheel`,t=>{if(!r.wheel){if(this._customWheelEventHandler&&this._customWheelEventHandler(t)===!1)return!1;if(!this.buffer.hasScrollback){if(t.deltaY===0)return!1;if(e.coreMouseService.consumeWheelEvent(t,e._renderService?.dimensions?.device?.cell?.height,e._coreBrowserService?.dpr)===0)return this.cancel(t,!0);let n=R.ESC+(this.coreService.decPrivateModes.applicationCursorKeys?`O`:`[`)+(t.deltaY<0?`A`:`B`);return this.coreService.triggerDataEvent(n,!0),this.cancel(t,!0)}}},{passive:!1}))}refresh(e,t){this._renderService?.refreshRows(e,t)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add(`column-select`):this.element.classList.remove(`column-select`)}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,t),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}paste(e){Dt(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this._customWheelEventHandler=e}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw Error(`Terminal must be opened first`);let t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw Error(`Terminal must be opened first`);this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return this._selectionService?this._selectionService.hasSelection:!1}select(e,t,n){this._selectionService.setSelection(e,t,n)}getSelection(){return this._selectionService?this._selectionService.selectionText:``}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;let t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;t||e.key!==`Dead`&&e.key!==`AltGraph`||(this._unprocessedDeadKey=!0);let n=wc(e,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(e),n.type===3||n.type===2){let t=this.rows-1;return this.scrollLines(n.type===2?-t:t),this.cancel(e,!0)}if(n.type===1&&this.selectAll(),this._isThirdLevelShift(this.browser,e)||(n.cancel&&this.cancel(e,!0),!n.key)||e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.key.length===1&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;if((n.key===R.ETX||n.key===R.CR)&&(this.textarea.value=``),this._onKey.fire({key:n.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(n.key,!0),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return this.cancel(e,!0);this._keyDownHandled=!0}_isThirdLevelShift(e,t){let n=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState(`AltGraph`);return t.type===`keypress`?n:n&&(!t.keyCode||t.keyCode>47)}_keyUp(e){this._keyDownSeen=!1,!(this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)&&(Lc(e)||this.focus(),this.updateCursorStyle(e),this._keyPressHandled=!1)}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;if(this.cancel(e),e.charCode)t=e.charCode;else if(e.which===null||e.which===void 0)t=e.keyCode;else if(e.which!==0&&e.charCode!==0)t=e.which;else return!1;return!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)?!1:(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,!0)}_inputEvent(e){if(e.data&&e.inputType===`insertText`&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;let t=e.data;return this.coreService.triggerDataEvent(t,!0),this.cancel(e),!0}return!1}resize(e,t){e===this.cols&&t===this.rows?this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure():super.resize(e,t)}_afterResize(e,t){this._charSizeService?.measure()}clear(){if(this.buffer.ybase!==0||this.buffer.y!==0){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e=0;e--)this._addons[e].instance.dispose()}loadAddon(e,t){let n={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(n),t.dispose=()=>this._wrappedAddonDispose(n),t.activate(e)}_wrappedAddonDispose(e){if(e.isDisposed)return;let t=-1;for(let n=0;n=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new Rt)}translateToString(e,t,n){return this._line.translateToString(e,t,n)}},Bc=class{constructor(e,t){this._buffer=e,this.type=t}init(e){return this._buffer=e,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(e){let t=this._buffer.lines.get(e);if(t)return new zc(t)}getNullCell(){return new Rt}},Vc=class extends M{constructor(e){super(),this._core=e,this._onBufferChange=this._register(new F),this.onBufferChange=this._onBufferChange.event,this._normal=new Bc(this._core.buffers.normal,`normal`),this._alternate=new Bc(this._core.buffers.alt,`alternate`),this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw Error(`Active buffer is neither normal nor alternate`)}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}},Hc=class{constructor(e){this._core=e}registerCsiHandler(e,t){return this._core.registerCsiHandler(e,e=>t(e.toArray()))}addCsiHandler(e,t){return this.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._core.registerDcsHandler(e,(e,n)=>t(e,n.toArray()))}addDcsHandler(e,t){return this.registerDcsHandler(e,t)}registerEscHandler(e,t){return this._core.registerEscHandler(e,t)}addEscHandler(e,t){return this.registerEscHandler(e,t)}registerOscHandler(e,t){return this._core.registerOscHandler(e,t)}addOscHandler(e,t){return this.registerOscHandler(e,t)}},Uc=class{constructor(e){this._core=e}register(e){this._core.unicodeService.register(e)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(e){this._core.unicodeService.activeVersion=e}},Wc=[`cols`,`rows`],Gc=0,Kc=class extends M{constructor(e){super(),this._core=this._register(new Ic(e)),this._addonManager=this._register(new Rc),this._publicOptions={...this._core.options};let t=e=>this._core.options[e],n=(e,t)=>{this._checkReadonlyOptions(e),this._core.options[e]=t};for(let e in this._core.options){let r={get:t.bind(this,e),set:n.bind(this,e)};Object.defineProperty(this._publicOptions,e,r)}}_checkReadonlyOptions(e){if(Wc.includes(e))throw Error(`Option "${e}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw Error(`You must set the allowProposedApi option to true to use proposed API`)}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get element(){return this._core.element}get parser(){return this._parser||=new Hc(this._core),this._parser}get unicode(){return this._checkProposedApi(),new Uc(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer||=this._register(new Vc(this._core)),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){let e=this._core.coreService.decPrivateModes,t=`none`;switch(this._core.coreMouseService.activeProtocol){case`X10`:t=`x10`;break;case`VT200`:t=`vt200`;break;case`DRAG`:t=`drag`;break;case`ANY`:t=`any`}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,synchronizedOutputMode:e.synchronizedOutput,wraparoundMode:e.wraparound}}get options(){return this._publicOptions}set options(e){for(let t in e)this._publicOptions[t]=e[t]}blur(){this._core.blur()}focus(){this._core.focus()}input(e,t=!0){this._core.input(e,t)}resize(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)}open(e){this._core.open(e)}attachCustomKeyEventHandler(e){this._core.attachCustomKeyEventHandler(e)}attachCustomWheelEventHandler(e){this._core.attachCustomWheelEventHandler(e)}registerLinkProvider(e){return this._core.registerLinkProvider(e)}registerCharacterJoiner(e){return this._checkProposedApi(),this._core.registerCharacterJoiner(e)}deregisterCharacterJoiner(e){this._checkProposedApi(),this._core.deregisterCharacterJoiner(e)}registerMarker(e=0){return this._verifyIntegers(e),this._core.registerMarker(e)}registerDecoration(e){return this._checkProposedApi(),this._verifyPositiveIntegers(e.x??0,e.width??0,e.height??0),this._core.registerDecoration(e)}hasSelection(){return this._core.hasSelection()}select(e,t,n){this._verifyIntegers(e,t,n),this._core.select(e,t,n)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)}dispose(){super.dispose()}scrollLines(e){this._verifyIntegers(e),this._core.scrollLines(e)}scrollPages(e){this._verifyIntegers(e),this._core.scrollPages(e)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(e){this._verifyIntegers(e),this._core.scrollToLine(e)}clear(){this._core.clear()}write(e,t){this._core.write(e,t)}writeln(e,t){this._core.write(e),this._core.write(`\r -`,t)}paste(e){this._core.paste(e)}refresh(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(e){this._addonManager.loadAddon(this,e)}static get strings(){return{get promptLabel(){return bt.get()},set promptLabel(e){bt.set(e)},get tooMuchOutput(){return St.get()},set tooMuchOutput(e){St.set(e)}}}_verifyIntegers(...e){for(Gc of e)if(Gc===1/0||isNaN(Gc)||Gc%1!=0)throw Error(`This API only accepts integers`)}_verifyPositiveIntegers(...e){for(Gc of e)if(Gc&&(Gc===1/0||isNaN(Gc)||Gc%1!=0||Gc<0))throw Error(`This API only accepts positive integers`)}},qc=2,Jc=1,Yc=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;(this._terminal.rows!==e.rows||this._terminal.cols!==e.cols)&&(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let e=this._terminal._core._renderService.dimensions;if(e.css.cell.width===0||e.css.cell.height===0)return;let t=this._terminal.options.scrollback===0?0:this._terminal.options.overviewRuler?.width||14,n=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(n.getPropertyValue(`height`)),i=Math.max(0,parseInt(n.getPropertyValue(`width`))),a=window.getComputedStyle(this._terminal.element),o={top:parseInt(a.getPropertyValue(`padding-top`)),bottom:parseInt(a.getPropertyValue(`padding-bottom`)),right:parseInt(a.getPropertyValue(`padding-right`)),left:parseInt(a.getPropertyValue(`padding-left`))},s=o.top+o.bottom,c=o.right+o.left,l=r-s,u=i-c-t;return{cols:Math.max(qc,Math.floor(u/e.css.cell.width)),rows:Math.max(Jc,Math.floor(l/e.css.cell.height))}}};function Xc(e=a()){return{fontSize:typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(pointer: coarse)`).matches?13*e/100:12*e/100,fontFamily:getComputedStyle(document.body).fontFamily}}function Zc({pending:e,size:t,screenScale:n,socketRef:r,slotRefs:i,panesExist:a,onAnswered:o}){(0,E.useEffect)(()=>{if(e===null)return;let t=r.current;if(!t||t.readyState!==WebSocket.OPEN)return;let s=[];for(let n=0;n{let t=new Kc(Xc(n)),r=new Yc;t.loadAddon(r),t.open(e);let i=r.proposeDimensions();if(t.dispose(),!i)throw Error(`could not measure the cell`);return{rows:i.rows,cols:i.cols}})}catch{c=[]}xe(t,{type:`start`,sizes:c})&&o()},[e,t,n,r,i,a,o])}var Qc=`nightcrow.viewer`;function $c(){return globalThis.crypto?.randomUUID?.()||`tab-${Math.floor(Math.random()*2**48).toString(36)}`}function el(){try{let e=sessionStorage.getItem(Qc);if(e)return e;let t=$c();return sessionStorage.setItem(Qc,t),t}catch{return $c()}}function tl(e,t){return t.state===`cancelled`?nl(e,t.pane):{...e,[t.pane]:{state:t.state,detail:t.detail,deadlineEpoch:t.deadline_epoch,attempt:t.attempt}}}function nl(e,t){if(!(t in e))return e;let n={...e};return delete n[t],n}function rl(e,t){return Object.keys(e).map(Number).filter(e=>!t.includes(e)).sort((e,t)=>e-t)}function il(e){if(e===void 0||!Number.isFinite(e))return;let t=new Date(e*1e3);if(!Number.isNaN(t.getTime()))return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function al(e){let t=il(e.deadlineEpoch),n=[e.state];return t&&n.push(`until ${t}`),e.attempt>0&&n.push(`attempt ${e.attempt}`),n.join(` · `)}function ol(e,t){if(typeof e==`string`){let n=be(e);n&&sl(n,t);return}if(!(e instanceof ArrayBuffer))return;let n=Se(e);if(!n)return;let r;t.replayRef.current.active&&(r=t.replayRef.current.panes.get(n.pane),r||(r=Symbol(),t.replayRef.current.panes.set(n.pane,r)));let i=t.viewsRef.current.get(n.pane);if(i){r&&i.replayGate.begin(),i.term.write(n.data);return}let a=t.pendingRef.current.get(n.pane)??[];a.push(n.data),t.pendingRef.current.set(n.pane,a)}function sl(e,t){switch(e.type){case`hello`:t.clientIdRef.current=e.client,t.setLink(`live`),t.replayRef.current.active=!0,t.replayRef.current.panes.clear(),t.setReplayLeft(e.panes);return;case`replay_complete`:cl(t);return;case`pending`:t.setPending(e.count);return;case`created`:{let n=e.pane;t.replayRef.current.active&&t.replayRef.current.panes.set(n,Symbol()),t.ptySizesRef.current.set(n,{rows:e.rows,cols:e.cols});let r=e.title;r&&t.setTitles(e=>({...e,[n]:r})),t.setPanes(e=>[...e,n]),t.setReplayLeft(e=>e>0?e-1:0),e.client!=null&&e.client===t.clientIdRef.current?(t.setActive(n),dt(t.repo,n)):ut(t.repo)===n&&t.setActive(n);return}case`exited`:t.setPanes(t=>t.filter(t=>t!==e.pane)),t.setActive(t=>t===e.pane?null:t),t.pendingRef.current.delete(e.pane),t.replayRef.current.panes.delete(e.pane),t.ptySizesRef.current.delete(e.pane),t.askedSizesRef.current.delete(e.pane),t.desiredSizesRef.current.delete(e.pane),ft(t.repo,e.pane),t.setTitles(t=>{if(!(e.pane in t))return t;let n={...t};return delete n[e.pane],n});return;case`resized`:t.ptySizesRef.current.set(e.pane,{rows:e.rows,cols:e.cols}),t.viewsRef.current.get(e.pane)?.term.resize(e.cols,e.rows);return;case`recovery`:t.setRecovery(t=>tl(t,e));return;case`size_owner`:We(t.ownsSizeRef,t.sizeOwnerGenerationRef,e.owned,e.generation,()=>{t.askedSizesRef.current.clear(),t.onSizeAcquired()}),t.setOwnsSize(e.owned);return;case`reordered`:t.setPanes(t=>y(t,e.order));return;case`zoomed`:t.zoomAskedRef.current=void 0,t.setZoomed(e.pane??null);return;case`error`:ne.error(e.message);return}return e}function cl(e){let t=e.replayRef.current;if(t.active){t.active=!1,e.setReplayLeft(0);for(let[n,r]of t.panes){let i=e.viewsRef.current.get(n);if(i)Qe(i.term,i.replayGate,()=>{e.viewsRef.current.get(n)===i&&t.panes.get(n)===r&&t.panes.delete(n)});else{let t=e.pendingRef.current.get(n)??[];t.push({kind:`replay_complete`,token:r}),e.pendingRef.current.set(n,t)}}}}function ll({repo:e,socketRef:t,viewsRef:n,pendingRef:r,replayRef:i,ptySizesRef:a,askedSizesRef:o,desiredSizesRef:s,ownsSizeRef:c,sizeOwnerGenerationRef:l,onSizeAcquired:u,zoomAskedRef:d,setLink:f,setPending:p,setReplayLeft:m,setPanes:h,setActive:g,setZoomed:_,setTitles:v,setOwnsSize:ee,setRecovery:y}){let te=(0,E.useRef)(null);(0,E.useLayoutEffect)(()=>{let b=!1,ne,re=!1,x=e=>{e===`live`&&(re=!0),f(e)},S=()=>re?`reconnecting`:`connecting`,C={repo:e,clientIdRef:te,viewsRef:n,pendingRef:r,replayRef:i,ptySizesRef:a,askedSizesRef:o,desiredSizesRef:s,ownsSizeRef:c,sizeOwnerGenerationRef:l,onSizeAcquired:u,zoomAskedRef:d,setLink:x,setPending:p,setReplayLeft:m,setPanes:h,setActive:g,setZoomed:_,setTitles:v,setOwnsSize:ee,setRecovery:y},ie=()=>{n.current.forEach(e=>e.term.dispose()),n.current.clear(),r.current.clear(),i.current.active=!1,i.current.panes.clear(),a.current.clear(),o.current.clear(),s.current.clear()},w=()=>{te.current=null,c.current=!1,l.current=null,x(S()),m(0),d.current=void 0,p(null),h([]),g(null),_(null),v({}),y({}),ie();let n=location.protocol===`https:`?`wss:`:`ws:`,r=new URLSearchParams({repo:e,viewer:el()}),i=new WebSocket(`${n}//${location.host}/ws/term?${r}`);i.binaryType=`arraybuffer`,t.current=i,i.onmessage=e=>{t.current===i&&ol(e.data,C)},i.onclose=()=>{b||(x(S()),ne=setTimeout(w,1e3))}};return w(),()=>{b=!0,ne&&clearTimeout(ne),t.current?.close(),ie()}},[e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,ee,y])}var ul=`\x1B`,dl=`${ul}[200~`,fl=`${ul}[201~`;function pl(e,t){let n=e.split(ul).join(``).replace(/\r?\n/g,`\r`);return t?dl+n+fl:n}function ml(e){return e.trim().length>0}function hl(e){return/mac|iphone|ipad|ipod/i.test(e)?`⌘↩`:`Ctrl+Enter`}var gl=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`];function _l(e){if(!e||e.getData(`text/plain`))return null;for(let t of Array.from(e.files))if(gl.includes(t.type))return t;return null}function vl(e){return/[\s"']/.test(e)?`"${e.replace(/"/g,`\\"`)}" `:`${e} `}function yl(e){if(!(e instanceof Element))return null;let t=e.closest(`[data-pane-id]`)?.getAttribute(`data-pane-id`);return t==null?null:Number(t)}function bl({containerRef:e,socketRef:t,viewsRef:n}){(0,E.useEffect)(()=>{let r=e.current;if(!r)return;let i=async(e,r)=>{try{let i=await pe.pasteImage(r),a=n.current.get(e)?.term.modes.bracketedPasteMode??!1;xe(t.current,{type:`input`,pane:e,data:pl(vl(i),a)})||ne.error(`Not connected — the image was not pasted.`)}catch(e){ne.error(e instanceof Error?`Could not paste the image: ${e.message}`:`Could not paste the image.`)}},a=(e,t)=>{let n=_l(t);if(!n)return;let r=yl(e.target);r!==null&&(e.preventDefault(),e.stopPropagation(),i(r,n))},o=e=>a(e,e.clipboardData),s=e=>a(e,e.dataTransfer),c=e=>{_l(e.dataTransfer)&&e.preventDefault()};return r.addEventListener(`paste`,o,!0),r.addEventListener(`drop`,s,!0),r.addEventListener(`dragover`,c,!0),()=>{r.removeEventListener(`paste`,o,!0),r.removeEventListener(`drop`,s,!0),r.removeEventListener(`dragover`,c,!0)}},[e,t,n])}var xl=250;function Sl(e){return e.type===`keydown`&&e.ctrlKey&&!e.altKey&&!e.metaKey&&(e.code===`KeyL`||e.key===`l`||e.key===`L`)}var Cl=class{seen=null;noteKey(e,t){Sl(e)&&(this.seen={at:t,trusted:e.isTrusted,repeat:e.repeat,code:e.code})}report(e,t){if(!e.includes(`\f`))return null;let n=this.seen;return this.seen=null,!n||t-n.at>xl||t{let e=Ml;e!==null&&Al(e).then(n=>{n&&Ml===e&&(Ml=null,se(t))})}}})}function Pl({panes:e,size:t,zoomed:n,mode:r,screenScale:i,socketRef:a,viewsRef:o,bodyRefs:s,pendingRef:c,replayRef:l,ptySizesRef:u,consumeLatches:d,setTitles:f}){(0,E.useEffect)(()=>{let t=Xc(i);for(let n of e){let e=o.current.get(n);if(e){e.term.options.fontSize!==t.fontSize&&(e.term.options.fontSize=t.fontSize),e.term.options.fontFamily!==t.fontFamily&&(e.term.options.fontFamily=t.fontFamily);continue}let r=s.current.get(n);if(!r)continue;let i=new Kc({...t,theme:{background:`#111112`,foreground:`#f2f2f3`},cursorBlink:!0,macOptionClickForcesSelection:!0}),p=new Yc;i.loadAddon(p);let m=new Cl;i.attachCustomKeyEventHandler(e=>{if(m.noteKey(e,performance.now()),El(e,navigator.platform))return!1;let t=Tl(e);return t===null||(i.input(t),!1)}),i.onData(e=>{let t=m.report(e,performance.now()),r=d(e);xe(a.current,{type:`input`,pane:n,data:r})&&t&&xe(a.current,{type:`clear_key_report`,pane:n,...t})});let h=et(i,l.current.panes.has(n),e=>{kl(e).catch(e=>{console.error(`nightcrow: a pane's clipboard request failed`,e)})});i.onTitleChange(e=>{let t=e.replace(/\s+/g,` `).trim();t&&f(e=>({...e,[n]:t}))}),i.open(r);let g=u.current.get(n);g&&i.resize(g.cols,g.rows);let _={term:i,fit:p,replayGate:h};o.current.set(n,_);let v=c.current.get(n);if(v){for(let e of v)e instanceof Uint8Array?i.write(e):Qe(i,_.replayGate,()=>{o.current.get(n)===_&&l.current.panes.get(n)===e.token&&l.current.panes.delete(n)});c.current.delete(n),i.write(``,()=>i.scrollToBottom())}}for(let[t,n]of o.current)e.includes(t)||(n.term.dispose(),o.current.delete(t))},[e,t,n,r,i,a,o,s,c,l,u,d,f])}function Fl({repo:e,refs:t,size:n,mode:r,panes:i,active:a,replayLeft:o,pending:s,ownsSize:c,keyboardOpen:l,screenScale:u,refitEpoch:d,zoomShown:f,zoomServer:p,consumeLatches:m,setLink:h,setPending:g,setReplayLeft:_,setPanes:v,setActive:ee,setZoomed:y,setTitles:te,setOwnsSize:b,onSizeAcquired:ne,setRecovery:re}){let{containerRef:x,socketRef:S,viewsRef:C,bodyRefs:ie,ptySizesRef:w,askedSizesRef:ae,desiredSizesRef:oe,ownsSizeRef:se,sizeOwnerGenerationRef:T,pendingRef:ce,replayRef:le,zoomAskedRef:ue,slotRefs:de}=t;ll({repo:e,socketRef:S,viewsRef:C,pendingRef:ce,replayRef:le,ptySizesRef:w,askedSizesRef:ae,desiredSizesRef:oe,ownsSizeRef:se,sizeOwnerGenerationRef:T,zoomAskedRef:ue,setLink:h,setPending:g,setReplayLeft:_,setPanes:v,setActive:ee,setZoomed:y,setTitles:te,setOwnsSize:b,onSizeAcquired:ne,setRecovery:re}),bl({containerRef:x,socketRef:S,viewsRef:C}),Pl({panes:i,size:n,zoomed:f,mode:r,screenScale:u,socketRef:S,viewsRef:C,bodyRefs:ie,pendingRef:ce,replayRef:le,ptySizesRef:w,consumeLatches:m,setTitles:te});let fe=(0,E.useCallback)(()=>g(null),[g]);Zc({pending:s,size:n,screenScale:u,socketRef:S,slotRefs:de,panesExist:i.length>0,onAnswered:fe}),ht({panes:i,size:n,zoomed:f,mode:r,screenScale:u,socketRef:S,viewsRef:C,bodyRefs:ie,ptySizesRef:w,askedSizesRef:ae,desiredSizesRef:oe,ownsSize:c,layoutPending:Be(p,i),keyboardOpen:l,refitEpoch:d}),ot({panes:i,viewsRef:C,bodyRefs:ie,keyboardOpen:l,size:n,zoomed:f,mode:r}),pt({repo:e,panes:i,replayLeft:o,active:a,setActive:ee,zoomed:p,zoom:f,viewsRef:C,panelRef:x,size:n,mode:r})}var Il=()=>Rl(Pe),Ll=()=>Rl(Fe);function Rl(e){let[t,n]=(0,E.useState)(!1),r=(0,E.useRef)(!1),i=(0,E.useCallback)(e=>{r.current=e,n(e)},[]),a=(0,E.useCallback)(t=>{let n=e(r.current,t);return n.armed!==r.current&&i(n.armed),n.data},[e,i]);return{armed:t,toggle:(0,E.useCallback)(()=>{let e=!r.current;return i(e),e},[i]),clear:(0,E.useCallback)(()=>i(!1),[i]),consume:a}}function zl(e){let[t,n]=(0,E.useState)({w:0,h:0});return(0,E.useEffect)(()=>{let t=e.current;if(!t)return;let r=new ResizeObserver(()=>{let e=t.clientWidth,r=t.clientHeight;n(t=>t.w===e&&t.h===r?t:{w:e,h:r})});return r.observe(t),()=>r.disconnect()},[e]),t}function Bl(e=window){return(0,E.useSyncExternalStore)(t=>Vl(e,t),()=>re(e)>0,()=>!1)}function Vl(e,t){let n=e.visualViewport;return e.addEventListener(`resize`,t),n?.addEventListener(`resize`,t),n?.addEventListener(`scroll`,t),()=>{e.removeEventListener(`resize`,t),n?.removeEventListener(`resize`,t),n?.removeEventListener(`scroll`,t)}}function Hl({link:e,panes:t,replayLeft:n,pending:r}){return e===`live`?n>0?{kind:`attaching`,left:n}:t>0?{kind:`ready`}:r===null?{kind:`empty`}:{kind:`starting`,count:r}:{kind:e}}function Ul(e){switch(e.kind){case`connecting`:return`Connecting…`;case`reconnecting`:return`Reconnecting…`;case`attaching`:return`Attaching ${Wl(e.left)}…`;case`starting`:return`Starting ${Wl(e.count)}…`;case`empty`:case`ready`:return null}}function Wl(e){return`${e} terminal${e===1?``:`s`}`}var $=e();function Gl({status:e}){if(e.kind===`empty`)return(0,$.jsxs)(`p`,{className:`p-3 text-ink-400`,children:[`No terminal open. Press `,(0,$.jsx)(`span`,{className:`text-accent`,children:`+`}),` above to start one.`]});let t=e.kind===`starting`?null:Ul(e);return t?(0,$.jsx)(`div`,{role:`status`,className:`pointer-events-none absolute inset-0 z-10 flex items-center justify-center p-6`,children:(0,$.jsxs)(`span`,{className:`flex animate-pulse items-center gap-2 text-caption text-ink-400 uppercase`,children:[(0,$.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-accent`}),t]})}):null}var Kl=100;function ql({socketRef:e,viewsRef:t,active:n,panes:r,onSent:i}){let[a,o]=(0,E.useState)(null),[s,c]=(0,E.useState)({}),[l,u]=(0,E.useState)(!1),[d,f]=(0,E.useState)(null),p=(0,E.useRef)(null),m=(0,E.useRef)(r),h=(0,E.useRef)(0),g=(0,E.useRef)(!1);m.current=r;let _=a!==null&&r.includes(a)?a:null,v=_===null?``:s[_]??``,ee=()=>{h.current+=1,g.current=!1,u(!1),f(null)};(0,E.useEffect)(()=>()=>{h.current+=1,g.current=!1,p.current=null},[]),(0,E.useEffect)(()=>{a!==null&&!r.includes(a)&&(p.current=null,ee(),o(null))},[a,r]);let y=e=>{_!==null&&c(t=>({...t,[_]:e}))};return{target:_,draft:v,setDraft:y,open:()=>{p.current===null&&n!==null&&(ee(),p.current=n,o(n))},close:()=>{p.current=null,ee(),o(null)},send:()=>{if(_===null||g.current||d!==null||!ml(v))return!1;let n=t.current.get(_)?.term.modes.bracketedPasteMode??!1,r=pl(v,n);return xe(e.current,{type:`input`,pane:_,data:r})?(window.setTimeout(()=>{xe(e.current,{type:`input`,pane:_,data:`\r`})},Kl),y(``),p.current=null,ee(),o(null),i(_),!0):!1},attachImage:async e=>{if(_===null||g.current)return;if(!gl.includes(e.type)){f(`Choose a PNG, JPEG, GIF, or WebP image.`);return}if(e.size>10485760){f(`Image must be 10 MiB or smaller.`);return}let t=_,n=h.current,r=()=>n===h.current&&p.current===t&&m.current.includes(t);g.current=!0,u(!0),f(null);try{let n=await pe.pasteImage(e);if(!n)throw Error(`the server returned no image path`);if(!r())return;c(e=>{let r=e[t]??``,i=r.length>0&&!/\s$/.test(r)?` `:``;return{...e,[t]:`${r}${i}${vl(n)}`}})}catch(e){r()&&f(e instanceof Error?`Could not attach image: ${e.message}`:`Could not attach image.`)}finally{r()&&(g.current=!1,u(!1))}},uploading:l,uploadError:d,dismissUploadError:()=>f(null)}}var Jl=v(),Yl=`nc-compose-title`;function Xl(){let e=navigator;return e.userAgentData?.platform||e.platform||``}function Zl({label:e,draft:t,onChange:n,onSend:r,onAttachImage:i,uploading:a,uploadError:o,onDismissUploadError:s,onClose:c}){let l=(0,E.useRef)(null),u=(0,E.useRef)(null),[d,f]=(0,E.useState)(!1),p=ml(t)&&!a&&o===null,m=hl(Xl());(0,E.useEffect)(()=>{let e=l.current;e?.focus(),e?.setSelectionRange(e.value.length,e.value.length)},[]),(0,E.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!e.isComposing&&c()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[c]);let h=()=>{p&&f(!r())};return(0,Jl.createPortal)((0,$.jsx)(`div`,{className:`nc-fade-in fixed inset-0 z-50 flex items-start justify-center bg-black/60 p-4 pt-[8vh]`,onClick:c,children:(0,$.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":Yl,className:`nc-rise-in flex w-[56rem] max-w-full flex-col rounded-lg border border-ink-700 bg-ink-900`,onClick:e=>e.stopPropagation(),children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-ink-700 px-3 py-2`,children:[(0,$.jsxs)(`span`,{id:Yl,className:`min-w-0 truncate font-medium text-ink-50`,children:[`Send to `,e]}),(0,$.jsx)(`button`,{type:`button`,onClick:c,"aria-label":`close`,className:`ml-auto flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-ink-200`,children:(0,$.jsx)(C,{})})]}),(0,$.jsx)(`textarea`,{ref:l,value:t,onChange:e=>{n(e.target.value),f(!1)},onKeyDown:e=>{e.key!==`Enter`||e.nativeEvent.isComposing||(e.metaKey||e.ctrlKey)&&(e.preventDefault(),h())},rows:10,"aria-label":`message`,className:`m-3 resize-y rounded-sm border border-ink-700 bg-ink-950 p-2 font-mono text-[16px] text-ink-50 focus:border-accent focus:outline-none`}),(0,$.jsx)(`input`,{ref:u,type:`file`,accept:gl.join(`,`),"aria-label":`Choose an image`,tabIndex:-1,className:`hidden`,onChange:e=>{let t=e.currentTarget.files?.[0];e.currentTarget.value=``,t&&i(t)}}),(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 px-3 pb-3`,children:[(0,$.jsx)(`button`,{type:`button`,onClick:()=>u.current?.click(),disabled:a,"aria-label":`Attach image`,className:`min-h-11 rounded-sm border border-ink-700 px-3 text-ink-200 hover:text-ink-50 disabled:text-ink-500`,children:`Attach image`}),a&&(0,$.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`text-ink-300`,children:`Uploading image…`}),o&&(0,$.jsxs)(`span`,{role:`alert`,className:`flex basis-full items-center gap-2 text-removed`,children:[(0,$.jsx)(`span`,{className:`min-w-0`,children:o}),(0,$.jsx)(`button`,{type:`button`,onClick:s,className:`min-h-11 shrink-0 rounded-sm px-2 underline`,children:`Dismiss`})]}),d&&(0,$.jsx)(`span`,{role:`alert`,className:`min-w-0 basis-full truncate text-removed`,children:`Not connected — nothing was sent.`}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>{n(``),f(!1),l.current?.focus()},disabled:t.length===0,className:`ml-auto min-h-11 rounded-sm px-3 text-ink-200 hover:text-ink-50 disabled:text-ink-600`,children:`Clear`}),(0,$.jsxs)(`button`,{type:`button`,onClick:h,disabled:!p,title:`Send and run (${m})`,"aria-keyshortcuts":`Meta+Enter Control+Enter`,className:`flex min-h-11 items-center gap-1.5 rounded-sm bg-accent px-3 py-1.5 font-medium text-ink-950 disabled:bg-ink-700 disabled:text-ink-400`,children:[(0,$.jsx)(`kbd`,{"aria-hidden":`true`,className:`font-sans opacity-70`,children:m}),`Send`]})]})]})}),document.body)}function Ql({closing:e,panes:t,paneLabel:n,onConfirmClose:r,onCancelClose:i,compose:a}){return(0,$.jsxs)($.Fragment,{children:[e!==null&&t.includes(e)&&(0,$.jsx)(le,{label:n(e),detail:`The process running in it will be terminated.`,onConfirm:()=>r(e),onCancel:i}),a.target!==null&&(0,$.jsx)(Zl,{label:n(a.target),draft:a.draft,onChange:a.setDraft,onSend:a.send,onAttachImage:a.attachImage,uploading:a.uploading,uploadError:a.uploadError,onDismissUploadError:a.dismissUploadError,onClose:a.close})]})}function $l({report:e,pane:t,onCancel:n}){let r=t===void 0?al(e):`pane ${t} · ${al(e)}`;return(0,$.jsxs)(`span`,{className:`flex min-w-0 shrink items-center gap-1 rounded-sm bg-ink-800 px-1 text-accent`,title:e.detail??r,children:[(0,$.jsx)(`span`,{className:`truncate`,children:r}),e.detail&&(0,$.jsx)(`span`,{className:`hidden min-w-0 truncate text-ink-400 md:inline`,children:e.detail}),(0,$.jsx)(`button`,{onMouseDown:e=>e.stopPropagation(),onClick:n,title:`Stop waiting and release this pane's slot`,"aria-label":`cancel recovery${t===void 0?``:` for pane ${t}`}`,className:`flex h-5 w-5 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-removed`,children:(0,$.jsx)(C,{className:`h-3 w-3`})})]})}function eu({pane:e,index:t,label:i,cellStyle:a,isActive:s,isZoomed:c,showZoom:l,isDragged:u,isDropTarget:d,reorderable:f,showHeader:p,recovery:m,onCancelRecovery:h,onFocus:g,onToggleZoom:_,onClose:v,onPaneDragStart:ee,onPaneDragMove:y,onPaneDragEnd:te,onPaneDragCancel:b,bodyRef:ne,bodyTouch:re}){let x=r(),S=(e,t)=>s?x(e,t):{title:t};return(0,$.jsxs)(`div`,{"data-pane-id":e,"data-pane-cell":!0,onMouseDown:g,style:a,className:`nc-cell-in relative min-h-0 min-w-0 flex-col overflow-hidden rounded-sm border ${d?`border-accent ring-1 ring-accent`:s?`border-accent`:`border-ink-700`} ${u?`opacity-60`:``}`,children:[!p&&m&&(0,$.jsx)(`div`,{className:`absolute top-1 right-1 z-10 text-xs`,children:(0,$.jsx)($l,{report:m,onCancel:h})}),p&&(0,$.jsxs)(`div`,{onPointerDown:ee,onPointerMove:y,onPointerUp:te,onPointerCancel:b,"data-active":s,className:`nc-title-target flex shrink-0 items-center gap-1 select-none bg-ink-900 px-2 py-0.5 text-xs ${f?u?`cursor-grabbing touch-none`:`cursor-grab touch-none`:``}`,children:[(0,$.jsx)(`span`,{title:i,className:`min-w-0 flex-1 ${s?`text-ink-50`:`text-ink-400`}`,children:(0,$.jsx)(o,{title:i})}),m&&(0,$.jsx)($l,{report:m,onCancel:h}),l&&(0,$.jsx)(`button`,{onMouseDown:e=>e.stopPropagation(),onClick:_,"aria-pressed":c,...S(`view.toggleMaximize`,c?`Restore the grid`:`Zoom this terminal`),"aria-label":c?`Restore the grid`:`Zoom this terminal`,className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent md:h-6 md:w-6`,children:(0,$.jsx)(n,{maximized:c})}),(0,$.jsx)(`button`,{onMouseDown:e=>e.stopPropagation(),onClick:v,...S(`terminal.closePane`,`Close terminal`),"aria-label":`close terminal ${t+1}`,className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-removed md:h-6 md:w-6`,children:(0,$.jsx)(C,{})})]}),(0,$.jsx)(`div`,{ref:ne,...re,className:`nc-pane-body flex min-h-0 flex-1 flex-col justify-end overflow-hidden touch-pinch-zoom`})]})}function tu({count:e,slotStyle:t,showHeader:n,bodyTouch:r,slotRefs:i}){return Array.from({length:e},(e,a)=>(0,$.jsx)(eu,{pane:-1-a,index:a,label:`starting…`,cellStyle:t(a),isActive:!1,isZoomed:!1,showZoom:!1,isDragged:!1,isDropTarget:!1,reorderable:!1,showHeader:n,bodyTouch:r,onCancelRecovery:()=>{},onFocus:()=>{},onToggleZoom:()=>{},onClose:()=>{},onPaneDragStart:()=>{},onPaneDragMove:()=>{},onPaneDragEnd:()=>{},onPaneDragCancel:()=>{},bodyRef:e=>{e?i.current.set(a,e):i.current.delete(a)}},`slot-${a}`))}function nu(e,t){let n=(0,E.useRef)(t);(0,E.useLayoutEffect)(()=>{n.current!==t&&(n.current=t,ke(e.current))},[e,t])}function ru({containerRef:e,mode:t,panes:n,titles:r,active:i,shown:a,layout:o,pending:s,maximized:c=!1,recovery:l,draggingPane:u,dragOverPane:d,reorderable:f,bodyTouch:p,slotRefs:m,bodyRefs:h,onFocus:g,onToggleZoom:v,onClose:ee,onCancelRecovery:y,onPaneDragStart:te,onPaneDragMove:b,onPaneDragEnd:ne,onPaneDragCancel:re}){let x=t===`tabs`;nu(e,`${t}:${a}:${o.cols}x${o.rows}:${c}`);let S=e=>{let t=o.cells[e];return{display:`flex`,gridColumn:`${t.colStart} / span ${t.colSpan}`,gridRow:`${t.row}`}},C=(e,t)=>x?_(e===a):a===null?S(t):{display:e===a?`flex`:`none`};return(0,$.jsxs)(`div`,{ref:e,className:x?`relative h-full`:`grid h-full gap-1`,style:x?void 0:a===null?{gridTemplateColumns:`repeat(${o.cols}, minmax(0, 1fr))`,gridTemplateRows:`repeat(${o.rows}, minmax(0, 1fr))`}:{gridTemplateColumns:`1fr`,gridTemplateRows:`1fr`},children:[n.length===0&&s!==null&&(0,$.jsx)(tu,{count:s,showHeader:!x,bodyTouch:p,slotStyle:e=>x?_(e===0):S(e),slotRefs:m}),n.map((e,t)=>(0,$.jsx)(eu,{pane:e,index:t,label:r[e]??`term ${t+1}`,cellStyle:C(e,t),isActive:e===i,isZoomed:!x&&a===e,showZoom:!x&&n.length>1,isDragged:u===e,isDropTarget:d===e,reorderable:f,showHeader:!x,bodyTouch:p,recovery:l[e],onCancelRecovery:()=>y(e),onFocus:()=>g(e),onToggleZoom:()=>v(e),onClose:()=>ee(e),onPaneDragStart:t=>te(t,e),onPaneDragMove:b,onPaneDragEnd:ne,onPaneDragCancel:re,bodyRef:t=>{t?h.current.set(e,t):h.current.delete(e)}},e))]})}function iu({panes:e,titles:t,shown:n,reorderable:r,draggingPane:i,dragOverPane:a,onClose:c,onPaneDragStart:l,onPaneDragMove:u,onPaneDragEnd:d,onPaneDragCancel:f}){let p=(0,E.useRef)(new Map);(0,E.useEffect)(()=>{n!==null&&p.current.get(n)?.scrollIntoView({block:`nearest`,inline:`nearest`})},[n,e.length]);let m=(0,E.useRef)(null),h=(0,E.useRef)(!1);return(0,E.useEffect)(()=>{h.current=i!==null},[i]),(0,E.useEffect)(()=>{let e=m.current;if(!e)return;let t=e=>{h.current&&e.cancelable&&e.preventDefault()};return e.addEventListener(`touchmove`,t,{passive:!1}),()=>e.removeEventListener(`touchmove`,t)},[]),(0,$.jsx)(`div`,{ref:m,role:`tablist`,"aria-label":`Terminals`,className:`-my-1 flex min-w-0 flex-1 items-stretch self-stretch overflow-x-auto`,children:e.map((e,m)=>{let h=t[e]??`term ${m+1}`,g=e===n;return(0,$.jsxs)(`div`,{"data-pane-id":e,ref:t=>{t?p.current.set(e,t):p.current.delete(e)},role:`tab`,"aria-selected":g,title:h,onPointerDown:t=>l(t,e,{holdToDrag:!0}),onPointerMove:u,onPointerUp:d,onPointerCancel:f,onLostPointerCapture:f,className:`nc-title-target flex shrink-0 touch-pan-x items-center border-r border-ink-700 whitespace-nowrap select-none [-webkit-touch-callout:none] ${r?`cursor-grab`:``} ${i===e?`opacity-60`:``} ${a===e?`bg-ink-800 ring-1 ring-inset ring-accent`:``} ${g?`bg-ink-950 text-ink-50 shadow-[inset_0_-1px_0_0_var(--color-accent)]`:`text-ink-400 hover:bg-ink-850 hover:text-ink-200`}`,children:[(0,$.jsx)(`span`,{className:`flex min-w-0 items-center self-stretch pr-1 pl-3`,children:(0,$.jsx)(o,{title:h,className:s})}),(0,$.jsx)(`button`,{onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),c(e)},"data-tab-close":!0,title:`Close terminal`,"aria-label":`close terminal ${m+1}`,className:`mr-1 flex h-5 w-5 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:bg-ink-700 hover:text-removed`,children:(0,$.jsx)(C,{className:`h-3.5 w-3.5`})})]},e)})})}var au=`flex min-h-9 min-w-9 shrink-0 items-center justify-center rounded-xs border px-2 text-xs active:bg-ink-700 active:text-accent`,ou=`border-ink-700 bg-ink-850 text-ink-200`,su=`border-accent bg-ink-700 text-accent`;function cu({onKey:e,ctrl:t,alt:n,onArm:r}){(0,E.useEffect)(()=>t.clear,[t.clear]),(0,E.useEffect)(()=>n.clear,[n.clear]);let i=()=>{t.clear(),n.clear()};return(0,$.jsx)(`div`,{className:`flex shrink-0 items-stretch gap-1 overflow-x-auto border-t border-chrome-line bg-ink-900 px-1 py-1`,children:Re.map(a=>a.kind===`latch`?(0,$.jsx)(lu,{latch:a.latch===`ctrl`?t:n,label:a.label,aria:a.aria,onArm:r},a.latch):(0,$.jsx)(`button`,{onPointerDown:e=>e.preventDefault(),onClick:()=>{i(),e(a.key)},"aria-label":a.aria,className:`${au} ${ou}`,children:a.label},a.key))})}function lu({latch:e,label:t,aria:n,onArm:r}){return(0,$.jsx)(`button`,{onPointerDown:e=>e.preventDefault(),onClick:()=>{e.toggle()&&r()},"aria-pressed":e.armed,"aria-label":n,className:`${au} ${e.armed?su:ou}`,children:t})}function uu(e){return{lastY:e,pending:0,scrolling:!1}}function du(e,t){let n=e.pending+(e.lastY-t);return Math.abs(n)<50?{next:{...e,lastY:t,pending:n},deltaY:0}:{next:{lastY:t,pending:0,scrolling:!0},deltaY:n}}function fu({viewsRef:e,bodyRefs:t}){let n=(0,E.useRef)(null),r=(0,E.useRef)(null),i=(0,E.useCallback)(()=>{n.current=null,r.current=null},[]),a=(0,E.useCallback)(e=>{e.pointerType===`touch`&&(n.current===null?(n.current=e.pointerId,r.current=uu(e.clientY)):i())},[i]),o=(0,E.useCallback)(i=>{if(i.pointerId!==n.current)return;let a=r.current;if(!a)return;let{next:o,deltaY:s}=du(a,i.clientY);if(r.current=o,s===0)return;i.preventDefault();let c=i.currentTarget;mu(c,i,s,pu(c,e,t))},[e,t]),s=(0,E.useCallback)(e=>{e.pointerId===n.current&&i()},[i]);return{onPointerDown:a,onPointerMove:o,onPointerUp:s,onPointerCancel:s}}function pu(e,t,n){for(let[r,i]of n.current)if(i===e)return t.current.get(r)}function mu(e,t,n,r){let i=e.querySelector(`.xterm`);if(!i)return;let a=new WheelEvent(`wheel`,{deltaY:n,deltaMode:WheelEvent.DOM_DELTA_PIXEL,clientX:t.clientX,clientY:t.clientY,bubbles:!0,cancelable:!0,view:window});if(i.dispatchEvent(a),a.defaultPrevented||!r)return;let o=r.term.rows,s=o>0?i.clientHeight/o:0;if(s<=0)return;let c=Math.round(n/s);r.term.scrollLines(n<0?Math.min(-1,c):Math.max(1,c))}var hu=`nightcrow.paneViewMode`;function gu(){try{return g(localStorage.getItem(hu))}catch{return null}}function _u(e){try{localStorage.setItem(hu,e)}catch{}}function vu(){return typeof window>`u`?768:window.innerWidth}function yu(){let[e,t]=(0,E.useState)(gu),[n,r]=(0,E.useState)(vu);(0,E.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>r(window.innerWidth);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let i=b(e,n),a=oe(n);return{mode:i,toggle:(0,E.useCallback)(()=>{if(!a)return;let e=i===`tabs`?`grid`:`tabs`;_u(e),t(e)},[i,a]),canToggle:a}}var bu=`nightcrow.termKeyBar`,xu=`(pointer: coarse)`;function Su(){try{return Ie(localStorage.getItem(bu))}catch{return null}}function Cu(e){try{localStorage.setItem(bu,e)}catch{}}function wu(){return typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(xu).matches}function Tu(){return typeof window>`u`?768:window.innerWidth}function Eu(){let[e,t]=(0,E.useState)(Su),[n,r]=(0,E.useState)(wu),[i,a]=(0,E.useState)(Tu);(0,E.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>a(window.innerWidth);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),(0,E.useEffect)(()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=window.matchMedia(xu),t=()=>r(e.matches);return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let o=e?e===`shown`:Le(n,i);return{shown:o,toggle:(0,E.useCallback)(()=>{let e=o?`hidden`:`shown`;Cu(e),t(e)},[o])}}function Du({showDivider:e,draggingUpper:t,onUpperDragStart:n,onUpperDragMove:r,onUpperDragEnd:i,onUpperDragCancel:a}){return e?(0,$.jsx)(`div`,{role:`separator`,"aria-orientation":`horizontal`,"aria-label":`Resize the terminal panel (double-click to reset)`,title:`Drag to resize · double-click to reset`,onPointerDown:n,onPointerMove:r,onPointerUp:i,onPointerCancel:a,onLostPointerCapture:i,className:`absolute -top-px left-0 z-10 hidden h-1.5 w-full cursor-row-resize touch-none md:block ${t?`bg-accent`:`hover:bg-accent`}`}):null}function Ou({mode:e,onToggleMode:t,canToggleMode:i,tabs:a,ownsSize:o,maximized:s,keyBarShown:d,waiting:f,recovery:p,panes:m,onCancelRecovery:h,onClaimSize:g,onCreate:_,onCompose:v,onToggleKeyBar:ee,onToggleMaximized:y}){let b=r(),ne=(0,E.useRef)(null),re=(0,E.useRef)(m.length);(0,E.useLayoutEffect)(()=>{let e=re.current;re.current=m.length;let t=document.activeElement===null||document.activeElement===document.body;ue(m.length,e,t)&&ne.current?.focus()},[m.length]);let S=`flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent`;return(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 bg-ink-900 px-2 py-1 text-xs`,children:[f&&(0,$.jsxs)(`span`,{role:`status`,className:`flex min-w-0 shrink animate-pulse items-center gap-1 rounded-sm bg-ink-800 px-1 text-ink-400`,children:[(0,$.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-accent`}),(0,$.jsx)(`span`,{className:`truncate`,children:f})]}),rl(p,m).map(e=>(0,$.jsx)($l,{pane:e,report:p[e],onCancel:()=>h(e)},e)),a,!o&&(0,$.jsx)(`button`,{onClick:g,...b(`terminal.claimSizing`,`These panes are sized for another client. Resize them to fit this screen.`),"aria-label":`Fit the panes to this screen`,className:`ml-auto ${S}`,children:(0,$.jsx)(l,{})}),(0,$.jsx)(`button`,{ref:ne,onClick:_,...b(`terminal.newPane`,`New terminal`),"aria-label":`New terminal`,className:`${S} ${o?`ml-auto`:``}`,children:(0,$.jsx)(x,{})}),i&&(0,$.jsx)(`button`,{onClick:t,"aria-pressed":e===`tabs`,title:e===`tabs`?`Show the panes side by side`:`Show one pane per tab`,"aria-label":e===`tabs`?`Show the panes side by side`:`Show one pane per tab`,className:S,children:e===`tabs`?(0,$.jsx)(c,{}):(0,$.jsx)(u,{})}),m.length>0&&(0,$.jsx)(`button`,{onClick:v,...b(`terminal.composeMessage`,`Write a message to the active terminal`),"aria-label":`Write a message to the active terminal`,className:S,children:(0,$.jsx)(T,{})}),m.length>0&&(0,$.jsx)(`button`,{onClick:ee,"aria-pressed":d,title:d?`Hide the key bar`:`Show the key bar`,"aria-label":d?`Hide the key bar`:`Show the key bar`,className:`${S} ${d?`text-accent`:``}`,children:(0,$.jsx)(te,{})}),(0,$.jsx)(`button`,{onClick:y,"aria-pressed":s,...b(`view.toggleMaximize`,s?`Restore panel height`:`Maximize the panel`),"aria-label":s?`Restore panel height`:`Maximize the panel`,className:`hidden md:flex ${S}`,children:(0,$.jsx)(n,{maximized:s})})]})}function ku({repo:e,maximized:t,onToggleMaximized:n,className:r=``,sectionRef:a,...o}){let s=nt(),{containerRef:c,socketRef:l,viewsRef:u,bodyRefs:d,zoomAskedRef:f,slotRefs:p}=s,{pending:m,setPending:h,link:g,setLink:_,replayLeft:v,setReplayLeft:ee,panes:y,setPanes:te,active:b,setActive:ne,zoomed:re,setZoomed:x,titles:S,setTitles:C,closing:ie,setClosing:w,ownsSize:ae,setOwnsSize:oe}=Ke(),se=zl(c),{scale:T}=i(),{refitEpoch:le,forceFit:ue}=Ge(g,l),de=Bl(),{recovery:fe,setRecovery:pe,cancelRecovery:me}=Ce(l),he=ze(re,y),ve=fu({viewsRef:u,bodyRefs:d}),{mode:D,toggle:ye,canToggle:be}=yu(),xe=Eu(),Se=Il(),we=Ll(),Te=Se.consume,Ee=we.consume,De=(0,E.useCallback)(e=>Ee(Te(e)),[Ee,Te]),Oe=D===`tabs`,ke=Oe?null:he,Ae=Oe?null:re,je=Oe?ce(b,y):he;Fl({repo:e,refs:s,size:se,mode:D,panes:y,active:b,replayLeft:v,pending:m,ownsSize:ae,keyboardOpen:de,screenScale:T,refitEpoch:le,zoomShown:ke,zoomServer:Ae,consumeLatches:De,setLink:_,setPending:h,setReplayLeft:ee,setPanes:te,setActive:ne,setZoomed:x,setTitles:C,setOwnsSize:oe,onSizeAcquired:ue,setRecovery:pe});let Me=t=>{ne(t),dt(e,t),u.current.get(t)?.term.focus()},Ne=e=>S[e]||`terminal ${y.indexOf(e)+1}`,Pe=()=>b!==null&&Me(b),Fe=ql({socketRef:l,viewsRef:u,active:b,panes:y,onSent:e=>{Se.clear(),we.clear(),Me(e)}}),Ie=He({socketRef:l,viewsRef:u,zoomed:he,zoomAskedRef:f,active:b,onForceFit:ue}),{create:Le,toggleZoom:Re,claimSize:Be,closePane:Ve,reorder:Ue,sendKey:We}=Ie;rt({socketRef:l,panes:y,active:b,zoom:ke,link:g,commands:Ie,focusPane:Me,cancelRecovery:me,openCompose:Fe.open});let{draggingPane:qe,dragOverPane:Je,reorderable:Ye,endPaneDrag:Xe,onPaneDragStart:Ze,onPaneDragMove:Qe,onPaneDragEnd:$e}=_e({panes:y,zoomed:ke,onFocus:Me,onReorder:Ue}),et=ge(y.length+v>0?y.length+v:m??0,se.w>=se.h),tt=Hl({link:g,panes:y.length,replayLeft:v,pending:m});return(0,$.jsxs)(`section`,{ref:a,"data-terminal-panel":``,className:`relative flex min-h-0 min-w-0 flex-col border-t border-chrome-line ${r}`,children:[(0,$.jsx)(Du,{...o}),(0,$.jsx)(Ou,{mode:D,onToggleMode:ye,canToggleMode:be,tabs:Oe&&y.length>0?(0,$.jsx)(iu,{panes:y,titles:S,shown:je,reorderable:Ye,draggingPane:qe,dragOverPane:Je,onClose:w,onPaneDragStart:Ze,onPaneDragMove:Qe,onPaneDragEnd:$e,onPaneDragCancel:Xe}):void 0,ownsSize:ae,maximized:t,keyBarShown:xe.shown,waiting:y.length>0?Ul(tt):null,recovery:fe,panes:y,onCancelRecovery:me,onClaimSize:Be,onCreate:Le,onCompose:Fe.open,onToggleKeyBar:xe.toggle,onToggleMaximized:n}),(0,$.jsxs)(`div`,{className:`relative min-h-0 flex-1 overflow-hidden bg-ink-950 p-1`,children:[y.length===0&&(0,$.jsx)(Gl,{status:tt}),(0,$.jsx)(ru,{containerRef:c,mode:D,maximized:t,panes:y,titles:S,active:b,shown:je,layout:et,pending:m,recovery:fe,draggingPane:qe,dragOverPane:Je,reorderable:Ye,bodyTouch:ve,slotRefs:p,bodyRefs:d,onFocus:Me,onToggleZoom:Re,onClose:w,onCancelRecovery:me,onPaneDragStart:Ze,onPaneDragMove:Qe,onPaneDragEnd:$e,onPaneDragCancel:Xe})]}),y.length>0&&xe.shown&&(0,$.jsx)(cu,{onKey:We,ctrl:Se,alt:we,onArm:Pe}),(0,$.jsx)(Ql,{closing:ie,panes:y,paneLabel:Ne,onConfirmClose:e=>{w(null),Ve(e)},onCancelClose:()=>{w(null),Pe()},compose:Fe})]})}export{ku as TerminalPanel}; \ No newline at end of file diff --git a/viewer-ui/dist/assets/index-CgaQ-fTb.js b/viewer-ui/dist/assets/index-DfOm43ao.js similarity index 99% rename from viewer-ui/dist/assets/index-CgaQ-fTb.js rename to viewer-ui/dist/assets/index-DfOm43ao.js index b322e871..3e8e8bab 100644 --- a/viewer-ui/dist/assets/index-CgaQ-fTb.js +++ b/viewer-ui/dist/assets/index-DfOm43ao.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Markdown-DEJAds14.js","./jsx-runtime-EIAPxkjE.js","./react-BPk_wmJm.js","./Markdown-C8LL_u4z.css","./Html-DGFy4jGa.js","./HtmlEditor-DILpvNkQ.js","./BusyLabel-BNTNuT1X.js","./api-CKtlIBMl.js","./Terminal-TFqlge3z.js","./visualViewport-hwlIeclE.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Markdown-DEJAds14.js","./jsx-runtime-EIAPxkjE.js","./react-BPk_wmJm.js","./Markdown-C8LL_u4z.css","./Html-DGFy4jGa.js","./HtmlEditor-DILpvNkQ.js","./BusyLabel-BNTNuT1X.js","./api-CKtlIBMl.js","./Terminal-Lp7ty5Uw.js","./visualViewport-hwlIeclE.js"])))=>i.map(i=>d[i]); import{n as e,t}from"./jsx-runtime-EIAPxkjE.js";import{t as n}from"./react-BPk_wmJm.js";import{$ as r,A as i,B as a,C as o,D as s,E as c,F as l,G as u,H as d,I as f,J as p,K as m,L as h,M as g,N as _,Q as v,R as y,T as b,U as x,V as S,W as C,X as w,Y as T,Z as ee,_ as te,a as E,at as ne,b as re,ct as ie,dt as ae,et as oe,f as se,g as ce,h as le,i as ue,it as de,j as fe,k as pe,lt as me,m as he,nt as ge,ot as _e,q as ve,rt as ye,st as be,t as xe,tt as Se,ut as D,w as O,y as Ce,z as we}from"./visualViewport-hwlIeclE.js";import{t as Te}from"./BusyLabel-BNTNuT1X.js";import{a as k,i as Ee,n as A,r as De,t as j}from"./api-CKtlIBMl.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Oe=e((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m){if(n(c)!==null)m=!0,S||(S=!0,E());else{var t=n(l);t!==null&&ie(x,t.startTime-e)}}}var S=!1,C=-1,w=5,T=-1;function ee(){return g?!0:!(e.unstable_now()-Tt&&ee());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&ie(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?E():S=!1}}}var E;if(typeof y==`function`)E=function(){y(te)};else if(typeof MessageChannel<`u`){var ne=new MessageChannel,re=ne.port2;ne.port1.onmessage=te,E=function(){re.postMessage(null)}}else E=function(){_(te,0)};function ie(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,ie(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,E()))),r},e.unstable_shouldYield=ee,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),ke=e(((e,t)=>{t.exports=Oe()})),Ae=e((e=>{var t=ke(),r=n(),i=ae();function a(e){var t=`https://react.dev/errors/`+e;if(1Te||(e.current=we[Te],we[Te]=null,Te--)}function A(e,t){Te++,we[Te]=e.current,e.current=t}var De=k(null),j=k(null),Oe=k(null),Ae=k(null);function je(e,t){switch(A(Oe,t),A(j,e),A(De,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?up(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=up(t),e=dp(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}Ee(De),A(De,e)}function M(){Ee(De),Ee(j),Ee(Oe)}function N(e){var t=e.memoizedState;t!==null&&(sh._currentValue=t.memoizedState,A(Ae,e)),t=De.current;var n=dp(t,e.type);t!==n&&(A(j,e),A(De,n))}function Me(e){j.current===e&&(Ee(De),Ee(j)),Ae.current===e&&(Ee(Ae),sh._currentValue=Ce)}var Ne,Pe;function Fe(e){if(Ne===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Ne=t&&t[1]||``,Pe=-1)`:-1>>=0,e===0?32:31-(it(e)/at|0)|0}var st=256,ct=262144,lt=4194304;function ut(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&-e;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function dt(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=ut(n))):i=ut(o):i=ut(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=ut(n))):i=ut(o)):i=ut(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function ft(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function pt(e,t){t&8&&(t|=t&32);var n=e.entangledLanes;if(n!==0)for(e=e.entanglements,n&=t;0n;n++)t.push(e);return t}function _t(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function vt(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0=_r),br=` `,xr=!1;function Sr(e,t){switch(e){case`keyup`:return hr.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function Cr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var wr=!1;function Tr(e,t){switch(e){case`compositionend`:return Cr(t);case`keypress`:return t.which===32?(xr=!0,br):null;case`textInput`:return e=t.data,e===br&&xr?null:e;default:return null}}function Er(e,t){if(wr)return e===`compositionend`||!gr&&Sr(e,t)?(e=Rn(),Ln=In=Fn=null,wr=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Yr(n)}}function Zr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Zr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Qr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Jr(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Jr(e.document)}return t}function $r(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var ei=Mn&&`documentMode`in document&&11>=document.documentMode,ti=null,ni=null,ri=null,ii=!1;function ai(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ii||ti==null||ti!==Jr(r)||(r=ti,`selectionStart`in r&&$r(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),ri&&qr(ri,r)||(ri=r,r=Jf(ni,`onSelect`),0>=o,i-=o,ta=1<<32-rt(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),I&&ra(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(i,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(i,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(i,h),I&&ra(i,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(i,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return I&&ra(i,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,i,g,v.value,l),v!==null&&(e&&(_=v.alternate,_!==null&&h.delete(_.key===null?g:_.key)),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(i,e)}),I&&ra(i,g),u}function _(e,r,o,c){if(typeof o==`object`&&o&&o.type===ne&&o.key===null&&o.props.ref===void 0&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case te:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===ne){if(r.tag===7){n(e,r.sibling),c=i(r,o.props.children),po(c,o),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===fe&&ao(l)===r.type){n(e,r.sibling),c=i(r,o.props),po(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===ne?(c=Hi(o.props.children,e.mode,c,o.key),po(c,o),c.return=e,e=c):(c=Vi(o.type,o.key,o.props,null,e.mode,c),po(c,o),c.return=e,e=c)}return s(e);case E:a:{for(l=o.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=i(r,o.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=Gi(o,e.mode,c),c.return=e,e=c}return s(e);case fe:return o=ao(o),_(e,r,o,c)}if(Se(o))return h(e,r,o,c);if(ye(o)){if(l=ye(o),typeof l!=`function`)throw Error(a(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return _(e,r,fo(o),c);if(o.$$typeof===se)return _(e,r,Aa(e,o),c);mo(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=i(r,o),c.return=e,e=c):(n(e,r),c=Ui(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{uo=0;var i=_(e,t,n,r);return lo=null,i}catch(t){if(t===$a||t===to)throw t;var a=Li(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var go=ho(!0),_o=ho(!1),vo=!1;function yo(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function bo(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function xo(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function So(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,W&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=Pi(e),Ni(e,null,n),t}return Ai(e,r,t,n),Pi(e)}function Co(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,bt(e,n)}}function wo(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n}else e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var To=!1;function Eo(){if(To){var e=Wa;if(e!==null)throw e}}function Do(e,t,n,r){To=!1;var i=e.updateQueue;vo=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(q&f)===f:(r&f)===f){f!==0&&f===Ua&&(To=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,h=s;f=t;var g=n;switch(h.tag){case 1:if(m=h.payload,typeof m==`function`){d=m.call(g,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=h.payload,f=typeof m==`function`?m.call(g,d,f):m,f==null)break a;d=T({},d,f);break a;case 2:vo=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),sd|=o,e.lanes=o,e.memoizedState=d}}function Oo(e,t){if(typeof e!=`function`)throw Error(a(191,e));e.call(t)}function ko(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=D.T,s={};s.types=o===null?null:o.types,D.T=s,pc(e,!1,t,n);try{var c=i(),l=D.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?fc(e,t,qa(c,r),jd(e)):fc(e,t,r,jd(e))}catch(n){fc(e,t,{then:function(){},status:`rejected`,reason:n},jd())}finally{O.p=a,o!==null&&s.types!==null&&(o.types=s.types),D.T=o}}function nc(){}function rc(e,t,n,r){if(e.tag!==5)throw Error(a(476));var i=ic(e).queue;tc(e,i,t,Ce,n===null?nc:function(){return ac(e),n(r)})}function ic(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:Ce,baseState:Ce,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ms,lastRenderedState:Ce},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ms,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function ac(e){var t=ic(e);t.next===null&&(t=e.alternate.memoizedState),fc(e,t.next.queue,{},jd())}function oc(){return ka(sh)}function sc(){return B().memoizedState}function cc(){return B().memoizedState}function lc(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=jd();e=xo(n);var r=So(t,e,n);r!==null&&(Pd(r,t,n),Co(r,t,n)),t={cache:Ia()},e.payload=t;return}t=t.return}}function uc(e,t,n){var r=jd();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},mc(e)?hc(t,n):(n=ji(e,t,n,r),n!==null&&(Pd(n,e,r),gc(n,t,r)))}function dc(e,t,n){fc(e,t,n,jd())}function fc(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(mc(e))hc(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Kr(s,o))return Ai(e,t,i,0),G===null&&ki(),!1}catch{}if(n=ji(e,t,i,r),n!==null)return Pd(n,e,r),gc(n,t,r),!0}return!1}function pc(e,t,n,r){if(r={lane:2,revertLane:Pf(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},mc(e)){if(t)throw Error(a(479))}else t=ji(e,n,r,2),t!==null&&Pd(t,e,2)}function mc(e){var t=e.alternate;return e===L||t!==null&&t===L}function hc(e,t){Yo=Jo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function gc(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,bt(e,n)}}var _c={readContext:ka,use:fs,useCallback:z,useContext:z,useEffect:z,useImperativeHandle:z,useLayoutEffect:z,useInsertionEffect:z,useMemo:z,useReducer:z,useRef:z,useState:z,useDebugValue:z,useDeferredValue:z,useTransition:z,useSyncExternalStore:z,useId:z,useHostTransitionStatus:z,useFormState:z,useActionState:z,useOptimistic:z,useMemoCache:z,useCacheRefresh:z,useEffectEvent:z},vc={readContext:ka,use:fs,useCallback:function(e,t){return ls().memoizedState=[e,t===void 0?null:t],e},useContext:ka,useEffect:Hs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),Bs(4194308,4,Js.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Bs(4194308,4,e,t)},useInsertionEffect:function(e,t){Bs(4,2,e,t)},useMemo:function(e,t){var n=ls();t=t===void 0?null:t;var r=e();if(Xo){nt(!0);try{e()}finally{nt(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=ls();if(n!==void 0){var i=n(t);if(Xo){nt(!0);try{n(t)}finally{nt(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=uc.bind(null,L,e),[r.memoizedState,e]},useRef:function(e){var t=ls();return e={current:e},t.memoizedState=e},useState:function(e){e=ws(e);var t=e.queue,n=dc.bind(null,L,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Xs,useDeferredValue:function(e,t){return $s(ls(),e,t)},useTransition:function(){var e=ws(!1);return e=tc.bind(null,L,e.queue,!0,!1),ls().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=L,i=ls();if(I){if(n===void 0)throw Error(a(407));n=n()}else{if(n=t(),G===null)throw Error(a(349));q&127||ys(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,Hs(xs.bind(null,r,o,e),[e]),r.flags|=2048,Rs(9,{destroy:void 0},bs.bind(null,r,o,n,t),null),n},useId:function(){var e=ls(),t=G.identifierPrefix;if(I){var n=na,r=ta;n=(r&~(1<<32-rt(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=Zo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(i,{is:r.is}):s.createElement(i)}}o[Dt]=t,o[Ot]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(np(o,i,r),i){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&gl(t)}}return V(t),t.subtreeFlags&=-33554433,_l(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&gl(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(a(166));if(e=Oe.current,ha(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,i=ca,i!==null)switch(i.tag){case 27:case 5:r=i.memoizedProps}e[Dt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||ep(e.nodeValue,n)),e||fa(t,!0)}else e=lp(e).createTextNode(r),e[Dt]=t,t.stateNode=e}return V(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=ha(t),n!==null){if(e===null){if(!r)throw Error(a(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(a(557));e[Dt]=t}else ga(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;V(t),e=!1}else n=_a(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Vo(t),t):(Vo(t),null);if(t.flags&128)throw Error(a(558))}return V(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=ha(t),r!==null&&r.dehydrated!==null){if(e===null){if(!i)throw Error(a(318));if(i=t.memoizedState,i=i===null?null:i.dehydrated,!i)throw Error(a(317));i[Dt]=t}else ga(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;V(t),i=!1}else i=_a(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(Vo(t),t):(Vo(t),null)}return Vo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,i=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(i=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==i&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),yl(t,t.updateQueue),V(t),null);case 4:return M(),e===null&&Wf(t.stateNode.containerInfo),t.flags|=67108864,V(t),null;case 10:return Ca(t.type),V(t),null;case 19:if(Wo(t),r=t.memoizedState,r===null)return V(t),null;if(i=!!(t.flags&128),o=r.rendering,o===null){if(i)bl(r,!1);else{if(Y!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=Go(e),o!==null){for(t.flags|=128,bl(r,!1),e=o.updateQueue,t.updateQueue=e,yl(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Bi(n,e),n=n.sibling;return Uo(t,Ho.current&1|2),I&&ra(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ge()>_d&&(t.flags|=128,i=!0,bl(r,!1),t.lanes=4194304)}}else{if(!i){if(e=Go(o),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,yl(t,e),bl(r,!0),r.tail===null&&r.tailMode!==`collapsed`&&r.tailMode!==`visible`&&!o.alternate&&!I)return V(t),null}else 2*Ge()-r.renderingStartTime>_d&&n!==536870912&&(t.flags|=128,i=!0,bl(r,!1),t.lanes=4194304)}r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}if(r.tail!==null){e=r.tail;a:{for(n=e;n!==null;){if(n.alternate!==null){n=!1;break a}n=n.sibling}n=!0}return r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ge(),e.sibling=null,o=Ho.current,o=i?o&1|2:o&1,r.tailMode===`visible`||r.tailMode===`collapsed`||!n||I?Uo(t,o):(n=o,A(Fo,t),A(Ho,n),Io===null&&(Io=t)),I&&ra(t,r.treeForkCount),e}return V(t),null;case 22:case 23:return Vo(t),Po(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(V(t),t.subtreeFlags&6&&(t.flags|=8192)):V(t),n=t.updateQueue,n!==null&&yl(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&Ee(Ya),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Ca(Fa),V(t),null;case 25:return null;case 30:return t.flags|=33554432,V(t),null}throw Error(a(156,t.tag))}function Sl(e,t){switch(oa(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Ca(Fa),M(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Me(t),null;case 31:if(t.memoizedState!==null){if(Vo(t),t.alternate===null)throw Error(a(340));ga()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Vo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(a(340));ga()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Wo(t),e=t.flags,e&65536?(t.flags=e&-65537|128,e=t.memoizedState,e!==null&&(e.rendering=null,e.tail=null),t.flags|=4,t):null;case 4:return M(),null;case 10:return Ca(t.type),null;case 22:case 23:return Vo(t),Po(),e!==null&&Ee(Ya),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Ca(Fa),null;case 25:return null;default:return null}}function Cl(e,t){switch(oa(t),t.tag){case 3:Ca(Fa),M();break;case 26:case 27:case 5:Me(t);break;case 4:M();break;case 31:t.memoizedState!==null&&Vo(t);break;case 13:Vo(t);break;case 19:Wo(t);break;case 10:Ca(t.type);break;case 22:case 23:Vo(t),Po(),e!==null&&Ee(Ya);break;case 24:Ca(Fa)}}function wl(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Tl(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function El(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{ko(t,n)}catch(t){Z(e,e.return,t)}}}function Dl(e,t,n){n.props=Tc(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Ol(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:var i=e.stateNode,a=Si(e.memoizedProps,i);(i.ref===null||i.ref.name!==a)&&(i.ref=Pp(a)),r=i.ref;break;case 7:if(e.stateNode===null){var o=new Fp(e);p(e.child,!1,Qp,o,void 0,void 0),e.stateNode=o}r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function kl(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}}function Al(e,t){if((e.tag===5||e.tag===27||e.tag===6)&&e.alternate===null&&t!==null)for(var n=0;n title`))),np(r,t,n),r[Dt]=e,Vt(r),t=r;break a;case`link`:if(o=Gm(`link`,`href`,i).get(t+(n.href||``))){for(s=0;sg&&(o=g,g=h,h=o);var _=Xr(s,h),v=Xr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,D.T=null,n=wd,wd=null;var o=bd,s=Sd;if(X=0,xd=bd=null,Sd=0,W&6)throw Error(a(331));var c=W;if(W|=4,Zu(o.current),Uu(o,o.current,s,n),W=c,Df(0,!1),tt&&typeof tt.onPostCommitFiberRoot==`function`)try{tt.onPostCommitFiberRoot(et,o)}catch{}return!0}finally{O.p=i,D.T=r,uf(e,t)}}function pf(e,t,n){t=qi(n,t),t=jc(e.stateNode,t,2),e=So(e,t,2),e!==null&&(_t(e,2),Ef(e))}function Z(e,t,n){if(e.tag===3)pf(e,e,n);else for(;t!==null;){if(t.tag===3){pf(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(yd===null||!yd.has(r))){e=qi(n,e),n=Mc(2),r=So(t,n,2),r!==null&&(Nc(n,r,t,e),_t(r,2),Ef(r));break}}t=t.return}}function mf(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new td;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(ad=!0,i.add(n),e=hf.bind(null,e,t,n),t.then(e,e))}function hf(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,G===e&&(q&n)===n&&(Y===4||Y===3&&(q&62914560)===q&&300>Ge()-hd?W&2?ld|=n:Vd(e,0):ld|=n,dd===q&&(dd=0)),Ef(e)}function gf(e,t){t===0&&(t=ht()),e=Mi(e,t),e!==null&&(_t(e,t),Ef(e))}function _f(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),gf(e,n)}function vf(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(a(314))}r!==null&&r.delete(t),gf(e,n)}function yf(e,t){return Ve(e,t)}var bf=null,xf=null,Sf=!1,Cf=!1,wf=!1,Tf=0;function Ef(e){e!==xf&&e.next===null&&(xf===null?bf=xf=e:xf=xf.next=e),Cf=!0,Sf||(Sf=!0,Nf())}function Df(e,t){if(!wf&&Cf){wf=!0;do for(var n=!1,r=bf;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-rt(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,Mf(r,a))}else a=q,a=dt(r,r===G?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||ft(r,a)||(n=!0,Mf(r,a))}r=r.next}while(n);wf=!1}}function Of(){kf()}function kf(){Cf=Sf=!1;var e=0;Tf!==0&&hp()&&(e=Tf);for(var t=Ge(),n=null,r=bf;r!==null;){var i=r.next,a=Af(r,t);a===0?(r.next=null,n===null?bf=i:n.next=i,i===null&&(xf=n)):(n=r,(e!==0||a&3)&&(Cf=!0)),r=i}X!==0&&X!==5||Df(e,!1),Tf!==0&&(Tf=0)}function Af(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&ap(d)&&(c=c.responseEnd,o+=u*(c$m){s.length=o;break}f=new Promise(jp.bind(f)),s.push(f)}}}if(0`u`?null:document;function Tm(e,t,n){var r=wm;if(r&&typeof t==`string`&&t){var i=cn(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),ym.has(i)||(ym.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),np(t,`link`,e),Vt(t),r.head.appendChild(t)))}}function Em(e){xm.D(e),Tm(`dns-prefetch`,e,null)}function Dm(e,t){xm.C(e,t),Tm(`preconnect`,e,t)}function Om(e,t,n){xm.L(e,t,n);var r=wm;if(r&&e&&t){var i=`link[rel="preload"][as="`+cn(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+cn(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+cn(n.imageSizes)+`"]`)):i+=`[href="`+cn(e)+`"]`;var a=i;switch(t){case`style`:a=Pm(e);break;case`script`:a=Rm(e)}if(!(vm.has(a)||(e=T({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),vm.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Fm(a))||t===`script`&&r.querySelector(zm(a))))){var o=r.createElement(`link`);np(o,`link`,e),t===`style`&&(o[Ft]=!0,o.onload=o.onerror=function(){Ht(o)}),Vt(o),r.head.appendChild(o)}}}function km(e,t){xm.m(e,t);var n=wm;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+cn(r)+`"][href="`+cn(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Rm(e)}if(!vm.has(a)&&(e=T({rel:`modulepreload`,href:e},t),vm.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(zm(a)))return}r=n.createElement(`link`),np(r,`link`,e),Vt(r),n.head.appendChild(r)}}}function Am(e,t,n){xm.S(e,t,n);var r=wm;if(r&&e){var i=Bt(r).hoistableStyles,a=Pm(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Fm(a)))s.loading=5;else{e=T({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=vm.get(a))&&Hm(e,n);var c=o=r.createElement(`link`);Vt(c),np(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Vm(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function jm(e,t){xm.X(e,t);var n=wm;if(n&&e){var r=Bt(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Vt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mm(e,t){xm.M(e,t);var n=wm;if(n&&e){var r=Bt(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0,type:`module`},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Vt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Nm(e,t,n,r){var i=(i=Oe.current)?bm(i):null;if(!i)throw Error(a(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(n=Pm(n.href),t=Bt(i).hoistableStyles,r=t.get(n),r||(r={type:`style`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Pm(n.href);var o=Bt(i).hoistableStyles,s=o.get(e);if(s||(i=i.ownerDocument||i,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=i.querySelector(Fm(e)))?o._p||(s.instance=o,s.state.loading=5):(o=vm.get(e),o||(o={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},vm.set(e,o)),Lm(i,e,o,s.state))),t&&r===null)throw Error(a(528,``));return s}if(t&&r!==null)throw Error(a(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(n=Rm(n),t=Bt(i).hoistableScripts,r=t.get(n),r||(r={type:`script`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(a(444,e))}}function Pm(e){return`href="`+cn(e)+`"`}function Fm(e){return`link[rel="stylesheet"][`+e+`]`}function Im(e){return T({},e,{"data-precedence":e.precedence,precedence:null})}function Lm(e,t,n,r){if(t=e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)){if(!0!==t[Ft]){r.loading=1;return}}else t=e.createElement(`link`),t[Ft]=!0,t.onload=t.onerror=Ht.bind(null,t),np(t,`link`,n),Vt(t),e.head.appendChild(t);r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2})}function Rm(e){return`[src="`+cn(e)+`"]`}function zm(e){return`script[async]`+e}function Bm(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+cn(n.href)+`"]`);if(r)return t.instance=r,Vt(r),r;var i=T({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),Vt(r),np(r,`style`,i),Vm(r,n.precedence,e),t.instance=r;case`stylesheet`:i=Pm(n.href);var o=e.querySelector(Fm(i));if(o)return t.state.loading|=4,t.instance=o,Vt(o),o;r=Im(n),(i=vm.get(i))&&Hm(r,i),o=(e.ownerDocument||e).createElement(`link`),Vt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),np(o,`link`,r),t.state.loading|=4,Vm(o,n.precedence,e),t.instance=o;case`script`:return o=Rm(n.src),(i=e.querySelector(zm(o)))?(t.instance=i,Vt(i),i):(r=n,(i=vm.get(o))&&(r=T({},n),Um(r,i)),e=e.ownerDocument||e,i=e.createElement(`script`),Vt(i),np(i,`link`,r),e.head.appendChild(i),t.instance=i);case`void`:return null;default:throw Error(a(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Vm(r,n.precedence,e));return t.instance}function Vm(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function qm(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Jm(e,t){return e===`img`&&t.src!=null&&t.src!==``&&t.onLoad==null&&t.loading!==`lazy`}function Ym(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Xm(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==`number`?devicePixelRatio:1)*.25}function Zm(e,t){typeof t.decode==`function`&&(e.imgCount++,t.complete||(e.imgBytes+=Xm(t),e.suspenseyImages.push(t)),e=rh.bind(e),t.decode().then(e,e))}function Qm(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Pm(r.href),a=t.querySelector(Fm(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=nh.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,Vt(a);return}a=t.ownerDocument||t,r=Im(r),(i=vm.get(i))&&Hm(r,i),a=a.createElement(`link`),Vt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),np(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=nh.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var $m=0;function eh(e,t){return e.stylesheets&&e.count===0&&ah(e,e.stylesheets),0$m?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function th(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)ah(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function nh(){this.count--,th(this)}function rh(){this.imgCount--,th(this)}var ih=null;function ah(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ih=new Map,t.forEach(oh,e),ih=null,nh.call(e))}function oh(e,t){if(!(t.state.loading&4)){var n=ih.get(e);if(n)var r=n.get(null);else{n=new Map,ih.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=Ae()}))(),M=n(),N=t();function Me({onClose:e,onOpened:t,canClone:n,cloning:r,onClone:i}){let[a,o]=(0,M.useState)(null),[s,c]=(0,M.useState)(null),[l,u]=(0,M.useState)(null),[d,f]=(0,M.useState)(!1),[p,m]=(0,M.useState)(``),[h,g]=(0,M.useState)(!1),[_,v]=(0,M.useState)(``),[y,b]=(0,M.useState)(0);(0,M.useEffect)(()=>{let e=!1;return j.browse(a??void 0).then(t=>{e||(c(t),u(null))}).catch(t=>{e||u(t instanceof Error?t.message:`could not browse`)}),()=>{e=!0}},[a,y]);let x=e=>o(`${s.path.replace(/\/$/,``)}/${e}`),S=async()=>{if(s){f(!0);try{t(await j.open(s.path))}catch(e){me.error(e instanceof Error?e.message:`could not open`),f(!1)}}},C=async()=>{if(!s)return;let e=p.trim();if(e){g(!0);try{await j.mkdir(s.path,e),m(``),b(e=>e+1)}catch(e){me.error(e instanceof Error?e.message:`could not create folder`)}finally{g(!1)}}};return(0,N.jsx)(`div`,{className:`nc-fade-in fixed inset-0 z-50 flex items-start justify-center bg-black/60 p-4 md:pt-[8vh]`,onClick:e,children:(0,N.jsxs)(`div`,{className:`nc-rise-in flex max-h-[min(80vh,calc(var(--nc-visual-viewport-height,100vh)-8vh-1rem))] w-[34rem] max-w-full flex-col rounded-lg border border-ink-700 bg-ink-900`,onClick:e=>e.stopPropagation(),children:[(0,N.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-ink-700 px-3 py-2`,children:[(0,N.jsx)(`span`,{className:`font-medium text-ink-50`,children:`Open a project`}),(0,N.jsx)(`button`,{onClick:e,"aria-label":`close`,className:`ml-auto flex h-6 w-6 items-center justify-center rounded-sm text-ink-400 hover:text-ink-200`,children:(0,N.jsx)(_e,{})})]}),(0,N.jsx)(`div`,{className:`shrink-0 truncate border-b border-ink-700 px-3 py-1.5 text-ink-400`,children:s?.path??`…`}),(0,N.jsxs)(`ul`,{className:`h-72 min-h-0 overflow-y-auto`,children:[s?.parent&&(0,N.jsx)(`li`,{children:(0,N.jsx)(`button`,{onClick:()=>o(s.parent),className:`w-full px-3 py-1 text-left text-ink-400 hover:bg-ink-850`,children:`../`})}),s?.entries.map(e=>(0,N.jsx)(`li`,{children:(0,N.jsxs)(`button`,{onClick:()=>x(e.name),className:`flex w-full items-center gap-2 px-3 py-1 text-left hover:bg-ink-850`,children:[(0,N.jsxs)(`span`,{className:`truncate text-accent`,children:[e.name,`/`]}),e.is_repo&&(0,N.jsx)(`span`,{className:`rounded-sm bg-ink-700 px-1 text-2xs text-ink-200`,children:`git`})]})},e.name)),s&&s.entries.length===0&&(0,N.jsx)(`li`,{className:`px-3 py-1 text-ink-400`,children:`No sub-folders.`})]}),l&&(0,N.jsx)(`p`,{className:`shrink-0 px-3 py-1 text-removed`,children:l}),(0,N.jsxs)(`div`,{className:`flex shrink-0 items-stretch gap-2 border-t border-ink-700 px-3 py-2`,children:[(0,N.jsx)(`input`,{value:p,onChange:e=>m(e.target.value),onKeyDown:e=>{e.key===`Enter`&&C()},placeholder:`New folder name`,"aria-label":`new folder name`,className:`min-w-0 flex-1 rounded-sm border border-ink-700 bg-ink-950 px-2 py-1 text-ink-50 placeholder:text-ink-400 focus:border-ink-600 focus:outline-none`}),(0,N.jsx)(`button`,{onClick:C,disabled:!s||!p.trim()||h,"aria-busy":h,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850 disabled:opacity-50`,children:(0,N.jsx)(Te,{busy:h,children:`Create`})})]}),(0,N.jsxs)(`div`,{className:`flex shrink-0 items-stretch gap-2 border-t border-ink-700 px-3 py-2`,children:[(0,N.jsx)(`input`,{value:_,onChange:e=>v(e.target.value),onKeyDown:e=>{e.key===`Enter`&&s&&i(s.path,_)},disabled:!n,placeholder:n?`Clone a git URL here`:`git is not installed on the server`,"aria-label":`git URL to clone`,spellCheck:!1,autoCapitalize:`none`,autoCorrect:`off`,className:`min-w-0 flex-1 rounded-sm border border-ink-700 bg-ink-950 px-2 py-1 text-ink-50 placeholder:text-ink-400 focus:border-ink-600 focus:outline-none disabled:opacity-50`}),(0,N.jsx)(`button`,{onClick:()=>s&&i(s.path,_),disabled:!n||!s||!_.trim()||r,"aria-busy":r,title:n?void 0:`the server has no git on its PATH`,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850 disabled:opacity-50`,children:(0,N.jsx)(Te,{busy:r,children:`Clone`})})]}),(0,N.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-t border-ink-700 px-3 py-2`,children:[(0,N.jsx)(`span`,{className:`truncate text-ink-400`,children:s?s.path:``}),(0,N.jsx)(`button`,{onClick:S,disabled:!s||d,"aria-busy":d,className:`ml-auto shrink-0 rounded-sm bg-ink-50 px-3 py-1 font-semibold text-ink-950 hover:bg-white disabled:opacity-50`,children:(0,N.jsx)(Te,{busy:d,children:`Open`})})]})]})})}var Ne=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='12%2057%201150%201150'%20role='img'%20aria-label='Black%20crow'%3e%3ctitle%3eBlack%20crow%3c/title%3e%3cdesc%3eMonochrome%20black%20crow%20silhouette%20on%20a%20transparent%20background,%20framed%20so%20the%20bird%20sits%20centred%20for%20use%20as%20an%20inline%20mark%20on%20a%20square%20tile.%3c/desc%3e%3cg%20fill-rule='evenodd'%20clip-rule='evenodd'%3e%3cpath%20fill='%23000000'%20d='M%20882%20147%20L%20859%20136%20L%20844%20131%20L%20831%20129%20L%20830%20128%20L%20815%20127%20L%20814%20126%20L%20796%20126%20L%20795%20127%20L%20786%20127%20L%20785%20128%20L%20775%20129%20L%20752%20136%20L%20732%20146%20L%20713%20160%20L%20701%20172%20L%20684%20172%20L%20683%20173%20L%20673%20173%20L%20672%20174%20L%20650%20176%20L%20649%20177%20L%20627%20181%20L%20602%20190%20L%20589%20197%20L%20579%20204%20L%20562%20221%20L%20562%20223%20L%20565%20223%20L%20578%20228%20L%20581%20228%20L%20612%20238%20L%20672%20252%20L%20684%20258%20L%20698%20271%20L%20702%20278%20L%20705%20288%20L%20705%20294%20L%20703%20301%20L%20699%20308%20L%20688%20318%20L%20630%20347%20L%20593%20372%20L%20561%20399%20L%20544%20416%20L%20522%20441%20L%20492%20481%20L%20461%20531%20L%20438%20576%20L%20431%20594%20L%20425%20602%20L%20405%20635%20L%20387%20668%20L%20385%20676%20L%20390%20679%20L%20368%20705%20L%20330%20755%20L%20306%20790%20L%20296%20808%20L%20289%20818%20L%20280%20838%20L%20280%20843%20L%20283%20845%20L%20292%20843%20L%20297%20840%20L%20299%20840%20L%20321%20828%20L%20322%20830%20L%20311%20844%20L%20288%20878%20L%20287%20881%20L%20259%20924%20L%20235%20965%20L%20205%201023%20L%20205%201025%20L%20197%201042%20L%20191%201061%20L%20191%201071%20L%20192%201072%20L%20198%201071%20L%20220%201056%20L%20242%201038%20L%20300%20986%20L%20302%20987%20L%20265%201040%20L%20264%201043%20L%20246%201070%20L%20235%201090%20L%20227%201112%20L%20227%201123%20L%20229%201128%20L%20234%201133%20L%20239%201135%20L%20255%201135%20L%20274%201129%20L%20279%201134%20L%20286%201137%20L%20290%201137%20L%20291%201138%20L%20310%201138%20L%20311%201137%20L%20317%201137%20L%20318%201136%20L%20326%201135%20L%20344%201129%20L%20369%201116%20L%20395%201097%20L%20420%201073%20L%20445%201042%20L%20457%201024%20L%20461%201016%20L%20464%201013%20L%20468%201011%20L%20489%20994%20L%20595%20901%20L%20601%20906%20L%20606%20913%20L%20614%20921%20L%20637%20949%20L%20639%20953%20L%20639%20956%20L%20636%20960%20L%20634%20961%20L%20619%20962%20L%20613%20965%20L%20605%20974%20L%20602%20982%20L%20602%20994%20L%20605%201001%20L%20608%201004%20L%20609%201004%20L%20609%20999%20L%20612%20992%20L%20616%20988%20L%20620%20986%20L%20627%20986%20L%20635%20983%20L%20645%20983%20L%20646%20982%20L%20655%20982%20L%20668%20986%20L%20676%20990%20L%20682%20996%20L%20685%201003%20L%20688%201006%20L%20696%201009%20L%20697%201012%20L%20697%201024%20L%20693%201033%20L%20693%201035%20L%20695%201035%20L%20700%201032%20L%20707%201025%20L%20710%201020%20L%20713%201010%20L%20713%201003%20L%20711%20998%20L%20711%20994%20L%20712%20993%20L%20719%201003%20L%20723%201005%20L%20727%201005%20L%20730%201011%20L%20730%201022%20L%20727%201031%20L%20728%201033%20L%20740%201021%20L%20743%201014%20L%20744%201003%20L%20747%20999%20L%20749%20992%20L%20748%20977%20L%20744%20968%20L%20740%20963%20L%20741%20962%20L%20755%20961%20L%20768%20964%20L%20777%20969%20L%20783%20975%20L%20786%20981%20L%20789%20984%20L%20795%20987%20L%20799%20987%20L%20801%20991%20L%20801%20997%20L%20802%20998%20L%20799%201013%20L%20802%201012%20L%20808%201007%20L%20813%201000%20L%20816%20991%20L%20816%20981%20L%20814%20976%20L%20814%20968%20L%20815%20967%20L%20819%20970%20L%20823%20970%20L%20826%20973%20L%20829%20980%20L%20830%20993%20L%20834%20990%20L%20838%20979%20L%20838%20968%20L%20832%20951%20L%20822%20940%20L%20815%20936%20L%20803%20933%20L%20776%20935%20L%20763%20931%20L%20753%20922%20L%20731%20898%20L%20703%20865%20L%20703%20863%20L%20710%20853%20L%20711%20855%20L%20707%20862%20L%20709%20862%20L%20718%20857%20L%20754%20832%20L%20793%20799%20L%20818%20774%20L%20849%20737%20L%20850%20741%20L%20845%20755%20L%20847%20755%20L%20861%20743%20L%20881%20721%20L%20906%20686%20L%20918%20665%20L%20933%20635%20L%20951%20590%20L%20971%20525%20L%20971%20521%20L%20974%20512%20L%20974%20508%20L%20978%20493%20L%20979%20482%20L%20980%20481%20L%20981%20466%20L%20982%20465%20L%20983%20441%20L%20982%20440%20L%20982%20428%20L%20981%20427%20L%20980%20414%20L%20978%20409%20L%20976%20397%20L%20970%20381%20L%20971%20379%20L%20974%20383%20L%20976%20381%20L%20977%20334%20L%20976%20333%20L%20976%20322%20L%20975%20321%20L%20974%20307%20L%20973%20306%20L%20973%20301%20L%20972%20300%20L%20969%20280%20L%20958%20243%20L%20949%20224%20L%20949%20222%20L%20939%20204%20L%20922%20181%20L%20903%20162%20Z%20M%20625%20888%20L%20656%20874%20L%20658%20874%20L%20665%20870%20L%20725%20930%20L%20728%20934%20L%20728%20940%20L%20723%20943%20L%20714%20944%20L%20707%20950%20L%20683%20951%20L%20673%20947%20L%20659%20932%20Z%20M%20787%20182%20L%20792%20182%20L%20796%20187%20L%20795%20192%20L%20791%20195%20L%20788%20195%20L%20783%20191%20L%20783%20186%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20895%20156%20L%20863%20138%20L%20838%20130%20L%20819%20127%20L%20789%20127%20L%20777%20129%20L%20753%20136%20L%20736%20144%20L%20717%20157%20L%20702%20172%20L%20652%20176%20L%20628%20181%20L%20607%20188%20L%20585%20200%20L%20562%20222%20L%20613%20238%20L%20670%20251%20L%20683%20257%20L%20697%20269%20L%20705%20286%20L%20705%20296%20L%20703%20302%20L%20698%20310%20L%20687%20319%20L%20631%20347%20L%20591%20374%20L%20568%20393%20L%20538%20423%20L%20520%20444%20L%20481%20498%20L%20457%20539%20L%20437%20579%20L%20432%20593%20L%20413%20622%20L%20386%20671%20L%20386%20677%20L%20390%20677%20L%20391%20679%20L%20374%20698%20L%20334%20750%20L%20307%20789%20L%20290%20817%20L%20280%20839%20L%20281%20844%20L%20291%20843%20L%20323%20826%20L%20325%20827%20L%20289%20877%20L%20237%20962%20L%20209%201015%20L%20198%201040%20L%20191%201063%20L%20191%201070%20L%20194%201072%20L%20213%201061%20L%20259%201023%20L%20302%20984%20L%20303%20985%20L%20262%201045%20L%20245%201072%20L%20233%201095%20L%20227%201114%20L%20228%201126%20L%20233%201132%20L%20242%201135%20L%20252%201135%20L%20274%201128%20L%20278%201133%20L%20288%201137%20L%20313%201137%20L%20343%201129%20L%20373%201113%20L%20398%201094%20L%20424%201068%20L%20441%201047%20L%20465%201012%20L%20520%20967%20L%20595%20900%20L%20611%20917%20L%20639%20952%20L%20639%20957%20L%20637%20960%20L%20632%20962%20L%20618%20963%20L%20611%20967%20L%20606%20973%20L%20602%20983%20L%20602%20992%20L%20608%201004%20L%20611%20993%20L%20619%20986%20L%20626%20986%20L%20643%20982%20L%20656%20982%20L%20675%20989%20L%20683%20997%20L%20688%201006%20L%20696%201009%20L%20697%201025%20L%20693%201034%20L%20694%201035%20L%20701%201031%20L%20710%201019%20L%20712%201013%20L%20712%20993%20L%20720%201003%20L%20727%201005%20L%20730%201009%20L%20730%201025%20L%20727%201032%20L%20732%201030%20L%20739%201022%20L%20743%201013%20L%20743%201004%20L%20749%20991%20L%20748%20978%20L%20740%20964%20L%20743%20961%20L%20757%20961%20L%20769%20964%20L%20781%20972%20L%20791%20985%20L%20798%20986%20L%20802%20994%20L%20802%201003%20L%20799%201013%20L%20810%201004%20L%20815%20994%20L%20816%20983%20L%20814%20977%20L%20814%20965%20L%20818%20969%20L%20825%20971%20L%20830%20983%20L%20830%20993%20L%20833%20991%20L%20837%20982%20L%20838%20969%20L%20834%20956%20L%20825%20943%20L%20820%20939%20L%20807%20934%20L%20774%20935%20L%20762%20931%20L%20736%20904%20L%20702%20864%20L%20715%20845%20L%20716%20847%20L%20707%20862%20L%20719%20856%20L%20744%20839%20L%20786%20805%20L%20824%20767%20L%20851%20733%20L%20852%20735%20L%20846%20755%20L%20853%20750%20L%20883%20718%20L%20906%20685%20L%20927%20647%20L%20951%20589%20L%20968%20535%20L%20976%20502%20L%20982%20461%20L%20981%20422%20L%20976%20398%20L%20968%20378%20L%20969%20376%20L%20975%20383%20L%20977%20341%20L%20970%20286%20L%20958%20244%20L%20945%20215%20L%20925%20185%20L%20906%20165%20Z%20M%20625%20888%20L%20665%20870%20L%20728%20933%20L%20729%20940%20L%20726%20943%20L%20715%20944%20L%20708%20950%20L%20692%20952%20L%20678%20950%20L%20672%20947%20L%20662%20936%20Z%20M%20785%20183%20L%20792%20182%20L%20796%20186%20L%20796%20191%20L%20791%20195%20L%20785%20194%20L%20783%20191%20L%20783%20186%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20896%20157%20L%20869%20141%20L%20837%20130%20L%20817%20127%20L%20792%20127%20L%20778%20129%20L%20751%20137%20L%20733%20146%20L%20715%20159%20L%20702%20172%20L%20653%20176%20L%20610%20187%20L%20581%20203%20L%20562%20222%20L%20625%20241%20L%20671%20251%20L%20683%20257%20L%20698%20270%20L%20705%20285%20L%20704%20300%20L%20699%20309%20L%20689%20318%20L%20628%20349%20L%20581%20382%20L%20540%20421%20L%20517%20448%20L%20478%20503%20L%20456%20541%20L%20439%20575%20L%20432%20593%20L%20412%20624%20L%20388%20667%20L%20386%20676%20L%20390%20677%20L%20391%20679%20L%20363%20712%20L%20332%20753%20L%20289%20819%20L%20281%20836%20L%20281%20844%20L%20293%20842%20L%20323%20826%20L%20325%20827%20L%20284%20885%20L%20236%20964%20L%20205%201024%20L%20197%201043%20L%20191%201064%20L%20191%201070%20L%20197%201071%20L%20210%201063%20L%20253%201028%20L%20303%20983%20L%20304%20984%20L%20259%201050%20L%20235%201091%20L%20227%201115%20L%20228%201125%20L%20232%201131%20L%20238%201134%20L%20249%201135%20L%20261%201133%20L%20274%201128%20L%20278%201133%20L%20289%201137%20L%20312%201137%20L%20342%201129%20L%20368%201116%20L%20399%201093%20L%20423%201069%20L%20443%201044%20L%20463%201013%20L%20493%20990%20L%20595%20900%20L%20612%20918%20L%20639%20952%20L%20639%20957%20L%20636%20961%20L%20616%20964%20L%20606%20973%20L%20602%20984%20L%20602%20991%20L%20608%201004%20L%20611%20993%20L%20621%20985%20L%20625%20986%20L%20639%20982%20L%20657%20982%20L%20677%20990%20L%20685%201002%20L%20690%201007%20L%20697%201010%20L%20698%201021%20L%20693%201034%20L%20694%201035%20L%20705%201027%20L%20710%201018%20L%20712%201011%20L%20712%201001%20L%20710%20994%20L%20712%20993%20L%20720%201003%20L%20729%201006%20L%20731%201020%20L%20728%201032%20L%20738%201023%20L%20743%201012%20L%20743%201003%20L%20748%20994%20L%20747%20976%20L%20740%20964%20L%20743%20961%20L%20759%20961%20L%20767%20963%20L%20780%20971%20L%20790%20984%20L%20799%20986%20L%20802%20992%20L%20802%201004%20L%20799%201012%20L%20803%201011%20L%20810%201004%20L%20815%20994%20L%20814%20965%20L%20818%20969%20L%20823%20969%20L%20830%20982%20L%20830%20992%20L%20832%20992%20L%20837%20982%20L%20837%20965%20L%20831%20950%20L%20821%20940%20L%20806%20934%20L%20772%20935%20L%20762%20931%20L%20733%20901%20L%20702%20863%20L%20717%20842%20L%20718%20844%20L%20707%20862%20L%20738%20843%20L%20780%20810%20L%20822%20769%20L%20851%20733%20L%20852%20735%20L%20846%20755%20L%20855%20748%20L%20882%20719%20L%20904%20688%20L%20930%20640%20L%20950%20591%20L%20967%20538%20L%20978%20490%20L%20982%20459%20L%20982%20434%20L%20976%20399%20L%20967%20376%20L%20969%20375%20L%20975%20383%20L%20976%20329%20L%20971%20293%20L%20960%20250%20L%20942%20210%20L%20923%20183%20Z%20M%20625%20888%20L%20665%20870%20L%20729%20934%20L%20729%20940%20L%20726%20943%20L%20716%20944%20L%20708%20950%20L%20695%20952%20L%20677%20950%20L%20666%20941%20Z%20M%20786%20182%20L%20790%20181%20L%20794%20183%20L%20797%20188%20L%20792%20195%20L%20787%20195%20L%20782%20190%20L%20782%20187%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20893%20155%20L%20873%20143%20L%20841%20131%20L%20816%20127%20L%20794%20127%20L%20779%20129%20L%20754%20136%20L%20735%20145%20L%20715%20159%20L%20702%20172%20L%20648%20177%20L%20629%20181%20L%20608%20188%20L%20584%20201%20L%20562%20222%20L%20614%20238%20L%20671%20251%20L%20685%20258%20L%20698%20270%20L%20704%20281%20L%20706%20292%20L%20703%20303%20L%20699%20309%20L%20686%20320%20L%20628%20349%20L%20590%20375%20L%20565%20396%20L%20543%20418%20L%20518%20447%20L%20490%20485%20L%20460%20534%20L%20441%20571%20L%20431%20595%20L%20405%20636%20L%20386%20672%20L%20386%20676%20L%20390%20677%20L%20391%20679%20L%20371%20702%20L%20335%20749%20L%20291%20816%20L%20280%20840%20L%20282%20844%20L%20298%20840%20L%20324%20825%20L%20326%20826%20L%20294%20870%20L%20235%20966%20L%20206%201022%20L%20198%201041%20L%20191%201065%20L%20191%201070%20L%20196%201071%20L%20214%201060%20L%20254%201027%20L%20303%20983%20L%20304%20984%20L%20256%201055%20L%20232%201098%20L%20227%201115%20L%20228%201125%20L%20232%201131%20L%20239%201134%20L%20248%201135%20L%20264%201132%20L%20274%201128%20L%20280%201134%20L%20289%201137%20L%20311%201137%20L%20339%201130%20L%20371%201114%20L%20401%201091%20L%20422%201070%20L%20440%201048%20L%20463%201013%20L%20487%20995%20L%20595%20900%20L%20613%20919%20L%20639%20951%20L%20639%20958%20L%20636%20961%20L%20619%20963%20L%20613%20966%20L%20605%20975%20L%20602%20991%20L%20604%20998%20L%20608%201003%20L%20611%20993%20L%20620%20985%20L%20624%20986%20L%20632%20983%20L%20647%20981%20L%20658%20982%20L%20677%20990%20L%20689%201006%20L%20697%201009%20L%20698%201021%20L%20694%201035%20L%20703%201029%20L%20710%201018%20L%20712%201010%20L%20712%201002%20L%20710%20997%20L%20711%20992%20L%20720%201003%20L%20728%201005%20L%20730%201008%20L%20731%201021%20L%20728%201032%20L%20738%201023%20L%20742%201014%20L%20743%201003%20L%20748%20994%20L%20748%20980%20L%20742%20966%20L%20739%20963%20L%20741%20961%20L%20753%20960%20L%20770%20964%20L%20780%20971%20L%20790%20984%20L%20799%20986%20L%20802%20992%20L%20802%201005%20L%20799%201012%20L%20804%201010%20L%20809%201005%20L%20815%20993%20L%20813%20964%20L%20817%20968%20L%20823%20969%20L%20826%20972%20L%20830%20982%20L%20831%20992%20L%20834%20989%20L%20838%20975%20L%20837%20966%20L%20831%20950%20L%20821%20940%20L%20804%20934%20L%20779%20936%20L%20763%20932%20L%20731%20899%20L%20702%20865%20L%20702%20863%20L%20717%20842%20L%20718%20844%20L%20708%20862%20L%20749%20835%20L%20781%20809%20L%20820%20771%20L%20851%20733%20L%20852%20736%20L%20846%20755%20L%20857%20746%20L%20881%20720%20L%20907%20683%20L%20928%20644%20L%20945%20604%20L%20967%20537%20L%20978%20489%20L%20982%20455%20L%20982%20437%20L%20979%20413%20L%20975%20396%20L%20967%20377%20L%20968%20374%20L%20975%20382%20L%20976%20332%20L%20972%20299%20L%20962%20257%20L%20954%20235%20L%20943%20212%20L%20923%20183%20Z%20M%20624%20888%20L%20666%20870%20L%20729%20934%20L%20729%20940%20L%20726%20943%20L%20716%20944%20L%20706%20951%20L%20684%20952%20L%20677%20950%20L%20665%20940%20Z%20M%20701%20220%20L%20710%20219%20L%20717%20221%20L%20704%20223%20L%20704%20221%20Z%20M%20666%20217%20L%20679%20216%20L%20689%20218%20L%20685%20220%20L%20675%20220%20Z%20M%20658%20210%20L%20661%20208%20L%20686%20205%20L%20706%20206%20L%20725%20209%20L%20733%20217%20L%20741%20220%20L%20738%20221%20L%20696%20214%20L%20661%20212%20Z%20M%20788%20181%20L%20793%20182%20L%20797%20188%20L%20792%20195%20L%20786%20195%20L%20782%20190%20L%20783%20185%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20893%20155%20L%20864%20139%20L%20836%20130%20L%20813%20127%20L%20796%20127%20L%20774%20130%20L%20749%20138%20L%20735%20145%20L%20720%20155%20L%20702%20172%20L%20687%20173%20L%20700%20174%20L%20694%20181%20L%20674%20184%20L%20670%20180%20L%20665%20183%20L%20657%20184%20L%20639%20196%20L%20641%20198%20L%20647%20198%20L%20648%20194%20L%20654%20193%20L%20686%20204%20L%20724%20208%20L%20740%20213%20L%20751%20222%20L%20750%20223%20L%20693%20214%20L%20671%20212%20L%20639%20212%20L%20636%20211%20L%20634%20207%20L%20629%20207%20L%20626%20210%20L%20617%20210%20L%20614%20208%20L%20604%20207%20L%20594%20213%20L%20582%20216%20L%20580%20214%20L%20581%20210%20L%20576%20208%20L%20586%20200%20L%20565%20218%20L%20563%20222%20L%20618%20239%20L%20671%20251%20L%20682%20256%20L%20689%20261%20L%20702%20276%20L%20706%20288%20L%20704%20301%20L%20700%20308%20L%20683%20322%20L%20630%20348%20L%20585%20379%20L%20563%20398%20L%20523%20441%20L%20497%20475%20L%20459%20536%20L%20443%20567%20L%20431%20595%20L%20411%20626%20L%20387%20670%20L%20386%20676%20L%20390%20677%20L%20391%20679%20L%20368%20706%20L%20333%20752%20L%20290%20818%20L%20281%20837%20L%20282%20844%20L%20300%20839%20L%20324%20825%20L%20326%20826%20L%20285%20884%20L%20242%20954%20L%20207%201020%20L%20192%201060%20L%20192%201071%20L%20196%201071%20L%20211%201062%20L%20240%201039%20L%20303%20983%20L%20305%20984%20L%20277%201023%20L%20242%201078%20L%20228%201110%20L%20227%201119%20L%20231%201130%20L%20239%201134%20L%20255%201134%20L%20274%201128%20L%20280%201134%20L%20285%201136%20L%20310%201137%20L%20339%201130%20L%20374%201112%20L%20394%201097%20L%20421%201071%20L%20445%201041%20L%20463%201013%20L%20488%20994%20L%20595%20900%20L%20614%20920%20L%20639%20951%20L%20639%20958%20L%20636%20961%20L%20619%20963%20L%20613%20966%20L%20607%20972%20L%20603%20980%20L%20602%20989%20L%20603%20995%20L%20608%201003%20L%20610%20994%20L%20620%20985%20L%20623%20986%20L%20631%20983%20L%20647%20981%20L%20665%20984%20L%20676%20989%20L%20689%201006%20L%20695%201007%20L%20697%201009%20L%20698%201023%20L%20694%201035%20L%20699%201032%20L%20709%201020%20L%20712%201010%20L%20710%20997%20L%20711%20992%20L%20719%201002%20L%20725%201005%20L%20727%201004%20L%20730%201008%20L%20731%201022%20L%20728%201032%20L%20739%201021%20L%20743%201010%20L%20743%201003%20L%20748%20993%20L%20748%20981%20L%20746%20974%20L%20739%20963%20L%20741%20961%20L%20755%20960%20L%20770%20964%20L%20779%20970%20L%20789%20983%20L%20799%20986%20L%20802%20992%20L%20802%201005%20L%20799%201012%20L%20808%201006%20L%20815%20993%20L%20813%20964%20L%20817%20968%20L%20825%20970%20L%20829%20978%20L%20831%20992%20L%20837%20981%20L%20837%20966%20L%20832%20952%20L%20822%20941%20L%20813%20936%20L%20803%20934%20L%20776%20936%20L%20763%20932%20L%20723%20890%20L%20702%20865%20L%20702%20863%20L%20717%20841%20L%20719%20842%20L%20708%20862%20L%20742%20840%20L%20782%20808%20L%20818%20773%20L%20851%20733%20L%20852%20736%20L%20846%20754%20L%20850%20752%20L%20881%20720%20L%20905%20686%20L%20932%20635%20L%20950%20590%20L%20969%20529%20L%20977%20494%20L%20982%20454%20L%20980%20419%20L%20975%20396%20L%20967%20377%20L%20968%20374%20L%20975%20382%20L%20976%20334%20L%20969%20284%20L%20959%20248%20L%20941%20209%20L%20921%20181%20Z%20M%20624%20888%20L%20666%20870%20L%20729%20934%20L%20729%20941%20L%20724%20944%20L%20716%20944%20L%20707%20951%20L%20683%20952%20L%20673%20948%20L%20659%20933%20Z%20M%20563%20618%20L%20569%20614%20L%20579%20621%20L%20576%20626%20L%20572%20627%20L%20568%20623%20L%20565%20623%20Z%20M%20575%20603%20L%20578%20603%20L%20588%20613%20L%20588%20619%20L%20585%20621%20L%20582%20620%20L%20575%20613%20L%20576%20612%20L%20573%20605%20Z%20M%20748%20398%20L%20752%20412%20L%20752%20432%20L%20748%20444%20L%20732%20470%20L%20716%20484%20L%20698%20493%20L%20685%20494%20L%20682%20491%20L%20707%20445%20L%20685%20473%20L%20667%20492%20L%20647%20508%20L%20632%20517%20L%20619%20519%20L%20615%20517%20L%20615%20513%20L%20643%20470%20L%20603%20514%20L%20589%20526%20L%20569%20538%20L%20558%20540%20L%20554%20539%20L%20552%20535%20L%20577%20498%20L%20549%20528%20L%20526%20546%20L%20508%20554%20L%20498%20555%20L%20495%20552%20L%20501%20541%20L%20482%20555%20L%20471%20558%20L%20464%20558%20L%20461%20560%20L%20460%20559%20L%20461%20555%20L%20469%20547%20L%20473%20537%20L%20491%20512%20L%20511%20497%20L%20582%20434%20L%20617%20408%20L%20632%20399%20L%20659%20386%20L%20677%20380%20L%20695%20377%20L%20712%20377%20L%20725%20380%20L%20739%20388%20Z%20M%20625%20216%20L%20683%20216%20L%20737%20222%20L%20742%20224%20L%20733%20226%20L%20721%20225%20L%20713%20230%20L%20711%20228%20L%20706%20228%20L%20694%20237%20L%20690%20233%20L%20690%20225%20L%20679%20228%20L%20674%20232%20L%20668%20232%20L%20659%20229%20L%20649%20222%20L%20632%20219%20L%20632%20217%20Z%20M%20788%20181%20L%20793%20182%20L%20797%20187%20L%20795%20193%20L%20792%20195%20L%20786%20195%20L%20782%20190%20L%20783%20185%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20607%20972%20L%20603%20981%20L%20603%20995%20L%20608%201003%20L%20610%20994%20L%20616%20987%20L%20620%20985%20L%20627%20985%20L%20635%20982%20L%20655%20981%20L%20676%20989%20L%20683%20996%20L%20689%201006%20L%20695%201007%20L%20697%201009%20L%20698%201024%20L%20694%201034%20L%20699%201032%20L%20706%201025%20L%20712%201010%20L%20710%20994%20L%20709%20997%20L%20706%20994%20L%20700%20994%20L%20694%20997%20L%20672%20976%20L%20658%20974%20L%20647%20967%20L%20642%20974%20L%20638%20974%20L%20636%20972%20L%20636%20961%20L%20629%20963%20L%20631%20972%20L%20625%20977%20L%20620%20977%20L%20613%20967%20L%20614%20966%20Z%20M%20686%20966%20L%20704%20980%20L%20719%201002%20L%20727%201004%20L%20730%201007%20L%20731%201023%20L%20728%201032%20L%20731%201030%20L%20741%201017%20L%20743%201003%20L%20748%20992%20L%20748%20981%20L%20742%20967%20L%20740%20965%20L%20742%20968%20L%20735%20972%20L%20726%20965%20L%20705%20960%20L%20724%20968%20L%20740%20983%20L%20742%20987%20L%20740%20991%20L%20732%20991%20L%20728%20996%20L%20726%20996%20L%20721%20992%20L%20713%20979%20Z%20M%20784%20943%20L%20784%20946%20L%20798%20950%20L%20819%20969%20L%20825%20970%20L%20830%20981%20L%20831%20992%20L%20837%20981%20L%20837%20966%20L%20829%20948%20L%20825%20944%20L%20830%20950%20L%20821%20957%20L%20813%20951%20L%20794%20942%20Z%20M%20659%20933%20L%20662%20937%20L%20658%20942%20L%20658%20945%20L%20663%20947%20L%20666%20945%20L%20667%20946%20L%20668%20944%20L%20670%20946%20Z%20M%20643%20913%20L%20647%20918%20L%20644%20921%20L%20642%20928%20L%20629%20938%20L%20627%20936%20L%20636%20947%20L%20634%20945%20L%20641%20933%20L%20651%20923%20L%20657%20930%20Z%20M%20936%20310%20L%20934%20309%20L%20945%20338%20L%20949%20368%20L%20949%20381%20L%20947%20383%20L%20935%20367%20L%20914%20348%20L%20929%20377%20L%20934%20397%20L%20936%20414%20L%20935%20440%20L%20933%20442%20L%20930%20440%20L%20924%20419%20L%20912%20395%20L%20909%20393%20L%20910%20410%20L%20907%20433%20L%20899%20458%20L%20895%20462%20L%20893%20460%20L%20892%20445%20L%20888%20427%20L%20873%20390%20L%20873%20416%20L%20871%20430%20L%20866%20448%20L%20862%20454%20L%20859%20452%20L%20853%20433%20L%20842%20410%20L%20823%20382%20L%20807%20365%20L%20805%20366%20L%20811%20394%20L%20812%20416%20L%20810%20425%20L%20806%20428%20L%20801%20423%20L%20790%20403%20L%20772%20383%20L%20759%20372%20L%20733%20357%20L%20724%20355%20L%20705%20346%20L%20693%20344%20L%20669%20344%20L%20646%20349%20L%20636%20353%20L%20662%20349%20L%20677%20349%20L%20699%20353%20L%20708%20356%20L%20725%20366%20L%20736%20376%20L%20745%20389%20L%20753%20415%20L%20752%20442%20L%20743%20476%20L%20723%20520%20L%20693%20569%20L%20646%20631%20L%20605%20676%20L%20568%20709%20L%20565%20710%20L%20562%20706%20L%20562%20692%20L%20567%20665%20L%20578%20636%20L%20602%20619%20L%20622%20602%20L%20645%20578%20L%20670%20546%20L%20630%20588%20L%20603%20610%20L%20574%20628%20L%20560%20633%20L%20556%20633%20L%20555%20631%20L%20563%20617%20L%20596%20572%20L%20647%20509%20L%20636%20515%20L%20562%20609%20L%20541%20630%20L%20520%20645%20L%20502%20653%20L%20490%20653%20L%20536%20590%20L%20513%20617%20L%20478%20651%20L%20454%20665%20L%20440%20669%20L%20436%20667%20L%20488%20596%20L%20459%20630%20L%20436%20653%20L%20411%20671%20L%20392%20678%20L%20372%20701%20L%20319%20772%20L%20289%20820%20L%20281%20838%20L%20282%20844%20L%20295%20841%20L%20324%20825%20L%20326%20826%20L%20289%20878%20L%20242%20954%20L%20209%201016%20L%20193%201056%20L%20191%201069%20L%20192%201071%20L%20196%201071%20L%20219%201056%20L%20303%20983%20L%20305%20984%20L%20255%201057%20L%20234%201094%20L%20228%201111%20L%20228%201124%20L%20234%201132%20L%20240%201134%20L%20254%201134%20L%20275%201128%20L%20279%201133%20L%20291%201137%20L%20316%201136%20L%20344%201128%20L%20364%201118%20L%20389%201101%20L%20403%201089%20L%20427%201064%20L%20447%201038%20L%20463%201013%20L%20489%20993%20L%20594%20901%20L%20595%20899%20L%20593%20894%20L%20588%20891%20L%20567%20868%20L%20569%20865%20L%20576%20867%20L%20586%20873%20L%20589%20867%20L%20607%20867%20L%20619%20880%20L%20622%20887%20L%20626%20891%20L%20624%20889%20L%20626%20886%20L%20666%20870%20L%20705%20909%20L%20710%20905%20L%20713%20905%20L%20716%20908%20L%20716%20911%20L%20712%20916%20L%20728%20932%20L%20730%20939%20L%20727%20943%20L%20717%20944%20L%20710%20949%20L%20712%20948%20L%20725%20951%20L%20739%20963%20L%20740%20961%20L%20756%20960%20L%20774%20966%20L%20784%20975%20L%20789%20983%20L%20800%20987%20L%20802%20991%20L%20802%201005%20L%20799%201012%20L%20806%201008%20L%20811%201002%20L%20815%20993%20L%20813%20968%20L%20812%20973%20L%20807%20971%20L%20796%20976%20L%20791%20973%20L%20788%20967%20L%20779%20958%20L%20767%20952%20L%20762%20941%20L%20756%20940%20L%20751%20932%20L%20749%20931%20L%20743%20936%20L%20738%20936%20L%20736%20933%20L%20741%20925%20L%20739%20915%20L%20742%20912%20L%20745%20914%20L%20702%20865%20L%20702%20863%20L%20717%20841%20L%20719%20842%20L%20709%20861%20L%20746%20837%20L%20783%20807%20L%20826%20764%20L%20851%20732%20L%20853%20734%20L%20846%20754%20L%20851%20751%20L%20874%20728%20L%20890%20708%20L%20908%20681%20L%20938%20621%20L%20960%20560%20L%20971%20521%20L%20979%20481%20L%20982%20444%20L%20977%20405%20L%20970%20382%20L%20966%20375%20L%20968%20374%20L%20974%20381%20L%20975%20368%20L%20974%20372%20L%20968%20364%20L%20966%20354%20L%20957%20337%20Z%20M%20247%201077%20L%20251%201085%20L%20246%201088%20L%20245%201091%20L%20240%201092%20L%20239%201085%20L%20241%201081%20Z%20M%20370%20935%20L%20371%20937%20L%20326%20997%20L%20301%201034%20L%20289%201044%20L%20286%201042%20L%20283%201045%20L%20277%201045%20L%20273%201043%20L%20264%201052%20L%20261%201049%20L%20270%201037%20L%20271%201038%20L%20281%201027%20L%20293%201010%20L%20326%20971%20Z%20M%20726%20921%20L%20728%20921%20L%20731%20926%20L%20729%20933%20L%20722%20926%20Z%20M%20729%20897%20L%20734%20902%20L%20732%20906%20L%20726%20902%20L%20726%20899%20Z%20M%20715%20882%20L%20720%20886%20L%20718%20890%20L%20711%20887%20Z%20M%20605%20762%20L%20608%20761%20L%20607%20760%20L%20609%20757%20L%20610%20759%20L%20617%20761%20L%20620%20764%20L%20611%20770%20L%20607%20770%20L%20606%20765%20L%20608%20765%20Z%20M%20611%20754%20L%20617%20750%20L%20620%20751%20L%20621%20749%20L%20625%20749%20L%20628%20752%20L%20628%20756%20L%20623%20761%20Z%20M%20549%20710%20L%20551%20713%20L%20551%20722%20L%20506%20774%20L%20403%20878%20L%20309%20963%20L%20307%20961%20L%20313%20953%20L%20322%20945%20L%20340%20922%20L%20375%20885%20Z%20M%20695%20704%20L%20696%20708%20L%20698%20709%20L%20695%20710%20L%20695%20713%20L%20692%20715%20L%20688%20710%20Z%20M%20704%20694%20L%20706%20695%20L%20706%20698%20L%20710%20698%20L%20713%20703%20L%20708%20708%20L%20707%20714%20L%20705%20716%20L%20701%20716%20L%20697%20708%20L%20699%20706%20L%20697%20705%20L%20701%20701%20L%20704%20705%20L%20706%20704%20L%20706%20700%20L%20702%20697%20Z%20M%20552%20678%20L%20554%20681%20L%20552%20701%20L%20465%20787%20L%20361%20883%20L%20316%20927%20L%20253%20993%20L%20211%201042%20L%20211%201036%20L%20222%201011%20L%20261%20942%20L%20292%20898%20L%20338%20843%20L%20374%20807%20L%20387%20807%20L%20403%20801%20L%20419%20792%20L%20456%20766%20L%20500%20728%20Z%20M%20704%20654%20L%20706%20658%20L%20711%20658%20L%20714%20661%20L%20715%20673%20L%20713%20676%20L%20705%20676%20L%20702%20674%20L%20704%20677%20L%20704%20681%20L%20702%20682%20L%20704%20685%20L%20700%20686%20L%20694%20678%20L%20691%20678%20L%20688%20674%20L%20692%20670%20L%20692%20664%20L%20694%20661%20Z%20M%20565%20642%20L%20558%20663%20L%20545%20677%20L%20494%20726%20L%20443%20767%20L%20401%20792%20L%20392%20795%20L%20387%20794%20L%20405%20766%20L%20455%20707%20L%20388%20767%20L%20355%20794%20L%20304%20827%20L%20299%20826%20L%20302%20817%20L%20316%20795%20L%20360%20739%20L%20398%20700%20L%20425%20677%20L%20428%20679%20L%20443%20679%20L%20461%20673%20L%20476%20664%20L%20493%20666%20L%20517%20657%20L%20542%20641%20L%20546%20643%20Z%20M%20563%20221%20L%20572%20225%20L%20571%20223%20L%20574%20220%20L%20585%20217%20L%20596%20218%20L%20607%20215%20L%20653%20214%20L%20706%20218%20L%20749%20224%20L%20749%20226%20L%20735%20233%20L%20732%20238%20L%20732%20249%20L%20693%20242%20L%20620%20239%20L%20672%20251%20L%20688%20260%20L%20701%20274%20L%20706%20287%20L%20704%20301%20L%20707%20297%20L%20711%20300%20L%20713%20309%20L%20720%20324%20L%20723%20327%20L%20724%20308%20L%20726%20304%20L%20735%20318%20L%20757%20341%20L%20753%20319%20L%20754%20313%20L%20760%20317%20L%20786%20345%20L%20784%20324%20L%20775%20300%20L%20779%20300%20L%20800%20317%20L%20800%20312%20L%20787%20283%20L%20772%20264%20L%20778%20263%20L%20800%20271%20L%20803%20270%20L%20770%20236%20L%20772%20234%20L%20797%20234%20L%20807%20230%20L%20801%20230%20L%20800%20228%20L%20811%20218%20L%20818%20203%20L%20818%20193%20L%20812%20179%20L%20798%20168%20L%20784%20166%20L%20760%20173%20L%20747%20173%20L%20712%20163%20L%20718%20157%20L%20703%20171%20L%20711%20173%20L%20720%20178%20L%20723%20182%20L%20720%20186%20L%20695%20190%20L%20680%20190%20L%20670%20193%20L%20656%20193%20L%20687%20204%20L%20729%20209%20L%20742%20214%20L%20753%20223%20L%20752%20224%20L%20729%20219%20L%20669%20212%20L%20610%20213%20L%20576%20218%20L%20565%20221%20L%20565%20219%20Z%20M%20771%20189%20L%20772%20201%20L%20775%20207%20L%20780%20212%20L%20787%20215%20L%20796%20216%20L%20796%20218%20L%20784%20219%20L%20776%20215%20L%20771%20210%20L%20768%20204%20L%20768%20194%20Z%20M%20788%20181%20L%20793%20182%20L%20797%20187%20L%20796%20192%20L%20790%20196%20L%20786%20195%20L%20782%20191%20L%20782%20186%20Z'/%3e%3c/g%3e%3c/svg%3e`;function Pe({className:e}){return(0,N.jsx)(`span`,{className:`block overflow-hidden rounded-[20.7%] bg-accent ${e??``}`,children:(0,N.jsx)(`img`,{src:Ne,alt:``,"aria-hidden":`true`,className:`h-full w-full`})})}function Fe(){return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(Pe,{className:`h-[22px] w-[22px] shrink-0`}),(0,N.jsx)(`span`,{className:`hidden text-[16px] font-medium tracking-[0.04em] text-ink-50 md:inline`,children:`nightcrow`})]})}function Ie({open:e}){return(0,N.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`h-3.5 w-3.5 shrink-0 transition-transform ${e?`rotate-90`:``}`,children:(0,N.jsx)(`path`,{d:`m9 18 6-6-6-6`})})}function Le({className:e=`h-4 w-4`}){return(0,N.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`shrink-0 ${e}`,children:[(0,N.jsx)(`path`,{d:`M3 6h.01`}),(0,N.jsx)(`path`,{d:`M3 12h.01`}),(0,N.jsx)(`path`,{d:`M3 18h.01`}),(0,N.jsx)(`path`,{d:`M8 6h13`}),(0,N.jsx)(`path`,{d:`M8 12h13`}),(0,N.jsx)(`path`,{d:`M8 18h13`})]})}function Re({className:e=`h-4 w-4`}){return(0,N.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`shrink-0 ${e}`,children:[(0,N.jsx)(`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`}),(0,N.jsx)(`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`}),(0,N.jsx)(`path`,{d:`M10 9H8`}),(0,N.jsx)(`path`,{d:`M16 13H8`}),(0,N.jsx)(`path`,{d:`M16 17H8`})]})}function ze({className:e=`h-4 w-4`}){return(0,N.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`shrink-0 ${e}`,children:[(0,N.jsx)(`path`,{d:`m4 17 6-6-6-6`}),(0,N.jsx)(`path`,{d:`M12 19h8`})]})}function Be({repos:e,currentId:t,onSelect:n,onCloseProject:r,onOpenPicker:i,className:o=``}){let[s,c]=(0,M.useState)(!1),l=a(),u=(0,M.useRef)(null),d=e.find(e=>e.id===t);return(0,M.useEffect)(()=>{if(!s)return;let e=e=>{e.key===`Escape`&&(c(!1),u.current?.focus())};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[s]),(0,N.jsxs)(`div`,{className:`relative min-w-0 flex-1 ${o}`,children:[(0,N.jsxs)(`button`,{ref:u,onClick:()=>c(e=>!e),"aria-haspopup":`menu`,"aria-expanded":s,title:d?.display_path??`Select a project`,className:`flex min-w-0 max-w-full items-center gap-1 rounded-sm bg-ink-700 py-0.5 pl-2 pr-1 text-ink-50`,children:[(0,N.jsx)(`span`,{className:`truncate`,children:d?.name??`No project`}),(0,N.jsx)(Ie,{open:s})]}),s&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>c(!1)}),(0,N.jsxs)(`div`,{role:`menu`,className:`nc-pop-in origin-top-left absolute left-0 z-50 mt-1 max-h-[70vh] w-56 max-w-[80vw] overflow-y-auto rounded-md border border-ink-700 bg-ink-900 py-1 shadow-lg`,children:[e.length===0&&(0,N.jsx)(`p`,{className:`px-3 py-1.5 text-ink-400`,children:`No projects open.`}),e.map(e=>(0,N.jsxs)(`div`,{className:`flex items-center ${e.id===t?`bg-ink-700 text-ink-50`:`text-ink-200`}`,children:[(0,N.jsx)(`button`,{role:`menuitem`,onClick:()=>{n(e.id),c(!1)},title:e.display_path,className:`min-w-0 flex-1 truncate py-1.5 pl-3 pr-1 text-left hover:text-accent`,children:e.name}),(0,N.jsx)(`button`,{onClick:()=>r(e.id),"aria-label":`close ${e.name}`,...e.id===t?l(`project.close`,`Close project`):{title:`Close project`},className:`mr-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-removed`,children:(0,N.jsx)(_e,{className:`h-3.5 w-3.5`})})]},e.id)),(0,N.jsx)(`div`,{className:`my-1 border-t border-ink-800`}),(0,N.jsxs)(`button`,{role:`menuitem`,onClick:()=>{i(),c(!1)},...l(`project.openDialog`,`Open a project`),className:`flex w-full items-center gap-1 px-3 py-1.5 text-left text-ink-400 hover:text-ink-200`,children:[(0,N.jsx)(ge,{className:`h-3.5 w-3.5`}),`open`]})]})]})]})}function Ve({side:e,repos:t,repo:n,onSelectRepo:r,onCloseRepo:i,onOpenPicker:o,draggingRepo:s,dragOverRepo:c,onRepoDragStart:l,onRepoDragMove:u,onRepoDragEnd:p}){let m=a(),g=we(),_=t.length>1?[`project.previous`,`project.next`]:[],v=e=>e!==null,y=_.map(e=>S(e,g)).filter(v),b=_.map(e=>d(e,g)).filter(v),x=e===`left`;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`nav`,{"aria-keyshortcuts":y.length>0?y.join(` `):void 0,title:b.length>0?`Previous or next project (${b.join(`, `)})`:void 0,className:x?`hidden min-h-0 flex-1 flex-col overflow-y-auto md:flex`:`hidden items-stretch self-stretch overflow-x-auto pl-1 md:flex`,children:t.map(e=>(0,N.jsxs)(`div`,{"data-repo-id":e.id,onPointerDown:t=>l(t,e.id),onPointerMove:u,onPointerUp:p,onPointerCancel:p,onLostPointerCapture:p,"data-active":e.id===n,className:`nc-title-target flex items-center whitespace-nowrap ${x?`min-w-0 border-b border-ink-700`:`border-r border-ink-700`} ${t.length>1?`touch-none`:``} ${s===e.id?`opacity-60`:``} ${c===e.id?`bg-ink-800 ring-1 ring-inset ring-accent`:``} ${e.id===n?x?`bg-ink-900 text-ink-50 shadow-[inset_1px_0_0_0_var(--color-accent)]`:`bg-ink-950 text-ink-50 shadow-[inset_0_-1px_0_0_var(--color-accent)]`:`text-ink-400 hover:bg-ink-850 hover:text-ink-200`}`,title:e.display_path,children:[(0,N.jsx)(`button`,{onClick:()=>{r(e.id)},"aria-label":e.name,className:`self-stretch pl-3 pr-1 text-left ${x?`min-w-0 flex-1 py-2`:``}`,children:(0,N.jsx)(f,{title:e.name,className:x?``:h})}),(0,N.jsx)(`button`,{onClick:t=>{t.stopPropagation(),i(e.id)},"data-tab-close":!0,...e.id===n?m(`project.close`,`Close project`):{title:`Close project`},"aria-label":`close ${e.name}`,className:`mr-1 flex h-5 w-5 items-center justify-center rounded-sm text-ink-400 hover:bg-ink-700 hover:text-removed`,children:(0,N.jsx)(_e,{className:`h-3.5 w-3.5`})})]},e.id))}),(0,N.jsxs)(`button`,{onClick:o,...m(`project.openDialog`,`Open a project`),className:`hidden shrink-0 items-center gap-1 rounded-sm px-2 py-0.5 text-ink-400 hover:text-ink-200 md:inline-flex ${x?`mx-1 my-2 justify-center`:``}`,children:[(0,N.jsx)(ge,{className:`h-3.5 w-3.5`}),`open`]})]})}var He=`nc-settings-title`,Ue=`nc-settings-dialog`,We=`nc-screen-scale`;function Ge({accent:e,next:t,cycle:n,onReloadConfig:r,reloading:i,onShowShortcuts:c}){let[l,u]=(0,M.useState)(!1),d=(0,M.useRef)(null),f=(0,M.useRef)(null),{scale:p,setScale:m}=s(),h=a();(0,M.useLayoutEffect)(()=>{if(!l)return;let e=f.current;if(!e)return;e.querySelector(`[data-initial-focus]`)?.focus();let t=()=>[...e.querySelectorAll(`a[href], button:not(:disabled), select:not(:disabled), input:not(:disabled), [tabindex]:not([tabindex="-1"])`)],n=n=>{if(n.key===`Escape`){n.preventDefault(),u(!1),d.current?.focus();return}if(n.key!==`Tab`)return;let r=t(),i=r[0],a=r.at(-1);!i||!a?(n.preventDefault(),e.focus()):n.shiftKey&&document.activeElement===i?(n.preventDefault(),a.focus()):!n.shiftKey&&document.activeElement===a&&(n.preventDefault(),i.focus())},r=t=>{let n=t.target;n instanceof Node&&!e.contains(n)&&!d.current?.contains(n)&&u(!1)};return document.addEventListener(`keydown`,n),document.addEventListener(`pointerdown`,r),()=>{document.removeEventListener(`keydown`,n),document.removeEventListener(`pointerdown`,r)}},[l]);let g=()=>{u(!1),d.current?.focus(),c()};return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`button`,{ref:d,type:`button`,onClick:()=>u(e=>!e),"aria-label":`Settings`,"aria-haspopup":`dialog`,"aria-expanded":l,"aria-controls":Ue,title:`Settings`,className:`ml-auto flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:bg-ink-700 hover:text-ink-200`,children:(0,N.jsx)(ne,{className:`h-3.5 w-3.5`})}),l&&(0,N.jsxs)(`div`,{ref:f,id:Ue,role:`dialog`,"aria-labelledby":He,tabIndex:-1,className:`nc-pop-in origin-top-right fixed right-2 top-[calc(var(--nc-header-h)+8px)] z-50 flex max-h-[calc(100vh-3.75rem)] w-72 max-w-[calc(100vw-1rem)] flex-col overflow-y-auto rounded-md border border-ink-700 bg-ink-900 shadow-xl focus:outline-none`,style:{maxHeight:`calc(100dvh - 3.75rem)`},children:[(0,N.jsx)(`div`,{className:`border-b border-ink-700 px-3 py-2`,children:(0,N.jsx)(`h2`,{id:He,className:`font-medium text-ink-50`,children:`Settings`})}),(0,N.jsxs)(`section`,{"aria-labelledby":`nc-appearance-title`,className:`px-3 py-2`,children:[(0,N.jsx)(`h3`,{id:`nc-appearance-title`,className:`mb-1 text-xs uppercase tracking-wide text-ink-400`,children:`Appearance`}),(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsx)(`span`,{className:`min-w-0 flex-1 text-ink-200`,children:`Accent colour`}),(0,N.jsxs)(`button`,{type:`button`,"data-initial-focus":!0,onClick:n,...h(`session.cycleAccent`,`Accent: ${e.name} (click for ${t.name})`),"aria-label":`accent colour: ${e.name}, click for ${t.name}`,className:`flex items-center gap-1.5 rounded-sm px-2 py-1 text-ink-200 hover:bg-ink-700`,children:[(0,N.jsx)(`span`,{"aria-hidden":`true`,className:`h-3 w-3 rounded-full bg-accent ring-1 ring-ink-600`}),e.name]})]}),(0,N.jsxs)(`div`,{className:`mt-2 flex items-center gap-2`,children:[(0,N.jsx)(`label`,{htmlFor:We,className:`min-w-0 flex-1 text-ink-200`,children:`Screen scale`}),(0,N.jsxs)(`div`,{className:`relative`,children:[(0,N.jsx)(`select`,{id:We,"aria-label":`Screen scale`,value:p,onChange:e=>m(Number(e.currentTarget.value)),className:`appearance-none rounded-sm border border-ink-700 bg-ink-850 py-1 pl-2 pr-7 text-ink-50 focus:border-accent focus:outline-none`,children:o.map(e=>(0,N.jsxs)(`option`,{value:e,children:[e,`%`]},e))}),(0,N.jsx)(`span`,{className:`pointer-events-none absolute inset-y-0 right-2 flex items-center text-ink-400`,children:(0,N.jsx)(Ie,{open:!0})})]})]})]}),(0,N.jsxs)(`div`,{className:`border-t border-ink-800 px-3 py-2`,children:[(0,N.jsxs)(`button`,{type:`button`,onClick:r,disabled:i,"aria-busy":i,...h(`session.reloadConfig`,`Reload config.toml on the server (does not reload this page)`),"aria-label":`reload the server config`,className:`flex w-full items-center gap-2 rounded-sm py-1.5 text-left text-ink-200 hover:bg-ink-700 disabled:cursor-progress disabled:text-ink-400 disabled:hover:bg-transparent`,children:[(0,N.jsx)(ye,{className:`h-3.5 w-3.5 ${i?`animate-spin`:``}`}),`Reload config.toml`]}),(0,N.jsxs)(`button`,{type:`button`,onClick:g,...h(`help.shortcuts`,`Keyboard shortcuts`),"aria-label":`keyboard shortcuts`,className:`mt-1 flex w-full items-center gap-2 rounded-sm py-1.5 text-left text-ink-200 hover:bg-ink-700`,children:[(0,N.jsx)(pe,{className:`h-3.5 w-3.5`}),`Keyboard shortcuts`]})]})]})]})}function Ke(e){return e===`top`||e===`left`?e:null}function qe(e){return e===`top`?`left`:`top`}function Je({repos:e,repo:t,onSelectRepo:n,onCloseRepo:r,onOpenPicker:i,cloning:a,accent:o,next:s,cycle:c,draggingRepo:l,dragOverRepo:u,onRepoDragStart:d,onRepoDragMove:f,onRepoDragEnd:p,onReloadConfig:m,reloading:h,onShowShortcuts:g,tabStrip:v}){return(0,N.jsxs)(`header`,{className:`flex h-(--nc-header-h) items-center gap-2 border-b border-chrome-line bg-ink-900 px-[12.8px]`,children:[(0,N.jsx)(`div`,{className:`flex shrink-0 items-center gap-2`,children:(0,N.jsx)(Fe,{})}),(0,N.jsx)(Be,{className:`md:hidden`,repos:e,currentId:t,onSelect:n,onCloseProject:r,onOpenPicker:i}),v.side===`top`&&(0,N.jsx)(Ve,{side:`top`,repos:e,repo:t,onSelectRepo:n,onCloseRepo:r,onOpenPicker:i,draggingRepo:l,dragOverRepo:u,onRepoDragStart:d,onRepoDragMove:f,onRepoDragEnd:p}),a&&(0,N.jsxs)(`span`,{role:`status`,title:`A clone is running on the server`,className:`flex shrink-0 items-center gap-1.5 px-2 py-0.5 text-ink-400`,children:[(0,N.jsx)(`span`,{"aria-hidden":`true`,className:`h-1.5 w-1.5 animate-pulse rounded-full bg-accent`}),`Cloning…`]}),(0,N.jsx)(Ge,{accent:o,next:s,cycle:c,onReloadConfig:m,reloading:h,onShowShortcuts:g}),(0,N.jsx)(`button`,{onClick:v.toggle,title:`Project tabs ${v.side===`top`?`across the top`:`down the left`} (click to move them ${qe(v.side)})`,"aria-label":`project tabs: ${v.side}, click for ${qe(v.side)}`,"aria-pressed":v.side===`left`,className:`ml-1 hidden h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:bg-ink-700 hover:text-ink-200 md:flex`,children:(0,N.jsx)(_,{side:v.side})}),(0,N.jsx)(`a`,{href:`/logout`,title:`Sign out`,"aria-label":`sign out`,className:`ml-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:bg-ink-700 hover:text-ink-200`,children:(0,N.jsx)(oe,{className:`h-3.5 w-3.5`})})]})}var Ye=[`w-3/5`,`w-2/5`,`w-4/5`,`w-1/2`,`w-3/4`,`w-1/3`,`w-2/3`];function Xe({className:e=``}){return(0,N.jsx)(`span`,{"aria-hidden":`true`,className:`nc-skeleton block h-2.5 rounded-xs ${e}`})}function Ze({rows:e=6,as:t=`div`,className:n=``}){let r=t;return(0,N.jsx)(N.Fragment,{children:Array.from({length:e},(e,t)=>(0,N.jsxs)(r,{"aria-hidden":`true`,className:`flex items-center gap-2 px-3 py-1.5 ${n}`,children:[(0,N.jsx)(Xe,{className:`w-3 shrink-0`}),(0,N.jsx)(Xe,{className:Ye[t%Ye.length]})]},t))})}function Qe(){return(0,N.jsxs)(`div`,{"aria-busy":`true`,"aria-label":`Loading`,className:`flex h-full flex-col`,children:[(0,N.jsxs)(`div`,{className:`flex h-[var(--nc-header-h)] shrink-0 items-center gap-3 border-b border-chrome-line bg-ink-900 px-3`,children:[(0,N.jsx)(Xe,{className:`h-6 w-6 rounded-sm`}),(0,N.jsx)(Xe,{className:`w-24`}),(0,N.jsx)(Xe,{className:`ml-auto w-5`})]}),(0,N.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 md:grid-cols-[18rem_minmax(0,1fr)]`,children:[(0,N.jsx)(`div`,{className:`border-chrome-line py-2 md:border-r`,children:(0,N.jsx)(Ze,{rows:10})}),(0,N.jsx)(`div`,{className:`hidden py-2 md:block`,children:(0,N.jsx)(Ze,{rows:14})})]})]})}function $e({onSuccess:e}){let[t,n]=(0,M.useState)(``),[r,i]=(0,M.useState)(null),[a,o]=(0,M.useState)(!1);return(0,N.jsx)(`div`,{className:`flex h-full items-center justify-center p-6`,children:(0,N.jsxs)(`form`,{onSubmit:async n=>{n.preventDefault(),o(!0),i(null);try{await j.login(t),e()}catch(e){i(e instanceof Error?e.message:`login failed`)}finally{o(!1)}},className:`w-[17rem] max-w-[86vw]`,children:[(0,N.jsx)(Pe,{className:`mx-auto mb-3 block h-10 w-10`}),(0,N.jsx)(`h1`,{className:`text-center text-lg font-medium tracking-wide text-ink-50`,children:`nightcrow`}),(0,N.jsx)(`p`,{className:`mt-1 mb-5 text-center text-caption text-ink-400 uppercase`,children:`web viewer`}),r&&(0,N.jsx)(`p`,{className:`mb-2.5 text-center text-removed`,children:r}),(0,N.jsx)(`input`,{type:`password`,autoFocus:!0,value:t,onChange:e=>n(e.target.value),placeholder:`password`,className:`mb-2 w-full rounded-sm border border-ink-700 bg-ink-900 px-2.5 py-1.5 outline-none placeholder:text-ink-400 focus:border-accent focus:ring-[3px] focus:ring-accent/15`}),(0,N.jsx)(`button`,{"aria-busy":a,type:`submit`,disabled:a,className:`w-full rounded-sm bg-ink-50 py-1.5 font-semibold text-ink-950 hover:bg-white disabled:opacity-50`,children:(0,N.jsx)(Te,{busy:a,children:`Sign in`})})]})})}var et=`nightcrow.sidebarWidth`,tt=.5;function nt(e){return Math.min(Math.max(Math.round(e),280),720)}function rt(e){let t=720;try{t=Math.min(t,Math.round(window.innerWidth*tt))}catch{}return Math.min(Math.max(Math.round(e),280),Math.max(t,280))}function it(){try{let e=Number(localStorage.getItem(et));return Number.isFinite(e)&&e>0?nt(e):460}catch{return 460}}function at(e){try{localStorage.setItem(et,String(e))}catch{}}function ot(){let[e,t]=(0,M.useState)(it),n=(0,M.useCallback)(e=>{let n=rt(e);t(n),at(n)},[]);return{width:e,resize:n,commit:n,reset:(0,M.useCallback)(()=>{let e=nt(460);t(e),at(e)},[])}}var st=`[data-terminal-panel]`,ct=`dialog[open], [role="dialog"], [aria-modal="true"]`,lt=`input, textarea, select, [contenteditable], [role="textbox"], [role="searchbox"], [role="combobox"]`,ut=`data-focus-region`;function dt(e){return{"data-focus-region":e,tabIndex:-1}}function ft(e){if(!(e instanceof Element)||e.closest(`[data-terminal-panel]`))return null;let t=e.closest(lt)??e;return{tagName:t.tagName,isContentEditable:gt(t),role:t.getAttribute(`role`),type:_t(t),inDialog:e.closest(ct)!==null}}function pt(e=document){return mt(e)===`terminal`}function mt(e=document){let t=e.activeElement;if(!t)return null;if(t.closest(`[data-terminal-panel]`))return`terminal`;let n=t.closest(`[${ut}]`)?.getAttribute(ut);return n===`list`||n===`content`?n:null}function ht(e,t=document){let n=t.querySelector(`[${ut}="${e}"]`);if(!n)return!1;let r=Ce(t.activeElement,t.querySelector(st));return re(r)?(n.focus(),!0):!1}function gt(e){let t=e.getAttribute(`contenteditable`);return t===null?e.isContentEditable===!0:t!==`false`}function _t(e){return e.tagName===`INPUT`?e.type?.toLowerCase()??null:null}function vt(){let e=new Map;return{start(t){let n=(e.get(t)??0)+1;return e.set(t,n),n},isCurrent(t,n){return e.get(t)===n}}}var yt={children:{},expanded:new Set};function bt(e,t,n){return{...e,children:{...e.children,[t]:n}}}function xt(e,t){let n=new Set(e);return n.delete(t)||n.add(t),n}function St(e,t){return{...e,expanded:xt(e.expanded,t)}}function Ct(e,t){let n=new Set(e.expanded);return t.forEach(e=>n.add(e)),{...e,expanded:n}}function wt(e){let t=[],n=``;for(let r of e.split(`/`))n=n?`${n}/${r}`:r,t.push(n);return t}var Tt=180,Et={items:[],truncated:!1};function Dt({repo:e,authed:t,tab:n,filter:r,filterOpen:i,handle:a}){let[o,s]=(0,M.useState)(yt),[c,l]=(0,M.useState)(Et),[u,d]=(0,M.useState)(!1),[f]=(0,M.useState)(vt);(0,M.useEffect)(()=>{if(!e||!t||n!==`tree`||!i||!r){l(Et),d(!1);return}d(!0);let o=!0,s=setTimeout(()=>{j.treeSearch(e,r).then(e=>{o&&l({items:e.matches,truncated:e.truncated})}).catch(e=>{o&&a(e)}).finally(()=>{o&&d(!1)})},Tt);return()=>{o=!1,clearTimeout(s)}},[e,t,n,r,i,a]);let p=(0,M.useCallback)((t,n)=>{if(!e)return;let r=f.start(t);j.tree(e,t).then(e=>{f.isCurrent(t,r)&&s(n=>bt(n,t,e.entries))}).catch(e=>{if(!f.isCurrent(t,r)||n?.restoring)return k(e)?a(e):void 0;a(e)})},[e,a,f]);(0,M.useEffect)(()=>{e&&t&&n===`tree`&&p(``)},[e,t,n,p]);let m=(0,M.useCallback)(e=>{let t=!o.expanded.has(e);s(t=>St(t,e)),t&&!(e in o.children)&&p(e)},[o,p]),h=(0,M.useCallback)(e=>{s(t=>({...t,expanded:new Set(e)})),e.forEach(e=>{e in o.children||p(e,{restoring:!0})})},[o,p]),g=(0,M.useCallback)(e=>{let t=wt(e);s(e=>Ct(e,t)),t.forEach(e=>{e in o.children||p(e)})},[o,p]);return{treeChildren:o.children,treeExpanded:o.expanded,treeMatches:c.items,treeTruncated:c.truncated,treeSearchLoading:u,loadTreeChildren:p,toggleTreeDir:m,revealTreeDir:g,seedTreeExpanded:h}}function Ot(e,t){let n=[],r=(i,a)=>{for(let o of e[i]??[]){let e=i?`${i}/${o.name}`:o.name;n.push({path:e,name:o.name,is_dir:o.is_dir,depth:a}),o.is_dir&&t.has(e)&&r(e,a+1)}};return r(``,0),n}var kt=[`status`,`log`,`tree`],At={status:`Show the working-tree status`,log:`Show the commit log`,tree:`Show the file tree`};function jt(e){return e===`log`?`view.toggleLog`:e===`tree`?`view.toggleTree`:null}function Mt({tab:e,onChoose:t,filterOpen:n,onToggleFilter:r}){let i=a();return(0,N.jsxs)(`div`,{className:`flex shrink-0 items-stretch border-b border-chrome-line px-2`,children:[kt.map(n=>{let r=jt(n);return(0,N.jsx)(`button`,{onClick:()=>t(n),"aria-current":n===e?`page`:void 0,...r&&n!==e?i(r,At[n]):{title:At[n]},className:`px-2 py-1.5 ${n===e?`text-ink-50 shadow-[inset_0_-1px_0_0_var(--color-accent)]`:`text-ink-400 hover:text-ink-200`}`,children:n},n)}),(0,N.jsx)(`button`,{onClick:r,"aria-pressed":n,title:n?`Hide the filter`:`Filter the list`,"aria-label":n?`Hide the filter`:`Filter the list`,className:`my-1 ml-auto flex shrink-0 items-center rounded-sm px-1.5 hover:text-accent ${n?`text-ink-50`:`text-ink-400`}`,children:(0,N.jsx)(de,{})})]})}function Nt({path:e,from:t,className:n}){return(0,N.jsx)(`span`,{className:`whitespace-nowrap ${n??``}`,title:t?`${t} → ${e}`:e,children:t?`${t} → ${e}`:e})}var Pt=1e3;function Ft(e,t){return e===void 0||e<=0?0:e-t}function It(e,t,n){let r=Ft(t,n);return e===null||Math.abs(r-e)>=1e3?r:e}function Lt(e,t,n){if(e===void 0)return`cool`;let r=Math.max(0,t-e);return r>=n?`cool`:r<5e3?`fresh`:`warm`}function Rt(e,t,n){return e.some(e=>Lt(e,t,n)!==`cool`)}var zt={fresh:`text-accent font-bold`,warm:`text-accent`,cool:``};function Bt(e,t,n){let[r,i]=(0,M.useState)(()=>Date.now()+n);return(0,M.useEffect)(()=>{if(t<=0||!e)return;let r=e.map(e=>e.mtime),a=Date.now()+n;if(i(a),!Rt(r,a,t))return;let o=setInterval(()=>{let e=Date.now()+n;i(e),Rt(r,e,t)||clearInterval(o)},Pt);return()=>clearInterval(o)},[e,t,n]),r}function Vt(e){return e.startsWith(`not a git repository`)?`Not a git repository. Run git init here to track changes.`:`Status unavailable: ${e}`}function Ht(e){let t=Math.max(0,Math.floor(Date.now()/1e3-e));return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:t<2592e3?`${Math.floor(t/86400)}d`:t<31536e3?`${Math.floor(t/2592e3)}mo`:`${Math.floor(t/31536e3)}y`}function Ut(e){return e===`+`?`bg-added/10`:e===`-`?`bg-removed/10`:``}function Wt(e){return e===`?`?`text-ink-400`:e===`D`?`text-removed`:e===`A`?`text-added`:`text-accent`}function Gt({status:e,files:t,now:n,hotWindowMs:r,openDiff:i}){return e===null?(0,N.jsx)(Ze,{as:`li`,rows:8}):e.unavailable===void 0?(0,N.jsxs)(N.Fragment,{children:[t.map(e=>(0,N.jsx)(`li`,{children:(0,N.jsxs)(`button`,{onClick:()=>i(e.path),className:`flex w-max min-w-full gap-2 px-3 py-0.5 text-left hover:bg-ink-850`,children:[(0,N.jsxs)(`span`,{className:`shrink-0`,children:[(0,N.jsx)(`span`,{className:Wt(e.index),children:e.index===` `?` `:e.index}),(0,N.jsx)(`span`,{className:Wt(e.worktree),children:e.worktree===` `?` `:e.worktree})]}),(0,N.jsx)(Nt,{path:e.path,from:e.old_path,className:zt[Lt(e.mtime,n,r)]})]})},e.path)),e.truncated&&(0,N.jsxs)(`li`,{className:`px-3 py-1 text-accent`,children:[`Showing the first `,e.files.length,` changed files.`]})]}):(0,N.jsx)(`li`,{className:`nc-fade-in px-3 py-1 text-ink-400`,children:Vt(e.unavailable)})}var Kt={merge:`MERGING`,rebase:`REBASING`,"cherry-pick":`CHERRY-PICKING`,revert:`REVERTING`,bisect:`BISECTING`,am:`APPLYING`};function qt(e){let t=e?.operation,n=t?t.step!==void 0&&t.total!==void 0?`${Kt[t.kind]} ${t.step}/${t.total}`:Kt[t.kind]:null,r=e?.conflicts??0,i=r===0?null:r===1?`1 conflict`:`${r} conflicts`;return n&&i?`${n} · ${i}`:n??i}function Jt(e){return e.kind===`head`&&e.name!==`HEAD`?`HEAD → ${e.name}`:e.name}function Yt(e){switch(e){case`head`:return`border-accent text-accent font-medium`;case`local`:return`border-added/60 text-added`;case`tag`:return`border-ink-600 text-ink-200`;case`remote`:return`border-ink-700 text-ink-400`}}function Xt({visibleCommits:e,decorations:t,commits:n,commitDrillDown:r,visibleCommitFiles:i,logDone:a,logStalled:o,logPagingPaused:s,setLogStalled:c,logSentinelRef:l,openCommitFiles:u,openCommit:d,openCommitFileDiff:f,setCommitDrillDown:p,setPaneEmpty:m,bumpPaneRequest:h}){return(0,N.jsxs)(N.Fragment,{children:[!r&&e.map(e=>{let n=t.divergenceOf(e.oid);return(0,N.jsx)(`li`,{children:(0,N.jsxs)(`button`,{onClick:()=>void u(e),title:`${e.author} · ${e.summary}`,className:`flex w-max min-w-full items-baseline gap-2 px-3 py-0.5 text-left hover:bg-ink-850`,children:[(0,N.jsx)(`span`,{className:`w-2 shrink-0 ${n===`behind`?`text-accent`:`text-added`}`,title:n===`ahead`?`Not on the upstream yet`:n===`behind`?`On the upstream, not here yet`:void 0,children:n===`ahead`?`↑`:n===`behind`?`↓`:``}),(0,N.jsx)(`span`,{className:`shrink-0 text-accent`,children:e.short_id}),(0,N.jsx)(`span`,{className:`w-10 shrink-0 text-right text-ink-400`,children:Ht(e.time)}),(0,N.jsx)(`span`,{className:`max-w-[6rem] shrink-0 truncate text-ink-400`,children:e.author}),t.refsOf(e.oid)?.map(e=>(0,N.jsx)(`span`,{className:`shrink-0 self-center rounded-sm border px-1 text-2xs ${Yt(e.kind)}`,children:Jt(e)},`${e.kind}:${e.name}`)),(0,N.jsx)(`span`,{className:`whitespace-nowrap ${e.merge?`text-ink-400`:``}`,children:e.summary})]})},e.oid)}),!r&&t.truncated&&(0,N.jsx)(`li`,{className:`px-3 py-1 text-2xs text-ink-400`,children:`Too many refs to mark them all — some branch, tag or upstream marks are not shown.`}),!r&&!a&&!o&&!s&&(0,N.jsxs)(`li`,{ref:l,className:`flex flex-col gap-2 px-3 py-1.5`,"aria-hidden":`true`,children:[(0,N.jsx)(Xe,{className:`w-3/5`}),(0,N.jsx)(Xe,{className:`w-2/5`}),(0,N.jsx)(Xe,{className:`w-1/2`})]}),!r&&!a&&!o&&s&&(0,N.jsxs)(`li`,{className:`px-3 py-1 text-ink-400`,children:[`filtering `,n.length,` loaded commits — clear the filter to load more`]}),!r&&o&&(0,N.jsx)(`li`,{className:`px-3 py-1`,children:(0,N.jsx)(`button`,{onClick:()=>c(!1),className:`text-ink-400 hover:text-accent`,children:`could not load more — retry`})}),r&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`li`,{className:`sticky top-0 z-10 flex w-max min-w-full items-center gap-1 bg-ink-900 px-2 py-1 text-ink-400`,children:[(0,N.jsx)(`button`,{onClick:()=>{h(),p(null),m()},className:`rounded-sm px-1 hover:text-accent`,title:`Back to commit log`,children:`< log`}),(0,N.jsx)(`span`,{className:`text-ink-600`,children:`·`}),(0,N.jsx)(`span`,{className:`shrink-0 text-accent`,children:r.commit.short_id}),(0,N.jsx)(`button`,{onClick:()=>d(r.commit.oid),className:`rounded-sm px-1 hover:text-accent`,title:`Show the complete commit diff`,children:`all changes`})]}),i.map(e=>(0,N.jsx)(`li`,{children:(0,N.jsxs)(`button`,{onClick:()=>f(r.commit.oid,e.path),className:`flex w-max min-w-full gap-2 px-3 py-0.5 text-left hover:bg-ink-850`,children:[(0,N.jsx)(`span`,{className:Wt(e.index),children:e.index}),(0,N.jsx)(Nt,{path:e.path,from:e.old_path})]})},e.path)),r.files.length===0&&(0,N.jsx)(`li`,{className:`px-3 py-2 text-ink-400`,children:`No changed files.`}),r.files.length>0&&i.length===0&&(0,N.jsx)(`li`,{className:`px-3 py-2 text-ink-400`,children:`No matching files.`}),r.truncated&&(0,N.jsxs)(`li`,{className:`px-3 py-1 text-accent`,children:[`Showing the first `,r.files.length,` files.`]})]})]})}function P({treeSearching:e,treeMatches:t,treeTruncated:n,treeSearchLoading:r,treeRows:i,treeExpanded:a,openFile:o,revealTreeDir:s,toggleTreeDir:c}){return e?(0,N.jsxs)(N.Fragment,{children:[t.map(e=>(0,N.jsx)(`li`,{children:(0,N.jsx)(`button`,{onClick:()=>{e.is_dir?s(e.path):o(e.path)},title:e.path,className:`w-max min-w-full whitespace-nowrap px-3 py-0.5 text-left hover:bg-ink-850`,children:e.is_dir?(0,N.jsxs)(`span`,{className:`text-accent`,children:[e.path,`/`]}):e.path})},e.path)),t.length===0&&(0,N.jsx)(`li`,{className:`px-3 py-0.5 text-ink-400`,children:r?`searching…`:`no matches`}),n&&(0,N.jsxs)(`li`,{className:`px-3 py-0.5 text-ink-400`,children:[`showing the first `,t.length,` matches`]})]}):(0,N.jsx)(N.Fragment,{children:i.map(e=>(0,N.jsx)(`li`,{children:(0,N.jsxs)(`button`,{onClick:()=>e.is_dir?c(e.path):o(e.path),title:e.path,style:{paddingLeft:`${e.depth*.75+.5}rem`},className:`flex w-max min-w-full items-center gap-1 py-0.5 pr-3 text-left hover:bg-ink-850`,children:[e.is_dir?(0,N.jsx)(Ie,{open:a.has(e.path)}):(0,N.jsx)(`span`,{className:`h-3.5 w-3.5 shrink-0`}),(0,N.jsx)(`span`,{className:`whitespace-nowrap ${e.is_dir?`text-accent`:``}`,children:e.is_dir?`${e.name}/`:e.name})]})},e.path))})}function Zt(e){let{tab:t,chooseTab:n,filter:r,setFilter:i,filterOpen:a,setFilterOpen:o,status:s,files:c,now:l,hotWindowMs:u,openDiff:d,openFile:f,openCommit:p,openCommitFileDiff:m,openCommitFiles:h,repo:g,authed:_,handle:v,sidebarRef:y,draggingSidebar:b,onSidebarDragStart:x,onSidebarDragMove:S,onSidebarDragEnd:C,onSidebarDragCancel:w,filesMax:T,bumpPaneRequest:ee,commits:te,logDone:E,logStalled:ne,setLogStalled:re,commitDrillDown:ie,setCommitDrillDown:ae,logSentinelRef:oe,visibleCommits:se,decorations:ce,logPagingPaused:le,visibleCommitFiles:ue,mobileView:de,restoreTree:fe,restoreKnown:pe,onTreeExpanded:me,clearPane:he,touched:ge}=e,_e=Dt({repo:g,authed:_,tab:t,filter:r,filterOpen:a,handle:v}),ve=t===`tree`&&a&&r!==``,ye=Ot(_e.treeChildren,_e.treeExpanded),{seedTreeExpanded:be}=_e,xe=(0,M.useRef)(!1);(0,M.useEffect)(()=>{xe.current||pe&&!ge&&t===`tree`&&(xe.current=!0,fe.length!==0&&be(fe))},[t,pe,ge,fe,be]);let Se=e=>{me([...xt(_e.treeExpanded,e)]),_e.toggleTreeDir(e)},D=e=>{let t=new Set(_e.treeExpanded);wt(e).forEach(e=>t.add(e)),me([...t]),_e.revealTreeDir(e)},O=()=>{a&&i(``),o(e=>!e)};return(0,N.jsxs)(`section`,{ref:y,...dt(`list`),className:`nc-fade-in relative min-h-0 flex-col overflow-hidden ${de===`files`?`flex`:`hidden md:flex`} ${T?`md:flex`:`border-chrome-line md:border-r`}`,children:[!T&&(0,N.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize the file sidebar (double-click to reset)`,title:`Drag to resize · double-click to reset`,onPointerDown:x,onPointerMove:S,onPointerUp:C,onPointerCancel:w,onLostPointerCapture:C,className:`absolute -right-px top-0 z-20 hidden h-full w-1.5 cursor-col-resize touch-none md:block ${b?`bg-accent`:`hover:bg-accent`}`}),(0,N.jsx)(Mt,{tab:t,onChoose:n,filterOpen:a,onToggleFilter:O}),a&&(0,N.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),placeholder:`filter…`,autoFocus:!0,className:`mx-2 mb-1 shrink-0 rounded-sm bg-ink-850 px-2 py-1 outline-none placeholder:text-ink-400 focus:ring-1 focus:ring-accent`}),(0,N.jsxs)(`ul`,{className:`nc-content min-h-0 flex-1 overflow-auto`,children:[t===`status`&&(0,N.jsx)(Gt,{status:s,files:c,now:l,hotWindowMs:u,openDiff:d}),t===`log`&&(0,N.jsx)(Xt,{visibleCommits:se,decorations:ce,commits:te,commitDrillDown:ie,visibleCommitFiles:ue,logDone:E,logStalled:ne,logPagingPaused:le,setLogStalled:re,logSentinelRef:oe,openCommitFiles:h,openCommit:p,openCommitFileDiff:m,setCommitDrillDown:ae,setPaneEmpty:he,bumpPaneRequest:ee}),t===`tree`&&(0,N.jsx)(P,{treeSearching:ve,treeMatches:_e.treeMatches,treeTruncated:_e.treeTruncated,treeSearchLoading:_e.treeSearchLoading,treeRows:ye,treeExpanded:_e.treeExpanded,openFile:f,revealTreeDir:D,toggleTreeDir:Se})]})]})}function Qt(e){let t=[],n=[],r=[],i=()=>{let e=Math.max(n.length,r.length);for(let i=0;i{t(e=>e===`split`?`unified`:`split`)},[])}}var en=[`.md`,`.markdown`],tn=[`.html`,`.htm`];function nn(e){let t=e.toLowerCase();return en.some(e=>t.endsWith(e))}function rn(e){let t=e.toLowerCase();return tn.some(e=>t.endsWith(e))}function an(e){return nn(e)||rn(e)}function on(e){return e.map(e=>e.map(e=>e.t).join(``)).join(` -`)}function sn(e,t=0){if(new Set(e.hunks.map(t=>t.file_path??e.path)).size>1)return null;for(let n of e.hunks.slice(Math.max(0,t)))for(let e of n.lines)if(e.new_lineno!==void 0)return e.new_lineno;return null}function cn(e){return Math.max(0,e-1-2)}function ln(e,t){return t<=0?null:Math.min(e,t)}function un(e,t){let n=0;return e.forEach((e,r)=>{e<=t&&(n=r)}),n}var dn=600;function fn(e){let[t,n]=(0,M.useState)({scrollTop:0,height:dn}),r=(0,M.useCallback)(()=>{let t=e.current;if(!t)return;let r={scrollTop:t.scrollTop,height:t.clientHeight||dn};n(e=>e.scrollTop===r.scrollTop&&e.height===r.height?e:r)},[e]);return(0,M.useLayoutEffect)(()=>{r();let t=e.current;if(!t||typeof ResizeObserver>`u`)return;let n=new ResizeObserver(r);return n.observe(t),()=>n.disconnect()},[e,r]),{viewport:t,refresh:r}}function pn(e,t,n,r=20,i=12){let a=Math.max(1,Math.ceil(n/r)),o=Math.min(Math.floor(Math.max(0,t)/r),Math.max(0,e-a)),s=o+a,c=Math.max(0,Math.min(e,o-i)),l=Math.max(c,Math.min(e,s+i));return{start:c,end:l,before:c*r,after:(e-l)*r}}function mn(e){return Math.max(0,e-1)*20}function hn(e){return e.kind===`empty`||!e.source?null:{want:e.kind===`diff`?`file`:`diff`,source:e.source}}function gn(e){return e.index!==`D`&&e.worktree!==`D`}function _n(e){return e.hunks.some(e=>e.lines.some(e=>e.old_lineno!==void 0||e.new_lineno!==void 0))}function vn(e){return e.kind===`workdir`?`workdir:${e.path}`:`commit:${e.oid}:${e.path}`}function yn({pane:e,previewRendered:t,setPreviewRendered:n,filesMax:r,setMaximized:o,onShowOtherFace:s,canEdit:c,editing:u,onToggleEdit:d}){let f=$t(),p=a();return(0,N.jsxs)(`div`,{className:`ml-auto flex shrink-0 items-center gap-1`,children:[hn(e)&&(0,N.jsx)(`button`,{onClick:s,"aria-pressed":e.kind===`file`,title:e.kind===`file`?`Back to the diff`:`Open the whole file at this change`,"aria-label":e.kind===`file`?`Back to the diff`:`Open the whole file at this change`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${e.kind===`file`?`text-accent`:``}`,children:(0,N.jsx)(l,{})}),e.kind===`diff`&&(0,N.jsx)(`button`,{onClick:f.toggle,"aria-pressed":f.layout===`split`,title:f.layout===`split`?`Switch to unified diff`:`Switch to split diff`,"aria-label":f.layout===`split`?`Switch to unified diff`:`Switch to split diff`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${f.layout===`split`?`text-accent`:``}`,children:(0,N.jsx)(g,{})}),c&&(0,N.jsx)(`button`,{onClick:d,"aria-pressed":u,title:u?`Stop editing`:`Edit this page's text`,"aria-label":u?`Stop editing`:`Edit this page's text`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${u?`text-accent`:``}`,children:(0,N.jsx)(Se,{})}),e.kind===`file`&&an(e.value.path)&&!u&&(0,N.jsx)(`button`,{onClick:()=>n(e=>!e),"aria-pressed":t,title:t?`Show raw source`:`Show the rendered page`,"aria-label":t?`Show raw source`:`Show the rendered page`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${t?`text-accent`:``}`,children:(0,N.jsx)(fe,{})}),(0,N.jsx)(`button`,{onClick:()=>o(r?`none`:`files`),"aria-pressed":r,...p(`view.toggleMaximize`,r?`Restore the layout`:`Maximize the file pane`),"aria-label":r?`Restore the layout`:`Maximize the file pane`,className:`hidden shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent md:flex`,children:(0,N.jsx)(i,{maximized:r})})]})}var bn=3;function xn(e){let t=e<1?1:String(Math.floor(e)).length;return Math.max(t,bn)}function Sn(e){let t=0;for(let n of e)for(let e of n.lines)t=Math.max(t,e.old_lineno??0,e.new_lineno??0);return xn(t)}function Cn({nos:e,digits:t,tint:n=``,stickyClass:r=`sticky left-0`}){return(0,N.jsx)(`span`,{className:`${r} shrink-0 select-none bg-ink-950`,children:(0,N.jsx)(`span`,{className:`flex gap-[1ch] px-[1ch] text-ink-400 ${n}`,children:e.map((e,n)=>(0,N.jsx)(`span`,{className:`text-right`,style:{width:`${t}ch`},children:e??``},n))})})}function wn(){let e=`(min-width: 768px)`,[t,n]=(0,M.useState)(()=>window.matchMedia(e).matches);return(0,M.useEffect)(()=>{let t=window.matchMedia(e),r=()=>n(t.matches);return t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[]),t}function Tn(e,t,n){return e.hunks.flatMap((e,r)=>{let i={kind:`header`,hunk:r,text:`${e.file_path?`${e.file_path} `:``}${e.header}`};if(!t)return[i,...e.lines.map(e=>({kind:`unified`,hunk:r,line:e}))];let a=Qt(e.lines);return n?[i,...a.map(({left:e,right:t})=>({kind:`pair`,hunk:r,left:e,right:t}))]:[i,...a.map(({left:e})=>({kind:`side`,hunk:r,line:e,side:`old`,border:!1})),...a.map(({right:e},t)=>({kind:`side`,hunk:r,line:e,side:`new`,border:t===0}))]})}function En({line:e}){return(0,N.jsxs)(`span`,{className:`whitespace-pre pr-3`,children:[(0,N.jsx)(`span`,{className:`select-none text-ink-400`,children:e.kind}),e.spans.map((e,t)=>(0,N.jsx)(`span`,{style:{color:e.c},children:e.t},t))]})}function Dn({line:e,side:t,digits:n,stickyClass:r}){let i=e?Ut(e.kind):`bg-ink-900/40`;return(0,N.jsxs)(`div`,{className:`flex min-w-0 flex-1 ${i}`,children:[(0,N.jsx)(Cn,{nos:[e?t===`old`?e.old_lineno:e.new_lineno:void 0],digits:n,tint:i,stickyClass:r}),e?(0,N.jsx)(En,{line:e}):(0,N.jsx)(`span`,{className:`pr-3`,children:` `})]})}function On({diff:e,split:t,viewport:n}){let r=wn(),i=(0,M.useMemo)(()=>Tn(e,t,r),[e,t,r]),a=Sn(e.hunks),o=pn(i.length,n.scrollTop,n.height);return(0,N.jsxs)(`div`,{className:`min-w-full py-1`,"data-virtual-count":i.length,children:[(0,N.jsx)(`div`,{"aria-hidden":`true`,style:{height:o.before}}),i.slice(o.start,o.end).map((e,t)=>{let n=o.start+t,r={"data-hunk":e.hunk,"data-virtual-row":n};if(e.kind===`header`)return(0,N.jsx)(`div`,{...r,className:`h-5 bg-ink-850 px-3 text-ink-400`,children:e.text},n);if(e.kind===`unified`){let t=Ut(e.line.kind);return(0,N.jsxs)(`div`,{...r,className:`flex h-5 w-max min-w-full ${t}`,children:[(0,N.jsx)(Cn,{nos:[e.line.old_lineno,e.line.new_lineno],digits:a,tint:t}),(0,N.jsx)(En,{line:e.line})]},n)}return e.kind===`pair`?(0,N.jsxs)(`div`,{...r,className:`flex h-5 min-w-full`,children:[(0,N.jsx)(Dn,{line:e.left,side:`old`,digits:a}),(0,N.jsx)(`div`,{className:`flex min-w-0 flex-1 border-l border-ink-800`,children:(0,N.jsx)(Dn,{line:e.right,side:`new`,digits:a,stickyClass:`sticky left-1/2`})})]},n):(0,N.jsx)(`div`,{...r,className:`flex h-5 min-w-full ${e.border?`border-t border-ink-800`:``}`,children:(0,N.jsx)(Dn,{line:e.line,side:e.side,digits:a})},n)}),(0,N.jsx)(`div`,{"aria-hidden":`true`,style:{height:o.after}})]})}function kn({line:e}){return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`span`,{className:`text-ink-400 select-none`,children:e.kind}),e.spans.map((e,t)=>(0,N.jsx)(`span`,{style:{color:e.c},children:e.t},t))]})}function An({line:e,digits:t,side:n}){if(e===null)return(0,N.jsxs)(`div`,{className:`flex bg-ink-900/40`,children:[(0,N.jsx)(Cn,{nos:[void 0],digits:t,tint:`bg-ink-900/40`}),(0,N.jsx)(`span`,{className:`whitespace-pre pr-3`,children:` `})]});let r=Ut(e.kind);return(0,N.jsxs)(`div`,{className:`flex ${r}`,children:[(0,N.jsx)(Cn,{nos:[n===`old`?e.old_lineno:e.new_lineno],digits:t,tint:r}),(0,N.jsx)(`span`,{className:`whitespace-pre pr-3`,children:(0,N.jsx)(kn,{line:e})})]})}function jn({cells:e,digits:t,side:n,border:r}){return(0,N.jsx)(`div`,{className:`min-w-0 flex-none overflow-x-auto md:flex-1 md:basis-1/2 ${r?`border-t border-ink-800 md:border-t-0 md:border-l`:``}`,children:(0,N.jsx)(`div`,{className:`w-max min-w-full`,children:e.map((e,r)=>(0,N.jsx)(An,{line:e,digits:t,side:n},r))})})}function Mn({lines:e,digits:t}){let n=Qt(e);return(0,N.jsxs)(`div`,{className:`flex flex-col md:flex-row`,children:[(0,N.jsx)(jn,{cells:n.map(e=>e.left),digits:t,side:`old`,border:!1}),(0,N.jsx)(jn,{cells:n.map(e=>e.right),digits:t,side:`new`,border:!0})]})}function Nn({diff:e,split:t,viewport:n={scrollTop:0,height:600}}){if(e.hunks.reduce((e,t)=>e+t.lines.length,0)>200)return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(On,{diff:e,split:t,viewport:n}),e.truncated&&(0,N.jsx)(`p`,{className:`p-3 text-accent`,children:`Diff truncated — it exceeded the server's size ceiling.`})]});let r=Sn(e.hunks);return(0,N.jsxs)(`div`,{className:`p-1`,children:[e.hunks.length===0&&(0,N.jsx)(`p`,{className:`p-3 text-ink-400`,children:`No changes.`}),e.hunks.map((e,n)=>{let i=(0,N.jsxs)(`div`,{className:`bg-ink-850 px-3 py-0.5 text-ink-400`,children:[e.file_path?`${e.file_path} `:``,e.header]});return(0,N.jsx)(`div`,{"data-hunk":n,className:`mb-2`,children:t?(0,N.jsxs)(N.Fragment,{children:[i,(0,N.jsx)(Mn,{lines:e.lines,digits:r})]}):(0,N.jsxs)(`div`,{className:`w-max min-w-full`,children:[i,e.lines.map((e,t)=>{let n=Ut(e.kind);return(0,N.jsxs)(`div`,{className:`flex ${n}`,children:[(0,N.jsx)(Cn,{nos:[e.old_lineno,e.new_lineno],digits:r,tint:n}),(0,N.jsx)(`span`,{className:`whitespace-pre pr-3`,children:(0,N.jsx)(kn,{line:e})})]},t)})]})},n)}),e.truncated&&(0,N.jsx)(`p`,{className:`p-3 text-accent`,children:`Diff truncated — it exceeded the server's size ceiling.`})]})}var Pn=[`failed to fetch dynamically imported module`,`error loading dynamically imported module`,`importing a module script failed`,`unable to preload css`];function Fn(e){let t=e instanceof Error?e.message:typeof e==`string`?e:``;if(!t)return!1;let n=t.toLowerCase();return Pn.some(e=>n.includes(e))}var In=class extends M.Component{state={error:null,failed:!1};static getDerivedStateFromError(e){return{error:e,failed:!0}}componentDidCatch(e,t){console.error(`nightcrow: a subtree failed to render`,e,t)}render(){return this.state.failed?(0,N.jsx)(Ln,{chunk:Fn(this.state.error),region:this.props.region,className:this.props.className}):this.props.children}};function Ln({chunk:e,region:t,className:n}){return(0,N.jsxs)(`div`,{role:`alert`,className:`h-full min-h-0 flex-col items-start gap-3 p-4 text-ink-400 ${n??`flex`}`,children:[e?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`p`,{className:`text-accent`,children:`Part of the app could not be loaded.`}),(0,N.jsx)(`p`,{children:`Most likely the server was updated while this tab was open, and reloading picks up the current version. If the reload fails too, the server is not reachable from here. Either way nothing on the server is affected — the session, its repositories, and its terminals are untouched.`})]}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`p`,{className:`text-removed`,children:t?`The ${t} could not be rendered.`:`Something went wrong.`}),(0,N.jsx)(`p`,{children:`The details are in the browser console.`})]}),(0,N.jsx)(`button`,{onClick:()=>window.location.reload(),className:`rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:border-accent hover:text-accent`,children:`Reload`})]})}function Rn({lines:e}){let t=xn(e.length);return(0,N.jsx)(`pre`,{className:`w-max min-w-full py-2 text-ink-200`,children:e.map((e,n)=>(0,N.jsxs)(`div`,{"data-line":n+1,className:`flex`,children:[(0,N.jsx)(Cn,{nos:[n+1],digits:t}),(0,N.jsx)(`span`,{className:`whitespace-pre pr-3`,children:e.length===0?` `:e.map((e,t)=>(0,N.jsx)(`span`,{style:{color:e.c},children:e.t},t))})]},n))})}function zn({lines:e,viewport:t}){let n=xn(e.length),r=pn(e.length,t.scrollTop,t.height);return(0,N.jsxs)(`pre`,{className:`w-max min-w-full`,"data-virtual-count":e.length,children:[(0,N.jsx)(`div`,{"aria-hidden":`true`,style:{height:r.before}}),e.slice(r.start,r.end).map((e,t)=>{let i=r.start+t;return(0,N.jsxs)(`div`,{"data-line":i+1,"data-virtual-row":i,className:`flex h-5 text-ink-200`,children:[(0,N.jsx)(Cn,{nos:[i+1],digits:n}),(0,N.jsx)(`span`,{className:`whitespace-pre pr-3`,children:e.length===0?` `:e.map((e,t)=>(0,N.jsx)(`span`,{style:{color:e.c},children:e.t},t))})]},i)}),(0,N.jsx)(`div`,{"aria-hidden":`true`,style:{height:r.after}})]})}var Bn=`modulepreload`,Vn=function(e,t){return new URL(e,t).href},Hn={},Un=function(e){return e.pathname.endsWith(`.css`)},Wn=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},Gn=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=Vn(t,n);let r=s(t),i=Un(r);return Wn(Hn,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:Bn,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};function Kn(e,t){return`${e??``}\u0000${vn(t)}`}var qn=(0,M.lazy)(()=>Gn(()=>import(`./Markdown-DEJAds14.js`).then(e=>({default:e.MarkdownView})),__vite__mapDeps([0,1,2,3]),import.meta.url)),Jn=(0,M.lazy)(()=>Gn(()=>import(`./Html-DGFy4jGa.js`).then(e=>({default:e.HtmlView})),__vite__mapDeps([4,1]),import.meta.url)),Yn=(0,M.lazy)(()=>Gn(()=>import(`./HtmlEditor-DILpvNkQ.js`).then(e=>({default:e.HtmlEditor})),__vite__mapDeps([5,1,2,6,7]),import.meta.url));function Xn({repo:e,pane:t,loading:n=!1,previewRendered:r,setPreviewRendered:i,filesMax:a,setMaximized:o,showOtherFace:s,status:c,className:l=``}){let u=$t(),[d,f]=(0,M.useState)(!1),p=t.kind===`file`?t.value.path:null,m=t.kind===`file`&&t.source?.kind===`commit`,h=e!==null&&p!==null&&!m&&rn(p),g=(0,M.useRef)(null),{viewport:_,refresh:v}=fn(g),y=t.kind===`file`?t.anchor:void 0,b=(0,M.useRef)(null),x=()=>{let n=g.current;if(!n)return 0;let r=n.getBoundingClientRect().top,i=Array.from(n.querySelectorAll(`[data-hunk]`),e=>({offset:e.getBoundingClientRect().top-r+n.scrollTop,hunk:Number(e.dataset.hunk??0)}));return t.kind===`diff`&&t.source&&(b.current={key:Kn(e,t.source),top:n.scrollTop,left:n.scrollLeft}),i[un(i.map(e=>e.offset),n.scrollTop)]?.hunk??0};return(0,M.useEffect)(()=>{let n=g.current;if(!n)return;if(t.kind===`diff`&&t.source){let r=b.current;r&&r.key===Kn(e,t.source)&&(n.scrollTop=r.top,n.scrollLeft=r.left,b.current=null,v());return}if(y===void 0||t.kind!==`file`)return;let r=ln(y,t.value.lines.length);if(r===null)return;if(t.value.lines.length>200){n.scrollTop=mn(r),v();return}let i=n.querySelector(`[data-line="${r}"]`);i&&(n.scrollTop+=i.getBoundingClientRect().top-n.getBoundingClientRect().top,v())},[t,y,e,v]),(0,M.useEffect)(()=>{f(!1)},[e,p,m]),(0,N.jsxs)(`section`,{...dt(`content`),className:`min-h-0 min-w-0 flex-col ${l}`,children:[(0,N.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 bg-ink-850 px-3 py-0.5 text-ink-400`,children:[t.kind===`file`&&(0,N.jsx)(Nt,{path:t.value.path,className:`min-w-0 truncate`}),(0,N.jsx)(yn,{pane:t,previewRendered:r,setPreviewRendered:i,filesMax:a,setMaximized:o,onShowOtherFace:()=>s(x()),canEdit:h,editing:d&&h,onToggleEdit:()=>f(e=>!e)})]}),(0,N.jsx)(`div`,{ref:g,onScroll:v,className:`nc-content min-h-0 flex-1 overflow-auto`,children:n?(0,N.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Loading`,className:`py-2`,children:(0,N.jsx)(Ze,{rows:12})}):(0,N.jsxs)(N.Fragment,{children:[t.kind===`empty`&&(c===null?(0,N.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Loading`,className:`py-2`,children:(0,N.jsx)(Ze,{rows:12})}):c.unavailable===void 0?(0,N.jsx)(`p`,{className:`nc-fade-in p-4 text-ink-400`,children:`Select a file or commit.`}):(0,N.jsx)(`p`,{className:`nc-fade-in p-4 text-ink-400`,children:Vt(c.unavailable)})),t.kind===`file`&&(0,N.jsxs)(N.Fragment,{children:[d&&h&&e!==null&&p!==null?(0,N.jsx)(In,{region:`preview`,children:(0,N.jsx)(M.Suspense,{fallback:(0,N.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Opening the editor`,className:`py-2`,children:(0,N.jsx)(Ze,{rows:12})}),children:(0,N.jsx)(Yn,{repo:e,path:p})})},`edit:${p}`):an(t.value.path)&&r?(0,N.jsx)(In,{region:`preview`,children:(0,N.jsx)(M.Suspense,{fallback:(0,N.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Rendering`,className:`py-2`,children:(0,N.jsx)(Ze,{rows:12})}),children:rn(t.value.path)&&e!==null?(0,N.jsx)(Jn,{src:j.previewUrl(e,t.value.path,t.source?.kind===`commit`?t.source.oid:void 0)}):(0,N.jsx)(qn,{source:on(t.value.lines)})})},t.value.path):t.value.lines.length>200?(0,N.jsx)(zn,{lines:t.value.lines,viewport:_}):(0,N.jsx)(Rn,{lines:t.value.lines}),t.value.truncated&&(0,N.jsx)(`p`,{className:`p-3 text-accent`,children:`File truncated — it exceeded the server's size ceiling.`})]}),t.kind===`diff`&&(0,N.jsx)(Nn,{diff:t.value,split:u.layout===`split`,viewport:_})]})})]})}var Zn=[{key:`files`,label:`Repo`,icon:Le},{key:`diff`,label:`Content`,icon:Re},{key:`terminal`,label:`Terminal`,icon:ze}];function Qn({view:e,onSelect:t}){return(0,N.jsx)(`nav`,{"aria-label":`Switch view`,className:`flex shrink-0 items-stretch border-t border-chrome-line bg-ink-900 md:hidden`,children:Zn.map(({key:n,label:r,icon:i})=>(0,N.jsxs)(`button`,{onClick:()=>t(n),"aria-current":e===n?`page`:void 0,className:`flex min-h-11 flex-1 flex-col items-center justify-center gap-0.5 py-1 text-xs ${e===n?`text-accent`:`text-ink-400`}`,children:[(0,N.jsx)(i,{className:`h-5 w-5`}),r]},n))})}var $n=(0,M.lazy)(()=>Gn(()=>import(`./Terminal-TFqlge3z.js`).then(e=>({default:e.TerminalPanel})),__vite__mapDeps([8,1,2,9,7]),import.meta.url));function er({repository:{id:e,current:t,status:n},sidebar:r,filePane:i,layout:{sidebarWidth:a,sidebarRef:o,draggingSidebar:s,onSidebarDragStart:c,onSidebarDragMove:l,onSidebarDragEnd:u,onSidebarDragCancel:d,upperRef:f,lowerRef:p,draggingUpper:m,onUpperDragStart:h,onUpperDragMove:g,onUpperDragEnd:_,onUpperDragCancel:v,maximized:y,setMaximized:b,mobileView:x,setMobileView:S}}){let C=y===`files`;return(0,M.useEffect)(()=>d,[e,d]),(0,M.useEffect)(()=>v,[v]),(0,N.jsxs)(N.Fragment,{children:[s&&(0,N.jsx)(`div`,{className:`fixed inset-0 z-50 cursor-col-resize`}),m&&(0,N.jsx)(`div`,{className:`fixed inset-0 z-50 cursor-row-resize`}),(0,N.jsxs)(`main`,{ref:f,className:`grid min-h-0 grid-cols-1 md:grid-cols-[var(--nc-sidebar)_minmax(0,1fr)] ${x===`terminal`?`hidden md:grid`:``} ${s||m?`select-none`:``}`,style:{"--nc-sidebar":C?`0px`:`min(${a}px, ${tt*100}vw)`},children:[(0,N.jsx)(Zt,{...r,repo:e,status:n,sidebarRef:o,draggingSidebar:s,onSidebarDragStart:c,onSidebarDragMove:l,onSidebarDragEnd:u,onSidebarDragCancel:d,filesMax:C,mobileView:x},e),(0,N.jsx)(Xn,{...i,filesMax:C,setMaximized:b,status:n,className:`nc-fade-in ${x===`diff`?`flex`:`hidden md:flex`}`})]}),(0,N.jsx)(In,{region:`terminal panel`,className:x===`terminal`?`flex`:`hidden md:flex`,children:(0,N.jsx)(M.Suspense,{fallback:(0,N.jsx)(`div`,{className:`min-h-0 border-t border-chrome-line ${x===`terminal`?`block`:`hidden md:block`}`}),children:(0,N.jsx)($n,{repo:e,maximized:y===`terminal`,onToggleMaximized:()=>b(e=>e===`terminal`?`none`:`terminal`),className:`nc-fade-in ${x===`terminal`?`flex`:`hidden md:flex`} ${y===`files`?`overflow-hidden`:``}`,sectionRef:p,showDivider:y===`none`,draggingUpper:m,onUpperDragStart:h,onUpperDragMove:g,onUpperDragEnd:_,onUpperDragCancel:v})})}),(0,N.jsx)(Qn,{view:x,onSelect:S}),(0,N.jsxs)(`footer`,{className:`flex shrink-0 items-center gap-3 border-t border-chrome-line bg-ink-900 px-3 py-1 text-ink-400`,children:[(0,N.jsx)(`span`,{className:`min-w-0 shrink-[1000] truncate`,children:t?.display_path}),n?.branch&&(0,N.jsx)(`span`,{className:`max-w-[50%] shrink-0 truncate text-accent`,children:n.branch}),qt(n)&&(0,N.jsx)(`span`,{className:`shrink-0 font-medium text-removed`,role:`status`,children:qt(n)}),n?.tracking&&(0,N.jsxs)(`span`,{className:`shrink-0`,children:[`↑`,n.tracking.ahead,` ↓`,n.tracking.behind]}),(0,N.jsx)(`span`,{className:`ml-auto shrink-0`,children:n?(0,N.jsx)(`span`,{className:`text-added`,children:`● live`}):`connecting…`})]})]})}function tr({settings:e}){let{leaderText:t,conflict:n,setLeader:r,disable:i,reset:a}=e,[o,s]=(0,M.useState)(t),[c,l]=(0,M.useState)(null);(0,M.useEffect)(()=>{s(t),l(null)},[t]);let u=()=>{r(o)?l(null):l(`"${o}" is not a chord. Write it as Ctrl+F, Alt+Space or Ctrl+Shift+ArrowLeft.`)};return(0,N.jsxs)(`section`,{className:`shrink-0 border-b border-ink-700 px-3 py-2`,children:[(0,N.jsxs)(`p`,{className:`text-ink-400`,children:[`Leader chord:`,` `,t?(0,N.jsx)(`kbd`,{className:`rounded-sm border border-ink-600 bg-ink-850 px-1.5 py-0.5 font-mono text-ink-50`,children:t}):(0,N.jsx)(`span`,{className:`text-ink-200`,children:`switched off`})]}),(0,N.jsxs)(`div`,{className:`mt-1.5 flex items-stretch gap-2`,children:[(0,N.jsx)(`input`,{value:o,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&u()},placeholder:`Ctrl+F`,"aria-label":`leader chord`,spellCheck:!1,autoCapitalize:`none`,autoCorrect:`off`,className:`min-w-0 flex-1 rounded-sm border border-ink-700 bg-ink-950 px-2 py-1 font-mono text-ink-50 placeholder:text-ink-400 focus:border-ink-600 focus:outline-none`}),(0,N.jsx)(`button`,{type:`button`,onClick:u,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850`,children:`Rebind`}),(0,N.jsx)(`button`,{type:`button`,onClick:i,title:`Leave the leader unbound. Standalone chords keep working.`,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850`,children:`Switch off`}),(0,N.jsx)(`button`,{type:`button`,onClick:a,title:`Back to the leader the TUI ships with`,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850`,children:`Reset`})]}),c&&(0,N.jsx)(`p`,{role:`alert`,className:`mt-1 text-removed`,children:c}),n&&(0,N.jsxs)(`p`,{role:`status`,className:`mt-1 text-accent`,children:[n,` Rebind it above if you would rather keep that key.`]})]})}function nr({keys:e}){return e?(0,N.jsx)(`span`,{className:`flex shrink-0 items-center gap-1`,children:e.map((e,t)=>(0,N.jsxs)(`span`,{className:`flex items-center gap-1`,children:[t>0&&(0,N.jsx)(`span`,{className:`text-ink-400`,children:`then`}),(0,N.jsx)(`kbd`,{className:`rounded-sm border border-ink-600 bg-ink-850 px-1.5 py-0.5 font-mono text-ink-50`,children:e})]},e))}):(0,N.jsx)(`span`,{className:`shrink-0 text-ink-400`,children:`no key — the leader is switched off`})}function rr({action:e,keys:t,ariaKeys:n,available:r,onRun:i}){let a=`flex w-full flex-col gap-0.5 rounded-sm px-3 py-1.5 text-left ${r?``:`opacity-50`}`,o=(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`span`,{className:`flex w-full items-baseline gap-2`,children:[(0,N.jsx)(`span`,{className:`min-w-0 flex-1 text-ink-50`,children:e.label}),e.support===`reinterpreted`&&(0,N.jsx)(`span`,{className:`shrink-0 rounded-sm bg-ink-700 px-1 text-2xs uppercase tracking-wide text-ink-200`,children:`reinterpreted`}),e.support===`browserOnly`&&(0,N.jsx)(`span`,{className:`shrink-0 rounded-sm bg-ink-700 px-1 text-2xs uppercase tracking-wide text-ink-200`,children:`browser only`}),!r&&(0,N.jsx)(`span`,{className:`shrink-0 text-2xs uppercase tracking-wide text-ink-400`,children:`not available here`}),(0,N.jsx)(nr,{keys:t})]}),e.note&&(0,N.jsx)(`span`,{className:`text-ink-400`,children:e.note})]}),s={"data-shortcut-action":e.id,"aria-disabled":!r||void 0,"aria-keyshortcuts":n??void 0};return e.keyboardOnly?(0,N.jsx)(`li`,{children:(0,N.jsx)(`div`,{...s,className:a,children:o})}):(0,N.jsx)(`li`,{children:(0,N.jsx)(`button`,{type:`button`,...s,onClick:()=>{r&&i()},className:`${a} ${r?`hover:bg-ink-850`:``}`,children:o})})}var ir={terminal:`Terminal`,project:`Projects`,view:`Layout and views`,focus:`Focus`,session:`Session`,help:`Help`},ar=(()=>{let e=[];for(let t of C){let n=e.find(e=>e.group===t.group);n?n.actions.push(t):e.push({group:t.group,actions:[t]})}return e})(),or=`nc-shortcut-help-title`;function sr({onClose:e,leader:t}){let n=te(),r=ce(),i=(0,M.useRef)(null),a=(0,M.useRef)(!1);(0,M.useEffect)(()=>{let e=document.activeElement;return i.current?.focus(),()=>{a.current||e instanceof HTMLElement&&e.isConnected&&e.focus()}},[]),(0,M.useEffect)(()=>{let t=t=>{t.key===`Escape`&&e()};return document.addEventListener(`keydown`,t),()=>document.removeEventListener(`keydown`,t)},[e]);let o=t=>{a.current=!0,n?.runAction(t.id),e()};return(0,N.jsx)(`div`,{className:`nc-fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-4`,onClick:e,children:(0,N.jsxs)(`div`,{ref:i,role:`dialog`,"aria-modal":`true`,"aria-labelledby":or,tabIndex:-1,className:`nc-rise-in flex max-h-[85vh] w-[40rem] max-w-full flex-col rounded-lg border border-ink-700 bg-ink-900 focus:outline-none`,onClick:e=>e.stopPropagation(),children:[(0,N.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-ink-700 px-3 py-2`,children:[(0,N.jsx)(`span`,{id:or,className:`font-medium text-ink-50`,children:`Keyboard shortcuts`}),(0,N.jsx)(`button`,{type:`button`,onClick:e,"aria-label":`close`,className:`ml-auto flex h-6 w-6 items-center justify-center rounded-sm text-ink-400 hover:text-ink-200`,children:(0,N.jsx)(_e,{})})]}),(0,N.jsx)(tr,{settings:t}),(0,N.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto py-1`,children:[ar.map(({group:e,actions:n})=>(0,N.jsxs)(`section`,{children:[(0,N.jsx)(`h3`,{className:`px-3 py-1 text-caption uppercase text-ink-400`,children:ir[e]}),(0,N.jsx)(`ul`,{children:n.map(e=>(0,N.jsx)(rr,{action:e,keys:x(e.id,t.leader),ariaKeys:S(e.id,t.leader),available:r(e.id),onRun:()=>o(e)},e.id))})]},e)),(0,N.jsxs)(`section`,{children:[(0,N.jsx)(`h3`,{className:`px-3 py-1 text-caption uppercase text-ink-400`,children:`Not bound in the browser`}),(0,N.jsx)(`ul`,{children:u.map(e=>(0,N.jsxs)(`li`,{className:`px-3 py-1.5`,children:[(0,N.jsxs)(`span`,{className:`flex items-baseline gap-2`,children:[(0,N.jsx)(`span`,{className:`min-w-0 flex-1 text-ink-200`,children:e.label}),(0,N.jsx)(`kbd`,{className:`shrink-0 rounded-sm border border-ink-700 bg-ink-850 px-1.5 py-0.5 font-mono text-ink-400`,children:e.leader})]}),(0,N.jsx)(`span`,{className:`text-ink-400`,children:e.reason})]},e.leader))})]})]})]})})}var cr=[`terminal.newPane`,`terminal.closePane`,`view.toggleMaximize`,`project.openDialog`,`help.shortcuts`],lr={keys:`3-9,0`,label:`pane 1-8`,click:null},ur={keys:`3-9,0`,label:`swap active pane with this pane`,click:null},dr={keys:`esc`,label:`cancel`,click:null};function fr(e,t,n){return e.armed&&e.swapPending?{chip:`SWAP`,segments:[ur,dr]}:e.armed?{chip:`PREFIX`,segments:mr(n)}:t?{chip:null,segments:pr(t,n)}:{chip:null,segments:hr(n)}}function pr(e,t){let n=w(e),r=[{keys:n,label:`leader`,click:{kind:`arm`}}];for(let e of C)cr.includes(e.id)&&t(e.id)&&r.push(gr(e,`${n} ${e.leader}`));return r}function mr(e){let t=[],n=!1;for(let r of C)r.leader!==void 0&&e(r.id)&&(ve(r.id)===null?t.push(gr(r,r.leader)):(n||t.push(lr),n=!0));return t.push(dr),t}function hr(e){let t=[{keys:`leader`,label:`switched off`,click:{kind:`run`,action:`help.shortcuts`}}];for(let n of C)n.chord!==void 0&&e(n.id)&&t.push(gr(n,n.chord));return t}function gr(e,t){return{keys:t,label:e.hint,click:{kind:`run`,action:e.id}}}var _r=`shrink-0 whitespace-nowrap`;function vr({state:e,onClick:t}){let n=fr(e,we(),ce());return(0,N.jsxs)(`div`,{role:`toolbar`,"aria-label":`Keyboard hints`,className:`hidden shrink-0 items-center gap-1 overflow-hidden border-t border-chrome-line bg-ink-900 px-2 py-0.5 text-xs text-ink-400 md:flex`,children:[n.chip&&(0,N.jsx)(`span`,{"data-hint-chip":n.chip,className:`shrink-0 bg-accent px-1 font-bold text-ink-950`,children:n.chip}),n.segments.map((e,n)=>(0,N.jsxs)(M.Fragment,{children:[n>0&&(0,N.jsx)(`span`,{className:`shrink-0 text-ink-600`,children:`|`}),(0,N.jsx)(yr,{segment:e,onClick:t})]},`${e.keys} ${e.label}`))]})}function yr({segment:e,onClick:t}){let n=(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`span`,{className:`text-ink-200`,children:e.keys}),`: `,e.label]});if(!e.click)return(0,N.jsx)(`span`,{className:_r,children:n});let r=e.click;return(0,N.jsx)(`button`,{type:`button`,"data-hint-action":r.kind===`run`?r.action:`arm`,onPointerDown:e=>e.preventDefault(),onClick:()=>t(r),className:`${_r} rounded-sm hover:text-accent`,children:n})}function br(e,t){return e?`grid-rows-[minmax(0,1fr)_auto_auto] ${t===`terminal`?`md:grid-rows-[minmax(0,0fr)_minmax(0,1fr)_auto_auto]`:t===`files`?`md:grid-rows-[minmax(0,1fr)_minmax(0,0fr)_auto_auto]`:`md:grid-rows-[minmax(0,var(--nc-upper))_minmax(0,var(--nc-lower))_auto_auto]`}`:`grid-rows-[1fr]`}function xr(e,t){let n=Sr(e);if(n.length===0)return null;let r=e.at,i=r===null?-1:n.findIndex(e=>Cr(e,r)),a;return a=i===-1?t>0?n[0]:n[n.length-1]:n[(i+t+n.length)%n.length],r!==null&&Cr(a,r)?null:a}function Sr({paneCount:e,maximized:t,narrow:n,mobileView:r}){let i={kind:`list`},a={kind:`content`},o=Array.from({length:e},(e,t)=>({kind:`pane`,index:t}));if(n)switch(r){case`files`:return[i];case`diff`:return[a];case`terminal`:return o}switch(t){case`terminal`:return o;case`files`:return[i,a];case`none`:return[i,a,...o]}}function Cr(e,t){return e.kind===t.kind?e.kind!==`pane`||t.kind!==`pane`||e.index===t.index:!1}function wr(e,t,n){if(e.length<=1||t===null)return null;let r=e.indexOf(t);return r<0?null:e[(r+n+e.length)%e.length]}var Tr={armed:!1},Er={kind:`none`};function Dr(e=Er){return{state:Tr,effect:e}}function Or(e,t){switch(t.kind){case`blur`:case`focusChange`:case`dialogOpen`:case`repoChange`:case`socketReconnect`:case`disabled`:case`suppressed`:case`cancel`:return Dr();case`consumed`:return Dr();case`arm`:return{state:{armed:!0,swapPending:!1},effect:Er};case`literalLeader`:return Dr({kind:`sendLiteralLeader`,data:t.data});case`action`:return kr(e,t.action.id);case`ignore`:return{state:e,effect:Er}}}function kr(e,t){if(e.armed&&e.swapPending){let e=ve(t);return e===null?Dr():Dr({kind:`swapWith`,pane:e})}return t===`terminal.swapPanePrompt`?{state:{armed:!0,swapPending:!0},effect:Er}:Dr({kind:`run`,action:t})}var Ar=C.flatMap(e=>{if(!e.chord)return[];let t=r(e.chord);return t?[{spec:t,action:e}]:[]}),jr=new Set([`Shift`,`Control`,`Alt`,`Meta`]),Mr=229,Nr=new Set([`Process`,`Unidentified`]),Pr={kind:`ignore`};function Fr(e){return e.isComposing===!0||e.keyCode===Mr||Nr.has(e.key)}function Ir(e){return e.key===`Escape`||e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey&&e.key.toLowerCase()===`c`}function Lr(e,t){if(e.type!==`keydown`||Fr(e)||e.repeat===!0||t.suppressed)return Pr;if(t.armed){if(Ir(e))return{kind:`cancel`};if(t.leader&&T(t.leader,e))return{kind:`literalLeader`,data:v(t.leader)??``};if(e.key.length===1){let t=m(e.key);if(t)return{kind:`action`,action:t}}return jr.has(e.key)?Pr:{kind:`consumed`}}if(t.leader&&T(t.leader,e))return{kind:`arm`};for(let{spec:t,action:n}of Ar)if(T(t,e))return{kind:`action`,action:n};return Pr}var Rr=new Set([`checkbox`,`radio`,`button`,`submit`,`reset`,`image`,`range`,`color`,`file`]),zr=new Set([`textbox`,`searchbox`,`combobox`]);function Br(e){if(!e)return!1;if(e.isContentEditable===!0)return!0;let t=e.role?.toLowerCase()??``;if(zr.has(t))return!0;switch(e.tagName.toUpperCase()){case`INPUT`:return!Rr.has(e.type?.toLowerCase()??`text`);case`TEXTAREA`:case`SELECT`:return!0;default:return!1}}function Vr(e){return e.dialogOpen||e.composing||e.target?.inDialog===!0?!0:Br(e.target)}function Hr(e,t=!0){let n=(0,M.useRef)(e);n.current=e,(0,M.useEffect)(()=>{if(!t)return;let e=e=>{n.current(e)&&(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation())};return document.addEventListener(`keydown`,e,{capture:!0}),()=>document.removeEventListener(`keydown`,e,{capture:!0})},[t])}function Ur({enabled:e,leader:t,dialogOpen:n,repo:r}){let i=te(),a=(0,M.useRef)(Tr),[o,s]=(0,M.useState)(Tr),c=(0,M.useRef)(i);c.current=i;let l=(0,M.useCallback)(e=>{let t=Or(a.current,e);a.current=t.state,s(t.state);let n=c.current;n&&Wr(t.effect,n)},[]);Hr((0,M.useCallback)(e=>{let r=Vr({target:ft(e.target),dialogOpen:n,composing:e.isComposing===!0}),i=Lr(e,{leader:t,armed:a.current.armed,suppressed:r});return r?(l({kind:`suppressed`}),!1):(l(i),i.kind!==`ignore`)},[n,t,l]),e&&i!==null),(0,M.useEffect)(()=>{if(!e)return;let t=()=>l({kind:`blur`}),n=e=>{let t=ft(e.target);(Br(t)||t?.inDialog===!0)&&l({kind:`focusChange`})};return window.addEventListener(`blur`,t),document.addEventListener(`focusin`,n,{capture:!0}),()=>{window.removeEventListener(`blur`,t),document.removeEventListener(`focusin`,n,{capture:!0})}},[e,l]),(0,M.useEffect)(()=>{n&&l({kind:`dialogOpen`})},[n,l]),(0,M.useEffect)(()=>{e||l({kind:`disabled`})},[e,l]);let u=(0,M.useRef)(r);return(0,M.useEffect)(()=>{u.current!==r&&(u.current=r,l({kind:`repoChange`}))},[r,l]),(0,M.useEffect)(()=>{if(i)return i.onDisarm(()=>l({kind:`socketReconnect`}))},[i,l]),(0,M.useEffect)(()=>{l({kind:`cancel`})},[t,l]),{state:o,arm:(0,M.useCallback)(()=>l({kind:`arm`}),[l]),disarm:(0,M.useCallback)(()=>l({kind:`cancel`}),[l])}}function Wr(e,t){switch(e.kind){case`none`:return;case`run`:t.runAction(e.action);return;case`swapWith`:t.swapPanes(e.pane);return;case`sendLiteralLeader`:e.data&&t.sendLiteralLeader(e.data);return}}var Gr=`nightcrow.shortcut.leader`;function Kr(){let[e,t]=(0,M.useState)(qr),n=(0,M.useCallback)(e=>{t(e),Yr(e===null?null:w(e))},[]),i=(0,M.useCallback)(e=>{let t=r(e);return t?(n(t),!0):!1},[n]),a=(0,M.useCallback)(()=>n(null),[n]),o=(0,M.useCallback)(()=>n(p),[n]);return{leader:e,leaderText:e?w(e):``,conflict:e?ee(e):null,setLeader:i,disable:a,reset:o}}function qr(){let e=Jr();return e?e.leader===null?null:r(e.leader)??p:p}function Jr(){try{let e=localStorage.getItem(Gr);if(!e)return null;let t=JSON.parse(e);if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.leader;return n===null?{leader:null}:typeof n==`string`?{leader:n}:null}catch{return null}}function Yr(e){try{localStorage.setItem(Gr,JSON.stringify({leader:e}))}catch{}}function Xr({enabled:e,repo:t,repos:n,selectRepo:r,closeRepo:i,openPicker:a,pickerOpen:o,cycleAccent:s,reloadConfig:c,tab:l,chooseTab:u,maximized:d,setMaximized:f,mobileView:p}){let m=te(),h=Kr(),[g,_]=(0,M.useState)(!1),v=(0,M.useCallback)(()=>_(!0),[]),y=(0,M.useCallback)(()=>_(!1),[]),b=(0,M.useCallback)(e=>{let i=wr(n.map(e=>e.id),t,e);i!==null&&r(i)},[n,t,r]),x=m?.zoomActivePane,S=(0,M.useCallback)(()=>{pt()?(f(e=>e===`terminal`?`none`:`terminal`),x?.()):f(e=>e===`files`?`none`:`files`)},[f,x]),C=(0,M.useCallback)(e=>{let t=m?.paneCursor()??null,n=mt(),r=null;n===`terminal`?t&&t.index>=0&&(r={kind:`pane`,index:t.index}):n!==null&&(r={kind:n});let i=xr({at:r,paneCount:t?.count??0,maximized:d,narrow:window.innerWidth<768,mobileView:p},e);i!==null&&(i.kind===`pane`?m?.focusPaneAt(i.index):ht(i.kind))},[m,d,p]),w=(0,M.useMemo)(()=>{let e={"project.openDialog":a,"session.cycleAccent":s,"session.reloadConfig":c,"help.shortcuts":v};return n.length>1&&(e[`project.previous`]=()=>b(-1),e[`project.next`]=()=>b(1)),t===null||(e[`project.close`]=()=>i(t),e[`view.toggleLog`]=()=>u(l===`log`?`status`:`log`),e[`view.toggleTree`]=()=>u(l===`tree`?`status`:`tree`),e[`view.toggleMaximize`]=S,e[`focus.list`]=()=>void ht(`list`),e[`focus.content`]=()=>void ht(`content`),e[`focus.previous`]=()=>C(-1),e[`focus.next`]=()=>C(1)),e},[a,s,c,v,n.length,b,t,l,i,u,S,C]);le(w);let T=Ur({enabled:e,leader:h.leader,dialogOpen:o||g,repo:t}),{arm:ee,disarm:E}=T,ne=(0,M.useCallback)(e=>{e.kind===`arm`?ee():(E(),m?.runAction(e.action))},[ee,E,m]);return{shortcutHelp:{open:g,show:v,hide:y},settings:h,hint:{state:T.state,onClick:ne}}}var Zr=1e3,Qr=3,$r=2e3;function ei(e,t){let[n,r]=(0,M.useState)(!1),i=(0,M.useRef)(!1),a=(0,M.useRef)(!1);(0,M.useEffect)(()=>(a.current=!1,()=>{a.current=!0}),[]);let o=(0,M.useCallback)(async t=>{for(;!a.current;){if(await new Promise(e=>setTimeout(e,Zr)),a.current)return;let n;try{n=await j.cloneStatus(t)}catch(e){if(k(e)){i.current=!1,a.current||r(!1);return}if(e instanceof De&&e.status===404){if(a.current)return;me.error(`the clone's progress is no longer available`),i.current=!1,r(!1);return}continue}if(a.current)return;if(n.state===`done`){try{let t=await j.open(n.path);if(a.current)return;e(t)}catch(e){if(a.current)return;me.error(e instanceof Error?e.message:`could not open`)}finally{i.current=!1,a.current||r(!1)}return}if(n.state===`failed`){me.error(n.message),i.current=!1,r(!1);return}}},[e]),s=(0,M.useCallback)(async(e=()=>!1)=>{for(let t=0;t0&&await new Promise(e=>setTimeout(e,$r)),i.current||e()||a.current)return;let n;try{({job:n}=await j.runningClone())}catch(e){if(k(e))return;continue}if(n===null||e()||a.current||i.current)return;i.current=!0,r(!0),o(n);return}},[o]);return(0,M.useEffect)(()=>{if(!t)return;let e=!1;return s(()=>e),()=>{e=!0}},[t,s]),{busy:n,start:(0,M.useCallback)(async(e,t)=>{if(t.trim()&&!i.current){i.current=!0,r(!0);try{let{job:n}=await j.clone(e,t.trim());await o(n)}catch(e){if(i.current=!1,a.current)return;let t=e instanceof De&&e.status>=400;me.error(t?e.message:`could not confirm the clone started — check this folder before retrying`),r(!1),s()}}},[o,s])}}function ti(e,t,n,r=!1){return r&&n&&t.includes(n)?n:e&&t.includes(e)?e:n&&t.includes(n)?n:t[0]??null}function ni(e){let t=!1,n=null,r=()=>{if(t||n===null)return;let i=n;n=null,t=!0,e(i).catch(()=>{}).finally(()=>{t=!1,r()})};return e=>{n=e,r()}}function ri(e,t){return e?.enabled===t.enabled&&e.window_secs===t.window_secs?e:t}function ii(e,t){return e.length===t.length&&e.every((e,n)=>{let r=t[n];return e.id===r.id&&e.name===r.name&&e.display_path===r.display_path})?e:t}var ai=`The viewer was updated on the server.`,oi=null,si=null,ci=null;function li(e,t){return e===null||t===null?!1:e!==t}function ui(e){oi=e}function di(e){li(oi,e)?si!==e&&(si=e,ci=me.info(ai,{sticky:!0,action:{label:`Reload`,run:()=>window.location.reload()}})):e===oi&&si!==null&&(ci!==null&&be(ci),si=null,ci=null)}var fi=3e3;function pi({authed:e,setAuthed:t,handle:n,adoptAccent:r,adoptUpperPct:i,adoptMaximized:a,adoptViews:o,upperDraggingRef:s,accentWrites:c,upperPctWrites:l,maximizedWrites:u,viewWrites:d,resumeTick:f,orderWrites:p,repoDraggingRef:m,reorderInFlightRef:h,pendingReorderRef:g}){let[_,v]=(0,M.useState)([]),[y,b]=(0,M.useState)(null),[x,S]=(0,M.useState)(null),[C,w]=(0,M.useState)(null),[T,ee]=(0,M.useState)(!1),[te,E]=(0,M.useState)(!0),{current:ne}=(0,M.useRef)(ni(j.setActiveRepo)),re=(0,M.useRef)(null),ie=(0,M.useRef)(null);return(0,M.useEffect)(()=>{if(e===!1)return;let f=!1,_,y=new AbortController,x=()=>{let e=c.current,C=l.current,T=u.current,te=d.current,ne=p.current;return j.repos(y.signal).then(n=>{let{repos:y,hot:ae,accent:oe,upper_pct:se,active_repo:ce,maximized:le,last_view:de,now_ms:fe,can_clone:pe,viewer_build:me}=n;if(f)return;di(me),S(e=>ri(e,ae)),E(pe),w(e=>It(e,fe,Date.now())),c.current===e&&r(oe),l.current===C&&!s.current&&i(se),u.current===T&&a(le),d.current===te&&o(de??{},y.map(e=>e.id)),t(!0),ee(!0);let he=h.current||g.current!==null;p.current===ne&&!m.current&&!he?v(e=>ii(e,y)):v(e=>{let t=ue(y.map(e=>e.id),e.map(e=>e.id)),n=new Map(y.map(e=>[e.id,e]));return ii(e,t.map(e=>n.get(e)).filter(Boolean))});let ge=y.map(e=>e.id),_e=ce!==re.current;re.current=ce??null,_e&&ce&&ge.includes(ce)&&(ie.current=ce),b(e=>ti(e,ge,ce,_e)),f||(_=setTimeout(x,fi))}).catch(e=>{f||(k(e)?(t(!1),ee(!1)):(Ee(e)||n(e),_=setTimeout(x,fi)))})};return x(),()=>{f=!0,y.abort(),_&&clearTimeout(_)}},[e,t,n,r,i,f,c,l,u,d,s,a,o,p,m,h,g]),(0,M.useEffect)(()=>{y?y!==ie.current&&(ie.current=null,ne(y)):ie.current=null},[y,ne]),{repos:_,setRepos:v,repo:y,setRepo:b,hot:x,clockSkewMs:C,reposLoaded:T,canClone:te}}var mi=4;function hi({ids:e,onReorder:t,draggingRef:n}){let r=(0,M.useRef)(null),i=(0,M.useRef)(null),a=(0,M.useRef)(null),[o,s]=(0,M.useState)(null),[c,l]=(0,M.useState)(null);return{dragging:o,target:c,onStart:(t,a)=>{t.target.closest(`button[data-tab-close]`)||t.button!==0||e.length<2||(r.current=a,i.current={x:t.clientX,y:t.clientY},n.current=!1)},onMove:e=>{let t=r.current,o=i.current;if(t===null||o===null)return;if(!n.current&&e.buttons===0){r.current=null,i.current=null;return}if(!n.current&&Math.hypot(e.clientX-o.x,e.clientY-o.y){let o=r.current,c=a.current;o!==null&&n.current&&c!==null&&t(E(e,o,c)),r.current=null,i.current=null,a.current=null,n.current=!1,s(null),l(null)}}}function gi({repos:e,setRepos:t,handle:n,writesRef:r,draggingRef:i,inFlightRef:a,pendingRef:o}){let s=(0,M.useCallback)(()=>{if(a.current||o.current===null)return;let e=o.current;o.current=null,a.current=!0;let i=r.current;j.reorderRepos(e).then(e=>{r.current===i&&t(e)}).catch(n).finally(()=>{a.current=!1,s()})},[n,t,a,o,r]),c=(0,M.useCallback)(e=>{r.current+=1,t(t=>{let n=ue(t.map(e=>e.id),e),r=new Map(t.map(e=>[e.id,e]));return n.map(e=>r.get(e)).filter(Boolean)}),o.current=e,s()},[s,t,o,r]);return{...hi({ids:e.map(e=>e.id),onReorder:c,draggingRef:i}),writesRef:r,draggingRef:i,inFlightRef:a,pendingRef:o}}function _i({authed:e,setAuthed:t,handle:n,resumeTick:r,adoptAccent:i,adoptUpperPct:a,adoptMaximized:o,adoptViews:s,accentWrites:c,upperPctWrites:l,maximizedWrites:u,viewWrites:d,upperDraggingRef:f}){let p=(0,M.useRef)(0),m=(0,M.useRef)(!1),h=(0,M.useRef)(!1),g=(0,M.useRef)(null),_=pi({authed:e,setAuthed:t,handle:n,adoptAccent:i,adoptUpperPct:a,adoptMaximized:o,adoptViews:s,upperDraggingRef:f,accentWrites:c,upperPctWrites:l,maximizedWrites:u,viewWrites:d,resumeTick:r,orderWrites:p,repoDraggingRef:m,reorderInFlightRef:h,pendingReorderRef:g}),{dragging:v,target:y,onStart:b,onMove:x,onEnd:S}=gi({repos:_.repos,setRepos:_.setRepos,handle:n,writesRef:p,draggingRef:m,inFlightRef:h,pendingRef:g});return{..._,orderWrites:p,draggingRepo:v,dragOverRepo:y,onRepoDragStart:b,onRepoDragMove:x,onRepoDragEnd:S}}function vi(){let[e,t]=(0,M.useState)(!1),n=(0,M.useRef)(!1);return{reload:(0,M.useCallback)(async()=>{if(!n.current){n.current=!0,t(!0);try{me.success(await j.reloadConfig())}catch(e){me.error(e instanceof Error?e.message:`could not reload the config`)}finally{n.current=!1,t(!1)}}},[]),pending:e}}function yi(e,t){let n=e.indexOf(t);return n===-1?e[0]??null:e[n+1]??e[n-1]??null}function bi({repo:e,repos:t,setRepos:n,setRepo:r,setPane:i,setTab:a,setPickerOpen:o,handle:s,orderWrites:c}){let l=(0,M.useRef)(t);l.current=t;let u=(0,M.useRef)(e);return u.current=e,{selectOpenedRepo:(0,M.useCallback)(e=>{c.current+=1,n(t=>t.some(t=>t.id===e.id)?t:[...t,e]),r(e.id),e.id!==u.current&&(i({kind:`empty`}),a(`status`)),o(!1)},[n,r,i,a,o,c]),closeRepo:(0,M.useCallback)(async e=>{try{await j.close(e),c.current+=1;let t=yi(l.current.map(e=>e.id),e);n(t=>t.filter(t=>t.id!==e)),r(n=>n===e?t:n)}catch(e){s(e)}},[n,r,s,c])}}function xi(e,t,n){return t!==e&&(n.bumpPaneRequest(),e===`log`&&n.leaveLog(),n.recordTab(t),n.forgetPane(),!0)}function Si(e,t,n,r,i){(0,M.useLayoutEffect)(()=>{t&&(e.some(e=>e.oid===t.commit.oid)||(r(),n(null),i()))},[e,t,n,r,i])}var Ci=5e3,wi={refs:{},ahead:[],behind:[],truncated:!1};function Ti({repo:e,authed:t,tab:n,head:r,branch:i,refs:a,upstream:o}){let[s,c]=(0,M.useState)({key:``,value:wi}),[l,u]=(0,M.useState)(0),d=e&&r!==void 0?`${e}|${r??``}|${i??``}|${a??``}|${o??``}`:``,f=(0,M.useRef)(s.key);f.current=s.key,(0,M.useEffect)(()=>{if(!e||!t||n!==`log`||d===``||f.current===d)return;let r=new AbortController,i;return j.logDecorations(e,r.signal).then(e=>c({key:d,value:e})).catch(()=>{r.signal.aborted||(i=setTimeout(()=>u(e=>e+1),Ci))}),()=>{r.abort(),i&&clearTimeout(i)}},[e,t,n,d,l]);let p=s.key.startsWith(`${e}|`)?s.value:wi;return(0,M.useMemo)(()=>{let e=new Set(p.ahead),t=new Set(p.behind);return{refsOf:e=>p.refs[e],divergenceOf:n=>e.has(n)?`ahead`:t.has(n)?`behind`:void 0,truncated:p.truncated}},[p])}function Ei(e,t,n){let r=!e.truncated||e.head===void 0,i=t[0]?.oid,a=i===void 0?-1:e.commits.findIndex(e=>e.oid===i),o=a<0?[]:e.commits.slice(a);return a>=0&&o.length<=t.length&&o.every((e,n)=>e.oid===t[n].oid)?{commits:a===0?t:[...e.commits.slice(0,a),...t],anchor:e.head??null,done:n||r,mode:`prepend`}:{commits:e.commits,anchor:e.head??null,done:r,mode:`replace`}}function Di({repo:e,authed:t,tab:n,filter:r,head:i,handle:a}){let[o,s]=(0,M.useState)([]),[c,l]=(0,M.useState)(!1),[u,d]=(0,M.useState)(!1),f=(0,M.useRef)(null),p=(0,M.useRef)(!1),m=(0,M.useRef)(!1),h=(0,M.useRef)(0),g=(0,M.useRef)(void 0),_=(0,M.useRef)(void 0),v=(0,M.useCallback)(()=>{h.current+=1,p.current=!1,m.current=!1,s([]),f.current=null,l(!1),d(!1),g.current=void 0,_.current=void 0},[]),[y,b]=(0,M.useState)(null),x=(0,M.useRef)(o);x.current=o;let S=(0,M.useRef)(c);S.current=c;let C=(0,M.useRef)(i);C.current=i;let w=(0,M.useCallback)(async t=>{if(!e)return;_.current=C.current,h.current+=1;let n=h.current;p.current=!0,m.current=!0;try{let r=await j.log(e);if(n!==h.current)return;let i=t??{commits:x.current,done:S.current},a=Ei(r,i.commits,i.done);s(a.commits),f.current=a.anchor,g.current=a.anchor,a.anchor===C.current&&(_.current=void 0),l(a.done),d(!1)}catch(e){n===h.current&&(_.current=void 0,a(e),d(!0))}finally{n===h.current&&(p.current=!1,m.current=!1)}},[e,a]),T=(0,M.useCallback)(async()=>{if(!e||p.current)return;p.current=!0;let t=h.current;try{let n=f.current,r=await j.log(e,n===null?void 0:{from:n,skip:x.current.length});if(t!==h.current)return;if(s(e=>[...e,...r.commits]),f.current=r.head??null,l(!r.truncated||r.head===void 0),n===null){g.current=r.head??null;let e=C.current;e!==void 0&&e!==(r.head??null)&&w({commits:r.commits,done:!r.truncated||r.head===void 0})}}catch(e){t===h.current&&(a(e),d(!0))}finally{t===h.current&&(p.current=!1)}},[e,a,w]);(0,M.useEffect)(()=>{e&&t&&n===`log`&&o.length===0&&!c&&!u&&T()},[e,t,n,o.length,c,u,T]),(0,M.useEffect)(()=>{if(!e||!t||n!==`log`||i===void 0||u)return;let r=g.current;r!==void 0&&(r===i?m.current||(_.current=void 0):_.current!==i&&w())},[e,t,n,i,u,w]);let ee=o.filter(e=>e.summary.toLowerCase().includes(r.toLowerCase())),te=r!==``,E=(0,M.useRef)(null);return(0,M.useEffect)(()=>{let e=E.current;if(!e)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&T()},{root:e.closest(`ul`),rootMargin:`400px`});return t.observe(e),()=>t.disconnect()},[T,c,u,te,y,n,ee.length]),{commits:o,logDone:c,logStalled:u,setLogStalled:d,commitDrillDown:y,setCommitDrillDown:b,resetLog:v,logSentinelRef:E,visibleCommits:ee,logPagingPaused:te}}function Oi({repo:e,authed:t,resumeTick:n,tab:r,pane:i,setPane:a,handle:o,paneRequestRef:s}){let[c,l]=(0,M.useState)(null),u=(0,M.useRef)(i);u.current=i;let d=(0,M.useRef)(r);return d.current=r,(0,M.useLayoutEffect)(()=>{l(null)},[e,t]),(0,M.useEffect)(()=>{if(e&&t)return A(e,l,({reason:e})=>l({files:[],truncated:!1,unavailable:e}))},[e,t,n]),(0,M.useEffect)(()=>{if(!e||!c)return;let t=u.current;if(d.current!==`status`||t.kind!==`diff`)return;let n=t.value.path,r=c.files.find(e=>e.path===n);if(!r){a({kind:`empty`});return}let i=s.current,l=!0,f=()=>{let e=u.current;return l&&i===s.current&&e.kind===`diff`&&e.value.path===n};return j.diff(e,n).then(e=>{f()&&a({kind:`diff`,value:e,source:gn(r)&&_n(e)?{kind:`workdir`,path:n}:void 0})}).catch(e=>{f()&&o(e)}),()=>{l=!1}},[c,e,o,u,d,s,a]),{status:c,paneRef:u,tabRef:d}}function ki({repo:e,authed:t,hot:n,clockSkewMs:r,resumeTick:i,handle:a}){let[o,s]=(0,M.useState)(`status`),[c,l]=(0,M.useState)(``),[u,d]=(0,M.useState)(!1),[f,p]=(0,M.useState)({kind:`empty`}),[m,h]=(0,M.useState)(e);m!==e&&(h(e),p({kind:`empty`}),s(`status`));let g=(0,M.useRef)(0),_=(0,M.useCallback)(()=>{g.current+=1},[]),v=(0,M.useCallback)(()=>p({kind:`empty`}),[]),{status:y}=Oi({repo:e,authed:t,resumeTick:i,tab:o,pane:f,setPane:p,handle:a,paneRequestRef:g}),b=n?.enabled?n.window_secs*1e3:0,x=Bt(y?.files,b,r??0),S=Di({repo:e,authed:t,tab:o,filter:c,head:y?y.head??null:void 0,handle:a}),C=Ti({repo:e,authed:t,tab:o,head:y?y.head??null:void 0,branch:y?.branch,refs:y?.refs,upstream:y?.tracking?.upstream}),w=S.setCommitDrillDown,T=S.resetLog;(0,M.useLayoutEffect)(()=>{_(),w(null),T()},[e,_,w,T]);let ee=c.toLowerCase(),te=(0,M.useMemo)(()=>(y?.files??[]).filter(e=>e.path.toLowerCase().includes(ee)),[y?.files,ee]),E=(0,M.useMemo)(()=>(S.commitDrillDown?.files??[]).filter(e=>e.path.toLowerCase().includes(ee)||e.old_path?.toLowerCase().includes(ee)),[S.commitDrillDown?.files,ee]);return{screen:{tab:o,setTab:s,filter:c,setFilter:l,filterOpen:u,setFilterOpen:d,pane:f,setPane:p},request:{paneRequestRef:g,bumpPaneRequest:_,clearPane:v},status:{value:y,files:te,now:x,hotWindowMs:b},log:{...S,decorations:C,visibleCommitFiles:E}}}var Ai=`nightcrow.mobileView`;function ji(e){return e===`diff`||e===`terminal`||e===`files`?e:`files`}function Mi(){try{return ji(localStorage.getItem(Ai))}catch{return`files`}}function Ni(){let[e,t]=(0,M.useState)(Mi);return{mobileView:e,setMobileView:(0,M.useCallback)(e=>{try{localStorage.setItem(Ai,e)}catch{}t(e)},[])}}function Pi({repo:e,handle:t,setPane:n,paneRequestRef:r,setCommitDrillDown:i,setMobileView:a,setPreviewRendered:o,statusRef:s,track:c}){let l=(0,M.useCallback)(e=>{let t=s.current?.files.find(t=>t.path===e);return t?gn(t):!1},[s]);return{openDiff:(0,M.useCallback)((i,o)=>{if(!e)return;o?.restoring||a(`diff`);let s=r.current+=1;c(s,j.diff(e,i)).then(e=>{s===r.current&&n({kind:`diff`,value:e,source:l(i)&&_n(e)?{kind:`workdir`,path:i}:void 0})}).catch(e=>{if(s!==r.current)return k(e)?t(e):void 0;if(!o?.restoring)return t(e);k(e)&&t(e),n({kind:`empty`})})},[e,t,n,r,a,l,c]),openFile:(0,M.useCallback)((i,s)=>{if(!e)return;s?.restoring||a(`diff`),o(!0);let l=r.current+=1;c(l,j.file(e,i)).then(e=>{l===r.current&&n({kind:`file`,value:e})}).catch(e=>{if(l!==r.current)return k(e)?t(e):void 0;if(!s?.restoring)return t(e);k(e)&&t(e),n({kind:`empty`})})},[e,t,n,r,a,o,c]),openCommit:(0,M.useCallback)(i=>{if(!e)return;a(`diff`);let o=r.current+=1;c(o,j.commit(e,i)).then(e=>{o===r.current&&n({kind:`diff`,value:e})}).catch(e=>{o===r.current&&t(e)})},[e,t,n,r,a,c]),openCommitFileDiff:(0,M.useCallback)((i,o,s)=>{if(!e)return;s?.restoring||a(`diff`);let l=r.current+=1;c(l,j.commitFileDiff(e,i,o)).then(e=>{l===r.current&&n({kind:`diff`,value:e,source:_n(e)?{kind:`commit`,oid:i,path:o}:void 0})}).catch(e=>{if(l!==r.current)return k(e)?t(e):void 0;if(!s?.restoring)return t(e);k(e)&&t(e),n({kind:`empty`})})},[e,t,n,r,a,c]),openCommitFiles:(0,M.useCallback)(async o=>{if(!e)return;a(`diff`);let s=r.current+=1;try{let t=await c(s,j.commitFiles(e,o.oid));if(s!==r.current)return;if(i({commit:o,...t}),t.files.length===0){n({kind:`empty`});return}let a=await c(s,j.commit(e,o.oid));s===r.current&&n({kind:`diff`,value:a})}catch(e){s===r.current&&t(e)}},[e,t,n,r,i,a,c]),showOtherFace:(0,M.useCallback)((i,a=0)=>{let s=hn(i);if(!e||!s)return;let{source:u}=s,d=s.want===`file`,f=d&&i.kind===`diff`?sn(i.value,a):null,p=r.current+=1,m=u.kind===`workdir`?d?j.file(e,u.path):j.diff(e,u.path):d?j.commitFile(e,u.oid,u.path):j.commitFileDiff(e,u.oid,u.path);d&&o(!1),c(p,m).then(e=>{p===r.current&&n(d?{kind:`file`,value:e,source:u,anchor:f===null?void 0:cn(f)+1}:{kind:`diff`,value:e,source:_n(e)&&(u.kind!==`workdir`||l(u.path))?u:void 0})}).catch(e=>{p===r.current&&t(e)})},[e,t,n,r,o,l,c])}}function Fi(){let[e,t]=(0,M.useState)(null),n=(0,M.useCallback)((e,n)=>{t(e);let r=()=>t(t=>t===e?null:t);return n.then(r,r),n},[]);return{loading:e!==null,track:n}}function Ii({repo:e,handle:t,pane:n,setPane:r,paneRequestRef:i,setCommitDrillDown:a,status:o}){let{mobileView:s,setMobileView:c}=Ni(),[l,u]=(0,M.useState)(!0),{loading:d,track:f}=Fi(),p=(0,M.useRef)(o);p.current=o;let{openDiff:m,openFile:h,openCommit:g,openCommitFileDiff:_,openCommitFiles:v,showOtherFace:y}=Pi({repo:e,handle:t,setPane:r,paneRequestRef:i,setCommitDrillDown:a,setMobileView:c,setPreviewRendered:u,statusRef:p,track:f}),b=(0,M.useMemo)(()=>({openDiff:m,openFile:h,openCommit:g,openCommitFileDiff:_,openCommitFiles:v,showOtherFace:y}),[m,h,g,_,v,y]);return(0,M.useMemo)(()=>({openers:b,pane:n,setPane:r,paneLoading:d,previewRendered:l,setPreviewRendered:u,mobileView:s,setMobileView:c}),[b,n,r,d,l,s,c])}var Li=[`status`,`log`,`tree`];function Ri(){return{tab:`status`,file:null,tree_expanded:[]}}function zi(e,t){return{path:e,commit:null,face:t}}function Bi(e,t,n){return{path:t,commit:e,face:n}}function Vi(e){return[...e].sort().slice(0,200)}function Hi(e){let t=e?.file;return!t||!t.path?{kind:`none`}:t.commit?{kind:`commitDiff`,oid:t.commit,path:t.path}:t.face===`source`?{kind:`file`,path:t.path}:{kind:`diff`,path:t.path}}function Ui(e){let t=e?.tab;return t&&Li.includes(t)?t:`status`}function Wi(e,t){return e?e.tab===t.tab&&e.tree_expanded.length===t.tree_expanded.length&&e.tree_expanded.every((e,n)=>e===t.tree_expanded[n])&&Gi(e.file,t.file):!1}function Gi(e,t){return!e||!t?e===t:e.path===t.path&&e.commit===t.commit&&e.face===t.face}function Ki({repo:e,known:t,remembered:n,latest:r,remember:i,setTab:a,openDiff:o,openFile:s,openCommitFileDiff:c}){let l=(0,M.useRef)(null),u=(0,M.useRef)(null),d=(0,M.useRef)(new Map),[f,p]=(0,M.useState)(!1),m=(0,M.useRef)(!1);(0,M.useEffect)(()=>{if(u.current!==e&&(u.current=e,l.current=null,m.current=!1,p(!1)),!e||!t||l.current===e)return;l.current=e;let r=d.current.get(e);d.current.delete(e);let f=r?{...n??Ri(),...r}:n;if(r&&i(e,f),m.current)return;a(Ui(f));let h=Hi(f);if(h.kind===`none`)return;let g={restoring:!0};h.kind===`diff`?o(h.path,g):h.kind===`file`?s(h.path,g):c(h.oid,h.path,g)},[e,t,n,i,a,o,s,c]);let h=(0,M.useCallback)(t=>{if(e){if(m.current=!0,p(!0),l.current!==e){let n=d.current.get(e);d.current.set(e,{...n,...t})}else i(e,{...r(e)??Ri(),...t})}},[e,r,i]);return{touched:f,noteTab:(0,M.useCallback)(e=>h({tab:e}),[h]),noteFile:(0,M.useCallback)(e=>h({file:e}),[h]),noteTree:(0,M.useCallback)(e=>h({tree_expanded:Vi(e)}),[h])}}function qi({repo:e,known:t,remembered:n,latest:r,remember:i,setTab:a,clearPane:o,openers:s}){let c=Ki({repo:e,known:t,remembered:n,latest:r,remember:i,setTab:a,openDiff:s.openDiff,openFile:s.openFile,openCommitFileDiff:s.openCommitFileDiff}),{noteFile:l,noteTab:u,noteTree:d}=c,f=(0,M.useCallback)(e=>{u(e),a(e)},[u,a]),p=(0,M.useCallback)(()=>{l(null),o()},[l,o]),m=(0,M.useMemo)(()=>({openDiff:e=>{l(zi(e,`diff`)),s.openDiff(e)},openFile:e=>{l(zi(e,`source`)),s.openFile(e)},openCommit:e=>{l(null),s.openCommit(e)},openCommitFiles:e=>(l(null),s.openCommitFiles(e)),openCommitFileDiff:(e,t)=>{l(Bi(e,t,`diff`)),s.openCommitFileDiff(e,t)}}),[s,l]),h=(0,M.useCallback)((e,t)=>{l(e.kind===`commit`?Bi(e.oid,e.path,t):zi(e.path,t))},[l]);return{...c,noteTree:d,chooseTab:f,forgetPane:p,asked:m,noteOtherFace:h}}function Ji({project:e,view:t,layout:n}){let{repo:r,repos:i,authed:a,hot:o,clockSkewMs:s,resumeTick:c,handle:l}=e,u=ki({repo:r,authed:a,hot:o,clockSkewMs:s,resumeTick:c,handle:l}),d=Ii({repo:r,handle:l,pane:u.screen.pane,setPane:u.screen.setPane,paneRequestRef:u.request.paneRequestRef,setCommitDrillDown:u.log.setCommitDrillDown,status:u.status.value}),f=qi({repo:r,known:t.known,remembered:t.remembered,latest:t.latest,remember:t.remember,setTab:u.screen.setTab,clearPane:u.request.clearPane,openers:d.openers}),p=u.screen.tab,{bumpPaneRequest:m}=u.request,{setCommitDrillDown:h,resetLog:g}=u.log,{chooseTab:_,forgetPane:v}=f,y=(0,M.useCallback)(e=>void xi(p,e,{bumpPaneRequest:m,leaveLog:()=>{h(null),g()},recordTab:_,forgetPane:v}),[p,m,h,g,_,v]);Si(u.log.commits,u.log.commitDrillDown,u.log.setCommitDrillDown,u.request.bumpPaneRequest,f.forgetPane);let b=n.maximizedPanelOf(r),x=n.setMaximizedFor,S=(0,M.useCallback)(e=>x(r,e),[r,x]),C=d.pane,w=d.openers.showOtherFace,T=f.noteOtherFace,ee=(0,M.useCallback)(e=>{let t=hn(C);t&&T(t.source,t.want===`file`?`source`:`diff`),w(C,e)},[C,T,w]);return{setPane:d.setPane,setTab:u.screen.setTab,clearPane:u.request.clearPane,maximized:b,tab:p,chooseTab:y,setMaximized:S,repoShell:r?{repository:{id:r,current:i.find(e=>e.id===r),status:u.status.value},sidebar:{tab:u.screen.tab,filter:u.screen.filter,setFilter:u.screen.setFilter,filterOpen:u.screen.filterOpen,setFilterOpen:u.screen.setFilterOpen,files:u.status.files,now:u.status.now,hotWindowMs:u.status.hotWindowMs,...d.openers,...f.asked,chooseTab:y,authed:a,handle:l,bumpPaneRequest:u.request.bumpPaneRequest,...u.log,restoreTree:t.remembered?.tree_expanded??[],restoreKnown:t.known,onTreeExpanded:f.noteTree,clearPane:f.forgetPane,touched:f.touched},filePane:{repo:r,pane:d.pane,loading:d.paneLoading,previewRendered:d.previewRendered,setPreviewRendered:d.setPreviewRendered,showOtherFace:ee},layout:{...n.shell,maximized:b,setMaximized:S,mobileView:d.mobileView,setMobileView:d.setMobileView}}:null}}function Yi(){let[e,t]=(0,M.useState)(0);return(0,M.useEffect)(()=>{let e=()=>{document.visibilityState===`visible`&&t(e=>e+1)};return document.addEventListener(`visibilitychange`,e),window.addEventListener(`online`,e),()=>{document.removeEventListener(`visibilitychange`,e),window.removeEventListener(`online`,e)}},[]),e}var Xi=[{name:`yellow`,color:`#d9a441`},{name:`cyan`,color:`#03c4db`},{name:`green`,color:`#77c47a`},{name:`magenta`,color:`#dc8fd5`},{name:`blue`,color:`#87acfd`}],Zi=`nightcrow.viewer.accent`;function Qi(e){if(!Number.isFinite(e))return 0;let t=Xi.length;return(Math.trunc(e)%t+t)%t}function $i(){try{let e=localStorage.getItem(Zi);return e===null?0:Qi(Number(e))}catch{return 0}}function ea(e){try{localStorage.setItem(Zi,String(e))}catch{}}function ta(){let[e,t]=(0,M.useState)($i);(0,M.useLayoutEffect)(()=>{document.documentElement.style.setProperty(`--color-accent`,Xi[e].color)},[e]);let n=(0,M.useCallback)(()=>{t(e=>{let t=Qi(e+1);return ea(t),j.setAccent(t).catch(()=>{}),t})},[]),r=(0,M.useCallback)(e=>{t(t=>{let n=Qi(e);return n===t?t:(ea(n),n)})},[]);return{accent:Xi[e],next:Xi[Qi(e+1)],cycle:n,adopt:r}}function na(e){return Number.isFinite(e)?Math.min(Math.max(e,20),85):55}function ra(e){return Math.round(na(e))}function ia(e,t,n,r){let i=n-t;return na(i<=0?r:(e-t)/i*100)}var aa=`nightcrow.upperPct`;function oa(){try{let e=Number(localStorage.getItem(aa));return Number.isFinite(e)&&e>0?ra(e):55}catch{return 55}}function sa(e){try{localStorage.setItem(aa,String(e))}catch{}}function ca(){let[e,t]=(0,M.useState)(oa);return{pct:e,resize:(0,M.useCallback)(e=>{t(na(e))},[]),commit:(0,M.useCallback)(e=>{let n=ra(e);t(n),sa(n),j.setUpperPct(n).catch(()=>{})},[]),reset:(0,M.useCallback)(()=>{t(55),sa(55),j.setUpperPct(55).catch(()=>{})},[]),adopt:(0,M.useCallback)(e=>{t(t=>{let n=ra(e);return n===t?t:(sa(n),n)})},[])}}function F(){let[e,t]=(0,M.useState)({}),n=(0,M.useRef)(e),r=(0,M.useCallback)(e=>{n.current=e,t(e)},[]),i=(0,M.useRef)(0),a=(0,M.useRef)(new Map),o=(0,M.useCallback)(e=>{let t=a.current.get(e);if(t)return t;let n=ni(t=>j.setMaximized(e,t===`none`?null:t));return a.current.set(e,n),n},[]),s=(0,M.useCallback)((e,t)=>{if(e==null)return;let a=n.current,s=typeof t==`function`?t(a[e]??`none`):t;i.current+=1,o(e)(s);let{[e]:c,...l}=a;r(s===`none`?l:{...a,[e]:s})},[o,r]);return{panelOf:(0,M.useCallback)(t=>t!=null&&e[t]||`none`,[e]),setFor:s,adopt:(0,M.useCallback)(e=>{I(n.current,e)||r(e)},[r]),writes:i}}function I(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>e[n]===t[n])}function la(){let[e,t]=(0,M.useState)({}),n=(0,M.useRef)(e),r=(0,M.useCallback)(e=>{n.current=e,t(e)},[]),i=(0,M.useRef)(0),a=(0,M.useRef)(new Map),o=(0,M.useCallback)(e=>{let t=a.current.get(e);if(t)return t;let n=ni(t=>j.setRepoView(e,t));return a.current.set(e,n),n},[]),s=(0,M.useCallback)((e,t)=>{e!=null&&(Wi(n.current[e],t)||(i.current+=1,o(e)(t),r({...n.current,[e]:t})))},[o,r]),c=(0,M.useCallback)(t=>t==null?void 0:e[t],[e]),l=(0,M.useCallback)(e=>n.current[e],[]),u=(0,M.useRef)(new Set),[d,f]=(0,M.useState)(0);return{viewOf:c,rememberedFor:l,remember:s,adopt:(0,M.useCallback)((e,t)=>{let i=u.current;(i.size!==t.length||t.some(e=>!i.has(e)))&&(u.current=new Set(t),f(e=>e+1)),!ua(n.current,e)&&r(e)},[r]),covers:(0,M.useCallback)(e=>e!=null&&u.current.has(e),[d]),writes:i}}function ua(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>t[n]!==void 0&&Wi(e[n],t[n]))}function da(){let{accent:e,next:t,cycle:n,adopt:r}=ta(),{width:i,resize:a,commit:o,reset:s}=ot(),{pct:c,resize:l,commit:u,reset:d,adopt:f}=ca(),p=F(),m=la(),h=(0,M.useRef)(0),g=(0,M.useRef)(0);return{accent:e,next:t,cycle:(0,M.useCallback)(()=>{h.current+=1,n()},[n]),adoptAccent:r,accentWrites:h,sidebarWidth:i,resizeSidebar:a,commitSidebarWidth:o,resetSidebarWidth:s,upperPct:c,resizeUpperPct:l,commitUpperPct:(0,M.useCallback)(e=>{g.current+=1,u(e)},[u]),resetUpperPct:(0,M.useCallback)(()=>{g.current+=1,d()},[d]),bumpUpperPctWrites:(0,M.useCallback)(()=>{g.current+=1},[]),adoptUpperPct:f,upperPctWrites:g,maximizedPanelOf:p.panelOf,setMaximizedFor:p.setFor,adoptMaximized:p.adopt,maximizedWrites:p.writes,viewOf:m.viewOf,rememberedViewFor:m.rememberedFor,rememberView:m.remember,adoptViews:m.adopt,viewCovers:m.covers,viewWrites:m.writes}}var fa=400;function pa({value:e,valueAt:t,onGestureStart:n,resize:r,commit:i,reset:a,axis:o}){let s=(0,M.useRef)(0),c=(0,M.useRef)(0),l=(0,M.useRef)(!1),u=(0,M.useRef)(!1),d=(0,M.useRef)(0),[f,p]=(0,M.useState)(!1);return{dragging:f,onDragStart:(0,M.useCallback)(t=>{t.button===0&&t.isPrimary&&n()&&(s.current=o===`x`?t.clientX:t.clientY,c.current=e,l.current=!0,u.current=!1,p(!0),t.currentTarget.setPointerCapture(t.pointerId),t.preventDefault())},[e,n,o]),onDragMove:(0,M.useCallback)(e=>{if(!l.current)return;let n=o===`x`?e.clientX:e.clientY;if(!u.current&&Math.abs(n-s.current)<3)return;let i=t(e);i!==null&&(u.current=!0,c.current=i,r(i))},[t,r,o]),onDragEnd:(0,M.useCallback)(()=>{if(!l.current)return;if(l.current=!1,p(!1),u.current){i(c.current),d.current=0;return}let e=Date.now();e-d.current{l.current=!1,u.current=!1,d.current=0,p(!1)},[]),draggingRef:l}}function ma({sidebarRef:e,sidebarWidth:t,resizeSidebar:n,commitSidebarWidth:r,resetSidebarWidth:i}){let a=(0,M.useRef)(0),o=(0,M.useCallback)(()=>{let t=e.current?.getBoundingClientRect().left;return t!==void 0&&(a.current=t,!0)},[e]),{dragging:s,onDragStart:c,onDragMove:l,onDragEnd:u,onDragCancel:d}=pa({value:t,valueAt:(0,M.useCallback)(e=>e.clientX-a.current,[]),onGestureStart:o,resize:n,commit:r,reset:i,axis:`x`});return{draggingSidebar:s,onSidebarDragStart:c,onSidebarDragMove:l,onSidebarDragEnd:u,onSidebarDragCancel:d}}function ha({upperRef:e,lowerRef:t,upperPct:n,resizeUpperPct:r,commitUpperPct:i,resetUpperPct:a,bumpUpperPctWrites:o}){let s=(0,M.useRef)(0),c=(0,M.useRef)(0),l=(0,M.useCallback)(()=>{let n=e.current?.getBoundingClientRect().top,r=t.current?.getBoundingClientRect().bottom;return n===void 0||r===void 0?!1:(s.current=n,c.current=r,o(),!0)},[e,t,o]),{dragging:u,onDragStart:d,onDragMove:f,onDragEnd:p,onDragCancel:m,draggingRef:h}=pa({value:n,valueAt:(0,M.useCallback)(e=>ia(e.clientY,s.current,c.current,n),[n]),onGestureStart:l,resize:r,commit:i,reset:a,axis:`y`});return{draggingUpper:u,onUpperDragStart:d,onUpperDragMove:f,onUpperDragEnd:p,onUpperDragCancel:m,upperDraggingRef:h}}function ga(){let{accent:e,next:t,cycle:n,adoptAccent:r,accentWrites:i,sidebarWidth:a,resizeSidebar:o,commitSidebarWidth:s,resetSidebarWidth:c,upperPct:l,resizeUpperPct:u,commitUpperPct:d,resetUpperPct:f,bumpUpperPctWrites:p,adoptUpperPct:m,upperPctWrites:h,maximizedPanelOf:g,setMaximizedFor:_,adoptMaximized:v,maximizedWrites:y,viewOf:b,rememberedViewFor:x,rememberView:S,adoptViews:C,viewCovers:w,viewWrites:T}=da(),ee=(0,M.useRef)(null),te=(0,M.useRef)(null),E=(0,M.useRef)(null),ne=ma({sidebarRef:ee,sidebarWidth:a,resizeSidebar:o,commitSidebarWidth:s,resetSidebarWidth:c}),re=ha({upperRef:te,lowerRef:E,upperPct:l,resizeUpperPct:u,commitUpperPct:d,resetUpperPct:f,bumpUpperPctWrites:p});return{accent:e,next:t,cycle:n,upperPct:l,maximizedPanelOf:g,setMaximizedFor:_,viewOf:b,rememberedViewFor:x,rememberView:S,viewCovers:w,shell:{sidebarWidth:a,sidebarRef:ee,upperRef:te,lowerRef:E,draggingSidebar:ne.draggingSidebar,onSidebarDragStart:ne.onSidebarDragStart,onSidebarDragMove:ne.onSidebarDragMove,onSidebarDragEnd:ne.onSidebarDragEnd,onSidebarDragCancel:ne.onSidebarDragCancel,draggingUpper:re.draggingUpper,onUpperDragStart:re.onUpperDragStart,onUpperDragMove:re.onUpperDragMove,onUpperDragEnd:re.onUpperDragEnd,onUpperDragCancel:re.onUpperDragCancel},guards:{adoptAccent:r,adoptUpperPct:m,adoptMaximized:v,adoptViews:C,accentWrites:i,upperPctWrites:h,maximizedWrites:y,viewWrites:T,upperDraggingRef:re.upperDraggingRef}}}var _a=`nightcrow.tabStripSide`;function va(){try{return Ke(localStorage.getItem(_a))??`top`}catch{return`top`}}function ya(e){try{localStorage.setItem(_a,e)}catch{}}function ba(){let[e,t]=(0,M.useState)(va);return{side:e,toggle:(0,M.useCallback)(()=>{t(e=>{let t=qe(e);return ya(t),t})},[])}}function xa(){let[e,t]=(0,M.useState)(null),[n,r]=(0,M.useState)(!1),[i,a]=(0,M.useState)(null),o=(0,M.useCallback)(e=>{k(e)?t(!1):me.error(e instanceof Error?e.message:`request failed`)},[]),s=Yi(),c=ga(),l=ba(),u=_i({authed:e,setAuthed:t,handle:o,resumeTick:s,...c.guards}),d=Ji({project:{repo:u.repo,repos:u.repos,authed:e,hot:u.hot,clockSkewMs:u.clockSkewMs,resumeTick:s,handle:o},view:{known:c.viewCovers(u.repo),remembered:c.viewOf(u.repo),latest:c.rememberedViewFor,remember:c.rememberView},layout:{shell:c.shell,maximizedPanelOf:c.maximizedPanelOf,setMaximizedFor:c.setMaximizedFor}}),{selectOpenedRepo:f,closeRepo:p}=bi({repo:u.repo,repos:u.repos,setRepos:u.setRepos,setRepo:u.setRepo,setPane:d.setPane,setTab:d.setTab,setPickerOpen:r,handle:o,orderWrites:u.orderWrites}),{busy:m,start:h}=ei(f,e===!0),g=u.repo,_=u.setRepo,v=d.clearPane,y=(0,M.useCallback)(e=>{e!==g&&(_(e),v())},[g,_,v]),b=u.repos.find(e=>e.id===i),x=(0,M.useCallback)(()=>a(null),[]),S=(0,M.useCallback)(()=>r(!0),[]),C=(0,M.useCallback)(()=>r(!1),[]),w=vi(),T=Xr({enabled:e===!0,repo:u.repo,repos:u.repos,selectRepo:y,closeRepo:p,openPicker:S,pickerOpen:n,cycleAccent:c.cycle,reloadConfig:w.reload,tab:d.tab,chooseTab:d.chooseTab,maximized:d.maximized,setMaximized:d.setMaximized,mobileView:d.repoShell?.layout.mobileView??`files`});return{authed:e,login:(0,M.useCallback)(()=>t(null),[]),reposLoaded:u.reposLoaded,rows:br(u.repo,d.maximized),upperPct:c.upperPct,header:{repos:u.repos,repo:u.repo,onSelectRepo:y,onCloseRepo:a,onOpenPicker:S,cloning:m,accent:c.accent,next:c.next,cycle:c.cycle,draggingRepo:u.draggingRepo,dragOverRepo:u.dragOverRepo,onRepoDragStart:u.onRepoDragStart,onRepoDragMove:u.onRepoDragMove,onRepoDragEnd:u.onRepoDragEnd,onReloadConfig:w.reload,reloading:w.pending,tabStrip:l},tabStrip:l,shortcutHelp:T.shortcutHelp,leader:T.settings,hint:T.hint,repoShell:d.repoShell,closeConfirm:b?{label:b.name,detail:`Its terminals and the processes running in them will be terminated.`,onConfirm:()=>{a(null),p(b.id)},onCancel:x}:null,picker:n?{onClose:C,onOpened:f,canClone:u.canClone,cloning:m,onClone:h}:null}}function Sa(){let e=xa();return e.authed===null?(0,N.jsx)(Qe,{}):e.authed?e.reposLoaded?(0,N.jsx)(O,{children:(0,N.jsx)(se,{children:(0,N.jsx)(y,{leader:e.leader.leader,children:(0,N.jsxs)(`div`,{className:`nc-fade-in flex h-full flex-col`,children:[(0,N.jsx)(Je,{...e.header,onShowShortcuts:e.shortcutHelp.show}),(0,N.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[e.tabStrip.side===`left`&&(0,N.jsx)(`aside`,{className:`hidden w-48 shrink-0 flex-col border-r border-chrome-line bg-ink-950 md:flex`,children:(0,N.jsx)(Ve,{side:`left`,...e.header})}),(0,N.jsxs)(`div`,{className:`grid min-h-0 min-w-0 flex-1 grid-cols-[minmax(0,1fr)] ${e.rows}`,style:{"--nc-upper":`${e.upperPct}fr`,"--nc-lower":`${100-e.upperPct}fr`},children:[e.repoShell?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(er,{...e.repoShell}),(0,N.jsx)(vr,{...e.hint})]}):(0,N.jsxs)(`div`,{className:`flex items-center justify-center p-6 text-center text-ink-400`,children:[(0,N.jsxs)(`span`,{className:`md:hidden`,children:[`No repository open. Tap`,` `,(0,N.jsx)(`span`,{className:`text-ink-200`,children:`No project`}),` above, then`,` `,(0,N.jsx)(`span`,{className:`text-ink-200`,children:`+ open`}),`, to add one.`]}),(0,N.jsxs)(`span`,{className:`hidden md:inline`,children:[`No repository open. Click`,` `,(0,N.jsx)(`span`,{className:`text-ink-200`,children:`+ open`}),` `,e.tabStrip.side===`left`?`beside`:`above`,` to add one.`]})]}),e.picker&&(0,N.jsx)(Me,{...e.picker}),e.closeConfirm&&(0,N.jsx)(D,{...e.closeConfirm}),e.shortcutHelp.open&&(0,N.jsx)(sr,{onClose:e.shortcutHelp.hide,leader:e.leader})]})]})]})})})}):(0,N.jsx)(Qe,{}):(0,N.jsx)($e,{onSuccess:e.login})}var Ca={error:7e3,info:5e3,success:5e3},wa={error:`text-removed`,info:`text-accent`,success:`text-added`};function Ta(){let[e,t]=(0,M.useState)([]);return(0,M.useEffect)(()=>ie(t),[]),e.length===0?null:(0,N.jsx)(`div`,{className:`pointer-events-none fixed right-3 top-3 z-[60] flex w-80 max-w-[calc(100vw-1.5rem)] flex-col gap-2`,"aria-live":`polite`,children:e.map(e=>(0,N.jsx)(Ea,{toast:e},e.id))})}function Ea({toast:e}){let[t,n]=(0,M.useState)(!1);return(0,M.useEffect)(()=>{if(t||e.sticky)return;let n=setTimeout(()=>be(e.id),Ca[e.kind]);return()=>clearTimeout(n)},[e.id,e.kind,e.bump,e.sticky,t]),(0,N.jsxs)(`div`,{role:e.kind===`error`?`alert`:`status`,className:`nc-slide-in pointer-events-auto flex items-start gap-2 rounded-md border border-ink-700 bg-ink-850 px-3 py-2 text-xs shadow-lg`,onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),children:[(0,N.jsx)(`span`,{className:`min-w-0 flex-1 break-words ${wa[e.kind]}`,children:e.message}),e.action&&(0,N.jsx)(`button`,{type:`button`,onClick:e.action.run,className:`shrink-0 rounded-sm border border-ink-700 px-1.5 py-0.5 text-ink-200 hover:border-accent hover:text-accent`,children:e.action.label}),(0,N.jsx)(`button`,{type:`button`,onClick:()=>be(e.id),"aria-label":`dismiss`,className:`mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:bg-ink-700 hover:text-ink-200`,children:(0,N.jsx)(_e,{className:`h-3 w-3`})})]})}xe(document.documentElement,window),b(c()),ui(document.querySelector(`meta[name="nightcrow-build"]`)?.getAttribute(`content`)||null);var Da=1500;await Promise.race([document.fonts?.load(`400 12px "JetBrains Mono"`).catch(()=>void 0),new Promise(e=>setTimeout(e,Da))]),(0,je.createRoot)(document.getElementById(`root`)).render((0,N.jsxs)(M.StrictMode,{children:[(0,N.jsx)(In,{children:(0,N.jsx)(he,{children:(0,N.jsx)(Sa,{})})}),(0,N.jsx)(Ta,{})]})); \ No newline at end of file +`)}function sn(e,t=0){if(new Set(e.hunks.map(t=>t.file_path??e.path)).size>1)return null;for(let n of e.hunks.slice(Math.max(0,t)))for(let e of n.lines)if(e.new_lineno!==void 0)return e.new_lineno;return null}function cn(e){return Math.max(0,e-1-2)}function ln(e,t){return t<=0?null:Math.min(e,t)}function un(e,t){let n=0;return e.forEach((e,r)=>{e<=t&&(n=r)}),n}var dn=600;function fn(e){let[t,n]=(0,M.useState)({scrollTop:0,height:dn}),r=(0,M.useCallback)(()=>{let t=e.current;if(!t)return;let r={scrollTop:t.scrollTop,height:t.clientHeight||dn};n(e=>e.scrollTop===r.scrollTop&&e.height===r.height?e:r)},[e]);return(0,M.useLayoutEffect)(()=>{r();let t=e.current;if(!t||typeof ResizeObserver>`u`)return;let n=new ResizeObserver(r);return n.observe(t),()=>n.disconnect()},[e,r]),{viewport:t,refresh:r}}function pn(e,t,n,r=20,i=12){let a=Math.max(1,Math.ceil(n/r)),o=Math.min(Math.floor(Math.max(0,t)/r),Math.max(0,e-a)),s=o+a,c=Math.max(0,Math.min(e,o-i)),l=Math.max(c,Math.min(e,s+i));return{start:c,end:l,before:c*r,after:(e-l)*r}}function mn(e){return Math.max(0,e-1)*20}function hn(e){return e.kind===`empty`||!e.source?null:{want:e.kind===`diff`?`file`:`diff`,source:e.source}}function gn(e){return e.index!==`D`&&e.worktree!==`D`}function _n(e){return e.hunks.some(e=>e.lines.some(e=>e.old_lineno!==void 0||e.new_lineno!==void 0))}function vn(e){return e.kind===`workdir`?`workdir:${e.path}`:`commit:${e.oid}:${e.path}`}function yn({pane:e,previewRendered:t,setPreviewRendered:n,filesMax:r,setMaximized:o,onShowOtherFace:s,canEdit:c,editing:u,onToggleEdit:d}){let f=$t(),p=a();return(0,N.jsxs)(`div`,{className:`ml-auto flex shrink-0 items-center gap-1`,children:[hn(e)&&(0,N.jsx)(`button`,{onClick:s,"aria-pressed":e.kind===`file`,title:e.kind===`file`?`Back to the diff`:`Open the whole file at this change`,"aria-label":e.kind===`file`?`Back to the diff`:`Open the whole file at this change`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${e.kind===`file`?`text-accent`:``}`,children:(0,N.jsx)(l,{})}),e.kind===`diff`&&(0,N.jsx)(`button`,{onClick:f.toggle,"aria-pressed":f.layout===`split`,title:f.layout===`split`?`Switch to unified diff`:`Switch to split diff`,"aria-label":f.layout===`split`?`Switch to unified diff`:`Switch to split diff`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${f.layout===`split`?`text-accent`:``}`,children:(0,N.jsx)(g,{})}),c&&(0,N.jsx)(`button`,{onClick:d,"aria-pressed":u,title:u?`Stop editing`:`Edit this page's text`,"aria-label":u?`Stop editing`:`Edit this page's text`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${u?`text-accent`:``}`,children:(0,N.jsx)(Se,{})}),e.kind===`file`&&an(e.value.path)&&!u&&(0,N.jsx)(`button`,{onClick:()=>n(e=>!e),"aria-pressed":t,title:t?`Show raw source`:`Show the rendered page`,"aria-label":t?`Show raw source`:`Show the rendered page`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${t?`text-accent`:``}`,children:(0,N.jsx)(fe,{})}),(0,N.jsx)(`button`,{onClick:()=>o(r?`none`:`files`),"aria-pressed":r,...p(`view.toggleMaximize`,r?`Restore the layout`:`Maximize the file pane`),"aria-label":r?`Restore the layout`:`Maximize the file pane`,className:`hidden shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent md:flex`,children:(0,N.jsx)(i,{maximized:r})})]})}var bn=3;function xn(e){let t=e<1?1:String(Math.floor(e)).length;return Math.max(t,bn)}function Sn(e){let t=0;for(let n of e)for(let e of n.lines)t=Math.max(t,e.old_lineno??0,e.new_lineno??0);return xn(t)}function Cn({nos:e,digits:t,tint:n=``,stickyClass:r=`sticky left-0`}){return(0,N.jsx)(`span`,{className:`${r} shrink-0 select-none bg-ink-950`,children:(0,N.jsx)(`span`,{className:`flex gap-[1ch] px-[1ch] text-ink-400 ${n}`,children:e.map((e,n)=>(0,N.jsx)(`span`,{className:`text-right`,style:{width:`${t}ch`},children:e??``},n))})})}function wn(){let e=`(min-width: 768px)`,[t,n]=(0,M.useState)(()=>window.matchMedia(e).matches);return(0,M.useEffect)(()=>{let t=window.matchMedia(e),r=()=>n(t.matches);return t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[]),t}function Tn(e,t,n){return e.hunks.flatMap((e,r)=>{let i={kind:`header`,hunk:r,text:`${e.file_path?`${e.file_path} `:``}${e.header}`};if(!t)return[i,...e.lines.map(e=>({kind:`unified`,hunk:r,line:e}))];let a=Qt(e.lines);return n?[i,...a.map(({left:e,right:t})=>({kind:`pair`,hunk:r,left:e,right:t}))]:[i,...a.map(({left:e})=>({kind:`side`,hunk:r,line:e,side:`old`,border:!1})),...a.map(({right:e},t)=>({kind:`side`,hunk:r,line:e,side:`new`,border:t===0}))]})}function En({line:e}){return(0,N.jsxs)(`span`,{className:`whitespace-pre pr-3`,children:[(0,N.jsx)(`span`,{className:`select-none text-ink-400`,children:e.kind}),e.spans.map((e,t)=>(0,N.jsx)(`span`,{style:{color:e.c},children:e.t},t))]})}function Dn({line:e,side:t,digits:n,stickyClass:r}){let i=e?Ut(e.kind):`bg-ink-900/40`;return(0,N.jsxs)(`div`,{className:`flex min-w-0 flex-1 ${i}`,children:[(0,N.jsx)(Cn,{nos:[e?t===`old`?e.old_lineno:e.new_lineno:void 0],digits:n,tint:i,stickyClass:r}),e?(0,N.jsx)(En,{line:e}):(0,N.jsx)(`span`,{className:`pr-3`,children:` `})]})}function On({diff:e,split:t,viewport:n}){let r=wn(),i=(0,M.useMemo)(()=>Tn(e,t,r),[e,t,r]),a=Sn(e.hunks),o=pn(i.length,n.scrollTop,n.height);return(0,N.jsxs)(`div`,{className:`min-w-full py-1`,"data-virtual-count":i.length,children:[(0,N.jsx)(`div`,{"aria-hidden":`true`,style:{height:o.before}}),i.slice(o.start,o.end).map((e,t)=>{let n=o.start+t,r={"data-hunk":e.hunk,"data-virtual-row":n};if(e.kind===`header`)return(0,N.jsx)(`div`,{...r,className:`h-5 bg-ink-850 px-3 text-ink-400`,children:e.text},n);if(e.kind===`unified`){let t=Ut(e.line.kind);return(0,N.jsxs)(`div`,{...r,className:`flex h-5 w-max min-w-full ${t}`,children:[(0,N.jsx)(Cn,{nos:[e.line.old_lineno,e.line.new_lineno],digits:a,tint:t}),(0,N.jsx)(En,{line:e.line})]},n)}return e.kind===`pair`?(0,N.jsxs)(`div`,{...r,className:`flex h-5 min-w-full`,children:[(0,N.jsx)(Dn,{line:e.left,side:`old`,digits:a}),(0,N.jsx)(`div`,{className:`flex min-w-0 flex-1 border-l border-ink-800`,children:(0,N.jsx)(Dn,{line:e.right,side:`new`,digits:a,stickyClass:`sticky left-1/2`})})]},n):(0,N.jsx)(`div`,{...r,className:`flex h-5 min-w-full ${e.border?`border-t border-ink-800`:``}`,children:(0,N.jsx)(Dn,{line:e.line,side:e.side,digits:a})},n)}),(0,N.jsx)(`div`,{"aria-hidden":`true`,style:{height:o.after}})]})}function kn({line:e}){return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`span`,{className:`text-ink-400 select-none`,children:e.kind}),e.spans.map((e,t)=>(0,N.jsx)(`span`,{style:{color:e.c},children:e.t},t))]})}function An({line:e,digits:t,side:n}){if(e===null)return(0,N.jsxs)(`div`,{className:`flex bg-ink-900/40`,children:[(0,N.jsx)(Cn,{nos:[void 0],digits:t,tint:`bg-ink-900/40`}),(0,N.jsx)(`span`,{className:`whitespace-pre pr-3`,children:` `})]});let r=Ut(e.kind);return(0,N.jsxs)(`div`,{className:`flex ${r}`,children:[(0,N.jsx)(Cn,{nos:[n===`old`?e.old_lineno:e.new_lineno],digits:t,tint:r}),(0,N.jsx)(`span`,{className:`whitespace-pre pr-3`,children:(0,N.jsx)(kn,{line:e})})]})}function jn({cells:e,digits:t,side:n,border:r}){return(0,N.jsx)(`div`,{className:`min-w-0 flex-none overflow-x-auto md:flex-1 md:basis-1/2 ${r?`border-t border-ink-800 md:border-t-0 md:border-l`:``}`,children:(0,N.jsx)(`div`,{className:`w-max min-w-full`,children:e.map((e,r)=>(0,N.jsx)(An,{line:e,digits:t,side:n},r))})})}function Mn({lines:e,digits:t}){let n=Qt(e);return(0,N.jsxs)(`div`,{className:`flex flex-col md:flex-row`,children:[(0,N.jsx)(jn,{cells:n.map(e=>e.left),digits:t,side:`old`,border:!1}),(0,N.jsx)(jn,{cells:n.map(e=>e.right),digits:t,side:`new`,border:!0})]})}function Nn({diff:e,split:t,viewport:n={scrollTop:0,height:600}}){if(e.hunks.reduce((e,t)=>e+t.lines.length,0)>200)return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(On,{diff:e,split:t,viewport:n}),e.truncated&&(0,N.jsx)(`p`,{className:`p-3 text-accent`,children:`Diff truncated — it exceeded the server's size ceiling.`})]});let r=Sn(e.hunks);return(0,N.jsxs)(`div`,{className:`p-1`,children:[e.hunks.length===0&&(0,N.jsx)(`p`,{className:`p-3 text-ink-400`,children:`No changes.`}),e.hunks.map((e,n)=>{let i=(0,N.jsxs)(`div`,{className:`bg-ink-850 px-3 py-0.5 text-ink-400`,children:[e.file_path?`${e.file_path} `:``,e.header]});return(0,N.jsx)(`div`,{"data-hunk":n,className:`mb-2`,children:t?(0,N.jsxs)(N.Fragment,{children:[i,(0,N.jsx)(Mn,{lines:e.lines,digits:r})]}):(0,N.jsxs)(`div`,{className:`w-max min-w-full`,children:[i,e.lines.map((e,t)=>{let n=Ut(e.kind);return(0,N.jsxs)(`div`,{className:`flex ${n}`,children:[(0,N.jsx)(Cn,{nos:[e.old_lineno,e.new_lineno],digits:r,tint:n}),(0,N.jsx)(`span`,{className:`whitespace-pre pr-3`,children:(0,N.jsx)(kn,{line:e})})]},t)})]})},n)}),e.truncated&&(0,N.jsx)(`p`,{className:`p-3 text-accent`,children:`Diff truncated — it exceeded the server's size ceiling.`})]})}var Pn=[`failed to fetch dynamically imported module`,`error loading dynamically imported module`,`importing a module script failed`,`unable to preload css`];function Fn(e){let t=e instanceof Error?e.message:typeof e==`string`?e:``;if(!t)return!1;let n=t.toLowerCase();return Pn.some(e=>n.includes(e))}var In=class extends M.Component{state={error:null,failed:!1};static getDerivedStateFromError(e){return{error:e,failed:!0}}componentDidCatch(e,t){console.error(`nightcrow: a subtree failed to render`,e,t)}render(){return this.state.failed?(0,N.jsx)(Ln,{chunk:Fn(this.state.error),region:this.props.region,className:this.props.className}):this.props.children}};function Ln({chunk:e,region:t,className:n}){return(0,N.jsxs)(`div`,{role:`alert`,className:`h-full min-h-0 flex-col items-start gap-3 p-4 text-ink-400 ${n??`flex`}`,children:[e?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`p`,{className:`text-accent`,children:`Part of the app could not be loaded.`}),(0,N.jsx)(`p`,{children:`Most likely the server was updated while this tab was open, and reloading picks up the current version. If the reload fails too, the server is not reachable from here. Either way nothing on the server is affected — the session, its repositories, and its terminals are untouched.`})]}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`p`,{className:`text-removed`,children:t?`The ${t} could not be rendered.`:`Something went wrong.`}),(0,N.jsx)(`p`,{children:`The details are in the browser console.`})]}),(0,N.jsx)(`button`,{onClick:()=>window.location.reload(),className:`rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:border-accent hover:text-accent`,children:`Reload`})]})}function Rn({lines:e}){let t=xn(e.length);return(0,N.jsx)(`pre`,{className:`w-max min-w-full py-2 text-ink-200`,children:e.map((e,n)=>(0,N.jsxs)(`div`,{"data-line":n+1,className:`flex`,children:[(0,N.jsx)(Cn,{nos:[n+1],digits:t}),(0,N.jsx)(`span`,{className:`whitespace-pre pr-3`,children:e.length===0?` `:e.map((e,t)=>(0,N.jsx)(`span`,{style:{color:e.c},children:e.t},t))})]},n))})}function zn({lines:e,viewport:t}){let n=xn(e.length),r=pn(e.length,t.scrollTop,t.height);return(0,N.jsxs)(`pre`,{className:`w-max min-w-full`,"data-virtual-count":e.length,children:[(0,N.jsx)(`div`,{"aria-hidden":`true`,style:{height:r.before}}),e.slice(r.start,r.end).map((e,t)=>{let i=r.start+t;return(0,N.jsxs)(`div`,{"data-line":i+1,"data-virtual-row":i,className:`flex h-5 text-ink-200`,children:[(0,N.jsx)(Cn,{nos:[i+1],digits:n}),(0,N.jsx)(`span`,{className:`whitespace-pre pr-3`,children:e.length===0?` `:e.map((e,t)=>(0,N.jsx)(`span`,{style:{color:e.c},children:e.t},t))})]},i)}),(0,N.jsx)(`div`,{"aria-hidden":`true`,style:{height:r.after}})]})}var Bn=`modulepreload`,Vn=function(e,t){return new URL(e,t).href},Hn={},Un=function(e){return e.pathname.endsWith(`.css`)},Wn=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},Gn=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=Vn(t,n);let r=s(t),i=Un(r);return Wn(Hn,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:Bn,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};function Kn(e,t){return`${e??``}\u0000${vn(t)}`}var qn=(0,M.lazy)(()=>Gn(()=>import(`./Markdown-DEJAds14.js`).then(e=>({default:e.MarkdownView})),__vite__mapDeps([0,1,2,3]),import.meta.url)),Jn=(0,M.lazy)(()=>Gn(()=>import(`./Html-DGFy4jGa.js`).then(e=>({default:e.HtmlView})),__vite__mapDeps([4,1]),import.meta.url)),Yn=(0,M.lazy)(()=>Gn(()=>import(`./HtmlEditor-DILpvNkQ.js`).then(e=>({default:e.HtmlEditor})),__vite__mapDeps([5,1,2,6,7]),import.meta.url));function Xn({repo:e,pane:t,loading:n=!1,previewRendered:r,setPreviewRendered:i,filesMax:a,setMaximized:o,showOtherFace:s,status:c,className:l=``}){let u=$t(),[d,f]=(0,M.useState)(!1),p=t.kind===`file`?t.value.path:null,m=t.kind===`file`&&t.source?.kind===`commit`,h=e!==null&&p!==null&&!m&&rn(p),g=(0,M.useRef)(null),{viewport:_,refresh:v}=fn(g),y=t.kind===`file`?t.anchor:void 0,b=(0,M.useRef)(null),x=()=>{let n=g.current;if(!n)return 0;let r=n.getBoundingClientRect().top,i=Array.from(n.querySelectorAll(`[data-hunk]`),e=>({offset:e.getBoundingClientRect().top-r+n.scrollTop,hunk:Number(e.dataset.hunk??0)}));return t.kind===`diff`&&t.source&&(b.current={key:Kn(e,t.source),top:n.scrollTop,left:n.scrollLeft}),i[un(i.map(e=>e.offset),n.scrollTop)]?.hunk??0};return(0,M.useEffect)(()=>{let n=g.current;if(!n)return;if(t.kind===`diff`&&t.source){let r=b.current;r&&r.key===Kn(e,t.source)&&(n.scrollTop=r.top,n.scrollLeft=r.left,b.current=null,v());return}if(y===void 0||t.kind!==`file`)return;let r=ln(y,t.value.lines.length);if(r===null)return;if(t.value.lines.length>200){n.scrollTop=mn(r),v();return}let i=n.querySelector(`[data-line="${r}"]`);i&&(n.scrollTop+=i.getBoundingClientRect().top-n.getBoundingClientRect().top,v())},[t,y,e,v]),(0,M.useEffect)(()=>{f(!1)},[e,p,m]),(0,N.jsxs)(`section`,{...dt(`content`),className:`min-h-0 min-w-0 flex-col ${l}`,children:[(0,N.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 bg-ink-850 px-3 py-0.5 text-ink-400`,children:[t.kind===`file`&&(0,N.jsx)(Nt,{path:t.value.path,className:`min-w-0 truncate`}),(0,N.jsx)(yn,{pane:t,previewRendered:r,setPreviewRendered:i,filesMax:a,setMaximized:o,onShowOtherFace:()=>s(x()),canEdit:h,editing:d&&h,onToggleEdit:()=>f(e=>!e)})]}),(0,N.jsx)(`div`,{ref:g,onScroll:v,className:`nc-content min-h-0 flex-1 overflow-auto`,children:n?(0,N.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Loading`,className:`py-2`,children:(0,N.jsx)(Ze,{rows:12})}):(0,N.jsxs)(N.Fragment,{children:[t.kind===`empty`&&(c===null?(0,N.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Loading`,className:`py-2`,children:(0,N.jsx)(Ze,{rows:12})}):c.unavailable===void 0?(0,N.jsx)(`p`,{className:`nc-fade-in p-4 text-ink-400`,children:`Select a file or commit.`}):(0,N.jsx)(`p`,{className:`nc-fade-in p-4 text-ink-400`,children:Vt(c.unavailable)})),t.kind===`file`&&(0,N.jsxs)(N.Fragment,{children:[d&&h&&e!==null&&p!==null?(0,N.jsx)(In,{region:`preview`,children:(0,N.jsx)(M.Suspense,{fallback:(0,N.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Opening the editor`,className:`py-2`,children:(0,N.jsx)(Ze,{rows:12})}),children:(0,N.jsx)(Yn,{repo:e,path:p})})},`edit:${p}`):an(t.value.path)&&r?(0,N.jsx)(In,{region:`preview`,children:(0,N.jsx)(M.Suspense,{fallback:(0,N.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Rendering`,className:`py-2`,children:(0,N.jsx)(Ze,{rows:12})}),children:rn(t.value.path)&&e!==null?(0,N.jsx)(Jn,{src:j.previewUrl(e,t.value.path,t.source?.kind===`commit`?t.source.oid:void 0)}):(0,N.jsx)(qn,{source:on(t.value.lines)})})},t.value.path):t.value.lines.length>200?(0,N.jsx)(zn,{lines:t.value.lines,viewport:_}):(0,N.jsx)(Rn,{lines:t.value.lines}),t.value.truncated&&(0,N.jsx)(`p`,{className:`p-3 text-accent`,children:`File truncated — it exceeded the server's size ceiling.`})]}),t.kind===`diff`&&(0,N.jsx)(Nn,{diff:t.value,split:u.layout===`split`,viewport:_})]})})]})}var Zn=[{key:`files`,label:`Repo`,icon:Le},{key:`diff`,label:`Content`,icon:Re},{key:`terminal`,label:`Terminal`,icon:ze}];function Qn({view:e,onSelect:t}){return(0,N.jsx)(`nav`,{"aria-label":`Switch view`,className:`flex shrink-0 items-stretch border-t border-chrome-line bg-ink-900 md:hidden`,children:Zn.map(({key:n,label:r,icon:i})=>(0,N.jsxs)(`button`,{onClick:()=>t(n),"aria-current":e===n?`page`:void 0,className:`flex min-h-11 flex-1 flex-col items-center justify-center gap-0.5 py-1 text-xs ${e===n?`text-accent`:`text-ink-400`}`,children:[(0,N.jsx)(i,{className:`h-5 w-5`}),r]},n))})}var $n=(0,M.lazy)(()=>Gn(()=>import(`./Terminal-Lp7ty5Uw.js`).then(e=>({default:e.TerminalPanel})),__vite__mapDeps([8,1,2,9,7]),import.meta.url));function er({repository:{id:e,current:t,status:n},sidebar:r,filePane:i,layout:{sidebarWidth:a,sidebarRef:o,draggingSidebar:s,onSidebarDragStart:c,onSidebarDragMove:l,onSidebarDragEnd:u,onSidebarDragCancel:d,upperRef:f,lowerRef:p,draggingUpper:m,onUpperDragStart:h,onUpperDragMove:g,onUpperDragEnd:_,onUpperDragCancel:v,maximized:y,setMaximized:b,mobileView:x,setMobileView:S}}){let C=y===`files`;return(0,M.useEffect)(()=>d,[e,d]),(0,M.useEffect)(()=>v,[v]),(0,N.jsxs)(N.Fragment,{children:[s&&(0,N.jsx)(`div`,{className:`fixed inset-0 z-50 cursor-col-resize`}),m&&(0,N.jsx)(`div`,{className:`fixed inset-0 z-50 cursor-row-resize`}),(0,N.jsxs)(`main`,{ref:f,className:`grid min-h-0 grid-cols-1 md:grid-cols-[var(--nc-sidebar)_minmax(0,1fr)] ${x===`terminal`?`hidden md:grid`:``} ${s||m?`select-none`:``}`,style:{"--nc-sidebar":C?`0px`:`min(${a}px, ${tt*100}vw)`},children:[(0,N.jsx)(Zt,{...r,repo:e,status:n,sidebarRef:o,draggingSidebar:s,onSidebarDragStart:c,onSidebarDragMove:l,onSidebarDragEnd:u,onSidebarDragCancel:d,filesMax:C,mobileView:x},e),(0,N.jsx)(Xn,{...i,filesMax:C,setMaximized:b,status:n,className:`nc-fade-in ${x===`diff`?`flex`:`hidden md:flex`}`})]}),(0,N.jsx)(In,{region:`terminal panel`,className:x===`terminal`?`flex`:`hidden md:flex`,children:(0,N.jsx)(M.Suspense,{fallback:(0,N.jsx)(`div`,{className:`min-h-0 border-t border-chrome-line ${x===`terminal`?`block`:`hidden md:block`}`}),children:(0,N.jsx)($n,{repo:e,maximized:y===`terminal`,onToggleMaximized:()=>b(e=>e===`terminal`?`none`:`terminal`),className:`nc-fade-in ${x===`terminal`?`flex`:`hidden md:flex`} ${y===`files`?`overflow-hidden`:``}`,sectionRef:p,showDivider:y===`none`,draggingUpper:m,onUpperDragStart:h,onUpperDragMove:g,onUpperDragEnd:_,onUpperDragCancel:v})})}),(0,N.jsx)(Qn,{view:x,onSelect:S}),(0,N.jsxs)(`footer`,{className:`flex shrink-0 items-center gap-3 border-t border-chrome-line bg-ink-900 px-3 py-1 text-ink-400`,children:[(0,N.jsx)(`span`,{className:`min-w-0 shrink-[1000] truncate`,children:t?.display_path}),n?.branch&&(0,N.jsx)(`span`,{className:`max-w-[50%] shrink-0 truncate text-accent`,children:n.branch}),qt(n)&&(0,N.jsx)(`span`,{className:`shrink-0 font-medium text-removed`,role:`status`,children:qt(n)}),n?.tracking&&(0,N.jsxs)(`span`,{className:`shrink-0`,children:[`↑`,n.tracking.ahead,` ↓`,n.tracking.behind]}),(0,N.jsx)(`span`,{className:`ml-auto shrink-0`,children:n?(0,N.jsx)(`span`,{className:`text-added`,children:`● live`}):`connecting…`})]})]})}function tr({settings:e}){let{leaderText:t,conflict:n,setLeader:r,disable:i,reset:a}=e,[o,s]=(0,M.useState)(t),[c,l]=(0,M.useState)(null);(0,M.useEffect)(()=>{s(t),l(null)},[t]);let u=()=>{r(o)?l(null):l(`"${o}" is not a chord. Write it as Ctrl+F, Alt+Space or Ctrl+Shift+ArrowLeft.`)};return(0,N.jsxs)(`section`,{className:`shrink-0 border-b border-ink-700 px-3 py-2`,children:[(0,N.jsxs)(`p`,{className:`text-ink-400`,children:[`Leader chord:`,` `,t?(0,N.jsx)(`kbd`,{className:`rounded-sm border border-ink-600 bg-ink-850 px-1.5 py-0.5 font-mono text-ink-50`,children:t}):(0,N.jsx)(`span`,{className:`text-ink-200`,children:`switched off`})]}),(0,N.jsxs)(`div`,{className:`mt-1.5 flex items-stretch gap-2`,children:[(0,N.jsx)(`input`,{value:o,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&u()},placeholder:`Ctrl+F`,"aria-label":`leader chord`,spellCheck:!1,autoCapitalize:`none`,autoCorrect:`off`,className:`min-w-0 flex-1 rounded-sm border border-ink-700 bg-ink-950 px-2 py-1 font-mono text-ink-50 placeholder:text-ink-400 focus:border-ink-600 focus:outline-none`}),(0,N.jsx)(`button`,{type:`button`,onClick:u,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850`,children:`Rebind`}),(0,N.jsx)(`button`,{type:`button`,onClick:i,title:`Leave the leader unbound. Standalone chords keep working.`,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850`,children:`Switch off`}),(0,N.jsx)(`button`,{type:`button`,onClick:a,title:`Back to the leader the TUI ships with`,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850`,children:`Reset`})]}),c&&(0,N.jsx)(`p`,{role:`alert`,className:`mt-1 text-removed`,children:c}),n&&(0,N.jsxs)(`p`,{role:`status`,className:`mt-1 text-accent`,children:[n,` Rebind it above if you would rather keep that key.`]})]})}function nr({keys:e}){return e?(0,N.jsx)(`span`,{className:`flex shrink-0 items-center gap-1`,children:e.map((e,t)=>(0,N.jsxs)(`span`,{className:`flex items-center gap-1`,children:[t>0&&(0,N.jsx)(`span`,{className:`text-ink-400`,children:`then`}),(0,N.jsx)(`kbd`,{className:`rounded-sm border border-ink-600 bg-ink-850 px-1.5 py-0.5 font-mono text-ink-50`,children:e})]},e))}):(0,N.jsx)(`span`,{className:`shrink-0 text-ink-400`,children:`no key — the leader is switched off`})}function rr({action:e,keys:t,ariaKeys:n,available:r,onRun:i}){let a=`flex w-full flex-col gap-0.5 rounded-sm px-3 py-1.5 text-left ${r?``:`opacity-50`}`,o=(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`span`,{className:`flex w-full items-baseline gap-2`,children:[(0,N.jsx)(`span`,{className:`min-w-0 flex-1 text-ink-50`,children:e.label}),e.support===`reinterpreted`&&(0,N.jsx)(`span`,{className:`shrink-0 rounded-sm bg-ink-700 px-1 text-2xs uppercase tracking-wide text-ink-200`,children:`reinterpreted`}),e.support===`browserOnly`&&(0,N.jsx)(`span`,{className:`shrink-0 rounded-sm bg-ink-700 px-1 text-2xs uppercase tracking-wide text-ink-200`,children:`browser only`}),!r&&(0,N.jsx)(`span`,{className:`shrink-0 text-2xs uppercase tracking-wide text-ink-400`,children:`not available here`}),(0,N.jsx)(nr,{keys:t})]}),e.note&&(0,N.jsx)(`span`,{className:`text-ink-400`,children:e.note})]}),s={"data-shortcut-action":e.id,"aria-disabled":!r||void 0,"aria-keyshortcuts":n??void 0};return e.keyboardOnly?(0,N.jsx)(`li`,{children:(0,N.jsx)(`div`,{...s,className:a,children:o})}):(0,N.jsx)(`li`,{children:(0,N.jsx)(`button`,{type:`button`,...s,onClick:()=>{r&&i()},className:`${a} ${r?`hover:bg-ink-850`:``}`,children:o})})}var ir={terminal:`Terminal`,project:`Projects`,view:`Layout and views`,focus:`Focus`,session:`Session`,help:`Help`},ar=(()=>{let e=[];for(let t of C){let n=e.find(e=>e.group===t.group);n?n.actions.push(t):e.push({group:t.group,actions:[t]})}return e})(),or=`nc-shortcut-help-title`;function sr({onClose:e,leader:t}){let n=te(),r=ce(),i=(0,M.useRef)(null),a=(0,M.useRef)(!1);(0,M.useEffect)(()=>{let e=document.activeElement;return i.current?.focus(),()=>{a.current||e instanceof HTMLElement&&e.isConnected&&e.focus()}},[]),(0,M.useEffect)(()=>{let t=t=>{t.key===`Escape`&&e()};return document.addEventListener(`keydown`,t),()=>document.removeEventListener(`keydown`,t)},[e]);let o=t=>{a.current=!0,n?.runAction(t.id),e()};return(0,N.jsx)(`div`,{className:`nc-fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-4`,onClick:e,children:(0,N.jsxs)(`div`,{ref:i,role:`dialog`,"aria-modal":`true`,"aria-labelledby":or,tabIndex:-1,className:`nc-rise-in flex max-h-[85vh] w-[40rem] max-w-full flex-col rounded-lg border border-ink-700 bg-ink-900 focus:outline-none`,onClick:e=>e.stopPropagation(),children:[(0,N.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-ink-700 px-3 py-2`,children:[(0,N.jsx)(`span`,{id:or,className:`font-medium text-ink-50`,children:`Keyboard shortcuts`}),(0,N.jsx)(`button`,{type:`button`,onClick:e,"aria-label":`close`,className:`ml-auto flex h-6 w-6 items-center justify-center rounded-sm text-ink-400 hover:text-ink-200`,children:(0,N.jsx)(_e,{})})]}),(0,N.jsx)(tr,{settings:t}),(0,N.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto py-1`,children:[ar.map(({group:e,actions:n})=>(0,N.jsxs)(`section`,{children:[(0,N.jsx)(`h3`,{className:`px-3 py-1 text-caption uppercase text-ink-400`,children:ir[e]}),(0,N.jsx)(`ul`,{children:n.map(e=>(0,N.jsx)(rr,{action:e,keys:x(e.id,t.leader),ariaKeys:S(e.id,t.leader),available:r(e.id),onRun:()=>o(e)},e.id))})]},e)),(0,N.jsxs)(`section`,{children:[(0,N.jsx)(`h3`,{className:`px-3 py-1 text-caption uppercase text-ink-400`,children:`Not bound in the browser`}),(0,N.jsx)(`ul`,{children:u.map(e=>(0,N.jsxs)(`li`,{className:`px-3 py-1.5`,children:[(0,N.jsxs)(`span`,{className:`flex items-baseline gap-2`,children:[(0,N.jsx)(`span`,{className:`min-w-0 flex-1 text-ink-200`,children:e.label}),(0,N.jsx)(`kbd`,{className:`shrink-0 rounded-sm border border-ink-700 bg-ink-850 px-1.5 py-0.5 font-mono text-ink-400`,children:e.leader})]}),(0,N.jsx)(`span`,{className:`text-ink-400`,children:e.reason})]},e.leader))})]})]})]})})}var cr=[`terminal.newPane`,`terminal.closePane`,`view.toggleMaximize`,`project.openDialog`,`help.shortcuts`],lr={keys:`3-9,0`,label:`pane 1-8`,click:null},ur={keys:`3-9,0`,label:`swap active pane with this pane`,click:null},dr={keys:`esc`,label:`cancel`,click:null};function fr(e,t,n){return e.armed&&e.swapPending?{chip:`SWAP`,segments:[ur,dr]}:e.armed?{chip:`PREFIX`,segments:mr(n)}:t?{chip:null,segments:pr(t,n)}:{chip:null,segments:hr(n)}}function pr(e,t){let n=w(e),r=[{keys:n,label:`leader`,click:{kind:`arm`}}];for(let e of C)cr.includes(e.id)&&t(e.id)&&r.push(gr(e,`${n} ${e.leader}`));return r}function mr(e){let t=[],n=!1;for(let r of C)r.leader!==void 0&&e(r.id)&&(ve(r.id)===null?t.push(gr(r,r.leader)):(n||t.push(lr),n=!0));return t.push(dr),t}function hr(e){let t=[{keys:`leader`,label:`switched off`,click:{kind:`run`,action:`help.shortcuts`}}];for(let n of C)n.chord!==void 0&&e(n.id)&&t.push(gr(n,n.chord));return t}function gr(e,t){return{keys:t,label:e.hint,click:{kind:`run`,action:e.id}}}var _r=`shrink-0 whitespace-nowrap`;function vr({state:e,onClick:t}){let n=fr(e,we(),ce());return(0,N.jsxs)(`div`,{role:`toolbar`,"aria-label":`Keyboard hints`,className:`hidden shrink-0 items-center gap-1 overflow-hidden border-t border-chrome-line bg-ink-900 px-2 py-0.5 text-xs text-ink-400 md:flex`,children:[n.chip&&(0,N.jsx)(`span`,{"data-hint-chip":n.chip,className:`shrink-0 bg-accent px-1 font-bold text-ink-950`,children:n.chip}),n.segments.map((e,n)=>(0,N.jsxs)(M.Fragment,{children:[n>0&&(0,N.jsx)(`span`,{className:`shrink-0 text-ink-600`,children:`|`}),(0,N.jsx)(yr,{segment:e,onClick:t})]},`${e.keys} ${e.label}`))]})}function yr({segment:e,onClick:t}){let n=(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`span`,{className:`text-ink-200`,children:e.keys}),`: `,e.label]});if(!e.click)return(0,N.jsx)(`span`,{className:_r,children:n});let r=e.click;return(0,N.jsx)(`button`,{type:`button`,"data-hint-action":r.kind===`run`?r.action:`arm`,onPointerDown:e=>e.preventDefault(),onClick:()=>t(r),className:`${_r} rounded-sm hover:text-accent`,children:n})}function br(e,t){return e?`grid-rows-[minmax(0,1fr)_auto_auto] ${t===`terminal`?`md:grid-rows-[minmax(0,0fr)_minmax(0,1fr)_auto_auto]`:t===`files`?`md:grid-rows-[minmax(0,1fr)_minmax(0,0fr)_auto_auto]`:`md:grid-rows-[minmax(0,var(--nc-upper))_minmax(0,var(--nc-lower))_auto_auto]`}`:`grid-rows-[1fr]`}function xr(e,t){let n=Sr(e);if(n.length===0)return null;let r=e.at,i=r===null?-1:n.findIndex(e=>Cr(e,r)),a;return a=i===-1?t>0?n[0]:n[n.length-1]:n[(i+t+n.length)%n.length],r!==null&&Cr(a,r)?null:a}function Sr({paneCount:e,maximized:t,narrow:n,mobileView:r}){let i={kind:`list`},a={kind:`content`},o=Array.from({length:e},(e,t)=>({kind:`pane`,index:t}));if(n)switch(r){case`files`:return[i];case`diff`:return[a];case`terminal`:return o}switch(t){case`terminal`:return o;case`files`:return[i,a];case`none`:return[i,a,...o]}}function Cr(e,t){return e.kind===t.kind?e.kind!==`pane`||t.kind!==`pane`||e.index===t.index:!1}function wr(e,t,n){if(e.length<=1||t===null)return null;let r=e.indexOf(t);return r<0?null:e[(r+n+e.length)%e.length]}var Tr={armed:!1},Er={kind:`none`};function Dr(e=Er){return{state:Tr,effect:e}}function Or(e,t){switch(t.kind){case`blur`:case`focusChange`:case`dialogOpen`:case`repoChange`:case`socketReconnect`:case`disabled`:case`suppressed`:case`cancel`:return Dr();case`consumed`:return Dr();case`arm`:return{state:{armed:!0,swapPending:!1},effect:Er};case`literalLeader`:return Dr({kind:`sendLiteralLeader`,data:t.data});case`action`:return kr(e,t.action.id);case`ignore`:return{state:e,effect:Er}}}function kr(e,t){if(e.armed&&e.swapPending){let e=ve(t);return e===null?Dr():Dr({kind:`swapWith`,pane:e})}return t===`terminal.swapPanePrompt`?{state:{armed:!0,swapPending:!0},effect:Er}:Dr({kind:`run`,action:t})}var Ar=C.flatMap(e=>{if(!e.chord)return[];let t=r(e.chord);return t?[{spec:t,action:e}]:[]}),jr=new Set([`Shift`,`Control`,`Alt`,`Meta`]),Mr=229,Nr=new Set([`Process`,`Unidentified`]),Pr={kind:`ignore`};function Fr(e){return e.isComposing===!0||e.keyCode===Mr||Nr.has(e.key)}function Ir(e){return e.key===`Escape`||e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey&&e.key.toLowerCase()===`c`}function Lr(e,t){if(e.type!==`keydown`||Fr(e)||e.repeat===!0||t.suppressed)return Pr;if(t.armed){if(Ir(e))return{kind:`cancel`};if(t.leader&&T(t.leader,e))return{kind:`literalLeader`,data:v(t.leader)??``};if(e.key.length===1){let t=m(e.key);if(t)return{kind:`action`,action:t}}return jr.has(e.key)?Pr:{kind:`consumed`}}if(t.leader&&T(t.leader,e))return{kind:`arm`};for(let{spec:t,action:n}of Ar)if(T(t,e))return{kind:`action`,action:n};return Pr}var Rr=new Set([`checkbox`,`radio`,`button`,`submit`,`reset`,`image`,`range`,`color`,`file`]),zr=new Set([`textbox`,`searchbox`,`combobox`]);function Br(e){if(!e)return!1;if(e.isContentEditable===!0)return!0;let t=e.role?.toLowerCase()??``;if(zr.has(t))return!0;switch(e.tagName.toUpperCase()){case`INPUT`:return!Rr.has(e.type?.toLowerCase()??`text`);case`TEXTAREA`:case`SELECT`:return!0;default:return!1}}function Vr(e){return e.dialogOpen||e.composing||e.target?.inDialog===!0?!0:Br(e.target)}function Hr(e,t=!0){let n=(0,M.useRef)(e);n.current=e,(0,M.useEffect)(()=>{if(!t)return;let e=e=>{n.current(e)&&(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation())};return document.addEventListener(`keydown`,e,{capture:!0}),()=>document.removeEventListener(`keydown`,e,{capture:!0})},[t])}function Ur({enabled:e,leader:t,dialogOpen:n,repo:r}){let i=te(),a=(0,M.useRef)(Tr),[o,s]=(0,M.useState)(Tr),c=(0,M.useRef)(i);c.current=i;let l=(0,M.useCallback)(e=>{let t=Or(a.current,e);a.current=t.state,s(t.state);let n=c.current;n&&Wr(t.effect,n)},[]);Hr((0,M.useCallback)(e=>{let r=Vr({target:ft(e.target),dialogOpen:n,composing:e.isComposing===!0}),i=Lr(e,{leader:t,armed:a.current.armed,suppressed:r});return r?(l({kind:`suppressed`}),!1):(l(i),i.kind!==`ignore`)},[n,t,l]),e&&i!==null),(0,M.useEffect)(()=>{if(!e)return;let t=()=>l({kind:`blur`}),n=e=>{let t=ft(e.target);(Br(t)||t?.inDialog===!0)&&l({kind:`focusChange`})};return window.addEventListener(`blur`,t),document.addEventListener(`focusin`,n,{capture:!0}),()=>{window.removeEventListener(`blur`,t),document.removeEventListener(`focusin`,n,{capture:!0})}},[e,l]),(0,M.useEffect)(()=>{n&&l({kind:`dialogOpen`})},[n,l]),(0,M.useEffect)(()=>{e||l({kind:`disabled`})},[e,l]);let u=(0,M.useRef)(r);return(0,M.useEffect)(()=>{u.current!==r&&(u.current=r,l({kind:`repoChange`}))},[r,l]),(0,M.useEffect)(()=>{if(i)return i.onDisarm(()=>l({kind:`socketReconnect`}))},[i,l]),(0,M.useEffect)(()=>{l({kind:`cancel`})},[t,l]),{state:o,arm:(0,M.useCallback)(()=>l({kind:`arm`}),[l]),disarm:(0,M.useCallback)(()=>l({kind:`cancel`}),[l])}}function Wr(e,t){switch(e.kind){case`none`:return;case`run`:t.runAction(e.action);return;case`swapWith`:t.swapPanes(e.pane);return;case`sendLiteralLeader`:e.data&&t.sendLiteralLeader(e.data);return}}var Gr=`nightcrow.shortcut.leader`;function Kr(){let[e,t]=(0,M.useState)(qr),n=(0,M.useCallback)(e=>{t(e),Yr(e===null?null:w(e))},[]),i=(0,M.useCallback)(e=>{let t=r(e);return t?(n(t),!0):!1},[n]),a=(0,M.useCallback)(()=>n(null),[n]),o=(0,M.useCallback)(()=>n(p),[n]);return{leader:e,leaderText:e?w(e):``,conflict:e?ee(e):null,setLeader:i,disable:a,reset:o}}function qr(){let e=Jr();return e?e.leader===null?null:r(e.leader)??p:p}function Jr(){try{let e=localStorage.getItem(Gr);if(!e)return null;let t=JSON.parse(e);if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.leader;return n===null?{leader:null}:typeof n==`string`?{leader:n}:null}catch{return null}}function Yr(e){try{localStorage.setItem(Gr,JSON.stringify({leader:e}))}catch{}}function Xr({enabled:e,repo:t,repos:n,selectRepo:r,closeRepo:i,openPicker:a,pickerOpen:o,cycleAccent:s,reloadConfig:c,tab:l,chooseTab:u,maximized:d,setMaximized:f,mobileView:p}){let m=te(),h=Kr(),[g,_]=(0,M.useState)(!1),v=(0,M.useCallback)(()=>_(!0),[]),y=(0,M.useCallback)(()=>_(!1),[]),b=(0,M.useCallback)(e=>{let i=wr(n.map(e=>e.id),t,e);i!==null&&r(i)},[n,t,r]),x=m?.zoomActivePane,S=(0,M.useCallback)(()=>{pt()?(f(e=>e===`terminal`?`none`:`terminal`),x?.()):f(e=>e===`files`?`none`:`files`)},[f,x]),C=(0,M.useCallback)(e=>{let t=m?.paneCursor()??null,n=mt(),r=null;n===`terminal`?t&&t.index>=0&&(r={kind:`pane`,index:t.index}):n!==null&&(r={kind:n});let i=xr({at:r,paneCount:t?.count??0,maximized:d,narrow:window.innerWidth<768,mobileView:p},e);i!==null&&(i.kind===`pane`?m?.focusPaneAt(i.index):ht(i.kind))},[m,d,p]),w=(0,M.useMemo)(()=>{let e={"project.openDialog":a,"session.cycleAccent":s,"session.reloadConfig":c,"help.shortcuts":v};return n.length>1&&(e[`project.previous`]=()=>b(-1),e[`project.next`]=()=>b(1)),t===null||(e[`project.close`]=()=>i(t),e[`view.toggleLog`]=()=>u(l===`log`?`status`:`log`),e[`view.toggleTree`]=()=>u(l===`tree`?`status`:`tree`),e[`view.toggleMaximize`]=S,e[`focus.list`]=()=>void ht(`list`),e[`focus.content`]=()=>void ht(`content`),e[`focus.previous`]=()=>C(-1),e[`focus.next`]=()=>C(1)),e},[a,s,c,v,n.length,b,t,l,i,u,S,C]);le(w);let T=Ur({enabled:e,leader:h.leader,dialogOpen:o||g,repo:t}),{arm:ee,disarm:E}=T,ne=(0,M.useCallback)(e=>{e.kind===`arm`?ee():(E(),m?.runAction(e.action))},[ee,E,m]);return{shortcutHelp:{open:g,show:v,hide:y},settings:h,hint:{state:T.state,onClick:ne}}}var Zr=1e3,Qr=3,$r=2e3;function ei(e,t){let[n,r]=(0,M.useState)(!1),i=(0,M.useRef)(!1),a=(0,M.useRef)(!1);(0,M.useEffect)(()=>(a.current=!1,()=>{a.current=!0}),[]);let o=(0,M.useCallback)(async t=>{for(;!a.current;){if(await new Promise(e=>setTimeout(e,Zr)),a.current)return;let n;try{n=await j.cloneStatus(t)}catch(e){if(k(e)){i.current=!1,a.current||r(!1);return}if(e instanceof De&&e.status===404){if(a.current)return;me.error(`the clone's progress is no longer available`),i.current=!1,r(!1);return}continue}if(a.current)return;if(n.state===`done`){try{let t=await j.open(n.path);if(a.current)return;e(t)}catch(e){if(a.current)return;me.error(e instanceof Error?e.message:`could not open`)}finally{i.current=!1,a.current||r(!1)}return}if(n.state===`failed`){me.error(n.message),i.current=!1,r(!1);return}}},[e]),s=(0,M.useCallback)(async(e=()=>!1)=>{for(let t=0;t0&&await new Promise(e=>setTimeout(e,$r)),i.current||e()||a.current)return;let n;try{({job:n}=await j.runningClone())}catch(e){if(k(e))return;continue}if(n===null||e()||a.current||i.current)return;i.current=!0,r(!0),o(n);return}},[o]);return(0,M.useEffect)(()=>{if(!t)return;let e=!1;return s(()=>e),()=>{e=!0}},[t,s]),{busy:n,start:(0,M.useCallback)(async(e,t)=>{if(t.trim()&&!i.current){i.current=!0,r(!0);try{let{job:n}=await j.clone(e,t.trim());await o(n)}catch(e){if(i.current=!1,a.current)return;let t=e instanceof De&&e.status>=400;me.error(t?e.message:`could not confirm the clone started — check this folder before retrying`),r(!1),s()}}},[o,s])}}function ti(e,t,n,r=!1){return r&&n&&t.includes(n)?n:e&&t.includes(e)?e:n&&t.includes(n)?n:t[0]??null}function ni(e){let t=!1,n=null,r=()=>{if(t||n===null)return;let i=n;n=null,t=!0,e(i).catch(()=>{}).finally(()=>{t=!1,r()})};return e=>{n=e,r()}}function ri(e,t){return e?.enabled===t.enabled&&e.window_secs===t.window_secs?e:t}function ii(e,t){return e.length===t.length&&e.every((e,n)=>{let r=t[n];return e.id===r.id&&e.name===r.name&&e.display_path===r.display_path})?e:t}var ai=`The viewer was updated on the server.`,oi=null,si=null,ci=null;function li(e,t){return e===null||t===null?!1:e!==t}function ui(e){oi=e}function di(e){li(oi,e)?si!==e&&(si=e,ci=me.info(ai,{sticky:!0,action:{label:`Reload`,run:()=>window.location.reload()}})):e===oi&&si!==null&&(ci!==null&&be(ci),si=null,ci=null)}var fi=3e3;function pi({authed:e,setAuthed:t,handle:n,adoptAccent:r,adoptUpperPct:i,adoptMaximized:a,adoptViews:o,upperDraggingRef:s,accentWrites:c,upperPctWrites:l,maximizedWrites:u,viewWrites:d,resumeTick:f,orderWrites:p,repoDraggingRef:m,reorderInFlightRef:h,pendingReorderRef:g}){let[_,v]=(0,M.useState)([]),[y,b]=(0,M.useState)(null),[x,S]=(0,M.useState)(null),[C,w]=(0,M.useState)(null),[T,ee]=(0,M.useState)(!1),[te,E]=(0,M.useState)(!0),{current:ne}=(0,M.useRef)(ni(j.setActiveRepo)),re=(0,M.useRef)(null),ie=(0,M.useRef)(null);return(0,M.useEffect)(()=>{if(e===!1)return;let f=!1,_,y=new AbortController,x=()=>{let e=c.current,C=l.current,T=u.current,te=d.current,ne=p.current;return j.repos(y.signal).then(n=>{let{repos:y,hot:ae,accent:oe,upper_pct:se,active_repo:ce,maximized:le,last_view:de,now_ms:fe,can_clone:pe,viewer_build:me}=n;if(f)return;di(me),S(e=>ri(e,ae)),E(pe),w(e=>It(e,fe,Date.now())),c.current===e&&r(oe),l.current===C&&!s.current&&i(se),u.current===T&&a(le),d.current===te&&o(de??{},y.map(e=>e.id)),t(!0),ee(!0);let he=h.current||g.current!==null;p.current===ne&&!m.current&&!he?v(e=>ii(e,y)):v(e=>{let t=ue(y.map(e=>e.id),e.map(e=>e.id)),n=new Map(y.map(e=>[e.id,e]));return ii(e,t.map(e=>n.get(e)).filter(Boolean))});let ge=y.map(e=>e.id),_e=ce!==re.current;re.current=ce??null,_e&&ce&&ge.includes(ce)&&(ie.current=ce),b(e=>ti(e,ge,ce,_e)),f||(_=setTimeout(x,fi))}).catch(e=>{f||(k(e)?(t(!1),ee(!1)):(Ee(e)||n(e),_=setTimeout(x,fi)))})};return x(),()=>{f=!0,y.abort(),_&&clearTimeout(_)}},[e,t,n,r,i,f,c,l,u,d,s,a,o,p,m,h,g]),(0,M.useEffect)(()=>{y?y!==ie.current&&(ie.current=null,ne(y)):ie.current=null},[y,ne]),{repos:_,setRepos:v,repo:y,setRepo:b,hot:x,clockSkewMs:C,reposLoaded:T,canClone:te}}var mi=4;function hi({ids:e,onReorder:t,draggingRef:n}){let r=(0,M.useRef)(null),i=(0,M.useRef)(null),a=(0,M.useRef)(null),[o,s]=(0,M.useState)(null),[c,l]=(0,M.useState)(null);return{dragging:o,target:c,onStart:(t,a)=>{t.target.closest(`button[data-tab-close]`)||t.button!==0||e.length<2||(r.current=a,i.current={x:t.clientX,y:t.clientY},n.current=!1)},onMove:e=>{let t=r.current,o=i.current;if(t===null||o===null)return;if(!n.current&&e.buttons===0){r.current=null,i.current=null;return}if(!n.current&&Math.hypot(e.clientX-o.x,e.clientY-o.y){let o=r.current,c=a.current;o!==null&&n.current&&c!==null&&t(E(e,o,c)),r.current=null,i.current=null,a.current=null,n.current=!1,s(null),l(null)}}}function gi({repos:e,setRepos:t,handle:n,writesRef:r,draggingRef:i,inFlightRef:a,pendingRef:o}){let s=(0,M.useCallback)(()=>{if(a.current||o.current===null)return;let e=o.current;o.current=null,a.current=!0;let i=r.current;j.reorderRepos(e).then(e=>{r.current===i&&t(e)}).catch(n).finally(()=>{a.current=!1,s()})},[n,t,a,o,r]),c=(0,M.useCallback)(e=>{r.current+=1,t(t=>{let n=ue(t.map(e=>e.id),e),r=new Map(t.map(e=>[e.id,e]));return n.map(e=>r.get(e)).filter(Boolean)}),o.current=e,s()},[s,t,o,r]);return{...hi({ids:e.map(e=>e.id),onReorder:c,draggingRef:i}),writesRef:r,draggingRef:i,inFlightRef:a,pendingRef:o}}function _i({authed:e,setAuthed:t,handle:n,resumeTick:r,adoptAccent:i,adoptUpperPct:a,adoptMaximized:o,adoptViews:s,accentWrites:c,upperPctWrites:l,maximizedWrites:u,viewWrites:d,upperDraggingRef:f}){let p=(0,M.useRef)(0),m=(0,M.useRef)(!1),h=(0,M.useRef)(!1),g=(0,M.useRef)(null),_=pi({authed:e,setAuthed:t,handle:n,adoptAccent:i,adoptUpperPct:a,adoptMaximized:o,adoptViews:s,upperDraggingRef:f,accentWrites:c,upperPctWrites:l,maximizedWrites:u,viewWrites:d,resumeTick:r,orderWrites:p,repoDraggingRef:m,reorderInFlightRef:h,pendingReorderRef:g}),{dragging:v,target:y,onStart:b,onMove:x,onEnd:S}=gi({repos:_.repos,setRepos:_.setRepos,handle:n,writesRef:p,draggingRef:m,inFlightRef:h,pendingRef:g});return{..._,orderWrites:p,draggingRepo:v,dragOverRepo:y,onRepoDragStart:b,onRepoDragMove:x,onRepoDragEnd:S}}function vi(){let[e,t]=(0,M.useState)(!1),n=(0,M.useRef)(!1);return{reload:(0,M.useCallback)(async()=>{if(!n.current){n.current=!0,t(!0);try{me.success(await j.reloadConfig())}catch(e){me.error(e instanceof Error?e.message:`could not reload the config`)}finally{n.current=!1,t(!1)}}},[]),pending:e}}function yi(e,t){let n=e.indexOf(t);return n===-1?e[0]??null:e[n+1]??e[n-1]??null}function bi({repo:e,repos:t,setRepos:n,setRepo:r,setPane:i,setTab:a,setPickerOpen:o,handle:s,orderWrites:c}){let l=(0,M.useRef)(t);l.current=t;let u=(0,M.useRef)(e);return u.current=e,{selectOpenedRepo:(0,M.useCallback)(e=>{c.current+=1,n(t=>t.some(t=>t.id===e.id)?t:[...t,e]),r(e.id),e.id!==u.current&&(i({kind:`empty`}),a(`status`)),o(!1)},[n,r,i,a,o,c]),closeRepo:(0,M.useCallback)(async e=>{try{await j.close(e),c.current+=1;let t=yi(l.current.map(e=>e.id),e);n(t=>t.filter(t=>t.id!==e)),r(n=>n===e?t:n)}catch(e){s(e)}},[n,r,s,c])}}function xi(e,t,n){return t!==e&&(n.bumpPaneRequest(),e===`log`&&n.leaveLog(),n.recordTab(t),n.forgetPane(),!0)}function Si(e,t,n,r,i){(0,M.useLayoutEffect)(()=>{t&&(e.some(e=>e.oid===t.commit.oid)||(r(),n(null),i()))},[e,t,n,r,i])}var Ci=5e3,wi={refs:{},ahead:[],behind:[],truncated:!1};function Ti({repo:e,authed:t,tab:n,head:r,branch:i,refs:a,upstream:o}){let[s,c]=(0,M.useState)({key:``,value:wi}),[l,u]=(0,M.useState)(0),d=e&&r!==void 0?`${e}|${r??``}|${i??``}|${a??``}|${o??``}`:``,f=(0,M.useRef)(s.key);f.current=s.key,(0,M.useEffect)(()=>{if(!e||!t||n!==`log`||d===``||f.current===d)return;let r=new AbortController,i;return j.logDecorations(e,r.signal).then(e=>c({key:d,value:e})).catch(()=>{r.signal.aborted||(i=setTimeout(()=>u(e=>e+1),Ci))}),()=>{r.abort(),i&&clearTimeout(i)}},[e,t,n,d,l]);let p=s.key.startsWith(`${e}|`)?s.value:wi;return(0,M.useMemo)(()=>{let e=new Set(p.ahead),t=new Set(p.behind);return{refsOf:e=>p.refs[e],divergenceOf:n=>e.has(n)?`ahead`:t.has(n)?`behind`:void 0,truncated:p.truncated}},[p])}function Ei(e,t,n){let r=!e.truncated||e.head===void 0,i=t[0]?.oid,a=i===void 0?-1:e.commits.findIndex(e=>e.oid===i),o=a<0?[]:e.commits.slice(a);return a>=0&&o.length<=t.length&&o.every((e,n)=>e.oid===t[n].oid)?{commits:a===0?t:[...e.commits.slice(0,a),...t],anchor:e.head??null,done:n||r,mode:`prepend`}:{commits:e.commits,anchor:e.head??null,done:r,mode:`replace`}}function Di({repo:e,authed:t,tab:n,filter:r,head:i,handle:a}){let[o,s]=(0,M.useState)([]),[c,l]=(0,M.useState)(!1),[u,d]=(0,M.useState)(!1),f=(0,M.useRef)(null),p=(0,M.useRef)(!1),m=(0,M.useRef)(!1),h=(0,M.useRef)(0),g=(0,M.useRef)(void 0),_=(0,M.useRef)(void 0),v=(0,M.useCallback)(()=>{h.current+=1,p.current=!1,m.current=!1,s([]),f.current=null,l(!1),d(!1),g.current=void 0,_.current=void 0},[]),[y,b]=(0,M.useState)(null),x=(0,M.useRef)(o);x.current=o;let S=(0,M.useRef)(c);S.current=c;let C=(0,M.useRef)(i);C.current=i;let w=(0,M.useCallback)(async t=>{if(!e)return;_.current=C.current,h.current+=1;let n=h.current;p.current=!0,m.current=!0;try{let r=await j.log(e);if(n!==h.current)return;let i=t??{commits:x.current,done:S.current},a=Ei(r,i.commits,i.done);s(a.commits),f.current=a.anchor,g.current=a.anchor,a.anchor===C.current&&(_.current=void 0),l(a.done),d(!1)}catch(e){n===h.current&&(_.current=void 0,a(e),d(!0))}finally{n===h.current&&(p.current=!1,m.current=!1)}},[e,a]),T=(0,M.useCallback)(async()=>{if(!e||p.current)return;p.current=!0;let t=h.current;try{let n=f.current,r=await j.log(e,n===null?void 0:{from:n,skip:x.current.length});if(t!==h.current)return;if(s(e=>[...e,...r.commits]),f.current=r.head??null,l(!r.truncated||r.head===void 0),n===null){g.current=r.head??null;let e=C.current;e!==void 0&&e!==(r.head??null)&&w({commits:r.commits,done:!r.truncated||r.head===void 0})}}catch(e){t===h.current&&(a(e),d(!0))}finally{t===h.current&&(p.current=!1)}},[e,a,w]);(0,M.useEffect)(()=>{e&&t&&n===`log`&&o.length===0&&!c&&!u&&T()},[e,t,n,o.length,c,u,T]),(0,M.useEffect)(()=>{if(!e||!t||n!==`log`||i===void 0||u)return;let r=g.current;r!==void 0&&(r===i?m.current||(_.current=void 0):_.current!==i&&w())},[e,t,n,i,u,w]);let ee=o.filter(e=>e.summary.toLowerCase().includes(r.toLowerCase())),te=r!==``,E=(0,M.useRef)(null);return(0,M.useEffect)(()=>{let e=E.current;if(!e)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&T()},{root:e.closest(`ul`),rootMargin:`400px`});return t.observe(e),()=>t.disconnect()},[T,c,u,te,y,n,ee.length]),{commits:o,logDone:c,logStalled:u,setLogStalled:d,commitDrillDown:y,setCommitDrillDown:b,resetLog:v,logSentinelRef:E,visibleCommits:ee,logPagingPaused:te}}function Oi({repo:e,authed:t,resumeTick:n,tab:r,pane:i,setPane:a,handle:o,paneRequestRef:s}){let[c,l]=(0,M.useState)(null),u=(0,M.useRef)(i);u.current=i;let d=(0,M.useRef)(r);return d.current=r,(0,M.useLayoutEffect)(()=>{l(null)},[e,t]),(0,M.useEffect)(()=>{if(e&&t)return A(e,l,({reason:e})=>l({files:[],truncated:!1,unavailable:e}))},[e,t,n]),(0,M.useEffect)(()=>{if(!e||!c)return;let t=u.current;if(d.current!==`status`||t.kind!==`diff`)return;let n=t.value.path,r=c.files.find(e=>e.path===n);if(!r){a({kind:`empty`});return}let i=s.current,l=!0,f=()=>{let e=u.current;return l&&i===s.current&&e.kind===`diff`&&e.value.path===n};return j.diff(e,n).then(e=>{f()&&a({kind:`diff`,value:e,source:gn(r)&&_n(e)?{kind:`workdir`,path:n}:void 0})}).catch(e=>{f()&&o(e)}),()=>{l=!1}},[c,e,o,u,d,s,a]),{status:c,paneRef:u,tabRef:d}}function ki({repo:e,authed:t,hot:n,clockSkewMs:r,resumeTick:i,handle:a}){let[o,s]=(0,M.useState)(`status`),[c,l]=(0,M.useState)(``),[u,d]=(0,M.useState)(!1),[f,p]=(0,M.useState)({kind:`empty`}),[m,h]=(0,M.useState)(e);m!==e&&(h(e),p({kind:`empty`}),s(`status`));let g=(0,M.useRef)(0),_=(0,M.useCallback)(()=>{g.current+=1},[]),v=(0,M.useCallback)(()=>p({kind:`empty`}),[]),{status:y}=Oi({repo:e,authed:t,resumeTick:i,tab:o,pane:f,setPane:p,handle:a,paneRequestRef:g}),b=n?.enabled?n.window_secs*1e3:0,x=Bt(y?.files,b,r??0),S=Di({repo:e,authed:t,tab:o,filter:c,head:y?y.head??null:void 0,handle:a}),C=Ti({repo:e,authed:t,tab:o,head:y?y.head??null:void 0,branch:y?.branch,refs:y?.refs,upstream:y?.tracking?.upstream}),w=S.setCommitDrillDown,T=S.resetLog;(0,M.useLayoutEffect)(()=>{_(),w(null),T()},[e,_,w,T]);let ee=c.toLowerCase(),te=(0,M.useMemo)(()=>(y?.files??[]).filter(e=>e.path.toLowerCase().includes(ee)),[y?.files,ee]),E=(0,M.useMemo)(()=>(S.commitDrillDown?.files??[]).filter(e=>e.path.toLowerCase().includes(ee)||e.old_path?.toLowerCase().includes(ee)),[S.commitDrillDown?.files,ee]);return{screen:{tab:o,setTab:s,filter:c,setFilter:l,filterOpen:u,setFilterOpen:d,pane:f,setPane:p},request:{paneRequestRef:g,bumpPaneRequest:_,clearPane:v},status:{value:y,files:te,now:x,hotWindowMs:b},log:{...S,decorations:C,visibleCommitFiles:E}}}var Ai=`nightcrow.mobileView`;function ji(e){return e===`diff`||e===`terminal`||e===`files`?e:`files`}function Mi(){try{return ji(localStorage.getItem(Ai))}catch{return`files`}}function Ni(){let[e,t]=(0,M.useState)(Mi);return{mobileView:e,setMobileView:(0,M.useCallback)(e=>{try{localStorage.setItem(Ai,e)}catch{}t(e)},[])}}function Pi({repo:e,handle:t,setPane:n,paneRequestRef:r,setCommitDrillDown:i,setMobileView:a,setPreviewRendered:o,statusRef:s,track:c}){let l=(0,M.useCallback)(e=>{let t=s.current?.files.find(t=>t.path===e);return t?gn(t):!1},[s]);return{openDiff:(0,M.useCallback)((i,o)=>{if(!e)return;o?.restoring||a(`diff`);let s=r.current+=1;c(s,j.diff(e,i)).then(e=>{s===r.current&&n({kind:`diff`,value:e,source:l(i)&&_n(e)?{kind:`workdir`,path:i}:void 0})}).catch(e=>{if(s!==r.current)return k(e)?t(e):void 0;if(!o?.restoring)return t(e);k(e)&&t(e),n({kind:`empty`})})},[e,t,n,r,a,l,c]),openFile:(0,M.useCallback)((i,s)=>{if(!e)return;s?.restoring||a(`diff`),o(!0);let l=r.current+=1;c(l,j.file(e,i)).then(e=>{l===r.current&&n({kind:`file`,value:e})}).catch(e=>{if(l!==r.current)return k(e)?t(e):void 0;if(!s?.restoring)return t(e);k(e)&&t(e),n({kind:`empty`})})},[e,t,n,r,a,o,c]),openCommit:(0,M.useCallback)(i=>{if(!e)return;a(`diff`);let o=r.current+=1;c(o,j.commit(e,i)).then(e=>{o===r.current&&n({kind:`diff`,value:e})}).catch(e=>{o===r.current&&t(e)})},[e,t,n,r,a,c]),openCommitFileDiff:(0,M.useCallback)((i,o,s)=>{if(!e)return;s?.restoring||a(`diff`);let l=r.current+=1;c(l,j.commitFileDiff(e,i,o)).then(e=>{l===r.current&&n({kind:`diff`,value:e,source:_n(e)?{kind:`commit`,oid:i,path:o}:void 0})}).catch(e=>{if(l!==r.current)return k(e)?t(e):void 0;if(!s?.restoring)return t(e);k(e)&&t(e),n({kind:`empty`})})},[e,t,n,r,a,c]),openCommitFiles:(0,M.useCallback)(async o=>{if(!e)return;a(`diff`);let s=r.current+=1;try{let t=await c(s,j.commitFiles(e,o.oid));if(s!==r.current)return;if(i({commit:o,...t}),t.files.length===0){n({kind:`empty`});return}let a=await c(s,j.commit(e,o.oid));s===r.current&&n({kind:`diff`,value:a})}catch(e){s===r.current&&t(e)}},[e,t,n,r,i,a,c]),showOtherFace:(0,M.useCallback)((i,a=0)=>{let s=hn(i);if(!e||!s)return;let{source:u}=s,d=s.want===`file`,f=d&&i.kind===`diff`?sn(i.value,a):null,p=r.current+=1,m=u.kind===`workdir`?d?j.file(e,u.path):j.diff(e,u.path):d?j.commitFile(e,u.oid,u.path):j.commitFileDiff(e,u.oid,u.path);d&&o(!1),c(p,m).then(e=>{p===r.current&&n(d?{kind:`file`,value:e,source:u,anchor:f===null?void 0:cn(f)+1}:{kind:`diff`,value:e,source:_n(e)&&(u.kind!==`workdir`||l(u.path))?u:void 0})}).catch(e=>{p===r.current&&t(e)})},[e,t,n,r,o,l,c])}}function Fi(){let[e,t]=(0,M.useState)(null),n=(0,M.useCallback)((e,n)=>{t(e);let r=()=>t(t=>t===e?null:t);return n.then(r,r),n},[]);return{loading:e!==null,track:n}}function Ii({repo:e,handle:t,pane:n,setPane:r,paneRequestRef:i,setCommitDrillDown:a,status:o}){let{mobileView:s,setMobileView:c}=Ni(),[l,u]=(0,M.useState)(!0),{loading:d,track:f}=Fi(),p=(0,M.useRef)(o);p.current=o;let{openDiff:m,openFile:h,openCommit:g,openCommitFileDiff:_,openCommitFiles:v,showOtherFace:y}=Pi({repo:e,handle:t,setPane:r,paneRequestRef:i,setCommitDrillDown:a,setMobileView:c,setPreviewRendered:u,statusRef:p,track:f}),b=(0,M.useMemo)(()=>({openDiff:m,openFile:h,openCommit:g,openCommitFileDiff:_,openCommitFiles:v,showOtherFace:y}),[m,h,g,_,v,y]);return(0,M.useMemo)(()=>({openers:b,pane:n,setPane:r,paneLoading:d,previewRendered:l,setPreviewRendered:u,mobileView:s,setMobileView:c}),[b,n,r,d,l,s,c])}var Li=[`status`,`log`,`tree`];function Ri(){return{tab:`status`,file:null,tree_expanded:[]}}function zi(e,t){return{path:e,commit:null,face:t}}function Bi(e,t,n){return{path:t,commit:e,face:n}}function Vi(e){return[...e].sort().slice(0,200)}function Hi(e){let t=e?.file;return!t||!t.path?{kind:`none`}:t.commit?{kind:`commitDiff`,oid:t.commit,path:t.path}:t.face===`source`?{kind:`file`,path:t.path}:{kind:`diff`,path:t.path}}function Ui(e){let t=e?.tab;return t&&Li.includes(t)?t:`status`}function Wi(e,t){return e?e.tab===t.tab&&e.tree_expanded.length===t.tree_expanded.length&&e.tree_expanded.every((e,n)=>e===t.tree_expanded[n])&&Gi(e.file,t.file):!1}function Gi(e,t){return!e||!t?e===t:e.path===t.path&&e.commit===t.commit&&e.face===t.face}function Ki({repo:e,known:t,remembered:n,latest:r,remember:i,setTab:a,openDiff:o,openFile:s,openCommitFileDiff:c}){let l=(0,M.useRef)(null),u=(0,M.useRef)(null),d=(0,M.useRef)(new Map),[f,p]=(0,M.useState)(!1),m=(0,M.useRef)(!1);(0,M.useEffect)(()=>{if(u.current!==e&&(u.current=e,l.current=null,m.current=!1,p(!1)),!e||!t||l.current===e)return;l.current=e;let r=d.current.get(e);d.current.delete(e);let f=r?{...n??Ri(),...r}:n;if(r&&i(e,f),m.current)return;a(Ui(f));let h=Hi(f);if(h.kind===`none`)return;let g={restoring:!0};h.kind===`diff`?o(h.path,g):h.kind===`file`?s(h.path,g):c(h.oid,h.path,g)},[e,t,n,i,a,o,s,c]);let h=(0,M.useCallback)(t=>{if(e){if(m.current=!0,p(!0),l.current!==e){let n=d.current.get(e);d.current.set(e,{...n,...t})}else i(e,{...r(e)??Ri(),...t})}},[e,r,i]);return{touched:f,noteTab:(0,M.useCallback)(e=>h({tab:e}),[h]),noteFile:(0,M.useCallback)(e=>h({file:e}),[h]),noteTree:(0,M.useCallback)(e=>h({tree_expanded:Vi(e)}),[h])}}function qi({repo:e,known:t,remembered:n,latest:r,remember:i,setTab:a,clearPane:o,openers:s}){let c=Ki({repo:e,known:t,remembered:n,latest:r,remember:i,setTab:a,openDiff:s.openDiff,openFile:s.openFile,openCommitFileDiff:s.openCommitFileDiff}),{noteFile:l,noteTab:u,noteTree:d}=c,f=(0,M.useCallback)(e=>{u(e),a(e)},[u,a]),p=(0,M.useCallback)(()=>{l(null),o()},[l,o]),m=(0,M.useMemo)(()=>({openDiff:e=>{l(zi(e,`diff`)),s.openDiff(e)},openFile:e=>{l(zi(e,`source`)),s.openFile(e)},openCommit:e=>{l(null),s.openCommit(e)},openCommitFiles:e=>(l(null),s.openCommitFiles(e)),openCommitFileDiff:(e,t)=>{l(Bi(e,t,`diff`)),s.openCommitFileDiff(e,t)}}),[s,l]),h=(0,M.useCallback)((e,t)=>{l(e.kind===`commit`?Bi(e.oid,e.path,t):zi(e.path,t))},[l]);return{...c,noteTree:d,chooseTab:f,forgetPane:p,asked:m,noteOtherFace:h}}function Ji({project:e,view:t,layout:n}){let{repo:r,repos:i,authed:a,hot:o,clockSkewMs:s,resumeTick:c,handle:l}=e,u=ki({repo:r,authed:a,hot:o,clockSkewMs:s,resumeTick:c,handle:l}),d=Ii({repo:r,handle:l,pane:u.screen.pane,setPane:u.screen.setPane,paneRequestRef:u.request.paneRequestRef,setCommitDrillDown:u.log.setCommitDrillDown,status:u.status.value}),f=qi({repo:r,known:t.known,remembered:t.remembered,latest:t.latest,remember:t.remember,setTab:u.screen.setTab,clearPane:u.request.clearPane,openers:d.openers}),p=u.screen.tab,{bumpPaneRequest:m}=u.request,{setCommitDrillDown:h,resetLog:g}=u.log,{chooseTab:_,forgetPane:v}=f,y=(0,M.useCallback)(e=>void xi(p,e,{bumpPaneRequest:m,leaveLog:()=>{h(null),g()},recordTab:_,forgetPane:v}),[p,m,h,g,_,v]);Si(u.log.commits,u.log.commitDrillDown,u.log.setCommitDrillDown,u.request.bumpPaneRequest,f.forgetPane);let b=n.maximizedPanelOf(r),x=n.setMaximizedFor,S=(0,M.useCallback)(e=>x(r,e),[r,x]),C=d.pane,w=d.openers.showOtherFace,T=f.noteOtherFace,ee=(0,M.useCallback)(e=>{let t=hn(C);t&&T(t.source,t.want===`file`?`source`:`diff`),w(C,e)},[C,T,w]);return{setPane:d.setPane,setTab:u.screen.setTab,clearPane:u.request.clearPane,maximized:b,tab:p,chooseTab:y,setMaximized:S,repoShell:r?{repository:{id:r,current:i.find(e=>e.id===r),status:u.status.value},sidebar:{tab:u.screen.tab,filter:u.screen.filter,setFilter:u.screen.setFilter,filterOpen:u.screen.filterOpen,setFilterOpen:u.screen.setFilterOpen,files:u.status.files,now:u.status.now,hotWindowMs:u.status.hotWindowMs,...d.openers,...f.asked,chooseTab:y,authed:a,handle:l,bumpPaneRequest:u.request.bumpPaneRequest,...u.log,restoreTree:t.remembered?.tree_expanded??[],restoreKnown:t.known,onTreeExpanded:f.noteTree,clearPane:f.forgetPane,touched:f.touched},filePane:{repo:r,pane:d.pane,loading:d.paneLoading,previewRendered:d.previewRendered,setPreviewRendered:d.setPreviewRendered,showOtherFace:ee},layout:{...n.shell,maximized:b,setMaximized:S,mobileView:d.mobileView,setMobileView:d.setMobileView}}:null}}function Yi(){let[e,t]=(0,M.useState)(0);return(0,M.useEffect)(()=>{let e=()=>{document.visibilityState===`visible`&&t(e=>e+1)};return document.addEventListener(`visibilitychange`,e),window.addEventListener(`online`,e),()=>{document.removeEventListener(`visibilitychange`,e),window.removeEventListener(`online`,e)}},[]),e}var Xi=[{name:`yellow`,color:`#d9a441`},{name:`cyan`,color:`#03c4db`},{name:`green`,color:`#77c47a`},{name:`magenta`,color:`#dc8fd5`},{name:`blue`,color:`#87acfd`}],Zi=`nightcrow.viewer.accent`;function Qi(e){if(!Number.isFinite(e))return 0;let t=Xi.length;return(Math.trunc(e)%t+t)%t}function $i(){try{let e=localStorage.getItem(Zi);return e===null?0:Qi(Number(e))}catch{return 0}}function ea(e){try{localStorage.setItem(Zi,String(e))}catch{}}function ta(){let[e,t]=(0,M.useState)($i);(0,M.useLayoutEffect)(()=>{document.documentElement.style.setProperty(`--color-accent`,Xi[e].color)},[e]);let n=(0,M.useCallback)(()=>{t(e=>{let t=Qi(e+1);return ea(t),j.setAccent(t).catch(()=>{}),t})},[]),r=(0,M.useCallback)(e=>{t(t=>{let n=Qi(e);return n===t?t:(ea(n),n)})},[]);return{accent:Xi[e],next:Xi[Qi(e+1)],cycle:n,adopt:r}}function na(e){return Number.isFinite(e)?Math.min(Math.max(e,20),85):55}function ra(e){return Math.round(na(e))}function ia(e,t,n,r){let i=n-t;return na(i<=0?r:(e-t)/i*100)}var aa=`nightcrow.upperPct`;function oa(){try{let e=Number(localStorage.getItem(aa));return Number.isFinite(e)&&e>0?ra(e):55}catch{return 55}}function sa(e){try{localStorage.setItem(aa,String(e))}catch{}}function ca(){let[e,t]=(0,M.useState)(oa);return{pct:e,resize:(0,M.useCallback)(e=>{t(na(e))},[]),commit:(0,M.useCallback)(e=>{let n=ra(e);t(n),sa(n),j.setUpperPct(n).catch(()=>{})},[]),reset:(0,M.useCallback)(()=>{t(55),sa(55),j.setUpperPct(55).catch(()=>{})},[]),adopt:(0,M.useCallback)(e=>{t(t=>{let n=ra(e);return n===t?t:(sa(n),n)})},[])}}function F(){let[e,t]=(0,M.useState)({}),n=(0,M.useRef)(e),r=(0,M.useCallback)(e=>{n.current=e,t(e)},[]),i=(0,M.useRef)(0),a=(0,M.useRef)(new Map),o=(0,M.useCallback)(e=>{let t=a.current.get(e);if(t)return t;let n=ni(t=>j.setMaximized(e,t===`none`?null:t));return a.current.set(e,n),n},[]),s=(0,M.useCallback)((e,t)=>{if(e==null)return;let a=n.current,s=typeof t==`function`?t(a[e]??`none`):t;i.current+=1,o(e)(s);let{[e]:c,...l}=a;r(s===`none`?l:{...a,[e]:s})},[o,r]);return{panelOf:(0,M.useCallback)(t=>t!=null&&e[t]||`none`,[e]),setFor:s,adopt:(0,M.useCallback)(e=>{I(n.current,e)||r(e)},[r]),writes:i}}function I(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>e[n]===t[n])}function la(){let[e,t]=(0,M.useState)({}),n=(0,M.useRef)(e),r=(0,M.useCallback)(e=>{n.current=e,t(e)},[]),i=(0,M.useRef)(0),a=(0,M.useRef)(new Map),o=(0,M.useCallback)(e=>{let t=a.current.get(e);if(t)return t;let n=ni(t=>j.setRepoView(e,t));return a.current.set(e,n),n},[]),s=(0,M.useCallback)((e,t)=>{e!=null&&(Wi(n.current[e],t)||(i.current+=1,o(e)(t),r({...n.current,[e]:t})))},[o,r]),c=(0,M.useCallback)(t=>t==null?void 0:e[t],[e]),l=(0,M.useCallback)(e=>n.current[e],[]),u=(0,M.useRef)(new Set),[d,f]=(0,M.useState)(0);return{viewOf:c,rememberedFor:l,remember:s,adopt:(0,M.useCallback)((e,t)=>{let i=u.current;(i.size!==t.length||t.some(e=>!i.has(e)))&&(u.current=new Set(t),f(e=>e+1)),!ua(n.current,e)&&r(e)},[r]),covers:(0,M.useCallback)(e=>e!=null&&u.current.has(e),[d]),writes:i}}function ua(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>t[n]!==void 0&&Wi(e[n],t[n]))}function da(){let{accent:e,next:t,cycle:n,adopt:r}=ta(),{width:i,resize:a,commit:o,reset:s}=ot(),{pct:c,resize:l,commit:u,reset:d,adopt:f}=ca(),p=F(),m=la(),h=(0,M.useRef)(0),g=(0,M.useRef)(0);return{accent:e,next:t,cycle:(0,M.useCallback)(()=>{h.current+=1,n()},[n]),adoptAccent:r,accentWrites:h,sidebarWidth:i,resizeSidebar:a,commitSidebarWidth:o,resetSidebarWidth:s,upperPct:c,resizeUpperPct:l,commitUpperPct:(0,M.useCallback)(e=>{g.current+=1,u(e)},[u]),resetUpperPct:(0,M.useCallback)(()=>{g.current+=1,d()},[d]),bumpUpperPctWrites:(0,M.useCallback)(()=>{g.current+=1},[]),adoptUpperPct:f,upperPctWrites:g,maximizedPanelOf:p.panelOf,setMaximizedFor:p.setFor,adoptMaximized:p.adopt,maximizedWrites:p.writes,viewOf:m.viewOf,rememberedViewFor:m.rememberedFor,rememberView:m.remember,adoptViews:m.adopt,viewCovers:m.covers,viewWrites:m.writes}}var fa=400;function pa({value:e,valueAt:t,onGestureStart:n,resize:r,commit:i,reset:a,axis:o}){let s=(0,M.useRef)(0),c=(0,M.useRef)(0),l=(0,M.useRef)(!1),u=(0,M.useRef)(!1),d=(0,M.useRef)(0),[f,p]=(0,M.useState)(!1);return{dragging:f,onDragStart:(0,M.useCallback)(t=>{t.button===0&&t.isPrimary&&n()&&(s.current=o===`x`?t.clientX:t.clientY,c.current=e,l.current=!0,u.current=!1,p(!0),t.currentTarget.setPointerCapture(t.pointerId),t.preventDefault())},[e,n,o]),onDragMove:(0,M.useCallback)(e=>{if(!l.current)return;let n=o===`x`?e.clientX:e.clientY;if(!u.current&&Math.abs(n-s.current)<3)return;let i=t(e);i!==null&&(u.current=!0,c.current=i,r(i))},[t,r,o]),onDragEnd:(0,M.useCallback)(()=>{if(!l.current)return;if(l.current=!1,p(!1),u.current){i(c.current),d.current=0;return}let e=Date.now();e-d.current{l.current=!1,u.current=!1,d.current=0,p(!1)},[]),draggingRef:l}}function ma({sidebarRef:e,sidebarWidth:t,resizeSidebar:n,commitSidebarWidth:r,resetSidebarWidth:i}){let a=(0,M.useRef)(0),o=(0,M.useCallback)(()=>{let t=e.current?.getBoundingClientRect().left;return t!==void 0&&(a.current=t,!0)},[e]),{dragging:s,onDragStart:c,onDragMove:l,onDragEnd:u,onDragCancel:d}=pa({value:t,valueAt:(0,M.useCallback)(e=>e.clientX-a.current,[]),onGestureStart:o,resize:n,commit:r,reset:i,axis:`x`});return{draggingSidebar:s,onSidebarDragStart:c,onSidebarDragMove:l,onSidebarDragEnd:u,onSidebarDragCancel:d}}function ha({upperRef:e,lowerRef:t,upperPct:n,resizeUpperPct:r,commitUpperPct:i,resetUpperPct:a,bumpUpperPctWrites:o}){let s=(0,M.useRef)(0),c=(0,M.useRef)(0),l=(0,M.useCallback)(()=>{let n=e.current?.getBoundingClientRect().top,r=t.current?.getBoundingClientRect().bottom;return n===void 0||r===void 0?!1:(s.current=n,c.current=r,o(),!0)},[e,t,o]),{dragging:u,onDragStart:d,onDragMove:f,onDragEnd:p,onDragCancel:m,draggingRef:h}=pa({value:n,valueAt:(0,M.useCallback)(e=>ia(e.clientY,s.current,c.current,n),[n]),onGestureStart:l,resize:r,commit:i,reset:a,axis:`y`});return{draggingUpper:u,onUpperDragStart:d,onUpperDragMove:f,onUpperDragEnd:p,onUpperDragCancel:m,upperDraggingRef:h}}function ga(){let{accent:e,next:t,cycle:n,adoptAccent:r,accentWrites:i,sidebarWidth:a,resizeSidebar:o,commitSidebarWidth:s,resetSidebarWidth:c,upperPct:l,resizeUpperPct:u,commitUpperPct:d,resetUpperPct:f,bumpUpperPctWrites:p,adoptUpperPct:m,upperPctWrites:h,maximizedPanelOf:g,setMaximizedFor:_,adoptMaximized:v,maximizedWrites:y,viewOf:b,rememberedViewFor:x,rememberView:S,adoptViews:C,viewCovers:w,viewWrites:T}=da(),ee=(0,M.useRef)(null),te=(0,M.useRef)(null),E=(0,M.useRef)(null),ne=ma({sidebarRef:ee,sidebarWidth:a,resizeSidebar:o,commitSidebarWidth:s,resetSidebarWidth:c}),re=ha({upperRef:te,lowerRef:E,upperPct:l,resizeUpperPct:u,commitUpperPct:d,resetUpperPct:f,bumpUpperPctWrites:p});return{accent:e,next:t,cycle:n,upperPct:l,maximizedPanelOf:g,setMaximizedFor:_,viewOf:b,rememberedViewFor:x,rememberView:S,viewCovers:w,shell:{sidebarWidth:a,sidebarRef:ee,upperRef:te,lowerRef:E,draggingSidebar:ne.draggingSidebar,onSidebarDragStart:ne.onSidebarDragStart,onSidebarDragMove:ne.onSidebarDragMove,onSidebarDragEnd:ne.onSidebarDragEnd,onSidebarDragCancel:ne.onSidebarDragCancel,draggingUpper:re.draggingUpper,onUpperDragStart:re.onUpperDragStart,onUpperDragMove:re.onUpperDragMove,onUpperDragEnd:re.onUpperDragEnd,onUpperDragCancel:re.onUpperDragCancel},guards:{adoptAccent:r,adoptUpperPct:m,adoptMaximized:v,adoptViews:C,accentWrites:i,upperPctWrites:h,maximizedWrites:y,viewWrites:T,upperDraggingRef:re.upperDraggingRef}}}var _a=`nightcrow.tabStripSide`;function va(){try{return Ke(localStorage.getItem(_a))??`top`}catch{return`top`}}function ya(e){try{localStorage.setItem(_a,e)}catch{}}function ba(){let[e,t]=(0,M.useState)(va);return{side:e,toggle:(0,M.useCallback)(()=>{t(e=>{let t=qe(e);return ya(t),t})},[])}}function xa(){let[e,t]=(0,M.useState)(null),[n,r]=(0,M.useState)(!1),[i,a]=(0,M.useState)(null),o=(0,M.useCallback)(e=>{k(e)?t(!1):me.error(e instanceof Error?e.message:`request failed`)},[]),s=Yi(),c=ga(),l=ba(),u=_i({authed:e,setAuthed:t,handle:o,resumeTick:s,...c.guards}),d=Ji({project:{repo:u.repo,repos:u.repos,authed:e,hot:u.hot,clockSkewMs:u.clockSkewMs,resumeTick:s,handle:o},view:{known:c.viewCovers(u.repo),remembered:c.viewOf(u.repo),latest:c.rememberedViewFor,remember:c.rememberView},layout:{shell:c.shell,maximizedPanelOf:c.maximizedPanelOf,setMaximizedFor:c.setMaximizedFor}}),{selectOpenedRepo:f,closeRepo:p}=bi({repo:u.repo,repos:u.repos,setRepos:u.setRepos,setRepo:u.setRepo,setPane:d.setPane,setTab:d.setTab,setPickerOpen:r,handle:o,orderWrites:u.orderWrites}),{busy:m,start:h}=ei(f,e===!0),g=u.repo,_=u.setRepo,v=d.clearPane,y=(0,M.useCallback)(e=>{e!==g&&(_(e),v())},[g,_,v]),b=u.repos.find(e=>e.id===i),x=(0,M.useCallback)(()=>a(null),[]),S=(0,M.useCallback)(()=>r(!0),[]),C=(0,M.useCallback)(()=>r(!1),[]),w=vi(),T=Xr({enabled:e===!0,repo:u.repo,repos:u.repos,selectRepo:y,closeRepo:p,openPicker:S,pickerOpen:n,cycleAccent:c.cycle,reloadConfig:w.reload,tab:d.tab,chooseTab:d.chooseTab,maximized:d.maximized,setMaximized:d.setMaximized,mobileView:d.repoShell?.layout.mobileView??`files`});return{authed:e,login:(0,M.useCallback)(()=>t(null),[]),reposLoaded:u.reposLoaded,rows:br(u.repo,d.maximized),upperPct:c.upperPct,header:{repos:u.repos,repo:u.repo,onSelectRepo:y,onCloseRepo:a,onOpenPicker:S,cloning:m,accent:c.accent,next:c.next,cycle:c.cycle,draggingRepo:u.draggingRepo,dragOverRepo:u.dragOverRepo,onRepoDragStart:u.onRepoDragStart,onRepoDragMove:u.onRepoDragMove,onRepoDragEnd:u.onRepoDragEnd,onReloadConfig:w.reload,reloading:w.pending,tabStrip:l},tabStrip:l,shortcutHelp:T.shortcutHelp,leader:T.settings,hint:T.hint,repoShell:d.repoShell,closeConfirm:b?{label:b.name,detail:`Its terminals and the processes running in them will be terminated.`,onConfirm:()=>{a(null),p(b.id)},onCancel:x}:null,picker:n?{onClose:C,onOpened:f,canClone:u.canClone,cloning:m,onClone:h}:null}}function Sa(){let e=xa();return e.authed===null?(0,N.jsx)(Qe,{}):e.authed?e.reposLoaded?(0,N.jsx)(O,{children:(0,N.jsx)(se,{children:(0,N.jsx)(y,{leader:e.leader.leader,children:(0,N.jsxs)(`div`,{className:`nc-fade-in flex h-full flex-col`,children:[(0,N.jsx)(Je,{...e.header,onShowShortcuts:e.shortcutHelp.show}),(0,N.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[e.tabStrip.side===`left`&&(0,N.jsx)(`aside`,{className:`hidden w-48 shrink-0 flex-col border-r border-chrome-line bg-ink-950 md:flex`,children:(0,N.jsx)(Ve,{side:`left`,...e.header})}),(0,N.jsxs)(`div`,{className:`grid min-h-0 min-w-0 flex-1 grid-cols-[minmax(0,1fr)] ${e.rows}`,style:{"--nc-upper":`${e.upperPct}fr`,"--nc-lower":`${100-e.upperPct}fr`},children:[e.repoShell?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(er,{...e.repoShell}),(0,N.jsx)(vr,{...e.hint})]}):(0,N.jsxs)(`div`,{className:`flex items-center justify-center p-6 text-center text-ink-400`,children:[(0,N.jsxs)(`span`,{className:`md:hidden`,children:[`No repository open. Tap`,` `,(0,N.jsx)(`span`,{className:`text-ink-200`,children:`No project`}),` above, then`,` `,(0,N.jsx)(`span`,{className:`text-ink-200`,children:`+ open`}),`, to add one.`]}),(0,N.jsxs)(`span`,{className:`hidden md:inline`,children:[`No repository open. Click`,` `,(0,N.jsx)(`span`,{className:`text-ink-200`,children:`+ open`}),` `,e.tabStrip.side===`left`?`beside`:`above`,` to add one.`]})]}),e.picker&&(0,N.jsx)(Me,{...e.picker}),e.closeConfirm&&(0,N.jsx)(D,{...e.closeConfirm}),e.shortcutHelp.open&&(0,N.jsx)(sr,{onClose:e.shortcutHelp.hide,leader:e.leader})]})]})]})})})}):(0,N.jsx)(Qe,{}):(0,N.jsx)($e,{onSuccess:e.login})}var Ca={error:7e3,info:5e3,success:5e3},wa={error:`text-removed`,info:`text-accent`,success:`text-added`};function Ta(){let[e,t]=(0,M.useState)([]);return(0,M.useEffect)(()=>ie(t),[]),e.length===0?null:(0,N.jsx)(`div`,{className:`pointer-events-none fixed right-3 top-3 z-[60] flex w-80 max-w-[calc(100vw-1.5rem)] flex-col gap-2`,"aria-live":`polite`,children:e.map(e=>(0,N.jsx)(Ea,{toast:e},e.id))})}function Ea({toast:e}){let[t,n]=(0,M.useState)(!1);return(0,M.useEffect)(()=>{if(t||e.sticky)return;let n=setTimeout(()=>be(e.id),Ca[e.kind]);return()=>clearTimeout(n)},[e.id,e.kind,e.bump,e.sticky,t]),(0,N.jsxs)(`div`,{role:e.kind===`error`?`alert`:`status`,className:`nc-slide-in pointer-events-auto flex items-start gap-2 rounded-md border border-ink-700 bg-ink-850 px-3 py-2 text-xs shadow-lg`,onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),children:[(0,N.jsx)(`span`,{className:`min-w-0 flex-1 break-words ${wa[e.kind]}`,children:e.message}),e.action&&(0,N.jsx)(`button`,{type:`button`,onClick:e.action.run,className:`shrink-0 rounded-sm border border-ink-700 px-1.5 py-0.5 text-ink-200 hover:border-accent hover:text-accent`,children:e.action.label}),(0,N.jsx)(`button`,{type:`button`,onClick:()=>be(e.id),"aria-label":`dismiss`,className:`mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:bg-ink-700 hover:text-ink-200`,children:(0,N.jsx)(_e,{className:`h-3 w-3`})})]})}xe(document.documentElement,window),b(c()),ui(document.querySelector(`meta[name="nightcrow-build"]`)?.getAttribute(`content`)||null);var Da=1500;await Promise.race([document.fonts?.load(`400 12px "JetBrains Mono"`).catch(()=>void 0),new Promise(e=>setTimeout(e,Da))]),(0,je.createRoot)(document.getElementById(`root`)).render((0,N.jsxs)(M.StrictMode,{children:[(0,N.jsx)(In,{children:(0,N.jsx)(he,{children:(0,N.jsx)(Sa,{})})}),(0,N.jsx)(Ta,{})]})); \ No newline at end of file diff --git a/viewer-ui/dist/index.html b/viewer-ui/dist/index.html index 4471da53..bc463841 100644 --- a/viewer-ui/dist/index.html +++ b/viewer-ui/dist/index.html @@ -14,7 +14,7 @@ nightcrow - + diff --git a/viewer-ui/src/api/terminal.test.ts b/viewer-ui/src/api/terminal.test.ts index 401ae742..daca0f88 100644 --- a/viewer-ui/src/api/terminal.test.ts +++ b/viewer-ui/src/api/terminal.test.ts @@ -40,6 +40,8 @@ describe("terminal control protocol", () => { }, { type: "recovery", pane: 4, state: "cancelled", attempt: 0 }, { type: "error", message: "capacity reached" }, + { type: "attention", pane: 7 }, + { type: "attention", pane: 7, message: "build done" }, ]; for (const message of messages) { @@ -62,6 +64,9 @@ describe("terminal control protocol", () => { `{"type":"reordered","order":[1,"2"]}`, ), ).toBeNull(); + expect( + decodeTerminalControlFrame(`{"type":"attention","pane":1,"message":3}`), + ).toBeNull(); for (const generation of ["-1", "+1", "", 42]) { expect( decodeTerminalControlFrame( diff --git a/viewer-ui/src/api/terminal.ts b/viewer-ui/src/api/terminal.ts index 37908d21..62cd640e 100644 --- a/viewer-ui/src/api/terminal.ts +++ b/viewer-ui/src/api/terminal.ts @@ -36,6 +36,7 @@ export type TerminalServerMessage = | { type: "reordered"; order: number[] } | { type: "zoomed"; pane: number | null } | { type: "pending"; count: number } + | { type: "attention"; pane: number; message?: string } | ({ type: "recovery" } & RecoveryFrame); type JsonObject = Record; @@ -110,6 +111,11 @@ export function decodeTerminalControlFrame( case "pending": valid = isUnsigned(message.count); break; + case "attention": + valid = + isUnsigned(message.pane) && + (message.message === undefined || typeof message.message === "string"); + break; case "recovery": valid = isUnsigned(message.pane) && diff --git a/viewer-ui/src/hooks/terminal/terminalSocketMessages.test.ts b/viewer-ui/src/hooks/terminal/terminalSocketMessages.test.ts index 3a9d00e3..237b3649 100644 --- a/viewer-ui/src/hooks/terminal/terminalSocketMessages.test.ts +++ b/viewer-ui/src/hooks/terminal/terminalSocketMessages.test.ts @@ -1,4 +1,4 @@ -import { afterEach, describe, expect, it } from "vitest"; +import { afterEach, describe, expect, it, vi } from "vitest"; import { Terminal } from "@xterm/xterm"; import type { PaneView } from "../../lib/terminal/terminalLayout"; import { @@ -7,6 +7,7 @@ import { queueReplayEnd, type PendingTerminalWrite, } from "../../lib/terminal/terminalReplay"; +import { toast } from "../../lib/runtime/toast"; import { handleTerminalSocketMessage, type TerminalMessageContext } from "./terminalSocketMessages"; const terminals: Terminal[] = []; @@ -154,3 +155,17 @@ describe("terminal replay messages", () => { expect(sent).toEqual(["\x1b[1;1R"]); }); }); + +describe("attention messages", () => { + it("says what the pane asked, or a plain line when it said nothing", () => { + const info = vi.spyOn(toast, "info").mockImplementation(() => 0); + const context = makeContext(); + control(context, { type: "attention", pane: 2, message: "build done" }); + control(context, { type: "attention", pane: 2 }); + expect(info.mock.calls.map((call) => call[0])).toEqual([ + "build done", + "A terminal wants your attention", + ]); + info.mockRestore(); + }); +}); diff --git a/viewer-ui/src/hooks/terminal/terminalSocketMessages.ts b/viewer-ui/src/hooks/terminal/terminalSocketMessages.ts index afbbd4e1..6f211933 100644 --- a/viewer-ui/src/hooks/terminal/terminalSocketMessages.ts +++ b/viewer-ui/src/hooks/terminal/terminalSocketMessages.ts @@ -182,6 +182,12 @@ function handleControlMessage( case "error": toast.error(message.message); return; + // A pane asking for its person (`nightcrow notify`, or a plugin). Said + // here for whoever is looking at the page; a closed page hears it through + // Web Push instead. + case "attention": + toast.info(message.message ?? "A terminal wants your attention"); + return; } const unhandled: never = message; return unhandled; From 78c8ac478fdf3f215497c29d44028c5e7830f925 Mon Sep 17 00:00:00 2001 From: code0xff Date: Thu, 29 Oct 2026 09:44:17 +0900 Subject: [PATCH 03/13] feat(web): send session notices to browsers with Web Push `web::viewer::push` listens to the session's `Notices` and sends each as a Web Push message to every subscribed browser. One background thread encrypts to the browser's key (RFC 8291 aes128gcm, checked against the RFC's worked example), signs a VAPID token (RFC 8292 ES256) and posts over https with ureq. Notices for one pane are coalesced for 10 seconds, and a 404/410 answer drops the subscription. The key and subscriptions live owner-only in ~/.nightcrow/push. New authenticated routes: GET /api/push/key and POST /api/push/{subscribe, unsubscribe,status,test}. An endpoint must be https on a public host name; there is no push-service allowlist, since anyone able to subscribe can already run shell commands here. Adds p256, hkdf, aes-gcm and base64. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry --- Cargo.lock | 336 ++++++++++++++++++++++++- Cargo.toml | 5 + docs/architecture/web.md | 8 + docs/notifications.md | 6 + src/session/catalog/catalog_runtime.rs | 4 + src/session/catalog/views.rs | 8 + src/session/notice.rs | 2 - src/web/viewer/mod.rs | 1 + src/web/viewer/push/crypto.rs | 112 +++++++++ src/web/viewer/push/crypto_tests.rs | 72 ++++++ src/web/viewer/push/mod.rs | 183 ++++++++++++++ src/web/viewer/push/mod_tests.rs | 73 ++++++ src/web/viewer/push/sender.rs | 149 +++++++++++ src/web/viewer/push/sender_tests.rs | 32 +++ src/web/viewer/push/store.rs | 148 +++++++++++ src/web/viewer/push/store_tests.rs | 92 +++++++ src/web/viewer/push/vapid.rs | 95 +++++++ src/web/viewer/push/vapid_tests.rs | 65 +++++ src/web/viewer/server/dispatch.rs | 6 + src/web/viewer/server/mod.rs | 16 +- src/web/viewer/server/push_routes.rs | 66 +++++ src/web/viewer/server/tests/mod.rs | 2 + src/web/viewer/server/tests/push.rs | 128 ++++++++++ 23 files changed, 1604 insertions(+), 5 deletions(-) create mode 100644 src/web/viewer/push/crypto.rs create mode 100644 src/web/viewer/push/crypto_tests.rs create mode 100644 src/web/viewer/push/mod.rs create mode 100644 src/web/viewer/push/mod_tests.rs create mode 100644 src/web/viewer/push/sender.rs create mode 100644 src/web/viewer/push/sender_tests.rs create mode 100644 src/web/viewer/push/store.rs create mode 100644 src/web/viewer/push/store_tests.rs create mode 100644 src/web/viewer/push/vapid.rs create mode 100644 src/web/viewer/push/vapid_tests.rs create mode 100644 src/web/viewer/server/push_routes.rs create mode 100644 src/web/viewer/server/tests/push.rs diff --git a/Cargo.lock b/Cargo.lock index fc1416d2..2e24b245 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,41 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "aead" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" +dependencies = [ + "crypto-common 0.2.2", + "inout", +] + +[[package]] +name = "aes" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35f0f96ce78e38c3dc6d8948aa8163d06385be74000f3c7a95bf1eef35d3ea32" +dependencies = [ + "cipher", + "cpubits", + "cpufeatures 0.3.1", +] + +[[package]] +name = "aes-gcm" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2b8006a0c83f52b62ba44a97b58bf76fe2f70a329e588f67f89691d93d498f" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ctutils", + "ghash", +] + [[package]] name = "aho-corasick" version = "1.1.5" @@ -151,6 +186,12 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" +[[package]] +name = "base16ct" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" + [[package]] name = "base64" version = "0.22.1" @@ -315,6 +356,17 @@ dependencies = [ "rand_core 0.10.1", ] +[[package]] +name = "cipher" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" +dependencies = [ + "block-buffer 0.12.1", + "crypto-common 0.2.2", + "inout", +] + [[package]] name = "clap" version = "4.6.7" @@ -405,6 +457,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "cpubits" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" + [[package]] name = "cpufeatures" version = "0.2.17" @@ -480,6 +538,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "crypto-bigint" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c035cb64cba03dad2fb921f3e218785e8cf9a41790da5eb3a1400f62fa2be11" +dependencies = [ + "cpubits", + "ctutils", + "getrandom 0.4.3", + "hybrid-array", + "num-traits", + "rand_core 0.10.1", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.7" @@ -496,7 +570,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ + "getrandom 0.4.3", "hybrid-array", + "rand_core 0.10.1", ] [[package]] @@ -509,6 +585,15 @@ dependencies = [ "phf", ] +[[package]] +name = "ctr" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baaca1c4b237092596f64d571e9db6ce4109c4ef9742e27590f1709594461f21" +dependencies = [ + "cipher", +] + [[package]] name = "ctrlc" version = "3.5.2" @@ -522,11 +607,12 @@ dependencies = [ [[package]] name = "ctutils" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d28fb6aa7dd680b3ffd1a3e64e115c177bdba63c0ae7f9cd48129ff05c4fa0" +checksum = "a2376ffd6f96d8a9db59875b4b6b0237d6900b5baf64279714e05493ce64828a" dependencies = [ "cmov", + "subtle", ] [[package]] @@ -581,6 +667,16 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" +[[package]] +name = "der" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a996a108feb8b427a6e12fcf6af4aa83409b79d72c15337d7741368131ee004" +dependencies = [ + "const-oid", + "zeroize", +] + [[package]] name = "deranged" version = "0.5.9" @@ -688,12 +784,48 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "ecdsa" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0" +dependencies = [ + "der", + "digest 0.11.3", + "elliptic-curve", + "rfc6979", + "signature", + "spki", + "zeroize", +] + [[package]] name = "either" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be" +[[package]] +name = "elliptic-curve" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900f37e7e18d74a2347389af6cd69e3a30d5cc9e697f40004865679aa75e9c7c" +dependencies = [ + "base16ct", + "crypto-bigint", + "crypto-common 0.2.2", + "digest 0.11.3", + "ff", + "group", + "hkdf", + "hybrid-array", + "pkcs8", + "rand_core 0.10.1", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "equivalent" version = "1.0.3" @@ -747,6 +879,16 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" +[[package]] +name = "ff" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" +dependencies = [ + "rand_core 0.10.1", + "subtle", +] + [[package]] name = "filedescriptor" version = "0.8.3" @@ -874,6 +1016,15 @@ dependencies = [ "rand_core 0.10.1", ] +[[package]] +name = "ghash" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eecf2d5dc9b66b732b97707a0210906b1d30523eb773193ab777c0c84b3e8d5" +dependencies = [ + "polyval", +] + [[package]] name = "git2" version = "0.21.0" @@ -887,6 +1038,17 @@ dependencies = [ "openssl-sys", ] +[[package]] +name = "group" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" +dependencies = [ + "ff", + "rand_core 0.10.1", + "subtle", +] + [[package]] name = "hashbrown" version = "0.17.1" @@ -925,6 +1087,24 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hkdf" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" +dependencies = [ + "digest 0.11.3", +] + [[package]] name = "home" version = "0.5.12" @@ -956,7 +1136,9 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ + "subtle", "typenum", + "zeroize", ] [[package]] @@ -1004,6 +1186,15 @@ dependencies = [ "libc", ] +[[package]] +name = "inout" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b5cf4372d022092674a83b8febf5865f7a573cc0c5baec5e49c879b6a20978f" +dependencies = [ + "hybrid-array", +] + [[package]] name = "instability" version = "0.3.14" @@ -1307,18 +1498,22 @@ dependencies = [ name = "nightcrow" version = "0.1.20" dependencies = [ + "aes-gcm", "alacritty_terminal", "anyhow", "argon2", + "base64 0.23.1", "clap", "crossterm", "ctrlc", "dirs 7.0.0", "getrandom 0.4.3", "git2", + "hkdf", "libc", "notify", "notify-debouncer-mini", + "p256", "portable-pty", "ratatui", "rust-embed", @@ -1597,6 +1792,19 @@ dependencies = [ "num-traits", ] +[[package]] +name = "p256" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c9239b2dbc807adbbe147e8cf72ea7450c3a0aabe62cb8e75ff4ec22e1f72a" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primefield", + "primeorder", + "sha2 0.11.1", +] + [[package]] name = "palette" version = "0.7.7" @@ -1793,6 +2001,16 @@ dependencies = [ "futures-io", ] +[[package]] +name = "pkcs8" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.34" @@ -1826,6 +2044,17 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "polyval" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0fa31d631f2b2cb2a544d0aa321ce847a94764d701ca2becc411138b93d49cd" +dependencies = [ + "cpubits", + "cpufeatures 0.3.1", + "universal-hash", +] + [[package]] name = "portable-atomic" version = "1.15.0" @@ -1859,6 +2088,33 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958" +[[package]] +name = "primefield" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" +dependencies = [ + "crypto-bigint", + "crypto-common 0.2.2", + "ff", + "rand_core 0.10.1", + "subtle", + "zeroize", +] + +[[package]] +name = "primeorder" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" +dependencies = [ + "elliptic-curve", + "once_cell", + "primefield", + "serdect", + "wnaf", +] + [[package]] name = "proc-macro2" version = "1.0.107" @@ -2088,6 +2344,16 @@ version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" +[[package]] +name = "rfc6979" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b" +dependencies = [ + "crypto-bigint", + "hmac", +] + [[package]] name = "ring" version = "0.17.14" @@ -2258,6 +2524,20 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sec1" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" +dependencies = [ + "base16ct", + "ctutils", + "der", + "hybrid-array", + "subtle", + "zeroize", +] + [[package]] name = "semver" version = "1.0.28" @@ -2316,6 +2596,16 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serdect" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" +dependencies = [ + "base16ct", + "serde", +] + [[package]] name = "serial2" version = "0.2.38" @@ -2441,6 +2731,16 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" +dependencies = [ + "digest 0.11.3", + "rand_core 0.10.1", +] + [[package]] name = "simd-adler32" version = "0.3.10" @@ -2465,6 +2765,16 @@ version = "1.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8" +[[package]] +name = "spki" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef958a98b9d5da290cfc78946e9f3e61e1e62a18db0d92cac0b83cc161491a9" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "sqlite-wasm-rs" version = "0.6.2" @@ -2968,6 +3278,16 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" +[[package]] +name = "universal-hash" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" +dependencies = [ + "crypto-common 0.2.2", + "ctutils", +] + [[package]] name = "untrusted" version = "0.9.0" @@ -3369,6 +3689,18 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +[[package]] +name = "wnaf" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "795ca18b3fdb5e62bf982199278341ddcf7ebf7d32e25e212ad05d496e95f6fa" +dependencies = [ + "ff", + "group", + "hybrid-array", + "primefield", +] + [[package]] name = "yaml-rust" version = "0.4.5" diff --git a/Cargo.toml b/Cargo.toml index 74437027..206d090c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,6 +76,11 @@ rust-embed = { version = "8.12.0", features = ["interpolate-folder-path", "mime- # — the two POSIX calls std does not expose. The single-instance lock used to # be here too; it moved to std's `File::try_lock` (see src/daemon/lock.rs). libc = "0.2" +# Web Push: VAPID signing (ES256) and RFC 8291 message encryption. +p256 = { version = "0.14", default-features = false, features = ["ecdsa", "ecdh", "std"] } +hkdf = "0.13" +aes-gcm = "0.11" +base64 = "0.23" [target.'cfg(unix)'.dependencies] # Stop signals for the headless server: SIGTERM is what a service manager sends, diff --git a/docs/architecture/web.md b/docs/architecture/web.md index 0c8b0770..788d49f2 100644 --- a/docs/architecture/web.md +++ b/docs/architecture/web.md @@ -70,6 +70,14 @@ Clone is delegated to the `git` binary, which supports credential helpers and SS Only one clone may run at a time, and a job outlives the request connection. Clients poll by job ID; a cleaned-up job ends with 404. The process uses `GIT_TERMINAL_PROMPT=0`, SSH liveness options, and an HTTP low-speed policy. These are limits that terminate a stalled transfer, not wall-clock deadlines guaranteeing completion. +## Web Push + +`web::viewer::push` subscribes to the session's `Notices` and turns each notice into a Web Push message. The session does not know the listener exists: `PushService::follow` registers it, holding the session weakly because the session owns the listener list. Hub workers only queue; one `nightcrow-push` thread encrypts (RFC 8291 `aes128gcm`, to the browser's own key, so the push service relays ciphertext), signs a VAPID token (RFC 8292, ES256) and posts with `ureq`, https only. A burst past the 64-entry queue is dropped rather than held behind a slow push service. A notice for the same repository pane inside 10 seconds is not sent again, and the `Topic` header lets the push service replace an undelivered one. A 404 or 410 answer removes the subscription; other failures are logged with the endpoint's host only, since the path is a per-browser capability. + +The VAPID key (`~/.nightcrow/push/vapid`) and subscriptions (`subscriptions.json`, at most 32, oldest dropped) are written owner-only. A key file that exists but cannot be parsed is an error, not a reason to make a new one, because a new key silently ends every subscription. If the key cannot be loaded the viewer runs without Web Push and its `/api/push/*` routes answer 503. + +The routes are authenticated like every other `/api/` route, and everything but `GET /api/push/key` is a POST carrying the endpoint in its body. An endpoint must be an `https` URL on a public host name; addresses, `localhost`, `.local` names and userinfo are refused. There is deliberately no allowlist of push-service hosts: anyone who can register an endpoint can already run shell commands on this machine, and a list would break browsers whose push service it omits. + ## Accepted residual risks - `Repository::discover` searches upward from a directory opened or restored by the user. If the specified path is not a repository, an ancestor worktree may be found and the viewer root may become broader than intended. Traversal is blocked, but operators must confirm which worktree range is actually served. diff --git a/docs/notifications.md b/docs/notifications.md index 33e1d9e0..636cbb6b 100644 --- a/docs/notifications.md +++ b/docs/notifications.md @@ -33,3 +33,9 @@ Both hooks run inside the pane's process tree, so they inherit its token. ## Plugin notices A plugin raises the same notice with its `attention` command. The bundled recovery plugin does not send that command; instead, when it reports a pane as `needs_attention`, the hub treats entering that state as a notice and uses the report's `detail` line as the message. A repeated `needs_attention` report for the same pane is not announced again until the pane leaves that state. + +## Web Push + +When the daemon's web viewer is running, each notice is also sent as a Web Push notification to every browser that turned notifications on in the viewer. The phone's browser can be closed. A notice reads as the project name, then the pane's title and message. Several notices from one pane within 10 seconds produce one notification, and a newer one replaces the older on the device. + +The daemon keeps its push key and the list of subscribed browsers in `~/.nightcrow/push/`. Deleting that directory turns notifications off for every browser; each has to turn them on again. diff --git a/src/session/catalog/catalog_runtime.rs b/src/session/catalog/catalog_runtime.rs index 2024f3d0..f6eece72 100644 --- a/src/session/catalog/catalog_runtime.rs +++ b/src/session/catalog/catalog_runtime.rs @@ -101,6 +101,10 @@ impl CatalogRuntime { Ok(self.entries.clone()) } + pub(super) fn notices(&self) -> Arc { + Arc::clone(&self.notices) + } + pub(super) fn entries(&self) -> &[Arc] { &self.entries } diff --git a/src/session/catalog/views.rs b/src/session/catalog/views.rs index a5eae1a4..258c4211 100644 --- a/src/session/catalog/views.rs +++ b/src/session/catalog/views.rs @@ -44,6 +44,14 @@ impl Catalog { .collect() } + /// The session's listeners for panes asking for attention. + pub fn notices(&self) -> Arc { + self.runtime + .lock() + .expect("catalog runtime poisoned") + .notices() + } + /// Raise attention on the pane `token` names, in whichever repository /// holds it. `false` when none does. The hubs are asked outside the /// catalog lock, since each answer waits on that hub's worker. diff --git a/src/session/notice.rs b/src/session/notice.rs index 72ba08d3..9989af88 100644 --- a/src/session/notice.rs +++ b/src/session/notice.rs @@ -36,8 +36,6 @@ pub struct Notices { } impl Notices { - // Until Web Push registers the first production listener. - #[cfg_attr(not(test), allow(dead_code))] pub fn subscribe(&self, listener: impl Fn(&Notice) + Send + Sync + 'static) { self.listeners .lock() diff --git a/src/web/viewer/mod.rs b/src/web/viewer/mod.rs index 2461a2eb..3c359338 100644 --- a/src/web/viewer/mod.rs +++ b/src/web/viewer/mod.rs @@ -7,5 +7,6 @@ pub mod clone_jobs; pub mod dto; pub mod highlight; pub mod limits; +pub mod push; pub mod server; pub(crate) mod status_payload; diff --git a/src/web/viewer/push/crypto.rs b/src/web/viewer/push/crypto.rs new file mode 100644 index 00000000..3aa459d3 --- /dev/null +++ b/src/web/viewer/push/crypto.rs @@ -0,0 +1,112 @@ +//! Message encryption for Web Push (RFC 8291, `aes128gcm` from RFC 8188). +//! +//! The push service relays the body but cannot read it: it is encrypted to the +//! browser's own key, which the browser handed over with its subscription. + +use aes_gcm::aead::{Aead, KeyInit}; +use aes_gcm::{Aes128Gcm, Nonce}; +use anyhow::{Context, Result, anyhow, bail}; +use hkdf::Hkdf; +use p256::{PublicKey, SecretKey}; +use sha2::Sha256; + +/// Record size written to the header. One record holds every notice: the +/// payload is far below it. +const RECORD_SIZE: u32 = 4096; +/// An uncompressed P-256 point: `0x04 || x || y`. +pub(super) const PUBLIC_KEY_LEN: usize = 65; +const AUTH_SECRET_LEN: usize = 16; +const SALT_LEN: usize = 16; + +/// What a browser's subscription says to encrypt to. +pub(super) struct Recipient<'a> { + /// The browser's `p256dh` key, uncompressed. + pub(super) public_key: &'a [u8], + /// The browser's `auth` secret. + pub(super) auth_secret: &'a [u8], +} + +/// Encrypt `plaintext` for `recipient` with a fresh key pair and salt. +pub(super) fn encrypt(recipient: &Recipient<'_>, plaintext: &[u8]) -> Result> { + let sender = random_secret_key()?; + let mut salt = [0u8; SALT_LEN]; + getrandom::fill(&mut salt).map_err(|e| anyhow!("OS RNG unavailable for push salt: {e}"))?; + encrypt_with(recipient, plaintext, &sender, &salt) +} + +/// [`encrypt`] with the sender key and salt chosen by the caller, so the RFC's +/// worked example can be reproduced byte for byte. +pub(super) fn encrypt_with( + recipient: &Recipient<'_>, + plaintext: &[u8], + sender: &SecretKey, + salt: &[u8; SALT_LEN], +) -> Result> { + if recipient.public_key.len() != PUBLIC_KEY_LEN { + bail!("subscription key is not an uncompressed P-256 point"); + } + if recipient.auth_secret.len() != AUTH_SECRET_LEN { + bail!("subscription auth secret is not {AUTH_SECRET_LEN} bytes"); + } + let receiver = PublicKey::from_sec1_bytes(recipient.public_key) + .context("subscription key is not on the P-256 curve")?; + let sender_public = uncompressed(&sender.public_key()); + let shared = p256::ecdh::diffie_hellman(sender.to_nonzero_scalar(), receiver.as_affine()); + + // RFC 8291 §3.4: mix the browser's auth secret into the ECDH output. + let mut key_info = Vec::with_capacity(14 + 2 * PUBLIC_KEY_LEN); + key_info.extend_from_slice(b"WebPush: info\0"); + key_info.extend_from_slice(recipient.public_key); + key_info.extend_from_slice(&sender_public); + let mut ikm = [0u8; 32]; + Hkdf::::new(Some(recipient.auth_secret), shared.raw_secret_bytes()) + .expand(&key_info, &mut ikm) + .map_err(|_| anyhow!("HKDF output length rejected"))?; + + // RFC 8188 §2.2: content key and nonce from the salt. + let prk = Hkdf::::new(Some(salt), &ikm); + let mut cek = [0u8; 16]; + let mut nonce = [0u8; 12]; + prk.expand(b"Content-Encoding: aes128gcm\0", &mut cek) + .and_then(|()| prk.expand(b"Content-Encoding: nonce\0", &mut nonce)) + .map_err(|_| anyhow!("HKDF output length rejected"))?; + + // A single, final record: the content, then the `0x02` last-record delimiter. + let mut record = Vec::with_capacity(plaintext.len() + 1); + record.extend_from_slice(plaintext); + record.push(0x02); + let cipher = Aes128Gcm::new_from_slice(&cek).map_err(|_| anyhow!("bad AES key length"))?; + let sealed = cipher + .encrypt(&Nonce::from(nonce), record.as_slice()) + .map_err(|_| anyhow!("AES-GCM encryption failed"))?; + + let mut body = Vec::with_capacity(SALT_LEN + 5 + PUBLIC_KEY_LEN + sealed.len()); + body.extend_from_slice(salt); + body.extend_from_slice(&RECORD_SIZE.to_be_bytes()); + body.push(PUBLIC_KEY_LEN as u8); + body.extend_from_slice(&sender_public); + body.extend_from_slice(&sealed); + Ok(body) +} + +/// A P-256 public key as the 65-byte uncompressed point Web Push exchanges. +pub(super) fn uncompressed(key: &PublicKey) -> Vec { + key.to_sec1_bytes().to_vec() +} + +/// A secret key from OS entropy. A 32-byte draw is outside the curve order +/// with negligible probability; drawing again covers it. +pub(super) fn random_secret_key() -> Result { + for _ in 0..8 { + let mut bytes = [0u8; 32]; + getrandom::fill(&mut bytes).map_err(|e| anyhow!("OS RNG unavailable for push key: {e}"))?; + if let Ok(key) = SecretKey::from_slice(&bytes) { + return Ok(key); + } + } + bail!("could not draw a valid P-256 key") +} + +#[cfg(test)] +#[path = "crypto_tests.rs"] +mod tests; diff --git a/src/web/viewer/push/crypto_tests.rs b/src/web/viewer/push/crypto_tests.rs new file mode 100644 index 00000000..4abdfa6f --- /dev/null +++ b/src/web/viewer/push/crypto_tests.rs @@ -0,0 +1,72 @@ +use super::*; +use base64::Engine; +use base64::engine::general_purpose::URL_SAFE_NO_PAD; + +fn b64(s: &str) -> Vec { + URL_SAFE_NO_PAD.decode(s).unwrap() +} + +/// RFC 8291 Appendix A, the worked example. +#[test] +fn the_rfc_8291_example_encrypts_byte_for_byte() { + let receiver_public = b64( + "BCVxsr7N_eNgVRqvHtD0zTZsEc6-VV-JvLexhqUzORcxaOzi6-AYWXvTBHm4bjyPjs7Vd8pZGH6SRpkNtoIAiw4", + ); + let auth = b64("BTBZMqHH6r4Tts7J_aSIgg"); + let sender = + SecretKey::from_slice(&b64("yfWPiYE-n46HLnH0KqZOF1fJJU3MYrct3AELtAQ-oRw")).unwrap(); + let salt: [u8; 16] = b64("DGv6ra1nlYgDCS1FRnbzlw").try_into().unwrap(); + let recipient = Recipient { + public_key: &receiver_public, + auth_secret: &auth, + }; + + let body = encrypt_with( + &recipient, + b"When I grow up, I want to be a watermelon", + &sender, + &salt, + ) + .unwrap(); + + assert_eq!( + URL_SAFE_NO_PAD.encode(body), + "DGv6ra1nlYgDCS1FRnbzlwAAEABBBP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A_yl95bQpu6cVPTpK4Mqgkf1CXztLVBSt2Ks3oZwbuwXPXLWyouBWLVWGNWQexSgSxsj_Qulcy4a-fN" + ); +} + +#[test] +fn every_message_gets_a_fresh_key_and_salt() { + let browser = random_secret_key().unwrap(); + let public = uncompressed(&browser.public_key()); + let recipient = Recipient { + public_key: &public, + auth_secret: &[7u8; 16], + }; + let one = encrypt(&recipient, b"hi").unwrap(); + let two = encrypt(&recipient, b"hi").unwrap(); + assert_eq!(one.len(), 16 + 4 + 1 + 65 + 2 + 1 + 16); + assert_ne!(one[..16], two[..16], "salt reused"); + assert_ne!(one[21..86], two[21..86], "sender key reused"); +} + +#[test] +fn a_malformed_subscription_key_is_refused() { + let short = Recipient { + public_key: &[4u8; 33], + auth_secret: &[0u8; 16], + }; + assert!(encrypt(&short, b"x").is_err()); + let off_curve = Recipient { + public_key: &[4u8; 65], + auth_secret: &[0u8; 16], + }; + assert!(encrypt(&off_curve, b"x").is_err()); + let browser = random_secret_key().unwrap(); + let public = uncompressed(&browser.public_key()); + let bad_auth = Recipient { + public_key: &public, + auth_secret: &[0u8; 8], + }; + assert!(encrypt(&bad_auth, b"x").is_err()); +} diff --git a/src/web/viewer/push/mod.rs b/src/web/viewer/push/mod.rs new file mode 100644 index 00000000..9282a177 --- /dev/null +++ b/src/web/viewer/push/mod.rs @@ -0,0 +1,183 @@ +//! Web Push: a pane asking for its person reaches a browser that is closed. +//! +//! The viewer page subscribes through its service worker and hands the +//! subscription here; the session's [`Notices`](crate::session::notice::Notices) +//! are turned into encrypted messages and sent from one background thread, so +//! a hub's worker never waits on the network. + +mod crypto; +mod sender; +mod store; +mod vapid; + +pub use store::Subscription; + +use crate::session::SessionState; +use crate::session::notice::Notice; +use anyhow::Result; +use serde::Serialize; +use std::path::PathBuf; +use std::sync::mpsc::{SyncSender, TrySendError}; +use std::sync::{Arc, Weak}; + +/// Notices waiting to be sent. A burst past this is dropped, not queued +/// behind a slow push service. +const QUEUE_DEPTH: usize = 64; + +/// What the service worker receives, decrypted, for one notification. +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] +pub struct Payload { + pub title: String, + pub body: String, + /// One per pane, so a newer notice replaces an older one on the device. + pub tag: String, + /// The repository to open when the notification is tapped, if any. + #[serde(skip_serializing_if = "Option::is_none")] + pub repo: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub pane: Option, +} + +enum Job { + /// To every subscription, at most once per tag per coalescing window. + Broadcast(Payload), + /// To one subscription, now: the settings menu's test button. + Test { endpoint: String, payload: Payload }, +} + +struct Shared { + vapid: vapid::Vapid, + store: store::Store, +} + +pub struct PushService { + shared: Arc, + jobs: SyncSender, +} + +impl PushService { + /// Load or make the key in `dir` and start the sender. `None` keeps + /// everything in memory, for tests: a fresh key and no saved subscriptions. + pub fn start(dir: Option) -> Result> { + let vapid = match &dir { + Some(dir) => vapid::Vapid::load_or_create(&dir.join("vapid"))?, + None => vapid::Vapid::from_secret(&crypto::random_secret_key()?), + }; + let store = store::Store::open(dir.map(|dir| dir.join("subscriptions.json"))); + let shared = Arc::new(Shared { vapid, store }); + let (jobs, rx) = std::sync::mpsc::sync_channel(QUEUE_DEPTH); + let worker = Arc::clone(&shared); + std::thread::Builder::new() + .name("nightcrow-push".into()) + .spawn(move || sender::run(&worker, rx))?; + Ok(Arc::new(Self { shared, jobs })) + } + + /// `~/.nightcrow/push`, where the key and subscriptions live. + pub fn default_dir() -> PathBuf { + PathBuf::from(crate::platform::paths::state_dir_anchor()) + .join(".nightcrow") + .join("push") + } + + /// Send each of `session`'s notices. Holds the session weakly: the + /// session owns the listener list this closure goes into. + pub fn follow(self: &Arc, session: &Arc) { + let push = Arc::clone(self); + let session_ref: Weak = Arc::downgrade(session); + session.catalog().notices().subscribe(move |notice| { + if let Some(session) = session_ref.upgrade() { + push.broadcast(payload_for(&session, notice)); + } + }); + } + + pub fn public_key(&self) -> &str { + self.shared.vapid.public_key() + } + + /// Keep `subscription`, or say why it cannot be used. + pub fn subscribe(&self, subscription: Subscription) -> Result<(), &'static str> { + if let Some(problem) = subscription.problem() { + return Err(problem); + } + self.shared.store.add(subscription); + Ok(()) + } + + /// Forget `endpoint`. `false` when it was not subscribed. + pub fn unsubscribe(&self, endpoint: &str) -> bool { + self.shared.store.remove(endpoint) + } + + pub fn is_subscribed(&self, endpoint: &str) -> bool { + self.shared.store.contains(endpoint) + } + + /// Queue a test notification to `endpoint`. `false` when it is not + /// subscribed or the queue is full. + pub fn send_test(&self, endpoint: &str) -> bool { + if !self.is_subscribed(endpoint) { + return false; + } + let payload = Payload { + title: "nightcrow".into(), + body: "Notifications are working.".into(), + tag: "nightcrow-test".into(), + repo: None, + pane: None, + }; + self.queue(Job::Test { + endpoint: endpoint.to_string(), + payload, + }) + } + + pub fn broadcast(&self, payload: Payload) { + self.queue(Job::Broadcast(payload)); + } + + fn queue(&self, job: Job) -> bool { + match self.jobs.try_send(job) { + Ok(()) => true, + Err(TrySendError::Full(_)) => { + tracing::warn!("push: queue full; a notification was dropped"); + false + } + Err(TrySendError::Disconnected(_)) => false, + } + } +} + +/// The notification for `notice`, labelled with what a person recognises. +pub(crate) fn payload_for(session: &SessionState, notice: &Notice) -> Payload { + let repo = session.catalog().id_of_path(¬ice.repo_path); + let name = repo + .as_deref() + .and_then(|id| session.catalog().get(id)) + .map(|entry| entry.name.clone()) + .unwrap_or_else(|| notice.repo_path.clone()); + let pane_label = notice + .pane_title + .clone() + .unwrap_or_else(|| format!("terminal {}", notice.pane)); + let body = match ¬ice.message { + Some(message) => format!("{pane_label}: {message}"), + None => format!("{pane_label} wants your attention"), + }; + Payload { + title: name, + body, + tag: format!( + "{}:{}", + repo.as_deref().unwrap_or(¬ice.repo_path), + notice.pane + ), + repo, + pane: Some(notice.pane), + } +} + +#[cfg(test)] +#[path = "mod_tests.rs"] +mod tests; diff --git a/src/web/viewer/push/mod_tests.rs b/src/web/viewer/push/mod_tests.rs new file mode 100644 index 00000000..ea4feb09 --- /dev/null +++ b/src/web/viewer/push/mod_tests.rs @@ -0,0 +1,73 @@ +use super::*; + +fn subscription(endpoint: &str) -> Subscription { + super::store::tests::subscription(endpoint) +} + +#[test] +fn only_a_usable_subscription_is_kept() { + let push = PushService::start(None).unwrap(); + let mut bad = subscription("https://a.example/1"); + bad.endpoint = "http://a.example/1".into(); + assert!(push.subscribe(bad).is_err()); + assert!(!push.is_subscribed("http://a.example/1")); + + push.subscribe(subscription("https://a.example/1")).unwrap(); + assert!(push.is_subscribed("https://a.example/1")); + assert!(push.unsubscribe("https://a.example/1")); + assert!(!push.is_subscribed("https://a.example/1")); +} + +#[test] +fn a_test_goes_only_to_a_subscribed_endpoint() { + let push = PushService::start(None).unwrap(); + assert!(!push.send_test("https://a.example/1")); +} + +#[test] +fn the_public_key_is_an_uncompressed_point() { + use base64::Engine; + let push = PushService::start(None).unwrap(); + let key = base64::engine::general_purpose::URL_SAFE_NO_PAD + .decode(push.public_key()) + .unwrap(); + assert_eq!(key.len(), 65); + assert_eq!(key[0], 4); +} + +#[test] +fn a_notice_is_labelled_with_the_project_and_pane() { + let dir = tempfile::TempDir::new().unwrap(); + let path = crate::platform::paths::canonicalize_clean(dir.path()) + .unwrap() + .to_string_lossy() + .to_string(); + let prefs = tempfile::TempDir::new().unwrap(); + let session = crate::test_util::session_state(std::slice::from_ref(&path), prefs.path()); + let id = session.catalog().id_of_path(&path).expect("served"); + let name = session.catalog().get(&id).unwrap().name.clone(); + + let notice = Notice { + repo_path: path.clone(), + pane: 4, + pane_title: Some("claude".into()), + message: Some("done".into()), + }; + let payload = payload_for(&session, ¬ice); + assert_eq!(payload.title, name); + assert_eq!(payload.body, "claude: done"); + assert_eq!(payload.tag, format!("{id}:4")); + assert_eq!(payload.repo.as_deref(), Some(id.as_str())); + assert_eq!(payload.pane, Some(4)); + + let bare = Notice { + pane_title: None, + message: None, + ..notice + }; + assert_eq!( + payload_for(&session, &bare).body, + "terminal 4 wants your attention" + ); + session.catalog().shutdown(); +} diff --git a/src/web/viewer/push/sender.rs b/src/web/viewer/push/sender.rs new file mode 100644 index 00000000..c1a7444b --- /dev/null +++ b/src/web/viewer/push/sender.rs @@ -0,0 +1,149 @@ +//! The one thread that talks to push services. + +use super::{Job, Payload, Shared, Subscription}; +use base64::Engine; +use base64::engine::general_purpose::URL_SAFE_NO_PAD; +use std::collections::HashMap; +use std::sync::mpsc::Receiver; +use std::time::{Duration, Instant, SystemTime}; + +/// A pane that asks again inside this window is not sent again: an agent's +/// hook can fire on every turn, and the device keeps only the newest per tag +/// anyway. +pub(super) const COALESCE_WINDOW: Duration = Duration::from_secs(10); +/// How long a push service holds a message for a device that is offline. +const TTL_SECONDS: &str = "86400"; +const REQUEST_TIMEOUT: Duration = Duration::from_secs(10); + +/// What a push service said about one delivery. +#[derive(Debug, PartialEq, Eq)] +pub(super) enum Outcome { + Delivered, + /// 404 or 410: the browser unsubscribed or the subscription expired. + Gone, + Failed(String), +} + +pub(super) fn run(shared: &Shared, jobs: Receiver) { + let agent: ureq::Agent = ureq::Agent::config_builder() + .https_only(true) + .http_status_as_error(false) + .timeout_global(Some(REQUEST_TIMEOUT)) + .build() + .into(); + let mut last_sent: HashMap = HashMap::new(); + for job in jobs { + let (targets, payload) = match job { + Job::Broadcast(payload) => { + let now = Instant::now(); + if !due(&mut last_sent, &payload.tag, now) { + continue; + } + (shared.store.all(), payload) + } + Job::Test { endpoint, payload } => { + let targets = shared + .store + .all() + .into_iter() + .filter(|s| s.endpoint == endpoint); + (targets.collect(), payload) + } + }; + for subscription in targets { + match deliver(&agent, shared, &subscription, &payload) { + Outcome::Delivered => { + tracing::debug!(endpoint = %host(&subscription.endpoint), "push: delivered"); + } + Outcome::Gone => { + tracing::info!(endpoint = %host(&subscription.endpoint), "push: subscription gone; removed"); + shared.store.remove(&subscription.endpoint); + } + Outcome::Failed(why) => { + tracing::warn!(endpoint = %host(&subscription.endpoint), %why, "push: delivery failed"); + } + } + } + } +} + +/// Whether `tag` may be sent at `now`, recording it when it may. +pub(super) fn due(last_sent: &mut HashMap, tag: &str, now: Instant) -> bool { + last_sent.retain(|_, at| now.duration_since(*at) < COALESCE_WINDOW); + if last_sent.contains_key(tag) { + return false; + } + last_sent.insert(tag.to_string(), now); + true +} + +fn deliver( + agent: &ureq::Agent, + shared: &Shared, + subscription: &Subscription, + payload: &Payload, +) -> Outcome { + let body = match encrypted(subscription, payload) { + Ok(body) => body, + Err(err) => return Outcome::Failed(format!("{err:#}")), + }; + let authorization = match shared + .vapid + .authorization(&subscription.endpoint, SystemTime::now()) + { + Ok(value) => value, + Err(err) => return Outcome::Failed(format!("{err:#}")), + }; + let response = agent + .post(&subscription.endpoint) + .header("TTL", TTL_SECONDS) + .header("Urgency", "high") + .header("Topic", topic(&payload.tag)) + .header("Content-Encoding", "aes128gcm") + .header("Content-Type", "application/octet-stream") + .header("Authorization", &authorization) + .send(&body[..]); + match response { + Ok(response) => classify(response.status().as_u16()), + Err(err) => Outcome::Failed(err.to_string()), + } +} + +pub(super) fn classify(status: u16) -> Outcome { + match status { + 200..=299 => Outcome::Delivered, + 404 | 410 => Outcome::Gone, + other => Outcome::Failed(format!("HTTP {other}")), + } +} + +fn encrypted(subscription: &Subscription, payload: &Payload) -> anyhow::Result> { + let public_key = URL_SAFE_NO_PAD.decode(subscription.keys.p256dh.trim_end_matches('='))?; + let auth_secret = URL_SAFE_NO_PAD.decode(subscription.keys.auth.trim_end_matches('='))?; + let plaintext = serde_json::to_vec(payload)?; + super::crypto::encrypt( + &super::crypto::Recipient { + public_key: &public_key, + auth_secret: &auth_secret, + }, + &plaintext, + ) +} + +/// RFC 8030 `Topic`: a pending message with the same topic is replaced at the +/// push service, so a device that was offline gets one per pane, not a +/// backlog. At most 32 base64url characters. +pub(super) fn topic(tag: &str) -> String { + use sha2::{Digest, Sha256}; + let digest = Sha256::digest(tag.as_bytes()); + URL_SAFE_NO_PAD.encode(&digest[..24]) +} + +/// The endpoint's host, for logs: the path is a per-browser capability. +fn host(endpoint: &str) -> &str { + super::vapid::origin(endpoint).unwrap_or("?") +} + +#[cfg(test)] +#[path = "sender_tests.rs"] +mod tests; diff --git a/src/web/viewer/push/sender_tests.rs b/src/web/viewer/push/sender_tests.rs new file mode 100644 index 00000000..0b1dd882 --- /dev/null +++ b/src/web/viewer/push/sender_tests.rs @@ -0,0 +1,32 @@ +use super::*; + +#[test] +fn a_tag_is_sent_once_per_window_and_others_are_not_held_back() { + let mut last = HashMap::new(); + let start = Instant::now(); + assert!(due(&mut last, "r:1", start)); + assert!(!due(&mut last, "r:1", start + Duration::from_secs(3))); + assert!(due(&mut last, "r:2", start + Duration::from_secs(3))); + assert!(due(&mut last, "r:1", start + COALESCE_WINDOW)); +} + +#[test] +fn push_service_answers_are_classified() { + assert_eq!(classify(201), Outcome::Delivered); + assert_eq!(classify(410), Outcome::Gone); + assert_eq!(classify(404), Outcome::Gone); + assert!(matches!(classify(413), Outcome::Failed(_))); + assert!(matches!(classify(429), Outcome::Failed(_))); +} + +#[test] +fn a_topic_is_short_url_safe_and_stable_per_tag() { + let one = topic("repo-1:3"); + assert_eq!(one.len(), 32); + assert!( + one.chars() + .all(|c| c.is_ascii_alphanumeric() || c == '-' || c == '_') + ); + assert_eq!(one, topic("repo-1:3")); + assert_ne!(one, topic("repo-1:4")); +} diff --git a/src/web/viewer/push/store.rs b/src/web/viewer/push/store.rs new file mode 100644 index 00000000..1a4382a4 --- /dev/null +++ b/src/web/viewer/push/store.rs @@ -0,0 +1,148 @@ +//! The browsers subscribed to Web Push, kept across daemon restarts. +//! +//! Only a signed-in viewer can add one, so an endpoint is not trusted to be +//! benign so much as checked for shape: an https URL on a named host. A host +//! allowlist would add little — that viewer already runs shell commands on this +//! machine — and would break on any browser whose push service it did not list. + +use base64::Engine; +use base64::engine::general_purpose::URL_SAFE_NO_PAD; +use serde::{Deserialize, Serialize}; +use std::path::PathBuf; +use std::sync::Mutex; + +/// More than any one person's browsers; a cap so a script cannot grow the file +/// without bound. The oldest is dropped to make room. +pub(super) const MAX_SUBSCRIPTIONS: usize = 32; +const MAX_ENDPOINT_LEN: usize = 2048; + +/// One browser's subscription, as `PushSubscription.toJSON()` gives it. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub struct Subscription { + pub endpoint: String, + pub keys: SubscriptionKeys, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub struct SubscriptionKeys { + /// The browser's P-256 key, base64url. + pub p256dh: String, + /// The browser's 16-byte auth secret, base64url. + pub auth: String, +} + +impl Subscription { + /// Why this subscription cannot be used, if it cannot. + pub(super) fn problem(&self) -> Option<&'static str> { + if self.endpoint.len() > MAX_ENDPOINT_LEN { + return Some("push endpoint is too long"); + } + if !endpoint_is_acceptable(&self.endpoint) { + return Some("push endpoint must be an https URL on a public host name"); + } + let key = URL_SAFE_NO_PAD.decode(self.keys.p256dh.trim_end_matches('=')); + if key.map_or(true, |k| k.len() != super::crypto::PUBLIC_KEY_LEN) { + return Some("push key is not a P-256 public key"); + } + let auth = URL_SAFE_NO_PAD.decode(self.keys.auth.trim_end_matches('=')); + if auth.map_or(true, |a| a.len() != 16) { + return Some("push auth secret is not 16 bytes"); + } + None + } +} + +/// `https://` with a host name that is not an address or a local name. +fn endpoint_is_acceptable(endpoint: &str) -> bool { + let Some(rest) = endpoint.strip_prefix("https://") else { + return false; + }; + let authority = rest.split(['/', '?', '#']).next().unwrap_or(""); + if authority.contains('@') { + return false; + } + let host = authority + .rsplit_once(':') + .map_or(authority, |(host, _port)| host) + .to_ascii_lowercase(); + let local = host == "localhost" || host.ends_with(".localhost") || host.ends_with(".local"); + let literal = host.starts_with('[') || host.parse::().is_ok(); + host.contains('.') && !local && !literal +} + +/// The subscription list, mirrored to `path` after every change. +pub(super) struct Store { + path: Option, + subscriptions: Mutex>, +} + +impl Store { + /// Read `path`. A missing or unreadable file starts empty; an unreadable + /// one is logged and replaced on the next change. + pub(super) fn open(path: Option) -> Self { + let subscriptions = path + .as_ref() + .and_then(|path| match std::fs::read(path) { + Ok(bytes) => serde_json::from_slice::>(&bytes) + .inspect_err(|err| tracing::warn!(%err, ?path, "push subscriptions unreadable")) + .ok(), + Err(_) => None, + }) + .unwrap_or_default(); + Self { + path, + subscriptions: Mutex::new(subscriptions), + } + } + + pub(super) fn all(&self) -> Vec { + self.subscriptions + .lock() + .expect("push store poisoned") + .clone() + } + + pub(super) fn contains(&self, endpoint: &str) -> bool { + self.subscriptions + .lock() + .expect("push store poisoned") + .iter() + .any(|s| s.endpoint == endpoint) + } + + /// Add or refresh `subscription` (an endpoint's keys can be rotated). + pub(super) fn add(&self, subscription: Subscription) { + let mut all = self.subscriptions.lock().expect("push store poisoned"); + all.retain(|s| s.endpoint != subscription.endpoint); + all.push(subscription); + let excess = all.len().saturating_sub(MAX_SUBSCRIPTIONS); + all.drain(..excess); + self.persist(&all); + } + + /// Drop `endpoint`. `false` when it was not there. + pub(super) fn remove(&self, endpoint: &str) -> bool { + let mut all = self.subscriptions.lock().expect("push store poisoned"); + let before = all.len(); + all.retain(|s| s.endpoint != endpoint); + let removed = all.len() != before; + if removed { + self.persist(&all); + } + removed + } + + fn persist(&self, all: &[Subscription]) { + let Some(path) = &self.path else { return }; + let Ok(json) = serde_json::to_vec(all) else { + return; + }; + if let Err(err) = crate::platform::fs::write_atomic(path, &json) { + tracing::warn!(%err, ?path, "could not persist push subscriptions"); + } + } +} + +#[cfg(test)] +#[path = "store_tests.rs"] +pub(super) mod tests; diff --git a/src/web/viewer/push/store_tests.rs b/src/web/viewer/push/store_tests.rs new file mode 100644 index 00000000..47f64c60 --- /dev/null +++ b/src/web/viewer/push/store_tests.rs @@ -0,0 +1,92 @@ +use super::*; + +pub(crate) fn subscription(endpoint: &str) -> Subscription { + let browser = crate::web::viewer::push::crypto::random_secret_key().unwrap(); + let key = crate::web::viewer::push::crypto::uncompressed(&browser.public_key()); + Subscription { + endpoint: endpoint.into(), + keys: SubscriptionKeys { + p256dh: URL_SAFE_NO_PAD.encode(key), + auth: URL_SAFE_NO_PAD.encode([9u8; 16]), + }, + } +} + +#[test] +fn a_browser_subscription_is_accepted() { + for endpoint in [ + "https://fcm.googleapis.com/fcm/send/abc", + "https://updates.push.services.mozilla.com/wpush/v2/x", + "https://web.push.apple.com/Q1", + "https://push.example.com:8443/x", + ] { + assert_eq!(subscription(endpoint).problem(), None, "{endpoint}"); + } +} + +#[test] +fn an_endpoint_that_is_not_https_on_a_public_name_is_refused() { + for endpoint in [ + "http://fcm.googleapis.com/x", + "https://localhost/x", + "https://printer.local/x", + "https://127.0.0.1/x", + "https://10.0.0.5:443/x", + "https://[::1]/x", + "https://intranet/x", + "https://user@fcm.googleapis.com/x", + "ftp://example.com/x", + ] { + assert!(subscription(endpoint).problem().is_some(), "{endpoint}"); + } + let long = format!("https://a.example/{}", "x".repeat(MAX_ENDPOINT_LEN)); + assert!(subscription(&long).problem().is_some()); +} + +#[test] +fn malformed_keys_are_refused() { + let mut s = subscription("https://a.example/x"); + s.keys.auth = URL_SAFE_NO_PAD.encode([1u8; 8]); + assert!(s.problem().is_some()); + let mut s = subscription("https://a.example/x"); + s.keys.p256dh = "not base64!".into(); + assert!(s.problem().is_some()); +} + +#[test] +fn subscriptions_survive_a_reopen_and_refresh_by_endpoint() { + let dir = tempfile::TempDir::new().unwrap(); + let path = dir.path().join("push").join("subscriptions.json"); + let store = Store::open(Some(path.clone())); + store.add(subscription("https://a.example/1")); + store.add(subscription("https://a.example/2")); + let refreshed = subscription("https://a.example/1"); + store.add(refreshed.clone()); + + let reopened = Store::open(Some(path)); + let all = reopened.all(); + assert_eq!(all.len(), 2); + assert_eq!(all[1], refreshed, "a refresh replaces, and moves to newest"); + assert!(reopened.remove("https://a.example/2")); + assert!(!reopened.remove("https://a.example/2")); + assert!(!reopened.contains("https://a.example/2")); +} + +#[test] +fn the_oldest_subscription_makes_room_past_the_cap() { + let store = Store::open(None); + for i in 0..=MAX_SUBSCRIPTIONS { + store.add(subscription(&format!("https://a.example/{i}"))); + } + let all = store.all(); + assert_eq!(all.len(), MAX_SUBSCRIPTIONS); + assert_eq!(all[0].endpoint, "https://a.example/1"); +} + +#[test] +fn an_unreadable_file_starts_empty() { + let dir = tempfile::TempDir::new().unwrap(); + let path = dir.path().join("subscriptions.json"); + std::fs::write(&path, "{").unwrap(); + assert!(Store::open(Some(path)).all().is_empty()); +} diff --git a/src/web/viewer/push/vapid.rs b/src/web/viewer/push/vapid.rs new file mode 100644 index 00000000..34a74e34 --- /dev/null +++ b/src/web/viewer/push/vapid.rs @@ -0,0 +1,95 @@ +//! The daemon's Web Push identity (VAPID, RFC 8292). +//! +//! One P-256 key per installation, made on first use and kept owner-only. A +//! browser's subscription is bound to its public half, so replacing the key +//! silently ends every subscription; it is therefore read back, never remade, +//! while the file is readable. + +use super::crypto::{random_secret_key, uncompressed}; +use anyhow::{Context, Result, anyhow}; +use base64::Engine; +use base64::engine::general_purpose::URL_SAFE_NO_PAD; +use p256::SecretKey; +use p256::ecdsa::signature::Signer; +use p256::ecdsa::{Signature, SigningKey}; +use std::path::Path; +use std::time::{Duration, SystemTime, UNIX_EPOCH}; + +/// How long one signed token is good for. RFC 8292 caps it at 24 hours. +const TOKEN_LIFETIME: Duration = Duration::from_secs(12 * 60 * 60); +/// The contact a push service may use about this sender. Apple requires one. +const CONTACT: &str = "https://github.com/code0xff/nightcrow"; + +pub(super) struct Vapid { + key: SigningKey, + /// The public key, base64url, as browsers and the `k=` parameter take it. + public: String, +} + +impl Vapid { + /// Read the key at `path`, or make and store one when there is none. + /// A file that exists but cannot be read is an error, not a reason to + /// replace it. + pub(super) fn load_or_create(path: &Path) -> Result { + let secret = match std::fs::read_to_string(path) { + Ok(text) => { + let bytes = URL_SAFE_NO_PAD + .decode(text.trim()) + .context("push key file is not base64url")?; + SecretKey::from_slice(&bytes) + .map_err(|_| anyhow!("push key file is not a P-256 key"))? + } + Err(err) if err.kind() == std::io::ErrorKind::NotFound => { + let secret = random_secret_key()?; + let text = URL_SAFE_NO_PAD.encode(secret.to_bytes()); + crate::platform::fs::write_atomic(path, text.as_bytes()) + .with_context(|| format!("writing push key {}", path.display()))?; + secret + } + Err(err) => { + return Err(err).with_context(|| format!("reading push key {}", path.display())); + } + }; + Ok(Self::from_secret(&secret)) + } + + pub(super) fn from_secret(secret: &SecretKey) -> Self { + Self { + public: URL_SAFE_NO_PAD.encode(uncompressed(&secret.public_key())), + key: SigningKey::from(secret), + } + } + + pub(super) fn public_key(&self) -> &str { + &self.public + } + + /// The `Authorization` header value for a request to `endpoint`'s origin. + pub(super) fn authorization(&self, endpoint: &str, now: SystemTime) -> Result { + let audience = origin(endpoint).ok_or_else(|| anyhow!("push endpoint has no origin"))?; + let exp = (now + TOKEN_LIFETIME) + .duration_since(UNIX_EPOCH) + .map_err(|_| anyhow!("clock before the epoch"))? + .as_secs(); + let header = URL_SAFE_NO_PAD.encode(br#"{"typ":"JWT","alg":"ES256"}"#); + let claims = serde_json::json!({ "aud": audience, "exp": exp, "sub": CONTACT }); + let claims = URL_SAFE_NO_PAD.encode(claims.to_string()); + let signed = format!("{header}.{claims}"); + let signature: Signature = self.key.sign(signed.as_bytes()); + let signature = URL_SAFE_NO_PAD.encode(signature.to_bytes()); + Ok(format!("vapid t={signed}.{signature}, k={}", self.public)) + } +} + +/// `scheme://host[:port]` of an absolute URL. +pub(super) fn origin(url: &str) -> Option<&str> { + let after_scheme = url.find("://")? + 3; + let end = url[after_scheme..] + .find('/') + .map_or(url.len(), |i| after_scheme + i); + (end > after_scheme).then(|| &url[..end]) +} + +#[cfg(test)] +#[path = "vapid_tests.rs"] +mod tests; diff --git a/src/web/viewer/push/vapid_tests.rs b/src/web/viewer/push/vapid_tests.rs new file mode 100644 index 00000000..571dbd03 --- /dev/null +++ b/src/web/viewer/push/vapid_tests.rs @@ -0,0 +1,65 @@ +use super::*; +use p256::ecdsa::VerifyingKey; +use p256::ecdsa::signature::Verifier; + +#[test] +fn a_key_is_made_once_and_read_back_after() { + let dir = tempfile::TempDir::new().unwrap(); + let path = dir.path().join("push").join("vapid"); + let first = Vapid::load_or_create(&path).unwrap(); + let second = Vapid::load_or_create(&path).unwrap(); + assert_eq!(first.public_key(), second.public_key()); + assert_eq!( + URL_SAFE_NO_PAD.decode(first.public_key()).unwrap().len(), + 65 + ); +} + +#[test] +fn an_unreadable_key_file_is_an_error_rather_than_replaced() { + let dir = tempfile::TempDir::new().unwrap(); + let path = dir.path().join("vapid"); + std::fs::write(&path, "not a key").unwrap(); + assert!(Vapid::load_or_create(&path).is_err()); + assert_eq!(std::fs::read_to_string(&path).unwrap(), "not a key"); +} + +#[test] +fn the_authorization_is_a_verifiable_es256_token_for_the_endpoint_origin() { + let secret = crate::web::viewer::push::crypto::random_secret_key().unwrap(); + let vapid = Vapid::from_secret(&secret); + let now = UNIX_EPOCH + Duration::from_secs(1_000); + let header = vapid + .authorization("https://fcm.googleapis.com/fcm/send/abc", now) + .unwrap(); + + let (token, key) = header + .strip_prefix("vapid t=") + .and_then(|rest| rest.split_once(", k=")) + .unwrap(); + assert_eq!(key, vapid.public_key()); + let parts: Vec<&str> = token.split('.').collect(); + assert_eq!(parts.len(), 3); + let claims: serde_json::Value = + serde_json::from_slice(&URL_SAFE_NO_PAD.decode(parts[1]).unwrap()).unwrap(); + assert_eq!(claims["aud"], "https://fcm.googleapis.com"); + assert_eq!(claims["exp"], 1_000 + 12 * 60 * 60); + assert!(claims["sub"].as_str().unwrap().starts_with("https://")); + + let signature = Signature::from_slice(&URL_SAFE_NO_PAD.decode(parts[2]).unwrap()).unwrap(); + let verifying = VerifyingKey::from(&SigningKey::from(&secret)); + verifying + .verify(format!("{}.{}", parts[0], parts[1]).as_bytes(), &signature) + .unwrap(); +} + +#[test] +fn an_origin_stops_at_the_path() { + assert_eq!(origin("https://a.example/x/y"), Some("https://a.example")); + assert_eq!( + origin("https://a.example:8443"), + Some("https://a.example:8443") + ); + assert_eq!(origin("https:///x"), None); + assert_eq!(origin("a.example/x"), None); +} diff --git a/src/web/viewer/server/dispatch.rs b/src/web/viewer/server/dispatch.rs index f1d42ce4..28b062ae 100644 --- a/src/web/viewer/server/dispatch.rs +++ b/src/web/viewer/server/dispatch.rs @@ -225,6 +225,12 @@ fn handle_connection(mut stream: TcpStream, state: Arc) { return; } + // Web Push subscriptions and the key a page subscribes with. + if head.path.starts_with("/api/push/") { + let _ = stream.write_all(&super::push_routes::handle(&head, &body, &state)); + return; + } + // Re-reading config.toml. POST for the same CSRF reasoning as the others, // and the body is ignored: what is read is the file on this machine's // disk, so this cannot hand the session a configuration of the caller's diff --git a/src/web/viewer/server/mod.rs b/src/web/viewer/server/mod.rs index cec5f4d0..a1af31b7 100644 --- a/src/web/viewer/server/mod.rs +++ b/src/web/viewer/server/mod.rs @@ -11,6 +11,7 @@ mod handlers; mod http_util; mod mutations; mod preview; +mod push_routes; mod routes; use crate::session::prefs::PrefsStore; @@ -44,6 +45,8 @@ pub struct ViewerState { pub(super) clones: crate::web::viewer::clone_jobs::CloneJobs, pub(super) git_available: bool, pub(in crate::web::viewer::server) edit_previews: edit_preview::EditPreviewStore, + /// Web Push, when its key could be loaded. `None` answers its routes 503. + pub(super) push: Option>, } pub struct ViewerServer { @@ -59,6 +62,7 @@ pub struct ViewerOptions { pub sessions: SessionStore, pub hot: crate::config::AgentIndicatorConfig, pub session: SessionOptions, + pub push: Option>, } /// Named configuration boundary used by the daemon startup path. @@ -81,6 +85,10 @@ impl ViewerState { } pub fn with_plugins(options: ViewerOptions, plugins: Vec) -> Self { + let session = Arc::new(SessionState::with_plugins(options.session, plugins)); + if let Some(push) = &options.push { + push.follow(&session); + } Self { bound_loopback: options.bind.is_loopback(), auth: options.auth, @@ -91,7 +99,8 @@ impl ViewerState { clones: Default::default(), git_available: crate::git::clone::git_available(), edit_previews: Default::default(), - session: Arc::new(SessionState::with_plugins(options.session, plugins)), + session, + push: options.push, } } } @@ -137,6 +146,11 @@ impl ViewerServer { prefs: PrefsStore::load_seeded(launch.theme.preset_index()), status_encoder: crate::web::viewer::status_payload::encode, }, + push: crate::web::viewer::push::PushService::start(Some( + crate::web::viewer::push::PushService::default_dir(), + )) + .inspect_err(|err| tracing::warn!(%err, "push: unavailable")) + .ok(), }, launch.plugins, ) diff --git a/src/web/viewer/server/push_routes.rs b/src/web/viewer/server/push_routes.rs new file mode 100644 index 00000000..0e291da0 --- /dev/null +++ b/src/web/viewer/server/push_routes.rs @@ -0,0 +1,66 @@ +//! `/api/push/*`: the viewer's half of Web Push. +//! +//! Every route but the key is a POST, for the CSRF reasoning in `dispatch`. +//! An endpoint is a capability URL, so it travels in a body, never a query. + +use super::ViewerState; +use super::http_util::{encode, json_error, json_response}; +use crate::web::common::http::RequestHead; +use crate::web::viewer::push::Subscription; + +#[derive(serde::Deserialize)] +struct EndpointRequest { + endpoint: String, +} + +pub(super) fn handle(head: &RequestHead, body: &str, state: &ViewerState) -> Vec { + let Some(push) = state.push.as_ref() else { + return json_error("503 Service Unavailable", "notifications are unavailable"); + }; + match (head.method.as_str(), head.path.as_str()) { + ("GET", "/api/push/key") => enveloped( + "200 OK", + serde_json::json!({ "public_key": push.public_key() }), + ), + ("POST", "/api/push/subscribe") => match serde_json::from_str::(body) { + Ok(subscription) => match push.subscribe(subscription) { + Ok(()) => enveloped("200 OK", serde_json::json!({ "subscribed": true })), + Err(problem) => json_error("400 Bad Request", problem), + }, + Err(_) => json_error("400 Bad Request", "expected a push subscription"), + }, + ("POST", "/api/push/unsubscribe") => with_endpoint(body, |endpoint| { + push.unsubscribe(endpoint); + enveloped("200 OK", serde_json::json!({ "subscribed": false })) + }), + ("POST", "/api/push/status") => with_endpoint(body, |endpoint| { + enveloped( + "200 OK", + serde_json::json!({ "subscribed": push.is_subscribed(endpoint) }), + ) + }), + ("POST", "/api/push/test") => with_endpoint(body, |endpoint| { + if push.send_test(endpoint) { + enveloped("202 Accepted", serde_json::json!({ "queued": true })) + } else { + json_error("404 Not Found", "this browser is not subscribed") + } + }), + _ => json_error("404 Not Found", "not found"), + } +} + +fn with_endpoint(body: &str, act: impl FnOnce(&str) -> Vec) -> Vec { + match serde_json::from_str::(body) { + Ok(request) => act(&request.endpoint), + Err(_) => json_error("400 Bad Request", "expected a JSON body with an endpoint"), + } +} + +/// Every viewer response carries the protocol version (`dto::Envelope`). +fn enveloped(status: &str, payload: serde_json::Value) -> Vec { + match encode(&payload) { + Ok(body) => json_response(status, &body, &[]), + Err(_) => json_error("500 Internal Server Error", "could not encode response"), + } +} diff --git a/src/web/viewer/server/tests/mod.rs b/src/web/viewer/server/tests/mod.rs index 9c43315e..699c84c9 100644 --- a/src/web/viewer/server/tests/mod.rs +++ b/src/web/viewer/server/tests/mod.rs @@ -12,6 +12,7 @@ mod paste_image; mod path_gate; mod prefs; mod preview; +mod push; mod reload; mod reorder; mod routes; @@ -63,6 +64,7 @@ pub(super) fn server_with( prefs, status_encoder: crate::web::viewer::status_payload::encode, }, + push: Some(crate::web::viewer::push::PushService::start(None).unwrap()), }) .unwrap() } diff --git a/src/web/viewer/server/tests/push.rs b/src/web/viewer/server/tests/push.rs new file mode 100644 index 00000000..3c6b7656 --- /dev/null +++ b/src/web/viewer/server/tests/push.rs @@ -0,0 +1,128 @@ +//! The viewer's Web Push routes. The test server's push service keeps its key +//! and subscriptions in memory; nothing here reaches a real push service. + +use super::{body_of, get, login, post, server}; +use base64::Engine; +use base64::engine::general_purpose::URL_SAFE_NO_PAD; + +fn subscription_json(endpoint: &str) -> String { + let browser = p256::SecretKey::from_slice(&[7u8; 32]).unwrap(); + let key = browser.public_key().to_sec1_bytes(); + serde_json::json!({ + "endpoint": endpoint, + "keys": { "p256dh": URL_SAFE_NO_PAD.encode(key), "auth": URL_SAFE_NO_PAD.encode([1u8; 16]) }, + }) + .to_string() +} + +fn endpoint_json(endpoint: &str) -> String { + serde_json::json!({ "endpoint": endpoint }).to_string() +} + +#[test] +fn every_push_route_requires_authentication() { + let server = server(&[]); + assert!(get(server.addr(), "/api/push/key", None).starts_with("HTTP/1.1 401")); + for path in [ + "/api/push/subscribe", + "/api/push/unsubscribe", + "/api/push/status", + "/api/push/test", + ] { + let response = post( + server.addr(), + path, + &endpoint_json("https://a.example/1"), + None, + ); + assert!(response.starts_with("HTTP/1.1 401"), "{path}: {response}"); + } +} + +#[test] +fn the_key_is_the_uncompressed_point_a_page_subscribes_with() { + let server = server(&[]); + let token = login(server.addr()); + let response = get(server.addr(), "/api/push/key", Some(&token)); + assert!(response.starts_with("HTTP/1.1 200"), "{response}"); + let body: serde_json::Value = serde_json::from_str(body_of(&response)).unwrap(); + assert_eq!(body["version"], crate::web::viewer::dto::PROTOCOL_VERSION); + let key = URL_SAFE_NO_PAD + .decode(body["public_key"].as_str().unwrap()) + .unwrap(); + assert_eq!(key.len(), 65); +} + +#[test] +fn a_subscription_is_kept_reported_tested_and_dropped() { + let server = server(&[]); + let token = login(server.addr()); + let endpoint = "https://push.example.com/abc"; + let status = |token: &str| { + let response = post( + server.addr(), + "/api/push/status", + &endpoint_json(endpoint), + Some(token), + ); + serde_json::from_str::(body_of(&response)).unwrap()["subscribed"].clone() + }; + + assert_eq!(status(&token), false); + let test = post( + server.addr(), + "/api/push/test", + &endpoint_json(endpoint), + Some(&token), + ); + assert!(test.starts_with("HTTP/1.1 404"), "{test}"); + + let added = post( + server.addr(), + "/api/push/subscribe", + &subscription_json(endpoint), + Some(&token), + ); + assert!(added.starts_with("HTTP/1.1 200"), "{added}"); + assert_eq!(status(&token), true); + let test = post( + server.addr(), + "/api/push/test", + &endpoint_json(endpoint), + Some(&token), + ); + assert!(test.starts_with("HTTP/1.1 202"), "{test}"); + + let removed = post( + server.addr(), + "/api/push/unsubscribe", + &endpoint_json(endpoint), + Some(&token), + ); + assert!(removed.starts_with("HTTP/1.1 200"), "{removed}"); + assert_eq!(status(&token), false); +} + +#[test] +fn an_unusable_subscription_is_refused_with_the_reason() { + let server = server(&[]); + let token = login(server.addr()); + let response = post( + server.addr(), + "/api/push/subscribe", + &subscription_json("http://127.0.0.1/x"), + Some(&token), + ); + assert!(response.starts_with("HTTP/1.1 400"), "{response}"); + assert!(body_of(&response).contains("https"), "{response}"); + let malformed = post(server.addr(), "/api/push/subscribe", "{}", Some(&token)); + assert!(malformed.starts_with("HTTP/1.1 400"), "{malformed}"); +} + +#[test] +fn a_get_cannot_change_a_subscription() { + let server = server(&[]); + let token = login(server.addr()); + let response = get(server.addr(), "/api/push/subscribe", Some(&token)); + assert!(response.starts_with("HTTP/1.1 404"), "{response}"); +} From 4901187c757795ad65c58ed861eff5d0a4b75561 Mon Sep 17 00:00:00 2001 From: code0xff Date: Thu, 29 Oct 2026 10:21:18 +0900 Subject: [PATCH 04/13] feat(web): let a loopback-bound viewer answer to listed host names A loopback-bound viewer refuses any Host that is not a loopback name, to stop DNS rebinding. A local HTTPS proxy such as `tailscale serve` forwards the browser's host name (machine.tailnet.ts.net), so it was refused too, leaving off-loopback binding as the only way to put HTTPS in front. `[web_viewer] allowed_hosts` lists names the loopback check also accepts, matched without the port and ignoring case. A listed name stays safe from rebinding because the operator controls what it resolves to. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry --- docs/configuration.md | 3 +++ docs/web-viewer.md | 2 +- src/config/web.rs | 5 +++++ src/web/common/conn.rs | 13 ++++++++----- src/web/common/conn/tests.rs | 24 ++++++++++++++++++++---- src/web/viewer/server/dispatch.rs | 2 +- src/web/viewer/server/mod.rs | 5 +++++ src/web/viewer/server/tests/mod.rs | 1 + 8 files changed, 44 insertions(+), 11 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index d40e900f..c80b4790 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -28,10 +28,13 @@ port = 8091 # password = "..." # hashed_password = "$argon2id$v=19$..." session_ttl_hours = 24 +# allowed_hosts = ["machine.tailnet.ts.net"] ``` `bind` must be an IP address and `port` must be non-zero. `session_ttl_hours` accepts `0..=87600` hours; `0` means sessions do not expire on the server, while browser cookies still have a 400-day maximum. If neither credential is set, startup generates a random password, saves it to this file, and prints it once. `hashed_password` is an Argon2 PHC string and takes precedence over `password`. Login attempts are rate-limited, logout revokes the server-side token, and persisted tokens live in `~/.nightcrow/sessions`. +A loopback-bound viewer refuses requests whose `Host` is not a loopback name, so a page another site rebinds to `127.0.0.1` cannot reach it. A local HTTPS proxy such as `tailscale serve` forwards the name the browser used, so list that name in `allowed_hosts` (without a port; case is ignored). Off loopback the check does not apply and the list is not needed. The list is read when the daemon starts. + The command-line options `--bind ADDRESS` and `--port PORT` override these values for one daemon run. The listener uses plain HTTP, so remote access requires an SSH tunnel or TLS reverse proxy; see [Web viewer → Access and security](web-viewer.md#access-and-security). ## `[log]` diff --git a/docs/web-viewer.md b/docs/web-viewer.md index 42730001..8da1dff1 100644 --- a/docs/web-viewer.md +++ b/docs/web-viewer.md @@ -30,7 +30,7 @@ Terminal programs may write to the clipboard through OSC 52; the text reaches th ## Access and security -Configure the listener and credential in [`[web_viewer]`](configuration.md#web_viewer). The default is `127.0.0.1:8091` over plain HTTP. An authenticated viewer grants repository browsing and interactive shell access. For remote use, do not expose the port directly: tunnel it with SSH or put it behind a TLS reverse proxy. +Configure the listener and credential in [`[web_viewer]`](configuration.md#web_viewer). The default is `127.0.0.1:8091` over plain HTTP. An authenticated viewer grants repository browsing and interactive shell access. For remote use, do not expose the port directly: tunnel it with SSH or put it behind a TLS reverse proxy. A proxy on the same machine that forwards its own host name, such as `tailscale serve`, needs that name in `allowed_hosts`; [Notifications](notifications.md#web-push) walks through the Tailscale setup, which push notifications also require. If no password or `hashed_password` is configured, the daemon generates a random password, saves it to `~/.nightcrow/config.toml`, and prints it once at startup. `hashed_password` accepts an Argon2 PHC string and takes precedence over `password`. Login attempts are rate-limited and issue an HTTP-only, SameSite cookie; logout revokes the server-side token. Tokens are persisted in `~/.nightcrow/sessions` and use the configured `session_ttl_hours` (`24` by default, `0` for no server-side expiry). See [Configuration](configuration.md#web_viewer) for limits and reload behavior. diff --git a/src/config/web.rs b/src/config/web.rs index 7176d36a..b6b651e5 100644 --- a/src/config/web.rs +++ b/src/config/web.rs @@ -40,6 +40,10 @@ pub struct WebViewerConfig { /// of a re-login this surface is worth, and on a loopback-bound session /// there may be no one to re-authenticate against. pub session_ttl_hours: u64, + /// Host names a loopback-bound viewer answers to besides loopback ones: + /// the name a local HTTPS proxy forwards, such as `tailscale serve`'s + /// `machine.tailnet.ts.net`. Matched without the port, ignoring case. + pub allowed_hosts: Vec, } impl Default for WebViewerConfig { @@ -50,6 +54,7 @@ impl Default for WebViewerConfig { password: None, hashed_password: None, session_ttl_hours: DEFAULT_SESSION_TTL_HOURS, + allowed_hosts: Vec::new(), } } } diff --git a/src/web/common/conn.rs b/src/web/common/conn.rs index 5442121a..3e8ede4f 100644 --- a/src/web/common/conn.rs +++ b/src/web/common/conn.rs @@ -138,11 +138,13 @@ pub fn origin_allowed(head: &RequestHead) -> bool { /// `evil.example` to 127.0.0.1 would otherwise give their page a same-origin /// position from which to POST `/login` and read the reply. /// -/// A loopback-bound server can only legitimately be addressed as loopback, so -/// any other Host is refused. Bound off-loopback, the operator has taken -/// responsibility for the network path, and the check would reject legitimate -/// proxied hosts, so it does not apply. -pub fn host_allowed(head: &RequestHead, bound_loopback: bool) -> bool { +/// A loopback-bound server can only legitimately be addressed as loopback, or +/// by a name the operator listed in `allowed` for a local proxy, so any other +/// Host is refused. Listing a name is safe against rebinding as long as the +/// operator, not an attacker, controls what it resolves to. Bound off-loopback, +/// the operator has taken responsibility for the network path, and the check +/// would reject legitimate proxied hosts, so it does not apply. +pub fn host_allowed(head: &RequestHead, bound_loopback: bool, allowed: &[String]) -> bool { if !bound_loopback { return true; } @@ -158,6 +160,7 @@ pub fn host_allowed(head: &RequestHead, bound_loopback: bool) -> bool { }; let name = name.trim_start_matches('[').trim_end_matches(']'); name.eq_ignore_ascii_case("localhost") + || allowed.iter().any(|a| a.eq_ignore_ascii_case(name)) || name == "127.0.0.1" || name == "::1" || name diff --git a/src/web/common/conn/tests.rs b/src/web/common/conn/tests.rs index 614bc326..3297a9b3 100644 --- a/src/web/common/conn/tests.rs +++ b/src/web/common/conn/tests.rs @@ -30,7 +30,7 @@ fn host_allowed_accepts_loopback_spellings() { "127.0.0.2", ] { assert!( - host_allowed(&head_with(&[("Host", host)]), true), + host_allowed(&head_with(&[("Host", host)]), true, &[]), "{host} must be accepted" ); } @@ -41,15 +41,18 @@ fn host_allowed_refuses_a_rebound_name_on_a_loopback_bind() { let head = head_with(&[("Host", "evil.example"), ("Origin", "http://evil.example")]); assert!(origin_allowed(&head), "precondition: origin matches host"); - assert!(!host_allowed(&head, true), "a rebound name must be refused"); + assert!( + !host_allowed(&head, true, &[]), + "a rebound name must be refused" + ); } #[test] fn host_allowed_defers_when_bound_off_loopback() { let head = head_with(&[("Host", "nightcrow.internal")]); - assert!(!host_allowed(&head, true)); - assert!(host_allowed(&head, false)); + assert!(!host_allowed(&head, true, &[])); + assert!(host_allowed(&head, false, &[])); } #[test] @@ -74,3 +77,16 @@ fn connection_slot_releases_on_drop() { assert_eq!(counter.load(Ordering::Acquire), 0); assert!(ConnectionSlot::acquire(&counter, 1).is_some()); } + +#[test] +fn host_allowed_accepts_a_listed_proxy_name_on_a_loopback_bind() { + let allowed = vec!["box.tail1234.ts.net".to_string()]; + for host in ["box.tail1234.ts.net", "BOX.tail1234.ts.net:443"] { + assert!( + host_allowed(&head_with(&[("Host", host)]), true, &allowed), + "{host}" + ); + } + let other = head_with(&[("Host", "evil.example")]); + assert!(!host_allowed(&other, true, &allowed)); +} diff --git a/src/web/viewer/server/dispatch.rs b/src/web/viewer/server/dispatch.rs index 28b062ae..06147bad 100644 --- a/src/web/viewer/server/dispatch.rs +++ b/src/web/viewer/server/dispatch.rs @@ -58,7 +58,7 @@ fn handle_connection(mut stream: TcpStream, state: Arc) { // (1) Host, then Origin — both before anything reads state. Origin only // proves the two agree, which a DNS-rebound attacker controls outright. - if !conn::host_allowed(&head, state.bound_loopback) { + if !conn::host_allowed(&head, state.bound_loopback, &state.allowed_hosts) { let _ = stream.write_all(&text_response("403 Forbidden", "unexpected host")); return; } diff --git a/src/web/viewer/server/mod.rs b/src/web/viewer/server/mod.rs index a1af31b7..dc716b62 100644 --- a/src/web/viewer/server/mod.rs +++ b/src/web/viewer/server/mod.rs @@ -37,6 +37,8 @@ pub(super) const TERM_POLL_TIMEOUT: Duration = Duration::from_millis(10); pub struct ViewerState { pub(super) session: Arc, pub(super) bound_loopback: bool, + /// `[web_viewer] allowed_hosts`: names a loopback bind also answers to. + pub(super) allowed_hosts: Vec, pub(super) auth: Auth, pub(super) sessions: SessionStore, pub(super) limiter: RateLimiter, @@ -58,6 +60,7 @@ pub struct ViewerServer { pub struct ViewerOptions { pub bind: IpAddr, pub port: u16, + pub allowed_hosts: Vec, pub auth: Auth, pub sessions: SessionStore, pub hot: crate::config::AgentIndicatorConfig, @@ -91,6 +94,7 @@ impl ViewerState { } Self { bound_loopback: options.bind.is_loopback(), + allowed_hosts: options.allowed_hosts, auth: options.auth, sessions: options.sessions, limiter: RateLimiter::new(), @@ -133,6 +137,7 @@ impl ViewerServer { ViewerOptions { bind, port: viewer.port, + allowed_hosts: viewer.allowed_hosts.clone(), auth, sessions: session_store, hot: launch.agent_indicator.clone(), diff --git a/src/web/viewer/server/tests/mod.rs b/src/web/viewer/server/tests/mod.rs index 699c84c9..91a0fbb7 100644 --- a/src/web/viewer/server/tests/mod.rs +++ b/src/web/viewer/server/tests/mod.rs @@ -51,6 +51,7 @@ pub(super) fn server_with( ViewerServer::start(ViewerOptions { bind: "127.0.0.1".parse().unwrap(), port: 0, + allowed_hosts: Vec::new(), auth: Auth::from_plaintext("swordfish").unwrap(), sessions: SessionStore::new(crate::config::WebViewerConfig::default().session_ttl()), hot, From e13b3f0ff0bf886988af5d52b7c2559771784b32 Mon Sep 17 00:00:00 2001 From: code0xff Date: Thu, 29 Oct 2026 10:21:19 +0900 Subject: [PATCH 05/13] chore: send no build context to the visual-test image scripts/visual/Dockerfile copies nothing from the checkout, which is bind-mounted at run time, but `docker build .` still uploaded the whole tree, including a multi-gigabyte target/. Ignore everything. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry --- .dockerignore | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..abb2fa1f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +# The visual-test image (scripts/visual/Dockerfile) copies nothing from the +# checkout, which is bind-mounted when the container runs. Sending the build +# context would upload target/ and node_modules/ for nothing. +* From e0081436cd601961163e6eebbb85c25b1f3c2d6e Mon Sep 17 00:00:00 2001 From: code0xff Date: Thu, 29 Oct 2026 10:21:31 +0900 Subject: [PATCH 06/13] feat(viewer): turn Web Push on per browser and open the asking terminal A service worker (public/sw.js) shows each push and, when tapped, opens the viewer with `notice-repo`/`notice-pane` in the address. The page applies that once at startup: it remembers the pane as the project's last one and puts the project in front before its first poll, so the usual attach focus selects it. The worker caches nothing and answers no fetch. The settings menu gains a Notifications section: a per-browser switch, a test button, and the reason when push cannot be offered (not a secure page, iOS outside a Home Screen app, permission blocked, no browser support, or no daemon key). Permission is asked only from that switch. A subscription the daemon has dropped is dropped in the browser on the next read, so the switch does not claim "on" falsely. docs/notifications.md covers enabling it, `tailscale serve` with `allowed_hosts`, iOS, and why notifications may not arrive. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry --- docs/README.md | 2 +- docs/notifications.md | 33 ++++- ...tor-DILpvNkQ.js => HtmlEditor-CrB2hwHy.js} | 2 +- ...minal-Lp7ty5Uw.js => Terminal-D1zALCZX.js} | 24 ++-- .../{api-CKtlIBMl.js => api-AKG3BG8c.js} | 2 +- viewer-ui/dist/assets/index-CxBQ5Dt3.js | 11 ++ viewer-ui/dist/assets/index-DfOm43ao.js | 11 -- viewer-ui/dist/assets/lastPane-Chger8oF.js | 1 + .../dist/assets/visualViewport-hwlIeclE.js | 1 - viewer-ui/dist/index.html | 6 +- viewer-ui/dist/sw.js | 51 +++++++ viewer-ui/public/sw.js | 51 +++++++ viewer-ui/src/api/push.ts | 18 +++ .../NotificationSettings.test.tsx | 59 ++++++++ .../notifications/NotificationSettings.tsx | 52 +++++++ .../src/components/shell/SettingsMenu.tsx | 2 + .../notifications/usePushNotifications.ts | 61 ++++++++ .../lib/notifications/noticeTarget.test.ts | 38 +++++ .../src/lib/notifications/noticeTarget.ts | 40 ++++++ .../src/lib/notifications/webPush.test.ts | 117 +++++++++++++++ viewer-ui/src/lib/notifications/webPush.ts | 134 ++++++++++++++++++ viewer-ui/src/main.tsx | 8 ++ 22 files changed, 691 insertions(+), 33 deletions(-) rename viewer-ui/dist/assets/{HtmlEditor-DILpvNkQ.js => HtmlEditor-CrB2hwHy.js} (99%) rename viewer-ui/dist/assets/{Terminal-Lp7ty5Uw.js => Terminal-D1zALCZX.js} (60%) rename viewer-ui/dist/assets/{api-CKtlIBMl.js => api-AKG3BG8c.js} (97%) create mode 100644 viewer-ui/dist/assets/index-CxBQ5Dt3.js delete mode 100644 viewer-ui/dist/assets/index-DfOm43ao.js create mode 100644 viewer-ui/dist/assets/lastPane-Chger8oF.js delete mode 100644 viewer-ui/dist/assets/visualViewport-hwlIeclE.js create mode 100644 viewer-ui/dist/sw.js create mode 100644 viewer-ui/public/sw.js create mode 100644 viewer-ui/src/api/push.ts create mode 100644 viewer-ui/src/components/notifications/NotificationSettings.test.tsx create mode 100644 viewer-ui/src/components/notifications/NotificationSettings.tsx create mode 100644 viewer-ui/src/hooks/notifications/usePushNotifications.ts create mode 100644 viewer-ui/src/lib/notifications/noticeTarget.test.ts create mode 100644 viewer-ui/src/lib/notifications/noticeTarget.ts create mode 100644 viewer-ui/src/lib/notifications/webPush.test.ts create mode 100644 viewer-ui/src/lib/notifications/webPush.ts diff --git a/docs/README.md b/docs/README.md index 29057597..2ef88bab 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,7 +12,7 @@ Start with the [top-level README](../README.md) for the five-minute install and | [Session state](session-state.md) | Recent-activity indicator and files written between runs | | [Web viewer](web-viewer.md) | Browser access, cloning, mobile layout, and security | | [Configuration](configuration.md) | `~/.nightcrow/config.toml`, defaults, validation, and reload scope | -| [Notifications](notifications.md) | `nightcrow notify`, agent completion hooks, and plugin notices | +| [Notifications](notifications.md) | `nightcrow notify`, agent completion hooks, plugin notices, and Web Push | | [Plugins](plugins.md) | Plugin installation, opt-in, and bundled recovery plugin | | [Releasing](releasing.md) | Patch-only versioning, fork promotion, and official binary Releases | diff --git a/docs/notifications.md b/docs/notifications.md index 636cbb6b..86429a0f 100644 --- a/docs/notifications.md +++ b/docs/notifications.md @@ -1,6 +1,6 @@ # Notifications -A terminal pane can ask for its person. The attached TUI marks that project's tab, and an open web viewer shows the message as a toast. +A terminal pane can ask for its person. The attached TUI marks that project's tab, an open web viewer shows the message as a toast, and browsers that turned on notifications receive a push notification even when closed. ## `nightcrow notify` @@ -36,6 +36,33 @@ A plugin raises the same notice with its `attention` command. The bundled recove ## Web Push -When the daemon's web viewer is running, each notice is also sent as a Web Push notification to every browser that turned notifications on in the viewer. The phone's browser can be closed. A notice reads as the project name, then the pane's title and message. Several notices from one pane within 10 seconds produce one notification, and a newer one replaces the older on the device. +When the daemon's web viewer is running, each notice is also sent as a Web Push notification to every browser that turned notifications on. The browser does not have to be open. A notification shows the project name, then the pane's title and the message. Several notices from one pane within 10 seconds produce one notification, and a newer one replaces the older on the device. Tapping it opens the viewer on that project with that terminal selected. -The daemon keeps its push key and the list of subscribed browsers in `~/.nightcrow/push/`. Deleting that directory turns notifications off for every browser; each has to turn them on again. +### Turning it on + +Open the viewer's settings menu and switch **Notifications** on, then allow notifications when the browser asks. Each browser is switched separately. **Send a test notification** checks the whole path from the daemon through the browser's push service to the device. + +Browsers offer Web Push only on a secure page: `https://`, or `http://localhost` on the machine running the daemon. A phone reaching the daemon over a plain `http://` address cannot turn it on; the menu says so. With Tailscale, serve the viewer over HTTPS from the daemon's machine: + +```bash +tailscale serve --bg 8091 +``` + +Tailscale forwards the browser's host name, which a viewer bound to loopback (the default) refuses unless it is listed in [`allowed_hosts`](configuration.md#web_viewer): + +```toml +[web_viewer] +allowed_hosts = ["..ts.net"] +``` + +Restart the daemon after adding it, then open `https://..ts.net` on the phone. Tailscale provisions and renews the certificate. Sign in again on the new address, since a login belongs to one address. + +On iPhone and iPad, Web Push works only in a page added to the Home Screen (iOS 16.4 or later): open the viewer in Safari, choose **Share → Add to Home Screen**, open it from that icon, and switch notifications on there. + +### When notifications do not arrive + +- The switch is missing and the menu says notifications are blocked: the permission prompt was declined. Browsers do not ask twice; allow notifications for the site in the browser's site settings. +- Notifications arrive late on Android: battery optimisation can hold the browser's push connection. Exempt the browser from it. +- Notifications stop after clearing site data or reinstalling the browser: that ends the subscription. The daemon removes it the next time the push service reports it gone, and the menu shows notifications as off again. + +The daemon keeps its push key and the list of subscribed browsers in `~/.nightcrow/push/`. Deleting the directory turns notifications off for every browser. diff --git a/viewer-ui/dist/assets/HtmlEditor-DILpvNkQ.js b/viewer-ui/dist/assets/HtmlEditor-CrB2hwHy.js similarity index 99% rename from viewer-ui/dist/assets/HtmlEditor-DILpvNkQ.js rename to viewer-ui/dist/assets/HtmlEditor-CrB2hwHy.js index 5507e902..01d333da 100644 --- a/viewer-ui/dist/assets/HtmlEditor-DILpvNkQ.js +++ b/viewer-ui/dist/assets/HtmlEditor-CrB2hwHy.js @@ -1 +1 @@ -import{t as e}from"./jsx-runtime-EIAPxkjE.js";import{t}from"./react-BPk_wmJm.js";import{t as n}from"./BusyLabel-BNTNuT1X.js";import{t as r}from"./api-CKtlIBMl.js";var i=t(),a=[8364,0,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,0,381,0,0,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,0,382,376];function o(e){return e===0||e>=55296&&e<=57343||e>1114111}function s(e){return o(e)?65533:e>=128&&e<=159&&a[e-128]||e}function c(e){return o(e)?65533:e}var l=(()=>{let e=new Uint8Array(127),t=0;for(let n=33;n<=126;n++)n!==34&&n!==36&&n!==92&&(e[n]=t++);return e})();function u(e,t,n,r,i,a){let o=e.length,s=a*90,c=0,u=()=>{let t=l[e.charCodeAt(c++)];return t=a&&(t=t*91-s+l[e.charCodeAt(c++)]);let n=p[t];if(n<0){let e=m[t],n=e+h[t];for(;e%#%&}*%}(%}9%}/%})%}*%}*%}?&}&%}3%}&*#%})%#%#)}#&#-#+*%E%%'%'#%}#*V##&##I}#&&##%&%#&&Qf%%))w/0+&%#(#.%-''''++++7}>%4'',##1,#%#&%##&#'##&#*#9)%&%}#*}%,#+P(%A&%#'&##wSD',9E00#y#@}(+}&%&>~!#~!X}#*}(&&}(&}(,%}%&#+&}#&}I%#%}%)#(},'%#*}4%%#%}(''}#/##(##),%-##%%)#&}(.}&%#&}%%}*&#%},&&}&%}#%*'#%})%}D&}&%}-&}6&#&}-,%}#%})-(~+`~,=?~I9'9%~!,#%})%})%}@%}?%}(~!?~#<~#pP~#BG~#=1#%K+~#?#~%;)~#A~#mF1~#A'~'X%'~#lR~#N~'N~#r~#m#-~#i'?%#'%~#B%##%,%#~#_%#0%~#]732~,w~2+#:&#%&'0%&>%}#>##F+)#%&&#(+_}4&}-%}(&}@&}O7Fdf0@+/v4}&WU##&/0#&'('B#%}.%}'+#%}#%%&#&%#%##+#&#)#6#'#.},%}c%},%#%##%&#&%#&~#>'*-.%##%##%}#%%}%'~#)D1}#%*&~#_%%'(~#S2%'.}#~#=##*'*-%}&'%'##&&~'E%.#&~#M4}%%##&'%#~#O1##%&#'+~#~#UA%-%##&~!C%~!-.9:~!1~!-^2/:a~!y,D*J#-5)/4~%23,~#G~!L1~!0X3`~!2+~!!0-~&E~!W~!o,>Y&]~%cZx_&~#O*9#A#'#+I'%#)~!0B*-5A+-((F&*M#)(-7-5+'-3a5Vi~!Y~!?+[)%3),ERHm~!+:D,VG.+)?fB%%*(%)'(#&80%1'8`K8?`+'Z#&O&'H5#*9)A%%5&3))0%39+.*7#()&&*=4@**L)<'_&*+..;(#*+)./&0#3)%')-8(4ixD(&.}%,('aI:,)%,k2231T)I'#/-W7,/'Q#.'Y24+h')37w+vu9i[~>g5uI~=RvdwEg;v/g;uk!!TTSx]@RT!U!#!@VBRUU!'UTe-d0c`e&gSdicedFcrdTaqb.kYcAohdYd@a3e+d}dMdtd.aJ#bqcK`dle/e.e'dwdPdodddjbEb}ogd^ofdpduc6j?l%d{drdqc)d7bacOdQ%T#Y)X.sR[yH>6Vyv3[xwLu>vo'!*.[yBacahoj>6Rew3[xqdZa#!a&#^(X-[yG>6Vyu3[xvg3sEr|g.u/Ri9db0T#^(Xa)!-[y;>6Vylg4wKs{JwNZt3@3r=c4Z([xlg;wKt!cpq's@v7A'*a(a+!-a#[y<3Dt?3Dt'>6Vym3[xmg9rxsNJwLZt4~?r?db1T#`-!(Xa,!0[yS>6Vz%NuQs.g4wKtnJwNZtS@3r>c4Z([y%g;wKtrdga8!a(!#&T*Y-Xa#!a06Vz43[y3JwNZtf@3s!Ju}!%Dti:pm3c_%X#tjB5pkd6q!r]u?voC'*-a.a2!0a&a+[yI3DtI3Ds~3DtH>6Vyw3[xx;:s#~<5pKJwNZtE@3r~d`a)!a2T#a.(!+U.X1[yT3Dt`3Dtv>6Vz&3[y&g9rxwzcxstPu.6Vz23[y1g3sEr}wkg{NuQRg{ci(U#5@b`~,cg#U(2WnH5wugcRh7dX#T(Y,a'Ta!!a,[yZ<]mj>6Vz,3[y+Pv#5ReZKu+=,%!H}7ABwkaS?Rh:BcW(X#<]mrj:ubv/ARekdg%!(!a.*Ta(Y.X1!#sP>Rl*Dt6[y>>6Vyo3Wf*jOvuumvuRgRJuq*!:96Re}3[xy~<5s%JwJZt1~Gs)c;&!#2sJkNuXvzq7rxu,Re8dka4!a8(aEZ+a@Y.X1Xa)[yd=Bs(3DtP>6Vz53[y4cX#X&Re:avRe9~<5s&JwJZtQ~Gs*i^rzvdRg+Jv{%!2sbB@bX}kdga,!Za?&^*T1/!a'Dt+[y6>6Vyf3Wf%g/u;s4hGu6?Rh-JvZ,!c%#&RoX54Rivj7uyvf8RgTKvZB%*!2sGh[y93Wf)coZ(T,6VyifluvRgC@95@B@bX~/hFu34cC#T,k/unq8w8Q5RkUklwQuzunq8w8Q5Rk8d/rJu?v8w9)-&!a0a;a&aIWejg3sEr/h1s23E~5c:Z&bX};kKv?w&unuVu5Rjc;>bs)#~@:Rh.=ay6Vyt3[xuNuPRi&NuPwpi#RoWh?vf8Ri%Jv]!%Ri:KvxD!.'2WeAjZu`q9rxu,Re7woeAg-unLq(qA_/*2Wg_g3u5q^9:4E}/jTrxrzv=Wkkd~0UX#^^Xa-a1a5T&a=U1a'*aEa]!a*aPaA-adok[y54Rn>;:p3~Dp5g9rpsFNvZqjg3uJp4~<5p0Pw;5qlJwNZt*@3p1Pw:5p/Ou!5p2JvG'!6Vye=Rl!9ARiq5E}Qg=ucRkBE|oJrJ_@Wk~@Wk{JrJ_@Wk|@WkyJrJ_@Wk}@WkzJvO_[y2g-vMRmiKuYC!)&>Ri;>Ri<@3RkNc](X#@9Rk=g5vuRmhKvDB!+'=]meg3u4Rmgd)#Y'Vz3CARmfd`a+!%T'!+#Ta1Ta6TaM-sTDt9[yA9sYd'%Y#s[[xpj:ueunaXRgEjRq,v-vuqdd2'`#6Rev<32@5>:2vyRgNj8w)v86Vyj3[xkg6ruwjcqsrPw;5r*Ku]D'Zt-@3r(~?r.i[vwv]dU1a--U#`a4(g/vsRhPOu!5RhLj:rmu9Wo!~@:wdh@g/vsRiTjXuvvNr}:RhBj^v(pyw8unRn]dz1UYa'a+^Y(!aETZalaRY.Ta?a4[yDJw1!#qLsW>6Vyrfzq-pLflpwRe|Js>%!Dt@3Dt&Jvy_[xs~HrnjMuwpsw'RecKu+D#'!t<~Grl~?rjg5u-x,gwp{ah!-(~@:Rg~Ou!5Rh'jXuvvNr}:Rh#cW#X/c;&!#2sLi[v7u7RgpJv)(!iLrxu,Re6j7v@s@5Se[e7d`aW!Za(a`T.a#!a3!&aDa-!9)Dt_=6s+3[x~~DR|h~DS6avhGun5RkZj3w)v-]mkKunB!&*]kb97R|icQ#%T'p-Rf8Rf=ct#%'(*!,p,Rf4p+Rf6Rf:Rf3Ds}KvGB)_6Vyk2sM=6Vyp;:pE~DrY~<5pBJwNZt8@3pCh=rt3rWPw:5pAJup_[xoNuPpF9c!#'45pD5ARn)d8#X'X*3@rU72s]h>v<RoUWeL>:Cbb|?JwPZtVg6ruRmzJvD'!6Vz(g/vmRh~Jvy_[y(g9voRgyx*cy(#2>Ri2B9b]~9kIw9u7rluJu3Rg]dI#a%UY'@=p%CAx.gQZ&RhwwygtRm{x5g_Z'+ABqR9Woa=Bp&dV#^*Xa'!&@o{g4v]Rk;Jv{!%Rk[wkkiA5RkiwwfUB=x,fUuqC&*!>RfTg8v0RfV~ARfSd;rJsAuAv9wR'ae+/aO!a@aza/a#[yQ@Wg!2Wemg3sEr0JvB_g>uvReWg2v+Re=KupB_+[y!2AbY~-~Hr2AJwD!(h<~El>h<~El?Kun@+_:9b`}Kg-v/Ri3g;vtwyk_9]k_d=&T#*U.6qh@Ab`|K9:H|CJv[!&3Dtex'fDwC%!Rf[9WlMd[(^X,!a%Z06Vz!@WgBg=v~Rgvg,QRe@awd,#Y+jTv|Q~EfWj]uNr|~FRfXdy#Y&^Ua%!aO.!(a)Ua;=!a@aKap!a-,a!Ta]a[rSa]p?[y82sK=Bq~;:p:~<5p8Pw:5p7d'#Y'Wf(;RnRi[u4w&RgJJvG'!6Vyh=)!&6Ri154s,KuGB_%@r68r:dJ|t`#X(9b6a3b%!/aKa/)!arwve^VyJ;:pR~DpTg3uJpS~<5pOPw;5qmPw:5pNOu!5pQJvG'!6Vyx=wkh'?Rh,x8gyt`w5D!&),(SgyccRgztJ@3pPB5p#d'(Y#<]mmifubw&RgoJvE&!82s^JvF&!8Rf,ADb]~;x=h'rNu]vK!,%'*0RnORh)4Rh*AqQg-vaRnNg;wHwkh'ba~4cE#Ta*x3gctyw@'!+%RnFRnD<4Rn@hFvK5RnCxWg[#`&a0Ua()`1Rm75Rg[c]%X#qi8Rg^NvdRj>BwzgZauwji7Rm6A4wgg]d1#&(*,.0a#Rm;RmRm?Rm@RmARmBe%#^^^Xaea?aC/b+(,!a+a#!a/!>a&Ta6Vy~g6urRf.x,hPrNav!%'RnqRo%Ro#Nu;q[Pw;5r+JwNZtM@3r)d'#Y'Weh;xChL#`&RnmRnoKu}>%(!Rne~Bs-;2wjcussJv+'!aYSO}6@B<5?ba~8LrNvj!.%*ROwungw~ng~:9;Ri^>wtnig;wHRnixDh@|(UZ.x1h@|)!#:2@=be}]?cl{{U#:5Abb}Jds#^YaF!a*b4a#a3aPa>&Tb!bH!*a_!Eau?/a&RjY<]gj>6Vz*;:pe~DrZg,QRj1JwNZtX@wihspcJvZ&!VyX9WmOJu|!|N2WmHJvh&!]ht~Bpbcn&T(!#RmQRmKCARhnKup=!)&Wf+:RhqNuPpf9c!#'45pd5AwghpARn(Ls@w!%,)!RmP@Wfe.a6!a:aO`aJDtL[y`@Wg#>6Vz12@wzoYRoZNuPRi!NuPRhzg=ucRi,@=b`{Yg=ucRi-ACJvB!&Sh[ebSh]ebi`wUuFRm4Jw2_[y0JvB!.>bU{0j9udv:Bb_{TJv`!&g/r|snj6v(us5d,#Y(56H}[978H}]Jw5!&g1rushJvB!+j;v{u5?zDhd}6}bj;v{u5?zDhe}6}ce*#`(^^^a[aea!=!a6a*aoXb1a.!aAbL!b>,b'aL!aV@Wf|2Wlg3[y/JwNZt^@3piPw:5pgJunZou3@rsJva&!Vy_gg5u-rqJvy'!@9RkQcH(T#=>Ri~@Ri}@2@@=aybb}XjWv0Q~EfEj3vLv;5@d##Y+jTv|vV~EfFj]uNpn~FRfGdgaK!Z2&!a8a-Tb({E!acTbM*!a(DtY[yYd'%Y#sl[y*hHvh>Re5x2c{Z}.j4uCvcawRiMd+#X+_x&d!},<5RkX;2Hzw@x,gavfB-!{CcF&T#Roe;RodwWbBg5urRgaKvHC*_6Vz+<4opieuew&Rmq@d]&Y)X,T#X0Rh}Ro5CE{A9b]{@;5x#eO{:g;urRi+KrNA!%(Ro3>Ro79;Ri_Ku@>{;&!x%gX|{KunA_+g5QRj/g3u5Rj#g>uERj%wio/xRhS&!,!#^1U}wba{8>>@=be}qC@:D5ba{7Ku+A&!}x?ba}t>>@=be}se(aA^^^Uat!b0#{pa+awUazbGa#aLb9bgaWac'a5TbS=Br!d1#`%scp_Jvl!#rT>Re0JvX&!VyN=H{Fcm#U&:pY=ReaJv2&!]h0=]nUJvG'!6Vy|=!|l=w^e1bp#&Re2Re3BDx7gH#T|f5H|eKuZ>!%(:qNAH{]Jv6!+3B2B9=b^{X<5x]z/@awRoTd+#Y(az]hFhCrm4d,#Y+jTv|Q~EfMj]uNr|~FRfOdCa!Xa9_X#@>@=be{#KuY>!+&4Ezyi[ugv&RjIdea+T)#UXa&T-T&a!Rh9auRmW=]kLg5vuRn+g3u4Rn-Ow6ARn,hHus5xNk?#UX(U~)/g8v0RkD~AwkkF?Ri.OuNBwkkA?Ri/d|a2`a*^UYa.!aBTZaTa'Xa;!(!2!-a#b2[yC>6Vyq3[xr2Wi?g1rusVh%s?DtF~<5rbJs;%!DtBfswKtCj[uvuSsEu3RgVx3o:u+wN'*Zt;@3rd~Grh~?rfg8w)Lq)qE&-a%!>bI|`jWv0vV~EfCjTv|vV~Ef@j]uNpn~FRfBcK#T']gWNu7x,k7q4ai(0!hHv8waiL2b`{QJv*_Ouv2qgjZa&!*UaA=2Wls3cH#T(@Ri|b~'#23s9h<~El.d'#Y&Dtxi^rzvdRl#d*#U%(o|B2s`hJwSaxRmDKv4B&!1:Rmdd5#`'Vx}to~Hq{x'f1v3(!BA5ba|bJv_&!Wfug1v]ReIdO+U/Y#&G}-8wze=Rh{g1v]ReHg/uQRf/by#)ibQwERl/cH#T(@Ri{cNu+vlax-!(#a0qa9aY?C9:9au@9Cb]}9cl#U*5;5KqRlR=c>Z,k#u3vWs@u2]krvgwyk^9]k^Jv3_@WfbAARkhJw2_[x|JvB_wkoIRoKwkoJRoLd'(Y#<]gm=<9Awwn;;Rn=c:Z'ARn<=Rn8Jw0!&>Rn:>Rn6cY#a7+!a&=978H{Dd_#{2^Y%_+qbbb{6g3sERhsbU{?dfa.,`a(XaRn7Jw0!&>Rn5>Rn9Lunw?&a2!,5ReGJwPZtK<7Rh+h<~El,Pv#5ReR@awwxjCg,ulRjDJv6&!]j!z?aQeeg>w=Shx'h-u(!%Ro.w~h.zPdNZ(X,Ya![x{;9ReY;wkgxRiF:x?ap#Y&RmUgA9:=b^}zKuh=a''!3awRk3c*'!#aHRk6c+Z&Rk5Rk4Jv)&!awRjSawd9*`#0?C2@EzMj8uuq@_+=ayb^|W~ARkEOuN]k@7dhzV^X/X&a-#zRzSb`zXcJzTT#2WkVKvDBzW!%FzY9;5bbzWjQrquJu3Jw3%!b`zU=ayb^zQd:#X(T-a!6Vyywxh}=b]{Jg=u1RiAdGp~qHtzv!w(wA+a+a;!,')~<5qeGzq9F{W=c##%s5au:5aU3CBE|;d4#X(D!a&6Vygx(b;#(=]ed?C2F{NaU@@=I|1OuNBc1Z+jTqIsBv=Wlc~Cw`fl2WlZ~AcTa%!Z+jTqIsBv=Wlb~Cw`fh2WlYk+uNqJsBv=WlSg,u3dca3#UXaMYa)TaB-=cM|7T#cB{/T#=ayaL.bo6!a#CbTa'T#Re{2Wlh2@G{yg6t~Ro_NvdRfticuRQRllJv3&!x&c|zs@Jw3!%RflwpfkRlpKuL;%(!Re<@G|C2GzdhIvuBwgjAg-u0RjAKQB%!(GzZ@G|5NuuRl7d='T+Y#Vy[gJvA!)@wma=]m1ifuaw&RmnLs@vT'!|/+[y,g:v>ReTJw1!#qX=x!eC{bLu+wT&)ZtZauq_~Graci&U#F|89:r_Lupvq!.)&2RlG8RfaC=x!eF{_h?rpWlmd&'!#X|&]k::xJey#`'T|+RlyARl9b[z[>RfZ:RlL:RfRwlg/ARl;9;RlxKv,A/!%7s69<74=BA5ba{-8Bde#`aRfk=ayb^}4~Ad1#`*@@=aybb{w2@>==KqRlT=c>Z,k#u3vWs@u2]kqReD2@G{42@G{5~DpM~<5rc=Bx6i>{RT#RnI@zCx]y]z:2Jv[!zr5Awyk]9]k]dD(Y+X#6Vz.g=wKtgwhaCwgmTWj2Lu,w%_+/[y-B;b^xeg3u3Rj-2@bX{*KrJRkdJwMZtc3Dtd@BcG#T'9bWxg2@2Fznd*#Y+;2x'c}wRn%:A5B;bZ~%KvhCa!a2!x>k7#Uxb@b{#xaRk7Jw0!)>wwhlShl}6>wwhmShm}6CJvB!.x'hhvj{!!5Bwkhhbaz}x'hivjz~!5Bwkhibaz|xEhTrNu,v-vpD!a%&/)a3a.,%Ro2t[CE{)@3re9b]{%wjo09:rgc:Z&Ro6=Ro89;Ri`dSaL'UYzxZb)7Rka3xRhT&!,!#^1U}vbaz{>>@=be}yC@:D5bazzKu+A&!}{?ba}y>>@=be}wxBh[t`u~vJvr!%a!a()a,a0a4RoC=]o;Ju(!%RoGRhdwjh`=]oAg>w#Ro?g5vuRo=NvdRl|Ku]C.!&;RoEJvB!%RoORoMBx'h[v+_?w~h`}~5?w~hd~!xKh]oiptu-utv.vp!#%&a30a@a'a+(a/aOp(o~p!RoDJu(!%RoHRhewjha=]oBNvdRl}g>w#Ro@g5vuRo>c[#X']ox7gL#TzuwjirRipcon;>z=h-MSh.Mwqczx'a7vj&!>Re4@=ResJt__NuPRi*NuPRi)j]uNr|~FRfzKrJ>_+@Wfy@Wf]2WocKrJRn1~?rOc:Z&Rn2=w=Rh=g3w*wwgGRgGcW(X#;Sg}M2Gzk@Jv`!&awRl=wsfGIz`dKZ*T'Y-:RhR7RhQg5u-p`j6v(us5d,#Y+~Awkia?RicOuNBwkibba}Ld6p~tyu_vbAa'a+!a/'a3aEa8a!>Sh,ebJv{!&Sh@ebSaReb9;SgwebNuPRi(NvdRl)NuPRi'hHu^(!a.3wkhZba~(x,h^u(A!&(SoCMRhb5Bz=h[eb?w~hb~6x,h_u(A!&(SoDMRhc5Bz=h]eb?w~hc~6e)aA1T#T,^^^c-bMb&blcPaP(a/!0!bA=b5c@a(!bfbrc#2afwmhARnjwchORnp2Wlf3DtsNvdRl-2@wpa<]m0bx(#:awRk2@Jw3!%RfhwpfgRlnKQB%!(G{V@G|'NuuRl6d='T+Y#VyUgw*wgj@g-u0Rj@Lu+wT&)ZtUauq]~GrGci&U#F|39:rELrNvj!.%*RhCwunfw~nf~:9;Ri]>wtnhg;wHRnhx3hDs@v~!/+'@Wfr@9RkSNu&Rlo=@<5GzoKs0@_+@Wl+@awRkmJuh!-3d(}pY#qWJvj!%Rm(:Jw3!%Rm,Rm*de&!1U-U#`)Re;@G|.@9Ri82@wjfvRlq=@<5GzpLvOvr!).&2RlF8Rf`C=x!eE{.Jw3_g2QRlkhLrpWlPde(!#U{s,UXa*Ta'[y'g:v>ReS;x0PZ&RnlRnn~HrKJw1}f!=x!eB|2w]aP(#Xa&a*Ta.Ua2a7=]iOd'#Y&Ro&WnWg;u.RiDg6vjRiBNvdRlzhNvj]nYJuW_2Wm3x)kFze{9d])!a.!,Y01!#&aC!a3RndC=ox~BrC@2b^{pg,rlse7x'ksuq!%Rm.E{xidw(wBRmGx9o+)X#wwo-So-}69:Rl4@xSf@a#XZ'X)X,Ta(/ARl8b[xc>RfY:RlI:RfQwlg.ARl:9;Rlwdn'#^XafaQa1X1TaHTa)@b[{zcZ#X'7RkwWg@Ou4ARn&x)kG#{,g7u/RkGdH'U#Y*Vz'Wm&CARm|bx#(A]gUbUzJj9Q~=d,#Y(56H}l978H{U7d,0#U*2>ABb_xZ978BbU{e~AJQ{g!978BbU{hxMh?ad{oUYZ.x1h?{l!#:2>@=be}F?JvS!&BG{d7BG}(Bde#`a1X,Ya@!a'P~=wxf@2bZ}I56B2@@=aybb}08@55B9;5bb}Rfg=ayb^}&OuNBKuLA!)a!P~=x#fD{f2@>==23ExY5@Dah89b^~689Jv)!~2b[~1Lv'w(%*!a#bX|aPrmawRe]keu7uhv-q6rxu,q`xTo]/a5aU!bNaDXbi!b-!ao!bRhG<7@C5vIbs)#?C2F|9jPv0w.vISh-MKvUaz(.!9ABbb|[5;5unwfh;9:4E|YjQsBt|vjx'hYq3!(?C2F|J:2kJv~vYrquJu3x4ib#T)2@SmZM?C2F|Bj:rmu9@xPhI(a*a#U#`a3-5Abb|L~@:RhK9:4E|0@52B5G|#C::aY?C2F|-:2!a)-g>>0<=9}function _(e){return(e|h)-m.LOWER_A>>>0<=5}function v(e){return(e|h)-m.LOWER_A>>>0<=25}function y(e){return e===m.EQUALS||v(e)||g(e)}var b;(function(e){e[e.EntityStart=0]=`EntityStart`,e[e.NumericStart=1]=`NumericStart`,e[e.NumericDecimal=2]=`NumericDecimal`,e[e.NumericHex=3]=`NumericHex`,e[e.NamedEntity=4]=`NamedEntity`})(b||={});var x;(function(e){e[e.Legacy=0]=`Legacy`,e[e.Strict=1]=`Strict`,e[e.Attribute=2]=`Attribute`})(x||={});var S=class{decodeTree;emitCodePoint;errors;state=b.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=x.Strict;runConsumed=0;constructor(e,t,n){this.decodeTree=e,this.emitCodePoint=t,this.errors=n}startEntity(e){this.decodeMode=e,this.state=b.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(e,t){switch(this.state){case b.EntityStart:return e.charCodeAt(t)===m.NUM?(this.state=b.NumericStart,this.consumed+=1,this.stateNumericStart(e,t+1)):(this.state=b.NamedEntity,this.stateNamedEntity(e,t));case b.NumericStart:return this.stateNumericStart(e,t);case b.NumericDecimal:return this.stateNumericDecimal(e,t);case b.NumericHex:return this.stateNumericHex(e,t);default:return this.stateNamedEntity(e,t)}}stateNumericStart(e,t){return t>=e.length?-1:(e.charCodeAt(t)|h)===m.LOWER_X?(this.state=b.NumericHex,this.consumed+=1,this.stateNumericHex(e,t+1)):(this.state=b.NumericDecimal,this.stateNumericDecimal(e,t))}stateNumericHex(e,t){let n=e.length,{result:r}=this,{consumed:i}=this;for(;t>>0>9)return this.result=r,this.consumed=i,this.emitNumericEntity(n+m.ZERO,2);r=r*10+n,i+=1,t+=1}return this.result=r,this.consumed=i,-1}emitNumericEntity(e,t){if(this.consumed<=t)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(e===m.SEMI)this.consumed+=1;else if(this.decodeMode===x.Strict)return 0;return this.emitCodePoint((this.decodeTree===f?c:s)(this.result),this.consumed),this.errors&&(e!==m.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}flushAndEmitLegacyOrReject(e,t,n,r){return this.consumed=e,this.excess=t,this.result===0||this.decodeMode===x.Attribute&&(r===0||t>1||y(n))?0:this.emitNotTerminatedNamedEntity()}stateNamedEntity(e,t){let{decodeTree:n}=this,r=e.length,i=this.decodeMode===x.Strict,{treeIndex:a}=this,{excess:o}=this,{consumed:s}=this,c=n[a];for(;t>7;if(u===0){if(i!==l)return this.flushAndEmitLegacyOrReject(s,o,i,0);a+=1}else{let e=i-l;if(e>>>0>=u)return this.flushAndEmitLegacyOrReject(s,o,i,0);let t=n[a+1+e];if(t===0)return this.flushAndEmitLegacyOrReject(s,o,i,0);a=a+u+t&65535}if(c=n[a],t+=1,o+=1,t>=r)break}if(t>=r)break;if((c&(p.VALUE_LENGTH|p.FLAG13))===p.FLAG13){let i=(c&p.BRANCH_LENGTH)>>7,{runConsumed:l}=this;if(l===0){let n=e.charCodeAt(t);if(n!==(c&p.JUMP_TABLE))return this.flushAndEmitLegacyOrReject(s,o,n,0);t+=1,o+=1,l=1}for(;l=r)return this.treeIndex=a,this.excess=o,this.consumed=s,this.runConsumed=l,-1;let i=l-1,c=n[a+1+(i>>1)]>>((i&1)<<3)&255,u=e.charCodeAt(t);if(u!==c)return this.runConsumed=0,this.flushAndEmitLegacyOrReject(s,o,u,0);t+=1,o+=1,l+=1}this.runConsumed=0,a+=1+(i>>1),c=n[a];continue}let l=c>>>14,u=e.charCodeAt(t);if(l!==0){if(!i&&(c&p.FLAG13)===0&&(this.result=a,s+=o-1,o=1),u===m.SEMI)return this.emitNamedEntityData(a,l,s+o);if(l===1)return this.flushAndEmitLegacyOrReject(s,o,u,l)}let d=C(n,c,a+(l||1),u);if(d<0)return this.flushAndEmitLegacyOrReject(s,o,u,l);a=d,c=n[a],t+=1,o+=1}return!i&&c>>>14&&(c&p.FLAG13)===0&&(this.result=a,s+=o-1,o=1),this.treeIndex=a,this.excess=o,this.consumed=s,-1}emitNotTerminatedNamedEntity(){let{result:e,decodeTree:t}=this,n=t[e]>>>14;return this.emitNamedEntityData(e,n,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(e,t,n){let{decodeTree:r}=this;return this.emitCodePoint(t===1?r[e]&p.VALUE_MASK:r[e+1],n),t===3&&this.emitCodePoint(r[e+2],n),n}end(){switch(this.state){case b.NamedEntity:return this.result!==0&&(this.decodeMode!==x.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case b.NumericDecimal:return this.emitNumericEntity(0,2);case b.NumericHex:return this.emitNumericEntity(0,3);case b.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;default:return 0}}};function C(e,t,n,r){let i=(t&p.BRANCH_LENGTH)>>7,a=t&p.JUMP_TABLE;if(a){if(i===0)return r===a?n:-1;let t=r-a;if(t>>>0>=i)return-1;let o=e[n+t];return o===0?-1:n+i+o-1&65535}if(i===0)return-1;let o=i+1>>1,s=n+o+i;for(let t=0;t>1)]>>((t&1)<<3)&255;if(i===r)return s+e[n+o+t]&65535;if(i>r)return-1}return-1}function ee(e){return e===34?`"`:e===38?`&`:e===39?`'`:e===60?`<`:e===62?`>`:` `}function te(e,t){if(e.lastIndex=0,!e.test(t))return t;let n=``,r=0;do{let i=e.lastIndex-1;r!==i&&(n+=t.substring(r,i));let a=t.charCodeAt(i);n+=ee(a),r=i+1}while(e.test(t));return n+t.substring(r)}var ne=/[&<>\u{A0}]/gu;function re(e){return te(ne,e)}function ie(e){return re(e)}function ae(e){return e.replace(/\s+/g,` `).trim()}function oe(e,t){let n=new Map,r=new Set;for(let{id:e,text:i}of t)n.has(e)?r.add(e):n.set(e,i);return e.map(e=>{if(e.locked!==null)return e;if(r.has(e.id))return{...e,locked:`MARKER_CLASH`};let t=n.get(e.id);return t===void 0||ae(t)!==e.sourceText?{...e,locked:`SCRIPT_GENERATED`}:e})}var se=class extends Error{code;params;constructor(e,t,n){super(n),this.code=e,this.params=t}};function ce(e,t,n){let r=new Map(t.map(e=>[e.id,e])),i=n.map(t=>{let n=r.get(t.id);if(!n)throw new se(`unknownId`,{id:t.id},`unknown block id: ${t.id}`);if(n.locked!==null)throw new se(`locked`,{id:n.id,reason:n.locked},`locked block: id=${n.id} (${n.locked})`);if(e.slice(n.innerStart,n.innerEnd)!==n.sourceInner)throw new se(`stale`,{id:n.id},`stale block: id=${n.id}`);return{block:n,value:n.rcdata?ie(t.newInnerHtml):t.newInnerHtml}}),a=new Set;for(let{block:e}of i){if(a.has(e.id))throw new se(`duplicate`,{id:e.id},`duplicate patch: id=${e.id}`);a.add(e.id)}let o=[...i].sort((e,t)=>t.block.innerStart-e.block.innerStart),s=e;for(let{block:e,value:t}of o)s=s.slice(0,e.innerStart)+t+s.slice(e.innerEnd);return s}var le=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),w;(function(e){e[e.EOF=-1]=`EOF`,e[e.NULL=0]=`NULL`,e[e.TABULATION=9]=`TABULATION`,e[e.CARRIAGE_RETURN=13]=`CARRIAGE_RETURN`,e[e.LINE_FEED=10]=`LINE_FEED`,e[e.FORM_FEED=12]=`FORM_FEED`,e[e.SPACE=32]=`SPACE`,e[e.EXCLAMATION_MARK=33]=`EXCLAMATION_MARK`,e[e.QUOTATION_MARK=34]=`QUOTATION_MARK`,e[e.AMPERSAND=38]=`AMPERSAND`,e[e.APOSTROPHE=39]=`APOSTROPHE`,e[e.HYPHEN_MINUS=45]=`HYPHEN_MINUS`,e[e.SOLIDUS=47]=`SOLIDUS`,e[e.DIGIT_0=48]=`DIGIT_0`,e[e.DIGIT_9=57]=`DIGIT_9`,e[e.SEMICOLON=59]=`SEMICOLON`,e[e.LESS_THAN_SIGN=60]=`LESS_THAN_SIGN`,e[e.EQUALS_SIGN=61]=`EQUALS_SIGN`,e[e.GREATER_THAN_SIGN=62]=`GREATER_THAN_SIGN`,e[e.QUESTION_MARK=63]=`QUESTION_MARK`,e[e.LATIN_CAPITAL_A=65]=`LATIN_CAPITAL_A`,e[e.LATIN_CAPITAL_Z=90]=`LATIN_CAPITAL_Z`,e[e.RIGHT_SQUARE_BRACKET=93]=`RIGHT_SQUARE_BRACKET`,e[e.GRAVE_ACCENT=96]=`GRAVE_ACCENT`,e[e.LATIN_SMALL_A=97]=`LATIN_SMALL_A`,e[e.LATIN_SMALL_Z=122]=`LATIN_SMALL_Z`})(w||={});var T={DASH_DASH:`--`,CDATA_START:`[CDATA[`,DOCTYPE:`doctype`,SCRIPT:`script`,PUBLIC:`public`,SYSTEM:`system`};function ue(e){return e>=55296&&e<=57343}function de(e){return e>=56320&&e<=57343}function fe(e,t){return(e-55296)*1024+9216+t}function pe(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function me(e){return e>=64976&&e<=65007||le.has(e)}var E;(function(e){e.controlCharacterInInputStream=`control-character-in-input-stream`,e.noncharacterInInputStream=`noncharacter-in-input-stream`,e.surrogateInInputStream=`surrogate-in-input-stream`,e.nonVoidHtmlElementStartTagWithTrailingSolidus=`non-void-html-element-start-tag-with-trailing-solidus`,e.endTagWithAttributes=`end-tag-with-attributes`,e.endTagWithTrailingSolidus=`end-tag-with-trailing-solidus`,e.unexpectedSolidusInTag=`unexpected-solidus-in-tag`,e.unexpectedNullCharacter=`unexpected-null-character`,e.unexpectedQuestionMarkInsteadOfTagName=`unexpected-question-mark-instead-of-tag-name`,e.invalidFirstCharacterOfTagName=`invalid-first-character-of-tag-name`,e.unexpectedEqualsSignBeforeAttributeName=`unexpected-equals-sign-before-attribute-name`,e.missingEndTagName=`missing-end-tag-name`,e.unexpectedCharacterInAttributeName=`unexpected-character-in-attribute-name`,e.unknownNamedCharacterReference=`unknown-named-character-reference`,e.missingSemicolonAfterCharacterReference=`missing-semicolon-after-character-reference`,e.unexpectedCharacterAfterDoctypeSystemIdentifier=`unexpected-character-after-doctype-system-identifier`,e.unexpectedCharacterInUnquotedAttributeValue=`unexpected-character-in-unquoted-attribute-value`,e.eofBeforeTagName=`eof-before-tag-name`,e.eofInTag=`eof-in-tag`,e.missingAttributeValue=`missing-attribute-value`,e.missingWhitespaceBetweenAttributes=`missing-whitespace-between-attributes`,e.missingWhitespaceAfterDoctypePublicKeyword=`missing-whitespace-after-doctype-public-keyword`,e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers=`missing-whitespace-between-doctype-public-and-system-identifiers`,e.missingWhitespaceAfterDoctypeSystemKeyword=`missing-whitespace-after-doctype-system-keyword`,e.missingQuoteBeforeDoctypePublicIdentifier=`missing-quote-before-doctype-public-identifier`,e.missingQuoteBeforeDoctypeSystemIdentifier=`missing-quote-before-doctype-system-identifier`,e.missingDoctypePublicIdentifier=`missing-doctype-public-identifier`,e.missingDoctypeSystemIdentifier=`missing-doctype-system-identifier`,e.abruptDoctypePublicIdentifier=`abrupt-doctype-public-identifier`,e.abruptDoctypeSystemIdentifier=`abrupt-doctype-system-identifier`,e.cdataInHtmlContent=`cdata-in-html-content`,e.incorrectlyOpenedComment=`incorrectly-opened-comment`,e.eofInScriptHtmlCommentLikeText=`eof-in-script-html-comment-like-text`,e.eofInDoctype=`eof-in-doctype`,e.nestedComment=`nested-comment`,e.abruptClosingOfEmptyComment=`abrupt-closing-of-empty-comment`,e.eofInComment=`eof-in-comment`,e.incorrectlyClosedComment=`incorrectly-closed-comment`,e.eofInCdata=`eof-in-cdata`,e.absenceOfDigitsInNumericCharacterReference=`absence-of-digits-in-numeric-character-reference`,e.nullCharacterReference=`null-character-reference`,e.surrogateCharacterReference=`surrogate-character-reference`,e.characterReferenceOutsideUnicodeRange=`character-reference-outside-unicode-range`,e.controlCharacterReference=`control-character-reference`,e.noncharacterCharacterReference=`noncharacter-character-reference`,e.missingWhitespaceBeforeDoctypeName=`missing-whitespace-before-doctype-name`,e.missingDoctypeName=`missing-doctype-name`,e.invalidCharacterSequenceAfterDoctypeName=`invalid-character-sequence-after-doctype-name`,e.duplicateAttribute=`duplicate-attribute`,e.nonConformingDoctype=`non-conforming-doctype`,e.missingDoctype=`missing-doctype`,e.misplacedDoctype=`misplaced-doctype`,e.endTagWithoutMatchingOpenElement=`end-tag-without-matching-open-element`,e.closingOfElementWithOpenChildElements=`closing-of-element-with-open-child-elements`,e.disallowedContentInNoscriptInHead=`disallowed-content-in-noscript-in-head`,e.openElementsLeftAfterEof=`open-elements-left-after-eof`,e.abandonedHeadElementChild=`abandoned-head-element-child`,e.misplacedStartTagForHeadElement=`misplaced-start-tag-for-head-element`,e.nestedNoscriptInHead=`nested-noscript-in-head`,e.eofInElementThatCanContainOnlyText=`eof-in-element-that-can-contain-only-text`})(E||={});var he=65536,ge=class{constructor(e){this.handler=e,this.html=``,this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=he,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(e,t){let{line:n,col:r,offset:i}=this,a=r+t,o=i+t;return{code:e,startLine:n,endLine:n,startCol:a,endCol:a,startOffset:o,endOffset:o}}_err(e){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(e,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.html.length-1){let t=this.html.charCodeAt(this.pos+1);if(de(t))return this.pos++,this._addGap(),fe(e,t)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,w.EOF;return this._err(E.surrogateInInputStream),e}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(e,t){this.html.length>0?this.html+=e:this.html=e,this.endOfChunkHit=!1,this.lastChunkWritten=t}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(e,t){if(this.pos+e.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(t)return this.html.startsWith(e,this.pos);for(let t=0;t=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,w.EOF;let n=this.html.charCodeAt(t);return n===w.CARRIAGE_RETURN?w.LINE_FEED:n}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,w.EOF;let e=this.html.charCodeAt(this.pos);return e===w.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,w.LINE_FEED):e===w.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,ue(e)&&(e=this._processSurrogate(e)),this.handler.onParseError===null||e>31&&e<127||e===w.LINE_FEED||e===w.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e)}_checkForProblematicCharacters(e){pe(e)?this._err(E.controlCharacterInInputStream):me(e)&&this._err(E.noncharacterInInputStream)}retreat(e){for(this.pos-=e;this.pos=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null}var O;(function(e){e.HTML=`http://www.w3.org/1999/xhtml`,e.MATHML=`http://www.w3.org/1998/Math/MathML`,e.SVG=`http://www.w3.org/2000/svg`,e.XLINK=`http://www.w3.org/1999/xlink`,e.XML=`http://www.w3.org/XML/1998/namespace`,e.XMLNS=`http://www.w3.org/2000/xmlns/`})(O||={});var k;(function(e){e.TYPE=`type`,e.ACTION=`action`,e.ENCODING=`encoding`,e.PROMPT=`prompt`,e.NAME=`name`,e.COLOR=`color`,e.FACE=`face`,e.SIZE=`size`})(k||={});var A;(function(e){e.NO_QUIRKS=`no-quirks`,e.QUIRKS=`quirks`,e.LIMITED_QUIRKS=`limited-quirks`})(A||={});var j;(function(e){e.A=`a`,e.ADDRESS=`address`,e.ANNOTATION_XML=`annotation-xml`,e.APPLET=`applet`,e.AREA=`area`,e.ARTICLE=`article`,e.ASIDE=`aside`,e.B=`b`,e.BASE=`base`,e.BASEFONT=`basefont`,e.BGSOUND=`bgsound`,e.BIG=`big`,e.BLOCKQUOTE=`blockquote`,e.BODY=`body`,e.BR=`br`,e.BUTTON=`button`,e.CAPTION=`caption`,e.CENTER=`center`,e.CODE=`code`,e.COL=`col`,e.COLGROUP=`colgroup`,e.DD=`dd`,e.DESC=`desc`,e.DETAILS=`details`,e.DIALOG=`dialog`,e.DIR=`dir`,e.DIV=`div`,e.DL=`dl`,e.DT=`dt`,e.EM=`em`,e.EMBED=`embed`,e.FIELDSET=`fieldset`,e.FIGCAPTION=`figcaption`,e.FIGURE=`figure`,e.FONT=`font`,e.FOOTER=`footer`,e.FOREIGN_OBJECT=`foreignObject`,e.FORM=`form`,e.FRAME=`frame`,e.FRAMESET=`frameset`,e.H1=`h1`,e.H2=`h2`,e.H3=`h3`,e.H4=`h4`,e.H5=`h5`,e.H6=`h6`,e.HEAD=`head`,e.HEADER=`header`,e.HGROUP=`hgroup`,e.HR=`hr`,e.HTML=`html`,e.I=`i`,e.IMG=`img`,e.IMAGE=`image`,e.INPUT=`input`,e.IFRAME=`iframe`,e.KEYGEN=`keygen`,e.LABEL=`label`,e.LI=`li`,e.LINK=`link`,e.LISTING=`listing`,e.MAIN=`main`,e.MALIGNMARK=`malignmark`,e.MARQUEE=`marquee`,e.MATH=`math`,e.MENU=`menu`,e.META=`meta`,e.MGLYPH=`mglyph`,e.MI=`mi`,e.MO=`mo`,e.MN=`mn`,e.MS=`ms`,e.MTEXT=`mtext`,e.NAV=`nav`,e.NOBR=`nobr`,e.NOFRAMES=`noframes`,e.NOEMBED=`noembed`,e.NOSCRIPT=`noscript`,e.OBJECT=`object`,e.OL=`ol`,e.OPTGROUP=`optgroup`,e.OPTION=`option`,e.P=`p`,e.PARAM=`param`,e.PLAINTEXT=`plaintext`,e.PRE=`pre`,e.RB=`rb`,e.RP=`rp`,e.RT=`rt`,e.RTC=`rtc`,e.RUBY=`ruby`,e.S=`s`,e.SCRIPT=`script`,e.SEARCH=`search`,e.SECTION=`section`,e.SELECT=`select`,e.SOURCE=`source`,e.SMALL=`small`,e.SPAN=`span`,e.STRIKE=`strike`,e.STRONG=`strong`,e.STYLE=`style`,e.SUB=`sub`,e.SUMMARY=`summary`,e.SUP=`sup`,e.TABLE=`table`,e.TBODY=`tbody`,e.TEMPLATE=`template`,e.TEXTAREA=`textarea`,e.TFOOT=`tfoot`,e.TD=`td`,e.TH=`th`,e.THEAD=`thead`,e.TITLE=`title`,e.TR=`tr`,e.TRACK=`track`,e.TT=`tt`,e.U=`u`,e.UL=`ul`,e.SVG=`svg`,e.VAR=`var`,e.WBR=`wbr`,e.XMP=`xmp`})(j||={});var M;(function(e){e[e.UNKNOWN=0]=`UNKNOWN`,e[e.A=1]=`A`,e[e.ADDRESS=2]=`ADDRESS`,e[e.ANNOTATION_XML=3]=`ANNOTATION_XML`,e[e.APPLET=4]=`APPLET`,e[e.AREA=5]=`AREA`,e[e.ARTICLE=6]=`ARTICLE`,e[e.ASIDE=7]=`ASIDE`,e[e.B=8]=`B`,e[e.BASE=9]=`BASE`,e[e.BASEFONT=10]=`BASEFONT`,e[e.BGSOUND=11]=`BGSOUND`,e[e.BIG=12]=`BIG`,e[e.BLOCKQUOTE=13]=`BLOCKQUOTE`,e[e.BODY=14]=`BODY`,e[e.BR=15]=`BR`,e[e.BUTTON=16]=`BUTTON`,e[e.CAPTION=17]=`CAPTION`,e[e.CENTER=18]=`CENTER`,e[e.CODE=19]=`CODE`,e[e.COL=20]=`COL`,e[e.COLGROUP=21]=`COLGROUP`,e[e.DD=22]=`DD`,e[e.DESC=23]=`DESC`,e[e.DETAILS=24]=`DETAILS`,e[e.DIALOG=25]=`DIALOG`,e[e.DIR=26]=`DIR`,e[e.DIV=27]=`DIV`,e[e.DL=28]=`DL`,e[e.DT=29]=`DT`,e[e.EM=30]=`EM`,e[e.EMBED=31]=`EMBED`,e[e.FIELDSET=32]=`FIELDSET`,e[e.FIGCAPTION=33]=`FIGCAPTION`,e[e.FIGURE=34]=`FIGURE`,e[e.FONT=35]=`FONT`,e[e.FOOTER=36]=`FOOTER`,e[e.FOREIGN_OBJECT=37]=`FOREIGN_OBJECT`,e[e.FORM=38]=`FORM`,e[e.FRAME=39]=`FRAME`,e[e.FRAMESET=40]=`FRAMESET`,e[e.H1=41]=`H1`,e[e.H2=42]=`H2`,e[e.H3=43]=`H3`,e[e.H4=44]=`H4`,e[e.H5=45]=`H5`,e[e.H6=46]=`H6`,e[e.HEAD=47]=`HEAD`,e[e.HEADER=48]=`HEADER`,e[e.HGROUP=49]=`HGROUP`,e[e.HR=50]=`HR`,e[e.HTML=51]=`HTML`,e[e.I=52]=`I`,e[e.IMG=53]=`IMG`,e[e.IMAGE=54]=`IMAGE`,e[e.INPUT=55]=`INPUT`,e[e.IFRAME=56]=`IFRAME`,e[e.KEYGEN=57]=`KEYGEN`,e[e.LABEL=58]=`LABEL`,e[e.LI=59]=`LI`,e[e.LINK=60]=`LINK`,e[e.LISTING=61]=`LISTING`,e[e.MAIN=62]=`MAIN`,e[e.MALIGNMARK=63]=`MALIGNMARK`,e[e.MARQUEE=64]=`MARQUEE`,e[e.MATH=65]=`MATH`,e[e.MENU=66]=`MENU`,e[e.META=67]=`META`,e[e.MGLYPH=68]=`MGLYPH`,e[e.MI=69]=`MI`,e[e.MO=70]=`MO`,e[e.MN=71]=`MN`,e[e.MS=72]=`MS`,e[e.MTEXT=73]=`MTEXT`,e[e.NAV=74]=`NAV`,e[e.NOBR=75]=`NOBR`,e[e.NOFRAMES=76]=`NOFRAMES`,e[e.NOEMBED=77]=`NOEMBED`,e[e.NOSCRIPT=78]=`NOSCRIPT`,e[e.OBJECT=79]=`OBJECT`,e[e.OL=80]=`OL`,e[e.OPTGROUP=81]=`OPTGROUP`,e[e.OPTION=82]=`OPTION`,e[e.P=83]=`P`,e[e.PARAM=84]=`PARAM`,e[e.PLAINTEXT=85]=`PLAINTEXT`,e[e.PRE=86]=`PRE`,e[e.RB=87]=`RB`,e[e.RP=88]=`RP`,e[e.RT=89]=`RT`,e[e.RTC=90]=`RTC`,e[e.RUBY=91]=`RUBY`,e[e.S=92]=`S`,e[e.SCRIPT=93]=`SCRIPT`,e[e.SEARCH=94]=`SEARCH`,e[e.SECTION=95]=`SECTION`,e[e.SELECT=96]=`SELECT`,e[e.SOURCE=97]=`SOURCE`,e[e.SMALL=98]=`SMALL`,e[e.SPAN=99]=`SPAN`,e[e.STRIKE=100]=`STRIKE`,e[e.STRONG=101]=`STRONG`,e[e.STYLE=102]=`STYLE`,e[e.SUB=103]=`SUB`,e[e.SUMMARY=104]=`SUMMARY`,e[e.SUP=105]=`SUP`,e[e.TABLE=106]=`TABLE`,e[e.TBODY=107]=`TBODY`,e[e.TEMPLATE=108]=`TEMPLATE`,e[e.TEXTAREA=109]=`TEXTAREA`,e[e.TFOOT=110]=`TFOOT`,e[e.TD=111]=`TD`,e[e.TH=112]=`TH`,e[e.THEAD=113]=`THEAD`,e[e.TITLE=114]=`TITLE`,e[e.TR=115]=`TR`,e[e.TRACK=116]=`TRACK`,e[e.TT=117]=`TT`,e[e.U=118]=`U`,e[e.UL=119]=`UL`,e[e.SVG=120]=`SVG`,e[e.VAR=121]=`VAR`,e[e.WBR=122]=`WBR`,e[e.XMP=123]=`XMP`})(M||={});var ve=new Map([[j.A,M.A],[j.ADDRESS,M.ADDRESS],[j.ANNOTATION_XML,M.ANNOTATION_XML],[j.APPLET,M.APPLET],[j.AREA,M.AREA],[j.ARTICLE,M.ARTICLE],[j.ASIDE,M.ASIDE],[j.B,M.B],[j.BASE,M.BASE],[j.BASEFONT,M.BASEFONT],[j.BGSOUND,M.BGSOUND],[j.BIG,M.BIG],[j.BLOCKQUOTE,M.BLOCKQUOTE],[j.BODY,M.BODY],[j.BR,M.BR],[j.BUTTON,M.BUTTON],[j.CAPTION,M.CAPTION],[j.CENTER,M.CENTER],[j.CODE,M.CODE],[j.COL,M.COL],[j.COLGROUP,M.COLGROUP],[j.DD,M.DD],[j.DESC,M.DESC],[j.DETAILS,M.DETAILS],[j.DIALOG,M.DIALOG],[j.DIR,M.DIR],[j.DIV,M.DIV],[j.DL,M.DL],[j.DT,M.DT],[j.EM,M.EM],[j.EMBED,M.EMBED],[j.FIELDSET,M.FIELDSET],[j.FIGCAPTION,M.FIGCAPTION],[j.FIGURE,M.FIGURE],[j.FONT,M.FONT],[j.FOOTER,M.FOOTER],[j.FOREIGN_OBJECT,M.FOREIGN_OBJECT],[j.FORM,M.FORM],[j.FRAME,M.FRAME],[j.FRAMESET,M.FRAMESET],[j.H1,M.H1],[j.H2,M.H2],[j.H3,M.H3],[j.H4,M.H4],[j.H5,M.H5],[j.H6,M.H6],[j.HEAD,M.HEAD],[j.HEADER,M.HEADER],[j.HGROUP,M.HGROUP],[j.HR,M.HR],[j.HTML,M.HTML],[j.I,M.I],[j.IMG,M.IMG],[j.IMAGE,M.IMAGE],[j.INPUT,M.INPUT],[j.IFRAME,M.IFRAME],[j.KEYGEN,M.KEYGEN],[j.LABEL,M.LABEL],[j.LI,M.LI],[j.LINK,M.LINK],[j.LISTING,M.LISTING],[j.MAIN,M.MAIN],[j.MALIGNMARK,M.MALIGNMARK],[j.MARQUEE,M.MARQUEE],[j.MATH,M.MATH],[j.MENU,M.MENU],[j.META,M.META],[j.MGLYPH,M.MGLYPH],[j.MI,M.MI],[j.MO,M.MO],[j.MN,M.MN],[j.MS,M.MS],[j.MTEXT,M.MTEXT],[j.NAV,M.NAV],[j.NOBR,M.NOBR],[j.NOFRAMES,M.NOFRAMES],[j.NOEMBED,M.NOEMBED],[j.NOSCRIPT,M.NOSCRIPT],[j.OBJECT,M.OBJECT],[j.OL,M.OL],[j.OPTGROUP,M.OPTGROUP],[j.OPTION,M.OPTION],[j.P,M.P],[j.PARAM,M.PARAM],[j.PLAINTEXT,M.PLAINTEXT],[j.PRE,M.PRE],[j.RB,M.RB],[j.RP,M.RP],[j.RT,M.RT],[j.RTC,M.RTC],[j.RUBY,M.RUBY],[j.S,M.S],[j.SCRIPT,M.SCRIPT],[j.SEARCH,M.SEARCH],[j.SECTION,M.SECTION],[j.SELECT,M.SELECT],[j.SOURCE,M.SOURCE],[j.SMALL,M.SMALL],[j.SPAN,M.SPAN],[j.STRIKE,M.STRIKE],[j.STRONG,M.STRONG],[j.STYLE,M.STYLE],[j.SUB,M.SUB],[j.SUMMARY,M.SUMMARY],[j.SUP,M.SUP],[j.TABLE,M.TABLE],[j.TBODY,M.TBODY],[j.TEMPLATE,M.TEMPLATE],[j.TEXTAREA,M.TEXTAREA],[j.TFOOT,M.TFOOT],[j.TD,M.TD],[j.TH,M.TH],[j.THEAD,M.THEAD],[j.TITLE,M.TITLE],[j.TR,M.TR],[j.TRACK,M.TRACK],[j.TT,M.TT],[j.U,M.U],[j.UL,M.UL],[j.SVG,M.SVG],[j.VAR,M.VAR],[j.WBR,M.WBR],[j.XMP,M.XMP]]);function ye(e){return ve.get(e)??M.UNKNOWN}var N=M,be={[O.HTML]:new Set([N.ADDRESS,N.APPLET,N.AREA,N.ARTICLE,N.ASIDE,N.BASE,N.BASEFONT,N.BGSOUND,N.BLOCKQUOTE,N.BODY,N.BR,N.BUTTON,N.CAPTION,N.CENTER,N.COL,N.COLGROUP,N.DD,N.DETAILS,N.DIR,N.DIV,N.DL,N.DT,N.EMBED,N.FIELDSET,N.FIGCAPTION,N.FIGURE,N.FOOTER,N.FORM,N.FRAME,N.FRAMESET,N.H1,N.H2,N.H3,N.H4,N.H5,N.H6,N.HEAD,N.HEADER,N.HGROUP,N.HR,N.HTML,N.IFRAME,N.IMG,N.INPUT,N.LI,N.LINK,N.LISTING,N.MAIN,N.MARQUEE,N.MENU,N.META,N.NAV,N.NOEMBED,N.NOFRAMES,N.NOSCRIPT,N.OBJECT,N.OL,N.P,N.PARAM,N.PLAINTEXT,N.PRE,N.SCRIPT,N.SECTION,N.SELECT,N.SOURCE,N.STYLE,N.SUMMARY,N.TABLE,N.TBODY,N.TD,N.TEMPLATE,N.TEXTAREA,N.TFOOT,N.TH,N.THEAD,N.TITLE,N.TR,N.TRACK,N.UL,N.WBR,N.XMP]),[O.MATHML]:new Set([N.MI,N.MO,N.MN,N.MS,N.MTEXT,N.ANNOTATION_XML]),[O.SVG]:new Set([N.TITLE,N.FOREIGN_OBJECT,N.DESC]),[O.XLINK]:new Set,[O.XML]:new Set,[O.XMLNS]:new Set},xe=new Set([N.H1,N.H2,N.H3,N.H4,N.H5,N.H6]);j.STYLE,j.SCRIPT,j.XMP,j.IFRAME,j.NOEMBED,j.NOFRAMES,j.PLAINTEXT;var P;(function(e){e[e.DATA=0]=`DATA`,e[e.RCDATA=1]=`RCDATA`,e[e.RAWTEXT=2]=`RAWTEXT`,e[e.SCRIPT_DATA=3]=`SCRIPT_DATA`,e[e.PLAINTEXT=4]=`PLAINTEXT`,e[e.TAG_OPEN=5]=`TAG_OPEN`,e[e.END_TAG_OPEN=6]=`END_TAG_OPEN`,e[e.TAG_NAME=7]=`TAG_NAME`,e[e.RCDATA_LESS_THAN_SIGN=8]=`RCDATA_LESS_THAN_SIGN`,e[e.RCDATA_END_TAG_OPEN=9]=`RCDATA_END_TAG_OPEN`,e[e.RCDATA_END_TAG_NAME=10]=`RCDATA_END_TAG_NAME`,e[e.RAWTEXT_LESS_THAN_SIGN=11]=`RAWTEXT_LESS_THAN_SIGN`,e[e.RAWTEXT_END_TAG_OPEN=12]=`RAWTEXT_END_TAG_OPEN`,e[e.RAWTEXT_END_TAG_NAME=13]=`RAWTEXT_END_TAG_NAME`,e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]=`SCRIPT_DATA_LESS_THAN_SIGN`,e[e.SCRIPT_DATA_END_TAG_OPEN=15]=`SCRIPT_DATA_END_TAG_OPEN`,e[e.SCRIPT_DATA_END_TAG_NAME=16]=`SCRIPT_DATA_END_TAG_NAME`,e[e.SCRIPT_DATA_ESCAPE_START=17]=`SCRIPT_DATA_ESCAPE_START`,e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]=`SCRIPT_DATA_ESCAPE_START_DASH`,e[e.SCRIPT_DATA_ESCAPED=19]=`SCRIPT_DATA_ESCAPED`,e[e.SCRIPT_DATA_ESCAPED_DASH=20]=`SCRIPT_DATA_ESCAPED_DASH`,e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]=`SCRIPT_DATA_ESCAPED_DASH_DASH`,e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]=`SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN`,e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]=`SCRIPT_DATA_ESCAPED_END_TAG_OPEN`,e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]=`SCRIPT_DATA_ESCAPED_END_TAG_NAME`,e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]=`SCRIPT_DATA_DOUBLE_ESCAPE_START`,e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]=`SCRIPT_DATA_DOUBLE_ESCAPED`,e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]=`SCRIPT_DATA_DOUBLE_ESCAPED_DASH`,e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]=`SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH`,e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]=`SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN`,e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]=`SCRIPT_DATA_DOUBLE_ESCAPE_END`,e[e.BEFORE_ATTRIBUTE_NAME=31]=`BEFORE_ATTRIBUTE_NAME`,e[e.ATTRIBUTE_NAME=32]=`ATTRIBUTE_NAME`,e[e.AFTER_ATTRIBUTE_NAME=33]=`AFTER_ATTRIBUTE_NAME`,e[e.BEFORE_ATTRIBUTE_VALUE=34]=`BEFORE_ATTRIBUTE_VALUE`,e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]=`ATTRIBUTE_VALUE_DOUBLE_QUOTED`,e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]=`ATTRIBUTE_VALUE_SINGLE_QUOTED`,e[e.ATTRIBUTE_VALUE_UNQUOTED=37]=`ATTRIBUTE_VALUE_UNQUOTED`,e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]=`AFTER_ATTRIBUTE_VALUE_QUOTED`,e[e.SELF_CLOSING_START_TAG=39]=`SELF_CLOSING_START_TAG`,e[e.BOGUS_COMMENT=40]=`BOGUS_COMMENT`,e[e.MARKUP_DECLARATION_OPEN=41]=`MARKUP_DECLARATION_OPEN`,e[e.COMMENT_START=42]=`COMMENT_START`,e[e.COMMENT_START_DASH=43]=`COMMENT_START_DASH`,e[e.COMMENT=44]=`COMMENT`,e[e.COMMENT_LESS_THAN_SIGN=45]=`COMMENT_LESS_THAN_SIGN`,e[e.COMMENT_LESS_THAN_SIGN_BANG=46]=`COMMENT_LESS_THAN_SIGN_BANG`,e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]=`COMMENT_LESS_THAN_SIGN_BANG_DASH`,e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]=`COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH`,e[e.COMMENT_END_DASH=49]=`COMMENT_END_DASH`,e[e.COMMENT_END=50]=`COMMENT_END`,e[e.COMMENT_END_BANG=51]=`COMMENT_END_BANG`,e[e.DOCTYPE=52]=`DOCTYPE`,e[e.BEFORE_DOCTYPE_NAME=53]=`BEFORE_DOCTYPE_NAME`,e[e.DOCTYPE_NAME=54]=`DOCTYPE_NAME`,e[e.AFTER_DOCTYPE_NAME=55]=`AFTER_DOCTYPE_NAME`,e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]=`AFTER_DOCTYPE_PUBLIC_KEYWORD`,e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]=`BEFORE_DOCTYPE_PUBLIC_IDENTIFIER`,e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]=`DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED`,e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]=`DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED`,e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]=`AFTER_DOCTYPE_PUBLIC_IDENTIFIER`,e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]=`BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS`,e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]=`AFTER_DOCTYPE_SYSTEM_KEYWORD`,e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]=`BEFORE_DOCTYPE_SYSTEM_IDENTIFIER`,e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]=`DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED`,e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]=`DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED`,e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]=`AFTER_DOCTYPE_SYSTEM_IDENTIFIER`,e[e.BOGUS_DOCTYPE=67]=`BOGUS_DOCTYPE`,e[e.CDATA_SECTION=68]=`CDATA_SECTION`,e[e.CDATA_SECTION_BRACKET=69]=`CDATA_SECTION_BRACKET`,e[e.CDATA_SECTION_END=70]=`CDATA_SECTION_END`,e[e.CHARACTER_REFERENCE=71]=`CHARACTER_REFERENCE`,e[e.AMBIGUOUS_AMPERSAND=72]=`AMBIGUOUS_AMPERSAND`})(P||={});var F={DATA:P.DATA,RCDATA:P.RCDATA,RAWTEXT:P.RAWTEXT,SCRIPT_DATA:P.SCRIPT_DATA,PLAINTEXT:P.PLAINTEXT,CDATA_SECTION:P.CDATA_SECTION};function Se(e){return e>=w.DIGIT_0&&e<=w.DIGIT_9}function I(e){return e>=w.LATIN_CAPITAL_A&&e<=w.LATIN_CAPITAL_Z}function Ce(e){return e>=w.LATIN_SMALL_A&&e<=w.LATIN_SMALL_Z}function L(e){return Ce(e)||I(e)}function we(e){return L(e)||Se(e)}function Te(e){return e+32}function Ee(e){return e===w.SPACE||e===w.LINE_FEED||e===w.TABULATION||e===w.FORM_FEED}function De(e){return Ee(e)||e===w.SOLIDUS||e===w.GREATER_THAN_SIGN}function Oe(e){return e===w.NULL?E.nullCharacterReference:e>1114111?E.characterReferenceOutsideUnicodeRange:ue(e)?E.surrogateCharacterReference:me(e)?E.noncharacterCharacterReference:pe(e)||e===w.CARRIAGE_RETURN?E.controlCharacterReference:null}var ke=class{constructor(e,t){this.options=e,this.handler=t,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName=``,this.active=!1,this.state=P.DATA,this.returnState=P.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:``,value:``},this.preprocessor=new ge(t),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new S(d,(e,t)=>{this.preprocessor.pos=this.entityStartPos+t-1,this._flushCodePointConsumedAsCharacterReference(e)},t.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(E.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:e=>{this._err(E.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+e)},validateNumericCharacterReference:e=>{let t=Oe(e);t&&this._err(t,1)}}:void 0)}_err(e,t=0){var n,r;(r=(n=this.handler).onParseError)==null||r.call(n,this.preprocessor.getError(e,t))}getCurrentLocation(e){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-e,startOffset:this.preprocessor.offset-e,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;let e=this._consume();this._ensureHibernation()||this._callState(e)}this.inLoop=!1}}pause(){this.paused=!0}resume(e){if(!this.paused)throw Error(`Parser was already resumed`);this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||e?.())}write(e,t,n){this.active=!0,this.preprocessor.write(e,t),this._runParsingLoop(),this.paused||n?.()}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(e){this.consumedAfterSnapshot+=e;for(let t=0;t0&&this._err(E.endTagWithAttributes),e.selfClosing&&this._err(E.endTagWithTrailingSolidus),this.handler.onEndTag(e)),this.preprocessor.dropParsedChunk()}emitCurrentComment(e){this.prepareToken(e),this.handler.onComment(e),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(e){this.prepareToken(e),this.handler.onDoctype(e),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(e){if(this.currentCharacterToken){switch(e&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=e.startLine,this.currentCharacterToken.location.endCol=e.startCol,this.currentCharacterToken.location.endOffset=e.startOffset),this.currentCharacterToken.type){case D.CHARACTER:this.handler.onCharacter(this.currentCharacterToken);break;case D.NULL_CHARACTER:this.handler.onNullCharacter(this.currentCharacterToken);break;case D.WHITESPACE_CHARACTER:this.handler.onWhitespaceCharacter(this.currentCharacterToken)}this.currentCharacterToken=null}}_emitEOFToken(){let e=this.getCurrentLocation(0);e&&(e.endLine=e.startLine,e.endCol=e.startCol,e.endOffset=e.startOffset),this._emitCurrentCharacterToken(e),this.handler.onEof({type:D.EOF,location:e}),this.active=!1}_appendCharToCurrentCharacterToken(e,t){if(this.currentCharacterToken){if(this.currentCharacterToken.type===e){this.currentCharacterToken.chars+=t;return}this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk()}this._createCharacterToken(e,t)}_emitCodePoint(e){let t=Ee(e)?D.WHITESPACE_CHARACTER:e===w.NULL?D.NULL_CHARACTER:D.CHARACTER;this._appendCharToCurrentCharacterToken(t,e<65536?String.fromCharCode(e):String.fromCodePoint(e))}_emitChars(e){this._appendCharToCurrentCharacterToken(D.CHARACTER,e)}_startCharacterReference(){this.returnState=this.state,this.state=P.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?x.Attribute:x.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===P.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===P.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===P.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(e){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(e):this._emitCodePoint(e)}_callState(e){switch(this.state){case P.DATA:this._stateData(e);break;case P.RCDATA:this._stateRcdata(e);break;case P.RAWTEXT:this._stateRawtext(e);break;case P.SCRIPT_DATA:this._stateScriptData(e);break;case P.PLAINTEXT:this._statePlaintext(e);break;case P.TAG_OPEN:this._stateTagOpen(e);break;case P.END_TAG_OPEN:this._stateEndTagOpen(e);break;case P.TAG_NAME:this._stateTagName(e);break;case P.RCDATA_LESS_THAN_SIGN:this._stateRcdataLessThanSign(e);break;case P.RCDATA_END_TAG_OPEN:this._stateRcdataEndTagOpen(e);break;case P.RCDATA_END_TAG_NAME:this._stateRcdataEndTagName(e);break;case P.RAWTEXT_LESS_THAN_SIGN:this._stateRawtextLessThanSign(e);break;case P.RAWTEXT_END_TAG_OPEN:this._stateRawtextEndTagOpen(e);break;case P.RAWTEXT_END_TAG_NAME:this._stateRawtextEndTagName(e);break;case P.SCRIPT_DATA_LESS_THAN_SIGN:this._stateScriptDataLessThanSign(e);break;case P.SCRIPT_DATA_END_TAG_OPEN:this._stateScriptDataEndTagOpen(e);break;case P.SCRIPT_DATA_END_TAG_NAME:this._stateScriptDataEndTagName(e);break;case P.SCRIPT_DATA_ESCAPE_START:this._stateScriptDataEscapeStart(e);break;case P.SCRIPT_DATA_ESCAPE_START_DASH:this._stateScriptDataEscapeStartDash(e);break;case P.SCRIPT_DATA_ESCAPED:this._stateScriptDataEscaped(e);break;case P.SCRIPT_DATA_ESCAPED_DASH:this._stateScriptDataEscapedDash(e);break;case P.SCRIPT_DATA_ESCAPED_DASH_DASH:this._stateScriptDataEscapedDashDash(e);break;case P.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataEscapedLessThanSign(e);break;case P.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:this._stateScriptDataEscapedEndTagOpen(e);break;case P.SCRIPT_DATA_ESCAPED_END_TAG_NAME:this._stateScriptDataEscapedEndTagName(e);break;case P.SCRIPT_DATA_DOUBLE_ESCAPE_START:this._stateScriptDataDoubleEscapeStart(e);break;case P.SCRIPT_DATA_DOUBLE_ESCAPED:this._stateScriptDataDoubleEscaped(e);break;case P.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:this._stateScriptDataDoubleEscapedDash(e);break;case P.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:this._stateScriptDataDoubleEscapedDashDash(e);break;case P.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataDoubleEscapedLessThanSign(e);break;case P.SCRIPT_DATA_DOUBLE_ESCAPE_END:this._stateScriptDataDoubleEscapeEnd(e);break;case P.BEFORE_ATTRIBUTE_NAME:this._stateBeforeAttributeName(e);break;case P.ATTRIBUTE_NAME:this._stateAttributeName(e);break;case P.AFTER_ATTRIBUTE_NAME:this._stateAfterAttributeName(e);break;case P.BEFORE_ATTRIBUTE_VALUE:this._stateBeforeAttributeValue(e);break;case P.ATTRIBUTE_VALUE_DOUBLE_QUOTED:this._stateAttributeValueDoubleQuoted(e);break;case P.ATTRIBUTE_VALUE_SINGLE_QUOTED:this._stateAttributeValueSingleQuoted(e);break;case P.ATTRIBUTE_VALUE_UNQUOTED:this._stateAttributeValueUnquoted(e);break;case P.AFTER_ATTRIBUTE_VALUE_QUOTED:this._stateAfterAttributeValueQuoted(e);break;case P.SELF_CLOSING_START_TAG:this._stateSelfClosingStartTag(e);break;case P.BOGUS_COMMENT:this._stateBogusComment(e);break;case P.MARKUP_DECLARATION_OPEN:this._stateMarkupDeclarationOpen(e);break;case P.COMMENT_START:this._stateCommentStart(e);break;case P.COMMENT_START_DASH:this._stateCommentStartDash(e);break;case P.COMMENT:this._stateComment(e);break;case P.COMMENT_LESS_THAN_SIGN:this._stateCommentLessThanSign(e);break;case P.COMMENT_LESS_THAN_SIGN_BANG:this._stateCommentLessThanSignBang(e);break;case P.COMMENT_LESS_THAN_SIGN_BANG_DASH:this._stateCommentLessThanSignBangDash(e);break;case P.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:this._stateCommentLessThanSignBangDashDash(e);break;case P.COMMENT_END_DASH:this._stateCommentEndDash(e);break;case P.COMMENT_END:this._stateCommentEnd(e);break;case P.COMMENT_END_BANG:this._stateCommentEndBang(e);break;case P.DOCTYPE:this._stateDoctype(e);break;case P.BEFORE_DOCTYPE_NAME:this._stateBeforeDoctypeName(e);break;case P.DOCTYPE_NAME:this._stateDoctypeName(e);break;case P.AFTER_DOCTYPE_NAME:this._stateAfterDoctypeName(e);break;case P.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._stateAfterDoctypePublicKeyword(e);break;case P.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:this._stateBeforeDoctypePublicIdentifier(e);break;case P.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypePublicIdentifierDoubleQuoted(e);break;case P.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypePublicIdentifierSingleQuoted(e);break;case P.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:this._stateAfterDoctypePublicIdentifier(e);break;case P.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:this._stateBetweenDoctypePublicAndSystemIdentifiers(e);break;case P.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._stateAfterDoctypeSystemKeyword(e);break;case P.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:this._stateBeforeDoctypeSystemIdentifier(e);break;case P.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypeSystemIdentifierDoubleQuoted(e);break;case P.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypeSystemIdentifierSingleQuoted(e);break;case P.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:this._stateAfterDoctypeSystemIdentifier(e);break;case P.BOGUS_DOCTYPE:this._stateBogusDoctype(e);break;case P.CDATA_SECTION:this._stateCdataSection(e);break;case P.CDATA_SECTION_BRACKET:this._stateCdataSectionBracket(e);break;case P.CDATA_SECTION_END:this._stateCdataSectionEnd(e);break;case P.CHARACTER_REFERENCE:this._stateCharacterReference();break;case P.AMBIGUOUS_AMPERSAND:this._stateAmbiguousAmpersand(e);break;default:throw Error(`Unknown state`)}}_stateData(e){switch(e){case w.LESS_THAN_SIGN:this.state=P.TAG_OPEN;break;case w.AMPERSAND:this._startCharacterReference();break;case w.NULL:this._err(E.unexpectedNullCharacter),this._emitCodePoint(e);break;case w.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRcdata(e){switch(e){case w.AMPERSAND:this._startCharacterReference();break;case w.LESS_THAN_SIGN:this.state=P.RCDATA_LESS_THAN_SIGN;break;case w.NULL:this._err(E.unexpectedNullCharacter),this._emitChars(`�`);break;case w.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRawtext(e){switch(e){case w.LESS_THAN_SIGN:this.state=P.RAWTEXT_LESS_THAN_SIGN;break;case w.NULL:this._err(E.unexpectedNullCharacter),this._emitChars(`�`);break;case w.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateScriptData(e){switch(e){case w.LESS_THAN_SIGN:this.state=P.SCRIPT_DATA_LESS_THAN_SIGN;break;case w.NULL:this._err(E.unexpectedNullCharacter),this._emitChars(`�`);break;case w.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_statePlaintext(e){switch(e){case w.NULL:this._err(E.unexpectedNullCharacter),this._emitChars(`�`);break;case w.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateTagOpen(e){if(L(e))this._createStartTagToken(),this.state=P.TAG_NAME,this._stateTagName(e);else switch(e){case w.EXCLAMATION_MARK:this.state=P.MARKUP_DECLARATION_OPEN;break;case w.SOLIDUS:this.state=P.END_TAG_OPEN;break;case w.QUESTION_MARK:this._err(E.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=P.BOGUS_COMMENT,this._stateBogusComment(e);break;case w.EOF:this._err(E.eofBeforeTagName),this._emitChars(`<`),this._emitEOFToken();break;default:this._err(E.invalidFirstCharacterOfTagName),this._emitChars(`<`),this.state=P.DATA,this._stateData(e)}}_stateEndTagOpen(e){if(L(e))this._createEndTagToken(),this.state=P.TAG_NAME,this._stateTagName(e);else switch(e){case w.GREATER_THAN_SIGN:this._err(E.missingEndTagName),this.state=P.DATA;break;case w.EOF:this._err(E.eofBeforeTagName),this._emitChars(``);break;case w.NULL:this._err(E.unexpectedNullCharacter),this.state=P.SCRIPT_DATA_ESCAPED,this._emitChars(`�`);break;case w.EOF:this._err(E.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=P.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataEscapedLessThanSign(e){e===w.SOLIDUS?this.state=P.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:L(e)?(this._emitChars(`<`),this.state=P.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(e)):(this._emitChars(`<`),this.state=P.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataEscapedEndTagOpen(e){L(e)?(this.state=P.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(e)):(this._emitChars(``);break;case w.NULL:this._err(E.unexpectedNullCharacter),this.state=P.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(`�`);break;case w.EOF:this._err(E.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=P.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedLessThanSign(e){e===w.SOLIDUS?(this.state=P.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars(`/`)):(this.state=P.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateScriptDataDoubleEscapeEnd(e){if(this.preprocessor.startsWith(T.SCRIPT,!1)&&De(this.preprocessor.peek(T.SCRIPT.length))){this._emitCodePoint(e);for(let e=0;e0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!0)}replace(e,t){let n=this._indexOf(e);this.items[n]=t,n===this.stackTop&&(this.current=t)}insertAfter(e,t,n){let r=this._indexOf(e)+1;this.items.splice(r,0,t),this.tagIDs.splice(r,0,n),this.stackTop++,r===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop)}popUntilTagNamePopped(e){let t=this.stackTop+1;do t=this.tagIDs.lastIndexOf(e,t-1);while(t>0&&this.treeAdapter.getNamespaceURI(this.items[t])!==O.HTML);this.shortenToLength(Math.max(t,0))}shortenToLength(e){for(;this.stackTop>=e;){let t=this.current;this.tmplCount>0&&this._isInTemplate()&&--this.tmplCount,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,this.stackTop=0;n--)if(e.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===t)return n;return-1}clearBackTo(e,t){let n=this._indexOfTagNames(e,t);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(ze,O.HTML)}clearBackToTableBodyContext(){this.clearBackTo(Re,O.HTML)}clearBackToTableRowContext(){this.clearBackTo(Le,O.HTML)}remove(e){let t=this._indexOf(e);t>=0&&(t===this.stackTop?this.pop():(this.items.splice(t,1),this.tagIDs.splice(t,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===M.BODY?this.items[1]:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){let t=this._indexOf(e)-1;return t>=0?this.items[t]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===M.HTML}hasInDynamicScope(e,t){for(let n=this.stackTop;n>=0;n--){let r=this.tagIDs[n];switch(this.treeAdapter.getNamespaceURI(this.items[n])){case O.HTML:if(r===e)return!0;if(t.has(r))return!1;break;case O.SVG:if(Ie.has(r))return!1;break;case O.MATHML:if(Fe.has(r))return!1}}return!0}hasInScope(e){return this.hasInDynamicScope(e,Me)}hasInListItemScope(e){return this.hasInDynamicScope(e,Ne)}hasInButtonScope(e){return this.hasInDynamicScope(e,Pe)}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){let t=this.tagIDs[e];switch(this.treeAdapter.getNamespaceURI(this.items[e])){case O.HTML:if(xe.has(t))return!0;if(Me.has(t))return!1;break;case O.SVG:if(Ie.has(t))return!1;break;case O.MATHML:if(Fe.has(t))return!1}}return!0}hasInTableScope(e){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===O.HTML)switch(this.tagIDs[t]){case e:return!0;case M.TABLE:case M.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--)if(this.treeAdapter.getNamespaceURI(this.items[e])===O.HTML)switch(this.tagIDs[e]){case M.TBODY:case M.THEAD:case M.TFOOT:return!0;case M.TABLE:case M.HTML:return!1}return!0}hasInSelectScope(e){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===O.HTML)switch(this.tagIDs[t]){case e:return!0;case M.OPTION:case M.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&Ae.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&je.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;this.currentTagId!==void 0&&this.currentTagId!==e&&je.has(this.currentTagId);)this.pop()}},He=3,R;(function(e){e[e.Marker=0]=`Marker`,e[e.Element=1]=`Element`})(R||={});var Ue={type:R.Marker},We=class{constructor(e){this.treeAdapter=e,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(e,t){let n=[],r=t.length,i=this.treeAdapter.getTagName(e),a=this.treeAdapter.getNamespaceURI(e);for(let e=0;e[e.name,e.value])),i=0;for(let e=0;er.get(e.name)===e.value)&&(i+=1,i>=He&&this.entries.splice(t.idx,1))}}insertMarker(){this.entries.unshift(Ue)}pushElement(e,t){this._ensureNoahArkCondition(e),this.entries.unshift({type:R.Element,element:e,token:t})}insertElementAfterBookmark(e,t){let n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:R.Element,element:e,token:t})}removeEntry(e){let t=this.entries.indexOf(e);t!==-1&&this.entries.splice(t,1)}clearToLastMarker(){let e=this.entries.indexOf(Ue);e===-1?this.entries.length=0:this.entries.splice(0,e+1)}getElementEntryInScopeWithTagName(e){let t=this.entries.find(t=>t.type===R.Marker||this.treeAdapter.getTagName(t.element)===e);return t&&t.type===R.Element?t:null}getElementEntry(e){return this.entries.find(t=>t.type===R.Element&&t.element===e)}},z={createDocument(){return{nodeName:`#document`,mode:A.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:`#document-fragment`,childNodes:[]}},createElement(e,t,n){return{nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return{nodeName:`#comment`,data:e,parentNode:null}},createTextNode(e){return{nodeName:`#text`,value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,n){let r=e.childNodes.indexOf(n);e.childNodes.splice(r,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent(e){return e.content},setDocumentType(e,t,n,r){let i=e.childNodes.find(e=>e.nodeName===`#documentType`);if(i)i.name=t,i.publicId=n,i.systemId=r;else{let i={nodeName:`#documentType`,name:t,publicId:n,systemId:r,parentNode:null};z.appendChild(e,i)}},setDocumentMode(e,t){e.mode=t},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){let t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){let n=e.childNodes[e.childNodes.length-1];if(z.isTextNode(n)){n.value+=t;return}}z.appendChild(e,z.createTextNode(t))},insertTextBefore(e,t,n){let r=e.childNodes[e.childNodes.indexOf(n)-1];r&&z.isTextNode(r)?r.value+=t:z.insertBefore(e,z.createTextNode(t),n)},adoptAttributes(e,t){let n=new Set(e.attrs.map(e=>e.name));for(let r=0;re.startsWith(t))}function et(e){return e.name===Ge&&e.publicId===null&&(e.systemId===null||e.systemId===Ke)}function tt(e){if(e.name!==Ge)return A.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===qe)return A.QUIRKS;let{publicId:n}=e;if(n!==null){if(n=n.toLowerCase(),Xe.has(n))return A.QUIRKS;let e=t===null?Ye:Je;if($e(n,e))return A.QUIRKS;if(e=t===null?Ze:Qe,$e(n,e))return A.LIMITED_QUIRKS}return A.NO_QUIRKS}var nt={TEXT_HTML:`text/html`,APPLICATION_XML:`application/xhtml+xml`},rt=`definitionurl`,it=`definitionURL`,at=new Map(`attributeName.attributeType.baseFrequency.baseProfile.calcMode.clipPathUnits.diffuseConstant.edgeMode.filterUnits.glyphRef.gradientTransform.gradientUnits.kernelMatrix.kernelUnitLength.keyPoints.keySplines.keyTimes.lengthAdjust.limitingConeAngle.markerHeight.markerUnits.markerWidth.maskContentUnits.maskUnits.numOctaves.pathLength.patternContentUnits.patternTransform.patternUnits.pointsAtX.pointsAtY.pointsAtZ.preserveAlpha.preserveAspectRatio.primitiveUnits.refX.refY.repeatCount.repeatDur.requiredExtensions.requiredFeatures.specularConstant.specularExponent.spreadMethod.startOffset.stdDeviation.stitchTiles.surfaceScale.systemLanguage.tableValues.targetX.targetY.textLength.viewBox.viewTarget.xChannelSelector.yChannelSelector.zoomAndPan`.split(`.`).map(e=>[e.toLowerCase(),e])),ot=new Map([[`xlink:actuate`,{prefix:`xlink`,name:`actuate`,namespace:O.XLINK}],[`xlink:arcrole`,{prefix:`xlink`,name:`arcrole`,namespace:O.XLINK}],[`xlink:href`,{prefix:`xlink`,name:`href`,namespace:O.XLINK}],[`xlink:role`,{prefix:`xlink`,name:`role`,namespace:O.XLINK}],[`xlink:show`,{prefix:`xlink`,name:`show`,namespace:O.XLINK}],[`xlink:title`,{prefix:`xlink`,name:`title`,namespace:O.XLINK}],[`xlink:type`,{prefix:`xlink`,name:`type`,namespace:O.XLINK}],[`xml:lang`,{prefix:`xml`,name:`lang`,namespace:O.XML}],[`xml:space`,{prefix:`xml`,name:`space`,namespace:O.XML}],[`xmlns`,{prefix:``,name:`xmlns`,namespace:O.XMLNS}],[`xmlns:xlink`,{prefix:`xmlns`,name:`xlink`,namespace:O.XMLNS}]]),st=new Map(`altGlyph.altGlyphDef.altGlyphItem.animateColor.animateMotion.animateTransform.clipPath.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feDistantLight.feFlood.feFuncA.feFuncB.feFuncG.feFuncR.feGaussianBlur.feImage.feMerge.feMergeNode.feMorphology.feOffset.fePointLight.feSpecularLighting.feSpotLight.feTile.feTurbulence.foreignObject.glyphRef.linearGradient.radialGradient.textPath`.split(`.`).map(e=>[e.toLowerCase(),e])),ct=new Set([M.B,M.BIG,M.BLOCKQUOTE,M.BODY,M.BR,M.CENTER,M.CODE,M.DD,M.DIV,M.DL,M.DT,M.EM,M.EMBED,M.H1,M.H2,M.H3,M.H4,M.H5,M.H6,M.HEAD,M.HR,M.I,M.IMG,M.LI,M.LISTING,M.MENU,M.META,M.NOBR,M.OL,M.P,M.PRE,M.RUBY,M.S,M.SMALL,M.SPAN,M.STRONG,M.STRIKE,M.SUB,M.SUP,M.TABLE,M.TT,M.U,M.UL,M.VAR]);function lt(e){let t=e.tagID;return t===M.FONT&&e.attrs.some(({name:e})=>e===k.COLOR||e===k.SIZE||e===k.FACE)||ct.has(t)}function ut(e){for(let t=0;t0&&this._setContextModes(e,t)}onItemPop(e,t){var n,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(e,this.currentToken),(r=(n=this.treeAdapter).onItemPop)==null||r.call(n,e,this.openElements.current),t){let e,t;this.openElements.stackTop===0&&this.fragmentContext?(e=this.fragmentContext,t=this.fragmentContextID):{current:e,currentTagId:t}=this.openElements,this._setContextModes(e,t)}}_setContextModes(e,t){let n=e===this.document||e&&this.treeAdapter.getNamespaceURI(e)===O.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&e!==void 0&&t!==void 0&&!this._isIntegrationPoint(t,e)}_switchToTextParsing(e,t){this._insertElement(e,O.HTML),this.tokenizer.state=t,this.originalInsertionMode=this.insertionMode,this.insertionMode=B.TEXT}switchToPlaintextParsing(){this.insertionMode=B.TEXT,this.originalInsertionMode=B.IN_BODY,this.tokenizer.state=F.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;for(;e;){if(this.treeAdapter.getTagName(e)===j.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}}_initTokenizerForFragmentParsing(){if(this.fragmentContext&&this.treeAdapter.getNamespaceURI(this.fragmentContext)===O.HTML)switch(this.fragmentContextID){case M.TITLE:case M.TEXTAREA:this.tokenizer.state=F.RCDATA;break;case M.STYLE:case M.XMP:case M.IFRAME:case M.NOEMBED:case M.NOFRAMES:case M.NOSCRIPT:this.tokenizer.state=F.RAWTEXT;break;case M.SCRIPT:this.tokenizer.state=F.SCRIPT_DATA;break;case M.PLAINTEXT:this.tokenizer.state=F.PLAINTEXT}}_setDocumentType(e){let t=e.name||``,n=e.publicId||``,r=e.systemId||``;if(this.treeAdapter.setDocumentType(this.document,t,n,r),e.location){let t=this.treeAdapter.getChildNodes(this.document).find(e=>this.treeAdapter.isDocumentTypeNode(e));t&&this.treeAdapter.setNodeSourceCodeLocation(t,e.location)}}_attachElementToTree(e,t){if(this.options.sourceCodeLocationInfo){let n=t&&{...t,startTag:t};this.treeAdapter.setNodeSourceCodeLocation(e,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{let t=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(t??this.document,e)}}_appendElement(e,t){let n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n,e.location)}_insertElement(e,t){let n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n,e.location),this.openElements.push(n,e.tagID)}_insertFakeElement(e,t){let n=this.treeAdapter.createElement(e,O.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,t)}_insertTemplate(e){let t=this.treeAdapter.createElement(e.tagName,O.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,n),this._attachElementToTree(t,e.location),this.openElements.push(t,e.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){let e=this.treeAdapter.createElement(j.HTML,O.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(e,null),this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e,M.HTML)}_appendCommentNode(e,t){let n=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,e.location)}_insertCharacters(e){let t,n;if(this._shouldFosterParentOnInsertion()?({parent:t,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(t,e.chars,n):this.treeAdapter.insertText(t,e.chars)):(t=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(t,e.chars)),!e.location)return;let r=this.treeAdapter.getChildNodes(t),i=r[(n?r.lastIndexOf(n):r.length)-1];if(this.treeAdapter.getNodeSourceCodeLocation(i)){let{endLine:t,endCol:n,endOffset:r}=e.location;this.treeAdapter.updateNodeSourceCodeLocation(i,{endLine:t,endCol:n,endOffset:r})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(i,e.location)}_adoptNodes(e,t){for(let n=this.treeAdapter.getFirstChild(e);n;n=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(t,n)}_setEndLocation(e,t){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location){let n=t.location,r=this.treeAdapter.getTagName(e),i=t.type===D.END_TAG&&r===t.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(e,i)}}shouldProcessStartTagTokenInForeignContent(e){if(!this.currentNotInHTML)return!1;let t,n;return this.openElements.stackTop===0&&this.fragmentContext?(t=this.fragmentContext,n=this.fragmentContextID):{current:t,currentTagId:n}=this.openElements,e.tagID===M.SVG&&this.treeAdapter.getTagName(t)===j.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(t)===O.MATHML?!1:this.tokenizer.inForeignNode||(e.tagID===M.MGLYPH||e.tagID===M.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,t,O.HTML)}_processToken(e){switch(e.type){case D.CHARACTER:this.onCharacter(e);break;case D.NULL_CHARACTER:this.onNullCharacter(e);break;case D.COMMENT:this.onComment(e);break;case D.DOCTYPE:this.onDoctype(e);break;case D.START_TAG:this._processStartTag(e);break;case D.END_TAG:this.onEndTag(e);break;case D.EOF:this.onEof(e);break;case D.WHITESPACE_CHARACTER:this.onWhitespaceCharacter(e)}}_isIntegrationPoint(e,t,n){return gt(e,this.treeAdapter.getNamespaceURI(t),this.treeAdapter.getAttrList(t),n)}_reconstructActiveFormattingElements(){let e=this.activeFormattingElements.entries.length;if(e){let t=this.activeFormattingElements.entries.findIndex(e=>e.type===R.Marker||this.openElements.contains(e.element)),n=t===-1?e-1:t-1;for(let e=n;e>=0;e--){let t=this.activeFormattingElements.entries[e];this._insertElement(t.token,this.treeAdapter.getNamespaceURI(t.element)),t.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=B.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(M.P),this.openElements.popUntilTagNamePopped(M.P)}_resetInsertionMode(){for(let e=this.openElements.stackTop;e>=0;e--)switch(e===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[e]){case M.TR:this.insertionMode=B.IN_ROW;return;case M.TBODY:case M.THEAD:case M.TFOOT:this.insertionMode=B.IN_TABLE_BODY;return;case M.CAPTION:this.insertionMode=B.IN_CAPTION;return;case M.COLGROUP:this.insertionMode=B.IN_COLUMN_GROUP;return;case M.TABLE:this.insertionMode=B.IN_TABLE;return;case M.BODY:this.insertionMode=B.IN_BODY;return;case M.FRAMESET:this.insertionMode=B.IN_FRAMESET;return;case M.SELECT:this._resetInsertionModeForSelect(e);return;case M.TEMPLATE:this.insertionMode=this.tmplInsertionModeStack[0];return;case M.HTML:this.insertionMode=this.headElement?B.AFTER_HEAD:B.BEFORE_HEAD;return;case M.TD:case M.TH:if(e>0){this.insertionMode=B.IN_CELL;return}break;case M.HEAD:if(e>0){this.insertionMode=B.IN_HEAD;return}}this.insertionMode=B.IN_BODY}_resetInsertionModeForSelect(e){if(e>0)for(let t=e-1;t>0;t--){let e=this.openElements.tagIDs[t];if(e===M.TEMPLATE)break;if(e===M.TABLE){this.insertionMode=B.IN_SELECT_IN_TABLE;return}}this.insertionMode=B.IN_SELECT}_isElementCausesFosterParenting(e){return xt.has(e)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let e=this.openElements.stackTop;e>=0;e--){let t=this.openElements.items[e];switch(this.openElements.tagIDs[e]){case M.TEMPLATE:if(this.treeAdapter.getNamespaceURI(t)===O.HTML)return{parent:this.treeAdapter.getTemplateContent(t),beforeElement:null};break;case M.TABLE:{let n=this.treeAdapter.getParentNode(t);return n?{parent:n,beforeElement:t}:{parent:this.openElements.items[e-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(e){let t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e)}_isSpecialElement(e,t){return be[this.treeAdapter.getNamespaceURI(e)].has(t)}onCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)Ar(this,e);else switch(this.insertionMode){case B.INITIAL:V(this,e);break;case B.BEFORE_HTML:H(this,e);break;case B.BEFORE_HEAD:U(this,e);break;case B.IN_HEAD:K(this,e);break;case B.IN_HEAD_NO_SCRIPT:q(this,e);break;case B.AFTER_HEAD:J(this,e);break;case B.IN_BODY:case B.IN_CAPTION:case B.IN_CELL:case B.IN_TEMPLATE:qt(this,e);break;case B.TEXT:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:this._insertCharacters(e);break;case B.IN_TABLE:case B.IN_TABLE_BODY:case B.IN_ROW:Hn(this,e);break;case B.IN_TABLE_TEXT:Qn(this,e);break;case B.IN_COLUMN_GROUP:ar(this,e);break;case B.AFTER_BODY:xr(this,e);break;case B.AFTER_AFTER_BODY:Dr(this,e)}}onNullCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)kr(this,e);else switch(this.insertionMode){case B.INITIAL:V(this,e);break;case B.BEFORE_HTML:H(this,e);break;case B.BEFORE_HEAD:U(this,e);break;case B.IN_HEAD:K(this,e);break;case B.IN_HEAD_NO_SCRIPT:q(this,e);break;case B.AFTER_HEAD:J(this,e);break;case B.TEXT:this._insertCharacters(e);break;case B.IN_TABLE:case B.IN_TABLE_BODY:case B.IN_ROW:Hn(this,e);break;case B.IN_COLUMN_GROUP:ar(this,e);break;case B.AFTER_BODY:xr(this,e);break;case B.AFTER_AFTER_BODY:Dr(this,e)}}onComment(e){if(this.skipNextNewLine=!1,this.currentNotInHTML)jt(this,e);else switch(this.insertionMode){case B.INITIAL:case B.BEFORE_HTML:case B.BEFORE_HEAD:case B.IN_HEAD:case B.IN_HEAD_NO_SCRIPT:case B.AFTER_HEAD:case B.IN_BODY:case B.IN_TABLE:case B.IN_CAPTION:case B.IN_COLUMN_GROUP:case B.IN_TABLE_BODY:case B.IN_ROW:case B.IN_CELL:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:case B.IN_TEMPLATE:case B.IN_FRAMESET:case B.AFTER_FRAMESET:jt(this,e);break;case B.IN_TABLE_TEXT:$n(this,e);break;case B.AFTER_BODY:Mt(this,e);break;case B.AFTER_AFTER_BODY:case B.AFTER_AFTER_FRAMESET:Nt(this,e)}}onDoctype(e){switch(this.skipNextNewLine=!1,this.insertionMode){case B.INITIAL:Ft(this,e);break;case B.BEFORE_HEAD:case B.IN_HEAD:case B.IN_HEAD_NO_SCRIPT:case B.AFTER_HEAD:this._err(e,E.misplacedDoctype);break;case B.IN_TABLE_TEXT:$n(this,e)}}onStartTag(e){this.skipNextNewLine=!1,this.currentToken=e,this._processStartTag(e),e.selfClosing&&!e.ackSelfClosing&&this._err(e,E.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(e){this.shouldProcessStartTagTokenInForeignContent(e)?Mr(this,e):this._startTagOutsideForeignContent(e)}_startTagOutsideForeignContent(e){switch(this.insertionMode){case B.INITIAL:V(this,e);break;case B.BEFORE_HTML:It(this,e);break;case B.BEFORE_HEAD:Rt(this,e);break;case B.IN_HEAD:W(this,e);break;case B.IN_HEAD_NO_SCRIPT:Vt(this,e);break;case B.AFTER_HEAD:Ut(this,e);break;case B.IN_BODY:Y(this,e);break;case B.IN_TABLE:X(this,e);break;case B.IN_TABLE_TEXT:$n(this,e);break;case B.IN_CAPTION:tr(this,e);break;case B.IN_COLUMN_GROUP:rr(this,e);break;case B.IN_TABLE_BODY:or(this,e);break;case B.IN_ROW:cr(this,e);break;case B.IN_CELL:ur(this,e);break;case B.IN_SELECT:fr(this,e);break;case B.IN_SELECT_IN_TABLE:mr(this,e);break;case B.IN_TEMPLATE:gr(this,e);break;case B.AFTER_BODY:yr(this,e);break;case B.IN_FRAMESET:Sr(this,e);break;case B.AFTER_FRAMESET:wr(this,e);break;case B.AFTER_AFTER_BODY:Er(this,e);break;case B.AFTER_AFTER_FRAMESET:Or(this,e)}}onEndTag(e){this.skipNextNewLine=!1,this.currentToken=e,this.currentNotInHTML?Nr(this,e):this._endTagOutsideForeignContent(e)}_endTagOutsideForeignContent(e){switch(this.insertionMode){case B.INITIAL:V(this,e);break;case B.BEFORE_HTML:Lt(this,e);break;case B.BEFORE_HEAD:zt(this,e);break;case B.IN_HEAD:Bt(this,e);break;case B.IN_HEAD_NO_SCRIPT:Ht(this,e);break;case B.AFTER_HEAD:Wt(this,e);break;case B.IN_BODY:Rn(this,e);break;case B.TEXT:Bn(this,e);break;case B.IN_TABLE:Z(this,e);break;case B.IN_TABLE_TEXT:$n(this,e);break;case B.IN_CAPTION:nr(this,e);break;case B.IN_COLUMN_GROUP:ir(this,e);break;case B.IN_TABLE_BODY:sr(this,e);break;case B.IN_ROW:lr(this,e);break;case B.IN_CELL:dr(this,e);break;case B.IN_SELECT:pr(this,e);break;case B.IN_SELECT_IN_TABLE:hr(this,e);break;case B.IN_TEMPLATE:_r(this,e);break;case B.AFTER_BODY:br(this,e);break;case B.IN_FRAMESET:Cr(this,e);break;case B.AFTER_FRAMESET:Tr(this,e);break;case B.AFTER_AFTER_BODY:Dr(this,e)}}onEof(e){switch(this.insertionMode){case B.INITIAL:V(this,e);break;case B.BEFORE_HTML:H(this,e);break;case B.BEFORE_HEAD:U(this,e);break;case B.IN_HEAD:K(this,e);break;case B.IN_HEAD_NO_SCRIPT:q(this,e);break;case B.AFTER_HEAD:J(this,e);break;case B.IN_BODY:case B.IN_TABLE:case B.IN_CAPTION:case B.IN_COLUMN_GROUP:case B.IN_TABLE_BODY:case B.IN_ROW:case B.IN_CELL:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:zn(this,e);break;case B.TEXT:Vn(this,e);break;case B.IN_TABLE_TEXT:$n(this,e);break;case B.IN_TEMPLATE:vr(this,e);break;case B.AFTER_BODY:case B.IN_FRAMESET:case B.AFTER_FRAMESET:case B.AFTER_AFTER_BODY:case B.AFTER_AFTER_FRAMESET:Pt(this,e)}}onWhitespaceCharacter(e){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,e.chars.charCodeAt(0)===w.LINE_FEED)){if(e.chars.length===1)return;e.chars=e.chars.substr(1)}if(this.tokenizer.inForeignNode)this._insertCharacters(e);else switch(this.insertionMode){case B.IN_HEAD:case B.IN_HEAD_NO_SCRIPT:case B.AFTER_HEAD:case B.TEXT:case B.IN_COLUMN_GROUP:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:case B.IN_FRAMESET:case B.AFTER_FRAMESET:this._insertCharacters(e);break;case B.IN_BODY:case B.IN_CAPTION:case B.IN_CELL:case B.IN_TEMPLATE:case B.AFTER_BODY:case B.AFTER_AFTER_BODY:case B.AFTER_AFTER_FRAMESET:Kt(this,e);break;case B.IN_TABLE:case B.IN_TABLE_BODY:case B.IN_ROW:Hn(this,e);break;case B.IN_TABLE_TEXT:Zn(this,e)}}};function wt(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagID)||(n=null):(e.activeFormattingElements.removeEntry(n),n=null):Ln(e,t),n}function Tt(e,t){let n=null,r=e.openElements.stackTop;for(;r>=0;r--){let i=e.openElements.items[r];if(i===t.element)break;e._isSpecialElement(i,e.openElements.tagIDs[r])&&(n=i)}return n||(e.openElements.shortenToLength(Math.max(r,0)),e.activeFormattingElements.removeEntry(t)),n}function Et(e,t,n){let r=t,i=e.openElements.getCommonAncestor(t);for(let a=0,o=i;o!==n;a++,o=i){i=e.openElements.getCommonAncestor(o);let n=e.activeFormattingElements.getElementEntry(o),s=n&&a>=yt;!n||s?(s&&e.activeFormattingElements.removeEntry(n),e.openElements.remove(o)):(o=Dt(e,n),r===t&&(e.activeFormattingElements.bookmark=n),e.treeAdapter.detachNode(r),e.treeAdapter.appendChild(o,r),r=o)}return r}function Dt(e,t){let n=e.treeAdapter.getNamespaceURI(t.element),r=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,r),t.element=r,r}function Ot(e,t,n){let r=ye(e.treeAdapter.getTagName(t));if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else{let i=e.treeAdapter.getNamespaceURI(t);r===M.TEMPLATE&&i===O.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n)}}function kt(e,t,n){let r=e.treeAdapter.getNamespaceURI(n.element),{token:i}=n,a=e.treeAdapter.createElement(i.tagName,r,i.attrs);e._adoptNodes(t,a),e.treeAdapter.appendChild(t,a),e.activeFormattingElements.insertElementAfterBookmark(a,i),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,a,i.tagID)}function At(e,t){for(let n=0;n=n;r--)e._setEndLocation(e.openElements.items[r],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){let n=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(n);if(r&&!r.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){let n=e.openElements.items[1],r=e.treeAdapter.getNodeSourceCodeLocation(n);r&&!r.endTag&&e._setEndLocation(n,t)}}}}function Ft(e,t){e._setDocumentType(t);let n=t.forceQuirks?A.QUIRKS:tt(t);et(t)||e._err(t,E.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=B.BEFORE_HTML}function V(e,t){e._err(t,E.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,A.QUIRKS),e.insertionMode=B.BEFORE_HTML,e._processToken(t)}function It(e,t){t.tagID===M.HTML?(e._insertElement(t,O.HTML),e.insertionMode=B.BEFORE_HEAD):H(e,t)}function Lt(e,t){let n=t.tagID;(n===M.HTML||n===M.HEAD||n===M.BODY||n===M.BR)&&H(e,t)}function H(e,t){e._insertFakeRootElement(),e.insertionMode=B.BEFORE_HEAD,e._processToken(t)}function Rt(e,t){switch(t.tagID){case M.HTML:Y(e,t);break;case M.HEAD:e._insertElement(t,O.HTML),e.headElement=e.openElements.current,e.insertionMode=B.IN_HEAD;break;default:U(e,t)}}function zt(e,t){let n=t.tagID;n===M.HEAD||n===M.BODY||n===M.HTML||n===M.BR?U(e,t):e._err(t,E.endTagWithoutMatchingOpenElement)}function U(e,t){e._insertFakeElement(j.HEAD,M.HEAD),e.headElement=e.openElements.current,e.insertionMode=B.IN_HEAD,e._processToken(t)}function W(e,t){switch(t.tagID){case M.HTML:Y(e,t);break;case M.BASE:case M.BASEFONT:case M.BGSOUND:case M.LINK:case M.META:e._appendElement(t,O.HTML),t.ackSelfClosing=!0;break;case M.TITLE:e._switchToTextParsing(t,F.RCDATA);break;case M.NOSCRIPT:e.options.scriptingEnabled?e._switchToTextParsing(t,F.RAWTEXT):(e._insertElement(t,O.HTML),e.insertionMode=B.IN_HEAD_NO_SCRIPT);break;case M.NOFRAMES:case M.STYLE:e._switchToTextParsing(t,F.RAWTEXT);break;case M.SCRIPT:e._switchToTextParsing(t,F.SCRIPT_DATA);break;case M.TEMPLATE:e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=B.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(B.IN_TEMPLATE);break;case M.HEAD:e._err(t,E.misplacedStartTagForHeadElement);break;default:K(e,t)}}function Bt(e,t){switch(t.tagID){case M.HEAD:e.openElements.pop(),e.insertionMode=B.AFTER_HEAD;break;case M.BODY:case M.BR:case M.HTML:K(e,t);break;case M.TEMPLATE:G(e,t);break;default:e._err(t,E.endTagWithoutMatchingOpenElement)}}function G(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==M.TEMPLATE&&e._err(t,E.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(M.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,E.endTagWithoutMatchingOpenElement)}function K(e,t){e.openElements.pop(),e.insertionMode=B.AFTER_HEAD,e._processToken(t)}function Vt(e,t){switch(t.tagID){case M.HTML:Y(e,t);break;case M.BASEFONT:case M.BGSOUND:case M.HEAD:case M.LINK:case M.META:case M.NOFRAMES:case M.STYLE:W(e,t);break;case M.NOSCRIPT:e._err(t,E.nestedNoscriptInHead);break;default:q(e,t)}}function Ht(e,t){switch(t.tagID){case M.NOSCRIPT:e.openElements.pop(),e.insertionMode=B.IN_HEAD;break;case M.BR:q(e,t);break;default:e._err(t,E.endTagWithoutMatchingOpenElement)}}function q(e,t){let n=t.type===D.EOF?E.openElementsLeftAfterEof:E.disallowedContentInNoscriptInHead;e._err(t,n),e.openElements.pop(),e.insertionMode=B.IN_HEAD,e._processToken(t)}function Ut(e,t){switch(t.tagID){case M.HTML:Y(e,t);break;case M.BODY:e._insertElement(t,O.HTML),e.framesetOk=!1,e.insertionMode=B.IN_BODY;break;case M.FRAMESET:e._insertElement(t,O.HTML),e.insertionMode=B.IN_FRAMESET;break;case M.BASE:case M.BASEFONT:case M.BGSOUND:case M.LINK:case M.META:case M.NOFRAMES:case M.SCRIPT:case M.STYLE:case M.TEMPLATE:case M.TITLE:e._err(t,E.abandonedHeadElementChild),e.openElements.push(e.headElement,M.HEAD),W(e,t),e.openElements.remove(e.headElement);break;case M.HEAD:e._err(t,E.misplacedStartTagForHeadElement);break;default:J(e,t)}}function Wt(e,t){switch(t.tagID){case M.BODY:case M.HTML:case M.BR:J(e,t);break;case M.TEMPLATE:G(e,t);break;default:e._err(t,E.endTagWithoutMatchingOpenElement)}}function J(e,t){e._insertFakeElement(j.BODY,M.BODY),e.insertionMode=B.IN_BODY,Gt(e,t)}function Gt(e,t){switch(t.type){case D.CHARACTER:qt(e,t);break;case D.WHITESPACE_CHARACTER:Kt(e,t);break;case D.COMMENT:jt(e,t);break;case D.START_TAG:Y(e,t);break;case D.END_TAG:Rn(e,t);break;case D.EOF:zn(e,t)}}function Kt(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function qt(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function Jt(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}function Yt(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(n,t.attrs))}function Xt(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,O.HTML),e.insertionMode=B.IN_FRAMESET)}function Zt(e,t){e.openElements.hasInButtonScope(M.P)&&e._closePElement(),e._insertElement(t,O.HTML)}function Qt(e,t){e.openElements.hasInButtonScope(M.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&xe.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,O.HTML)}function $t(e,t){e.openElements.hasInButtonScope(M.P)&&e._closePElement(),e._insertElement(t,O.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function en(e,t){let n=e.openElements.tmplCount>0;(!e.formElement||n)&&(e.openElements.hasInButtonScope(M.P)&&e._closePElement(),e._insertElement(t,O.HTML),n||(e.formElement=e.openElements.current))}function tn(e,t){e.framesetOk=!1;let n=t.tagID;for(let t=e.openElements.stackTop;t>=0;t--){let r=e.openElements.tagIDs[t];if(n===M.LI&&r===M.LI||(n===M.DD||n===M.DT)&&(r===M.DD||r===M.DT)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r);break}if(r!==M.ADDRESS&&r!==M.DIV&&r!==M.P&&e._isSpecialElement(e.openElements.items[t],r))break}e.openElements.hasInButtonScope(M.P)&&e._closePElement(),e._insertElement(t,O.HTML)}function nn(e,t){e.openElements.hasInButtonScope(M.P)&&e._closePElement(),e._insertElement(t,O.HTML),e.tokenizer.state=F.PLAINTEXT}function rn(e,t){e.openElements.hasInScope(M.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(M.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,O.HTML),e.framesetOk=!1}function an(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(j.A);n&&(At(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,O.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function on(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,O.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function sn(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(M.NOBR)&&(At(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,O.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function cn(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,O.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function ln(e,t){e.treeAdapter.getDocumentMode(e.document)!==A.QUIRKS&&e.openElements.hasInButtonScope(M.P)&&e._closePElement(),e._insertElement(t,O.HTML),e.framesetOk=!1,e.insertionMode=B.IN_TABLE}function un(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,O.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function dn(e){let t=_e(e,k.TYPE);return t!=null&&t.toLowerCase()===_t}function fn(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,O.HTML),dn(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}function pn(e,t){e._appendElement(t,O.HTML),t.ackSelfClosing=!0}function mn(e,t){e.openElements.hasInButtonScope(M.P)&&e._closePElement(),e._appendElement(t,O.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function hn(e,t){t.tagName=j.IMG,t.tagID=M.IMG,un(e,t)}function gn(e,t){e._insertElement(t,O.HTML),e.skipNextNewLine=!0,e.tokenizer.state=F.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=B.TEXT}function _n(e,t){e.openElements.hasInButtonScope(M.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,F.RAWTEXT)}function vn(e,t){e.framesetOk=!1,e._switchToTextParsing(t,F.RAWTEXT)}function yn(e,t){e._switchToTextParsing(t,F.RAWTEXT)}function bn(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,O.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===B.IN_TABLE||e.insertionMode===B.IN_CAPTION||e.insertionMode===B.IN_TABLE_BODY||e.insertionMode===B.IN_ROW||e.insertionMode===B.IN_CELL?B.IN_SELECT_IN_TABLE:B.IN_SELECT}function xn(e,t){e.openElements.currentTagId===M.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,O.HTML)}function Sn(e,t){e.openElements.hasInScope(M.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,O.HTML)}function Cn(e,t){e.openElements.hasInScope(M.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(M.RTC),e._insertElement(t,O.HTML)}function wn(e,t){e._reconstructActiveFormattingElements(),ut(t),ft(t),t.selfClosing?e._appendElement(t,O.MATHML):e._insertElement(t,O.MATHML),t.ackSelfClosing=!0}function Tn(e,t){e._reconstructActiveFormattingElements(),dt(t),ft(t),t.selfClosing?e._appendElement(t,O.SVG):e._insertElement(t,O.SVG),t.ackSelfClosing=!0}function En(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,O.HTML)}function Y(e,t){switch(t.tagID){case M.I:case M.S:case M.B:case M.U:case M.EM:case M.TT:case M.BIG:case M.CODE:case M.FONT:case M.SMALL:case M.STRIKE:case M.STRONG:on(e,t);break;case M.A:an(e,t);break;case M.H1:case M.H2:case M.H3:case M.H4:case M.H5:case M.H6:Qt(e,t);break;case M.P:case M.DL:case M.OL:case M.UL:case M.DIV:case M.DIR:case M.NAV:case M.MAIN:case M.MENU:case M.ASIDE:case M.CENTER:case M.FIGURE:case M.FOOTER:case M.HEADER:case M.HGROUP:case M.DIALOG:case M.DETAILS:case M.ADDRESS:case M.ARTICLE:case M.SEARCH:case M.SECTION:case M.SUMMARY:case M.FIELDSET:case M.BLOCKQUOTE:case M.FIGCAPTION:Zt(e,t);break;case M.LI:case M.DD:case M.DT:tn(e,t);break;case M.BR:case M.IMG:case M.WBR:case M.AREA:case M.EMBED:case M.KEYGEN:un(e,t);break;case M.HR:mn(e,t);break;case M.RB:case M.RTC:Sn(e,t);break;case M.RT:case M.RP:Cn(e,t);break;case M.PRE:case M.LISTING:$t(e,t);break;case M.XMP:_n(e,t);break;case M.SVG:Tn(e,t);break;case M.HTML:Jt(e,t);break;case M.BASE:case M.LINK:case M.META:case M.STYLE:case M.TITLE:case M.SCRIPT:case M.BGSOUND:case M.BASEFONT:case M.TEMPLATE:W(e,t);break;case M.BODY:Yt(e,t);break;case M.FORM:en(e,t);break;case M.NOBR:sn(e,t);break;case M.MATH:wn(e,t);break;case M.TABLE:ln(e,t);break;case M.INPUT:fn(e,t);break;case M.PARAM:case M.TRACK:case M.SOURCE:pn(e,t);break;case M.IMAGE:hn(e,t);break;case M.BUTTON:rn(e,t);break;case M.APPLET:case M.OBJECT:case M.MARQUEE:cn(e,t);break;case M.IFRAME:vn(e,t);break;case M.SELECT:bn(e,t);break;case M.OPTION:case M.OPTGROUP:xn(e,t);break;case M.NOEMBED:case M.NOFRAMES:yn(e,t);break;case M.FRAMESET:Xt(e,t);break;case M.TEXTAREA:gn(e,t);break;case M.NOSCRIPT:e.options.scriptingEnabled?yn(e,t):En(e,t);break;case M.PLAINTEXT:nn(e,t);break;case M.COL:case M.TH:case M.TD:case M.TR:case M.HEAD:case M.FRAME:case M.TBODY:case M.TFOOT:case M.THEAD:case M.CAPTION:case M.COLGROUP:break;default:En(e,t)}}function Dn(e,t){if(e.openElements.hasInScope(M.BODY)&&(e.insertionMode=B.AFTER_BODY,e.options.sourceCodeLocationInfo)){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e._setEndLocation(n,t)}}function On(e,t){e.openElements.hasInScope(M.BODY)&&(e.insertionMode=B.AFTER_BODY,br(e,t))}function kn(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n))}function An(e){let t=e.openElements.tmplCount>0,{formElement:n}=e;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(M.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(M.FORM):n&&e.openElements.remove(n))}function jn(e){e.openElements.hasInButtonScope(M.P)||e._insertFakeElement(j.P,M.P),e._closePElement()}function Mn(e){e.openElements.hasInListItemScope(M.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(M.LI),e.openElements.popUntilTagNamePopped(M.LI))}function Nn(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n))}function Pn(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function Fn(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker())}function In(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(j.BR,M.BR),e.openElements.pop(),e.framesetOk=!1}function Ln(e,t){let n=t.tagName,r=t.tagID;for(let t=e.openElements.stackTop;t>0;t--){let i=e.openElements.items[t],a=e.openElements.tagIDs[t];if(r===a&&(r!==M.UNKNOWN||e.treeAdapter.getTagName(i)===n)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.stackTop>=t&&e.openElements.shortenToLength(t);break}if(e._isSpecialElement(i,a))break}}function Rn(e,t){switch(t.tagID){case M.A:case M.B:case M.I:case M.S:case M.U:case M.EM:case M.TT:case M.BIG:case M.CODE:case M.FONT:case M.NOBR:case M.SMALL:case M.STRIKE:case M.STRONG:At(e,t);break;case M.P:jn(e);break;case M.DL:case M.UL:case M.OL:case M.DIR:case M.DIV:case M.NAV:case M.PRE:case M.MAIN:case M.MENU:case M.ASIDE:case M.BUTTON:case M.CENTER:case M.FIGURE:case M.FOOTER:case M.HEADER:case M.HGROUP:case M.DIALOG:case M.ADDRESS:case M.ARTICLE:case M.DETAILS:case M.SEARCH:case M.SECTION:case M.SUMMARY:case M.LISTING:case M.FIELDSET:case M.BLOCKQUOTE:case M.FIGCAPTION:kn(e,t);break;case M.LI:Mn(e);break;case M.DD:case M.DT:Nn(e,t);break;case M.H1:case M.H2:case M.H3:case M.H4:case M.H5:case M.H6:Pn(e);break;case M.BR:In(e);break;case M.BODY:Dn(e,t);break;case M.HTML:On(e,t);break;case M.FORM:An(e);break;case M.APPLET:case M.OBJECT:case M.MARQUEE:Fn(e,t);break;case M.TEMPLATE:G(e,t);break;default:Ln(e,t)}}function zn(e,t){e.tmplInsertionModeStack.length>0?vr(e,t):Pt(e,t)}function Bn(e,t){var n;t.tagID===M.SCRIPT&&((n=e.scriptHandler)==null||n.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function Vn(e,t){e._err(t,E.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}function Hn(e,t){if(e.openElements.currentTagId!==void 0&&xt.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=B.IN_TABLE_TEXT,t.type){case D.CHARACTER:Qn(e,t);break;case D.WHITESPACE_CHARACTER:Zn(e,t)}else Q(e,t)}function Un(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,O.HTML),e.insertionMode=B.IN_CAPTION}function Wn(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,O.HTML),e.insertionMode=B.IN_COLUMN_GROUP}function Gn(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(j.COLGROUP,M.COLGROUP),e.insertionMode=B.IN_COLUMN_GROUP,rr(e,t)}function Kn(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,O.HTML),e.insertionMode=B.IN_TABLE_BODY}function qn(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(j.TBODY,M.TBODY),e.insertionMode=B.IN_TABLE_BODY,or(e,t)}function Jn(e,t){e.openElements.hasInTableScope(M.TABLE)&&(e.openElements.popUntilTagNamePopped(M.TABLE),e._resetInsertionMode(),e._processStartTag(t))}function Yn(e,t){dn(t)?e._appendElement(t,O.HTML):Q(e,t),t.ackSelfClosing=!0}function Xn(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,O.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function X(e,t){switch(t.tagID){case M.TD:case M.TH:case M.TR:qn(e,t);break;case M.STYLE:case M.SCRIPT:case M.TEMPLATE:W(e,t);break;case M.COL:Gn(e,t);break;case M.FORM:Xn(e,t);break;case M.TABLE:Jn(e,t);break;case M.TBODY:case M.TFOOT:case M.THEAD:Kn(e,t);break;case M.INPUT:Yn(e,t);break;case M.CAPTION:Un(e,t);break;case M.COLGROUP:Wn(e,t);break;default:Q(e,t)}}function Z(e,t){switch(t.tagID){case M.TABLE:e.openElements.hasInTableScope(M.TABLE)&&(e.openElements.popUntilTagNamePopped(M.TABLE),e._resetInsertionMode());break;case M.TEMPLATE:G(e,t);break;case M.BODY:case M.CAPTION:case M.COL:case M.COLGROUP:case M.HTML:case M.TBODY:case M.TD:case M.TFOOT:case M.TH:case M.THEAD:case M.TR:break;default:Q(e,t)}}function Q(e,t){let n=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,Gt(e,t),e.fosterParentingEnabled=n}function Zn(e,t){e.pendingCharacterTokens.push(t)}function Qn(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function $n(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n0&&e.openElements.currentTagId===M.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===M.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===M.OPTGROUP&&e.openElements.pop();break;case M.OPTION:e.openElements.currentTagId===M.OPTION&&e.openElements.pop();break;case M.SELECT:e.openElements.hasInSelectScope(M.SELECT)&&(e.openElements.popUntilTagNamePopped(M.SELECT),e._resetInsertionMode());break;case M.TEMPLATE:G(e,t)}}function mr(e,t){let n=t.tagID;n===M.CAPTION||n===M.TABLE||n===M.TBODY||n===M.TFOOT||n===M.THEAD||n===M.TR||n===M.TD||n===M.TH?(e.openElements.popUntilTagNamePopped(M.SELECT),e._resetInsertionMode(),e._processStartTag(t)):fr(e,t)}function hr(e,t){let n=t.tagID;n===M.CAPTION||n===M.TABLE||n===M.TBODY||n===M.TFOOT||n===M.THEAD||n===M.TR||n===M.TD||n===M.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(M.SELECT),e._resetInsertionMode(),e.onEndTag(t)):pr(e,t)}function gr(e,t){switch(t.tagID){case M.BASE:case M.BASEFONT:case M.BGSOUND:case M.LINK:case M.META:case M.NOFRAMES:case M.SCRIPT:case M.STYLE:case M.TEMPLATE:case M.TITLE:W(e,t);break;case M.CAPTION:case M.COLGROUP:case M.TBODY:case M.TFOOT:case M.THEAD:e.tmplInsertionModeStack[0]=B.IN_TABLE,e.insertionMode=B.IN_TABLE,X(e,t);break;case M.COL:e.tmplInsertionModeStack[0]=B.IN_COLUMN_GROUP,e.insertionMode=B.IN_COLUMN_GROUP,rr(e,t);break;case M.TR:e.tmplInsertionModeStack[0]=B.IN_TABLE_BODY,e.insertionMode=B.IN_TABLE_BODY,or(e,t);break;case M.TD:case M.TH:e.tmplInsertionModeStack[0]=B.IN_ROW,e.insertionMode=B.IN_ROW,cr(e,t);break;default:e.tmplInsertionModeStack[0]=B.IN_BODY,e.insertionMode=B.IN_BODY,Y(e,t)}}function _r(e,t){t.tagID===M.TEMPLATE&&G(e,t)}function vr(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(M.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):Pt(e,t)}function yr(e,t){t.tagID===M.HTML?Y(e,t):xr(e,t)}function br(e,t){if(t.tagID===M.HTML){if(e.fragmentContext||(e.insertionMode=B.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===M.HTML){e._setEndLocation(e.openElements.items[0],t);let n=e.openElements.items[1];n&&!e.treeAdapter.getNodeSourceCodeLocation(n)?.endTag&&e._setEndLocation(n,t)}}else xr(e,t)}function xr(e,t){e.insertionMode=B.IN_BODY,Gt(e,t)}function Sr(e,t){switch(t.tagID){case M.HTML:Y(e,t);break;case M.FRAMESET:e._insertElement(t,O.HTML);break;case M.FRAME:e._appendElement(t,O.HTML),t.ackSelfClosing=!0;break;case M.NOFRAMES:W(e,t)}}function Cr(e,t){t.tagID===M.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==M.FRAMESET&&(e.insertionMode=B.AFTER_FRAMESET))}function wr(e,t){switch(t.tagID){case M.HTML:Y(e,t);break;case M.NOFRAMES:W(e,t)}}function Tr(e,t){t.tagID===M.HTML&&(e.insertionMode=B.AFTER_AFTER_FRAMESET)}function Er(e,t){t.tagID===M.HTML?Y(e,t):Dr(e,t)}function Dr(e,t){e.insertionMode=B.IN_BODY,Gt(e,t)}function Or(e,t){switch(t.tagID){case M.HTML:Y(e,t);break;case M.NOFRAMES:W(e,t)}}function kr(e,t){t.chars=`�`,e._insertCharacters(t)}function Ar(e,t){e._insertCharacters(t),e.framesetOk=!1}function jr(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==O.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function Mr(e,t){if(lt(t))jr(e),e._startTagOutsideForeignContent(t);else{let n=e._getAdjustedCurrentElement(),r=e.treeAdapter.getNamespaceURI(n);r===O.MATHML?ut(t):r===O.SVG&&(pt(t),dt(t)),ft(t),t.selfClosing?e._appendElement(t,r):e._insertElement(t,r),t.ackSelfClosing=!0}}function Nr(e,t){if(t.tagID===M.P||t.tagID===M.BR)jr(e),e._endTagOutsideForeignContent(t);else for(let n=e.openElements.stackTop;n>0;n--){let r=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(r)===O.HTML){e._endTagOutsideForeignContent(t);break}let i=e.treeAdapter.getTagName(r);if(i.toLowerCase()===t.tagName){t.tagName=i,e.openElements.shortenToLength(n);break}}}j.AREA,j.BASE,j.BASEFONT,j.BGSOUND,j.BR,j.COL,j.EMBED,j.FRAME,j.HR,j.IMG,j.INPUT,j.KEYGEN,j.LINK,j.META,j.PARAM,j.SOURCE,j.TRACK,j.WBR;function Pr(e,t){return Ct.parse(e,t)}var Fr=new Set(`b.strong.span.br.small.i.em.a.code.u.sup.sub.mark.s.del.ins.abbr.cite.q.kbd.samp.var.time.wbr.bdi.bdo.ruby.rt.rp.font.strike.big.tt`.split(`.`)),Ir=new Set([`script`,`style`,`textarea`]),Lr=new Set([`title`]),Rr=[`code`,`codebox`];function zr(e){return Fr.has(e)}function Br(e){if(!e)return!1;let t=e.split(/\s+/);return Rr.some(e=>t.includes(e))}function Vr(e){return`tagName`in e}function Hr(e){return`childNodes`in e?e.childNodes:[]}function Ur(e,t){return e.attrs.find(e=>e.name===t)?.value}function Wr(e){return Hr(e).some(e=>e.nodeName===`#text`&&`value`in e&&e.value.trim().length>0)}function Gr(e){return e.nodeName===`#text`?`value`in e?e.value:``:Vr(e)&&Ir.has(e.tagName)?``:Hr(e).map(Gr).join(``)}function Kr(e){return Br(Ur(e,`class`))?`CODE_BLOCK`:null}function qr(e){let t=Pr(e,{sourceCodeLocationInfo:!0}),n=[],r=0,i=(t,a)=>{if(Vr(t)&&Ir.has(t.tagName))return;let o=Hr(t).filter(Vr),s=Vr(t)?a??Kr(t):a;if(Vr(t)){let i=t.sourceCodeLocation,a=i?.startTag,c=i?.endTag,l=o.some(e=>!zr(e.tagName));if(a&&!l&&Gr(t).trim().length>0){let o=a.endOffset,l=c?c.startOffset:i?.endOffset??o;n.push({id:r++,tag:t.tagName,innerStart:o,innerEnd:l,sourceInner:e.slice(o,l),sourceText:ae(Gr(t)),rcdata:Lr.has(t.tagName),locked:c?s:`AMBIGUOUS`});return}if(a&&c&&o.length===0){let i=a.endOffset,o=c.startOffset,l=e.slice(i,o);if(l.trim().length===0){let e=Lr.has(t.tagName)?null:`EMPTY_IN_SOURCE`;n.push({id:r++,tag:t.tagName,innerStart:i,innerEnd:o,sourceInner:l,sourceText:``,rcdata:Lr.has(t.tagName),locked:s??e});return}}}let c=!Wr(t);for(let e of o)(!zr(e.tagName)||c)&&i(e,s)};return i(t,null),n}var Jr='function(token){"use strict";var AgentBundle=(()=>{var S=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var K=(t,a)=>{for(var u in a)S(t,u,{get:a[u],enumerable:!0})},P=(t,a,u,f)=>{if(a&&typeof a=="object"||typeof a=="function")for(let d of _(a))!F.call(t,d)&&d!==u&&S(t,d,{get:()=>a[d],enumerable:!(f=B(a,d))||f.enumerable});return t};var z=t=>P(S({},"__esModule",{value:!0}),t);var X={};K(X,{previewAgent:()=>W});function C(){return{editingId:null,editingEl:null,snapshot:null,composing:!1,revealTimer:null,revealed:null,bar:null,saved:null,barHeld:!1,pendingCommit:!1,pendingFlush:[],locked:new Set,known:null,verifiedEl:null,verified:!1,labels:{}}}var y="data-ne-id",M="data-ne-locked",R="data-ne-dark",k="data-ne-revealed",H="data-ne-bar",L="data-ne-label";var A=t=>!!t.parentElement?.closest("["+y+"]");function w(t){return{snapshotMarkers:()=>{let d=new Map;for(let l of document.querySelectorAll("["+y+"]")){if(A(l))continue;let g=Number(l.getAttribute(y)),E=d.get(g);E?E.push(l):d.set(g,[l])}return d},elementFor:d=>t.verifiedEl?t.verifiedEl.get(d)?.[0]??null:document.querySelector("["+y+\'="\'+d+\'"]\'),blockOf:d=>{let l=d instanceof Element?d:null;for(;l;){if(l.hasAttribute(y)&&!A(l)){let g=Number(l.getAttribute(y));if((t.verifiedEl===null||(t.verifiedEl.get(g)?.includes(l)??!1))&&(t.known===null||t.known.has(g)))return l}l=l.parentElement}return null},idOf:d=>Number(d.getAttribute(y))}}function N(t,a,u){let f=()=>{for(let p of t.pendingFlush.splice(0))a({type:"flushed",seq:p})},d=()=>{if(t.editingId===null)return null;let p={id:t.editingId,el:t.editingEl,before:t.snapshot};return t.editingId=null,t.editingEl=null,t.snapshot=null,t.pendingCommit=!1,p},l=()=>{if(t.editingId===null)return;if(t.composing){t.pendingCommit=!0;return}let p=d();if(!p)return;let{id:i,el:e,before:n}=p;e&&(e.removeAttribute("contenteditable"),e.removeAttribute("enterkeyhint"),t.bar&&e.contains(t.bar)&&document.documentElement.appendChild(t.bar),a({type:"edit",id:i,html:e.innerHTML,pristine:e.innerHTML===n})),u(),a({type:"select",id:null}),f()};return{commit:l,cancel:()=>{let p=d();if(!p)return;let{el:i,before:e}=p;i&&(i.removeAttribute("contenteditable"),i.removeAttribute("enterkeyhint"),t.bar&&i.contains(t.bar)&&document.documentElement.appendChild(t.bar),e!==null&&(i.innerHTML=e)),u(),a({type:"select",id:null}),f()},startEdit:p=>{let i=Number(p.getAttribute(y));if(!t.verified){a({type:"notReady"});return}if(t.locked.has(i)){a({type:"blocked",id:i});return}t.editingId!==i&&(l(),t.editingId===null&&(t.editingId=i,t.editingEl=p,t.snapshot=p.innerHTML,p.setAttribute("contenteditable","true"),p.setAttribute("enterkeyhint","done"),p.focus(),a({type:"select",id:i})))}}}var q=new Set(["foreColor","fontSize","backColor","hiliteColor"]);function $(t,a){let u=(i,e)=>{if(t.editingId===null)return;let n=t.editingEl;if(!n)return;let r=t.saved;if(r){let s=getSelection();s?.removeAllRanges(),s?.addRange(r)}n.focus();let o=getSelection()?.rangeCount?getSelection()?.getRangeAt(0):null;!o||!n.contains(o.startContainer)||!n.contains(o.endContainer)||(document.execCommand("styleWithCSS",!1,String(q.has(i))),document.execCommand(i,!1,e),t.saved=getSelection()?.rangeCount?getSelection()?.getRangeAt(0)??null:null,a())},f=i=>i.style.fontSize==="xxx-large"||i.style.fontSize==="-webkit-xxx-large",d=(i,e)=>{let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),r=!1;for(let o=n.nextNode();o;o=n.nextNode()){if((o.nodeValue??"").length===0)continue;r=!0;let s=document.createRange();if(s.selectNodeContents(o),i.compareBoundaryPoints(Range.START_TO_START,s)>0||i.compareBoundaryPoints(Range.END_TO_END,s)<0)return!1}return r},l=(i,e)=>{let n=i.commonAncestorContainer;for(;n&&n!==e;){if(n instanceof HTMLElement&&f(n)&&!n.hasAttribute(y))return n;n=n.parentNode}return null},g=(i,e,n)=>{let r=e.extractContents(),o=document.createRange();o.selectNodeContents(i),o.setStart(e.startContainer,e.startOffset);let s=o.extractContents(),c=T=>{let v=i.cloneNode(!1);return v.removeAttribute("id"),v.appendChild(T),v},m=c(r);m.style.fontSize=n,i.parentNode?.insertBefore(m,i.nextSibling);let b=T=>{for(let v=T.firstChild;v;v=v.nextSibling)if(v.nodeType!==Node.TEXT_NODE||(v.nodeValue??"").length>0)return!1;return!0};b(s)||m.parentNode?.insertBefore(c(s),m.nextSibling),b(i)&&i.remove();let x=getSelection(),h=document.createRange();h.selectNodeContents(m),x?.removeAllRanges(),x?.addRange(h),a()},E=()=>{t.saved=getSelection()?.rangeCount?getSelection()?.getRangeAt(0)??null:null};return{format:u,resize:i=>{if(t.editingId===null)return;let e=t.editingEl;if(!e)return;u("fontSize","7");let n=getSelection(),r=n&&n.rangeCount>0?n.getRangeAt(0):null;if(!r||r.collapsed||!e.contains(r.startContainer)||!e.contains(r.endContainer))return;let o=!1;for(let s of e.querySelectorAll(\'[style*="font-size"]\'))f(s)&&d(r,s)&&(s.style.fontSize=i,o=!0);if(!o){let s=l(r,e);s&&g(s,r,i)}E()}}}function D(t,a,u,f,d,l,g,E,p){let i=e=>{e.preventDefault(),e.stopImmediatePropagation()};l(document,"selectionchange",d.placeBar),l(document,"mouseup",()=>{t.barHeld=!1}),l(document,"click",(e=>{if(t.bar&&e.target instanceof Node&&t.bar.contains(e.target)){e.stopImmediatePropagation();return}let n=a.blockOf(e.target);if(n){u.startEdit(n),i(e);return}let r=t.editingId!==null;u.commit(),r&&i(e)})),l(document,"keydown",(e=>{if((e.ctrlKey||e.metaKey)&&!e.altKey&&(e.key==="s"||e.key==="S")){if(i(e),t.composing||e.isComposing)return;u.commit(),g({type:"save"});return}if((e.ctrlKey||e.metaKey)&&!e.altKey&&!e.shiftKey&&(e.key==="z"||e.key==="Z")&&t.editingId===null){i(e),g({type:"undo"});return}if(t.editingId!==null){if((e.ctrlKey||e.metaKey)&&!e.altKey){let n=e.key.toLowerCase(),r=n==="b"?"bold":n==="i"?"italic":n==="u"?"underline":"";if(r){i(e),p.format(r);return}}if(e.key==="Enter"&&!e.shiftKey&&!t.composing&&!e.isComposing){u.commit(),i(e);return}e.key==="Escape"&&u.cancel(),e.stopImmediatePropagation()}})),l(document,"beforeinput",(e=>{t.editingId===null||e.inputType!=="insertParagraph"||(e.preventDefault(),!t.composing&&!e.isComposing&&u.commit())})),l(document,"touchend",e=>{let n=e.target;t.bar&&n instanceof Node&&t.bar.contains(n)||(t.barHeld=!1),t.editingId!==null&&e.stopImmediatePropagation()}),l(document,"compositionstart",()=>{t.composing=!0}),l(document,"compositionend",()=>{t.composing=!1,t.pendingCommit&&u.commit()}),l(document,"focusout",e=>{let n=e.relatedTarget;t.bar&&n instanceof Node&&t.bar.contains(n)||u.commit()}),l(document,"paste",(e=>{if(t.editingId===null)return;e.preventDefault();let n=e.clipboardData?.getData("text/plain")??"";document.execCommand("insertText",!1,n)})),l(window,"message",(e=>{if(e.source!==parent)return;let n=e.data;if(!(!n||typeof n!="object"))if(n.type==="locked"&&n.ids){t.verified=!0,t.locked.clear();for(let r of n.ids)t.locked.add(r);n.all&&(t.known=new Set(n.all)),t.verifiedEl===null&&(t.verifiedEl=a.snapshotMarkers());for(let[r,o]of t.verifiedEl)for(let s of o)t.locked.has(r)&&(s.textContent??"").trim()?s.setAttribute(M,""):s.removeAttribute(M)}else if(n.type==="labels"&&n.labels)d.updateLabels(n.labels);else if(n.type==="reveal"&&typeof n.id=="number")f.reveal(n.id);else if(n.type==="revert"&&typeof n.id=="number"){let r=a.elementFor(n.id);r&&(r.innerHTML=n.html??"")}else n.type==="flush"&&typeof n.seq=="number"&&(u.commit(),t.pendingCommit?t.pendingFlush.push(n.seq):g({type:"flushed",seq:n.seq}))})),l(window,"load",()=>E(f.scan,0)),document.readyState==="complete"&&E(f.scan,0)}function I(t,a,u,f,d){let l=()=>{t.revealTimer!==null&&d(t.revealTimer),t.revealTimer=null,t.revealed?.removeAttribute(k),t.revealed=null},g=e=>{let n=a.elementFor(e);n&&(n.scrollIntoView({block:"center",inline:"nearest"}),l(),n.setAttribute(k,""),t.revealed=n,t.revealTimer=f(l,1200))},E=e=>{let n=/^rgba?\\(([^)]+)\\)/.exec(e);if(!n?.[1])return null;let[r,o,s,c=1]=n[1].split(",").map(Number);return r===void 0||o===void 0||s===void 0||Number.isNaN(c)?null:[r,o,s,c]},p=()=>{for(let e of document.querySelectorAll("["+y+"]")){if(A(e))continue;let n=[],r=e;for(;r;){let m=E(getComputedStyle(r).backgroundColor);if(m&&m[3]>0&&(n.push(m),m[3]>=1))break;r=r.parentElement}let o=255,s=255,c=255;for(let m=n.length-1;m>=0;m--){let[b,x,h,T]=n[m];o=T*b+(1-T)*o,s=T*x+(1-T)*s,c=T*h+(1-T)*c}.2126*o+.7152*s+.0722*c<128?e.setAttribute(R,""):e.removeAttribute(R)}};return{scan:()=>{let e=[];for(let n of document.querySelectorAll("["+y+"]"))A(n)||e.push({id:a.idOf(n),text:n.textContent??""});t.verifiedEl=a.snapshotMarkers(),p(),u({type:"ready",blocks:e})},reveal:g,clearReveal:l}}var V=10;function O(t,a){let u=e=>{let n=/^rgba?\\(([^)]+)\\)/.exec(e);if(!n?.[1])return null;let[r,o,s,c=1]=n[1].split(",").map(Number);return r===void 0||o===void 0||s===void 0||Number.isNaN(c)?null:[r,o,s,c]},f=(e,n)=>{let r=u(e),o=u(n);if(!r||!o)return e===n;let[s,c,m]=r,[b,x,h]=o;return Math.sqrt(2*(s-b)**2+4*(c-x)**2+3*(m-h)**2)<24},d=()=>{let e=new Map,n=document.body,r=n?[n,...n.querySelectorAll("*")]:[];for(let s of r){if(![...s.childNodes].some(b=>b.nodeType===Node.TEXT_NODE&&(b.nodeValue??"").trim().length>0))continue;let m=getComputedStyle(s).color;/^rgba?\\(/.test(m)&&e.set(m,(e.get(m)??0)+1)}let o=[];for(let[s]of[...e.entries()].sort((c,m)=>m[1]-c[1])){if(o.length>=V)break;o.some(c=>f(c,s))||o.push(s)}return o},l=(e,n,r)=>{let o=document.createElement("button");o.type="button",o.textContent=e,o.setAttribute(L,n),o.title=t.labels[n]??"";let s=matchMedia("(pointer: coarse)").matches;return o.style.cssText=`all:unset;cursor:pointer;padding:${s?"6px 10px":"2px 6px"};border-radius:4px;font:600 12px/1.4 system-ui;`,o.addEventListener("mousedown",c=>c.preventDefault()),o.addEventListener("click",c=>{c.preventDefault(),c.stopImmediatePropagation(),r()}),o},g=()=>{let e=document.createElement("div");e.setAttribute(H,""),e.addEventListener("mousedown",()=>{t.barHeld=!0}),e.addEventListener("touchstart",()=>{t.barHeld=!0}),e.style.cssText="position:absolute;z-index:2147483647;display:none;gap:2px;align-items:center;flex-wrap:wrap;max-width:calc(100vw - 16px);box-sizing:border-box;padding:4px;border-radius:8px;background:#101014;color:#e9e9ec;box-shadow:0 6px 20px rgba(0,0,0,.35);font:12px system-ui;",e.append(l("B","format.bold",()=>a.format("bold")),l("I","format.italic",()=>a.format("italic")),l("U","format.underline",()=>a.format("underline")),l("A-","format.smaller",()=>a.resize("0.85em")),l("A+","format.bigger",()=>a.resize("1.35em")));for(let n of d()){let r=l(" ","format.color",()=>a.format("foreColor",n)),o=matchMedia("(pointer: coarse)").matches?20:12;r.style.cssText+=`display:block;padding:0;width:${o}px;height:${o}px;border-radius:50%;background:${n};box-shadow:inset 0 0 0 1px rgba(255,255,255,.35);`,e.append(r)}return e.append(l("\\u2715","format.clear",()=>a.format("removeFormat"))),e};return{hideBar:()=>{t.saved=null,t.bar&&(t.bar.style.display="none")},placeBar:()=>{let e=getSelection(),n=t.editingEl;if(!(n&&e&&e.rangeCount>0&&!e.isCollapsed&&n.contains(e.anchorNode)&&n.contains(e.focusNode))){t.barHeld||(t.saved=null),t.bar&&(t.bar.style.display="none");return}t.bar||(t.bar=g(),document.documentElement.appendChild(t.bar)),t.saved=e.getRangeAt(0).cloneRange();let o=e.getRangeAt(0).getBoundingClientRect();t.bar.style.display="flex";let s=o.top+scrollY-t.bar.offsetHeight-8;t.bar.style.top=`${Math.max(scrollY+4,s)}px`;let c=document.documentElement.clientWidth-t.bar.offsetWidth-8;t.bar.style.left=`${scrollX+Math.max(4,Math.min(o.left,c))}px`},updateLabels:e=>{t.labels=e;for(let n of t.bar?.querySelectorAll("["+L+"]")??[])n.setAttribute("title",e[n.getAttribute(L)??""]??"")},remove:()=>t.bar?.remove()}}function W(t=""){let a=C(),u=[],f=new Set,d=!1,l=(c,m,b)=>{c.addEventListener(m,b),u.push({target:c,type:m,fn:b})},g=c=>{parent.postMessage(t?{...c,token:t}:c,"*")},E=(c,m)=>{let b=setTimeout(()=>{f.delete(b),d||c()},m);return f.add(b),b},p=c=>{clearTimeout(c),f.delete(c)},i=w(a),e=()=>{},n=$(a,()=>e()),r=O(a,n);e=r.placeBar;let o=N(a,g,r.hideBar),s=I(a,i,g,E,p);return D(a,i,o,s,r,l,g,E,n),()=>{if(!d){d=!0,s.clearReveal();for(let c of f)clearTimeout(c);f.clear(),r.remove();for(let{target:c,type:m,fn:b}of u)c.removeEventListener(m,b)}}}return z(X);})();\n\nreturn AgentBundle.previewAgent(token);}',Yr=`data-ne-id`,Xr=`data-ne-locked`,Zr=`data-ne-dark`,Qr=`data-ne-revealed`,$r=class extends Error{};function ei(e,t){return t.map(t=>{let n=t.innerStart-1;if(e[n]!==`>`)throw new $r(`cannot find the end of the opening tag: id=${t.id} <${t.tag}>`);return{start:n,end:n,text:` ${Yr}="${t.id}"`}})}function ti(e){let t=/]*>/i.exec(e)??/]*>/i.exec(e);return t?t.index+t[0].length:0}function ni(e,t=``){return` + - + - + diff --git a/viewer-ui/dist/sw.js b/viewer-ui/dist/sw.js new file mode 100644 index 00000000..30baac5f --- /dev/null +++ b/viewer-ui/dist/sw.js @@ -0,0 +1,51 @@ +// The viewer's service worker. It exists for Web Push only: it caches nothing +// and never answers a fetch, so the page loads from the server exactly as it +// would without it. + +self.addEventListener("install", () => self.skipWaiting()); +self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim())); + +// The daemon encrypts each message to this browser's key; the browser has +// already decrypted it by the time it arrives here. +self.addEventListener("push", (event) => { + let notice = {}; + try { + notice = event.data ? event.data.json() : {}; + } catch { + // An unreadable message still has to show something: a push the page + // receives without a notification can cost it its subscription. + } + event.waitUntil( + self.registration.showNotification(notice.title || "nightcrow", { + body: notice.body || "A terminal wants your attention", + tag: notice.tag || undefined, + renotify: Boolean(notice.tag), + icon: "icon-192.png", + data: { repo: notice.repo, pane: notice.pane }, + }), + ); +}); + +// Open the viewer on the project and terminal that asked. The page reads +// `notice-repo` and `notice-pane` once at startup (`lib/notifications`), so +// an open page is navigated, not messaged: one path for both cases. +self.addEventListener("notificationclick", (event) => { + event.notification.close(); + const { repo, pane } = event.notification.data || {}; + const target = new URL(self.registration.scope); + if (typeof repo === "string") { + target.searchParams.set("notice-repo", repo); + if (Number.isInteger(pane)) target.searchParams.set("notice-pane", String(pane)); + } + event.waitUntil( + (async () => { + const windows = await self.clients.matchAll({ type: "window" }); + const open = windows.find((client) => client.url.startsWith(self.registration.scope)); + if (!open) return self.clients.openWindow(target.href); + await open.focus(); + if (typeof repo === "string") { + await open.navigate(target.href).catch(() => self.clients.openWindow(target.href)); + } + })(), + ); +}); diff --git a/viewer-ui/public/sw.js b/viewer-ui/public/sw.js new file mode 100644 index 00000000..30baac5f --- /dev/null +++ b/viewer-ui/public/sw.js @@ -0,0 +1,51 @@ +// The viewer's service worker. It exists for Web Push only: it caches nothing +// and never answers a fetch, so the page loads from the server exactly as it +// would without it. + +self.addEventListener("install", () => self.skipWaiting()); +self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim())); + +// The daemon encrypts each message to this browser's key; the browser has +// already decrypted it by the time it arrives here. +self.addEventListener("push", (event) => { + let notice = {}; + try { + notice = event.data ? event.data.json() : {}; + } catch { + // An unreadable message still has to show something: a push the page + // receives without a notification can cost it its subscription. + } + event.waitUntil( + self.registration.showNotification(notice.title || "nightcrow", { + body: notice.body || "A terminal wants your attention", + tag: notice.tag || undefined, + renotify: Boolean(notice.tag), + icon: "icon-192.png", + data: { repo: notice.repo, pane: notice.pane }, + }), + ); +}); + +// Open the viewer on the project and terminal that asked. The page reads +// `notice-repo` and `notice-pane` once at startup (`lib/notifications`), so +// an open page is navigated, not messaged: one path for both cases. +self.addEventListener("notificationclick", (event) => { + event.notification.close(); + const { repo, pane } = event.notification.data || {}; + const target = new URL(self.registration.scope); + if (typeof repo === "string") { + target.searchParams.set("notice-repo", repo); + if (Number.isInteger(pane)) target.searchParams.set("notice-pane", String(pane)); + } + event.waitUntil( + (async () => { + const windows = await self.clients.matchAll({ type: "window" }); + const open = windows.find((client) => client.url.startsWith(self.registration.scope)); + if (!open) return self.clients.openWindow(target.href); + await open.focus(); + if (typeof repo === "string") { + await open.navigate(target.href).catch(() => self.clients.openWindow(target.href)); + } + })(), + ); +}); diff --git a/viewer-ui/src/api/push.ts b/viewer-ui/src/api/push.ts new file mode 100644 index 00000000..744451a9 --- /dev/null +++ b/viewer-ui/src/api/push.ts @@ -0,0 +1,18 @@ +import { get, post } from "./client"; + +/** The daemon's Web Push routes (`/api/push/*`). An endpoint is a capability + * URL, so it always travels in a POST body. */ +export const pushApi = { + key: () => + get<{ public_key: string }>("/api/push/key").then((r) => r.public_key), + subscribe: (subscription: PushSubscriptionJSON) => + post<{ subscribed: boolean }>("/api/push/subscribe", subscription), + unsubscribe: (endpoint: string) => + post<{ subscribed: boolean }>("/api/push/unsubscribe", { endpoint }), + status: (endpoint: string) => + post<{ subscribed: boolean }>("/api/push/status", { endpoint }).then( + (r) => r.subscribed, + ), + test: (endpoint: string) => + post<{ queued: boolean }>("/api/push/test", { endpoint }), +}; diff --git a/viewer-ui/src/components/notifications/NotificationSettings.test.tsx b/viewer-ui/src/components/notifications/NotificationSettings.test.tsx new file mode 100644 index 00000000..30ad4005 --- /dev/null +++ b/viewer-ui/src/components/notifications/NotificationSettings.test.tsx @@ -0,0 +1,59 @@ +// @vitest-environment happy-dom + +import { cleanup, fireEvent, render, screen } from "@testing-library/react"; +import { afterEach, describe, expect, it, vi } from "vitest"; +import type { PushState } from "../../lib/notifications/webPush"; + +const hook = vi.hoisted(() => ({ + state: null as PushState | null, + busy: false, + enable: vi.fn(), + disable: vi.fn(), + test: vi.fn(), +})); +vi.mock("../../hooks/notifications/usePushNotifications", () => ({ + usePushNotifications: () => hook, +})); + +import { NotificationSettings } from "./NotificationSettings"; + +afterEach(() => { + cleanup(); + vi.clearAllMocks(); +}); + +function mount(state: PushState | null) { + hook.state = state; + render(); +} + +describe("NotificationSettings", () => { + it("offers a switch that turns notifications on", () => { + mount("off"); + const toggle = screen.getByRole("switch"); + expect(toggle.getAttribute("aria-checked")).toBe("false"); + fireEvent.click(toggle); + expect(hook.enable).toHaveBeenCalled(); + expect(screen.queryByText("Send a test notification")).toBeNull(); + }); + + it("when on, turns off and offers a test", () => { + mount("on"); + fireEvent.click(screen.getByText("Send a test notification")); + expect(hook.test).toHaveBeenCalled(); + fireEvent.click(screen.getByRole("switch")); + expect(hook.disable).toHaveBeenCalled(); + }); + + it.each<[PushState, RegExp]>([ + ["needs-install", /Home Screen/], + ["insecure", /HTTPS or localhost/], + ["denied", /site settings/], + ["unsupported", /does not support/], + ["unavailable", /daemon log/], + ])("explains %s instead of offering a switch", (state, text) => { + mount(state); + expect(screen.queryByRole("switch")).toBeNull(); + expect(screen.getByText(text)).toBeTruthy(); + }); +}); diff --git a/viewer-ui/src/components/notifications/NotificationSettings.tsx b/viewer-ui/src/components/notifications/NotificationSettings.tsx new file mode 100644 index 00000000..ba9b0e4c --- /dev/null +++ b/viewer-ui/src/components/notifications/NotificationSettings.tsx @@ -0,0 +1,52 @@ +import { usePushNotifications } from "../../hooks/notifications/usePushNotifications"; +import type { PushState } from "../../lib/notifications/webPush"; + +/** Why notifications cannot be turned on here, in the person's terms. */ +const EXPLANATIONS: Partial> = { + unsupported: "This browser does not support notifications.", + insecure: "Notifications need HTTPS or localhost. See the notifications guide for tailscale serve.", + "needs-install": "On iPhone and iPad, add nightcrow to the Home Screen and open it from there first.", + denied: "Notifications are blocked for this site. Allow them in the browser's site settings.", + unavailable: "The server could not load its notification key. Check the daemon log.", +}; + +const ROW_BUTTON = + "rounded-sm px-2 py-1 text-ink-200 hover:bg-ink-700 disabled:cursor-progress disabled:text-ink-400 disabled:hover:bg-transparent"; + +/** The settings menu's Notifications section: one switch per browser, plus a + * test that proves the whole path, daemon to push service to device. */ +export function NotificationSettings() { + const { state, busy, enable, disable, test } = usePushNotifications(); + const explanation = state ? EXPLANATIONS[state] : undefined; + + return ( +
+

+ Notifications +

+
+ When a terminal asks for you + {(state === "off" || state === "on") && ( + + )} + {state === null && …} +
+ {explanation &&

{explanation}

} + {state === "on" && ( + + )} +
+ ); +} diff --git a/viewer-ui/src/components/shell/SettingsMenu.tsx b/viewer-ui/src/components/shell/SettingsMenu.tsx index ac34f341..4026ca20 100644 --- a/viewer-ui/src/components/shell/SettingsMenu.tsx +++ b/viewer-ui/src/components/shell/SettingsMenu.tsx @@ -2,6 +2,7 @@ import { useLayoutEffect, useRef, useState } from "react"; import { RefreshIcon, SettingsIcon } from "../icons/actions"; import { KeyboardIcon } from "../icons/layout"; import { ChevronIcon } from "../icons/navigation"; +import { NotificationSettings } from "../notifications/NotificationSettings"; import { useShortcutHint } from "../../hooks/shortcuts/shortcutLeader"; import { SCREEN_SCALES, useScreenScale, type ScreenScale } from "../../hooks/ui/screenScale"; @@ -162,6 +163,7 @@ export function SettingsMenu({ +
@@ -141,7 +141,7 @@ export function ProjectStrip({ @@ -130,7 +130,7 @@ export function Header({ href="/logout" title="Sign out" aria-label="sign out" - className="ml-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:bg-ink-700 hover:text-ink-200" + className="ml-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent" > diff --git a/viewer-ui/src/components/shell/SettingsMenu.tsx b/viewer-ui/src/components/shell/SettingsMenu.tsx index 4026ca20..959866d5 100644 --- a/viewer-ui/src/components/shell/SettingsMenu.tsx +++ b/viewer-ui/src/components/shell/SettingsMenu.tsx @@ -100,7 +100,7 @@ export function SettingsMenu({ aria-expanded={open} aria-controls={DIALOG_ID} title="Settings" - className="ml-auto flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:bg-ink-700 hover:text-ink-200" + className="ml-auto flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent" > diff --git a/viewer-ui/visual/snapshots/linux/busy-open-project.png b/viewer-ui/visual/snapshots/linux/busy-open-project.png index 685ce003420205f56af63c6749fc92bccd510cfb..a7c6812c3f5202009b18205cf3a34b7d84149031 100644 GIT binary patch literal 37093 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 We#Vb@J@I-tTuxd^s`M{|PyZi?v>dSj literal 36873 zcmeFZXIPU<+b$eY&?N%TqAFEUK)O;w2bT&+7wI)fhftIb0U{zOARr(?T9DoeEwlhZ zkrG;@6M7FVbV4UPtmk>(@7>=%_P3w?x$e1VuDRx%^E&5_c&V*QbCdNZ z005v-d-41g06Iv5#Y<5Ud#3t8Zlbz(Ys)I5H zbHwx2@?1r<0^=j5OydYIDqJ*RLTlO)Qo0ZPC|~^J+NbDlDl7%R?$>Lta-OR_I6Smb zreGeK28Y!6Y_~$UkkQA-#}tBkvZa3rxohWxt+@rrEd>Z&rMhxizN7ueyT89QJONN$ zURa^Ha{IFUPJPYlvV14;(YUKv}fhPeocPxS8jvaQ|TK>z0B4U?H^oJ-cKgl0CquwTBY3c@%(y{r$| z{vsp+z(WXoIUq@~x5u4Jn4U#V4G(UA;=!O9-2H3pQaEjf%?H4(%gTO!%mFmz*<+8f z#WtaF6Kvw9_AZa)&&MonSq^_%iCR{@4oXM2Jh-e1sH3JX1z@4Oo@&nu&v>}fE>;V1 zgdqHhInSn?Td-Fi% zEb%B5yEItxikhayKU{7oQk2UrI=0Q-Nwc_c^*U8H_vT;D^1qoL7Kwc*3x5?gsb3*G z#aWASif8zCACP);jcclDgjJfjd}_oik;xL->trLgYWpa z#OT3fubBDO#l;+B`n8wqsE?+Uu+Q^_Gfhxb;a+-Z$0`1E3lKEe!8%0UVHR2&xb2kd(Ts55Fr6EDVZ$G$eMiXG*tUKbjC(KJfJU4+M7q7qvUHKX@n!S zt7K4VK!0VP;2_3U(&jx;<4S~l)h}3|%r(X}2-vL*ojQcON7_d^^xDKuH$e4v!aHh) z$CyHg`7;vTrmCQ!leMs07K*|1>We34uXZ)of$jzT!X6VJWLfJ1*Y=m@*ut!Hzk5t% zv!%twY<`Berih{F=`0kW^ZKgNl7m0cK6~RS^H~(0V)7Edy?4wz4tjgTXnJGyfAuv% zojdPBZ?SD;?sZ^0KbrZLAbrwhgLwkEy8Fi+@uweE5{(_<*NPtkQG+(X?u-lJD`T?{ z!3B>C)2FhZItVdGW!>iEwH6mv$?mtWijIwq%3a=JT*6OW4Jp3#>N>NfC8pJC!66Ns-OJ)G+3!XviV!yHJbP z!lSf&9{io%UmTk0S>}t=zm3yAhqcCKWo1dqacZQJ+diGH zS%?!rea?IKy0a1qZ!t9jzu!7mLSF^h3_4 z?((j z>Y!4oBrbfvWRn{uI>Y`d(8FH4%~dk&mIn)^^Jx56!(RB>xEK$7UteFg&G8ghrSPX# zUtNw*5K{HxA@YT<5Phr`-lc60JXTlula)Z=q^BKpbTE2TG__bbZK8qj9j^=@k zlogA5=7h_d$w5>Xo{l7F#5bj9kE~H4#-}(X42A--rqVMZC+i;2&JvWpmMi2m*HI!h zM2mND9J$UN*Li-U#ozzun|uwr=WyJn2(h7b{Ahdo#e+CZjkJRHGj;K9Qq6M-=|>Xq zuE~|vO6PvF0PXQf&f-tkuD>4*AP>70liCCNV5qXYJ9fBuDp^xSWu~Y|vcgz@Qe645 zqiNrxZ*h_na?r09XBT!s1vxnzU5R}d4C-t)0C7e7O^q+yD4j>U;;!k@WZa=`|M0B& z-Y;>vt}}zps8-ykLal4sO$^dJ)NNqS8Fco34dIp{2#FQ3w%Fp7<$M|T!{qRncI2> z5tkpX!!FDGQd~WF$p$OGDO$>3N$lYLFxl9}Zx5_B+VorADJlw>S=w+3%hUc`oHgVo zZlYz#!yI!b%_jk4RU0|Y=3Viy24tdM68)dI!lFWw_ zezrQK=RoN2ajp0$2hmerPZdbtfi;(HL|`MEa`FO+%W;$UW!QWOu9Y8AsHb_6(J0@E zSoRagm*NoTQP&EUlao_bEu@(bfpP0BOVT=H6Nls3+q{p}XW{V2ml*2zTgBXpj1NDF ze37H%R$5A|@%D|hd&o`;svj^gs;$Xh@DNLOb~Kigl^q{t`3Idc{4Ct2bcUWT%vwdq zJJcbk>i(nGQLI=ubd3tdW)g|v^_eP(?1$<}2 zt89i)3irwK7d>;21{c*ZQIH;}2aW--1xEKW=xYkLZPphufK z&0hy_MrP~!J(1r6gh!yn)`Vwjo-gJ1zD+iZdza$Xa8;rg`F%7b7#KsyAjUAFQU2N6w-LSeG}p40mM*N`JY-J&!jra#|0sUvo>}+6=$CV zHYc4-44Th#!^00&_pMnT!4oDd94n0TxQdI`JWNIrGk(V&>lQ*Q-a1#Ly?7+B#Z(JZ zUmNX8%_pPef&$RR=QCrx;(xM!`-V_;UhMe+mG>k>cuXuyxhKZS=twfk5VVzbLo;_G zx$_4LjcE#Bx?tQobDRnbtt(-g&htd-A%{+*>Tkd)ak%-$GF50iK@6!JSU@=YJtR`) zuB(^tlXA;K_M+J!+KFmLQzuTHC!b2Y-C8Yma6zKusSWS({c?e|mw_^f4q?&=22I%Q z_%mAMJQ=H<-z|-FZaC}Hq@80) zvazzJefu;#H015={ha&H3a&Wl83W+oTMVPdZ=R@+UoSzSz{_uS zb>BKUt>$X5Fhqovu6b3VgpP0d((tt7Pm8|088!I<#GIw&?=kugw>Jz>R3XcY%Eknk z-365KU4f&={mQNEA-=S)%>Jn0cTV2qDUEt>*I^47+e5 z21_3HMG{cHuEG_|)1hZ^zh3#ctJUOBnJqIqKY;hg_kUa79*eK2a5Ucu`0A%=kwD_^eM=he%!G;GZY_sj>i%eYR;2&q%flN@j(u;UJgmAeMqOk zf`dT!8a(rHLhM0$5L#+NuiYxNmpQ7aNbOsX>4OGy1OS+)C^6FC?^cVC zI<;C88Q&{YON^kS`!K3sGLdG%CGzJgN(`2ABA1>lQCBpQWU8euI}YVZD?Mqay3P$2 z0J;ch*xmAv$P~m?DR;Jz=d`RF<2HA0OOq$1GLAR3NUwf9 zYQ{~>zmdJ={6H+|3WC{5VLxGHf;W+XJD=-yt?0Xt(8@THJLv;=dmQ7z?fE@!5h@*9 z9f>XRXRuA}?m>rFanm)_wTNG3ZB!zMe2g}{=?yi!KfJJt32pMp`h$ZVab7w2frErv zz05L=d*nFs&H&$)7*nW3gUcBDPcA?)1M5}`YMxBN2x(1zBgd#wsYUZ^;5CXVNK^4@ z&xNG0=aRZnO`mvjebT<*lJKJwDS1zutUc?RAB*7O$s7 zgYEk0;?f-#VCvav*aYB2pqOP;}6B-J(O5J5a8d zpZvcst1p-Tp12$B75$*SYH2rx!`nZ6Ls)h1Ya?YIsD7?9@z1|$l$O?n+U*0x-mUPT z<4;xJhVajPTYri-)6%wo#jv`vee?p~X=}eUW#fFDP0@I!d*zaIfyFlR)L&ubyh*XW ztNJ$!1B(rVQ_x)Av?WsI|C*Qi58~!FrC|w8#^l5DM#^dG8<*C)pTQ?A9$tO}7!!7T z?4tmH$?M0*L@!xk@}+Y5H#Cnfe|y4mqvf&$Slk6%y)3;#{zWEaj#2sE)vGN*uf>wZlRuOH)xw>a zbQ;!49rm7q;qe_WKEC`^KD|O)A?9u@)>rx_ciiKO7dfCy`z^cHRVLT3U(fCz+fXr~ zfxE?dn`a=N3r)vgvuZOj0Xf}vUgy*jF~OqjJx;)9+EIVm#>W+>hrHFAH1fC4ALVI( z8u!3}(<(6zB-mgsa)}S@*x9H%7T#XY(d$oPfqaOhAkQWNPzqyI?Sm+*JM4Bel1$om z{E%s+mptPN&Hk-Is^Z~&z{rtUePHubGdQ3;;9GCr$q73NGyva&#ts%O8C$5yuS%dnyJbUsBv!;VosZpb& zo75bJsl|1TL$05qpVKEq_8L|BYYZ-X8(1oHuto9kxynGa8;VDbB{J}k=clk+erX_7( zUobfki0NkXnCTkg^k;;Vk>`PVu6Y}-96ZX5AWv_O3gE_MeIFQ}osHA8&|9yv%g_8K zk32wHo?26xN{7}L*auk@O3E;cGmezF7nBR?MH|or=YRW@yOBGbxYXt|sF37A6WLVI z12VB6ZRZoCg<5D;NN%;SEJ(!$L+-!(sFi1aC%~Q5{`fX~%>>8svCrjjCpzhl0tD@= zUWQJkr$58=^^Jg|3Bo@%ckK~VLpYDd({Uyb^}y|o{vV%8(9Y^FcQ(tm$3-baWda0Z z!sxu*89z=G(STNO{*rhm?P`h_E?;bWRYL(5@InecD!Y^Q(-dzyB!Y~H3yIK$v=v$-BRxIz;DrEJ`pfyD~^Qsd;7#wht8@_1#rl7X!;HksILsLUB zYSX55DWLy`eWpCdRd{ZDUZkeVL!2oh>(l2Vt@Q8T)I{eZ zB2AqIXdQ+!i#gN<5;>-9h0CTk`e^Sh1UYl-EV^CWE;kVxsi>ILSmR4jJ1)AMi9t2? zTD`NgRuAYg$3=syLj3$rU@${eb-_(?!!EX89;(_q=qk7732RL#FQ&t+)`-E&@mjrF z%As7G3ezkMeJA-DW$6wX^{mXYzq4%ZwU6Lk$)+_!MNU7h3~%9dX;kc1lX_A#wSHCZ z0lT+3*4OJKa{2_emtDxM;h`_WrJYvN;QCB2V=>978lO|W%lr^m_Ijgsl=iV?87 zN_fLW!~OB-gO`$8;u9Oh^^Dt0ZMO8u#`=k`M>cki9TK7LtA#uZ6`yen-YHCNo5B^& z6^_o$AEf(vOqWT2ITz};+txZj?vyASNHS68$*^9LciB1m(4DyO{zm9M?A+`bnR$J8{T`xh<+P`wn z`|dH=p-Ai;(PBytDQoT@%gHZO^C>AV6?!B9d{&17OGCWZOBFtL*j@7;0!m7`PM1%+ zb1Fizyse(5dVW{#%o%|FELtmy-1R_@(o;vP@D0GYNhy()Vi_8DwzfFgb#%15uF1pc znX6I)Pkf3H{*yJL*L28Vj7i5VQgHN0 zBQh##ihELtQB8Z?uSvqN@mn>)tH z7t-Z-#mCUM`eEf(>*nfHyOLXG~y;%2QN-0LrDw8)vfXTKSXL zQe&DP`-EQmq!Po_Gdl^7H&@?561DU74Wc_17#J%280kd4X zNa&9*4ZN7%kAT@}%t8^y7N`~1G5q2I`z;a2Kb`=LYsgEr;Ui^TXXiBut*Gbi*8sD@ z@gT{rY&Rn#RNfBH{dbA#oE_4-|7eMPAV|MH;`+7U*P5Fb05~+^j{D+0+tnpGw|#?e z9AKR3Vf0Qa&?DRU50Q&K$}3Nj7HfUiN8MR(uP~6Exwxd{Y`)ENDCA1XbALDAOmbMw z%gXWy3`~=RU77unu*86xnw}0e0ko*wEDrqz5Y&EKA&MGeT4e!nQu!YtaW0nbZy!ku zkrNV+Zvc#Sd+hc83P~_P0A}y8vQd+tGXe8}{M$WpC%tw7qJFegP?P=3|6v~%%K|9R z+P+8Ma&zI0^sBIwtQU-)0PhGfRglszqt9~CsWw- zs934QKSM%>yR0knUa4IH_!TT>j#*b+w)nH}X4Y*jU_yluXf@Wfi+wrpb@R;Jz(!e_ z&#wTbn<5wY%Yfs@7n!;|%=3ef%T4b@w`;0kr80!JNBtN=%Ikez|6Y4?oky@d?}hYTSEZrLIKLZn=Qb0jjSVI(>7ArlSLh~HLN zm20S8m_=1pV?%TE_vrp-}q5Vct8auc~;WC0??UAM+DNBzoI-O(R~@$cm1XASVHOkm-Jh#p-7 zxD8xpIu1}y!6?CbbYPSL-e>t_wazwkF%lbl-B8tPfAhR)iv+s zxlY%(+qiU8i}sbhgqZuCy|mXj$NjrO5>G6tXXu_)!AeK80e_aMMq;ixHNJ_BqtyF=#WW zaI+}Y(+gy)9UYhSY=a3i`S75Q%Y-dm3s7>_u4DC{>Av=!Z5xFJr6N_9(B(_Q+DRjq zo=vM^%~!D^*S2rhd((e8KotOMdf#poyv2q9n#smya3U18A<(lWz9wt$8yCAe=%acp zX+(-8HMk1&(9Lgo4;wAC|tc0YqR;gLNzmDf4;2i>$VAoE_EZVSuX9{6CiYyk^MUVoT&&PttRO|Y-*(eo zlpJGdDBUeef|iDxvT~8L$yaq`uOfo>L_w({VJYW2!6zDsjRVyfG?B2?)Gv^bTl;uo z&)Vom0#;H^4s;rYPIFH8Eaw9q@8UCdqWYfA9FH6Z%NXVQ2V~TKhEEZfQf7B{@{DMQ z9%!S9rS96X`sKk}Ax4VlIZ6X3bD_%q|2a|z|fe;n^P&0Qv0}Dz!77q{f*-POg zdr+4++v3;er1bbNt&I(}Z_fkr2X`lpF3N%NpV&#$waXAafFXZ&|B)H`fQy#%EPpUx zDaFafCD3-J*@4szJ#?cMGE0%jJtf6+tJoP1<$$?9qnYrM^m z%;~-n>h!_Ud3ydw2}gu zCXOepnv=RR&Jx9Uc1LHr{HM$7mlKspeOr>Twd{1p@UwA{x1UGbKl@SwQnp_LY+KtINA|ybklc%28iwnW zPJbK)wtiD5LmnoYV84Aokf!u{MsS0nPz8AJt4Cw@-9yk7!?Mmccj$st^Psc;E}PO( z6<;bi{bP7)hC7h7OV@lh;ePEVEA$iv-8-A6nUNiVWasZ;lrAnZN@sML?}B*`B1kU3+KX{+el)QcSLx zP2lT~zP{O)zNy&_)>Gz7hQhf;DZOM|tJ*q3=6!2ZMcHNP)tv2hl#$}oK|Wp=So=t8 zu?S6}6pPrdgNUbCU;;>Px597dwaEH5`U${drPALFxz=ROH{-k~C zCq^(bx3dtJ<9j%`Uh_-ur;GYQhGMcXY*~P{;}n}gfViBBXSj7)f+l^5FMNG4f(bq7 z5o3p$6%O?h=koJcZ;S@TN!Au($&nV+-H}3+Tkg#@?FPpeM!*O^Z2vQ1Pr|duGTq%> zL2Cu)Kjp7TAIedbpJB!xf{XQDd#wQzBfuYTMwv{;^L8*qw5)?jXQNR6gk@0pc?y7qqMT{0g=KL5B-o;Uh@#{`OhSIMKqa989n}$>5Xs$Z=^i{>PKM^DcoN zO{AB-_83~A07SahOupvw>PeYYt zt7k)mEYUMgt6#&cs%i`0hK`Cs56x7uIDWa@4^_v*Sfx9Gqol4qBy4Wt}eF|oci>|53}LQfDiZd1UZ<*K@1 z5ea20fNVt$(`?(otNwnIq#NM4zJ#r!?6|NgMwK^EiO_Z{ftB=Uvu|Vat7crJ)HwbWrOnrCDAqSvT7!qXK&85`2N-+UyLr;VBwgmBuRa@uP zfOo06gR7*o4AP)*w6HK221EhydIz}mL^M9cm$YAtqG$QYrLMNmsfu;GU_;L_EnG3I zCg+Cg%+e@m$k6u}nNWRq8lm_7N{RIUQHJ(k5PsKLlZ$qKs}LDol8t4{%}`;id|__8 zwiH3nLiFLIc!ZRy*{RCUJ8!x8`*u&n%nIb(N++8=HIjSpN+3xa{jljeU~xiz@Zkj^ zug{m3a|=67|7#h1VjLPU=Ldeo^H0M#ip{Gf{|nMrHmX83jQ_cQ{;;5^W|P|CV^3d- z@PW^s@RF5l_1^ijY;_@tpl6!O6}WUx&l;A0s_5PnQ(m*W$IF2E+W*=!Z;z0?_$yF> z$-%_+nJaQsB*D9>1<2%KK{=~e&B*U^WT(i6bj-6L;%`*zn(PMl*u?OQhd zR=nM$J0S@v>Mo6|Y5v4p?O3iPpgEo8eb9$%HP&z*HG*i0QK~lB#QC|{+ay$F73K}x zSCJD<+u}^W{|EMQE_(vY<-@%*`1$`r<>4~5x@pJ>U$>nHkcn}Kcypdb@31ycssngb zQnE}?oi@gKS{RjAwqcM)gCcI4;$NLUOL17(oQmd=D(VuOgr%yWPVf6hW<=ujbj>X6 z(}&}yM%XW*HrK?kzFR7|ds44U(*N@2Edmu^ZoYxPeD3kUqP#C|^G>H9yXQyyHWy~+ za#WS)LmUnlP%3!<^5jm3sX%x-%A`XwpGF7qPPxWK^ z7i_kmZ;sBRtwG-MksaM48qVxLb>2S1EKEJlm2;c0AXKHE%zMIVgSx+tbJz1;CKmw4 z!pvSbs~;^o-M<KBx>Ml6h4*Bb+1CgzO}}M=LflmJkS=hoa1jpZ zOi{Z;sLr3J9&3`qibFoZD<>k1D8#tndoJ3xUlzZs^_>Nz@?WWCKHM{SN=WskJS zCc=mFj1??VK-S0yRmZiB;|Xg}rQ0lrwtxEiHUN3}I~Gk|vKqrELO990)3GC2`j*J5 zoWmKR)gV36aF9k0=oLH}lj{m5d2w28FD2d`>M#84wb` z^I`yXy6SB<&;J^jd!m!kWBAgODSF}mNq5>IL^tIiIdZ7QM73oQxTI=pWH=Ss57#&! zmODgOKSnv>@A|!92YrloW*1V zCgu%H<<*ZaWxW6kNWqmOW{mNh?J{QQWvT`+s}1w|^Pd3-CP?w<-Ed#C4>rVMltnQo zY>I1h<g-I!pNJ87@~Q)>)-xMAXZu>FJB z8Dw$SYGlP%RpqzBun`@pQ9;b;<665#FI(V8UTHjxj zkEXNUB|kGA`<2@*&Ur_`GT$)mnlQYYRpb=<_38cf;>hPKyY&ftW*_tDb4sGz{BjC^ zq}B!O{;Kbbb4hKhZSGIHAwW|p!s>cD+qrr%mX?ZV4+_Xw*J$fJX6WeK@35B&V6YIs ziWx6Nza3qmfxR&^3K)6ro*vKM@I!LMV>=KnbjB%XYF3q>`FntY-*wWQvEHvi18Ax~ z;$Eiho9>dN?4Eg>VECu(%)p3Dv36S3&R?3B-Tz~O)e2DjEjLgj9qBG`vk!xu!zKA7 z6}$4q)H-=XXyuLEv3bZ|(ZJ0X+O4tSca?Kt*yeq&lKt?8;_a{{OOX@>0f zQyb#^m^r!S=O>Cb7E`Oc3Zfj}rtt?M4fb@4&Vj_-e1W!?ppw8n*%@TKcNzbkXq7l^ z^J0Yas!QlUoTcZ$)3v?{dKLPcCyDv2&uulU5YW{bQr{@Lu6EqubP|0&PTG+}@1YP9 z%uI{U`kZ5nuy&<{t2#GY3BbH@!JI38x8j?q*X` z96&_W6rAU(7MZI_+v{qRY0_p`ZL_k;{JKa$*`yktN$qhY+&G8LfDQA zPa_v4i8Cs-*o^YUiGl6(YF9OW0#>yFv@(=QcGqw^cJ~&=>fR%P`_MONQe#J`StA zI=sK77+);;2VDesRwLaXq+$Apm%-!pO+U*%X^PQrGM>xRI31^YF64w+wcmI;?x zb)$r{W9o_Z#*tM6twl=z!36|B65Pv|vNvxaZ&-Qjnj55Q43!<8xHU}<`R%1>l7$ZV z88E57Z581Za8?+Ej*kgE%n_(Io?QV$p&qt|*i^ApX11G}`K|1!-95?ReUsBlMp*se zv(UIgm4%XXzG}08KF-|{e*Q2q3O3~c7e`x7#VEfdMl=>^Rd3|8|%J7fexj5!MtKJ z97KIm*kHa{CAzPM*p}B?g)z}x_LdD|vP|_DTrO?W#Wz?$e1{>n{ZHb|CW3|)^Gz-+ zH>)RHm;H(Lev!kgJJJQpfZ~{W)7pB+4fFMu=+4BL=-g7p3^PvCv}Wg|Pcb}|YRJ3_ z|0Znwr)#EWeRMpZcQxcq@X@)1rKL?5<*GO9%^?4V0Y&^H86Z|Bz$YW7sIsts{gA`& zwNBzj%563cIRU{YT>EarQyUk};j)9Yl>8~YFTZ%|j4Y2Zb4)~5c+o}}inxok8yWj; zEPHyg93*F+G=0>;#i`*kg~|@77@bi3_OITNr40C=DBB5x1cSI{xFXWwVcy1+iG}sn zCag5su^f@F+Ekd2n>%>;qtDVT0&BDRx!v7m8aIk#>yd9NZuo^8=AU>K_pScdx^7dS z?E@f#fhS=PXz$?dTCXOpkruc4S8mo%S+6-4yyL5fw4hd)7E_+1J6h$4((rz6!Ru^6 zuRJhOA&~y6u&Nww<904$Q;SWxno!E+V+XG5f7}b5P3*{sEc|J0FhSSMvtDbubzN1? za_lg7W{g9NE&6_kC0pdwt1HdgE!v9gO%*I;!VK z1BG9gvz3{zvUTacHDDi>Q)=cp=+9gTDw;2uI^SnL$d;Pn@&YRDeOovnfkjxf?G{&j0u5%*hQzk$FeodH>R%wJAo7M zB|v^n&lH~&DO5}=>Kc}%D|l5;Om6RY)Ec*@H)R{Td)M;?&;2&TtI9m4GrmJc56n0A zCo>b;(D=lwWi~TGrQRDONsN%!agqwmk(0;2$VvW{k@lw*ZJeCTcNF9r%_64!z1rqI zOormjPM6Z+UA#IyT&&e-ZRi4a$;lctdbcN8j{;yA6Q=)e&vxp*OuUFO{>9-fTltt{ z?Ns1Iv9IDn0*_&p!8J2es^JYWeyY4pKKxN4arcl}7#6Txx)6VbHeCidqu%kqFv_om3m>I2rFJ+Np_Bp-Z9!e;+;H3y z1HdrZ>uB-^S9^H7M`KQ#3bQG6i2MG%w=9>Ba`v8B$kXmIB_xIaYHQP1vDp<0mnQ?- z(5iBS?==47olj=(-!Tm9kaO43qVWN(NRGPi&;)P4J}tPFYkyCyLU3#PRVh+dLq3w( z_e9=aYb=Np0(R`9%b`-Hu3=ZOPSmZhISa6f2@?7C{^gpujQkEr<0B>Y4_y+7o4>tJxTjwXtWQ{imf1JbY+UWCrtrw|l0>%J zuhebM3_P3@r7Q(gUPuc8X7=bCRk7>dWFr88ufvt%C!%m>j*ShS05)d@&r%lG!vL+g zD%I&D95$G!;~q4|C(olj*i&r(5#gg3su%UaI;y!UuGDtQMrX^ds2a%6N_FTkAwq-NywMx2b-# zR!3spB5jRa-TY1lX(}ZZ$2_WY`9w6@JU_o#SDXn{LUC7Hd%%(sPlt3*!{GHvCJ}Ts zHL;3K=Qthrhz^^y)xQyW!yCN8cO%xnQErhBK3F@S|4u}KImN9KA!<`fR=^ul#Z8HK zOn60ucU;`UoE9&0hUeq@>n^(hu<|RYp6c&oUhkH||0V4S8}=pFAIAR2mgN#z%9B%7 zfbJ_GRSM&`MHPc>b()TwlO{Nj>SGmjG0N3je(kPrUI3`Lv!@;sV)v zF)l??lC%qIUff~SCUdK_?0#y%zD=8|B_qQ!83=4IgWOs}nM+(>QeEBH-28*k%>2$m zM90D+)Fo}op&Ql?hYL<#koVG7!~ZmRor_%oda-fjXM3`mD98alABD>7d5!03nN35s zlE|b7pqPUUp9Oq1CYzR=$Y%%Sw$2(+r;(S9bSA64zJn7I5`->pk$aZG{3^Ks0DeHqC~I2Dn|gP0J!MDfbOvE#0uYZ>XMSYaF0IbJPpgR_%b{N+sa58;snQE!ojmGSsWAcn-6zJs-bc*_sP=OTV4mskiIwJ8HO9!bzabAYtllg=7?d zAGP=m_c^1aNE@-(Xs>YF>>rK={#kj>s@^lJPfq0sVv(m@g)iFaJ$NUAk*jAqqMgZK zT^lm>Mm@I4&eAs~|?r$X7UOO0pIKUMzpwLDyJrfeHxtHXz2fJ!^s|$H`;lx2|aq^5= zCy<=T!@6!9m#c1iZfz-vPt`5&NX7=w+4RpDb7yUm+JlP)A(cA}ApcjqYj6ey4~o-^ zyJo50Fed%r5&`rh^y@8CY|77g8Xn~XWpPN^%;0ZGmQ-mTo;84&jLpEDOtPSl)-z5g z@r#2qXT38gp-M;X3$a^WF{i&0NT;NWw%uJ1+|huB=+Y!R*m&Q(DXxbmwT=7_Vq5ZOWpQ;^lF3pD$=z!sz^?^pn$A z`vwDf)1CIM3m2h(tjbT;ALNz}Ud0fLI|58W=(}8u!vRsF#{n^*1EqQLxu63#JR%4$ z4vcjbdc^w-ff^t5ZNOTrR@U!z1hfvK(gj#XgSUGRnYUHKZq;(?WC|TC?sncMYgFQe zNeAeQV{)EqW50N-`Lx>;-xqwbhq$OE5uxNz0pQ4{xMel0u4QW^16SlTdE9#(l+kak z`MfHKejx%iX8xFeFcr*C7@EmQ(MIEX7eovSZ>Ye8bk) zb~sI(ePA-JMhME;uH~-klv~x;eo+_;!FG1u9$UG%Xp(PdMN1Bt0ZH09!j#O%Eo(Iq zs7L+_uUD5}wFR#Gw`KOl`ANeG-;#U87qz5V8K0?i|59B5*7jN~t;!8L9F9|~Q>&DH z*7PkP`32$Q`sCyIn63PzjZICRAKexZ^hCT=NKRjT??dJ@$|K1kcV%j}Eug2GJ>A<~=C4}ol&FD}`eZavQ^c(>V*1(e&i;F!%>ZQC>;Zmz~iP}odYAGoc<`p|d zyOg$BGA>ZqGo8ovE3VYwsCJ6EWa@WY{nSw6&sC`W)Vby1*;J!tMw=YQkBcD^bMf(St7!QUnC5z{i6)o)g82pjfL6swTkUz|r^UOs9{>Mh$0txYMu` zvQv~k?Bjlc?IBR zRB(!}fSwFY@}YNgYBTEy1fQzb-63~qAUwolQ_qyN5k9BUDuO;;06_wLNGA$3O?&}^ z&Zd_g_9KfN!MrP_g+la#n)o0~2-sG7id%_a^?dZqInMa*fPbCmx`r83R2Gi}F8IJ$ zXMLSzF*M86eMc6A-6_Tgdl-%c+s)M;KF2zc<~%F$FGdT_c))1pkE=s7Pzmwh=BF;l z!QHdRA)AMY#@$-9?4aW#R%dv@`E2UeALJIuzahI+@nC&M+RO!xU`Ff0S@&q{I4Y*N z1JR|@mecvZJn(yNwH_4eoaZS3{}#MW4xkygBOD+p(Q?gogL9smwSv40UhkWx(oWMl zH$6{2uO#;hrV0)^i~XkWWbprc(3#1&YHi3@;4TywMKI_!Ktb0Fp=Z8IJ(i#3{Ij2} zE)UFgx0>$e8MCdi$Dt>JV)BDe3!xX#i^2WG)(p~I@m{o7eo&twY3HQxe)^^G{N2a* zU^490P9-hb8-)o1*}>=d5ibE(2?z96RG76`c4T2r1AZOC$H(XC2JVx>d}8HbPl}}m z%U6Na`38J4JWnF$ov0`CZT~Yck~_oiHW^D9r*mIjAde{MLd3@5bi%biv%p23D8;pL zG~bt(ljTp%s@@g`#G37v^?f?GaK+YT8iw!5lM0&v4ZFq#dtA$P_u6QU2#{l$H!fyd21J##h2Z!m=o6ncttU*)xmef+jyh z%QLbN^4;~U`EQ50oG}01 zUi`mj)_-@@{|__kHYK1$A{d%`>4?k`fLm5ee_RV7tIuCAtiJ#V(&qnPqet@5GAnPf z+qcN?D*~oYxd5pFelO!Oi@%-=ab|Sdig_Mjy1T`bdw3K2tzQ1xO~5!7>dPjoYin!Y z1Q=UfCY$ah2P?pTMnpt}geV^0(I&H$+zF+vx_9aR%FezoBVMkF2AT!Sro+E|($Tgj zTS#(vl&lF%73PdhAgkKNF10C4@mwNyCmb9!alu#Qt#-@r(4(OW9IP;eX!vxL%xQT8dd0Pcz0+Loym1ec+$hGEluAk{x|f`EIFAOU|opYn{OTn z2~`R}3Eul3?R|Arl-;}bC@QZapro{-grszXN=bKj$IuN!hzLkaOAR8@GYmsFDBaD_ z-Q7L#J@}q;zVF0ut#i&=-+#aT*DPjuW)Q6ZFh~#;Eo0*Kn?SDnWyP&5E>~YVch0+@cfhyo%(fYy2h=LeA|~8e)--2TiGdk^BP4>=?)5=!Y{`b~W>&L} z%S^n|*EMtLh}iS9YKE>;D#|tN{H#y;H`lTvkET>&wVat z^axS3)D>F6*-{zCOUqPCDFnQ0O{zO>Ur!%d9%l0^c+GVqGjr~;WmJ+TZ&3WmEvI+M zZmKkjt=n9iFL}Ydx(3?eC>gR<#<1uu!_H}b+dZsmQb8J|B0Zl>nnTJKhkzHi7M7>& zl0z>-d%hafn(L*_Ldn;xYw(_>SHoj|X)oF5>ZmOB|DJ}!^7R3uPxx6nl_m_T4=cL7H$yN ztcz;jvUWw;%_6}nc_Ve%o)Fh}z0>17J}d6mi&WRG*V^vrocfE)n{|=vHhXX18jYlJ zi?#@#mF&t2zYPuu>Wlx|;n_;$Fh7v<_pkincshfwL0hBVR$K3OvD&dFFUrV*_p9~# zwr6Vwc*h8jcYOC-+GOJL{PnMX&s4jdu5$!L>aqH6>{E+BtJ87c^7=_{t9v+nIH_l~ zd4X2w5KMJ;0iCA2yUvsvZ`;@#$Bi@~Nt9Bf^y9X%n$V0R#WAbZaTlIZe15r%7(Wlu z18;9Qh~;^??C!t=v$xKNz``fZqtv!@(x;VW*T}Tvohsqw+Z@!9|D!jcX{8$0d+xR{ zcZ154DebD>0_a)C=`0|A*sNUS=mAgtpdlw3v6G^B##JqZlc+{P-s1^(*t(iUH}sK( zxz%1IRhP_OU+;qn4KEY&e6H8FKjxR_M`~2S9my~Ps@x2j3*00T$F4 zJ-vqPNcwnjtIt*HhpZ;s9EFoFp>3E7^@(mMZtV!^-T}g|9!sa^p0Mf_gd6TVnTL|MFqj%-KbJPRbH zREL}CBbcXzY?u!c_{Ay(@|nFKS1Ck?W|csO2OZCI%nF;}1D16&DnCbnHI>&9LzKnd9s zD#(8n@D9npNqPBMWYVTsXQW8cRK$qcTC)M(Zlz8TJ57K^@4U^nx&pwx>c(JF&_!(I z33S)b+I|@p1Z|qVIYIWrsB?UHtzmgAArItF637bjVM-@d8Y6 zGQqHT5FVd36vkFCU|HR0FyE_Br&GFJrLbF2-qkvwIH5BCCAg{S1z0Q3QSh0bEU9YK zyvw^|Qp8v1IbiqyI~PD5UKm=YZ^G$aSD7N;B@Jt1i#5-YK(NGTl2K&Eqtvr{`LZA; zrTnmQv^ka(k$ci4|0(hJQzI9UdqQYIa*v)V&%=O`3eQ!O2;WWe^dWX@*)c4v?Vxo= zKX*IkvPW9STp^|Tv}U+&%j0HpP?h>~n5RP}=PllV~ioiV#al&ZeaEilnT+ zS~xVgo|v(muzXC3zJ6O?N{THB$C2cPNx-dwUkVlFUNPdK+i(m#_Rsw;sh}|mzv1>i zh~o*k&(Qqn=>(a<6;DHh$mRR4+3RD4nn;Sxo9-OnO_41sTue#CNPx4v)YDVy0m#)} zeBaIus-cQ8U!rM|TIlq$1C4RVAwBCod=-*X;kOVdcOV73xkBcN7daiP25a{n0S+6n ztTxJAEpKM_p)jnRm_!{>1#X|K^J8mewZ)QN%ihljUD7?S9f7?s{hxAXylR+JO`Jjf zA%Z1IEkbu-ul|mdS9TXqHQZcuiNZ`=2&;zX4Q-xkT(FR|EV${6^ndee$T4;Fq*!;L zFaOGU^TzLaBZHzw1^4Q&{O^r?!jwr6fq=3`z~gZvO+kTsnOKv9=ah4~2JW;N5;%pT zZ(9jVwLUR~taQJ=17gG^Gz5K1pv1c0BKm{ochyc=&5??9_{^s!Wn>tD)u{ zs>XwZ$4QUF=I&_P-r}PS55W}&g1AINbe1%;yzvs4+(IFp-;E!dNk^TelbutDk| zp!TI^X>9!4yzA8CQ62_{N8^%_B&D|v_hqx#j({aVam-X=OJOc+4 zCXu9YT5y9?j8i_4h9JJJxk>pRg-f(8v)%!9g+ERJbd%S3K!z|3;0fQ}eD#0dq4Ksf z2LRdcHch1Y3b=GU-IKMazyL)cUILtB0O{Rc@PANetHj3pIMQMGW(nxKja$h$6KF0& znl|=UwCPP9+tEEj$I9Ag%AO)i>v@KU8=q>*zz8JJUxN%?Zv~BkOKp--IS$6g#)jV& ze1q^odx{;Vn+^o+i-T)xA9^1%4Iz3G(&ckjaXWB>1V58T(DG67k+1{51W=p>FlqXv z=`ALG2-1A8#N((U`LpB78^X!&3&BkKYIY$1J!r{RfiYLQv(C_v1Kv#)yMdjZ?eEoRpg|pYiGhqK6DQx=;9r7uc+AJ5hut; zNf$e6$69~2EISju8b!fJ@x&FPKc%zF7V1)oKBlUhF6%}?ltPmYu2JburB{FihyV9sps`F(;VM-K<#orpqV^cs$@XkNdXy}2xL7a!Vwe{3WZk0(ooUi0 zf8V&cpv()E!yP#5edv9L12Ac-HqXtE*AxH($o-F(O^R~{lZq-EfXG{M?x3ajsnW!7 zZPswcU(7_j==t$Gcj-Y)?BbPQ@HjBa1+iN9Y}zsthAzCFOW?-+FRV_WMQ?Vd+QZ5 z{8vh2m&09%`r3|oTi3HL>1lOGNvFdt;d2(kO8dtrJMFl2PRT=jjG>^Ob z)JRIoa*kZt;u$ibT#A%!575XBesQ;p)~fmYHR(u&Emvuhu0YyK(6 zg9{juH1?^Rt4jfe2B4fYu+v@S_486nA%oArA*4K0>zKyO<3}Iz_-%AiwY_Y<>$z7N zPtr2!K5BK#S4d%}@}am>@i5p_R3fGsf|{Bzet%_}`A#@BHU95$v4UAw+p?>fG}C%v zz7x2~c9j)d*3{|r9>`}7A_}TD<_uM(79t$P)3d)h%NalPcUGQ?VD;T!)@zxMq+HA< zzB#ryIcH{XCPYjgPhHoMMFi+6?d}j8c-M+0jg&yt`}j_(&@HT6a2fY>VUD%2C75mNK=~M z^U$*Y1drKS79=s(68;^!O*cVWie4wDrH_@37UD?8C3 zgEaNFaa)ktuUA3x=|F23z>}iAm+Ffn@)*rFn}aGensXELf!n# zMFTJE-nmw<{$G?k4&_6Hj0~StT$c+8zDan}NvLvcQ4VvY!d;e~8(pxrFI~P}k#Gi$ z&!@{ldFrlvN6`VRQxQAKt(z41fTEPLc5PN;xvc(l+hs>a_JWp$5vV$u0IjA z*Q10aA1T7dy!}PK8kU1gkLNb+PXYdx$8m{kR%9&J&A^??mjxA5nfiRbFf(4WznZsd zz~1+RqC>W#EzYh&5`;(IeD(6u(25>;^TV?%ZCpjCH}dCWjhCZ2n#y9*wB2Tq!E z@=rw$MDhh!Xp1xa%(lSxnEjclA>ZISGg#XID0=lp2(^zE2E)$$bCDh=xXd0~$GbY2 z11(o;psDD0(MCM+Xo1uLWhptfkaZ66n2z;UQ^D6=9mR4S^y(JVCh2M zK#}flIu~fI3&v!{%;1<4fMGI`Duke*&bj{3o%Vic;9uY=g;T!r!C4N}zVaw@w}Iq~ zb)jv;Ns{EsPC@?frA`)>cz8FCg$fz2T(@I~-HF&bn7D$Z`6^K=H)9mncYu`k=x#qn z;hhKH>DDbd^%V8y2qTc0_oT~T>X(NZlBjYN#^f9R+)(5aoHYNz(PTOI!&(CPIi zmWYKiNsD<&uWo%xsGMc_Aa%}Gl7Z^VQ)Cgpq+)L_n-MEhDOqutDg1n_7oLTsc|_58 zV8ofcb@D0C0O!R)v(MsTyxm0U$mVg#@-Lh6GqjqkD>fI`@j>vLX?m*moMNT=R{~Rx zbhl+ysUMqbIu`og*R$8bbq7+F=)I_3y#k@^Cird{PyLy_ub1{DnEevE)1C0B47zJOa~(p=-9d-EK5Q#w{S+UfYrBi^K1#wE=elF8 z*T8!=-@kn56Q#FH!s~2f`2I_3hdPC|&`XH#L7-fI_On)j87xOeqd9*E{^|F!64WLO zlmvu?muNyyPn46rLf=Sq^!G~K&Mrnl=8S+K zA9$aU6NM>hYYX!wkvx0$WZYT5(C1AwZcxwz@e?|gR|2|q6I?g)2M33TKu(byAa-Hj z^ZHjz4!v~EoL>HVf1vpX!aXf`Ky67rH~=ZIJ+yGZKL`l3Gw9F^G&Kf3$b+$2^z=F8 zqM<8knlH3gov#mh>D!bMc>R`W2w!u5V`Fqh@Dm{cZ(G|-XM2kxqA_tBUA<1{1iAD3 zqusTawL`FC%t8wtSaXuY$SS@|37?O)pU@xh%l^tv@l zX2%|neCh`w4;zbRw_U0yCs>x3m$^7O+x;IrxMMvS6H3<%-CYy`yh+Fe#1M*esh&)maWph$Lkhr;RxHav z)M2Pd9sPkRp(hqOS)M>MIylJgSYgUm^}TUqMmWtE)p;~IOZCLv-id#$S8Q$lnYa78 zhUwj`W65AK?)_*e?rij_2XIf-%TU0MxJCDF`o^5QB?eL-XRSX(>?HZ69=1fGf zqF;i8Z?QK3@`n-=0W8eD|g-b4{bBS zk@N?BTyCCsXkNtUGmy?w=FqUQUHR8sz-g&2tt_nyLs|dv#vPa?`$e_x&dCXQo#z?3 ze*O_-u~~>16Swf8j4+{lL3z2|hPrZ9N1`=&vn5RtAR#=Gla;NU4g}V2rqV_uh>~9m z{dFB>UJ~5&l24%hWqeOU9Y+>SPwoV5GZZwsiefDfLW)#b+?qTOsMG z-QD^kvc5||jeu#dZgqKe6$_-v$89&|73KaF6U6iosB`}g$nbOLGcI<{tr|7Hh+bo(;4?;N54uxm6uudbzULt7?1U<^B( zd_LYWxjo$KKi#+}gu>O%P-#lOqAFiHR^Lv}YHJJh+)O0DP1DC@m6RrXX zF~xD=`6d|A4)(n8YztERM~&?01X~8Ia?B7V?2#|9T2myz=kFy5XPlgb$Bom##azr0K1r`0yqK)Z| z`IMByqxP|C=k}vUR(5toxJ~Wt?R|c}xd>K8W#x+wg&kHVrqm<_2qYNT5$xQ0&Hk85 znHkY~3LDzj?n`KBXi!Jj0$eSCwO#Eoc6jIGW!tUuOwnUO7)Sc$C8jwgE)Gtwpl_vx zF-9Z$EkF_my+r{QRu+`RL_nzurVs2o1!+FpP>jApR@G+FeFw<~Nk)L9Pqej2<(FSv zJZQ|Op?Y?@GtCGxJg)9i`Hp>GZIZhZ0p;U>^^P>@SJ}2bNLL#$*2|f(r;uN<1bQI< z8a6v)xGT(){ZQsO(nrTca+a6p$3w_ARA{r1Qh1DVpxK8Ld{p!Dd!)IG1a-CUC_T)ApBSOc&p`D%xlr#4h#4bm`WnufJJry4c(K~eZoEFy* zIVeh1f4wM5+!pRu;B`C=*plpxd;{3vauQQBGn6FmVWEY3uot%=ZJ%Wjq3LjcOjonQ z)g)eE_7&}WJ>p*X&&zaVE$YZ~q*u+CBRAcxwe)uS^DNgClsa$xlI8Al7=n0XBcGC2-8M<5l|$&u&w?FL@2F5+lk} z*{Y2L-AxRfHIW2^PdEv*y{NMyQo^W-72G={WI8T-M%D{sw~N=93C=ULKKE9Xy7uPd zuiD&7(TX(Jk@e-mCfnDl6K zEf!Wmvv%0#W@wBaU1TjJpU2#7C8Z=H^!2#k&RAZ7bkAsynYw6wgCkfxf3X>oQ!RE} z-eU$hC*mgkWBnvu11i?a_7E#wpr}c}jqAIO$9xH^ke+!5^jx|8e196^7GE$eYIUQ6 zsc+e>Po4q>M$}-|0#+cPSHGHtF?3lgtccq3*Np&Vm#SIMHp1fV^;c`ui+j0fG6(1f zAF`o$N?pp|{l%5K$F)0I(~+mi;EwK8!KP-<9!E7C?fR{58cgYI=lkr;`flHxrOlpC zYmkOLa^hmZwE-3ic*DMm=JHh6*F7G+$(o)sl2IZ#>xDk9&<--r2&1}Mk_?_$I#pTk zA4lEHWA2`0MNqqJ9PeJw1=Kf3KrKXzSLdnFXT*90U+=)4uz z4g$R5mv`jWi5f1H;eC!?OsEw;$qM=1!yL&A`~_Y2zLg(acg8$2m8?{@8>+bk6k$I* z3F}73UWVcf_e@-6zs5FWgh_<$u4^Ak@^#kmXI1r1}#j_V#IYw2lj9v7+ov z<=1-+WekCne%o2ehc|l@lBk9!?c--3X=g=T3=lxQSNyf-QJ}%}x{OQRc^cKRE;fzz zmXHNxkn7UmOf^7g`t+B`)!9NzKX(PIs#HCEB+u>KW`X;9MqYRobe3_XBo)4P}ADhLlV) z1mBF?9}O>28Gn!g(8kly(9j%k!@@;Xzq{T&eN9j~k(yeSiAHa#4cB=}y7p#CO5x0e zxJ*k-vI;itJ>%?!e1@FYoa`geVS>vZu-Wv?U671|qna&?Qq9a}&9Re8X5~7WAoJk$ z;cnT@)WQ*pQ|NlQ-atyS9-{2qMvO)7v%RYj*}dU8a5*IgTLT`P& z=PV8?i|2YjxD8L|bSGDT>tW=dr*D^~YZVg`szQti3SvpO#(D_pIC@G)u_*vSf-Q5m zw^|e@7K-U5YPzgKaE=4f=z|!Q^`Y-tr{8{er`_qqJjk<&V-0E1 znS0$oU;a`AT$8tc5FIdtYb*p0ukf_9%k1>AWbJ}r6viDHCfaa z7J0v9b?;uRQlk@{Xnvkey;EaNYy z+|J6%x0szF3aRAY>s5ZIBSHhn=)E#&1!`2B*eNoTqHp_rP~+5;XP5t?VS+k&0g$>6 zjU2ZsT$+SrG_?WSbV!cZ_52+5Xtk#y@U;7I(wRnOPwKe|Z@5W#qCOj>r(jFZ9%`e9 zTEMeK+(b1g8SVRRons4YUBf*W7RhEjHf#K@vCi`sZpLoZcanD=f*8A(OjnN9qwK7J zlSIsCi9D1587WzrKVWk`=C&3C`e zKrv&aJ9ACLN_vzaK^I0b0I>scqe1G=)Z~(7&4G$uFA(Ev%Kv$rwW1jZb=r5v=gyukkf^VG=&<1vN^Z9M* z3bQB4GPVBL2YMy%4}AGg&WBSAfH=m3nEG~o7Lw1AC^8`zXtOpuyxU}*n6J@;R80VU&8 zb`=AbKv5I|{Em1bVuFQ{5rE_P;?x0gBLh$#Eh23%w)eQz7J^n9xf(&wffwH~fhY%P z|7Gp?_KkncBK@>~lFjNp57c*o)(Civg03eU(0{!10sZ4VAgBb||Khs;AJ~Zh@Q}j) z_09jYlYb0v{s-ql{&T2r*TX+vPXC-y|C~|41or;vYY0zJHUYb&Lw%IbcY~qtYmo zax`GJc^=RKleH%K^OYWNf!d+%h`yv;bY_0PwvCEx?1Y%t0p%wx==irptp!8(-8*B3 zj+b5J`*V99+EauiV8%L6{Ae-rhYvbSJisV!kBI1j{o&Nt|TBPO%i(m0=SNA|mB;GAMu7L^OnZLd!`q*)jVr_A!tI0O2gjB^O z8N-hFP?c~R`4YbP@F{W#?0#>L8MlfcTY21iH~o$hbYvMxD+$4O*FpEFgqL4=j~G6o zcHYI1qm`(hq&tYgKiuy6t_eGrpxHgqkiFm1BF!!ct?et@3S|4nbU#7$MC7{}8^vu$ z+Fvv@Ds3y;+4E>0f(7%OfAL9sk=XK*N6@z#NA-A3j#|518B?<&n+LY^F&v;hi`)fG zCa9cvi}ISVI=hq);W)T~w1XvNe-1)zKbA%e=xb_kDC3z#YwcQA=XB+ZTO8N=d>1SM zjvo9;Yik#!CiV&A*M8hqzNS!1AoqDB?c)6Kn%KsLPATz)v|e`e*ay==>Kk zIhulIfjdb(*y>RgMbBrAxL41wmgQ~P`6yE-Y$M%&YEFxD%k?-D)`aIFGp?i8k#;^Q z#n3HB%jhC&C&CHk`GF9@;7KSYw!+lBg>`wgbr^Yqstdi(%SaudK0VT59UfoZ_%0dveEUa@Zr7cyeSD8|?$;)+Bh`)%zUwr^%h^u$ z&Yg%#v9BI|eyXLUqyL8ME27gtJI=dB>6<(a2Pra`y849>@5 z4obCGK@xNb!oE?6w+KhcU2AQ*POXz+26U8l>>mH+%4Eyzt`&|VrO;vMDqzYR@X)ui z8YzDdE}x#u-RGxJQK?uVE_9qZY?->9SVbQ~2Luhe*`DdG2qHZ^AG9o%5_Frs52%_l zLCS4+*p$T+n+A7tByV=5E@yXZzHi?uo5`YgAKOf0Z1hw&kh2YmfpQWFKx%@+m%+O8 zCxrt`!=oqfA^N4PUhwbmF+C#YVP|o5nwEBt(tiGUggxgpya71; z5jetmbVU!1Pr{bKKI&B>G$I@6|5Mhu_QrbFgTY?Vq|kLWC3yIAb|lVGU=Nh*ejvv* zK|xat<$B#9RSK74Z_mg;Mm_S%sYaaS(UEu|p>jmkjM9lrV28`A{zgD@l zZQ-x%f*Z)?sQiI5kM7NbB*~W#Tht6Yntv;G-pXY`lrTXW`x(t73+|=mkPh+G&eVZV zCdjV?#z-ym2|R1+9b~oah8TOF5sx+gfQLk@Pzf{K4M#zYuI0l-(Tr8GSZT<)g!Wqy z_jq_-^iJfRte^GO8Nw7;xVn8Aw30{@b}ufsy3{nfn~tCCDvM^unZL$VbI2lMV< znwEb_w)nQrm(<&BV^>V1hHy7eXEb-#u7jS~Q&?Ja*jm3U>X1F@tHK&TVEicizD8Kl zJUV67TT;b<-!d<6;o>L%)KJ#Xp%O@MZO@Ge#C>L%dvNuRZiVSXGJ_|R&oEwme#H@+ zmp7fCwwed`*}j|=R#E8_E=!R;`1(YiYVI-yR&xB|n^a>A5`_QZ%-1|S6scpqj)Es> zPsdOU6^(zRN3JMZ(7bL{8SVd3xH5vBz`I!C>^XU9VX3L4s*hmA$#@+}Y|}s{#{{=C zeH7ZrcU3ILPeHNU`KP-25z)PQJ?7hBzi~?IXn*q@0oGv_^~E#U#7QBVGMYW%H@(}l z_h}FIJXMIOGqf4X)#B-f`Ry@|`vVKV5x1EU7VmdhSb5(#c&pCp^RO;kLW@60Tn{04 zR+B~-3tuLE@HBFi5#k%Om9NF+XUc3RZzE%*YS;~38QZ+sa$KX-duyY2ECBUxx2rC< z;}{S8mc`AbCFN1^y71Bs-luZ^OGX7y7;lmZn@sbsj}Eu6@%=RrX%WHv$4vp$oo14f zOc5rxsf|~|lTNG^U2jgjX#CsA)Ob71y-T-i*iFHO*%}A6`}8`5D8{P8#$Cdo*vV#c znb_3dJj%}mFgwtf5__kb{Y+R%*MO19;rdPP`a$QXCBNKPVy)bDh4Z{--3lEoafh$x zuY*$;Smg(dvn$JgIH<6P_6`KoCNdSSmQ*cBYk%WFm#D%`ZGK7~=L@oJC4 ze!%m--TaZRfleEd`9jVUE~=swWfrml$F0Fu{wC(Gqx3R7Y7&}}&XIQEz11R-qPjt` zeHRgfpAMK>dPwK%_I19KII_{K!GE<3X#aphU1VAkMTqEw%Dv+23TJ1@xa6xhTehj3 z^&e##2(6vhAh=00bFwr<3O#&854}@I3~CzydYkAB^<&#%T#1vo@b~+95!(^Xyw)Ma z2o3szn$!8BNxqrP!Pkhk+;WJre3cVnvt{~YqR>f1*i5Ucu(u7V5rp949?!#RAnBt8 z<&bML){CS|7AnEFkK&iiTF~VWWb%NTqg0Ir3v<@>v|oJeqH95?>{X7L(Uh7T zQ3*|Gsk}f<^5%qkn>x3dvaP^kg^)mNuAuf9{ZAQRo}NNfn$|S6c7oZ)gJ)TLHln$H zylW3EX4q5d`xAtni(<|1`MW*_FUXBNW_?tcmwrl!=v?!%e0^#oXSLTUALW%2r8ktrhnU5Je zV_SK)K|{3!i`&s|t2NG>;g-T`Ov|Q`C;X$sbB3q6CO(0;{BWRs#9Yayn6v+a3QVAZ zW;{e<%asgV{_)TSdBjn^!~BCOfl5EO{oh~@1Ud`){qzFevn>o2w>19P4D1o`(whRs>4i1ci+ zpxotC`^d|axMOpJtI~M9R^qTob>GVskGHu6`ysz2?EEuzGkt1jhb?Gue=&5mH0NrQ zX$~I`JZ^KukyF}P?%U-P(^x&W_4=Lx4VXmDL-q{A0-_USbifLxy*55qCKXo7?!ix0 zQgrxouJ%<>)pE%s^|Q%0Z}&O|!>DyGD^Z+NmNNadF|vwHk=B8jEB-_z%vmyEtpTnw zyUkL*B0JT5-5+0Lt4FHcrn4;W+d^f4+nXAW!zn7d+FB0Mgj8@Sazh&?M*aMT-q6z~ zFcUm0Bl0DpQ%77`Rb&xB3tJGC%)MXOe%XCPi#lC;&2$_A9^SW>>Q7AA zM#)$k+{!AI`t2$K@9akGK=+R%FNj`lXIhuom%F=3b^chsiV}h45YkAX&%mw4LCY0> z!{4sLBE)yCIa?>|Hm={<^4e5zGU_wPUlql~-7K$eb%@Li_hMRq832#yBudzxdH6EZ zMdSw)axI0+*!aA8!{lhSzL3mElcFOXR?4+8x=Ar|!tw;~d^wz2F=*5Z>Q=|a<}G;n zDt1Y4dL^4_d771Vg)nhJY?QK;v`4;qXGsHhAgg=%s-UCxs$GwwwdC@GQL58O9LnZJ zcfC`Ce`g@jMSoNQG8Ox25W$(cq-^6s`m9J$Ckl*I4oC7I$M!b5Vf;!@OC;Uz+|n2A zp;1rI!AzGwi-5PR^gi`0rrh18IN8?95Jp%@*;|y!FP0YQX$7Z66aOeT2+lH{my&+U zhf>v{qr1L;xb6ymd?ah4JqeWmcJ?~-6Y-4 z%*<{W`L$5#UAkf8y;w9gka?80Tho3emLOc@Vr^M`V6AJ)ANiFT zo-MWbeTpk*>$ho%iAVat%ye}RlfwPvFjoIM@+)ZUUk^zkRU|IwrowbCj5E?R(RUz{tNavEw$bze;l zVa~pn>FJ`m-7k|xxQoC0>2N2AdN6WIT0K%w@HAf3 z<>|wY&8@?NrnPBQRL7$c1cio2!;ZKXa<)={suEd{uB2P)W_|ctNE5_7CvA+_x4EsOzJb(FR@a%(;rcwegt!ZA- zHn8!1dl^}c{o`c9N3TKw7nh#R^aR)jDh&MEq07iC0|oubhzh^S40>)N1v9=~QvY!6 zm-d$7XZT`39Y~IWKRNc^u6n8aql9N|MrP4jnAVGx)Y8VXhI;Rv1-mryR`caXN<#!V zQ%%>D^Lb=V9$(~}#m=lhWbVFHKb(3`(6aRgPlwF1+E&0Pt~RypW6v%YmjzX?CL`PQEb-KYUK}kpdu4ymT3!f+CAd#M2+{n) zFQFwSCcZS0nuLTxrgRkRg7ek5_QiaZO=$eL=E`y}Fi zh+Afx8^`lNko2hZ%vkyr#$qHT|MBk+RoW&uvCt39&4*+PWA8jqo2%UV>vtEv5qnuX zzq?crj+wk4AOnj_$ZOSK?yJ}lno#8Mmy%dipv7=PYgj74Jg2;d2Gy)synXpjC(|F; zFZ70XmmU3Dw_1L+!3g`*(+lHf;XHH3AA=@uDBj*Hhndq;$ZzLKF(RlYAofzW3TFATp5V?sAG|^&VE4w!Qu3cM^cYVb>x=~&;{ma2LT;Zxv z&NA8pofJkc8O$O+J*I)H6gMLFc#+uuV`cgJ-Xn$eYN;^xRX?ig=S>jNt!tQAFPS(p z$q?8)#Km0@8MHHRBA#fpf1ps>=e4k0@whSnd{MjO`2tTF%!-Qny=q@SJkNT3C>T!g zl9g7hL?@4O7o{o@8RF9XT_}0s+e$T;$j_?pntV0ImgKu5;V!;f)%&$FHyJ}eVDV8Y z6X(doh@c7X*Ye@#Rbk5EG=B9NJlZ`CiUoNc7wa>;&+#`yzFmGc+);^C-`&A?o>plV z<>e8C3 zLMm_Cs0epyOZ6|??723iuYNn_y*fP=*;2T~{_AErftgEfY$99t#|Uocv=^P$ly|(y zWYNUCNfKA=jM8J{@zU-6OQ>E6YA_*G2a&)$lu@SwbGPtzdcBcd@Ac)=W>u<&3Bl{| z#K3#a=@>myzE3C;oO5tNhhc$mSYwIXYOV$Umg(NhWkN^EU7lf6&L3hO88*eWCsOfld8qdWjkMjD1dw38IHEC3~`F z_8<4R2M8o9!Kf=k=U<&w-htOkksxmgkQduY@IF2}J=um_J;;bx#>jRYQ4WNF`StQ05gPjvwm)*1V5c8&_b|-i^Klls5Y#oLPdy- z_t@Z_o;Ee1YX#r3lzE~orvM9$0`0?xHe;DvvG1_%jWS-?Ss$+#n6V;nLI{h8pI83b z48*#MWq-v#dx3oZEZ~KF)2by~jlOd7Ww7(jL(K8csOj z6k8)@p5o6WF#&kUv*AnWdr|(xnYTz+ciH>?U&jHT7S61nYzVxUse*664=*lNKhMqR zVf#(b4n!&T1QLH|sX=o}jjUU@IYQtfnICcfWW<4l;iDTM#c*?TU2}CCu0Obqv@t+C XA4A$HAF`U=eppIeUaauF;ivxtuLtNB diff --git a/viewer-ui/visual/snapshots/linux/desktop-project-tabs.png b/viewer-ui/visual/snapshots/linux/desktop-project-tabs.png index f619c88470ffc1e57a51549b5e52be91eb80b1a7..21bc24f60463be997f1c9189a8336a65ca5c99a4 100644 GIT binary patch literal 29779 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 ZjssDklWupK9 diff --git a/viewer-ui/visual/snapshots/linux/diff-skeleton.png b/viewer-ui/visual/snapshots/linux/diff-skeleton.png index e78ccf43d1f073b873dfc17adcec6e34a9305fef..58a81610aa313b25819606bb4f262601f56d5a99 100644 GIT binary patch delta 21156 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 ic>n+a21!IgR09Ck&{HyDmFElq0000}s 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 Eg4_&T1poj5 diff --git a/viewer-ui/visual/snapshots/linux/file-skeleton.png b/viewer-ui/visual/snapshots/linux/file-skeleton.png index 7b78e11c537d8cee85ddfcabc6e5c20e8ef3cb4f..a64b95417b060e6e811dc7886172fb0ca7c2f2a2 100644 GIT binary patch literal 26731 zcmeFZcU)83wl*9@#VsIPQ9&uOY(S+7(%WXEqS8b<7>YEhL0W*2L_xp?s0fjcD1;uV z0Rn`gB3*h-LXqA}5+Edb7w)sq-RIs@?)%;Q&-Z)JKS0747zz$%Oo&)k-;5eLU|<31i!s0`cmen zm-|KPInG^rWtMTW#OgC93m5p{^TbJAYq%%H97nN%jX=sNOb;B3utfFu#A3_v%fk>{ zsV=(EV@{!<+@#>X|Iy4}pQqpZ^{m!eHG^YcU*6nJ`Q^!>pvQLmW*ASfKRVAT!Z6t&j$`I~ZW%llq(^E-E*6MtJeE;6W2Mul6y~i!X(IMku2Sm2j z72#gvzPjMRiGqIIy6$zhdQ#PsXlPmO39ctgtpwV(GMSTK=IMGRj}+6*rwijuEGr#3 zbk{_ACAE^mGfMf^(wO*5OYXFpNW5gWjkpFosO~5G_3syXMU$zmwoEntGbc{)*&w$~ zpMDw-OY!vdbno9~4!Zc&AK-%o48@Ia_RMWEXeiZW5AU{vXFx254q?P;hug_Yw#KhR zs&Yr1T}o)D6uOYSp4F&J8vstZH8<^^1h$<>ANL)d!Z4d={8(I-fqe7zMA2E zFL0$;nmLBSh4&a>%-UJ&XG@x;Dm^;*yi)v!dYi9lF{+x7t5MKSTV}_v52y)pwd(^o z{n3xBd~|HBXaAJQ(;ZX7*787Y(Q0Ny7g*xDVRo6V0S!A#uP;N9T46RdSY9=5x`(u@kJd-x~Y9)t2H?SKLGzWklLqeD za93i)2F4(TqR3J-r8PsP$jJL8pR!-S&Uo!NKCW}l1$}p83QF?#bmiAigI`3fdD^x~ zNl5DVorp+SdI?ItP`T5e1W!id4olM~$P8k;eHCeSv`64s2VrYin%VQ|btj7IZb%@i z>vbB787A$9%NdU-76wbHQzmj0cPZopl(e1s$)(G<)ne=}gWQ?GUkbyDtFYDuYJJu| zH5ekPs(B+|h>Fm0gH$Wo0>|FmPo+7=7y~^$DZw(8%ko^UBYcYc+0R&N_)<5oB66#9 zb0sYBW3}}7-Vb3{jiwf@o#P{)%R-DH*2cC;%OU47<9wlnn%wMwo0Q`8E0qCV8F5g< z$>pIQo&f3GxA4}*XX`B)-JceNXeL=bWx9N7y&6M~Lz@Y{GaV8E7xK8Y=)=hF15mzNi*T@f|iXFdQ1TwTc4$Nc>KRI5+xVtTc9 z^OfOqQQ|fhCH5{=HQ)0uI<1-bGAm~c582qRwfPDd7p#;fo4h6YS+we{RnDB?kQYz2 ze2^{z0*Tc^@Bucy?U9Y|-slK#4>1{%nVFe#&Uektamq^0LaHW;!j`1|{^8Nl
X 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 literal 26728 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 Rtd)VzdHJ0t|M&Mt{|_JIB6a`( delta 4982 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 L&QzVga_|2E^{DGDAqB&}uWwEK@)b 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 literal 24522 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 From 24e7700bab475fb82fcff94736b7b15927f84c7a Mon Sep 17 00:00:00 2001 From: code0xff Date: Fri, 30 Oct 2026 09:56:02 +0900 Subject: [PATCH 10/13] fix(viewer): draw header and tab icons at the terminal toolbar's 16px Settings, sign-out and tab-close icons were pinned to 14px, so they looked smaller than the terminal toolbar's icons in the same 24px buttons. They now use the icons' default size. The `open` button's plus stays at 14px, sized to its text. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry --- .../{index-BSV4RY-E.js => index-Bxl3aB0i.js} | 2 +- viewer-ui/dist/index.html | 2 +- .../components/repository/ProjectStrip.tsx | 2 +- viewer-ui/src/components/shell/Header.tsx | 2 +- .../src/components/shell/SettingsMenu.tsx | 2 +- .../snapshots/linux/desktop-project-tabs.png | Bin 29779 -> 29959 bytes .../visual/snapshots/linux/diff-skeleton.png | Bin 26498 -> 26590 bytes .../visual/snapshots/linux/file-skeleton.png | Bin 26731 -> 26822 bytes .../snapshots/linux/maximized-file-pane.png | Bin 19981 -> 20070 bytes .../linux/unavailable-repository.png | Bin 24520 -> 24614 bytes 10 files changed, 5 insertions(+), 5 deletions(-) rename viewer-ui/dist/assets/{index-BSV4RY-E.js => index-Bxl3aB0i.js} (91%) diff --git a/viewer-ui/dist/assets/index-BSV4RY-E.js b/viewer-ui/dist/assets/index-Bxl3aB0i.js similarity index 91% rename from viewer-ui/dist/assets/index-BSV4RY-E.js rename to viewer-ui/dist/assets/index-Bxl3aB0i.js index 813e6f4a..cff2c6cf 100644 --- a/viewer-ui/dist/assets/index-BSV4RY-E.js +++ b/viewer-ui/dist/assets/index-Bxl3aB0i.js @@ -7,5 +7,5 @@ import{n as e,t}from"./jsx-runtime-EIAPxkjE.js";import{t as n}from"./react-BPk_w `+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Le=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Ie(n):``}function ze(e,t){switch(e.tag){case 26:case 27:case 5:return Ie(e.type);case 16:return Ie(`Lazy`);case 13:return e.child!==t&&t!==null?Ie(`Suspense Fallback`):Ie(`Suspense`);case 19:return Ie(`SuspenseList`);case 0:case 15:return Re(e.type,!1);case 11:return Re(e.type.render,!1);case 1:return Re(e.type,!0);case 31:return Ie(`Activity`);case 30:return Ie(`ViewTransition`);default:return``}}function Be(e){try{var t=``,n=null;do t+=ze(e,n),n=e,e=e.return;while(e);return t}catch(e){return` Error generating stack: `+e.message+` `+e.stack}}var Ve=Object.prototype.hasOwnProperty,He=t.unstable_scheduleCallback,Ue=t.unstable_cancelCallback,We=t.unstable_shouldYield,Ge=t.unstable_requestPaint,Ke=t.unstable_now,qe=t.unstable_getCurrentPriorityLevel,Je=t.unstable_ImmediatePriority,Ye=t.unstable_UserBlockingPriority,Xe=t.unstable_NormalPriority,Ze=t.unstable_LowPriority,Qe=t.unstable_IdlePriority,$e=t.log,et=t.unstable_setDisableYieldValue,tt=null,nt=null;function rt(e){if(typeof $e==`function`&&et(e),nt&&typeof nt.setStrictMode==`function`)try{nt.setStrictMode(tt,e)}catch{}}var it=Math.clz32?Math.clz32:st,at=Math.log,ot=Math.LN2;function st(e){return e>>>=0,e===0?32:31-(at(e)/ot|0)|0}var ct=256,lt=262144,ut=4194304;function dt(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&-e;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function ft(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=dt(n))):i=dt(o):i=dt(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=dt(n))):i=dt(o)):i=dt(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function pt(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function mt(e,t){t&8&&(t|=t&32);var n=e.entangledLanes;if(n!==0)for(e=e.entanglements,n&=t;0n;n++)t.push(e);return t}function vt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function yt(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0=vr),xr=` `,Sr=!1;function Cr(e,t){switch(e){case`keyup`:return gr.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function wr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var Tr=!1;function Er(e,t){switch(e){case`compositionend`:return wr(t);case`keypress`:return t.which===32?(Sr=!0,xr):null;case`textInput`:return e=t.data,e===xr&&Sr?null:e;default:return null}}function Dr(e,t){if(Tr)return e===`compositionend`||!_r&&Cr(e,t)?(e=zn(),Rn=Ln=In=null,Tr=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Xr(n)}}function Qr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Qr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function $r(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Yr(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Yr(e.document)}return t}function ei(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var ti=Nn&&`documentMode`in document&&11>=document.documentMode,ni=null,ri=null,ii=null,ai=!1;function oi(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ai||ni==null||ni!==Yr(r)||(r=ni,`selectionStart`in r&&ei(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),ii&&Jr(ii,r)||(ii=r,r=Jf(ri,`onSelect`),0>=o,i-=o,na=1<<32-it(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),F&&ia(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(i,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(i,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(i,h),F&&ia(i,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(i,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return F&&ia(i,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,i,g,v.value,l),v!==null&&(e&&(_=v.alternate,_!==null&&h.delete(_.key===null?g:_.key)),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(i,e)}),F&&ia(i,g),u}function _(e,r,o,c){if(typeof o==`object`&&o&&o.type===re&&o.key===null&&o.props.ref===void 0&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case te:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===re){if(r.tag===7){n(e,r.sibling),c=i(r,o.props.children),po(c,o),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===de&&ao(l)===r.type){n(e,r.sibling),c=i(r,o.props),po(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===re?(c=Ui(o.props.children,e.mode,c,o.key),po(c,o),c.return=e,e=c):(c=Hi(o.type,o.key,o.props,null,e.mode,c),po(c,o),c.return=e,e=c)}return s(e);case ne:a:{for(l=o.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=i(r,o.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=Ki(o,e.mode,c),c.return=e,e=c}return s(e);case de:return o=ao(o),_(e,r,o,c)}if(Se(o))return h(e,r,o,c);if(ye(o)){if(l=ye(o),typeof l!=`function`)throw Error(a(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return _(e,r,fo(o),c);if(o.$$typeof===se)return _(e,r,ja(e,o),c);mo(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=i(r,o),c.return=e,e=c):(n(e,r),c=Wi(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{uo=0;var i=_(e,t,n,r);return lo=null,i}catch(t){if(t===$a||t===to)throw t;var a=Ri(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var go=ho(!0),_o=ho(!1),vo=!1;function yo(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function bo(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function xo(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function So(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,W&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=Fi(e),Pi(e,null,n),t}return ji(e,r,t,n),Fi(e)}function Co(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,xt(e,n)}}function wo(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n}else e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var To=!1;function Eo(){if(To){var e=Wa;if(e!==null)throw e}}function Do(e,t,n,r){To=!1;var i=e.updateQueue;vo=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(q&f)===f:(r&f)===f){f!==0&&f===Ua&&(To=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,h=s;f=t;var g=n;switch(h.tag){case 1:if(m=h.payload,typeof m==`function`){d=m.call(g,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=h.payload,f=typeof m==`function`?m.call(g,d,f):m,f==null)break a;d=T({},d,f);break a;case 2:vo=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),sd|=o,e.lanes=o,e.memoizedState=d}}function Oo(e,t){if(typeof e!=`function`)throw Error(a(191,e));e.call(t)}function ko(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=D.T,s={};s.types=o===null?null:o.types,D.T=s,pc(e,!1,t,n);try{var c=i(),l=D.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?fc(e,t,qa(c,r),jd(e)):fc(e,t,r,jd(e))}catch(n){fc(e,t,{then:function(){},status:`rejected`,reason:n},jd())}finally{O.p=a,o!==null&&s.types!==null&&(o.types=s.types),D.T=o}}function nc(){}function rc(e,t,n,r){if(e.tag!==5)throw Error(a(476));var i=ic(e).queue;tc(e,i,t,Ce,n===null?nc:function(){return ac(e),n(r)})}function ic(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:Ce,baseState:Ce,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ms,lastRenderedState:Ce},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ms,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function ac(e){var t=ic(e);t.next===null&&(t=e.alternate.memoizedState),fc(e,t.next.queue,{},jd())}function oc(){return Aa(sh)}function sc(){return B().memoizedState}function cc(){return B().memoizedState}function lc(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=jd();e=xo(n);var r=So(t,e,n);r!==null&&(Pd(r,t,n),Co(r,t,n)),t={cache:Ia()},e.payload=t;return}t=t.return}}function uc(e,t,n){var r=jd();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},mc(e)?hc(t,n):(n=Mi(e,t,n,r),n!==null&&(Pd(n,e,r),gc(n,t,r)))}function dc(e,t,n){fc(e,t,n,jd())}function fc(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(mc(e))hc(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,qr(s,o))return ji(e,t,i,0),G===null&&Ai(),!1}catch{}if(n=Mi(e,t,i,r),n!==null)return Pd(n,e,r),gc(n,t,r),!0}return!1}function pc(e,t,n,r){if(r={lane:2,revertLane:Pf(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},mc(e)){if(t)throw Error(a(479))}else t=Mi(e,n,r,2),t!==null&&Pd(t,e,2)}function mc(e){var t=e.alternate;return e===L||t!==null&&t===L}function hc(e,t){Yo=Jo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function gc(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,xt(e,n)}}var _c={readContext:Aa,use:fs,useCallback:z,useContext:z,useEffect:z,useImperativeHandle:z,useLayoutEffect:z,useInsertionEffect:z,useMemo:z,useReducer:z,useRef:z,useState:z,useDebugValue:z,useDeferredValue:z,useTransition:z,useSyncExternalStore:z,useId:z,useHostTransitionStatus:z,useFormState:z,useActionState:z,useOptimistic:z,useMemoCache:z,useCacheRefresh:z,useEffectEvent:z},vc={readContext:Aa,use:fs,useCallback:function(e,t){return ls().memoizedState=[e,t===void 0?null:t],e},useContext:Aa,useEffect:Hs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),Bs(4194308,4,Js.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Bs(4194308,4,e,t)},useInsertionEffect:function(e,t){Bs(4,2,e,t)},useMemo:function(e,t){var n=ls();t=t===void 0?null:t;var r=e();if(Xo){rt(!0);try{e()}finally{rt(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=ls();if(n!==void 0){var i=n(t);if(Xo){rt(!0);try{n(t)}finally{rt(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=uc.bind(null,L,e),[r.memoizedState,e]},useRef:function(e){var t=ls();return e={current:e},t.memoizedState=e},useState:function(e){e=ws(e);var t=e.queue,n=dc.bind(null,L,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Xs,useDeferredValue:function(e,t){return $s(ls(),e,t)},useTransition:function(){var e=ws(!1);return e=tc.bind(null,L,e.queue,!0,!1),ls().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=L,i=ls();if(F){if(n===void 0)throw Error(a(407));n=n()}else{if(n=t(),G===null)throw Error(a(349));q&127||ys(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,Hs(xs.bind(null,r,o,e),[e]),r.flags|=2048,Rs(9,{destroy:void 0},bs.bind(null,r,o,n,t),null),n},useId:function(){var e=ls(),t=G.identifierPrefix;if(F){var n=ra,r=na;n=(r&~(1<<32-it(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=Zo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(i,{is:r.is}):s.createElement(i)}}o[Ot]=t,o[kt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(np(o,i,r),i){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&gl(t)}}return V(t),t.subtreeFlags&=-33554433,_l(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&gl(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(a(166));if(e=Ae.current,ga(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,i=la,i!==null)switch(i.tag){case 27:case 5:r=i.memoizedProps}e[Ot]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||ep(e.nodeValue,n)),e||pa(t,!0)}else e=lp(e).createTextNode(r),e[Ot]=t,t.stateNode=e}return V(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=ga(t),n!==null){if(e===null){if(!r)throw Error(a(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(a(557));e[Ot]=t}else _a(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;V(t),e=!1}else n=va(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Vo(t),t):(Vo(t),null);if(t.flags&128)throw Error(a(558))}return V(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=ga(t),r!==null&&r.dehydrated!==null){if(e===null){if(!i)throw Error(a(318));if(i=t.memoizedState,i=i===null?null:i.dehydrated,!i)throw Error(a(317));i[Ot]=t}else _a(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;V(t),i=!1}else i=va(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(Vo(t),t):(Vo(t),null)}return Vo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,i=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(i=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==i&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),yl(t,t.updateQueue),V(t),null);case 4:return Me(),e===null&&Wf(t.stateNode.containerInfo),t.flags|=67108864,V(t),null;case 10:return wa(t.type),V(t),null;case 19:if(Wo(t),r=t.memoizedState,r===null)return V(t),null;if(i=!!(t.flags&128),o=r.rendering,o===null){if(i)bl(r,!1);else{if(Y!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=Go(e),o!==null){for(t.flags|=128,bl(r,!1),e=o.updateQueue,t.updateQueue=e,yl(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Vi(n,e),n=n.sibling;return Uo(t,Ho.current&1|2),F&&ia(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ke()>_d&&(t.flags|=128,i=!0,bl(r,!1),t.lanes=4194304)}}else{if(!i){if(e=Go(o),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,yl(t,e),bl(r,!0),r.tail===null&&r.tailMode!==`collapsed`&&r.tailMode!==`visible`&&!o.alternate&&!F)return V(t),null}else 2*Ke()-r.renderingStartTime>_d&&n!==536870912&&(t.flags|=128,i=!0,bl(r,!1),t.lanes=4194304)}r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}if(r.tail!==null){e=r.tail;a:{for(n=e;n!==null;){if(n.alternate!==null){n=!1;break a}n=n.sibling}n=!0}return r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ke(),e.sibling=null,o=Ho.current,o=i?o&1|2:o&1,r.tailMode===`visible`||r.tailMode===`collapsed`||!n||F?Uo(t,o):(n=o,k(Fo,t),k(Ho,n),Io===null&&(Io=t)),F&&ia(t,r.treeForkCount),e}return V(t),null;case 22:case 23:return Vo(t),Po(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(V(t),t.subtreeFlags&6&&(t.flags|=8192)):V(t),n=t.updateQueue,n!==null&&yl(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&De(Ya),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),wa(I),V(t),null;case 25:return null;case 30:return t.flags|=33554432,V(t),null}throw Error(a(156,t.tag))}function Sl(e,t){switch(sa(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return wa(I),Me(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Fe(t),null;case 31:if(t.memoizedState!==null){if(Vo(t),t.alternate===null)throw Error(a(340));_a()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Vo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(a(340));_a()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Wo(t),e=t.flags,e&65536?(t.flags=e&-65537|128,e=t.memoizedState,e!==null&&(e.rendering=null,e.tail=null),t.flags|=4,t):null;case 4:return Me(),null;case 10:return wa(t.type),null;case 22:case 23:return Vo(t),Po(),e!==null&&De(Ya),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return wa(I),null;case 25:return null;default:return null}}function Cl(e,t){switch(sa(t),t.tag){case 3:wa(I),Me();break;case 26:case 27:case 5:Fe(t);break;case 4:Me();break;case 31:t.memoizedState!==null&&Vo(t);break;case 13:Vo(t);break;case 19:Wo(t);break;case 10:wa(t.type);break;case 22:case 23:Vo(t),Po(),e!==null&&De(Ya);break;case 24:wa(I)}}function wl(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Tl(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function El(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{ko(t,n)}catch(t){Z(e,e.return,t)}}}function Dl(e,t,n){n.props=Tc(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Ol(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:var i=e.stateNode,a=Ci(e.memoizedProps,i);(i.ref===null||i.ref.name!==a)&&(i.ref=Pp(a)),r=i.ref;break;case 7:if(e.stateNode===null){var o=new Fp(e);p(e.child,!1,Qp,o,void 0,void 0),e.stateNode=o}r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function kl(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}}function Al(e,t){if((e.tag===5||e.tag===27||e.tag===6)&&e.alternate===null&&t!==null)for(var n=0;n title`))),np(r,t,n),r[Ot]=e,Ht(r),t=r;break a;case`link`:if(o=Gm(`link`,`href`,i).get(t+(n.href||``))){for(s=0;sg&&(o=g,g=h,h=o);var _=Zr(s,h),v=Zr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,D.T=null,n=wd,wd=null;var o=bd,s=Sd;if(X=0,xd=bd=null,Sd=0,W&6)throw Error(a(331));var c=W;if(W|=4,Zu(o.current),Uu(o,o.current,s,n),W=c,Df(0,!1),nt&&typeof nt.onPostCommitFiberRoot==`function`)try{nt.onPostCommitFiberRoot(tt,o)}catch{}return!0}finally{O.p=i,D.T=r,uf(e,t)}}function pf(e,t,n){t=Ji(n,t),t=jc(e.stateNode,t,2),e=So(e,t,2),e!==null&&(vt(e,2),Ef(e))}function Z(e,t,n){if(e.tag===3)pf(e,e,n);else for(;t!==null;){if(t.tag===3){pf(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(yd===null||!yd.has(r))){e=Ji(n,e),n=Mc(2),r=So(t,n,2),r!==null&&(Nc(n,r,t,e),vt(r,2),Ef(r));break}}t=t.return}}function mf(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new td;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(ad=!0,i.add(n),e=hf.bind(null,e,t,n),t.then(e,e))}function hf(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,G===e&&(q&n)===n&&(Y===4||Y===3&&(q&62914560)===q&&300>Ke()-hd?W&2?ld|=n:Vd(e,0):ld|=n,dd===q&&(dd=0)),Ef(e)}function gf(e,t){t===0&&(t=gt()),e=Ni(e,t),e!==null&&(vt(e,t),Ef(e))}function _f(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),gf(e,n)}function vf(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(a(314))}r!==null&&r.delete(t),gf(e,n)}function yf(e,t){return He(e,t)}var bf=null,xf=null,Sf=!1,Cf=!1,wf=!1,Tf=0;function Ef(e){e!==xf&&e.next===null&&(xf===null?bf=xf=e:xf=xf.next=e),Cf=!0,Sf||(Sf=!0,Nf())}function Df(e,t){if(!wf&&Cf){wf=!0;do for(var n=!1,r=bf;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-it(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,Mf(r,a))}else a=q,a=ft(r,r===G?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||pt(r,a)||(n=!0,Mf(r,a))}r=r.next}while(n);wf=!1}}function Of(){kf()}function kf(){Cf=Sf=!1;var e=0;Tf!==0&&hp()&&(e=Tf);for(var t=Ke(),n=null,r=bf;r!==null;){var i=r.next,a=Af(r,t);a===0?(r.next=null,n===null?bf=i:n.next=i,i===null&&(xf=n)):(n=r,(e!==0||a&3)&&(Cf=!0)),r=i}X!==0&&X!==5||Df(e,!1),Tf!==0&&(Tf=0)}function Af(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&ap(d)&&(c=c.responseEnd,o+=u*(c$m){s.length=o;break}f=new Promise(jp.bind(f)),s.push(f)}}}if(0`u`?null:document;function Tm(e,t,n){var r=wm;if(r&&typeof t==`string`&&t){var i=ln(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),ym.has(i)||(ym.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),np(t,`link`,e),Ht(t),r.head.appendChild(t)))}}function Em(e){xm.D(e),Tm(`dns-prefetch`,e,null)}function Dm(e,t){xm.C(e,t),Tm(`preconnect`,e,t)}function Om(e,t,n){xm.L(e,t,n);var r=wm;if(r&&e&&t){var i=`link[rel="preload"][as="`+ln(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+ln(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+ln(n.imageSizes)+`"]`)):i+=`[href="`+ln(e)+`"]`;var a=i;switch(t){case`style`:a=Pm(e);break;case`script`:a=Rm(e)}if(!(vm.has(a)||(e=T({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),vm.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Fm(a))||t===`script`&&r.querySelector(zm(a))))){var o=r.createElement(`link`);np(o,`link`,e),t===`style`&&(o[It]=!0,o.onload=o.onerror=function(){Ut(o)}),Ht(o),r.head.appendChild(o)}}}function km(e,t){xm.m(e,t);var n=wm;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+ln(r)+`"][href="`+ln(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Rm(e)}if(!vm.has(a)&&(e=T({rel:`modulepreload`,href:e},t),vm.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(zm(a)))return}r=n.createElement(`link`),np(r,`link`,e),Ht(r),n.head.appendChild(r)}}}function Am(e,t,n){xm.S(e,t,n);var r=wm;if(r&&e){var i=Vt(r).hoistableStyles,a=Pm(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Fm(a)))s.loading=5;else{e=T({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=vm.get(a))&&Hm(e,n);var c=o=r.createElement(`link`);Ht(c),np(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Vm(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function jm(e,t){xm.X(e,t);var n=wm;if(n&&e){var r=Vt(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Ht(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mm(e,t){xm.M(e,t);var n=wm;if(n&&e){var r=Vt(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0,type:`module`},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Ht(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Nm(e,t,n,r){var i=(i=Ae.current)?bm(i):null;if(!i)throw Error(a(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(n=Pm(n.href),t=Vt(i).hoistableStyles,r=t.get(n),r||(r={type:`style`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Pm(n.href);var o=Vt(i).hoistableStyles,s=o.get(e);if(s||(i=i.ownerDocument||i,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=i.querySelector(Fm(e)))?o._p||(s.instance=o,s.state.loading=5):(o=vm.get(e),o||(o={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},vm.set(e,o)),Lm(i,e,o,s.state))),t&&r===null)throw Error(a(528,``));return s}if(t&&r!==null)throw Error(a(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(n=Rm(n),t=Vt(i).hoistableScripts,r=t.get(n),r||(r={type:`script`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(a(444,e))}}function Pm(e){return`href="`+ln(e)+`"`}function Fm(e){return`link[rel="stylesheet"][`+e+`]`}function Im(e){return T({},e,{"data-precedence":e.precedence,precedence:null})}function Lm(e,t,n,r){if(t=e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)){if(!0!==t[It]){r.loading=1;return}}else t=e.createElement(`link`),t[It]=!0,t.onload=t.onerror=Ut.bind(null,t),np(t,`link`,n),Ht(t),e.head.appendChild(t);r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2})}function Rm(e){return`[src="`+ln(e)+`"]`}function zm(e){return`script[async]`+e}function Bm(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+ln(n.href)+`"]`);if(r)return t.instance=r,Ht(r),r;var i=T({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),Ht(r),np(r,`style`,i),Vm(r,n.precedence,e),t.instance=r;case`stylesheet`:i=Pm(n.href);var o=e.querySelector(Fm(i));if(o)return t.state.loading|=4,t.instance=o,Ht(o),o;r=Im(n),(i=vm.get(i))&&Hm(r,i),o=(e.ownerDocument||e).createElement(`link`),Ht(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),np(o,`link`,r),t.state.loading|=4,Vm(o,n.precedence,e),t.instance=o;case`script`:return o=Rm(n.src),(i=e.querySelector(zm(o)))?(t.instance=i,Ht(i),i):(r=n,(i=vm.get(o))&&(r=T({},n),Um(r,i)),e=e.ownerDocument||e,i=e.createElement(`script`),Ht(i),np(i,`link`,r),e.head.appendChild(i),t.instance=i);case`void`:return null;default:throw Error(a(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Vm(r,n.precedence,e));return t.instance}function Vm(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function qm(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Jm(e,t){return e===`img`&&t.src!=null&&t.src!==``&&t.onLoad==null&&t.loading!==`lazy`}function Ym(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Xm(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==`number`?devicePixelRatio:1)*.25}function Zm(e,t){typeof t.decode==`function`&&(e.imgCount++,t.complete||(e.imgBytes+=Xm(t),e.suspenseyImages.push(t)),e=rh.bind(e),t.decode().then(e,e))}function Qm(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Pm(r.href),a=t.querySelector(Fm(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=nh.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,Ht(a);return}a=t.ownerDocument||t,r=Im(r),(i=vm.get(i))&&Hm(r,i),a=a.createElement(`link`),Ht(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),np(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=nh.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var $m=0;function eh(e,t){return e.stylesheets&&e.count===0&&ah(e,e.stylesheets),0$m?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function th(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)ah(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function nh(){this.count--,th(this)}function rh(){this.imgCount--,th(this)}var ih=null;function ah(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ih=new Map,t.forEach(oh,e),ih=null,nh.call(e))}function oh(e,t){if(!(t.state.loading&4)){var n=ih.get(e);if(n)var r=n.get(null);else{n=new Map,ih.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=Pe()}))(),j=n(),M=t();function Ie({onClose:e,onOpened:t,canClone:n,cloning:r,onClone:i}){let[a,o]=(0,j.useState)(null),[s,c]=(0,j.useState)(null),[l,u]=(0,j.useState)(null),[d,f]=(0,j.useState)(!1),[p,m]=(0,j.useState)(``),[h,g]=(0,j.useState)(!1),[_,v]=(0,j.useState)(``),[y,b]=(0,j.useState)(0);(0,j.useEffect)(()=>{let e=!1;return A.browse(a??void 0).then(t=>{e||(c(t),u(null))}).catch(t=>{e||u(t instanceof Error?t.message:`could not browse`)}),()=>{e=!0}},[a,y]);let x=e=>o(`${s.path.replace(/\/$/,``)}/${e}`),S=async()=>{if(s){f(!0);try{t(await A.open(s.path))}catch(e){E.error(e instanceof Error?e.message:`could not open`),f(!1)}}},C=async()=>{if(!s)return;let e=p.trim();if(e){g(!0);try{await A.mkdir(s.path,e),m(``),b(e=>e+1)}catch(e){E.error(e instanceof Error?e.message:`could not create folder`)}finally{g(!1)}}};return(0,M.jsx)(`div`,{className:`nc-fade-in fixed inset-0 z-50 flex items-start justify-center bg-black/60 p-4 md:pt-[8vh]`,onClick:e,children:(0,M.jsxs)(`div`,{className:`nc-rise-in flex max-h-[min(80vh,calc(var(--nc-visual-viewport-height,100vh)-8vh-1rem))] w-[34rem] max-w-full flex-col rounded-lg border border-ink-700 bg-ink-900`,onClick:e=>e.stopPropagation(),children:[(0,M.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-ink-700 px-3 py-2`,children:[(0,M.jsx)(`span`,{className:`font-medium text-ink-50`,children:`Open a project`}),(0,M.jsx)(`button`,{onClick:e,"aria-label":`close`,className:`ml-auto flex h-6 w-6 items-center justify-center rounded-sm text-ink-400 hover:text-ink-200`,children:(0,M.jsx)(pe,{})})]}),(0,M.jsx)(`div`,{className:`shrink-0 truncate border-b border-ink-700 px-3 py-1.5 text-ink-400`,children:s?.path??`…`}),(0,M.jsxs)(`ul`,{className:`h-72 min-h-0 overflow-y-auto`,children:[s?.parent&&(0,M.jsx)(`li`,{children:(0,M.jsx)(`button`,{onClick:()=>o(s.parent),className:`w-full px-3 py-1 text-left text-ink-400 hover:bg-ink-850`,children:`../`})}),s?.entries.map(e=>(0,M.jsx)(`li`,{children:(0,M.jsxs)(`button`,{onClick:()=>x(e.name),className:`flex w-full items-center gap-2 px-3 py-1 text-left hover:bg-ink-850`,children:[(0,M.jsxs)(`span`,{className:`truncate text-accent`,children:[e.name,`/`]}),e.is_repo&&(0,M.jsx)(`span`,{className:`rounded-sm bg-ink-700 px-1 text-2xs text-ink-200`,children:`git`})]})},e.name)),s&&s.entries.length===0&&(0,M.jsx)(`li`,{className:`px-3 py-1 text-ink-400`,children:`No sub-folders.`})]}),l&&(0,M.jsx)(`p`,{className:`shrink-0 px-3 py-1 text-removed`,children:l}),(0,M.jsxs)(`div`,{className:`flex shrink-0 items-stretch gap-2 border-t border-ink-700 px-3 py-2`,children:[(0,M.jsx)(`input`,{value:p,onChange:e=>m(e.target.value),onKeyDown:e=>{e.key===`Enter`&&C()},placeholder:`New folder name`,"aria-label":`new folder name`,className:`min-w-0 flex-1 rounded-sm border border-ink-700 bg-ink-950 px-2 py-1 text-ink-50 placeholder:text-ink-400 focus:border-ink-600 focus:outline-none`}),(0,M.jsx)(`button`,{onClick:C,disabled:!s||!p.trim()||h,"aria-busy":h,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850 disabled:opacity-50`,children:(0,M.jsx)(Ee,{busy:h,children:`Create`})})]}),(0,M.jsxs)(`div`,{className:`flex shrink-0 items-stretch gap-2 border-t border-ink-700 px-3 py-2`,children:[(0,M.jsx)(`input`,{value:_,onChange:e=>v(e.target.value),onKeyDown:e=>{e.key===`Enter`&&s&&i(s.path,_)},disabled:!n,placeholder:n?`Clone a git URL here`:`git is not installed on the server`,"aria-label":`git URL to clone`,spellCheck:!1,autoCapitalize:`none`,autoCorrect:`off`,className:`min-w-0 flex-1 rounded-sm border border-ink-700 bg-ink-950 px-2 py-1 text-ink-50 placeholder:text-ink-400 focus:border-ink-600 focus:outline-none disabled:opacity-50`}),(0,M.jsx)(`button`,{onClick:()=>s&&i(s.path,_),disabled:!n||!s||!_.trim()||r,"aria-busy":r,title:n?void 0:`the server has no git on its PATH`,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850 disabled:opacity-50`,children:(0,M.jsx)(Ee,{busy:r,children:`Clone`})})]}),(0,M.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-t border-ink-700 px-3 py-2`,children:[(0,M.jsx)(`span`,{className:`truncate text-ink-400`,children:s?s.path:``}),(0,M.jsx)(`button`,{onClick:S,disabled:!s||d,"aria-busy":d,className:`ml-auto shrink-0 rounded-sm bg-ink-50 px-3 py-1 font-semibold text-ink-950 hover:bg-white disabled:opacity-50`,children:(0,M.jsx)(Ee,{busy:d,children:`Open`})})]})]})})}var Le=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='12%2057%201150%201150'%20role='img'%20aria-label='Black%20crow'%3e%3ctitle%3eBlack%20crow%3c/title%3e%3cdesc%3eMonochrome%20black%20crow%20silhouette%20on%20a%20transparent%20background,%20framed%20so%20the%20bird%20sits%20centred%20for%20use%20as%20an%20inline%20mark%20on%20a%20square%20tile.%3c/desc%3e%3cg%20fill-rule='evenodd'%20clip-rule='evenodd'%3e%3cpath%20fill='%23000000'%20d='M%20882%20147%20L%20859%20136%20L%20844%20131%20L%20831%20129%20L%20830%20128%20L%20815%20127%20L%20814%20126%20L%20796%20126%20L%20795%20127%20L%20786%20127%20L%20785%20128%20L%20775%20129%20L%20752%20136%20L%20732%20146%20L%20713%20160%20L%20701%20172%20L%20684%20172%20L%20683%20173%20L%20673%20173%20L%20672%20174%20L%20650%20176%20L%20649%20177%20L%20627%20181%20L%20602%20190%20L%20589%20197%20L%20579%20204%20L%20562%20221%20L%20562%20223%20L%20565%20223%20L%20578%20228%20L%20581%20228%20L%20612%20238%20L%20672%20252%20L%20684%20258%20L%20698%20271%20L%20702%20278%20L%20705%20288%20L%20705%20294%20L%20703%20301%20L%20699%20308%20L%20688%20318%20L%20630%20347%20L%20593%20372%20L%20561%20399%20L%20544%20416%20L%20522%20441%20L%20492%20481%20L%20461%20531%20L%20438%20576%20L%20431%20594%20L%20425%20602%20L%20405%20635%20L%20387%20668%20L%20385%20676%20L%20390%20679%20L%20368%20705%20L%20330%20755%20L%20306%20790%20L%20296%20808%20L%20289%20818%20L%20280%20838%20L%20280%20843%20L%20283%20845%20L%20292%20843%20L%20297%20840%20L%20299%20840%20L%20321%20828%20L%20322%20830%20L%20311%20844%20L%20288%20878%20L%20287%20881%20L%20259%20924%20L%20235%20965%20L%20205%201023%20L%20205%201025%20L%20197%201042%20L%20191%201061%20L%20191%201071%20L%20192%201072%20L%20198%201071%20L%20220%201056%20L%20242%201038%20L%20300%20986%20L%20302%20987%20L%20265%201040%20L%20264%201043%20L%20246%201070%20L%20235%201090%20L%20227%201112%20L%20227%201123%20L%20229%201128%20L%20234%201133%20L%20239%201135%20L%20255%201135%20L%20274%201129%20L%20279%201134%20L%20286%201137%20L%20290%201137%20L%20291%201138%20L%20310%201138%20L%20311%201137%20L%20317%201137%20L%20318%201136%20L%20326%201135%20L%20344%201129%20L%20369%201116%20L%20395%201097%20L%20420%201073%20L%20445%201042%20L%20457%201024%20L%20461%201016%20L%20464%201013%20L%20468%201011%20L%20489%20994%20L%20595%20901%20L%20601%20906%20L%20606%20913%20L%20614%20921%20L%20637%20949%20L%20639%20953%20L%20639%20956%20L%20636%20960%20L%20634%20961%20L%20619%20962%20L%20613%20965%20L%20605%20974%20L%20602%20982%20L%20602%20994%20L%20605%201001%20L%20608%201004%20L%20609%201004%20L%20609%20999%20L%20612%20992%20L%20616%20988%20L%20620%20986%20L%20627%20986%20L%20635%20983%20L%20645%20983%20L%20646%20982%20L%20655%20982%20L%20668%20986%20L%20676%20990%20L%20682%20996%20L%20685%201003%20L%20688%201006%20L%20696%201009%20L%20697%201012%20L%20697%201024%20L%20693%201033%20L%20693%201035%20L%20695%201035%20L%20700%201032%20L%20707%201025%20L%20710%201020%20L%20713%201010%20L%20713%201003%20L%20711%20998%20L%20711%20994%20L%20712%20993%20L%20719%201003%20L%20723%201005%20L%20727%201005%20L%20730%201011%20L%20730%201022%20L%20727%201031%20L%20728%201033%20L%20740%201021%20L%20743%201014%20L%20744%201003%20L%20747%20999%20L%20749%20992%20L%20748%20977%20L%20744%20968%20L%20740%20963%20L%20741%20962%20L%20755%20961%20L%20768%20964%20L%20777%20969%20L%20783%20975%20L%20786%20981%20L%20789%20984%20L%20795%20987%20L%20799%20987%20L%20801%20991%20L%20801%20997%20L%20802%20998%20L%20799%201013%20L%20802%201012%20L%20808%201007%20L%20813%201000%20L%20816%20991%20L%20816%20981%20L%20814%20976%20L%20814%20968%20L%20815%20967%20L%20819%20970%20L%20823%20970%20L%20826%20973%20L%20829%20980%20L%20830%20993%20L%20834%20990%20L%20838%20979%20L%20838%20968%20L%20832%20951%20L%20822%20940%20L%20815%20936%20L%20803%20933%20L%20776%20935%20L%20763%20931%20L%20753%20922%20L%20731%20898%20L%20703%20865%20L%20703%20863%20L%20710%20853%20L%20711%20855%20L%20707%20862%20L%20709%20862%20L%20718%20857%20L%20754%20832%20L%20793%20799%20L%20818%20774%20L%20849%20737%20L%20850%20741%20L%20845%20755%20L%20847%20755%20L%20861%20743%20L%20881%20721%20L%20906%20686%20L%20918%20665%20L%20933%20635%20L%20951%20590%20L%20971%20525%20L%20971%20521%20L%20974%20512%20L%20974%20508%20L%20978%20493%20L%20979%20482%20L%20980%20481%20L%20981%20466%20L%20982%20465%20L%20983%20441%20L%20982%20440%20L%20982%20428%20L%20981%20427%20L%20980%20414%20L%20978%20409%20L%20976%20397%20L%20970%20381%20L%20971%20379%20L%20974%20383%20L%20976%20381%20L%20977%20334%20L%20976%20333%20L%20976%20322%20L%20975%20321%20L%20974%20307%20L%20973%20306%20L%20973%20301%20L%20972%20300%20L%20969%20280%20L%20958%20243%20L%20949%20224%20L%20949%20222%20L%20939%20204%20L%20922%20181%20L%20903%20162%20Z%20M%20625%20888%20L%20656%20874%20L%20658%20874%20L%20665%20870%20L%20725%20930%20L%20728%20934%20L%20728%20940%20L%20723%20943%20L%20714%20944%20L%20707%20950%20L%20683%20951%20L%20673%20947%20L%20659%20932%20Z%20M%20787%20182%20L%20792%20182%20L%20796%20187%20L%20795%20192%20L%20791%20195%20L%20788%20195%20L%20783%20191%20L%20783%20186%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20895%20156%20L%20863%20138%20L%20838%20130%20L%20819%20127%20L%20789%20127%20L%20777%20129%20L%20753%20136%20L%20736%20144%20L%20717%20157%20L%20702%20172%20L%20652%20176%20L%20628%20181%20L%20607%20188%20L%20585%20200%20L%20562%20222%20L%20613%20238%20L%20670%20251%20L%20683%20257%20L%20697%20269%20L%20705%20286%20L%20705%20296%20L%20703%20302%20L%20698%20310%20L%20687%20319%20L%20631%20347%20L%20591%20374%20L%20568%20393%20L%20538%20423%20L%20520%20444%20L%20481%20498%20L%20457%20539%20L%20437%20579%20L%20432%20593%20L%20413%20622%20L%20386%20671%20L%20386%20677%20L%20390%20677%20L%20391%20679%20L%20374%20698%20L%20334%20750%20L%20307%20789%20L%20290%20817%20L%20280%20839%20L%20281%20844%20L%20291%20843%20L%20323%20826%20L%20325%20827%20L%20289%20877%20L%20237%20962%20L%20209%201015%20L%20198%201040%20L%20191%201063%20L%20191%201070%20L%20194%201072%20L%20213%201061%20L%20259%201023%20L%20302%20984%20L%20303%20985%20L%20262%201045%20L%20245%201072%20L%20233%201095%20L%20227%201114%20L%20228%201126%20L%20233%201132%20L%20242%201135%20L%20252%201135%20L%20274%201128%20L%20278%201133%20L%20288%201137%20L%20313%201137%20L%20343%201129%20L%20373%201113%20L%20398%201094%20L%20424%201068%20L%20441%201047%20L%20465%201012%20L%20520%20967%20L%20595%20900%20L%20611%20917%20L%20639%20952%20L%20639%20957%20L%20637%20960%20L%20632%20962%20L%20618%20963%20L%20611%20967%20L%20606%20973%20L%20602%20983%20L%20602%20992%20L%20608%201004%20L%20611%20993%20L%20619%20986%20L%20626%20986%20L%20643%20982%20L%20656%20982%20L%20675%20989%20L%20683%20997%20L%20688%201006%20L%20696%201009%20L%20697%201025%20L%20693%201034%20L%20694%201035%20L%20701%201031%20L%20710%201019%20L%20712%201013%20L%20712%20993%20L%20720%201003%20L%20727%201005%20L%20730%201009%20L%20730%201025%20L%20727%201032%20L%20732%201030%20L%20739%201022%20L%20743%201013%20L%20743%201004%20L%20749%20991%20L%20748%20978%20L%20740%20964%20L%20743%20961%20L%20757%20961%20L%20769%20964%20L%20781%20972%20L%20791%20985%20L%20798%20986%20L%20802%20994%20L%20802%201003%20L%20799%201013%20L%20810%201004%20L%20815%20994%20L%20816%20983%20L%20814%20977%20L%20814%20965%20L%20818%20969%20L%20825%20971%20L%20830%20983%20L%20830%20993%20L%20833%20991%20L%20837%20982%20L%20838%20969%20L%20834%20956%20L%20825%20943%20L%20820%20939%20L%20807%20934%20L%20774%20935%20L%20762%20931%20L%20736%20904%20L%20702%20864%20L%20715%20845%20L%20716%20847%20L%20707%20862%20L%20719%20856%20L%20744%20839%20L%20786%20805%20L%20824%20767%20L%20851%20733%20L%20852%20735%20L%20846%20755%20L%20853%20750%20L%20883%20718%20L%20906%20685%20L%20927%20647%20L%20951%20589%20L%20968%20535%20L%20976%20502%20L%20982%20461%20L%20981%20422%20L%20976%20398%20L%20968%20378%20L%20969%20376%20L%20975%20383%20L%20977%20341%20L%20970%20286%20L%20958%20244%20L%20945%20215%20L%20925%20185%20L%20906%20165%20Z%20M%20625%20888%20L%20665%20870%20L%20728%20933%20L%20729%20940%20L%20726%20943%20L%20715%20944%20L%20708%20950%20L%20692%20952%20L%20678%20950%20L%20672%20947%20L%20662%20936%20Z%20M%20785%20183%20L%20792%20182%20L%20796%20186%20L%20796%20191%20L%20791%20195%20L%20785%20194%20L%20783%20191%20L%20783%20186%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20896%20157%20L%20869%20141%20L%20837%20130%20L%20817%20127%20L%20792%20127%20L%20778%20129%20L%20751%20137%20L%20733%20146%20L%20715%20159%20L%20702%20172%20L%20653%20176%20L%20610%20187%20L%20581%20203%20L%20562%20222%20L%20625%20241%20L%20671%20251%20L%20683%20257%20L%20698%20270%20L%20705%20285%20L%20704%20300%20L%20699%20309%20L%20689%20318%20L%20628%20349%20L%20581%20382%20L%20540%20421%20L%20517%20448%20L%20478%20503%20L%20456%20541%20L%20439%20575%20L%20432%20593%20L%20412%20624%20L%20388%20667%20L%20386%20676%20L%20390%20677%20L%20391%20679%20L%20363%20712%20L%20332%20753%20L%20289%20819%20L%20281%20836%20L%20281%20844%20L%20293%20842%20L%20323%20826%20L%20325%20827%20L%20284%20885%20L%20236%20964%20L%20205%201024%20L%20197%201043%20L%20191%201064%20L%20191%201070%20L%20197%201071%20L%20210%201063%20L%20253%201028%20L%20303%20983%20L%20304%20984%20L%20259%201050%20L%20235%201091%20L%20227%201115%20L%20228%201125%20L%20232%201131%20L%20238%201134%20L%20249%201135%20L%20261%201133%20L%20274%201128%20L%20278%201133%20L%20289%201137%20L%20312%201137%20L%20342%201129%20L%20368%201116%20L%20399%201093%20L%20423%201069%20L%20443%201044%20L%20463%201013%20L%20493%20990%20L%20595%20900%20L%20612%20918%20L%20639%20952%20L%20639%20957%20L%20636%20961%20L%20616%20964%20L%20606%20973%20L%20602%20984%20L%20602%20991%20L%20608%201004%20L%20611%20993%20L%20621%20985%20L%20625%20986%20L%20639%20982%20L%20657%20982%20L%20677%20990%20L%20685%201002%20L%20690%201007%20L%20697%201010%20L%20698%201021%20L%20693%201034%20L%20694%201035%20L%20705%201027%20L%20710%201018%20L%20712%201011%20L%20712%201001%20L%20710%20994%20L%20712%20993%20L%20720%201003%20L%20729%201006%20L%20731%201020%20L%20728%201032%20L%20738%201023%20L%20743%201012%20L%20743%201003%20L%20748%20994%20L%20747%20976%20L%20740%20964%20L%20743%20961%20L%20759%20961%20L%20767%20963%20L%20780%20971%20L%20790%20984%20L%20799%20986%20L%20802%20992%20L%20802%201004%20L%20799%201012%20L%20803%201011%20L%20810%201004%20L%20815%20994%20L%20814%20965%20L%20818%20969%20L%20823%20969%20L%20830%20982%20L%20830%20992%20L%20832%20992%20L%20837%20982%20L%20837%20965%20L%20831%20950%20L%20821%20940%20L%20806%20934%20L%20772%20935%20L%20762%20931%20L%20733%20901%20L%20702%20863%20L%20717%20842%20L%20718%20844%20L%20707%20862%20L%20738%20843%20L%20780%20810%20L%20822%20769%20L%20851%20733%20L%20852%20735%20L%20846%20755%20L%20855%20748%20L%20882%20719%20L%20904%20688%20L%20930%20640%20L%20950%20591%20L%20967%20538%20L%20978%20490%20L%20982%20459%20L%20982%20434%20L%20976%20399%20L%20967%20376%20L%20969%20375%20L%20975%20383%20L%20976%20329%20L%20971%20293%20L%20960%20250%20L%20942%20210%20L%20923%20183%20Z%20M%20625%20888%20L%20665%20870%20L%20729%20934%20L%20729%20940%20L%20726%20943%20L%20716%20944%20L%20708%20950%20L%20695%20952%20L%20677%20950%20L%20666%20941%20Z%20M%20786%20182%20L%20790%20181%20L%20794%20183%20L%20797%20188%20L%20792%20195%20L%20787%20195%20L%20782%20190%20L%20782%20187%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20893%20155%20L%20873%20143%20L%20841%20131%20L%20816%20127%20L%20794%20127%20L%20779%20129%20L%20754%20136%20L%20735%20145%20L%20715%20159%20L%20702%20172%20L%20648%20177%20L%20629%20181%20L%20608%20188%20L%20584%20201%20L%20562%20222%20L%20614%20238%20L%20671%20251%20L%20685%20258%20L%20698%20270%20L%20704%20281%20L%20706%20292%20L%20703%20303%20L%20699%20309%20L%20686%20320%20L%20628%20349%20L%20590%20375%20L%20565%20396%20L%20543%20418%20L%20518%20447%20L%20490%20485%20L%20460%20534%20L%20441%20571%20L%20431%20595%20L%20405%20636%20L%20386%20672%20L%20386%20676%20L%20390%20677%20L%20391%20679%20L%20371%20702%20L%20335%20749%20L%20291%20816%20L%20280%20840%20L%20282%20844%20L%20298%20840%20L%20324%20825%20L%20326%20826%20L%20294%20870%20L%20235%20966%20L%20206%201022%20L%20198%201041%20L%20191%201065%20L%20191%201070%20L%20196%201071%20L%20214%201060%20L%20254%201027%20L%20303%20983%20L%20304%20984%20L%20256%201055%20L%20232%201098%20L%20227%201115%20L%20228%201125%20L%20232%201131%20L%20239%201134%20L%20248%201135%20L%20264%201132%20L%20274%201128%20L%20280%201134%20L%20289%201137%20L%20311%201137%20L%20339%201130%20L%20371%201114%20L%20401%201091%20L%20422%201070%20L%20440%201048%20L%20463%201013%20L%20487%20995%20L%20595%20900%20L%20613%20919%20L%20639%20951%20L%20639%20958%20L%20636%20961%20L%20619%20963%20L%20613%20966%20L%20605%20975%20L%20602%20991%20L%20604%20998%20L%20608%201003%20L%20611%20993%20L%20620%20985%20L%20624%20986%20L%20632%20983%20L%20647%20981%20L%20658%20982%20L%20677%20990%20L%20689%201006%20L%20697%201009%20L%20698%201021%20L%20694%201035%20L%20703%201029%20L%20710%201018%20L%20712%201010%20L%20712%201002%20L%20710%20997%20L%20711%20992%20L%20720%201003%20L%20728%201005%20L%20730%201008%20L%20731%201021%20L%20728%201032%20L%20738%201023%20L%20742%201014%20L%20743%201003%20L%20748%20994%20L%20748%20980%20L%20742%20966%20L%20739%20963%20L%20741%20961%20L%20753%20960%20L%20770%20964%20L%20780%20971%20L%20790%20984%20L%20799%20986%20L%20802%20992%20L%20802%201005%20L%20799%201012%20L%20804%201010%20L%20809%201005%20L%20815%20993%20L%20813%20964%20L%20817%20968%20L%20823%20969%20L%20826%20972%20L%20830%20982%20L%20831%20992%20L%20834%20989%20L%20838%20975%20L%20837%20966%20L%20831%20950%20L%20821%20940%20L%20804%20934%20L%20779%20936%20L%20763%20932%20L%20731%20899%20L%20702%20865%20L%20702%20863%20L%20717%20842%20L%20718%20844%20L%20708%20862%20L%20749%20835%20L%20781%20809%20L%20820%20771%20L%20851%20733%20L%20852%20736%20L%20846%20755%20L%20857%20746%20L%20881%20720%20L%20907%20683%20L%20928%20644%20L%20945%20604%20L%20967%20537%20L%20978%20489%20L%20982%20455%20L%20982%20437%20L%20979%20413%20L%20975%20396%20L%20967%20377%20L%20968%20374%20L%20975%20382%20L%20976%20332%20L%20972%20299%20L%20962%20257%20L%20954%20235%20L%20943%20212%20L%20923%20183%20Z%20M%20624%20888%20L%20666%20870%20L%20729%20934%20L%20729%20940%20L%20726%20943%20L%20716%20944%20L%20706%20951%20L%20684%20952%20L%20677%20950%20L%20665%20940%20Z%20M%20701%20220%20L%20710%20219%20L%20717%20221%20L%20704%20223%20L%20704%20221%20Z%20M%20666%20217%20L%20679%20216%20L%20689%20218%20L%20685%20220%20L%20675%20220%20Z%20M%20658%20210%20L%20661%20208%20L%20686%20205%20L%20706%20206%20L%20725%20209%20L%20733%20217%20L%20741%20220%20L%20738%20221%20L%20696%20214%20L%20661%20212%20Z%20M%20788%20181%20L%20793%20182%20L%20797%20188%20L%20792%20195%20L%20786%20195%20L%20782%20190%20L%20783%20185%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20893%20155%20L%20864%20139%20L%20836%20130%20L%20813%20127%20L%20796%20127%20L%20774%20130%20L%20749%20138%20L%20735%20145%20L%20720%20155%20L%20702%20172%20L%20687%20173%20L%20700%20174%20L%20694%20181%20L%20674%20184%20L%20670%20180%20L%20665%20183%20L%20657%20184%20L%20639%20196%20L%20641%20198%20L%20647%20198%20L%20648%20194%20L%20654%20193%20L%20686%20204%20L%20724%20208%20L%20740%20213%20L%20751%20222%20L%20750%20223%20L%20693%20214%20L%20671%20212%20L%20639%20212%20L%20636%20211%20L%20634%20207%20L%20629%20207%20L%20626%20210%20L%20617%20210%20L%20614%20208%20L%20604%20207%20L%20594%20213%20L%20582%20216%20L%20580%20214%20L%20581%20210%20L%20576%20208%20L%20586%20200%20L%20565%20218%20L%20563%20222%20L%20618%20239%20L%20671%20251%20L%20682%20256%20L%20689%20261%20L%20702%20276%20L%20706%20288%20L%20704%20301%20L%20700%20308%20L%20683%20322%20L%20630%20348%20L%20585%20379%20L%20563%20398%20L%20523%20441%20L%20497%20475%20L%20459%20536%20L%20443%20567%20L%20431%20595%20L%20411%20626%20L%20387%20670%20L%20386%20676%20L%20390%20677%20L%20391%20679%20L%20368%20706%20L%20333%20752%20L%20290%20818%20L%20281%20837%20L%20282%20844%20L%20300%20839%20L%20324%20825%20L%20326%20826%20L%20285%20884%20L%20242%20954%20L%20207%201020%20L%20192%201060%20L%20192%201071%20L%20196%201071%20L%20211%201062%20L%20240%201039%20L%20303%20983%20L%20305%20984%20L%20277%201023%20L%20242%201078%20L%20228%201110%20L%20227%201119%20L%20231%201130%20L%20239%201134%20L%20255%201134%20L%20274%201128%20L%20280%201134%20L%20285%201136%20L%20310%201137%20L%20339%201130%20L%20374%201112%20L%20394%201097%20L%20421%201071%20L%20445%201041%20L%20463%201013%20L%20488%20994%20L%20595%20900%20L%20614%20920%20L%20639%20951%20L%20639%20958%20L%20636%20961%20L%20619%20963%20L%20613%20966%20L%20607%20972%20L%20603%20980%20L%20602%20989%20L%20603%20995%20L%20608%201003%20L%20610%20994%20L%20620%20985%20L%20623%20986%20L%20631%20983%20L%20647%20981%20L%20665%20984%20L%20676%20989%20L%20689%201006%20L%20695%201007%20L%20697%201009%20L%20698%201023%20L%20694%201035%20L%20699%201032%20L%20709%201020%20L%20712%201010%20L%20710%20997%20L%20711%20992%20L%20719%201002%20L%20725%201005%20L%20727%201004%20L%20730%201008%20L%20731%201022%20L%20728%201032%20L%20739%201021%20L%20743%201010%20L%20743%201003%20L%20748%20993%20L%20748%20981%20L%20746%20974%20L%20739%20963%20L%20741%20961%20L%20755%20960%20L%20770%20964%20L%20779%20970%20L%20789%20983%20L%20799%20986%20L%20802%20992%20L%20802%201005%20L%20799%201012%20L%20808%201006%20L%20815%20993%20L%20813%20964%20L%20817%20968%20L%20825%20970%20L%20829%20978%20L%20831%20992%20L%20837%20981%20L%20837%20966%20L%20832%20952%20L%20822%20941%20L%20813%20936%20L%20803%20934%20L%20776%20936%20L%20763%20932%20L%20723%20890%20L%20702%20865%20L%20702%20863%20L%20717%20841%20L%20719%20842%20L%20708%20862%20L%20742%20840%20L%20782%20808%20L%20818%20773%20L%20851%20733%20L%20852%20736%20L%20846%20754%20L%20850%20752%20L%20881%20720%20L%20905%20686%20L%20932%20635%20L%20950%20590%20L%20969%20529%20L%20977%20494%20L%20982%20454%20L%20980%20419%20L%20975%20396%20L%20967%20377%20L%20968%20374%20L%20975%20382%20L%20976%20334%20L%20969%20284%20L%20959%20248%20L%20941%20209%20L%20921%20181%20Z%20M%20624%20888%20L%20666%20870%20L%20729%20934%20L%20729%20941%20L%20724%20944%20L%20716%20944%20L%20707%20951%20L%20683%20952%20L%20673%20948%20L%20659%20933%20Z%20M%20563%20618%20L%20569%20614%20L%20579%20621%20L%20576%20626%20L%20572%20627%20L%20568%20623%20L%20565%20623%20Z%20M%20575%20603%20L%20578%20603%20L%20588%20613%20L%20588%20619%20L%20585%20621%20L%20582%20620%20L%20575%20613%20L%20576%20612%20L%20573%20605%20Z%20M%20748%20398%20L%20752%20412%20L%20752%20432%20L%20748%20444%20L%20732%20470%20L%20716%20484%20L%20698%20493%20L%20685%20494%20L%20682%20491%20L%20707%20445%20L%20685%20473%20L%20667%20492%20L%20647%20508%20L%20632%20517%20L%20619%20519%20L%20615%20517%20L%20615%20513%20L%20643%20470%20L%20603%20514%20L%20589%20526%20L%20569%20538%20L%20558%20540%20L%20554%20539%20L%20552%20535%20L%20577%20498%20L%20549%20528%20L%20526%20546%20L%20508%20554%20L%20498%20555%20L%20495%20552%20L%20501%20541%20L%20482%20555%20L%20471%20558%20L%20464%20558%20L%20461%20560%20L%20460%20559%20L%20461%20555%20L%20469%20547%20L%20473%20537%20L%20491%20512%20L%20511%20497%20L%20582%20434%20L%20617%20408%20L%20632%20399%20L%20659%20386%20L%20677%20380%20L%20695%20377%20L%20712%20377%20L%20725%20380%20L%20739%20388%20Z%20M%20625%20216%20L%20683%20216%20L%20737%20222%20L%20742%20224%20L%20733%20226%20L%20721%20225%20L%20713%20230%20L%20711%20228%20L%20706%20228%20L%20694%20237%20L%20690%20233%20L%20690%20225%20L%20679%20228%20L%20674%20232%20L%20668%20232%20L%20659%20229%20L%20649%20222%20L%20632%20219%20L%20632%20217%20Z%20M%20788%20181%20L%20793%20182%20L%20797%20187%20L%20795%20193%20L%20792%20195%20L%20786%20195%20L%20782%20190%20L%20783%20185%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20607%20972%20L%20603%20981%20L%20603%20995%20L%20608%201003%20L%20610%20994%20L%20616%20987%20L%20620%20985%20L%20627%20985%20L%20635%20982%20L%20655%20981%20L%20676%20989%20L%20683%20996%20L%20689%201006%20L%20695%201007%20L%20697%201009%20L%20698%201024%20L%20694%201034%20L%20699%201032%20L%20706%201025%20L%20712%201010%20L%20710%20994%20L%20709%20997%20L%20706%20994%20L%20700%20994%20L%20694%20997%20L%20672%20976%20L%20658%20974%20L%20647%20967%20L%20642%20974%20L%20638%20974%20L%20636%20972%20L%20636%20961%20L%20629%20963%20L%20631%20972%20L%20625%20977%20L%20620%20977%20L%20613%20967%20L%20614%20966%20Z%20M%20686%20966%20L%20704%20980%20L%20719%201002%20L%20727%201004%20L%20730%201007%20L%20731%201023%20L%20728%201032%20L%20731%201030%20L%20741%201017%20L%20743%201003%20L%20748%20992%20L%20748%20981%20L%20742%20967%20L%20740%20965%20L%20742%20968%20L%20735%20972%20L%20726%20965%20L%20705%20960%20L%20724%20968%20L%20740%20983%20L%20742%20987%20L%20740%20991%20L%20732%20991%20L%20728%20996%20L%20726%20996%20L%20721%20992%20L%20713%20979%20Z%20M%20784%20943%20L%20784%20946%20L%20798%20950%20L%20819%20969%20L%20825%20970%20L%20830%20981%20L%20831%20992%20L%20837%20981%20L%20837%20966%20L%20829%20948%20L%20825%20944%20L%20830%20950%20L%20821%20957%20L%20813%20951%20L%20794%20942%20Z%20M%20659%20933%20L%20662%20937%20L%20658%20942%20L%20658%20945%20L%20663%20947%20L%20666%20945%20L%20667%20946%20L%20668%20944%20L%20670%20946%20Z%20M%20643%20913%20L%20647%20918%20L%20644%20921%20L%20642%20928%20L%20629%20938%20L%20627%20936%20L%20636%20947%20L%20634%20945%20L%20641%20933%20L%20651%20923%20L%20657%20930%20Z%20M%20936%20310%20L%20934%20309%20L%20945%20338%20L%20949%20368%20L%20949%20381%20L%20947%20383%20L%20935%20367%20L%20914%20348%20L%20929%20377%20L%20934%20397%20L%20936%20414%20L%20935%20440%20L%20933%20442%20L%20930%20440%20L%20924%20419%20L%20912%20395%20L%20909%20393%20L%20910%20410%20L%20907%20433%20L%20899%20458%20L%20895%20462%20L%20893%20460%20L%20892%20445%20L%20888%20427%20L%20873%20390%20L%20873%20416%20L%20871%20430%20L%20866%20448%20L%20862%20454%20L%20859%20452%20L%20853%20433%20L%20842%20410%20L%20823%20382%20L%20807%20365%20L%20805%20366%20L%20811%20394%20L%20812%20416%20L%20810%20425%20L%20806%20428%20L%20801%20423%20L%20790%20403%20L%20772%20383%20L%20759%20372%20L%20733%20357%20L%20724%20355%20L%20705%20346%20L%20693%20344%20L%20669%20344%20L%20646%20349%20L%20636%20353%20L%20662%20349%20L%20677%20349%20L%20699%20353%20L%20708%20356%20L%20725%20366%20L%20736%20376%20L%20745%20389%20L%20753%20415%20L%20752%20442%20L%20743%20476%20L%20723%20520%20L%20693%20569%20L%20646%20631%20L%20605%20676%20L%20568%20709%20L%20565%20710%20L%20562%20706%20L%20562%20692%20L%20567%20665%20L%20578%20636%20L%20602%20619%20L%20622%20602%20L%20645%20578%20L%20670%20546%20L%20630%20588%20L%20603%20610%20L%20574%20628%20L%20560%20633%20L%20556%20633%20L%20555%20631%20L%20563%20617%20L%20596%20572%20L%20647%20509%20L%20636%20515%20L%20562%20609%20L%20541%20630%20L%20520%20645%20L%20502%20653%20L%20490%20653%20L%20536%20590%20L%20513%20617%20L%20478%20651%20L%20454%20665%20L%20440%20669%20L%20436%20667%20L%20488%20596%20L%20459%20630%20L%20436%20653%20L%20411%20671%20L%20392%20678%20L%20372%20701%20L%20319%20772%20L%20289%20820%20L%20281%20838%20L%20282%20844%20L%20295%20841%20L%20324%20825%20L%20326%20826%20L%20289%20878%20L%20242%20954%20L%20209%201016%20L%20193%201056%20L%20191%201069%20L%20192%201071%20L%20196%201071%20L%20219%201056%20L%20303%20983%20L%20305%20984%20L%20255%201057%20L%20234%201094%20L%20228%201111%20L%20228%201124%20L%20234%201132%20L%20240%201134%20L%20254%201134%20L%20275%201128%20L%20279%201133%20L%20291%201137%20L%20316%201136%20L%20344%201128%20L%20364%201118%20L%20389%201101%20L%20403%201089%20L%20427%201064%20L%20447%201038%20L%20463%201013%20L%20489%20993%20L%20594%20901%20L%20595%20899%20L%20593%20894%20L%20588%20891%20L%20567%20868%20L%20569%20865%20L%20576%20867%20L%20586%20873%20L%20589%20867%20L%20607%20867%20L%20619%20880%20L%20622%20887%20L%20626%20891%20L%20624%20889%20L%20626%20886%20L%20666%20870%20L%20705%20909%20L%20710%20905%20L%20713%20905%20L%20716%20908%20L%20716%20911%20L%20712%20916%20L%20728%20932%20L%20730%20939%20L%20727%20943%20L%20717%20944%20L%20710%20949%20L%20712%20948%20L%20725%20951%20L%20739%20963%20L%20740%20961%20L%20756%20960%20L%20774%20966%20L%20784%20975%20L%20789%20983%20L%20800%20987%20L%20802%20991%20L%20802%201005%20L%20799%201012%20L%20806%201008%20L%20811%201002%20L%20815%20993%20L%20813%20968%20L%20812%20973%20L%20807%20971%20L%20796%20976%20L%20791%20973%20L%20788%20967%20L%20779%20958%20L%20767%20952%20L%20762%20941%20L%20756%20940%20L%20751%20932%20L%20749%20931%20L%20743%20936%20L%20738%20936%20L%20736%20933%20L%20741%20925%20L%20739%20915%20L%20742%20912%20L%20745%20914%20L%20702%20865%20L%20702%20863%20L%20717%20841%20L%20719%20842%20L%20709%20861%20L%20746%20837%20L%20783%20807%20L%20826%20764%20L%20851%20732%20L%20853%20734%20L%20846%20754%20L%20851%20751%20L%20874%20728%20L%20890%20708%20L%20908%20681%20L%20938%20621%20L%20960%20560%20L%20971%20521%20L%20979%20481%20L%20982%20444%20L%20977%20405%20L%20970%20382%20L%20966%20375%20L%20968%20374%20L%20974%20381%20L%20975%20368%20L%20974%20372%20L%20968%20364%20L%20966%20354%20L%20957%20337%20Z%20M%20247%201077%20L%20251%201085%20L%20246%201088%20L%20245%201091%20L%20240%201092%20L%20239%201085%20L%20241%201081%20Z%20M%20370%20935%20L%20371%20937%20L%20326%20997%20L%20301%201034%20L%20289%201044%20L%20286%201042%20L%20283%201045%20L%20277%201045%20L%20273%201043%20L%20264%201052%20L%20261%201049%20L%20270%201037%20L%20271%201038%20L%20281%201027%20L%20293%201010%20L%20326%20971%20Z%20M%20726%20921%20L%20728%20921%20L%20731%20926%20L%20729%20933%20L%20722%20926%20Z%20M%20729%20897%20L%20734%20902%20L%20732%20906%20L%20726%20902%20L%20726%20899%20Z%20M%20715%20882%20L%20720%20886%20L%20718%20890%20L%20711%20887%20Z%20M%20605%20762%20L%20608%20761%20L%20607%20760%20L%20609%20757%20L%20610%20759%20L%20617%20761%20L%20620%20764%20L%20611%20770%20L%20607%20770%20L%20606%20765%20L%20608%20765%20Z%20M%20611%20754%20L%20617%20750%20L%20620%20751%20L%20621%20749%20L%20625%20749%20L%20628%20752%20L%20628%20756%20L%20623%20761%20Z%20M%20549%20710%20L%20551%20713%20L%20551%20722%20L%20506%20774%20L%20403%20878%20L%20309%20963%20L%20307%20961%20L%20313%20953%20L%20322%20945%20L%20340%20922%20L%20375%20885%20Z%20M%20695%20704%20L%20696%20708%20L%20698%20709%20L%20695%20710%20L%20695%20713%20L%20692%20715%20L%20688%20710%20Z%20M%20704%20694%20L%20706%20695%20L%20706%20698%20L%20710%20698%20L%20713%20703%20L%20708%20708%20L%20707%20714%20L%20705%20716%20L%20701%20716%20L%20697%20708%20L%20699%20706%20L%20697%20705%20L%20701%20701%20L%20704%20705%20L%20706%20704%20L%20706%20700%20L%20702%20697%20Z%20M%20552%20678%20L%20554%20681%20L%20552%20701%20L%20465%20787%20L%20361%20883%20L%20316%20927%20L%20253%20993%20L%20211%201042%20L%20211%201036%20L%20222%201011%20L%20261%20942%20L%20292%20898%20L%20338%20843%20L%20374%20807%20L%20387%20807%20L%20403%20801%20L%20419%20792%20L%20456%20766%20L%20500%20728%20Z%20M%20704%20654%20L%20706%20658%20L%20711%20658%20L%20714%20661%20L%20715%20673%20L%20713%20676%20L%20705%20676%20L%20702%20674%20L%20704%20677%20L%20704%20681%20L%20702%20682%20L%20704%20685%20L%20700%20686%20L%20694%20678%20L%20691%20678%20L%20688%20674%20L%20692%20670%20L%20692%20664%20L%20694%20661%20Z%20M%20565%20642%20L%20558%20663%20L%20545%20677%20L%20494%20726%20L%20443%20767%20L%20401%20792%20L%20392%20795%20L%20387%20794%20L%20405%20766%20L%20455%20707%20L%20388%20767%20L%20355%20794%20L%20304%20827%20L%20299%20826%20L%20302%20817%20L%20316%20795%20L%20360%20739%20L%20398%20700%20L%20425%20677%20L%20428%20679%20L%20443%20679%20L%20461%20673%20L%20476%20664%20L%20493%20666%20L%20517%20657%20L%20542%20641%20L%20546%20643%20Z%20M%20563%20221%20L%20572%20225%20L%20571%20223%20L%20574%20220%20L%20585%20217%20L%20596%20218%20L%20607%20215%20L%20653%20214%20L%20706%20218%20L%20749%20224%20L%20749%20226%20L%20735%20233%20L%20732%20238%20L%20732%20249%20L%20693%20242%20L%20620%20239%20L%20672%20251%20L%20688%20260%20L%20701%20274%20L%20706%20287%20L%20704%20301%20L%20707%20297%20L%20711%20300%20L%20713%20309%20L%20720%20324%20L%20723%20327%20L%20724%20308%20L%20726%20304%20L%20735%20318%20L%20757%20341%20L%20753%20319%20L%20754%20313%20L%20760%20317%20L%20786%20345%20L%20784%20324%20L%20775%20300%20L%20779%20300%20L%20800%20317%20L%20800%20312%20L%20787%20283%20L%20772%20264%20L%20778%20263%20L%20800%20271%20L%20803%20270%20L%20770%20236%20L%20772%20234%20L%20797%20234%20L%20807%20230%20L%20801%20230%20L%20800%20228%20L%20811%20218%20L%20818%20203%20L%20818%20193%20L%20812%20179%20L%20798%20168%20L%20784%20166%20L%20760%20173%20L%20747%20173%20L%20712%20163%20L%20718%20157%20L%20703%20171%20L%20711%20173%20L%20720%20178%20L%20723%20182%20L%20720%20186%20L%20695%20190%20L%20680%20190%20L%20670%20193%20L%20656%20193%20L%20687%20204%20L%20729%20209%20L%20742%20214%20L%20753%20223%20L%20752%20224%20L%20729%20219%20L%20669%20212%20L%20610%20213%20L%20576%20218%20L%20565%20221%20L%20565%20219%20Z%20M%20771%20189%20L%20772%20201%20L%20775%20207%20L%20780%20212%20L%20787%20215%20L%20796%20216%20L%20796%20218%20L%20784%20219%20L%20776%20215%20L%20771%20210%20L%20768%20204%20L%20768%20194%20Z%20M%20788%20181%20L%20793%20182%20L%20797%20187%20L%20796%20192%20L%20790%20196%20L%20786%20195%20L%20782%20191%20L%20782%20186%20Z'/%3e%3c/g%3e%3c/svg%3e`;function Re({className:e}){return(0,M.jsx)(`span`,{className:`block overflow-hidden rounded-[20.7%] bg-accent ${e??``}`,children:(0,M.jsx)(`img`,{src:Le,alt:``,"aria-hidden":`true`,className:`h-full w-full`})})}function ze(){return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(Re,{className:`h-[22px] w-[22px] shrink-0`}),(0,M.jsx)(`span`,{className:`hidden text-[16px] font-medium tracking-[0.04em] text-ink-50 md:inline`,children:`nightcrow`})]})}function Be({open:e}){return(0,M.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`h-3.5 w-3.5 shrink-0 transition-transform ${e?`rotate-90`:``}`,children:(0,M.jsx)(`path`,{d:`m9 18 6-6-6-6`})})}function Ve({className:e=`h-4 w-4`}){return(0,M.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`shrink-0 ${e}`,children:[(0,M.jsx)(`path`,{d:`M3 6h.01`}),(0,M.jsx)(`path`,{d:`M3 12h.01`}),(0,M.jsx)(`path`,{d:`M3 18h.01`}),(0,M.jsx)(`path`,{d:`M8 6h13`}),(0,M.jsx)(`path`,{d:`M8 12h13`}),(0,M.jsx)(`path`,{d:`M8 18h13`})]})}function He({className:e=`h-4 w-4`}){return(0,M.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`shrink-0 ${e}`,children:[(0,M.jsx)(`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`}),(0,M.jsx)(`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`}),(0,M.jsx)(`path`,{d:`M10 9H8`}),(0,M.jsx)(`path`,{d:`M16 13H8`}),(0,M.jsx)(`path`,{d:`M16 17H8`})]})}function Ue({className:e=`h-4 w-4`}){return(0,M.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`shrink-0 ${e}`,children:[(0,M.jsx)(`path`,{d:`m4 17 6-6-6-6`}),(0,M.jsx)(`path`,{d:`M12 19h8`})]})}function We({repos:e,currentId:t,onSelect:n,onCloseProject:r,onOpenPicker:i,className:a=``}){let[o,s]=(0,j.useState)(!1),c=S(),l=(0,j.useRef)(null),u=e.find(e=>e.id===t);return(0,j.useEffect)(()=>{if(!o)return;let e=e=>{e.key===`Escape`&&(s(!1),l.current?.focus())};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[o]),(0,M.jsxs)(`div`,{className:`relative min-w-0 flex-1 ${a}`,children:[(0,M.jsxs)(`button`,{ref:l,onClick:()=>s(e=>!e),"aria-haspopup":`menu`,"aria-expanded":o,title:u?.display_path??`Select a project`,className:`flex min-w-0 max-w-full items-center gap-1 rounded-sm bg-ink-700 py-0.5 pl-2 pr-1 text-ink-50`,children:[(0,M.jsx)(`span`,{className:`truncate`,children:u?.name??`No project`}),(0,M.jsx)(Be,{open:o})]}),o&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>s(!1)}),(0,M.jsxs)(`div`,{role:`menu`,className:`nc-pop-in origin-top-left absolute left-0 z-50 mt-1 max-h-[70vh] w-56 max-w-[80vw] overflow-y-auto rounded-md border border-ink-700 bg-ink-900 py-1 shadow-lg`,children:[e.length===0&&(0,M.jsx)(`p`,{className:`px-3 py-1.5 text-ink-400`,children:`No projects open.`}),e.map(e=>(0,M.jsxs)(`div`,{className:`flex items-center ${e.id===t?`bg-ink-700 text-ink-50`:`text-ink-200`}`,children:[(0,M.jsx)(`button`,{role:`menuitem`,onClick:()=>{n(e.id),s(!1)},title:e.display_path,className:`min-w-0 flex-1 truncate py-1.5 pl-3 pr-1 text-left hover:text-accent`,children:e.name}),(0,M.jsx)(`button`,{onClick:()=>r(e.id),"aria-label":`close ${e.name}`,...e.id===t?c(`project.close`,`Close project`):{title:`Close project`},className:`mr-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-removed`,children:(0,M.jsx)(pe,{className:`h-3.5 w-3.5`})})]},e.id)),(0,M.jsx)(`div`,{className:`my-1 border-t border-ink-800`}),(0,M.jsxs)(`button`,{role:`menuitem`,onClick:()=>{i(),s(!1)},...c(`project.openDialog`,`Open a project`),className:`flex w-full items-center gap-1 px-3 py-1.5 text-left text-ink-400 hover:text-ink-200`,children:[(0,M.jsx)(re,{className:`h-3.5 w-3.5`}),`open`]})]})]})]})}function Ge({side:e,repos:t,repo:n,onSelectRepo:r,onCloseRepo:i,onOpenPicker:o,draggingRepo:s,dragOverRepo:c,onRepoDragStart:l,onRepoDragMove:f,onRepoDragEnd:p}){let m=S(),h=d(),g=t.length>1?[`project.previous`,`project.next`]:[],_=e=>e!==null,v=g.map(e=>w(e,h)).filter(_),y=g.map(e=>u(e,h)).filter(_),b=e===`left`;return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`nav`,{"aria-keyshortcuts":v.length>0?v.join(` `):void 0,title:y.length>0?`Previous or next project (${y.join(`, `)})`:void 0,className:b?`hidden min-h-0 flex-1 flex-col overflow-y-auto md:flex`:`hidden items-stretch self-stretch overflow-x-auto pl-1 md:flex`,children:t.map(e=>(0,M.jsxs)(`div`,{"data-repo-id":e.id,onPointerDown:t=>l(t,e.id),onPointerMove:f,onPointerUp:p,onPointerCancel:p,onLostPointerCapture:p,"data-active":e.id===n,className:`nc-title-target flex items-center whitespace-nowrap ${b?`min-w-0 border-b border-ink-700`:`border-r border-ink-700`} ${t.length>1?`touch-none`:``} ${s===e.id?`opacity-60`:``} ${c===e.id?`bg-ink-800 ring-1 ring-inset ring-accent`:``} ${e.id===n?b?`bg-ink-900 text-ink-50 shadow-[inset_1px_0_0_0_var(--color-accent)]`:`bg-ink-950 text-ink-50 shadow-[inset_0_-1px_0_0_var(--color-accent)]`:`text-ink-400 hover:bg-ink-850 hover:text-ink-200`}`,title:e.display_path,children:[(0,M.jsx)(`button`,{onClick:()=>{r(e.id)},"aria-label":e.name,className:`self-stretch pl-3 pr-1 text-left ${b?`min-w-0 flex-1 py-2`:``}`,children:(0,M.jsx)(Te,{title:e.name,className:b?``:a})}),(0,M.jsx)(`button`,{onClick:t=>{t.stopPropagation(),i(e.id)},"data-tab-close":!0,...e.id===n?m(`project.close`,`Close project`):{title:`Close project`},"aria-label":`close ${e.name}`,className:`mr-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-removed`,children:(0,M.jsx)(pe,{className:`h-3.5 w-3.5`})})]},e.id))}),(0,M.jsxs)(`button`,{onClick:o,...m(`project.openDialog`,`Open a project`),className:`hidden shrink-0 items-center gap-1 rounded-sm px-2 py-0.5 text-ink-400 hover:text-accent md:inline-flex ${b?`mx-1 my-2 justify-center`:``}`,children:[(0,M.jsx)(re,{className:`h-3.5 w-3.5`}),`open`]})]})}var Ke={key:()=>Ae(`/api/push/key`).then(e=>e.public_key),subscribe:e=>k(`/api/push/subscribe`,e),unsubscribe:e=>k(`/api/push/unsubscribe`,{endpoint:e}),status:e=>k(`/api/push/status`,{endpoint:e}).then(e=>e.subscribed),test:e=>k(`/api/push/test`,{endpoint:e})};function qe(){let e=navigator;return{secure:window.isSecureContext,serviceWorker:`serviceWorker`in navigator?navigator.serviceWorker:void 0,hasPushManager:`PushManager`in window,permission:()=>typeof Notification>`u`?void 0:Notification.permission,requestPermission:()=>Notification.requestPermission(),isIos:/iPhone|iPad|iPod/.test(navigator.userAgent)||/Macintosh/.test(navigator.userAgent)&&navigator.maxTouchPoints>1,standalone:e.standalone===!0||window.matchMedia?.(`(display-mode: standalone)`).matches===!0}}function Je(e){return e.secure?e.isIos&&!e.standalone?`needs-install`:!e.serviceWorker||!e.hasPushManager||e.permission()===void 0?`unsupported`:e.permission()===`denied`?`denied`:null:`insecure`}function Ye(e){e.secure&&e.serviceWorker&&e.serviceWorker.register(`./sw.js`).catch(()=>{})}async function Xe(e){return(await e.serviceWorker.ready).pushManager.getSubscription()}async function Ze(e){let t=Je(e);if(t)return t;let n=await Xe(e);return n?await Ke.status(n.endpoint)?`on`:(await n.unsubscribe().catch(()=>!1),`off`):`off`}async function Qe(e){let t=Je(e);if(t)return t;let n=await e.requestPermission();if(n===`denied`)return`denied`;if(n!==`granted`)return`off`;let r;try{r=await Ke.key()}catch{return`unavailable`}let i=await e.serviceWorker.ready;await(await i.pushManager.getSubscription())?.unsubscribe();let a=await i.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:tt(r)});return await Ke.subscribe(a.toJSON()),`on`}async function $e(e){let t=await Xe(e);return t&&(await Ke.unsubscribe(t.endpoint).catch(()=>void 0),await t.unsubscribe().catch(()=>!1)),Je(e)??`off`}async function et(e){let t=await Xe(e);if(!t)throw Error(`notifications are off in this browser`);await Ke.test(t.endpoint)}function tt(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`),n=t+`=`.repeat((4-t.length%4)%4),r=atob(n),i=new Uint8Array(new ArrayBuffer(r.length));for(let e=0;e{let e=!1;return Ze(a).then(t=>!e&&n(t)).catch(()=>!e&&n(`off`)),()=>{e=!0}},[a]);let o=(0,j.useCallback)(async(e,t)=>{i(!0);try{let t=await e();return t&&n(t),!0}catch(e){return E.error(e instanceof Error?`${t}: ${e.message}`:t),!1}finally{i(!1)}},[]);return{state:t,busy:r,enable:()=>o(()=>Qe(a),`could not turn notifications on`),disable:()=>o(()=>$e(a),`could not turn notifications off`),test:async()=>{await o(()=>et(a),`could not send a test`)&&E.info(`Test notification sent`)}}}var rt={unsupported:`This browser does not support notifications.`,insecure:`Notifications need HTTPS or localhost. See the notifications guide for tailscale serve.`,"needs-install":`On iPhone and iPad, add nightcrow to the Home Screen and open it from there first.`,denied:`Notifications are blocked for this site. Allow them in the browser's site settings.`,unavailable:`The server could not load its notification key. Check the daemon log.`},it=`rounded-sm px-2 py-1 text-ink-200 hover:bg-ink-700 disabled:cursor-progress disabled:text-ink-400 disabled:hover:bg-transparent`;function at(){let{state:e,busy:t,enable:n,disable:r,test:i}=nt(),a=e?rt[e]:void 0;return(0,M.jsxs)(`section`,{"aria-labelledby":`nc-notifications-title`,className:`border-t border-ink-800 px-3 py-2`,children:[(0,M.jsx)(`h3`,{id:`nc-notifications-title`,className:`mb-1 text-xs uppercase tracking-wide text-ink-400`,children:`Notifications`}),(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`min-w-0 flex-1 text-ink-200`,children:`When a terminal asks for you`}),(e===`off`||e===`on`)&&(0,M.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e===`on`,"aria-busy":t,disabled:t,onClick:e===`on`?r:n,className:it,children:e===`on`?`On`:`Off`}),e===null&&(0,M.jsx)(`span`,{className:`text-ink-400`,children:`…`})]}),a&&(0,M.jsx)(`p`,{className:`mt-1 text-xs text-ink-400`,children:a}),e===`on`&&(0,M.jsx)(`button`,{type:`button`,disabled:t,onClick:i,className:`mt-1 ${it}`,children:`Send a test notification`})]})}var ot=`nc-settings-title`,st=`nc-settings-dialog`,ct=`nc-screen-scale`;function lt({accent:e,next:t,cycle:n,onReloadConfig:r,reloading:a,onShowShortcuts:o}){let[s,l]=(0,j.useState)(!1),u=(0,j.useRef)(null),d=(0,j.useRef)(null),{scale:f,setScale:p}=i(),m=S();(0,j.useLayoutEffect)(()=>{if(!s)return;let e=d.current;if(!e)return;e.querySelector(`[data-initial-focus]`)?.focus();let t=()=>[...e.querySelectorAll(`a[href], button:not(:disabled), select:not(:disabled), input:not(:disabled), [tabindex]:not([tabindex="-1"])`)],n=n=>{if(n.key===`Escape`){n.preventDefault(),l(!1),u.current?.focus();return}if(n.key!==`Tab`)return;let r=t(),i=r[0],a=r.at(-1);!i||!a?(n.preventDefault(),e.focus()):n.shiftKey&&document.activeElement===i?(n.preventDefault(),a.focus()):!n.shiftKey&&document.activeElement===a&&(n.preventDefault(),i.focus())},r=t=>{let n=t.target;n instanceof Node&&!e.contains(n)&&!u.current?.contains(n)&&l(!1)};return document.addEventListener(`keydown`,n),document.addEventListener(`pointerdown`,r),()=>{document.removeEventListener(`keydown`,n),document.removeEventListener(`pointerdown`,r)}},[s]);let g=()=>{l(!1),u.current?.focus(),o()};return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`button`,{ref:u,type:`button`,onClick:()=>l(e=>!e),"aria-label":`Settings`,"aria-haspopup":`dialog`,"aria-expanded":s,"aria-controls":st,title:`Settings`,className:`ml-auto flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent`,children:(0,M.jsx)(oe,{className:`h-3.5 w-3.5`})}),s&&(0,M.jsxs)(`div`,{ref:d,id:st,role:`dialog`,"aria-labelledby":ot,tabIndex:-1,className:`nc-pop-in origin-top-right fixed right-2 top-[calc(var(--nc-header-h)+8px)] z-50 flex max-h-[calc(100vh-3.75rem)] w-72 max-w-[calc(100vw-1rem)] flex-col overflow-y-auto rounded-md border border-ink-700 bg-ink-900 shadow-xl focus:outline-none`,style:{maxHeight:`calc(100dvh - 3.75rem)`},children:[(0,M.jsx)(`div`,{className:`border-b border-ink-700 px-3 py-2`,children:(0,M.jsx)(`h2`,{id:ot,className:`font-medium text-ink-50`,children:`Settings`})}),(0,M.jsxs)(`section`,{"aria-labelledby":`nc-appearance-title`,className:`px-3 py-2`,children:[(0,M.jsx)(`h3`,{id:`nc-appearance-title`,className:`mb-1 text-xs uppercase tracking-wide text-ink-400`,children:`Appearance`}),(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`min-w-0 flex-1 text-ink-200`,children:`Accent colour`}),(0,M.jsxs)(`button`,{type:`button`,"data-initial-focus":!0,onClick:n,...m(`session.cycleAccent`,`Accent: ${e.name} (click for ${t.name})`),"aria-label":`accent colour: ${e.name}, click for ${t.name}`,className:`flex items-center gap-1.5 rounded-sm px-2 py-1 text-ink-200 hover:bg-ink-700`,children:[(0,M.jsx)(`span`,{"aria-hidden":`true`,className:`h-3 w-3 rounded-full bg-accent ring-1 ring-ink-600`}),e.name]})]}),(0,M.jsxs)(`div`,{className:`mt-2 flex items-center gap-2`,children:[(0,M.jsx)(`label`,{htmlFor:ct,className:`min-w-0 flex-1 text-ink-200`,children:`Screen scale`}),(0,M.jsxs)(`div`,{className:`relative`,children:[(0,M.jsx)(`select`,{id:ct,"aria-label":`Screen scale`,value:f,onChange:e=>p(Number(e.currentTarget.value)),className:`appearance-none rounded-sm border border-ink-700 bg-ink-850 py-1 pl-2 pr-7 text-ink-50 focus:border-accent focus:outline-none`,children:c.map(e=>(0,M.jsxs)(`option`,{value:e,children:[e,`%`]},e))}),(0,M.jsx)(`span`,{className:`pointer-events-none absolute inset-y-0 right-2 flex items-center text-ink-400`,children:(0,M.jsx)(Be,{open:!0})})]})]})]}),(0,M.jsx)(at,{}),(0,M.jsxs)(`div`,{className:`border-t border-ink-800 px-3 py-2`,children:[(0,M.jsxs)(`button`,{type:`button`,onClick:r,disabled:a,"aria-busy":a,...m(`session.reloadConfig`,`Reload config.toml on the server (does not reload this page)`),"aria-label":`reload the server config`,className:`flex w-full items-center gap-2 rounded-sm py-1.5 text-left text-ink-200 hover:bg-ink-700 disabled:cursor-progress disabled:text-ink-400 disabled:hover:bg-transparent`,children:[(0,M.jsx)(ge,{className:`h-3.5 w-3.5 ${a?`animate-spin`:``}`}),`Reload config.toml`]}),(0,M.jsxs)(`button`,{type:`button`,onClick:g,...m(`help.shortcuts`,`Keyboard shortcuts`),"aria-label":`keyboard shortcuts`,className:`mt-1 flex w-full items-center gap-2 rounded-sm py-1.5 text-left text-ink-200 hover:bg-ink-700`,children:[(0,M.jsx)(h,{className:`h-3.5 w-3.5`}),`Keyboard shortcuts`]})]})]})]})}function ut(e){return e===`top`||e===`left`?e:null}function dt(e){return e===`top`?`left`:`top`}function ft({repos:e,repo:t,onSelectRepo:n,onCloseRepo:r,onOpenPicker:i,cloning:a,accent:o,next:s,cycle:c,draggingRepo:l,dragOverRepo:u,onRepoDragStart:d,onRepoDragMove:p,onRepoDragEnd:m,onReloadConfig:h,reloading:g,onShowShortcuts:_,tabStrip:v}){return(0,M.jsxs)(`header`,{className:`flex h-(--nc-header-h) items-center gap-2 border-b border-chrome-line bg-ink-900 px-[12.8px]`,children:[(0,M.jsx)(`div`,{className:`flex shrink-0 items-center gap-2`,children:(0,M.jsx)(ze,{})}),(0,M.jsx)(We,{className:`md:hidden`,repos:e,currentId:t,onSelect:n,onCloseProject:r,onOpenPicker:i}),v.side===`top`&&(0,M.jsx)(Ge,{side:`top`,repos:e,repo:t,onSelectRepo:n,onCloseRepo:r,onOpenPicker:i,draggingRepo:l,dragOverRepo:u,onRepoDragStart:d,onRepoDragMove:p,onRepoDragEnd:m}),a&&(0,M.jsxs)(`span`,{role:`status`,title:`A clone is running on the server`,className:`flex shrink-0 items-center gap-1.5 px-2 py-0.5 text-ink-400`,children:[(0,M.jsx)(`span`,{"aria-hidden":`true`,className:`h-1.5 w-1.5 animate-pulse rounded-full bg-accent`}),`Cloning…`]}),(0,M.jsx)(lt,{accent:o,next:s,cycle:c,onReloadConfig:h,reloading:g,onShowShortcuts:_}),(0,M.jsx)(`button`,{onClick:v.toggle,title:`Project tabs ${v.side===`top`?`across the top`:`down the left`} (click to move them ${dt(v.side)})`,"aria-label":`project tabs: ${v.side}, click for ${dt(v.side)}`,"aria-pressed":v.side===`left`,className:`ml-1 hidden h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent md:flex`,children:(0,M.jsx)(f,{side:v.side})}),(0,M.jsx)(`a`,{href:`/logout`,title:`Sign out`,"aria-label":`sign out`,className:`ml-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent`,children:(0,M.jsx)(be,{className:`h-3.5 w-3.5`})})]})}var pt=[`w-3/5`,`w-2/5`,`w-4/5`,`w-1/2`,`w-3/4`,`w-1/3`,`w-2/3`];function mt({className:e=``}){return(0,M.jsx)(`span`,{"aria-hidden":`true`,className:`nc-skeleton block h-2.5 rounded-xs ${e}`})}function ht({rows:e=6,as:t=`div`,className:n=``}){let r=t;return(0,M.jsx)(M.Fragment,{children:Array.from({length:e},(e,t)=>(0,M.jsxs)(r,{"aria-hidden":`true`,className:`flex items-center gap-2 px-3 py-1.5 ${n}`,children:[(0,M.jsx)(mt,{className:`w-3 shrink-0`}),(0,M.jsx)(mt,{className:pt[t%pt.length]})]},t))})}function gt(){return(0,M.jsxs)(`div`,{"aria-busy":`true`,"aria-label":`Loading`,className:`flex h-full flex-col`,children:[(0,M.jsxs)(`div`,{className:`flex h-(--nc-header-h) shrink-0 items-center gap-2 border-b border-chrome-line bg-ink-900 px-[12.8px]`,children:[(0,M.jsx)(mt,{className:`h-[22px] w-[22px] shrink-0 rounded-sm`}),(0,M.jsx)(mt,{className:`hidden w-24 md:block`}),(0,M.jsx)(mt,{className:`w-28 md:hidden`}),(0,M.jsx)(mt,{className:`ml-auto h-4 w-4 shrink-0`}),(0,M.jsx)(mt,{className:`ml-1 h-4 w-4 shrink-0`})]}),(0,M.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 grid-rows-[minmax(0,1fr)] md:grid-cols-[18rem_minmax(0,1fr)] md:grid-rows-[minmax(0,3fr)_minmax(0,2fr)]`,children:[(0,M.jsx)(`div`,{className:`overflow-hidden border-chrome-line py-2 md:border-r`,children:(0,M.jsx)(ht,{rows:10})}),(0,M.jsx)(`div`,{className:`hidden overflow-hidden py-2 md:block`,children:(0,M.jsx)(ht,{rows:14})}),(0,M.jsxs)(`div`,{className:`hidden overflow-hidden border-t border-chrome-line md:col-span-2 md:block`,children:[(0,M.jsxs)(`div`,{className:`flex h-8 items-center gap-2 border-b border-chrome-line px-3`,children:[(0,M.jsx)(mt,{className:`w-30`}),(0,M.jsx)(mt,{className:`w-30`})]}),(0,M.jsx)(`div`,{className:`py-2`,children:(0,M.jsx)(ht,{rows:5})})]})]}),(0,M.jsx)(`div`,{className:`flex shrink-0 border-t border-chrome-line bg-ink-900 md:hidden`,children:[0,1,2].map(e=>(0,M.jsxs)(`div`,{className:`flex min-h-11 flex-1 flex-col items-center justify-center gap-1 py-1`,children:[(0,M.jsx)(mt,{className:`h-5 w-5`}),(0,M.jsx)(mt,{className:`h-2 w-10`})]},e))})]})}function _t({onSuccess:e}){let[t,n]=(0,j.useState)(``),[r,i]=(0,j.useState)(null),[a,o]=(0,j.useState)(!1);return(0,M.jsx)(`div`,{className:`flex h-full items-center justify-center p-6`,children:(0,M.jsxs)(`form`,{onSubmit:async n=>{n.preventDefault(),o(!0),i(null);try{await A.login(t),e()}catch(e){i(e instanceof Error?e.message:`login failed`)}finally{o(!1)}},className:`w-[17rem] max-w-[86vw]`,children:[(0,M.jsx)(Re,{className:`mx-auto mb-3 block h-10 w-10`}),(0,M.jsx)(`h1`,{className:`text-center text-lg font-medium tracking-wide text-ink-50`,children:`nightcrow`}),(0,M.jsx)(`p`,{className:`mt-1 mb-5 text-center text-caption text-ink-400 uppercase`,children:`web viewer`}),r&&(0,M.jsx)(`p`,{className:`mb-2.5 text-center text-removed`,children:r}),(0,M.jsx)(`input`,{type:`password`,autoFocus:!0,value:t,onChange:e=>n(e.target.value),placeholder:`password`,className:`mb-2 w-full rounded-sm border border-ink-700 bg-ink-900 px-2.5 py-1.5 outline-none placeholder:text-ink-400 focus:border-accent focus:ring-[3px] focus:ring-accent/15`}),(0,M.jsx)(`button`,{"aria-busy":a,type:`submit`,disabled:a,className:`w-full rounded-sm bg-ink-50 py-1.5 font-semibold text-ink-950 hover:bg-white disabled:opacity-50`,children:(0,M.jsx)(Ee,{busy:a,children:`Sign in`})})]})})}var vt=`nightcrow.sidebarWidth`,yt=.5;function bt(e){return Math.min(Math.max(Math.round(e),280),720)}function xt(e){let t=720;try{t=Math.min(t,Math.round(window.innerWidth*yt))}catch{}return Math.min(Math.max(Math.round(e),280),Math.max(t,280))}function St(){try{let e=Number(localStorage.getItem(vt));return Number.isFinite(e)&&e>0?bt(e):460}catch{return 460}}function Ct(e){try{localStorage.setItem(vt,String(e))}catch{}}function wt(){let[e,t]=(0,j.useState)(St),n=(0,j.useCallback)(e=>{let n=xt(e);t(n),Ct(n)},[]);return{width:e,resize:n,commit:n,reset:(0,j.useCallback)(()=>{let e=bt(460);t(e),Ct(e)},[])}}var Tt=`[data-terminal-panel]`,Et=`dialog[open], [role="dialog"], [aria-modal="true"]`,Dt=`input, textarea, select, [contenteditable], [role="textbox"], [role="searchbox"], [role="combobox"]`,Ot=`data-focus-region`;function kt(e){return{"data-focus-region":e,tabIndex:-1}}function At(e){if(!(e instanceof Element)||e.closest(`[data-terminal-panel]`))return null;let t=e.closest(Dt)??e;return{tagName:t.tagName,isContentEditable:Pt(t),role:t.getAttribute(`role`),type:Ft(t),inDialog:e.closest(Et)!==null}}function jt(e=document){return Mt(e)===`terminal`}function Mt(e=document){let t=e.activeElement;if(!t)return null;if(t.closest(`[data-terminal-panel]`))return`terminal`;let n=t.closest(`[${Ot}]`)?.getAttribute(Ot);return n===`list`||n===`content`?n:null}function Nt(e,t=document){let n=t.querySelector(`[${Ot}="${e}"]`);if(!n)return!1;let r=x(t.activeElement,t.querySelector(Tt));return o(r)?(n.focus(),!0):!1}function Pt(e){let t=e.getAttribute(`contenteditable`);return t===null?e.isContentEditable===!0:t!==`false`}function Ft(e){return e.tagName===`INPUT`?e.type?.toLowerCase()??null:null}function It(){let e=new Map;return{start(t){let n=(e.get(t)??0)+1;return e.set(t,n),n},isCurrent(t,n){return e.get(t)===n}}}var Lt={children:{},expanded:new Set};function Rt(e,t,n){return{...e,children:{...e.children,[t]:n}}}function zt(e,t){let n=new Set(e);return n.delete(t)||n.add(t),n}function Bt(e,t){return{...e,expanded:zt(e.expanded,t)}}function Vt(e,t){let n=new Set(e.expanded);return t.forEach(e=>n.add(e)),{...e,expanded:n}}function Ht(e){let t=[],n=``;for(let r of e.split(`/`))n=n?`${n}/${r}`:r,t.push(n);return t}var Ut=180,Wt={items:[],truncated:!1};function Gt({repo:e,authed:t,tab:n,filter:r,filterOpen:i,handle:a}){let[o,s]=(0,j.useState)(Lt),[c,l]=(0,j.useState)(Wt),[u,d]=(0,j.useState)(!1),[f]=(0,j.useState)(It);(0,j.useEffect)(()=>{if(!e||!t||n!==`tree`||!i||!r){l(Wt),d(!1);return}d(!0);let o=!0,s=setTimeout(()=>{A.treeSearch(e,r).then(e=>{o&&l({items:e.matches,truncated:e.truncated})}).catch(e=>{o&&a(e)}).finally(()=>{o&&d(!1)})},Ut);return()=>{o=!1,clearTimeout(s)}},[e,t,n,r,i,a]);let p=(0,j.useCallback)((t,n)=>{if(!e)return;let r=f.start(t);A.tree(e,t).then(e=>{f.isCurrent(t,r)&&s(n=>Rt(n,t,e.entries))}).catch(e=>{if(!f.isCurrent(t,r)||n?.restoring)return je(e)?a(e):void 0;a(e)})},[e,a,f]);(0,j.useEffect)(()=>{e&&t&&n===`tree`&&p(``)},[e,t,n,p]);let m=(0,j.useCallback)(e=>{let t=!o.expanded.has(e);s(t=>Bt(t,e)),t&&!(e in o.children)&&p(e)},[o,p]),h=(0,j.useCallback)(e=>{s(t=>({...t,expanded:new Set(e)})),e.forEach(e=>{e in o.children||p(e,{restoring:!0})})},[o,p]),g=(0,j.useCallback)(e=>{let t=Ht(e);s(e=>Vt(e,t)),t.forEach(e=>{e in o.children||p(e)})},[o,p]);return{treeChildren:o.children,treeExpanded:o.expanded,treeMatches:c.items,treeTruncated:c.truncated,treeSearchLoading:u,loadTreeChildren:p,toggleTreeDir:m,revealTreeDir:g,seedTreeExpanded:h}}function Kt(e,t){let n=[],r=(i,a)=>{for(let o of e[i]??[]){let e=i?`${i}/${o.name}`:o.name;n.push({path:e,name:o.name,is_dir:o.is_dir,depth:a}),o.is_dir&&t.has(e)&&r(e,a+1)}};return r(``,0),n}var qt=[`status`,`log`,`tree`],Jt={status:`Show the working-tree status`,log:`Show the commit log`,tree:`Show the file tree`};function Yt(e){return e===`log`?`view.toggleLog`:e===`tree`?`view.toggleTree`:null}function Xt({tab:e,onChoose:t,filterOpen:n,onToggleFilter:r}){let i=S();return(0,M.jsxs)(`div`,{className:`flex shrink-0 items-stretch border-b border-chrome-line px-2`,children:[qt.map(n=>{let r=Yt(n);return(0,M.jsx)(`button`,{onClick:()=>t(n),"aria-current":n===e?`page`:void 0,...r&&n!==e?i(r,Jt[n]):{title:Jt[n]},className:`px-2 py-1.5 ${n===e?`text-ink-50 shadow-[inset_0_-1px_0_0_var(--color-accent)]`:`text-ink-400 hover:text-ink-200`}`,children:n},n)}),(0,M.jsx)(`button`,{onClick:r,"aria-pressed":n,title:n?`Hide the filter`:`Filter the list`,"aria-label":n?`Hide the filter`:`Filter the list`,className:`my-1 ml-auto flex shrink-0 items-center rounded-sm px-1.5 hover:text-accent ${n?`text-ink-50`:`text-ink-400`}`,children:(0,M.jsx)(Se,{})})]})}function Zt({path:e,from:t,className:n}){return(0,M.jsx)(`span`,{className:`whitespace-nowrap ${n??``}`,title:t?`${t} → ${e}`:e,children:t?`${t} → ${e}`:e})}var N=1e3;function Qt(e,t){return e===void 0||e<=0?0:e-t}function $t(e,t,n){let r=Qt(t,n);return e===null||Math.abs(r-e)>=1e3?r:e}function en(e,t,n){if(e===void 0)return`cool`;let r=Math.max(0,t-e);return r>=n?`cool`:r<5e3?`fresh`:`warm`}function tn(e,t,n){return e.some(e=>en(e,t,n)!==`cool`)}var nn={fresh:`text-accent font-bold`,warm:`text-accent`,cool:``};function rn(e,t,n){let[r,i]=(0,j.useState)(()=>Date.now()+n);return(0,j.useEffect)(()=>{if(t<=0||!e)return;let r=e.map(e=>e.mtime),a=Date.now()+n;if(i(a),!tn(r,a,t))return;let o=setInterval(()=>{let e=Date.now()+n;i(e),tn(r,e,t)||clearInterval(o)},N);return()=>clearInterval(o)},[e,t,n]),r}function an(e){return e.startsWith(`not a git repository`)?`Not a git repository. Run git init here to track changes.`:`Status unavailable: ${e}`}function on(e){let t=Math.max(0,Math.floor(Date.now()/1e3-e));return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:t<2592e3?`${Math.floor(t/86400)}d`:t<31536e3?`${Math.floor(t/2592e3)}mo`:`${Math.floor(t/31536e3)}y`}function sn(e){return e===`+`?`bg-added/10`:e===`-`?`bg-removed/10`:``}function cn(e){return e===`?`?`text-ink-400`:e===`D`?`text-removed`:e===`A`?`text-added`:`text-accent`}function ln({status:e,files:t,now:n,hotWindowMs:r,openDiff:i}){return e===null?(0,M.jsx)(ht,{as:`li`,rows:8}):e.unavailable===void 0?(0,M.jsxs)(M.Fragment,{children:[t.map(e=>(0,M.jsx)(`li`,{children:(0,M.jsxs)(`button`,{onClick:()=>i(e.path),className:`flex w-max min-w-full gap-2 px-3 py-0.5 text-left hover:bg-ink-850`,children:[(0,M.jsxs)(`span`,{className:`shrink-0`,children:[(0,M.jsx)(`span`,{className:cn(e.index),children:e.index===` `?` `:e.index}),(0,M.jsx)(`span`,{className:cn(e.worktree),children:e.worktree===` `?` `:e.worktree})]}),(0,M.jsx)(Zt,{path:e.path,from:e.old_path,className:nn[en(e.mtime,n,r)]})]})},e.path)),e.truncated&&(0,M.jsxs)(`li`,{className:`px-3 py-1 text-accent`,children:[`Showing the first `,e.files.length,` changed files.`]})]}):(0,M.jsx)(`li`,{className:`nc-fade-in px-3 py-1 text-ink-400`,children:an(e.unavailable)})}var un={merge:`MERGING`,rebase:`REBASING`,"cherry-pick":`CHERRY-PICKING`,revert:`REVERTING`,bisect:`BISECTING`,am:`APPLYING`};function dn(e){let t=e?.operation,n=t?t.step!==void 0&&t.total!==void 0?`${un[t.kind]} ${t.step}/${t.total}`:un[t.kind]:null,r=e?.conflicts??0,i=r===0?null:r===1?`1 conflict`:`${r} conflicts`;return n&&i?`${n} · ${i}`:n??i}function fn(e){return e.kind===`head`&&e.name!==`HEAD`?`HEAD → ${e.name}`:e.name}function pn(e){switch(e){case`head`:return`border-accent text-accent font-medium`;case`local`:return`border-added/60 text-added`;case`tag`:return`border-ink-600 text-ink-200`;case`remote`:return`border-ink-700 text-ink-400`}}function mn({visibleCommits:e,decorations:t,commits:n,commitDrillDown:r,visibleCommitFiles:i,logDone:a,logStalled:o,logPagingPaused:s,setLogStalled:c,logSentinelRef:l,openCommitFiles:u,openCommit:d,openCommitFileDiff:f,setCommitDrillDown:p,setPaneEmpty:m,bumpPaneRequest:h}){return(0,M.jsxs)(M.Fragment,{children:[!r&&e.map(e=>{let n=t.divergenceOf(e.oid);return(0,M.jsx)(`li`,{children:(0,M.jsxs)(`button`,{onClick:()=>void u(e),title:`${e.author} · ${e.summary}`,className:`flex w-max min-w-full items-baseline gap-2 px-3 py-0.5 text-left hover:bg-ink-850`,children:[(0,M.jsx)(`span`,{className:`w-2 shrink-0 ${n===`behind`?`text-accent`:`text-added`}`,title:n===`ahead`?`Not on the upstream yet`:n===`behind`?`On the upstream, not here yet`:void 0,children:n===`ahead`?`↑`:n===`behind`?`↓`:``}),(0,M.jsx)(`span`,{className:`shrink-0 text-accent`,children:e.short_id}),(0,M.jsx)(`span`,{className:`w-10 shrink-0 text-right text-ink-400`,children:on(e.time)}),(0,M.jsx)(`span`,{className:`max-w-[6rem] shrink-0 truncate text-ink-400`,children:e.author}),t.refsOf(e.oid)?.map(e=>(0,M.jsx)(`span`,{className:`shrink-0 self-center rounded-sm border px-1 text-2xs ${pn(e.kind)}`,children:fn(e)},`${e.kind}:${e.name}`)),(0,M.jsx)(`span`,{className:`whitespace-nowrap ${e.merge?`text-ink-400`:``}`,children:e.summary})]})},e.oid)}),!r&&t.truncated&&(0,M.jsx)(`li`,{className:`px-3 py-1 text-2xs text-ink-400`,children:`Too many refs to mark them all — some branch, tag or upstream marks are not shown.`}),!r&&!a&&!o&&!s&&(0,M.jsxs)(`li`,{ref:l,className:`flex flex-col gap-2 px-3 py-1.5`,"aria-hidden":`true`,children:[(0,M.jsx)(mt,{className:`w-3/5`}),(0,M.jsx)(mt,{className:`w-2/5`}),(0,M.jsx)(mt,{className:`w-1/2`})]}),!r&&!a&&!o&&s&&(0,M.jsxs)(`li`,{className:`px-3 py-1 text-ink-400`,children:[`filtering `,n.length,` loaded commits — clear the filter to load more`]}),!r&&o&&(0,M.jsx)(`li`,{className:`px-3 py-1`,children:(0,M.jsx)(`button`,{onClick:()=>c(!1),className:`text-ink-400 hover:text-accent`,children:`could not load more — retry`})}),r&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`li`,{className:`sticky top-0 z-10 flex w-max min-w-full items-center gap-1 bg-ink-900 px-2 py-1 text-ink-400`,children:[(0,M.jsx)(`button`,{onClick:()=>{h(),p(null),m()},className:`rounded-sm px-1 hover:text-accent`,title:`Back to commit log`,children:`< log`}),(0,M.jsx)(`span`,{className:`text-ink-600`,children:`·`}),(0,M.jsx)(`span`,{className:`shrink-0 text-accent`,children:r.commit.short_id}),(0,M.jsx)(`button`,{onClick:()=>d(r.commit.oid),className:`rounded-sm px-1 hover:text-accent`,title:`Show the complete commit diff`,children:`all changes`})]}),i.map(e=>(0,M.jsx)(`li`,{children:(0,M.jsxs)(`button`,{onClick:()=>f(r.commit.oid,e.path),className:`flex w-max min-w-full gap-2 px-3 py-0.5 text-left hover:bg-ink-850`,children:[(0,M.jsx)(`span`,{className:cn(e.index),children:e.index}),(0,M.jsx)(Zt,{path:e.path,from:e.old_path})]})},e.path)),r.files.length===0&&(0,M.jsx)(`li`,{className:`px-3 py-2 text-ink-400`,children:`No changed files.`}),r.files.length>0&&i.length===0&&(0,M.jsx)(`li`,{className:`px-3 py-2 text-ink-400`,children:`No matching files.`}),r.truncated&&(0,M.jsxs)(`li`,{className:`px-3 py-1 text-accent`,children:[`Showing the first `,r.files.length,` files.`]})]})]})}function hn({treeSearching:e,treeMatches:t,treeTruncated:n,treeSearchLoading:r,treeRows:i,treeExpanded:a,openFile:o,revealTreeDir:s,toggleTreeDir:c}){return e?(0,M.jsxs)(M.Fragment,{children:[t.map(e=>(0,M.jsx)(`li`,{children:(0,M.jsx)(`button`,{onClick:()=>{e.is_dir?s(e.path):o(e.path)},title:e.path,className:`w-max min-w-full whitespace-nowrap px-3 py-0.5 text-left hover:bg-ink-850`,children:e.is_dir?(0,M.jsxs)(`span`,{className:`text-accent`,children:[e.path,`/`]}):e.path})},e.path)),t.length===0&&(0,M.jsx)(`li`,{className:`px-3 py-0.5 text-ink-400`,children:r?`searching…`:`no matches`}),n&&(0,M.jsxs)(`li`,{className:`px-3 py-0.5 text-ink-400`,children:[`showing the first `,t.length,` matches`]})]}):(0,M.jsx)(M.Fragment,{children:i.map(e=>(0,M.jsx)(`li`,{children:(0,M.jsxs)(`button`,{onClick:()=>e.is_dir?c(e.path):o(e.path),title:e.path,style:{paddingLeft:`${e.depth*.75+.5}rem`},className:`flex w-max min-w-full items-center gap-1 py-0.5 pr-3 text-left hover:bg-ink-850`,children:[e.is_dir?(0,M.jsx)(Be,{open:a.has(e.path)}):(0,M.jsx)(`span`,{className:`h-3.5 w-3.5 shrink-0`}),(0,M.jsx)(`span`,{className:`whitespace-nowrap ${e.is_dir?`text-accent`:``}`,children:e.is_dir?`${e.name}/`:e.name})]})},e.path))})}function gn(e){let{tab:t,chooseTab:n,filter:r,setFilter:i,filterOpen:a,setFilterOpen:o,status:s,files:c,now:l,hotWindowMs:u,openDiff:d,openFile:f,openCommit:p,openCommitFileDiff:m,openCommitFiles:h,repo:g,authed:_,handle:v,sidebarRef:y,draggingSidebar:b,onSidebarDragStart:x,onSidebarDragMove:S,onSidebarDragEnd:C,onSidebarDragCancel:w,filesMax:T,bumpPaneRequest:ee,commits:te,logDone:ne,logStalled:re,setLogStalled:ie,commitDrillDown:ae,setCommitDrillDown:oe,logSentinelRef:se,visibleCommits:ce,decorations:E,logPagingPaused:le,visibleCommitFiles:ue,mobileView:de,restoreTree:fe,restoreKnown:pe,onTreeExpanded:me,clearPane:he,touched:ge}=e,_e=Gt({repo:g,authed:_,tab:t,filter:r,filterOpen:a,handle:v}),ve=t===`tree`&&a&&r!==``,ye=Kt(_e.treeChildren,_e.treeExpanded),{seedTreeExpanded:be}=_e,xe=(0,j.useRef)(!1);(0,j.useEffect)(()=>{xe.current||pe&&!ge&&t===`tree`&&(xe.current=!0,fe.length!==0&&be(fe))},[t,pe,ge,fe,be]);let Se=e=>{me([...zt(_e.treeExpanded,e)]),_e.toggleTreeDir(e)},D=e=>{let t=new Set(_e.treeExpanded);Ht(e).forEach(e=>t.add(e)),me([...t]),_e.revealTreeDir(e)},O=()=>{a&&i(``),o(e=>!e)};return(0,M.jsxs)(`section`,{ref:y,...kt(`list`),className:`nc-fade-in relative min-h-0 flex-col overflow-hidden ${de===`files`?`flex`:`hidden md:flex`} ${T?`md:flex`:`border-chrome-line md:border-r`}`,children:[!T&&(0,M.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize the file sidebar (double-click to reset)`,title:`Drag to resize · double-click to reset`,onPointerDown:x,onPointerMove:S,onPointerUp:C,onPointerCancel:w,onLostPointerCapture:C,className:`absolute -right-px top-0 z-20 hidden h-full w-1.5 cursor-col-resize touch-none md:block ${b?`bg-accent`:`hover:bg-accent`}`}),(0,M.jsx)(Xt,{tab:t,onChoose:n,filterOpen:a,onToggleFilter:O}),a&&(0,M.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),placeholder:`filter…`,autoFocus:!0,className:`mx-2 mb-1 shrink-0 rounded-sm bg-ink-850 px-2 py-1 outline-none placeholder:text-ink-400 focus:ring-1 focus:ring-accent`}),(0,M.jsxs)(`ul`,{className:`nc-content min-h-0 flex-1 overflow-auto`,children:[t===`status`&&(0,M.jsx)(ln,{status:s,files:c,now:l,hotWindowMs:u,openDiff:d}),t===`log`&&(0,M.jsx)(mn,{visibleCommits:ce,decorations:E,commits:te,commitDrillDown:ae,visibleCommitFiles:ue,logDone:ne,logStalled:re,logPagingPaused:le,setLogStalled:ie,logSentinelRef:se,openCommitFiles:h,openCommit:p,openCommitFileDiff:m,setCommitDrillDown:oe,setPaneEmpty:he,bumpPaneRequest:ee}),t===`tree`&&(0,M.jsx)(hn,{treeSearching:ve,treeMatches:_e.treeMatches,treeTruncated:_e.treeTruncated,treeSearchLoading:_e.treeSearchLoading,treeRows:ye,treeExpanded:_e.treeExpanded,openFile:f,revealTreeDir:D,toggleTreeDir:Se})]})]})}function _n(e){let t=[],n=[],r=[],i=()=>{let e=Math.max(n.length,r.length);for(let i=0;i{t(e=>e===`split`?`unified`:`split`)},[])}}var yn=[`.md`,`.markdown`],bn=[`.html`,`.htm`];function xn(e){let t=e.toLowerCase();return yn.some(e=>t.endsWith(e))}function Sn(e){let t=e.toLowerCase();return bn.some(e=>t.endsWith(e))}function Cn(e){return xn(e)||Sn(e)}function wn(e){return e.map(e=>e.map(e=>e.t).join(``)).join(` +`).replace(Qf,``)}function ep(e,t){return t=$f(t),$f(e)===t}function $(e,t,n,r,i,o){switch(n){case`children`:if(typeof r==`string`)t===`body`||t===`textarea`&&r===``||gn(e,r);else if(typeof r==`number`||typeof r==`bigint`)t!==`body`&&gn(e,``+r);else return;break;case`className`:en(e,`class`,r);break;case`tabIndex`:en(e,`tabindex`,r);break;case`dir`:case`role`:case`viewBox`:case`width`:case`height`:en(e,n,r);break;case`style`:yn(e,r,o);return;case`data`:if(t!==`object`){en(e,`data`,r);break}case`src`:case`href`:if(r===``&&(t!==`a`||n!==`href`)||r==null||typeof r==`function`||typeof r==`symbol`||typeof r==`boolean`){e.removeAttribute(n);break}r=Cn(r),e.setAttribute(n,r);break;case`action`:case`formAction`:if(typeof r==`function`){e.setAttribute(n,`javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')`);break}if(typeof o==`function`&&(n===`formAction`?(t!==`input`&&$(e,t,`name`,i.name,i,null),$(e,t,`formEncType`,i.formEncType,i,null),$(e,t,`formMethod`,i.formMethod,i,null),$(e,t,`formTarget`,i.formTarget,i,null)):($(e,t,`encType`,i.encType,i,null),$(e,t,`method`,i.method,i,null),$(e,t,`target`,i.target,i,null))),r==null||typeof r==`symbol`||typeof r==`boolean`){e.removeAttribute(n);break}r=Cn(r),e.setAttribute(n,r);break;case`onClick`:r!=null&&(e.onclick=wn);return;case`onScroll`:r!=null&&Q(`scroll`,e);return;case`onScrollEnd`:r!=null&&Q(`scrollend`,e);return;case`dangerouslySetInnerHTML`:if(r!=null){if(typeof r!=`object`||!(`__html`in r))throw Error(a(61));if(n=r.__html,n!=null){if(i.children!=null)throw Error(a(60));o?.__html!==n&&(e.innerHTML=n)}}break;case`multiple`:e.multiple=r&&typeof r!=`function`&&typeof r!=`symbol`;break;case`muted`:e.muted=r&&typeof r!=`function`&&typeof r!=`symbol`;break;case`suppressContentEditableWarning`:case`suppressHydrationWarning`:case`defaultValue`:case`defaultChecked`:case`innerHTML`:case`ref`:break;case`autoFocus`:break;case`xlinkHref`:if(r==null||typeof r==`function`||typeof r==`boolean`||typeof r==`symbol`){e.removeAttribute(`xlink:href`);break}n=Cn(r),e.setAttributeNS(`http://www.w3.org/1999/xlink`,`xlink:href`,n);break;case`contentEditable`:case`spellCheck`:case`draggable`:case`value`:case`autoReverse`:case`externalResourcesRequired`:case`focusable`:case`preserveAlpha`:r!=null&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,r):e.removeAttribute(n);break;case`inert`:case`allowFullScreen`:case`async`:case`autoPlay`:case`controls`:case`credentialless`:case`default`:case`defer`:case`disabled`:case`disablePictureInPicture`:case`disableRemotePlayback`:case`formNoValidate`:case`hidden`:case`loop`:case`noModule`:case`noValidate`:case`open`:case`playsInline`:case`readOnly`:case`required`:case`reversed`:case`scoped`:case`seamless`:case`itemScope`:r&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,``):e.removeAttribute(n);break;case`capture`:case`download`:!0===r?e.setAttribute(n,``):!1!==r&&r!=null&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,r):e.removeAttribute(n);break;case`cols`:case`rows`:case`size`:case`span`:r!=null&&typeof r!=`function`&&typeof r!=`symbol`&&!isNaN(r)&&1<=r?e.setAttribute(n,r):e.removeAttribute(n);break;case`rowSpan`:case`start`:r==null||typeof r==`function`||typeof r==`symbol`||isNaN(r)?e.removeAttribute(n):e.setAttribute(n,r);break;case`popover`:Q(`beforetoggle`,e),Q(`toggle`,e),$t(e,`popover`,r);break;case`xlinkActuate`:tn(e,`http://www.w3.org/1999/xlink`,`xlink:actuate`,r);break;case`xlinkArcrole`:tn(e,`http://www.w3.org/1999/xlink`,`xlink:arcrole`,r);break;case`xlinkRole`:tn(e,`http://www.w3.org/1999/xlink`,`xlink:role`,r);break;case`xlinkShow`:tn(e,`http://www.w3.org/1999/xlink`,`xlink:show`,r);break;case`xlinkTitle`:tn(e,`http://www.w3.org/1999/xlink`,`xlink:title`,r);break;case`xlinkType`:tn(e,`http://www.w3.org/1999/xlink`,`xlink:type`,r);break;case`xmlBase`:tn(e,`http://www.w3.org/XML/1998/namespace`,`xml:base`,r);break;case`xmlLang`:tn(e,`http://www.w3.org/XML/1998/namespace`,`xml:lang`,r);break;case`xmlSpace`:tn(e,`http://www.w3.org/XML/1998/namespace`,`xml:space`,r);break;case`is`:$t(e,`is`,r);break;case`innerText`:case`textContent`:return;default:if(!(2s)break;var u=c.transferSize,d=c.initiatorType;u&&ap(d)&&(c=c.responseEnd,o+=u*(c$m){s.length=o;break}f=new Promise(jp.bind(f)),s.push(f)}}}if(0`u`?null:document;function Tm(e,t,n){var r=wm;if(r&&typeof t==`string`&&t){var i=ln(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),ym.has(i)||(ym.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),np(t,`link`,e),Ht(t),r.head.appendChild(t)))}}function Em(e){xm.D(e),Tm(`dns-prefetch`,e,null)}function Dm(e,t){xm.C(e,t),Tm(`preconnect`,e,t)}function Om(e,t,n){xm.L(e,t,n);var r=wm;if(r&&e&&t){var i=`link[rel="preload"][as="`+ln(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+ln(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+ln(n.imageSizes)+`"]`)):i+=`[href="`+ln(e)+`"]`;var a=i;switch(t){case`style`:a=Pm(e);break;case`script`:a=Rm(e)}if(!(vm.has(a)||(e=T({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),vm.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Fm(a))||t===`script`&&r.querySelector(zm(a))))){var o=r.createElement(`link`);np(o,`link`,e),t===`style`&&(o[It]=!0,o.onload=o.onerror=function(){Ut(o)}),Ht(o),r.head.appendChild(o)}}}function km(e,t){xm.m(e,t);var n=wm;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+ln(r)+`"][href="`+ln(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Rm(e)}if(!vm.has(a)&&(e=T({rel:`modulepreload`,href:e},t),vm.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(zm(a)))return}r=n.createElement(`link`),np(r,`link`,e),Ht(r),n.head.appendChild(r)}}}function Am(e,t,n){xm.S(e,t,n);var r=wm;if(r&&e){var i=Vt(r).hoistableStyles,a=Pm(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Fm(a)))s.loading=5;else{e=T({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=vm.get(a))&&Hm(e,n);var c=o=r.createElement(`link`);Ht(c),np(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Vm(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function jm(e,t){xm.X(e,t);var n=wm;if(n&&e){var r=Vt(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Ht(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mm(e,t){xm.M(e,t);var n=wm;if(n&&e){var r=Vt(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0,type:`module`},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Ht(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Nm(e,t,n,r){var i=(i=Ae.current)?bm(i):null;if(!i)throw Error(a(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(n=Pm(n.href),t=Vt(i).hoistableStyles,r=t.get(n),r||(r={type:`style`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Pm(n.href);var o=Vt(i).hoistableStyles,s=o.get(e);if(s||(i=i.ownerDocument||i,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=i.querySelector(Fm(e)))?o._p||(s.instance=o,s.state.loading=5):(o=vm.get(e),o||(o={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},vm.set(e,o)),Lm(i,e,o,s.state))),t&&r===null)throw Error(a(528,``));return s}if(t&&r!==null)throw Error(a(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(n=Rm(n),t=Vt(i).hoistableScripts,r=t.get(n),r||(r={type:`script`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(a(444,e))}}function Pm(e){return`href="`+ln(e)+`"`}function Fm(e){return`link[rel="stylesheet"][`+e+`]`}function Im(e){return T({},e,{"data-precedence":e.precedence,precedence:null})}function Lm(e,t,n,r){if(t=e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)){if(!0!==t[It]){r.loading=1;return}}else t=e.createElement(`link`),t[It]=!0,t.onload=t.onerror=Ut.bind(null,t),np(t,`link`,n),Ht(t),e.head.appendChild(t);r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2})}function Rm(e){return`[src="`+ln(e)+`"]`}function zm(e){return`script[async]`+e}function Bm(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+ln(n.href)+`"]`);if(r)return t.instance=r,Ht(r),r;var i=T({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),Ht(r),np(r,`style`,i),Vm(r,n.precedence,e),t.instance=r;case`stylesheet`:i=Pm(n.href);var o=e.querySelector(Fm(i));if(o)return t.state.loading|=4,t.instance=o,Ht(o),o;r=Im(n),(i=vm.get(i))&&Hm(r,i),o=(e.ownerDocument||e).createElement(`link`),Ht(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),np(o,`link`,r),t.state.loading|=4,Vm(o,n.precedence,e),t.instance=o;case`script`:return o=Rm(n.src),(i=e.querySelector(zm(o)))?(t.instance=i,Ht(i),i):(r=n,(i=vm.get(o))&&(r=T({},n),Um(r,i)),e=e.ownerDocument||e,i=e.createElement(`script`),Ht(i),np(i,`link`,r),e.head.appendChild(i),t.instance=i);case`void`:return null;default:throw Error(a(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Vm(r,n.precedence,e));return t.instance}function Vm(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function qm(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Jm(e,t){return e===`img`&&t.src!=null&&t.src!==``&&t.onLoad==null&&t.loading!==`lazy`}function Ym(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Xm(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==`number`?devicePixelRatio:1)*.25}function Zm(e,t){typeof t.decode==`function`&&(e.imgCount++,t.complete||(e.imgBytes+=Xm(t),e.suspenseyImages.push(t)),e=rh.bind(e),t.decode().then(e,e))}function Qm(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Pm(r.href),a=t.querySelector(Fm(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=nh.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,Ht(a);return}a=t.ownerDocument||t,r=Im(r),(i=vm.get(i))&&Hm(r,i),a=a.createElement(`link`),Ht(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),np(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=nh.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var $m=0;function eh(e,t){return e.stylesheets&&e.count===0&&ah(e,e.stylesheets),0$m?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function th(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)ah(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function nh(){this.count--,th(this)}function rh(){this.imgCount--,th(this)}var ih=null;function ah(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ih=new Map,t.forEach(oh,e),ih=null,nh.call(e))}function oh(e,t){if(!(t.state.loading&4)){var n=ih.get(e);if(n)var r=n.get(null);else{n=new Map,ih.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=Pe()}))(),j=n(),M=t();function Ie({onClose:e,onOpened:t,canClone:n,cloning:r,onClone:i}){let[a,o]=(0,j.useState)(null),[s,c]=(0,j.useState)(null),[l,u]=(0,j.useState)(null),[d,f]=(0,j.useState)(!1),[p,m]=(0,j.useState)(``),[h,g]=(0,j.useState)(!1),[_,v]=(0,j.useState)(``),[y,b]=(0,j.useState)(0);(0,j.useEffect)(()=>{let e=!1;return A.browse(a??void 0).then(t=>{e||(c(t),u(null))}).catch(t=>{e||u(t instanceof Error?t.message:`could not browse`)}),()=>{e=!0}},[a,y]);let x=e=>o(`${s.path.replace(/\/$/,``)}/${e}`),S=async()=>{if(s){f(!0);try{t(await A.open(s.path))}catch(e){E.error(e instanceof Error?e.message:`could not open`),f(!1)}}},C=async()=>{if(!s)return;let e=p.trim();if(e){g(!0);try{await A.mkdir(s.path,e),m(``),b(e=>e+1)}catch(e){E.error(e instanceof Error?e.message:`could not create folder`)}finally{g(!1)}}};return(0,M.jsx)(`div`,{className:`nc-fade-in fixed inset-0 z-50 flex items-start justify-center bg-black/60 p-4 md:pt-[8vh]`,onClick:e,children:(0,M.jsxs)(`div`,{className:`nc-rise-in flex max-h-[min(80vh,calc(var(--nc-visual-viewport-height,100vh)-8vh-1rem))] w-[34rem] max-w-full flex-col rounded-lg border border-ink-700 bg-ink-900`,onClick:e=>e.stopPropagation(),children:[(0,M.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-ink-700 px-3 py-2`,children:[(0,M.jsx)(`span`,{className:`font-medium text-ink-50`,children:`Open a project`}),(0,M.jsx)(`button`,{onClick:e,"aria-label":`close`,className:`ml-auto flex h-6 w-6 items-center justify-center rounded-sm text-ink-400 hover:text-ink-200`,children:(0,M.jsx)(pe,{})})]}),(0,M.jsx)(`div`,{className:`shrink-0 truncate border-b border-ink-700 px-3 py-1.5 text-ink-400`,children:s?.path??`…`}),(0,M.jsxs)(`ul`,{className:`h-72 min-h-0 overflow-y-auto`,children:[s?.parent&&(0,M.jsx)(`li`,{children:(0,M.jsx)(`button`,{onClick:()=>o(s.parent),className:`w-full px-3 py-1 text-left text-ink-400 hover:bg-ink-850`,children:`../`})}),s?.entries.map(e=>(0,M.jsx)(`li`,{children:(0,M.jsxs)(`button`,{onClick:()=>x(e.name),className:`flex w-full items-center gap-2 px-3 py-1 text-left hover:bg-ink-850`,children:[(0,M.jsxs)(`span`,{className:`truncate text-accent`,children:[e.name,`/`]}),e.is_repo&&(0,M.jsx)(`span`,{className:`rounded-sm bg-ink-700 px-1 text-2xs text-ink-200`,children:`git`})]})},e.name)),s&&s.entries.length===0&&(0,M.jsx)(`li`,{className:`px-3 py-1 text-ink-400`,children:`No sub-folders.`})]}),l&&(0,M.jsx)(`p`,{className:`shrink-0 px-3 py-1 text-removed`,children:l}),(0,M.jsxs)(`div`,{className:`flex shrink-0 items-stretch gap-2 border-t border-ink-700 px-3 py-2`,children:[(0,M.jsx)(`input`,{value:p,onChange:e=>m(e.target.value),onKeyDown:e=>{e.key===`Enter`&&C()},placeholder:`New folder name`,"aria-label":`new folder name`,className:`min-w-0 flex-1 rounded-sm border border-ink-700 bg-ink-950 px-2 py-1 text-ink-50 placeholder:text-ink-400 focus:border-ink-600 focus:outline-none`}),(0,M.jsx)(`button`,{onClick:C,disabled:!s||!p.trim()||h,"aria-busy":h,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850 disabled:opacity-50`,children:(0,M.jsx)(Ee,{busy:h,children:`Create`})})]}),(0,M.jsxs)(`div`,{className:`flex shrink-0 items-stretch gap-2 border-t border-ink-700 px-3 py-2`,children:[(0,M.jsx)(`input`,{value:_,onChange:e=>v(e.target.value),onKeyDown:e=>{e.key===`Enter`&&s&&i(s.path,_)},disabled:!n,placeholder:n?`Clone a git URL here`:`git is not installed on the server`,"aria-label":`git URL to clone`,spellCheck:!1,autoCapitalize:`none`,autoCorrect:`off`,className:`min-w-0 flex-1 rounded-sm border border-ink-700 bg-ink-950 px-2 py-1 text-ink-50 placeholder:text-ink-400 focus:border-ink-600 focus:outline-none disabled:opacity-50`}),(0,M.jsx)(`button`,{onClick:()=>s&&i(s.path,_),disabled:!n||!s||!_.trim()||r,"aria-busy":r,title:n?void 0:`the server has no git on its PATH`,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850 disabled:opacity-50`,children:(0,M.jsx)(Ee,{busy:r,children:`Clone`})})]}),(0,M.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-t border-ink-700 px-3 py-2`,children:[(0,M.jsx)(`span`,{className:`truncate text-ink-400`,children:s?s.path:``}),(0,M.jsx)(`button`,{onClick:S,disabled:!s||d,"aria-busy":d,className:`ml-auto shrink-0 rounded-sm bg-ink-50 px-3 py-1 font-semibold text-ink-950 hover:bg-white disabled:opacity-50`,children:(0,M.jsx)(Ee,{busy:d,children:`Open`})})]})]})})}var Le=`data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='12%2057%201150%201150'%20role='img'%20aria-label='Black%20crow'%3e%3ctitle%3eBlack%20crow%3c/title%3e%3cdesc%3eMonochrome%20black%20crow%20silhouette%20on%20a%20transparent%20background,%20framed%20so%20the%20bird%20sits%20centred%20for%20use%20as%20an%20inline%20mark%20on%20a%20square%20tile.%3c/desc%3e%3cg%20fill-rule='evenodd'%20clip-rule='evenodd'%3e%3cpath%20fill='%23000000'%20d='M%20882%20147%20L%20859%20136%20L%20844%20131%20L%20831%20129%20L%20830%20128%20L%20815%20127%20L%20814%20126%20L%20796%20126%20L%20795%20127%20L%20786%20127%20L%20785%20128%20L%20775%20129%20L%20752%20136%20L%20732%20146%20L%20713%20160%20L%20701%20172%20L%20684%20172%20L%20683%20173%20L%20673%20173%20L%20672%20174%20L%20650%20176%20L%20649%20177%20L%20627%20181%20L%20602%20190%20L%20589%20197%20L%20579%20204%20L%20562%20221%20L%20562%20223%20L%20565%20223%20L%20578%20228%20L%20581%20228%20L%20612%20238%20L%20672%20252%20L%20684%20258%20L%20698%20271%20L%20702%20278%20L%20705%20288%20L%20705%20294%20L%20703%20301%20L%20699%20308%20L%20688%20318%20L%20630%20347%20L%20593%20372%20L%20561%20399%20L%20544%20416%20L%20522%20441%20L%20492%20481%20L%20461%20531%20L%20438%20576%20L%20431%20594%20L%20425%20602%20L%20405%20635%20L%20387%20668%20L%20385%20676%20L%20390%20679%20L%20368%20705%20L%20330%20755%20L%20306%20790%20L%20296%20808%20L%20289%20818%20L%20280%20838%20L%20280%20843%20L%20283%20845%20L%20292%20843%20L%20297%20840%20L%20299%20840%20L%20321%20828%20L%20322%20830%20L%20311%20844%20L%20288%20878%20L%20287%20881%20L%20259%20924%20L%20235%20965%20L%20205%201023%20L%20205%201025%20L%20197%201042%20L%20191%201061%20L%20191%201071%20L%20192%201072%20L%20198%201071%20L%20220%201056%20L%20242%201038%20L%20300%20986%20L%20302%20987%20L%20265%201040%20L%20264%201043%20L%20246%201070%20L%20235%201090%20L%20227%201112%20L%20227%201123%20L%20229%201128%20L%20234%201133%20L%20239%201135%20L%20255%201135%20L%20274%201129%20L%20279%201134%20L%20286%201137%20L%20290%201137%20L%20291%201138%20L%20310%201138%20L%20311%201137%20L%20317%201137%20L%20318%201136%20L%20326%201135%20L%20344%201129%20L%20369%201116%20L%20395%201097%20L%20420%201073%20L%20445%201042%20L%20457%201024%20L%20461%201016%20L%20464%201013%20L%20468%201011%20L%20489%20994%20L%20595%20901%20L%20601%20906%20L%20606%20913%20L%20614%20921%20L%20637%20949%20L%20639%20953%20L%20639%20956%20L%20636%20960%20L%20634%20961%20L%20619%20962%20L%20613%20965%20L%20605%20974%20L%20602%20982%20L%20602%20994%20L%20605%201001%20L%20608%201004%20L%20609%201004%20L%20609%20999%20L%20612%20992%20L%20616%20988%20L%20620%20986%20L%20627%20986%20L%20635%20983%20L%20645%20983%20L%20646%20982%20L%20655%20982%20L%20668%20986%20L%20676%20990%20L%20682%20996%20L%20685%201003%20L%20688%201006%20L%20696%201009%20L%20697%201012%20L%20697%201024%20L%20693%201033%20L%20693%201035%20L%20695%201035%20L%20700%201032%20L%20707%201025%20L%20710%201020%20L%20713%201010%20L%20713%201003%20L%20711%20998%20L%20711%20994%20L%20712%20993%20L%20719%201003%20L%20723%201005%20L%20727%201005%20L%20730%201011%20L%20730%201022%20L%20727%201031%20L%20728%201033%20L%20740%201021%20L%20743%201014%20L%20744%201003%20L%20747%20999%20L%20749%20992%20L%20748%20977%20L%20744%20968%20L%20740%20963%20L%20741%20962%20L%20755%20961%20L%20768%20964%20L%20777%20969%20L%20783%20975%20L%20786%20981%20L%20789%20984%20L%20795%20987%20L%20799%20987%20L%20801%20991%20L%20801%20997%20L%20802%20998%20L%20799%201013%20L%20802%201012%20L%20808%201007%20L%20813%201000%20L%20816%20991%20L%20816%20981%20L%20814%20976%20L%20814%20968%20L%20815%20967%20L%20819%20970%20L%20823%20970%20L%20826%20973%20L%20829%20980%20L%20830%20993%20L%20834%20990%20L%20838%20979%20L%20838%20968%20L%20832%20951%20L%20822%20940%20L%20815%20936%20L%20803%20933%20L%20776%20935%20L%20763%20931%20L%20753%20922%20L%20731%20898%20L%20703%20865%20L%20703%20863%20L%20710%20853%20L%20711%20855%20L%20707%20862%20L%20709%20862%20L%20718%20857%20L%20754%20832%20L%20793%20799%20L%20818%20774%20L%20849%20737%20L%20850%20741%20L%20845%20755%20L%20847%20755%20L%20861%20743%20L%20881%20721%20L%20906%20686%20L%20918%20665%20L%20933%20635%20L%20951%20590%20L%20971%20525%20L%20971%20521%20L%20974%20512%20L%20974%20508%20L%20978%20493%20L%20979%20482%20L%20980%20481%20L%20981%20466%20L%20982%20465%20L%20983%20441%20L%20982%20440%20L%20982%20428%20L%20981%20427%20L%20980%20414%20L%20978%20409%20L%20976%20397%20L%20970%20381%20L%20971%20379%20L%20974%20383%20L%20976%20381%20L%20977%20334%20L%20976%20333%20L%20976%20322%20L%20975%20321%20L%20974%20307%20L%20973%20306%20L%20973%20301%20L%20972%20300%20L%20969%20280%20L%20958%20243%20L%20949%20224%20L%20949%20222%20L%20939%20204%20L%20922%20181%20L%20903%20162%20Z%20M%20625%20888%20L%20656%20874%20L%20658%20874%20L%20665%20870%20L%20725%20930%20L%20728%20934%20L%20728%20940%20L%20723%20943%20L%20714%20944%20L%20707%20950%20L%20683%20951%20L%20673%20947%20L%20659%20932%20Z%20M%20787%20182%20L%20792%20182%20L%20796%20187%20L%20795%20192%20L%20791%20195%20L%20788%20195%20L%20783%20191%20L%20783%20186%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20895%20156%20L%20863%20138%20L%20838%20130%20L%20819%20127%20L%20789%20127%20L%20777%20129%20L%20753%20136%20L%20736%20144%20L%20717%20157%20L%20702%20172%20L%20652%20176%20L%20628%20181%20L%20607%20188%20L%20585%20200%20L%20562%20222%20L%20613%20238%20L%20670%20251%20L%20683%20257%20L%20697%20269%20L%20705%20286%20L%20705%20296%20L%20703%20302%20L%20698%20310%20L%20687%20319%20L%20631%20347%20L%20591%20374%20L%20568%20393%20L%20538%20423%20L%20520%20444%20L%20481%20498%20L%20457%20539%20L%20437%20579%20L%20432%20593%20L%20413%20622%20L%20386%20671%20L%20386%20677%20L%20390%20677%20L%20391%20679%20L%20374%20698%20L%20334%20750%20L%20307%20789%20L%20290%20817%20L%20280%20839%20L%20281%20844%20L%20291%20843%20L%20323%20826%20L%20325%20827%20L%20289%20877%20L%20237%20962%20L%20209%201015%20L%20198%201040%20L%20191%201063%20L%20191%201070%20L%20194%201072%20L%20213%201061%20L%20259%201023%20L%20302%20984%20L%20303%20985%20L%20262%201045%20L%20245%201072%20L%20233%201095%20L%20227%201114%20L%20228%201126%20L%20233%201132%20L%20242%201135%20L%20252%201135%20L%20274%201128%20L%20278%201133%20L%20288%201137%20L%20313%201137%20L%20343%201129%20L%20373%201113%20L%20398%201094%20L%20424%201068%20L%20441%201047%20L%20465%201012%20L%20520%20967%20L%20595%20900%20L%20611%20917%20L%20639%20952%20L%20639%20957%20L%20637%20960%20L%20632%20962%20L%20618%20963%20L%20611%20967%20L%20606%20973%20L%20602%20983%20L%20602%20992%20L%20608%201004%20L%20611%20993%20L%20619%20986%20L%20626%20986%20L%20643%20982%20L%20656%20982%20L%20675%20989%20L%20683%20997%20L%20688%201006%20L%20696%201009%20L%20697%201025%20L%20693%201034%20L%20694%201035%20L%20701%201031%20L%20710%201019%20L%20712%201013%20L%20712%20993%20L%20720%201003%20L%20727%201005%20L%20730%201009%20L%20730%201025%20L%20727%201032%20L%20732%201030%20L%20739%201022%20L%20743%201013%20L%20743%201004%20L%20749%20991%20L%20748%20978%20L%20740%20964%20L%20743%20961%20L%20757%20961%20L%20769%20964%20L%20781%20972%20L%20791%20985%20L%20798%20986%20L%20802%20994%20L%20802%201003%20L%20799%201013%20L%20810%201004%20L%20815%20994%20L%20816%20983%20L%20814%20977%20L%20814%20965%20L%20818%20969%20L%20825%20971%20L%20830%20983%20L%20830%20993%20L%20833%20991%20L%20837%20982%20L%20838%20969%20L%20834%20956%20L%20825%20943%20L%20820%20939%20L%20807%20934%20L%20774%20935%20L%20762%20931%20L%20736%20904%20L%20702%20864%20L%20715%20845%20L%20716%20847%20L%20707%20862%20L%20719%20856%20L%20744%20839%20L%20786%20805%20L%20824%20767%20L%20851%20733%20L%20852%20735%20L%20846%20755%20L%20853%20750%20L%20883%20718%20L%20906%20685%20L%20927%20647%20L%20951%20589%20L%20968%20535%20L%20976%20502%20L%20982%20461%20L%20981%20422%20L%20976%20398%20L%20968%20378%20L%20969%20376%20L%20975%20383%20L%20977%20341%20L%20970%20286%20L%20958%20244%20L%20945%20215%20L%20925%20185%20L%20906%20165%20Z%20M%20625%20888%20L%20665%20870%20L%20728%20933%20L%20729%20940%20L%20726%20943%20L%20715%20944%20L%20708%20950%20L%20692%20952%20L%20678%20950%20L%20672%20947%20L%20662%20936%20Z%20M%20785%20183%20L%20792%20182%20L%20796%20186%20L%20796%20191%20L%20791%20195%20L%20785%20194%20L%20783%20191%20L%20783%20186%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20896%20157%20L%20869%20141%20L%20837%20130%20L%20817%20127%20L%20792%20127%20L%20778%20129%20L%20751%20137%20L%20733%20146%20L%20715%20159%20L%20702%20172%20L%20653%20176%20L%20610%20187%20L%20581%20203%20L%20562%20222%20L%20625%20241%20L%20671%20251%20L%20683%20257%20L%20698%20270%20L%20705%20285%20L%20704%20300%20L%20699%20309%20L%20689%20318%20L%20628%20349%20L%20581%20382%20L%20540%20421%20L%20517%20448%20L%20478%20503%20L%20456%20541%20L%20439%20575%20L%20432%20593%20L%20412%20624%20L%20388%20667%20L%20386%20676%20L%20390%20677%20L%20391%20679%20L%20363%20712%20L%20332%20753%20L%20289%20819%20L%20281%20836%20L%20281%20844%20L%20293%20842%20L%20323%20826%20L%20325%20827%20L%20284%20885%20L%20236%20964%20L%20205%201024%20L%20197%201043%20L%20191%201064%20L%20191%201070%20L%20197%201071%20L%20210%201063%20L%20253%201028%20L%20303%20983%20L%20304%20984%20L%20259%201050%20L%20235%201091%20L%20227%201115%20L%20228%201125%20L%20232%201131%20L%20238%201134%20L%20249%201135%20L%20261%201133%20L%20274%201128%20L%20278%201133%20L%20289%201137%20L%20312%201137%20L%20342%201129%20L%20368%201116%20L%20399%201093%20L%20423%201069%20L%20443%201044%20L%20463%201013%20L%20493%20990%20L%20595%20900%20L%20612%20918%20L%20639%20952%20L%20639%20957%20L%20636%20961%20L%20616%20964%20L%20606%20973%20L%20602%20984%20L%20602%20991%20L%20608%201004%20L%20611%20993%20L%20621%20985%20L%20625%20986%20L%20639%20982%20L%20657%20982%20L%20677%20990%20L%20685%201002%20L%20690%201007%20L%20697%201010%20L%20698%201021%20L%20693%201034%20L%20694%201035%20L%20705%201027%20L%20710%201018%20L%20712%201011%20L%20712%201001%20L%20710%20994%20L%20712%20993%20L%20720%201003%20L%20729%201006%20L%20731%201020%20L%20728%201032%20L%20738%201023%20L%20743%201012%20L%20743%201003%20L%20748%20994%20L%20747%20976%20L%20740%20964%20L%20743%20961%20L%20759%20961%20L%20767%20963%20L%20780%20971%20L%20790%20984%20L%20799%20986%20L%20802%20992%20L%20802%201004%20L%20799%201012%20L%20803%201011%20L%20810%201004%20L%20815%20994%20L%20814%20965%20L%20818%20969%20L%20823%20969%20L%20830%20982%20L%20830%20992%20L%20832%20992%20L%20837%20982%20L%20837%20965%20L%20831%20950%20L%20821%20940%20L%20806%20934%20L%20772%20935%20L%20762%20931%20L%20733%20901%20L%20702%20863%20L%20717%20842%20L%20718%20844%20L%20707%20862%20L%20738%20843%20L%20780%20810%20L%20822%20769%20L%20851%20733%20L%20852%20735%20L%20846%20755%20L%20855%20748%20L%20882%20719%20L%20904%20688%20L%20930%20640%20L%20950%20591%20L%20967%20538%20L%20978%20490%20L%20982%20459%20L%20982%20434%20L%20976%20399%20L%20967%20376%20L%20969%20375%20L%20975%20383%20L%20976%20329%20L%20971%20293%20L%20960%20250%20L%20942%20210%20L%20923%20183%20Z%20M%20625%20888%20L%20665%20870%20L%20729%20934%20L%20729%20940%20L%20726%20943%20L%20716%20944%20L%20708%20950%20L%20695%20952%20L%20677%20950%20L%20666%20941%20Z%20M%20786%20182%20L%20790%20181%20L%20794%20183%20L%20797%20188%20L%20792%20195%20L%20787%20195%20L%20782%20190%20L%20782%20187%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20893%20155%20L%20873%20143%20L%20841%20131%20L%20816%20127%20L%20794%20127%20L%20779%20129%20L%20754%20136%20L%20735%20145%20L%20715%20159%20L%20702%20172%20L%20648%20177%20L%20629%20181%20L%20608%20188%20L%20584%20201%20L%20562%20222%20L%20614%20238%20L%20671%20251%20L%20685%20258%20L%20698%20270%20L%20704%20281%20L%20706%20292%20L%20703%20303%20L%20699%20309%20L%20686%20320%20L%20628%20349%20L%20590%20375%20L%20565%20396%20L%20543%20418%20L%20518%20447%20L%20490%20485%20L%20460%20534%20L%20441%20571%20L%20431%20595%20L%20405%20636%20L%20386%20672%20L%20386%20676%20L%20390%20677%20L%20391%20679%20L%20371%20702%20L%20335%20749%20L%20291%20816%20L%20280%20840%20L%20282%20844%20L%20298%20840%20L%20324%20825%20L%20326%20826%20L%20294%20870%20L%20235%20966%20L%20206%201022%20L%20198%201041%20L%20191%201065%20L%20191%201070%20L%20196%201071%20L%20214%201060%20L%20254%201027%20L%20303%20983%20L%20304%20984%20L%20256%201055%20L%20232%201098%20L%20227%201115%20L%20228%201125%20L%20232%201131%20L%20239%201134%20L%20248%201135%20L%20264%201132%20L%20274%201128%20L%20280%201134%20L%20289%201137%20L%20311%201137%20L%20339%201130%20L%20371%201114%20L%20401%201091%20L%20422%201070%20L%20440%201048%20L%20463%201013%20L%20487%20995%20L%20595%20900%20L%20613%20919%20L%20639%20951%20L%20639%20958%20L%20636%20961%20L%20619%20963%20L%20613%20966%20L%20605%20975%20L%20602%20991%20L%20604%20998%20L%20608%201003%20L%20611%20993%20L%20620%20985%20L%20624%20986%20L%20632%20983%20L%20647%20981%20L%20658%20982%20L%20677%20990%20L%20689%201006%20L%20697%201009%20L%20698%201021%20L%20694%201035%20L%20703%201029%20L%20710%201018%20L%20712%201010%20L%20712%201002%20L%20710%20997%20L%20711%20992%20L%20720%201003%20L%20728%201005%20L%20730%201008%20L%20731%201021%20L%20728%201032%20L%20738%201023%20L%20742%201014%20L%20743%201003%20L%20748%20994%20L%20748%20980%20L%20742%20966%20L%20739%20963%20L%20741%20961%20L%20753%20960%20L%20770%20964%20L%20780%20971%20L%20790%20984%20L%20799%20986%20L%20802%20992%20L%20802%201005%20L%20799%201012%20L%20804%201010%20L%20809%201005%20L%20815%20993%20L%20813%20964%20L%20817%20968%20L%20823%20969%20L%20826%20972%20L%20830%20982%20L%20831%20992%20L%20834%20989%20L%20838%20975%20L%20837%20966%20L%20831%20950%20L%20821%20940%20L%20804%20934%20L%20779%20936%20L%20763%20932%20L%20731%20899%20L%20702%20865%20L%20702%20863%20L%20717%20842%20L%20718%20844%20L%20708%20862%20L%20749%20835%20L%20781%20809%20L%20820%20771%20L%20851%20733%20L%20852%20736%20L%20846%20755%20L%20857%20746%20L%20881%20720%20L%20907%20683%20L%20928%20644%20L%20945%20604%20L%20967%20537%20L%20978%20489%20L%20982%20455%20L%20982%20437%20L%20979%20413%20L%20975%20396%20L%20967%20377%20L%20968%20374%20L%20975%20382%20L%20976%20332%20L%20972%20299%20L%20962%20257%20L%20954%20235%20L%20943%20212%20L%20923%20183%20Z%20M%20624%20888%20L%20666%20870%20L%20729%20934%20L%20729%20940%20L%20726%20943%20L%20716%20944%20L%20706%20951%20L%20684%20952%20L%20677%20950%20L%20665%20940%20Z%20M%20701%20220%20L%20710%20219%20L%20717%20221%20L%20704%20223%20L%20704%20221%20Z%20M%20666%20217%20L%20679%20216%20L%20689%20218%20L%20685%20220%20L%20675%20220%20Z%20M%20658%20210%20L%20661%20208%20L%20686%20205%20L%20706%20206%20L%20725%20209%20L%20733%20217%20L%20741%20220%20L%20738%20221%20L%20696%20214%20L%20661%20212%20Z%20M%20788%20181%20L%20793%20182%20L%20797%20188%20L%20792%20195%20L%20786%20195%20L%20782%20190%20L%20783%20185%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20893%20155%20L%20864%20139%20L%20836%20130%20L%20813%20127%20L%20796%20127%20L%20774%20130%20L%20749%20138%20L%20735%20145%20L%20720%20155%20L%20702%20172%20L%20687%20173%20L%20700%20174%20L%20694%20181%20L%20674%20184%20L%20670%20180%20L%20665%20183%20L%20657%20184%20L%20639%20196%20L%20641%20198%20L%20647%20198%20L%20648%20194%20L%20654%20193%20L%20686%20204%20L%20724%20208%20L%20740%20213%20L%20751%20222%20L%20750%20223%20L%20693%20214%20L%20671%20212%20L%20639%20212%20L%20636%20211%20L%20634%20207%20L%20629%20207%20L%20626%20210%20L%20617%20210%20L%20614%20208%20L%20604%20207%20L%20594%20213%20L%20582%20216%20L%20580%20214%20L%20581%20210%20L%20576%20208%20L%20586%20200%20L%20565%20218%20L%20563%20222%20L%20618%20239%20L%20671%20251%20L%20682%20256%20L%20689%20261%20L%20702%20276%20L%20706%20288%20L%20704%20301%20L%20700%20308%20L%20683%20322%20L%20630%20348%20L%20585%20379%20L%20563%20398%20L%20523%20441%20L%20497%20475%20L%20459%20536%20L%20443%20567%20L%20431%20595%20L%20411%20626%20L%20387%20670%20L%20386%20676%20L%20390%20677%20L%20391%20679%20L%20368%20706%20L%20333%20752%20L%20290%20818%20L%20281%20837%20L%20282%20844%20L%20300%20839%20L%20324%20825%20L%20326%20826%20L%20285%20884%20L%20242%20954%20L%20207%201020%20L%20192%201060%20L%20192%201071%20L%20196%201071%20L%20211%201062%20L%20240%201039%20L%20303%20983%20L%20305%20984%20L%20277%201023%20L%20242%201078%20L%20228%201110%20L%20227%201119%20L%20231%201130%20L%20239%201134%20L%20255%201134%20L%20274%201128%20L%20280%201134%20L%20285%201136%20L%20310%201137%20L%20339%201130%20L%20374%201112%20L%20394%201097%20L%20421%201071%20L%20445%201041%20L%20463%201013%20L%20488%20994%20L%20595%20900%20L%20614%20920%20L%20639%20951%20L%20639%20958%20L%20636%20961%20L%20619%20963%20L%20613%20966%20L%20607%20972%20L%20603%20980%20L%20602%20989%20L%20603%20995%20L%20608%201003%20L%20610%20994%20L%20620%20985%20L%20623%20986%20L%20631%20983%20L%20647%20981%20L%20665%20984%20L%20676%20989%20L%20689%201006%20L%20695%201007%20L%20697%201009%20L%20698%201023%20L%20694%201035%20L%20699%201032%20L%20709%201020%20L%20712%201010%20L%20710%20997%20L%20711%20992%20L%20719%201002%20L%20725%201005%20L%20727%201004%20L%20730%201008%20L%20731%201022%20L%20728%201032%20L%20739%201021%20L%20743%201010%20L%20743%201003%20L%20748%20993%20L%20748%20981%20L%20746%20974%20L%20739%20963%20L%20741%20961%20L%20755%20960%20L%20770%20964%20L%20779%20970%20L%20789%20983%20L%20799%20986%20L%20802%20992%20L%20802%201005%20L%20799%201012%20L%20808%201006%20L%20815%20993%20L%20813%20964%20L%20817%20968%20L%20825%20970%20L%20829%20978%20L%20831%20992%20L%20837%20981%20L%20837%20966%20L%20832%20952%20L%20822%20941%20L%20813%20936%20L%20803%20934%20L%20776%20936%20L%20763%20932%20L%20723%20890%20L%20702%20865%20L%20702%20863%20L%20717%20841%20L%20719%20842%20L%20708%20862%20L%20742%20840%20L%20782%20808%20L%20818%20773%20L%20851%20733%20L%20852%20736%20L%20846%20754%20L%20850%20752%20L%20881%20720%20L%20905%20686%20L%20932%20635%20L%20950%20590%20L%20969%20529%20L%20977%20494%20L%20982%20454%20L%20980%20419%20L%20975%20396%20L%20967%20377%20L%20968%20374%20L%20975%20382%20L%20976%20334%20L%20969%20284%20L%20959%20248%20L%20941%20209%20L%20921%20181%20Z%20M%20624%20888%20L%20666%20870%20L%20729%20934%20L%20729%20941%20L%20724%20944%20L%20716%20944%20L%20707%20951%20L%20683%20952%20L%20673%20948%20L%20659%20933%20Z%20M%20563%20618%20L%20569%20614%20L%20579%20621%20L%20576%20626%20L%20572%20627%20L%20568%20623%20L%20565%20623%20Z%20M%20575%20603%20L%20578%20603%20L%20588%20613%20L%20588%20619%20L%20585%20621%20L%20582%20620%20L%20575%20613%20L%20576%20612%20L%20573%20605%20Z%20M%20748%20398%20L%20752%20412%20L%20752%20432%20L%20748%20444%20L%20732%20470%20L%20716%20484%20L%20698%20493%20L%20685%20494%20L%20682%20491%20L%20707%20445%20L%20685%20473%20L%20667%20492%20L%20647%20508%20L%20632%20517%20L%20619%20519%20L%20615%20517%20L%20615%20513%20L%20643%20470%20L%20603%20514%20L%20589%20526%20L%20569%20538%20L%20558%20540%20L%20554%20539%20L%20552%20535%20L%20577%20498%20L%20549%20528%20L%20526%20546%20L%20508%20554%20L%20498%20555%20L%20495%20552%20L%20501%20541%20L%20482%20555%20L%20471%20558%20L%20464%20558%20L%20461%20560%20L%20460%20559%20L%20461%20555%20L%20469%20547%20L%20473%20537%20L%20491%20512%20L%20511%20497%20L%20582%20434%20L%20617%20408%20L%20632%20399%20L%20659%20386%20L%20677%20380%20L%20695%20377%20L%20712%20377%20L%20725%20380%20L%20739%20388%20Z%20M%20625%20216%20L%20683%20216%20L%20737%20222%20L%20742%20224%20L%20733%20226%20L%20721%20225%20L%20713%20230%20L%20711%20228%20L%20706%20228%20L%20694%20237%20L%20690%20233%20L%20690%20225%20L%20679%20228%20L%20674%20232%20L%20668%20232%20L%20659%20229%20L%20649%20222%20L%20632%20219%20L%20632%20217%20Z%20M%20788%20181%20L%20793%20182%20L%20797%20187%20L%20795%20193%20L%20792%20195%20L%20786%20195%20L%20782%20190%20L%20783%20185%20Z'/%3e%3cpath%20fill='%23000000'%20d='M%20607%20972%20L%20603%20981%20L%20603%20995%20L%20608%201003%20L%20610%20994%20L%20616%20987%20L%20620%20985%20L%20627%20985%20L%20635%20982%20L%20655%20981%20L%20676%20989%20L%20683%20996%20L%20689%201006%20L%20695%201007%20L%20697%201009%20L%20698%201024%20L%20694%201034%20L%20699%201032%20L%20706%201025%20L%20712%201010%20L%20710%20994%20L%20709%20997%20L%20706%20994%20L%20700%20994%20L%20694%20997%20L%20672%20976%20L%20658%20974%20L%20647%20967%20L%20642%20974%20L%20638%20974%20L%20636%20972%20L%20636%20961%20L%20629%20963%20L%20631%20972%20L%20625%20977%20L%20620%20977%20L%20613%20967%20L%20614%20966%20Z%20M%20686%20966%20L%20704%20980%20L%20719%201002%20L%20727%201004%20L%20730%201007%20L%20731%201023%20L%20728%201032%20L%20731%201030%20L%20741%201017%20L%20743%201003%20L%20748%20992%20L%20748%20981%20L%20742%20967%20L%20740%20965%20L%20742%20968%20L%20735%20972%20L%20726%20965%20L%20705%20960%20L%20724%20968%20L%20740%20983%20L%20742%20987%20L%20740%20991%20L%20732%20991%20L%20728%20996%20L%20726%20996%20L%20721%20992%20L%20713%20979%20Z%20M%20784%20943%20L%20784%20946%20L%20798%20950%20L%20819%20969%20L%20825%20970%20L%20830%20981%20L%20831%20992%20L%20837%20981%20L%20837%20966%20L%20829%20948%20L%20825%20944%20L%20830%20950%20L%20821%20957%20L%20813%20951%20L%20794%20942%20Z%20M%20659%20933%20L%20662%20937%20L%20658%20942%20L%20658%20945%20L%20663%20947%20L%20666%20945%20L%20667%20946%20L%20668%20944%20L%20670%20946%20Z%20M%20643%20913%20L%20647%20918%20L%20644%20921%20L%20642%20928%20L%20629%20938%20L%20627%20936%20L%20636%20947%20L%20634%20945%20L%20641%20933%20L%20651%20923%20L%20657%20930%20Z%20M%20936%20310%20L%20934%20309%20L%20945%20338%20L%20949%20368%20L%20949%20381%20L%20947%20383%20L%20935%20367%20L%20914%20348%20L%20929%20377%20L%20934%20397%20L%20936%20414%20L%20935%20440%20L%20933%20442%20L%20930%20440%20L%20924%20419%20L%20912%20395%20L%20909%20393%20L%20910%20410%20L%20907%20433%20L%20899%20458%20L%20895%20462%20L%20893%20460%20L%20892%20445%20L%20888%20427%20L%20873%20390%20L%20873%20416%20L%20871%20430%20L%20866%20448%20L%20862%20454%20L%20859%20452%20L%20853%20433%20L%20842%20410%20L%20823%20382%20L%20807%20365%20L%20805%20366%20L%20811%20394%20L%20812%20416%20L%20810%20425%20L%20806%20428%20L%20801%20423%20L%20790%20403%20L%20772%20383%20L%20759%20372%20L%20733%20357%20L%20724%20355%20L%20705%20346%20L%20693%20344%20L%20669%20344%20L%20646%20349%20L%20636%20353%20L%20662%20349%20L%20677%20349%20L%20699%20353%20L%20708%20356%20L%20725%20366%20L%20736%20376%20L%20745%20389%20L%20753%20415%20L%20752%20442%20L%20743%20476%20L%20723%20520%20L%20693%20569%20L%20646%20631%20L%20605%20676%20L%20568%20709%20L%20565%20710%20L%20562%20706%20L%20562%20692%20L%20567%20665%20L%20578%20636%20L%20602%20619%20L%20622%20602%20L%20645%20578%20L%20670%20546%20L%20630%20588%20L%20603%20610%20L%20574%20628%20L%20560%20633%20L%20556%20633%20L%20555%20631%20L%20563%20617%20L%20596%20572%20L%20647%20509%20L%20636%20515%20L%20562%20609%20L%20541%20630%20L%20520%20645%20L%20502%20653%20L%20490%20653%20L%20536%20590%20L%20513%20617%20L%20478%20651%20L%20454%20665%20L%20440%20669%20L%20436%20667%20L%20488%20596%20L%20459%20630%20L%20436%20653%20L%20411%20671%20L%20392%20678%20L%20372%20701%20L%20319%20772%20L%20289%20820%20L%20281%20838%20L%20282%20844%20L%20295%20841%20L%20324%20825%20L%20326%20826%20L%20289%20878%20L%20242%20954%20L%20209%201016%20L%20193%201056%20L%20191%201069%20L%20192%201071%20L%20196%201071%20L%20219%201056%20L%20303%20983%20L%20305%20984%20L%20255%201057%20L%20234%201094%20L%20228%201111%20L%20228%201124%20L%20234%201132%20L%20240%201134%20L%20254%201134%20L%20275%201128%20L%20279%201133%20L%20291%201137%20L%20316%201136%20L%20344%201128%20L%20364%201118%20L%20389%201101%20L%20403%201089%20L%20427%201064%20L%20447%201038%20L%20463%201013%20L%20489%20993%20L%20594%20901%20L%20595%20899%20L%20593%20894%20L%20588%20891%20L%20567%20868%20L%20569%20865%20L%20576%20867%20L%20586%20873%20L%20589%20867%20L%20607%20867%20L%20619%20880%20L%20622%20887%20L%20626%20891%20L%20624%20889%20L%20626%20886%20L%20666%20870%20L%20705%20909%20L%20710%20905%20L%20713%20905%20L%20716%20908%20L%20716%20911%20L%20712%20916%20L%20728%20932%20L%20730%20939%20L%20727%20943%20L%20717%20944%20L%20710%20949%20L%20712%20948%20L%20725%20951%20L%20739%20963%20L%20740%20961%20L%20756%20960%20L%20774%20966%20L%20784%20975%20L%20789%20983%20L%20800%20987%20L%20802%20991%20L%20802%201005%20L%20799%201012%20L%20806%201008%20L%20811%201002%20L%20815%20993%20L%20813%20968%20L%20812%20973%20L%20807%20971%20L%20796%20976%20L%20791%20973%20L%20788%20967%20L%20779%20958%20L%20767%20952%20L%20762%20941%20L%20756%20940%20L%20751%20932%20L%20749%20931%20L%20743%20936%20L%20738%20936%20L%20736%20933%20L%20741%20925%20L%20739%20915%20L%20742%20912%20L%20745%20914%20L%20702%20865%20L%20702%20863%20L%20717%20841%20L%20719%20842%20L%20709%20861%20L%20746%20837%20L%20783%20807%20L%20826%20764%20L%20851%20732%20L%20853%20734%20L%20846%20754%20L%20851%20751%20L%20874%20728%20L%20890%20708%20L%20908%20681%20L%20938%20621%20L%20960%20560%20L%20971%20521%20L%20979%20481%20L%20982%20444%20L%20977%20405%20L%20970%20382%20L%20966%20375%20L%20968%20374%20L%20974%20381%20L%20975%20368%20L%20974%20372%20L%20968%20364%20L%20966%20354%20L%20957%20337%20Z%20M%20247%201077%20L%20251%201085%20L%20246%201088%20L%20245%201091%20L%20240%201092%20L%20239%201085%20L%20241%201081%20Z%20M%20370%20935%20L%20371%20937%20L%20326%20997%20L%20301%201034%20L%20289%201044%20L%20286%201042%20L%20283%201045%20L%20277%201045%20L%20273%201043%20L%20264%201052%20L%20261%201049%20L%20270%201037%20L%20271%201038%20L%20281%201027%20L%20293%201010%20L%20326%20971%20Z%20M%20726%20921%20L%20728%20921%20L%20731%20926%20L%20729%20933%20L%20722%20926%20Z%20M%20729%20897%20L%20734%20902%20L%20732%20906%20L%20726%20902%20L%20726%20899%20Z%20M%20715%20882%20L%20720%20886%20L%20718%20890%20L%20711%20887%20Z%20M%20605%20762%20L%20608%20761%20L%20607%20760%20L%20609%20757%20L%20610%20759%20L%20617%20761%20L%20620%20764%20L%20611%20770%20L%20607%20770%20L%20606%20765%20L%20608%20765%20Z%20M%20611%20754%20L%20617%20750%20L%20620%20751%20L%20621%20749%20L%20625%20749%20L%20628%20752%20L%20628%20756%20L%20623%20761%20Z%20M%20549%20710%20L%20551%20713%20L%20551%20722%20L%20506%20774%20L%20403%20878%20L%20309%20963%20L%20307%20961%20L%20313%20953%20L%20322%20945%20L%20340%20922%20L%20375%20885%20Z%20M%20695%20704%20L%20696%20708%20L%20698%20709%20L%20695%20710%20L%20695%20713%20L%20692%20715%20L%20688%20710%20Z%20M%20704%20694%20L%20706%20695%20L%20706%20698%20L%20710%20698%20L%20713%20703%20L%20708%20708%20L%20707%20714%20L%20705%20716%20L%20701%20716%20L%20697%20708%20L%20699%20706%20L%20697%20705%20L%20701%20701%20L%20704%20705%20L%20706%20704%20L%20706%20700%20L%20702%20697%20Z%20M%20552%20678%20L%20554%20681%20L%20552%20701%20L%20465%20787%20L%20361%20883%20L%20316%20927%20L%20253%20993%20L%20211%201042%20L%20211%201036%20L%20222%201011%20L%20261%20942%20L%20292%20898%20L%20338%20843%20L%20374%20807%20L%20387%20807%20L%20403%20801%20L%20419%20792%20L%20456%20766%20L%20500%20728%20Z%20M%20704%20654%20L%20706%20658%20L%20711%20658%20L%20714%20661%20L%20715%20673%20L%20713%20676%20L%20705%20676%20L%20702%20674%20L%20704%20677%20L%20704%20681%20L%20702%20682%20L%20704%20685%20L%20700%20686%20L%20694%20678%20L%20691%20678%20L%20688%20674%20L%20692%20670%20L%20692%20664%20L%20694%20661%20Z%20M%20565%20642%20L%20558%20663%20L%20545%20677%20L%20494%20726%20L%20443%20767%20L%20401%20792%20L%20392%20795%20L%20387%20794%20L%20405%20766%20L%20455%20707%20L%20388%20767%20L%20355%20794%20L%20304%20827%20L%20299%20826%20L%20302%20817%20L%20316%20795%20L%20360%20739%20L%20398%20700%20L%20425%20677%20L%20428%20679%20L%20443%20679%20L%20461%20673%20L%20476%20664%20L%20493%20666%20L%20517%20657%20L%20542%20641%20L%20546%20643%20Z%20M%20563%20221%20L%20572%20225%20L%20571%20223%20L%20574%20220%20L%20585%20217%20L%20596%20218%20L%20607%20215%20L%20653%20214%20L%20706%20218%20L%20749%20224%20L%20749%20226%20L%20735%20233%20L%20732%20238%20L%20732%20249%20L%20693%20242%20L%20620%20239%20L%20672%20251%20L%20688%20260%20L%20701%20274%20L%20706%20287%20L%20704%20301%20L%20707%20297%20L%20711%20300%20L%20713%20309%20L%20720%20324%20L%20723%20327%20L%20724%20308%20L%20726%20304%20L%20735%20318%20L%20757%20341%20L%20753%20319%20L%20754%20313%20L%20760%20317%20L%20786%20345%20L%20784%20324%20L%20775%20300%20L%20779%20300%20L%20800%20317%20L%20800%20312%20L%20787%20283%20L%20772%20264%20L%20778%20263%20L%20800%20271%20L%20803%20270%20L%20770%20236%20L%20772%20234%20L%20797%20234%20L%20807%20230%20L%20801%20230%20L%20800%20228%20L%20811%20218%20L%20818%20203%20L%20818%20193%20L%20812%20179%20L%20798%20168%20L%20784%20166%20L%20760%20173%20L%20747%20173%20L%20712%20163%20L%20718%20157%20L%20703%20171%20L%20711%20173%20L%20720%20178%20L%20723%20182%20L%20720%20186%20L%20695%20190%20L%20680%20190%20L%20670%20193%20L%20656%20193%20L%20687%20204%20L%20729%20209%20L%20742%20214%20L%20753%20223%20L%20752%20224%20L%20729%20219%20L%20669%20212%20L%20610%20213%20L%20576%20218%20L%20565%20221%20L%20565%20219%20Z%20M%20771%20189%20L%20772%20201%20L%20775%20207%20L%20780%20212%20L%20787%20215%20L%20796%20216%20L%20796%20218%20L%20784%20219%20L%20776%20215%20L%20771%20210%20L%20768%20204%20L%20768%20194%20Z%20M%20788%20181%20L%20793%20182%20L%20797%20187%20L%20796%20192%20L%20790%20196%20L%20786%20195%20L%20782%20191%20L%20782%20186%20Z'/%3e%3c/g%3e%3c/svg%3e`;function Re({className:e}){return(0,M.jsx)(`span`,{className:`block overflow-hidden rounded-[20.7%] bg-accent ${e??``}`,children:(0,M.jsx)(`img`,{src:Le,alt:``,"aria-hidden":`true`,className:`h-full w-full`})})}function ze(){return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(Re,{className:`h-[22px] w-[22px] shrink-0`}),(0,M.jsx)(`span`,{className:`hidden text-[16px] font-medium tracking-[0.04em] text-ink-50 md:inline`,children:`nightcrow`})]})}function Be({open:e}){return(0,M.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`h-3.5 w-3.5 shrink-0 transition-transform ${e?`rotate-90`:``}`,children:(0,M.jsx)(`path`,{d:`m9 18 6-6-6-6`})})}function Ve({className:e=`h-4 w-4`}){return(0,M.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`shrink-0 ${e}`,children:[(0,M.jsx)(`path`,{d:`M3 6h.01`}),(0,M.jsx)(`path`,{d:`M3 12h.01`}),(0,M.jsx)(`path`,{d:`M3 18h.01`}),(0,M.jsx)(`path`,{d:`M8 6h13`}),(0,M.jsx)(`path`,{d:`M8 12h13`}),(0,M.jsx)(`path`,{d:`M8 18h13`})]})}function He({className:e=`h-4 w-4`}){return(0,M.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`shrink-0 ${e}`,children:[(0,M.jsx)(`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`}),(0,M.jsx)(`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`}),(0,M.jsx)(`path`,{d:`M10 9H8`}),(0,M.jsx)(`path`,{d:`M16 13H8`}),(0,M.jsx)(`path`,{d:`M16 17H8`})]})}function Ue({className:e=`h-4 w-4`}){return(0,M.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,className:`shrink-0 ${e}`,children:[(0,M.jsx)(`path`,{d:`m4 17 6-6-6-6`}),(0,M.jsx)(`path`,{d:`M12 19h8`})]})}function We({repos:e,currentId:t,onSelect:n,onCloseProject:r,onOpenPicker:i,className:a=``}){let[o,s]=(0,j.useState)(!1),c=S(),l=(0,j.useRef)(null),u=e.find(e=>e.id===t);return(0,j.useEffect)(()=>{if(!o)return;let e=e=>{e.key===`Escape`&&(s(!1),l.current?.focus())};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[o]),(0,M.jsxs)(`div`,{className:`relative min-w-0 flex-1 ${a}`,children:[(0,M.jsxs)(`button`,{ref:l,onClick:()=>s(e=>!e),"aria-haspopup":`menu`,"aria-expanded":o,title:u?.display_path??`Select a project`,className:`flex min-w-0 max-w-full items-center gap-1 rounded-sm bg-ink-700 py-0.5 pl-2 pr-1 text-ink-50`,children:[(0,M.jsx)(`span`,{className:`truncate`,children:u?.name??`No project`}),(0,M.jsx)(Be,{open:o})]}),o&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>s(!1)}),(0,M.jsxs)(`div`,{role:`menu`,className:`nc-pop-in origin-top-left absolute left-0 z-50 mt-1 max-h-[70vh] w-56 max-w-[80vw] overflow-y-auto rounded-md border border-ink-700 bg-ink-900 py-1 shadow-lg`,children:[e.length===0&&(0,M.jsx)(`p`,{className:`px-3 py-1.5 text-ink-400`,children:`No projects open.`}),e.map(e=>(0,M.jsxs)(`div`,{className:`flex items-center ${e.id===t?`bg-ink-700 text-ink-50`:`text-ink-200`}`,children:[(0,M.jsx)(`button`,{role:`menuitem`,onClick:()=>{n(e.id),s(!1)},title:e.display_path,className:`min-w-0 flex-1 truncate py-1.5 pl-3 pr-1 text-left hover:text-accent`,children:e.name}),(0,M.jsx)(`button`,{onClick:()=>r(e.id),"aria-label":`close ${e.name}`,...e.id===t?c(`project.close`,`Close project`):{title:`Close project`},className:`mr-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-removed`,children:(0,M.jsx)(pe,{className:`h-3.5 w-3.5`})})]},e.id)),(0,M.jsx)(`div`,{className:`my-1 border-t border-ink-800`}),(0,M.jsxs)(`button`,{role:`menuitem`,onClick:()=>{i(),s(!1)},...c(`project.openDialog`,`Open a project`),className:`flex w-full items-center gap-1 px-3 py-1.5 text-left text-ink-400 hover:text-ink-200`,children:[(0,M.jsx)(re,{className:`h-3.5 w-3.5`}),`open`]})]})]})]})}function Ge({side:e,repos:t,repo:n,onSelectRepo:r,onCloseRepo:i,onOpenPicker:o,draggingRepo:s,dragOverRepo:c,onRepoDragStart:l,onRepoDragMove:f,onRepoDragEnd:p}){let m=S(),h=d(),g=t.length>1?[`project.previous`,`project.next`]:[],_=e=>e!==null,v=g.map(e=>w(e,h)).filter(_),y=g.map(e=>u(e,h)).filter(_),b=e===`left`;return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`nav`,{"aria-keyshortcuts":v.length>0?v.join(` `):void 0,title:y.length>0?`Previous or next project (${y.join(`, `)})`:void 0,className:b?`hidden min-h-0 flex-1 flex-col overflow-y-auto md:flex`:`hidden items-stretch self-stretch overflow-x-auto pl-1 md:flex`,children:t.map(e=>(0,M.jsxs)(`div`,{"data-repo-id":e.id,onPointerDown:t=>l(t,e.id),onPointerMove:f,onPointerUp:p,onPointerCancel:p,onLostPointerCapture:p,"data-active":e.id===n,className:`nc-title-target flex items-center whitespace-nowrap ${b?`min-w-0 border-b border-ink-700`:`border-r border-ink-700`} ${t.length>1?`touch-none`:``} ${s===e.id?`opacity-60`:``} ${c===e.id?`bg-ink-800 ring-1 ring-inset ring-accent`:``} ${e.id===n?b?`bg-ink-900 text-ink-50 shadow-[inset_1px_0_0_0_var(--color-accent)]`:`bg-ink-950 text-ink-50 shadow-[inset_0_-1px_0_0_var(--color-accent)]`:`text-ink-400 hover:bg-ink-850 hover:text-ink-200`}`,title:e.display_path,children:[(0,M.jsx)(`button`,{onClick:()=>{r(e.id)},"aria-label":e.name,className:`self-stretch pl-3 pr-1 text-left ${b?`min-w-0 flex-1 py-2`:``}`,children:(0,M.jsx)(Te,{title:e.name,className:b?``:a})}),(0,M.jsx)(`button`,{onClick:t=>{t.stopPropagation(),i(e.id)},"data-tab-close":!0,...e.id===n?m(`project.close`,`Close project`):{title:`Close project`},"aria-label":`close ${e.name}`,className:`mr-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-removed`,children:(0,M.jsx)(pe,{})})]},e.id))}),(0,M.jsxs)(`button`,{onClick:o,...m(`project.openDialog`,`Open a project`),className:`hidden shrink-0 items-center gap-1 rounded-sm px-2 py-0.5 text-ink-400 hover:text-accent md:inline-flex ${b?`mx-1 my-2 justify-center`:``}`,children:[(0,M.jsx)(re,{className:`h-3.5 w-3.5`}),`open`]})]})}var Ke={key:()=>Ae(`/api/push/key`).then(e=>e.public_key),subscribe:e=>k(`/api/push/subscribe`,e),unsubscribe:e=>k(`/api/push/unsubscribe`,{endpoint:e}),status:e=>k(`/api/push/status`,{endpoint:e}).then(e=>e.subscribed),test:e=>k(`/api/push/test`,{endpoint:e})};function qe(){let e=navigator;return{secure:window.isSecureContext,serviceWorker:`serviceWorker`in navigator?navigator.serviceWorker:void 0,hasPushManager:`PushManager`in window,permission:()=>typeof Notification>`u`?void 0:Notification.permission,requestPermission:()=>Notification.requestPermission(),isIos:/iPhone|iPad|iPod/.test(navigator.userAgent)||/Macintosh/.test(navigator.userAgent)&&navigator.maxTouchPoints>1,standalone:e.standalone===!0||window.matchMedia?.(`(display-mode: standalone)`).matches===!0}}function Je(e){return e.secure?e.isIos&&!e.standalone?`needs-install`:!e.serviceWorker||!e.hasPushManager||e.permission()===void 0?`unsupported`:e.permission()===`denied`?`denied`:null:`insecure`}function Ye(e){e.secure&&e.serviceWorker&&e.serviceWorker.register(`./sw.js`).catch(()=>{})}async function Xe(e){return(await e.serviceWorker.ready).pushManager.getSubscription()}async function Ze(e){let t=Je(e);if(t)return t;let n=await Xe(e);return n?await Ke.status(n.endpoint)?`on`:(await n.unsubscribe().catch(()=>!1),`off`):`off`}async function Qe(e){let t=Je(e);if(t)return t;let n=await e.requestPermission();if(n===`denied`)return`denied`;if(n!==`granted`)return`off`;let r;try{r=await Ke.key()}catch{return`unavailable`}let i=await e.serviceWorker.ready;await(await i.pushManager.getSubscription())?.unsubscribe();let a=await i.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:tt(r)});return await Ke.subscribe(a.toJSON()),`on`}async function $e(e){let t=await Xe(e);return t&&(await Ke.unsubscribe(t.endpoint).catch(()=>void 0),await t.unsubscribe().catch(()=>!1)),Je(e)??`off`}async function et(e){let t=await Xe(e);if(!t)throw Error(`notifications are off in this browser`);await Ke.test(t.endpoint)}function tt(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`),n=t+`=`.repeat((4-t.length%4)%4),r=atob(n),i=new Uint8Array(new ArrayBuffer(r.length));for(let e=0;e{let e=!1;return Ze(a).then(t=>!e&&n(t)).catch(()=>!e&&n(`off`)),()=>{e=!0}},[a]);let o=(0,j.useCallback)(async(e,t)=>{i(!0);try{let t=await e();return t&&n(t),!0}catch(e){return E.error(e instanceof Error?`${t}: ${e.message}`:t),!1}finally{i(!1)}},[]);return{state:t,busy:r,enable:()=>o(()=>Qe(a),`could not turn notifications on`),disable:()=>o(()=>$e(a),`could not turn notifications off`),test:async()=>{await o(()=>et(a),`could not send a test`)&&E.info(`Test notification sent`)}}}var rt={unsupported:`This browser does not support notifications.`,insecure:`Notifications need HTTPS or localhost. See the notifications guide for tailscale serve.`,"needs-install":`On iPhone and iPad, add nightcrow to the Home Screen and open it from there first.`,denied:`Notifications are blocked for this site. Allow them in the browser's site settings.`,unavailable:`The server could not load its notification key. Check the daemon log.`},it=`rounded-sm px-2 py-1 text-ink-200 hover:bg-ink-700 disabled:cursor-progress disabled:text-ink-400 disabled:hover:bg-transparent`;function at(){let{state:e,busy:t,enable:n,disable:r,test:i}=nt(),a=e?rt[e]:void 0;return(0,M.jsxs)(`section`,{"aria-labelledby":`nc-notifications-title`,className:`border-t border-ink-800 px-3 py-2`,children:[(0,M.jsx)(`h3`,{id:`nc-notifications-title`,className:`mb-1 text-xs uppercase tracking-wide text-ink-400`,children:`Notifications`}),(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`min-w-0 flex-1 text-ink-200`,children:`When a terminal asks for you`}),(e===`off`||e===`on`)&&(0,M.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e===`on`,"aria-busy":t,disabled:t,onClick:e===`on`?r:n,className:it,children:e===`on`?`On`:`Off`}),e===null&&(0,M.jsx)(`span`,{className:`text-ink-400`,children:`…`})]}),a&&(0,M.jsx)(`p`,{className:`mt-1 text-xs text-ink-400`,children:a}),e===`on`&&(0,M.jsx)(`button`,{type:`button`,disabled:t,onClick:i,className:`mt-1 ${it}`,children:`Send a test notification`})]})}var ot=`nc-settings-title`,st=`nc-settings-dialog`,ct=`nc-screen-scale`;function lt({accent:e,next:t,cycle:n,onReloadConfig:r,reloading:a,onShowShortcuts:o}){let[s,l]=(0,j.useState)(!1),u=(0,j.useRef)(null),d=(0,j.useRef)(null),{scale:f,setScale:p}=i(),m=S();(0,j.useLayoutEffect)(()=>{if(!s)return;let e=d.current;if(!e)return;e.querySelector(`[data-initial-focus]`)?.focus();let t=()=>[...e.querySelectorAll(`a[href], button:not(:disabled), select:not(:disabled), input:not(:disabled), [tabindex]:not([tabindex="-1"])`)],n=n=>{if(n.key===`Escape`){n.preventDefault(),l(!1),u.current?.focus();return}if(n.key!==`Tab`)return;let r=t(),i=r[0],a=r.at(-1);!i||!a?(n.preventDefault(),e.focus()):n.shiftKey&&document.activeElement===i?(n.preventDefault(),a.focus()):!n.shiftKey&&document.activeElement===a&&(n.preventDefault(),i.focus())},r=t=>{let n=t.target;n instanceof Node&&!e.contains(n)&&!u.current?.contains(n)&&l(!1)};return document.addEventListener(`keydown`,n),document.addEventListener(`pointerdown`,r),()=>{document.removeEventListener(`keydown`,n),document.removeEventListener(`pointerdown`,r)}},[s]);let g=()=>{l(!1),u.current?.focus(),o()};return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`button`,{ref:u,type:`button`,onClick:()=>l(e=>!e),"aria-label":`Settings`,"aria-haspopup":`dialog`,"aria-expanded":s,"aria-controls":st,title:`Settings`,className:`ml-auto flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent`,children:(0,M.jsx)(oe,{})}),s&&(0,M.jsxs)(`div`,{ref:d,id:st,role:`dialog`,"aria-labelledby":ot,tabIndex:-1,className:`nc-pop-in origin-top-right fixed right-2 top-[calc(var(--nc-header-h)+8px)] z-50 flex max-h-[calc(100vh-3.75rem)] w-72 max-w-[calc(100vw-1rem)] flex-col overflow-y-auto rounded-md border border-ink-700 bg-ink-900 shadow-xl focus:outline-none`,style:{maxHeight:`calc(100dvh - 3.75rem)`},children:[(0,M.jsx)(`div`,{className:`border-b border-ink-700 px-3 py-2`,children:(0,M.jsx)(`h2`,{id:ot,className:`font-medium text-ink-50`,children:`Settings`})}),(0,M.jsxs)(`section`,{"aria-labelledby":`nc-appearance-title`,className:`px-3 py-2`,children:[(0,M.jsx)(`h3`,{id:`nc-appearance-title`,className:`mb-1 text-xs uppercase tracking-wide text-ink-400`,children:`Appearance`}),(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`min-w-0 flex-1 text-ink-200`,children:`Accent colour`}),(0,M.jsxs)(`button`,{type:`button`,"data-initial-focus":!0,onClick:n,...m(`session.cycleAccent`,`Accent: ${e.name} (click for ${t.name})`),"aria-label":`accent colour: ${e.name}, click for ${t.name}`,className:`flex items-center gap-1.5 rounded-sm px-2 py-1 text-ink-200 hover:bg-ink-700`,children:[(0,M.jsx)(`span`,{"aria-hidden":`true`,className:`h-3 w-3 rounded-full bg-accent ring-1 ring-ink-600`}),e.name]})]}),(0,M.jsxs)(`div`,{className:`mt-2 flex items-center gap-2`,children:[(0,M.jsx)(`label`,{htmlFor:ct,className:`min-w-0 flex-1 text-ink-200`,children:`Screen scale`}),(0,M.jsxs)(`div`,{className:`relative`,children:[(0,M.jsx)(`select`,{id:ct,"aria-label":`Screen scale`,value:f,onChange:e=>p(Number(e.currentTarget.value)),className:`appearance-none rounded-sm border border-ink-700 bg-ink-850 py-1 pl-2 pr-7 text-ink-50 focus:border-accent focus:outline-none`,children:c.map(e=>(0,M.jsxs)(`option`,{value:e,children:[e,`%`]},e))}),(0,M.jsx)(`span`,{className:`pointer-events-none absolute inset-y-0 right-2 flex items-center text-ink-400`,children:(0,M.jsx)(Be,{open:!0})})]})]})]}),(0,M.jsx)(at,{}),(0,M.jsxs)(`div`,{className:`border-t border-ink-800 px-3 py-2`,children:[(0,M.jsxs)(`button`,{type:`button`,onClick:r,disabled:a,"aria-busy":a,...m(`session.reloadConfig`,`Reload config.toml on the server (does not reload this page)`),"aria-label":`reload the server config`,className:`flex w-full items-center gap-2 rounded-sm py-1.5 text-left text-ink-200 hover:bg-ink-700 disabled:cursor-progress disabled:text-ink-400 disabled:hover:bg-transparent`,children:[(0,M.jsx)(ge,{className:`h-3.5 w-3.5 ${a?`animate-spin`:``}`}),`Reload config.toml`]}),(0,M.jsxs)(`button`,{type:`button`,onClick:g,...m(`help.shortcuts`,`Keyboard shortcuts`),"aria-label":`keyboard shortcuts`,className:`mt-1 flex w-full items-center gap-2 rounded-sm py-1.5 text-left text-ink-200 hover:bg-ink-700`,children:[(0,M.jsx)(h,{className:`h-3.5 w-3.5`}),`Keyboard shortcuts`]})]})]})]})}function ut(e){return e===`top`||e===`left`?e:null}function dt(e){return e===`top`?`left`:`top`}function ft({repos:e,repo:t,onSelectRepo:n,onCloseRepo:r,onOpenPicker:i,cloning:a,accent:o,next:s,cycle:c,draggingRepo:l,dragOverRepo:u,onRepoDragStart:d,onRepoDragMove:p,onRepoDragEnd:m,onReloadConfig:h,reloading:g,onShowShortcuts:_,tabStrip:v}){return(0,M.jsxs)(`header`,{className:`flex h-(--nc-header-h) items-center gap-2 border-b border-chrome-line bg-ink-900 px-[12.8px]`,children:[(0,M.jsx)(`div`,{className:`flex shrink-0 items-center gap-2`,children:(0,M.jsx)(ze,{})}),(0,M.jsx)(We,{className:`md:hidden`,repos:e,currentId:t,onSelect:n,onCloseProject:r,onOpenPicker:i}),v.side===`top`&&(0,M.jsx)(Ge,{side:`top`,repos:e,repo:t,onSelectRepo:n,onCloseRepo:r,onOpenPicker:i,draggingRepo:l,dragOverRepo:u,onRepoDragStart:d,onRepoDragMove:p,onRepoDragEnd:m}),a&&(0,M.jsxs)(`span`,{role:`status`,title:`A clone is running on the server`,className:`flex shrink-0 items-center gap-1.5 px-2 py-0.5 text-ink-400`,children:[(0,M.jsx)(`span`,{"aria-hidden":`true`,className:`h-1.5 w-1.5 animate-pulse rounded-full bg-accent`}),`Cloning…`]}),(0,M.jsx)(lt,{accent:o,next:s,cycle:c,onReloadConfig:h,reloading:g,onShowShortcuts:_}),(0,M.jsx)(`button`,{onClick:v.toggle,title:`Project tabs ${v.side===`top`?`across the top`:`down the left`} (click to move them ${dt(v.side)})`,"aria-label":`project tabs: ${v.side}, click for ${dt(v.side)}`,"aria-pressed":v.side===`left`,className:`ml-1 hidden h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent md:flex`,children:(0,M.jsx)(f,{side:v.side})}),(0,M.jsx)(`a`,{href:`/logout`,title:`Sign out`,"aria-label":`sign out`,className:`ml-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent`,children:(0,M.jsx)(be,{})})]})}var pt=[`w-3/5`,`w-2/5`,`w-4/5`,`w-1/2`,`w-3/4`,`w-1/3`,`w-2/3`];function mt({className:e=``}){return(0,M.jsx)(`span`,{"aria-hidden":`true`,className:`nc-skeleton block h-2.5 rounded-xs ${e}`})}function ht({rows:e=6,as:t=`div`,className:n=``}){let r=t;return(0,M.jsx)(M.Fragment,{children:Array.from({length:e},(e,t)=>(0,M.jsxs)(r,{"aria-hidden":`true`,className:`flex items-center gap-2 px-3 py-1.5 ${n}`,children:[(0,M.jsx)(mt,{className:`w-3 shrink-0`}),(0,M.jsx)(mt,{className:pt[t%pt.length]})]},t))})}function gt(){return(0,M.jsxs)(`div`,{"aria-busy":`true`,"aria-label":`Loading`,className:`flex h-full flex-col`,children:[(0,M.jsxs)(`div`,{className:`flex h-(--nc-header-h) shrink-0 items-center gap-2 border-b border-chrome-line bg-ink-900 px-[12.8px]`,children:[(0,M.jsx)(mt,{className:`h-[22px] w-[22px] shrink-0 rounded-sm`}),(0,M.jsx)(mt,{className:`hidden w-24 md:block`}),(0,M.jsx)(mt,{className:`w-28 md:hidden`}),(0,M.jsx)(mt,{className:`ml-auto h-4 w-4 shrink-0`}),(0,M.jsx)(mt,{className:`ml-1 h-4 w-4 shrink-0`})]}),(0,M.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 grid-rows-[minmax(0,1fr)] md:grid-cols-[18rem_minmax(0,1fr)] md:grid-rows-[minmax(0,3fr)_minmax(0,2fr)]`,children:[(0,M.jsx)(`div`,{className:`overflow-hidden border-chrome-line py-2 md:border-r`,children:(0,M.jsx)(ht,{rows:10})}),(0,M.jsx)(`div`,{className:`hidden overflow-hidden py-2 md:block`,children:(0,M.jsx)(ht,{rows:14})}),(0,M.jsxs)(`div`,{className:`hidden overflow-hidden border-t border-chrome-line md:col-span-2 md:block`,children:[(0,M.jsxs)(`div`,{className:`flex h-8 items-center gap-2 border-b border-chrome-line px-3`,children:[(0,M.jsx)(mt,{className:`w-30`}),(0,M.jsx)(mt,{className:`w-30`})]}),(0,M.jsx)(`div`,{className:`py-2`,children:(0,M.jsx)(ht,{rows:5})})]})]}),(0,M.jsx)(`div`,{className:`flex shrink-0 border-t border-chrome-line bg-ink-900 md:hidden`,children:[0,1,2].map(e=>(0,M.jsxs)(`div`,{className:`flex min-h-11 flex-1 flex-col items-center justify-center gap-1 py-1`,children:[(0,M.jsx)(mt,{className:`h-5 w-5`}),(0,M.jsx)(mt,{className:`h-2 w-10`})]},e))})]})}function _t({onSuccess:e}){let[t,n]=(0,j.useState)(``),[r,i]=(0,j.useState)(null),[a,o]=(0,j.useState)(!1);return(0,M.jsx)(`div`,{className:`flex h-full items-center justify-center p-6`,children:(0,M.jsxs)(`form`,{onSubmit:async n=>{n.preventDefault(),o(!0),i(null);try{await A.login(t),e()}catch(e){i(e instanceof Error?e.message:`login failed`)}finally{o(!1)}},className:`w-[17rem] max-w-[86vw]`,children:[(0,M.jsx)(Re,{className:`mx-auto mb-3 block h-10 w-10`}),(0,M.jsx)(`h1`,{className:`text-center text-lg font-medium tracking-wide text-ink-50`,children:`nightcrow`}),(0,M.jsx)(`p`,{className:`mt-1 mb-5 text-center text-caption text-ink-400 uppercase`,children:`web viewer`}),r&&(0,M.jsx)(`p`,{className:`mb-2.5 text-center text-removed`,children:r}),(0,M.jsx)(`input`,{type:`password`,autoFocus:!0,value:t,onChange:e=>n(e.target.value),placeholder:`password`,className:`mb-2 w-full rounded-sm border border-ink-700 bg-ink-900 px-2.5 py-1.5 outline-none placeholder:text-ink-400 focus:border-accent focus:ring-[3px] focus:ring-accent/15`}),(0,M.jsx)(`button`,{"aria-busy":a,type:`submit`,disabled:a,className:`w-full rounded-sm bg-ink-50 py-1.5 font-semibold text-ink-950 hover:bg-white disabled:opacity-50`,children:(0,M.jsx)(Ee,{busy:a,children:`Sign in`})})]})})}var vt=`nightcrow.sidebarWidth`,yt=.5;function bt(e){return Math.min(Math.max(Math.round(e),280),720)}function xt(e){let t=720;try{t=Math.min(t,Math.round(window.innerWidth*yt))}catch{}return Math.min(Math.max(Math.round(e),280),Math.max(t,280))}function St(){try{let e=Number(localStorage.getItem(vt));return Number.isFinite(e)&&e>0?bt(e):460}catch{return 460}}function Ct(e){try{localStorage.setItem(vt,String(e))}catch{}}function wt(){let[e,t]=(0,j.useState)(St),n=(0,j.useCallback)(e=>{let n=xt(e);t(n),Ct(n)},[]);return{width:e,resize:n,commit:n,reset:(0,j.useCallback)(()=>{let e=bt(460);t(e),Ct(e)},[])}}var Tt=`[data-terminal-panel]`,Et=`dialog[open], [role="dialog"], [aria-modal="true"]`,Dt=`input, textarea, select, [contenteditable], [role="textbox"], [role="searchbox"], [role="combobox"]`,Ot=`data-focus-region`;function kt(e){return{"data-focus-region":e,tabIndex:-1}}function At(e){if(!(e instanceof Element)||e.closest(`[data-terminal-panel]`))return null;let t=e.closest(Dt)??e;return{tagName:t.tagName,isContentEditable:Pt(t),role:t.getAttribute(`role`),type:Ft(t),inDialog:e.closest(Et)!==null}}function jt(e=document){return Mt(e)===`terminal`}function Mt(e=document){let t=e.activeElement;if(!t)return null;if(t.closest(`[data-terminal-panel]`))return`terminal`;let n=t.closest(`[${Ot}]`)?.getAttribute(Ot);return n===`list`||n===`content`?n:null}function Nt(e,t=document){let n=t.querySelector(`[${Ot}="${e}"]`);if(!n)return!1;let r=x(t.activeElement,t.querySelector(Tt));return o(r)?(n.focus(),!0):!1}function Pt(e){let t=e.getAttribute(`contenteditable`);return t===null?e.isContentEditable===!0:t!==`false`}function Ft(e){return e.tagName===`INPUT`?e.type?.toLowerCase()??null:null}function It(){let e=new Map;return{start(t){let n=(e.get(t)??0)+1;return e.set(t,n),n},isCurrent(t,n){return e.get(t)===n}}}var Lt={children:{},expanded:new Set};function Rt(e,t,n){return{...e,children:{...e.children,[t]:n}}}function zt(e,t){let n=new Set(e);return n.delete(t)||n.add(t),n}function Bt(e,t){return{...e,expanded:zt(e.expanded,t)}}function Vt(e,t){let n=new Set(e.expanded);return t.forEach(e=>n.add(e)),{...e,expanded:n}}function Ht(e){let t=[],n=``;for(let r of e.split(`/`))n=n?`${n}/${r}`:r,t.push(n);return t}var Ut=180,Wt={items:[],truncated:!1};function Gt({repo:e,authed:t,tab:n,filter:r,filterOpen:i,handle:a}){let[o,s]=(0,j.useState)(Lt),[c,l]=(0,j.useState)(Wt),[u,d]=(0,j.useState)(!1),[f]=(0,j.useState)(It);(0,j.useEffect)(()=>{if(!e||!t||n!==`tree`||!i||!r){l(Wt),d(!1);return}d(!0);let o=!0,s=setTimeout(()=>{A.treeSearch(e,r).then(e=>{o&&l({items:e.matches,truncated:e.truncated})}).catch(e=>{o&&a(e)}).finally(()=>{o&&d(!1)})},Ut);return()=>{o=!1,clearTimeout(s)}},[e,t,n,r,i,a]);let p=(0,j.useCallback)((t,n)=>{if(!e)return;let r=f.start(t);A.tree(e,t).then(e=>{f.isCurrent(t,r)&&s(n=>Rt(n,t,e.entries))}).catch(e=>{if(!f.isCurrent(t,r)||n?.restoring)return je(e)?a(e):void 0;a(e)})},[e,a,f]);(0,j.useEffect)(()=>{e&&t&&n===`tree`&&p(``)},[e,t,n,p]);let m=(0,j.useCallback)(e=>{let t=!o.expanded.has(e);s(t=>Bt(t,e)),t&&!(e in o.children)&&p(e)},[o,p]),h=(0,j.useCallback)(e=>{s(t=>({...t,expanded:new Set(e)})),e.forEach(e=>{e in o.children||p(e,{restoring:!0})})},[o,p]),g=(0,j.useCallback)(e=>{let t=Ht(e);s(e=>Vt(e,t)),t.forEach(e=>{e in o.children||p(e)})},[o,p]);return{treeChildren:o.children,treeExpanded:o.expanded,treeMatches:c.items,treeTruncated:c.truncated,treeSearchLoading:u,loadTreeChildren:p,toggleTreeDir:m,revealTreeDir:g,seedTreeExpanded:h}}function Kt(e,t){let n=[],r=(i,a)=>{for(let o of e[i]??[]){let e=i?`${i}/${o.name}`:o.name;n.push({path:e,name:o.name,is_dir:o.is_dir,depth:a}),o.is_dir&&t.has(e)&&r(e,a+1)}};return r(``,0),n}var qt=[`status`,`log`,`tree`],Jt={status:`Show the working-tree status`,log:`Show the commit log`,tree:`Show the file tree`};function Yt(e){return e===`log`?`view.toggleLog`:e===`tree`?`view.toggleTree`:null}function Xt({tab:e,onChoose:t,filterOpen:n,onToggleFilter:r}){let i=S();return(0,M.jsxs)(`div`,{className:`flex shrink-0 items-stretch border-b border-chrome-line px-2`,children:[qt.map(n=>{let r=Yt(n);return(0,M.jsx)(`button`,{onClick:()=>t(n),"aria-current":n===e?`page`:void 0,...r&&n!==e?i(r,Jt[n]):{title:Jt[n]},className:`px-2 py-1.5 ${n===e?`text-ink-50 shadow-[inset_0_-1px_0_0_var(--color-accent)]`:`text-ink-400 hover:text-ink-200`}`,children:n},n)}),(0,M.jsx)(`button`,{onClick:r,"aria-pressed":n,title:n?`Hide the filter`:`Filter the list`,"aria-label":n?`Hide the filter`:`Filter the list`,className:`my-1 ml-auto flex shrink-0 items-center rounded-sm px-1.5 hover:text-accent ${n?`text-ink-50`:`text-ink-400`}`,children:(0,M.jsx)(Se,{})})]})}function Zt({path:e,from:t,className:n}){return(0,M.jsx)(`span`,{className:`whitespace-nowrap ${n??``}`,title:t?`${t} → ${e}`:e,children:t?`${t} → ${e}`:e})}var N=1e3;function Qt(e,t){return e===void 0||e<=0?0:e-t}function $t(e,t,n){let r=Qt(t,n);return e===null||Math.abs(r-e)>=1e3?r:e}function en(e,t,n){if(e===void 0)return`cool`;let r=Math.max(0,t-e);return r>=n?`cool`:r<5e3?`fresh`:`warm`}function tn(e,t,n){return e.some(e=>en(e,t,n)!==`cool`)}var nn={fresh:`text-accent font-bold`,warm:`text-accent`,cool:``};function rn(e,t,n){let[r,i]=(0,j.useState)(()=>Date.now()+n);return(0,j.useEffect)(()=>{if(t<=0||!e)return;let r=e.map(e=>e.mtime),a=Date.now()+n;if(i(a),!tn(r,a,t))return;let o=setInterval(()=>{let e=Date.now()+n;i(e),tn(r,e,t)||clearInterval(o)},N);return()=>clearInterval(o)},[e,t,n]),r}function an(e){return e.startsWith(`not a git repository`)?`Not a git repository. Run git init here to track changes.`:`Status unavailable: ${e}`}function on(e){let t=Math.max(0,Math.floor(Date.now()/1e3-e));return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:t<2592e3?`${Math.floor(t/86400)}d`:t<31536e3?`${Math.floor(t/2592e3)}mo`:`${Math.floor(t/31536e3)}y`}function sn(e){return e===`+`?`bg-added/10`:e===`-`?`bg-removed/10`:``}function cn(e){return e===`?`?`text-ink-400`:e===`D`?`text-removed`:e===`A`?`text-added`:`text-accent`}function ln({status:e,files:t,now:n,hotWindowMs:r,openDiff:i}){return e===null?(0,M.jsx)(ht,{as:`li`,rows:8}):e.unavailable===void 0?(0,M.jsxs)(M.Fragment,{children:[t.map(e=>(0,M.jsx)(`li`,{children:(0,M.jsxs)(`button`,{onClick:()=>i(e.path),className:`flex w-max min-w-full gap-2 px-3 py-0.5 text-left hover:bg-ink-850`,children:[(0,M.jsxs)(`span`,{className:`shrink-0`,children:[(0,M.jsx)(`span`,{className:cn(e.index),children:e.index===` `?` `:e.index}),(0,M.jsx)(`span`,{className:cn(e.worktree),children:e.worktree===` `?` `:e.worktree})]}),(0,M.jsx)(Zt,{path:e.path,from:e.old_path,className:nn[en(e.mtime,n,r)]})]})},e.path)),e.truncated&&(0,M.jsxs)(`li`,{className:`px-3 py-1 text-accent`,children:[`Showing the first `,e.files.length,` changed files.`]})]}):(0,M.jsx)(`li`,{className:`nc-fade-in px-3 py-1 text-ink-400`,children:an(e.unavailable)})}var un={merge:`MERGING`,rebase:`REBASING`,"cherry-pick":`CHERRY-PICKING`,revert:`REVERTING`,bisect:`BISECTING`,am:`APPLYING`};function dn(e){let t=e?.operation,n=t?t.step!==void 0&&t.total!==void 0?`${un[t.kind]} ${t.step}/${t.total}`:un[t.kind]:null,r=e?.conflicts??0,i=r===0?null:r===1?`1 conflict`:`${r} conflicts`;return n&&i?`${n} · ${i}`:n??i}function fn(e){return e.kind===`head`&&e.name!==`HEAD`?`HEAD → ${e.name}`:e.name}function pn(e){switch(e){case`head`:return`border-accent text-accent font-medium`;case`local`:return`border-added/60 text-added`;case`tag`:return`border-ink-600 text-ink-200`;case`remote`:return`border-ink-700 text-ink-400`}}function mn({visibleCommits:e,decorations:t,commits:n,commitDrillDown:r,visibleCommitFiles:i,logDone:a,logStalled:o,logPagingPaused:s,setLogStalled:c,logSentinelRef:l,openCommitFiles:u,openCommit:d,openCommitFileDiff:f,setCommitDrillDown:p,setPaneEmpty:m,bumpPaneRequest:h}){return(0,M.jsxs)(M.Fragment,{children:[!r&&e.map(e=>{let n=t.divergenceOf(e.oid);return(0,M.jsx)(`li`,{children:(0,M.jsxs)(`button`,{onClick:()=>void u(e),title:`${e.author} · ${e.summary}`,className:`flex w-max min-w-full items-baseline gap-2 px-3 py-0.5 text-left hover:bg-ink-850`,children:[(0,M.jsx)(`span`,{className:`w-2 shrink-0 ${n===`behind`?`text-accent`:`text-added`}`,title:n===`ahead`?`Not on the upstream yet`:n===`behind`?`On the upstream, not here yet`:void 0,children:n===`ahead`?`↑`:n===`behind`?`↓`:``}),(0,M.jsx)(`span`,{className:`shrink-0 text-accent`,children:e.short_id}),(0,M.jsx)(`span`,{className:`w-10 shrink-0 text-right text-ink-400`,children:on(e.time)}),(0,M.jsx)(`span`,{className:`max-w-[6rem] shrink-0 truncate text-ink-400`,children:e.author}),t.refsOf(e.oid)?.map(e=>(0,M.jsx)(`span`,{className:`shrink-0 self-center rounded-sm border px-1 text-2xs ${pn(e.kind)}`,children:fn(e)},`${e.kind}:${e.name}`)),(0,M.jsx)(`span`,{className:`whitespace-nowrap ${e.merge?`text-ink-400`:``}`,children:e.summary})]})},e.oid)}),!r&&t.truncated&&(0,M.jsx)(`li`,{className:`px-3 py-1 text-2xs text-ink-400`,children:`Too many refs to mark them all — some branch, tag or upstream marks are not shown.`}),!r&&!a&&!o&&!s&&(0,M.jsxs)(`li`,{ref:l,className:`flex flex-col gap-2 px-3 py-1.5`,"aria-hidden":`true`,children:[(0,M.jsx)(mt,{className:`w-3/5`}),(0,M.jsx)(mt,{className:`w-2/5`}),(0,M.jsx)(mt,{className:`w-1/2`})]}),!r&&!a&&!o&&s&&(0,M.jsxs)(`li`,{className:`px-3 py-1 text-ink-400`,children:[`filtering `,n.length,` loaded commits — clear the filter to load more`]}),!r&&o&&(0,M.jsx)(`li`,{className:`px-3 py-1`,children:(0,M.jsx)(`button`,{onClick:()=>c(!1),className:`text-ink-400 hover:text-accent`,children:`could not load more — retry`})}),r&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`li`,{className:`sticky top-0 z-10 flex w-max min-w-full items-center gap-1 bg-ink-900 px-2 py-1 text-ink-400`,children:[(0,M.jsx)(`button`,{onClick:()=>{h(),p(null),m()},className:`rounded-sm px-1 hover:text-accent`,title:`Back to commit log`,children:`< log`}),(0,M.jsx)(`span`,{className:`text-ink-600`,children:`·`}),(0,M.jsx)(`span`,{className:`shrink-0 text-accent`,children:r.commit.short_id}),(0,M.jsx)(`button`,{onClick:()=>d(r.commit.oid),className:`rounded-sm px-1 hover:text-accent`,title:`Show the complete commit diff`,children:`all changes`})]}),i.map(e=>(0,M.jsx)(`li`,{children:(0,M.jsxs)(`button`,{onClick:()=>f(r.commit.oid,e.path),className:`flex w-max min-w-full gap-2 px-3 py-0.5 text-left hover:bg-ink-850`,children:[(0,M.jsx)(`span`,{className:cn(e.index),children:e.index}),(0,M.jsx)(Zt,{path:e.path,from:e.old_path})]})},e.path)),r.files.length===0&&(0,M.jsx)(`li`,{className:`px-3 py-2 text-ink-400`,children:`No changed files.`}),r.files.length>0&&i.length===0&&(0,M.jsx)(`li`,{className:`px-3 py-2 text-ink-400`,children:`No matching files.`}),r.truncated&&(0,M.jsxs)(`li`,{className:`px-3 py-1 text-accent`,children:[`Showing the first `,r.files.length,` files.`]})]})]})}function hn({treeSearching:e,treeMatches:t,treeTruncated:n,treeSearchLoading:r,treeRows:i,treeExpanded:a,openFile:o,revealTreeDir:s,toggleTreeDir:c}){return e?(0,M.jsxs)(M.Fragment,{children:[t.map(e=>(0,M.jsx)(`li`,{children:(0,M.jsx)(`button`,{onClick:()=>{e.is_dir?s(e.path):o(e.path)},title:e.path,className:`w-max min-w-full whitespace-nowrap px-3 py-0.5 text-left hover:bg-ink-850`,children:e.is_dir?(0,M.jsxs)(`span`,{className:`text-accent`,children:[e.path,`/`]}):e.path})},e.path)),t.length===0&&(0,M.jsx)(`li`,{className:`px-3 py-0.5 text-ink-400`,children:r?`searching…`:`no matches`}),n&&(0,M.jsxs)(`li`,{className:`px-3 py-0.5 text-ink-400`,children:[`showing the first `,t.length,` matches`]})]}):(0,M.jsx)(M.Fragment,{children:i.map(e=>(0,M.jsx)(`li`,{children:(0,M.jsxs)(`button`,{onClick:()=>e.is_dir?c(e.path):o(e.path),title:e.path,style:{paddingLeft:`${e.depth*.75+.5}rem`},className:`flex w-max min-w-full items-center gap-1 py-0.5 pr-3 text-left hover:bg-ink-850`,children:[e.is_dir?(0,M.jsx)(Be,{open:a.has(e.path)}):(0,M.jsx)(`span`,{className:`h-3.5 w-3.5 shrink-0`}),(0,M.jsx)(`span`,{className:`whitespace-nowrap ${e.is_dir?`text-accent`:``}`,children:e.is_dir?`${e.name}/`:e.name})]})},e.path))})}function gn(e){let{tab:t,chooseTab:n,filter:r,setFilter:i,filterOpen:a,setFilterOpen:o,status:s,files:c,now:l,hotWindowMs:u,openDiff:d,openFile:f,openCommit:p,openCommitFileDiff:m,openCommitFiles:h,repo:g,authed:_,handle:v,sidebarRef:y,draggingSidebar:b,onSidebarDragStart:x,onSidebarDragMove:S,onSidebarDragEnd:C,onSidebarDragCancel:w,filesMax:T,bumpPaneRequest:ee,commits:te,logDone:ne,logStalled:re,setLogStalled:ie,commitDrillDown:ae,setCommitDrillDown:oe,logSentinelRef:se,visibleCommits:ce,decorations:E,logPagingPaused:le,visibleCommitFiles:ue,mobileView:de,restoreTree:fe,restoreKnown:pe,onTreeExpanded:me,clearPane:he,touched:ge}=e,_e=Gt({repo:g,authed:_,tab:t,filter:r,filterOpen:a,handle:v}),ve=t===`tree`&&a&&r!==``,ye=Kt(_e.treeChildren,_e.treeExpanded),{seedTreeExpanded:be}=_e,xe=(0,j.useRef)(!1);(0,j.useEffect)(()=>{xe.current||pe&&!ge&&t===`tree`&&(xe.current=!0,fe.length!==0&&be(fe))},[t,pe,ge,fe,be]);let Se=e=>{me([...zt(_e.treeExpanded,e)]),_e.toggleTreeDir(e)},D=e=>{let t=new Set(_e.treeExpanded);Ht(e).forEach(e=>t.add(e)),me([...t]),_e.revealTreeDir(e)},O=()=>{a&&i(``),o(e=>!e)};return(0,M.jsxs)(`section`,{ref:y,...kt(`list`),className:`nc-fade-in relative min-h-0 flex-col overflow-hidden ${de===`files`?`flex`:`hidden md:flex`} ${T?`md:flex`:`border-chrome-line md:border-r`}`,children:[!T&&(0,M.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize the file sidebar (double-click to reset)`,title:`Drag to resize · double-click to reset`,onPointerDown:x,onPointerMove:S,onPointerUp:C,onPointerCancel:w,onLostPointerCapture:C,className:`absolute -right-px top-0 z-20 hidden h-full w-1.5 cursor-col-resize touch-none md:block ${b?`bg-accent`:`hover:bg-accent`}`}),(0,M.jsx)(Xt,{tab:t,onChoose:n,filterOpen:a,onToggleFilter:O}),a&&(0,M.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),placeholder:`filter…`,autoFocus:!0,className:`mx-2 mb-1 shrink-0 rounded-sm bg-ink-850 px-2 py-1 outline-none placeholder:text-ink-400 focus:ring-1 focus:ring-accent`}),(0,M.jsxs)(`ul`,{className:`nc-content min-h-0 flex-1 overflow-auto`,children:[t===`status`&&(0,M.jsx)(ln,{status:s,files:c,now:l,hotWindowMs:u,openDiff:d}),t===`log`&&(0,M.jsx)(mn,{visibleCommits:ce,decorations:E,commits:te,commitDrillDown:ae,visibleCommitFiles:ue,logDone:ne,logStalled:re,logPagingPaused:le,setLogStalled:ie,logSentinelRef:se,openCommitFiles:h,openCommit:p,openCommitFileDiff:m,setCommitDrillDown:oe,setPaneEmpty:he,bumpPaneRequest:ee}),t===`tree`&&(0,M.jsx)(hn,{treeSearching:ve,treeMatches:_e.treeMatches,treeTruncated:_e.treeTruncated,treeSearchLoading:_e.treeSearchLoading,treeRows:ye,treeExpanded:_e.treeExpanded,openFile:f,revealTreeDir:D,toggleTreeDir:Se})]})]})}function _n(e){let t=[],n=[],r=[],i=()=>{let e=Math.max(n.length,r.length);for(let i=0;i{t(e=>e===`split`?`unified`:`split`)},[])}}var yn=[`.md`,`.markdown`],bn=[`.html`,`.htm`];function xn(e){let t=e.toLowerCase();return yn.some(e=>t.endsWith(e))}function Sn(e){let t=e.toLowerCase();return bn.some(e=>t.endsWith(e))}function Cn(e){return xn(e)||Sn(e)}function wn(e){return e.map(e=>e.map(e=>e.t).join(``)).join(` `)}function Tn(e,t=0){if(new Set(e.hunks.map(t=>t.file_path??e.path)).size>1)return null;for(let n of e.hunks.slice(Math.max(0,t)))for(let e of n.lines)if(e.new_lineno!==void 0)return e.new_lineno;return null}function En(e){return Math.max(0,e-1-2)}function Dn(e,t){return t<=0?null:Math.min(e,t)}function On(e,t){let n=0;return e.forEach((e,r)=>{e<=t&&(n=r)}),n}var kn=600;function An(e){let[t,n]=(0,j.useState)({scrollTop:0,height:kn}),r=(0,j.useCallback)(()=>{let t=e.current;if(!t)return;let r={scrollTop:t.scrollTop,height:t.clientHeight||kn};n(e=>e.scrollTop===r.scrollTop&&e.height===r.height?e:r)},[e]);return(0,j.useLayoutEffect)(()=>{r();let t=e.current;if(!t||typeof ResizeObserver>`u`)return;let n=new ResizeObserver(r);return n.observe(t),()=>n.disconnect()},[e,r]),{viewport:t,refresh:r}}function jn(e,t,n,r=20,i=12){let a=Math.max(1,Math.ceil(n/r)),o=Math.min(Math.floor(Math.max(0,t)/r),Math.max(0,e-a)),s=o+a,c=Math.max(0,Math.min(e,o-i)),l=Math.max(c,Math.min(e,s+i));return{start:c,end:l,before:c*r,after:(e-l)*r}}function Mn(e){return Math.max(0,e-1)*20}function Nn(e){return e.kind===`empty`||!e.source?null:{want:e.kind===`diff`?`file`:`diff`,source:e.source}}function Pn(e){return e.index!==`D`&&e.worktree!==`D`}function Fn(e){return e.hunks.some(e=>e.lines.some(e=>e.old_lineno!==void 0||e.new_lineno!==void 0))}function In(e){return e.kind===`workdir`?`workdir:${e.path}`:`commit:${e.oid}:${e.path}`}function Ln({pane:e,previewRendered:t,setPreviewRendered:n,filesMax:r,setMaximized:i,onShowOtherFace:a,canEdit:o,editing:s,onToggleEdit:c}){let u=vn(),d=S();return(0,M.jsxs)(`div`,{className:`ml-auto flex shrink-0 items-center gap-1`,children:[Nn(e)&&(0,M.jsx)(`button`,{onClick:a,"aria-pressed":e.kind===`file`,title:e.kind===`file`?`Back to the diff`:`Open the whole file at this change`,"aria-label":e.kind===`file`?`Back to the diff`:`Open the whole file at this change`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${e.kind===`file`?`text-accent`:``}`,children:(0,M.jsx)(b,{})}),e.kind===`diff`&&(0,M.jsx)(`button`,{onClick:u.toggle,"aria-pressed":u.layout===`split`,title:u.layout===`split`?`Switch to unified diff`:`Switch to split diff`,"aria-label":u.layout===`split`?`Switch to unified diff`:`Switch to split diff`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${u.layout===`split`?`text-accent`:``}`,children:(0,M.jsx)(l,{})}),o&&(0,M.jsx)(`button`,{onClick:c,"aria-pressed":s,title:s?`Stop editing`:`Edit this page's text`,"aria-label":s?`Stop editing`:`Edit this page's text`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${s?`text-accent`:``}`,children:(0,M.jsx)(de,{})}),e.kind===`file`&&Cn(e.value.path)&&!s&&(0,M.jsx)(`button`,{onClick:()=>n(e=>!e),"aria-pressed":t,title:t?`Show raw source`:`Show the rendered page`,"aria-label":t?`Show raw source`:`Show the rendered page`,className:`flex shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent ${t?`text-accent`:``}`,children:(0,M.jsx)(v,{})}),(0,M.jsx)(`button`,{onClick:()=>i(r?`none`:`files`),"aria-pressed":r,...d(`view.toggleMaximize`,r?`Restore the layout`:`Maximize the file pane`),"aria-label":r?`Restore the layout`:`Maximize the file pane`,className:`hidden shrink-0 items-center rounded-sm px-1.5 py-0.5 hover:text-accent md:flex`,children:(0,M.jsx)(g,{maximized:r})})]})}var Rn=3;function zn(e){let t=e<1?1:String(Math.floor(e)).length;return Math.max(t,Rn)}function Bn(e){let t=0;for(let n of e)for(let e of n.lines)t=Math.max(t,e.old_lineno??0,e.new_lineno??0);return zn(t)}function Vn({nos:e,digits:t,tint:n=``,stickyClass:r=`sticky left-0`}){return(0,M.jsx)(`span`,{className:`${r} shrink-0 select-none bg-ink-950`,children:(0,M.jsx)(`span`,{className:`flex gap-[1ch] px-[1ch] text-ink-400 ${n}`,children:e.map((e,n)=>(0,M.jsx)(`span`,{className:`text-right`,style:{width:`${t}ch`},children:e??``},n))})})}function Hn(){let e=`(min-width: 768px)`,[t,n]=(0,j.useState)(()=>window.matchMedia(e).matches);return(0,j.useEffect)(()=>{let t=window.matchMedia(e),r=()=>n(t.matches);return t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[]),t}function Un(e,t,n){return e.hunks.flatMap((e,r)=>{let i={kind:`header`,hunk:r,text:`${e.file_path?`${e.file_path} `:``}${e.header}`};if(!t)return[i,...e.lines.map(e=>({kind:`unified`,hunk:r,line:e}))];let a=_n(e.lines);return n?[i,...a.map(({left:e,right:t})=>({kind:`pair`,hunk:r,left:e,right:t}))]:[i,...a.map(({left:e})=>({kind:`side`,hunk:r,line:e,side:`old`,border:!1})),...a.map(({right:e},t)=>({kind:`side`,hunk:r,line:e,side:`new`,border:t===0}))]})}function Wn({line:e}){return(0,M.jsxs)(`span`,{className:`whitespace-pre pr-3`,children:[(0,M.jsx)(`span`,{className:`select-none text-ink-400`,children:e.kind}),e.spans.map((e,t)=>(0,M.jsx)(`span`,{style:{color:e.c},children:e.t},t))]})}function Gn({line:e,side:t,digits:n,stickyClass:r}){let i=e?sn(e.kind):`bg-ink-900/40`;return(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-1 ${i}`,children:[(0,M.jsx)(Vn,{nos:[e?t===`old`?e.old_lineno:e.new_lineno:void 0],digits:n,tint:i,stickyClass:r}),e?(0,M.jsx)(Wn,{line:e}):(0,M.jsx)(`span`,{className:`pr-3`,children:` `})]})}function Kn({diff:e,split:t,viewport:n}){let r=Hn(),i=(0,j.useMemo)(()=>Un(e,t,r),[e,t,r]),a=Bn(e.hunks),o=jn(i.length,n.scrollTop,n.height);return(0,M.jsxs)(`div`,{className:`min-w-full py-1`,"data-virtual-count":i.length,children:[(0,M.jsx)(`div`,{"aria-hidden":`true`,style:{height:o.before}}),i.slice(o.start,o.end).map((e,t)=>{let n=o.start+t,r={"data-hunk":e.hunk,"data-virtual-row":n};if(e.kind===`header`)return(0,M.jsx)(`div`,{...r,className:`h-5 bg-ink-850 px-3 text-ink-400`,children:e.text},n);if(e.kind===`unified`){let t=sn(e.line.kind);return(0,M.jsxs)(`div`,{...r,className:`flex h-5 w-max min-w-full ${t}`,children:[(0,M.jsx)(Vn,{nos:[e.line.old_lineno,e.line.new_lineno],digits:a,tint:t}),(0,M.jsx)(Wn,{line:e.line})]},n)}return e.kind===`pair`?(0,M.jsxs)(`div`,{...r,className:`flex h-5 min-w-full`,children:[(0,M.jsx)(Gn,{line:e.left,side:`old`,digits:a}),(0,M.jsx)(`div`,{className:`flex min-w-0 flex-1 border-l border-ink-800`,children:(0,M.jsx)(Gn,{line:e.right,side:`new`,digits:a,stickyClass:`sticky left-1/2`})})]},n):(0,M.jsx)(`div`,{...r,className:`flex h-5 min-w-full ${e.border?`border-t border-ink-800`:``}`,children:(0,M.jsx)(Gn,{line:e.line,side:e.side,digits:a})},n)}),(0,M.jsx)(`div`,{"aria-hidden":`true`,style:{height:o.after}})]})}function qn({line:e}){return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{className:`text-ink-400 select-none`,children:e.kind}),e.spans.map((e,t)=>(0,M.jsx)(`span`,{style:{color:e.c},children:e.t},t))]})}function Jn({line:e,digits:t,side:n}){if(e===null)return(0,M.jsxs)(`div`,{className:`flex bg-ink-900/40`,children:[(0,M.jsx)(Vn,{nos:[void 0],digits:t,tint:`bg-ink-900/40`}),(0,M.jsx)(`span`,{className:`whitespace-pre pr-3`,children:` `})]});let r=sn(e.kind);return(0,M.jsxs)(`div`,{className:`flex ${r}`,children:[(0,M.jsx)(Vn,{nos:[n===`old`?e.old_lineno:e.new_lineno],digits:t,tint:r}),(0,M.jsx)(`span`,{className:`whitespace-pre pr-3`,children:(0,M.jsx)(qn,{line:e})})]})}function Yn({cells:e,digits:t,side:n,border:r}){return(0,M.jsx)(`div`,{className:`min-w-0 flex-none overflow-x-auto md:flex-1 md:basis-1/2 ${r?`border-t border-ink-800 md:border-t-0 md:border-l`:``}`,children:(0,M.jsx)(`div`,{className:`w-max min-w-full`,children:e.map((e,r)=>(0,M.jsx)(Jn,{line:e,digits:t,side:n},r))})})}function Xn({lines:e,digits:t}){let n=_n(e);return(0,M.jsxs)(`div`,{className:`flex flex-col md:flex-row`,children:[(0,M.jsx)(Yn,{cells:n.map(e=>e.left),digits:t,side:`old`,border:!1}),(0,M.jsx)(Yn,{cells:n.map(e=>e.right),digits:t,side:`new`,border:!0})]})}function Zn({diff:e,split:t,viewport:n={scrollTop:0,height:600}}){if(e.hunks.reduce((e,t)=>e+t.lines.length,0)>200)return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(Kn,{diff:e,split:t,viewport:n}),e.truncated&&(0,M.jsx)(`p`,{className:`p-3 text-accent`,children:`Diff truncated — it exceeded the server's size ceiling.`})]});let r=Bn(e.hunks);return(0,M.jsxs)(`div`,{className:`p-1`,children:[e.hunks.length===0&&(0,M.jsx)(`p`,{className:`p-3 text-ink-400`,children:`No changes.`}),e.hunks.map((e,n)=>{let i=(0,M.jsxs)(`div`,{className:`bg-ink-850 px-3 py-0.5 text-ink-400`,children:[e.file_path?`${e.file_path} `:``,e.header]});return(0,M.jsx)(`div`,{"data-hunk":n,className:`mb-2`,children:t?(0,M.jsxs)(M.Fragment,{children:[i,(0,M.jsx)(Xn,{lines:e.lines,digits:r})]}):(0,M.jsxs)(`div`,{className:`w-max min-w-full`,children:[i,e.lines.map((e,t)=>{let n=sn(e.kind);return(0,M.jsxs)(`div`,{className:`flex ${n}`,children:[(0,M.jsx)(Vn,{nos:[e.old_lineno,e.new_lineno],digits:r,tint:n}),(0,M.jsx)(`span`,{className:`whitespace-pre pr-3`,children:(0,M.jsx)(qn,{line:e})})]},t)})]})},n)}),e.truncated&&(0,M.jsx)(`p`,{className:`p-3 text-accent`,children:`Diff truncated — it exceeded the server's size ceiling.`})]})}var Qn=[`failed to fetch dynamically imported module`,`error loading dynamically imported module`,`importing a module script failed`,`unable to preload css`];function $n(e){let t=e instanceof Error?e.message:typeof e==`string`?e:``;if(!t)return!1;let n=t.toLowerCase();return Qn.some(e=>n.includes(e))}var er=class extends j.Component{state={error:null,failed:!1};static getDerivedStateFromError(e){return{error:e,failed:!0}}componentDidCatch(e,t){console.error(`nightcrow: a subtree failed to render`,e,t)}render(){return this.state.failed?(0,M.jsx)(tr,{chunk:$n(this.state.error),region:this.props.region,className:this.props.className}):this.props.children}};function tr({chunk:e,region:t,className:n}){return(0,M.jsxs)(`div`,{role:`alert`,className:`h-full min-h-0 flex-col items-start gap-3 p-4 text-ink-400 ${n??`flex`}`,children:[e?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`p`,{className:`text-accent`,children:`Part of the app could not be loaded.`}),(0,M.jsx)(`p`,{children:`Most likely the server was updated while this tab was open, and reloading picks up the current version. If the reload fails too, the server is not reachable from here. Either way nothing on the server is affected — the session, its repositories, and its terminals are untouched.`})]}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`p`,{className:`text-removed`,children:t?`The ${t} could not be rendered.`:`Something went wrong.`}),(0,M.jsx)(`p`,{children:`The details are in the browser console.`})]}),(0,M.jsx)(`button`,{onClick:()=>window.location.reload(),className:`rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:border-accent hover:text-accent`,children:`Reload`})]})}function nr({lines:e}){let t=zn(e.length);return(0,M.jsx)(`pre`,{className:`w-max min-w-full py-2 text-ink-200`,children:e.map((e,n)=>(0,M.jsxs)(`div`,{"data-line":n+1,className:`flex`,children:[(0,M.jsx)(Vn,{nos:[n+1],digits:t}),(0,M.jsx)(`span`,{className:`whitespace-pre pr-3`,children:e.length===0?` `:e.map((e,t)=>(0,M.jsx)(`span`,{style:{color:e.c},children:e.t},t))})]},n))})}function rr({lines:e,viewport:t}){let n=zn(e.length),r=jn(e.length,t.scrollTop,t.height);return(0,M.jsxs)(`pre`,{className:`w-max min-w-full`,"data-virtual-count":e.length,children:[(0,M.jsx)(`div`,{"aria-hidden":`true`,style:{height:r.before}}),e.slice(r.start,r.end).map((e,t)=>{let i=r.start+t;return(0,M.jsxs)(`div`,{"data-line":i+1,"data-virtual-row":i,className:`flex h-5 text-ink-200`,children:[(0,M.jsx)(Vn,{nos:[i+1],digits:n}),(0,M.jsx)(`span`,{className:`whitespace-pre pr-3`,children:e.length===0?` `:e.map((e,t)=>(0,M.jsx)(`span`,{style:{color:e.c},children:e.t},t))})]},i)}),(0,M.jsx)(`div`,{"aria-hidden":`true`,style:{height:r.after}})]})}var ir=`modulepreload`,ar=function(e,t){return new URL(e,t).href},or={},sr=function(e){return e.pathname.endsWith(`.css`)},cr=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},lr=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=ar(t,n);let r=s(t),i=sr(r);return cr(or,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:ir,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};function ur(e,t){return`${e??``}\u0000${In(t)}`}var dr=(0,j.lazy)(()=>lr(()=>import(`./Markdown-DEJAds14.js`).then(e=>({default:e.MarkdownView})),__vite__mapDeps([0,1,2,3]),import.meta.url)),fr=(0,j.lazy)(()=>lr(()=>import(`./Html-DGFy4jGa.js`).then(e=>({default:e.HtmlView})),__vite__mapDeps([4,1]),import.meta.url)),pr=(0,j.lazy)(()=>lr(()=>import(`./HtmlEditor-CrB2hwHy.js`).then(e=>({default:e.HtmlEditor})),__vite__mapDeps([5,1,2,6,7]),import.meta.url));function mr({repo:e,pane:t,loading:n=!1,previewRendered:r,setPreviewRendered:i,filesMax:a,setMaximized:o,showOtherFace:s,status:c,className:l=``}){let u=vn(),[d,f]=(0,j.useState)(!1),p=t.kind===`file`?t.value.path:null,m=t.kind===`file`&&t.source?.kind===`commit`,h=e!==null&&p!==null&&!m&&Sn(p),g=(0,j.useRef)(null),{viewport:_,refresh:v}=An(g),y=t.kind===`file`?t.anchor:void 0,b=(0,j.useRef)(null),x=()=>{let n=g.current;if(!n)return 0;let r=n.getBoundingClientRect().top,i=Array.from(n.querySelectorAll(`[data-hunk]`),e=>({offset:e.getBoundingClientRect().top-r+n.scrollTop,hunk:Number(e.dataset.hunk??0)}));return t.kind===`diff`&&t.source&&(b.current={key:ur(e,t.source),top:n.scrollTop,left:n.scrollLeft}),i[On(i.map(e=>e.offset),n.scrollTop)]?.hunk??0};return(0,j.useEffect)(()=>{let n=g.current;if(!n)return;if(t.kind===`diff`&&t.source){let r=b.current;r&&r.key===ur(e,t.source)&&(n.scrollTop=r.top,n.scrollLeft=r.left,b.current=null,v());return}if(y===void 0||t.kind!==`file`)return;let r=Dn(y,t.value.lines.length);if(r===null)return;if(t.value.lines.length>200){n.scrollTop=Mn(r),v();return}let i=n.querySelector(`[data-line="${r}"]`);i&&(n.scrollTop+=i.getBoundingClientRect().top-n.getBoundingClientRect().top,v())},[t,y,e,v]),(0,j.useEffect)(()=>{f(!1)},[e,p,m]),(0,M.jsxs)(`section`,{...kt(`content`),className:`min-h-0 min-w-0 flex-col ${l}`,children:[(0,M.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 bg-ink-850 px-3 py-0.5 text-ink-400`,children:[t.kind===`file`&&(0,M.jsx)(Zt,{path:t.value.path,className:`min-w-0 truncate`}),(0,M.jsx)(Ln,{pane:t,previewRendered:r,setPreviewRendered:i,filesMax:a,setMaximized:o,onShowOtherFace:()=>s(x()),canEdit:h,editing:d&&h,onToggleEdit:()=>f(e=>!e)})]}),(0,M.jsx)(`div`,{ref:g,onScroll:v,className:`nc-content min-h-0 flex-1 overflow-auto`,children:n?(0,M.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Loading`,className:`py-2`,children:(0,M.jsx)(ht,{rows:12})}):(0,M.jsxs)(M.Fragment,{children:[t.kind===`empty`&&(c===null?(0,M.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Loading`,className:`py-2`,children:(0,M.jsx)(ht,{rows:12})}):c.unavailable===void 0?(0,M.jsx)(`p`,{className:`nc-fade-in p-4 text-ink-400`,children:`Select a file or commit.`}):(0,M.jsx)(`p`,{className:`nc-fade-in p-4 text-ink-400`,children:an(c.unavailable)})),t.kind===`file`&&(0,M.jsxs)(M.Fragment,{children:[d&&h&&e!==null&&p!==null?(0,M.jsx)(er,{region:`preview`,children:(0,M.jsx)(j.Suspense,{fallback:(0,M.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Opening the editor`,className:`py-2`,children:(0,M.jsx)(ht,{rows:12})}),children:(0,M.jsx)(pr,{repo:e,path:p})})},`edit:${p}`):Cn(t.value.path)&&r?(0,M.jsx)(er,{region:`preview`,children:(0,M.jsx)(j.Suspense,{fallback:(0,M.jsx)(`div`,{"aria-busy":`true`,"aria-label":`Rendering`,className:`py-2`,children:(0,M.jsx)(ht,{rows:12})}),children:Sn(t.value.path)&&e!==null?(0,M.jsx)(fr,{src:A.previewUrl(e,t.value.path,t.source?.kind===`commit`?t.source.oid:void 0)}):(0,M.jsx)(dr,{source:wn(t.value.lines)})})},t.value.path):t.value.lines.length>200?(0,M.jsx)(rr,{lines:t.value.lines,viewport:_}):(0,M.jsx)(nr,{lines:t.value.lines}),t.value.truncated&&(0,M.jsx)(`p`,{className:`p-3 text-accent`,children:`File truncated — it exceeded the server's size ceiling.`})]}),t.kind===`diff`&&(0,M.jsx)(Zn,{diff:t.value,split:u.layout===`split`,viewport:_})]})})]})}var hr=[{key:`files`,label:`Repo`,icon:Ve},{key:`diff`,label:`Content`,icon:He},{key:`terminal`,label:`Terminal`,icon:Ue}];function gr({view:e,onSelect:t}){return(0,M.jsx)(`nav`,{"aria-label":`Switch view`,className:`flex shrink-0 items-stretch border-t border-chrome-line bg-ink-900 md:hidden`,children:hr.map(({key:n,label:r,icon:i})=>(0,M.jsxs)(`button`,{onClick:()=>t(n),"aria-current":e===n?`page`:void 0,className:`flex min-h-11 flex-1 flex-col items-center justify-center gap-0.5 py-1 text-xs ${e===n?`text-accent`:`text-ink-400`}`,children:[(0,M.jsx)(i,{className:`h-5 w-5`}),r]},n))})}var _r=(0,j.lazy)(()=>lr(()=>import(`./Terminal-D1zALCZX.js`).then(e=>({default:e.TerminalPanel})),__vite__mapDeps([8,1,2,9,7]),import.meta.url));function vr({repository:{id:e,current:t,status:n},sidebar:r,filePane:i,layout:{sidebarWidth:a,sidebarRef:o,draggingSidebar:s,onSidebarDragStart:c,onSidebarDragMove:l,onSidebarDragEnd:u,onSidebarDragCancel:d,upperRef:f,lowerRef:p,draggingUpper:m,onUpperDragStart:h,onUpperDragMove:g,onUpperDragEnd:_,onUpperDragCancel:v,maximized:y,setMaximized:b,mobileView:x,setMobileView:S}}){let C=y===`files`;return(0,j.useEffect)(()=>d,[e,d]),(0,j.useEffect)(()=>v,[v]),(0,M.jsxs)(M.Fragment,{children:[s&&(0,M.jsx)(`div`,{className:`fixed inset-0 z-50 cursor-col-resize`}),m&&(0,M.jsx)(`div`,{className:`fixed inset-0 z-50 cursor-row-resize`}),(0,M.jsxs)(`main`,{ref:f,className:`grid min-h-0 grid-cols-1 md:grid-cols-[var(--nc-sidebar)_minmax(0,1fr)] ${x===`terminal`?`hidden md:grid`:``} ${s||m?`select-none`:``}`,style:{"--nc-sidebar":C?`0px`:`min(${a}px, ${yt*100}vw)`},children:[(0,M.jsx)(gn,{...r,repo:e,status:n,sidebarRef:o,draggingSidebar:s,onSidebarDragStart:c,onSidebarDragMove:l,onSidebarDragEnd:u,onSidebarDragCancel:d,filesMax:C,mobileView:x},e),(0,M.jsx)(mr,{...i,filesMax:C,setMaximized:b,status:n,className:`nc-fade-in ${x===`diff`?`flex`:`hidden md:flex`}`})]}),(0,M.jsx)(er,{region:`terminal panel`,className:x===`terminal`?`flex`:`hidden md:flex`,children:(0,M.jsx)(j.Suspense,{fallback:(0,M.jsx)(`div`,{className:`min-h-0 border-t border-chrome-line ${x===`terminal`?`block`:`hidden md:block`}`}),children:(0,M.jsx)(_r,{repo:e,maximized:y===`terminal`,onToggleMaximized:()=>b(e=>e===`terminal`?`none`:`terminal`),className:`nc-fade-in ${x===`terminal`?`flex`:`hidden md:flex`} ${y===`files`?`overflow-hidden`:``}`,sectionRef:p,showDivider:y===`none`,draggingUpper:m,onUpperDragStart:h,onUpperDragMove:g,onUpperDragEnd:_,onUpperDragCancel:v})})}),(0,M.jsx)(gr,{view:x,onSelect:S}),(0,M.jsxs)(`footer`,{className:`flex shrink-0 items-center gap-3 border-t border-chrome-line bg-ink-900 px-3 py-1 text-ink-400`,children:[(0,M.jsx)(`span`,{className:`min-w-0 shrink-[1000] truncate`,children:t?.display_path}),n?.branch&&(0,M.jsx)(`span`,{className:`max-w-[50%] shrink-0 truncate text-accent`,children:n.branch}),dn(n)&&(0,M.jsx)(`span`,{className:`shrink-0 font-medium text-removed`,role:`status`,children:dn(n)}),n?.tracking&&(0,M.jsxs)(`span`,{className:`shrink-0`,children:[`↑`,n.tracking.ahead,` ↓`,n.tracking.behind]}),(0,M.jsx)(`span`,{className:`ml-auto shrink-0`,children:n?(0,M.jsx)(`span`,{className:`text-added`,children:`● live`}):`connecting…`})]})]})}function yr({settings:e}){let{leaderText:t,conflict:n,setLeader:r,disable:i,reset:a}=e,[o,s]=(0,j.useState)(t),[c,l]=(0,j.useState)(null);(0,j.useEffect)(()=>{s(t),l(null)},[t]);let u=()=>{r(o)?l(null):l(`"${o}" is not a chord. Write it as Ctrl+F, Alt+Space or Ctrl+Shift+ArrowLeft.`)};return(0,M.jsxs)(`section`,{className:`shrink-0 border-b border-ink-700 px-3 py-2`,children:[(0,M.jsxs)(`p`,{className:`text-ink-400`,children:[`Leader chord:`,` `,t?(0,M.jsx)(`kbd`,{className:`rounded-sm border border-ink-600 bg-ink-850 px-1.5 py-0.5 font-mono text-ink-50`,children:t}):(0,M.jsx)(`span`,{className:`text-ink-200`,children:`switched off`})]}),(0,M.jsxs)(`div`,{className:`mt-1.5 flex items-stretch gap-2`,children:[(0,M.jsx)(`input`,{value:o,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&u()},placeholder:`Ctrl+F`,"aria-label":`leader chord`,spellCheck:!1,autoCapitalize:`none`,autoCorrect:`off`,className:`min-w-0 flex-1 rounded-sm border border-ink-700 bg-ink-950 px-2 py-1 font-mono text-ink-50 placeholder:text-ink-400 focus:border-ink-600 focus:outline-none`}),(0,M.jsx)(`button`,{type:`button`,onClick:u,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850`,children:`Rebind`}),(0,M.jsx)(`button`,{type:`button`,onClick:i,title:`Leave the leader unbound. Standalone chords keep working.`,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850`,children:`Switch off`}),(0,M.jsx)(`button`,{type:`button`,onClick:a,title:`Back to the leader the TUI ships with`,className:`shrink-0 rounded-sm border border-ink-700 px-2 py-1 text-ink-200 hover:bg-ink-850`,children:`Reset`})]}),c&&(0,M.jsx)(`p`,{role:`alert`,className:`mt-1 text-removed`,children:c}),n&&(0,M.jsxs)(`p`,{role:`status`,className:`mt-1 text-accent`,children:[n,` Rebind it above if you would rather keep that key.`]})]})}function br({keys:e}){return e?(0,M.jsx)(`span`,{className:`flex shrink-0 items-center gap-1`,children:e.map((e,t)=>(0,M.jsxs)(`span`,{className:`flex items-center gap-1`,children:[t>0&&(0,M.jsx)(`span`,{className:`text-ink-400`,children:`then`}),(0,M.jsx)(`kbd`,{className:`rounded-sm border border-ink-600 bg-ink-850 px-1.5 py-0.5 font-mono text-ink-50`,children:e})]},e))}):(0,M.jsx)(`span`,{className:`shrink-0 text-ink-400`,children:`no key — the leader is switched off`})}function xr({action:e,keys:t,ariaKeys:n,available:r,onRun:i}){let a=`flex w-full flex-col gap-0.5 rounded-sm px-3 py-1.5 text-left ${r?``:`opacity-50`}`,o=(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`flex w-full items-baseline gap-2`,children:[(0,M.jsx)(`span`,{className:`min-w-0 flex-1 text-ink-50`,children:e.label}),e.support===`reinterpreted`&&(0,M.jsx)(`span`,{className:`shrink-0 rounded-sm bg-ink-700 px-1 text-2xs uppercase tracking-wide text-ink-200`,children:`reinterpreted`}),e.support===`browserOnly`&&(0,M.jsx)(`span`,{className:`shrink-0 rounded-sm bg-ink-700 px-1 text-2xs uppercase tracking-wide text-ink-200`,children:`browser only`}),!r&&(0,M.jsx)(`span`,{className:`shrink-0 text-2xs uppercase tracking-wide text-ink-400`,children:`not available here`}),(0,M.jsx)(br,{keys:t})]}),e.note&&(0,M.jsx)(`span`,{className:`text-ink-400`,children:e.note})]}),s={"data-shortcut-action":e.id,"aria-disabled":!r||void 0,"aria-keyshortcuts":n??void 0};return e.keyboardOnly?(0,M.jsx)(`li`,{children:(0,M.jsx)(`div`,{...s,className:a,children:o})}):(0,M.jsx)(`li`,{children:(0,M.jsx)(`button`,{type:`button`,...s,onClick:()=>{r&&i()},className:`${a} ${r?`hover:bg-ink-850`:``}`,children:o})})}var Sr={terminal:`Terminal`,project:`Projects`,view:`Layout and views`,focus:`Focus`,session:`Session`,help:`Help`},Cr=(()=>{let e=[];for(let t of ve){let n=e.find(e=>e.group===t.group);n?n.actions.push(t):e.push({group:t.group,actions:[t]})}return e})(),wr=`nc-shortcut-help-title`;function Tr({onClose:e,leader:t}){let n=ie(),r=we(),i=(0,j.useRef)(null),a=(0,j.useRef)(!1);(0,j.useEffect)(()=>{let e=document.activeElement;return i.current?.focus(),()=>{a.current||e instanceof HTMLElement&&e.isConnected&&e.focus()}},[]),(0,j.useEffect)(()=>{let t=t=>{t.key===`Escape`&&e()};return document.addEventListener(`keydown`,t),()=>document.removeEventListener(`keydown`,t)},[e]);let o=t=>{a.current=!0,n?.runAction(t.id),e()};return(0,M.jsx)(`div`,{className:`nc-fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-4`,onClick:e,children:(0,M.jsxs)(`div`,{ref:i,role:`dialog`,"aria-modal":`true`,"aria-labelledby":wr,tabIndex:-1,className:`nc-rise-in flex max-h-[85vh] w-[40rem] max-w-full flex-col rounded-lg border border-ink-700 bg-ink-900 focus:outline-none`,onClick:e=>e.stopPropagation(),children:[(0,M.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-ink-700 px-3 py-2`,children:[(0,M.jsx)(`span`,{id:wr,className:`font-medium text-ink-50`,children:`Keyboard shortcuts`}),(0,M.jsx)(`button`,{type:`button`,onClick:e,"aria-label":`close`,className:`ml-auto flex h-6 w-6 items-center justify-center rounded-sm text-ink-400 hover:text-ink-200`,children:(0,M.jsx)(pe,{})})]}),(0,M.jsx)(yr,{settings:t}),(0,M.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto py-1`,children:[Cr.map(({group:e,actions:n})=>(0,M.jsxs)(`section`,{children:[(0,M.jsx)(`h3`,{className:`px-3 py-1 text-caption uppercase text-ink-400`,children:Sr[e]}),(0,M.jsx)(`ul`,{children:n.map(e=>(0,M.jsx)(xr,{action:e,keys:m(e.id,t.leader),ariaKeys:w(e.id,t.leader),available:r(e.id),onRun:()=>o(e)},e.id))})]},e)),(0,M.jsxs)(`section`,{children:[(0,M.jsx)(`h3`,{className:`px-3 py-1 text-caption uppercase text-ink-400`,children:`Not bound in the browser`}),(0,M.jsx)(`ul`,{children:p.map(e=>(0,M.jsxs)(`li`,{className:`px-3 py-1.5`,children:[(0,M.jsxs)(`span`,{className:`flex items-baseline gap-2`,children:[(0,M.jsx)(`span`,{className:`min-w-0 flex-1 text-ink-200`,children:e.label}),(0,M.jsx)(`kbd`,{className:`shrink-0 rounded-sm border border-ink-700 bg-ink-850 px-1.5 py-0.5 font-mono text-ink-400`,children:e.leader})]}),(0,M.jsx)(`span`,{className:`text-ink-400`,children:e.reason})]},e.leader))})]})]})]})})}var Er=[`terminal.newPane`,`terminal.closePane`,`view.toggleMaximize`,`project.openDialog`,`help.shortcuts`],Dr={keys:`3-9,0`,label:`pane 1-8`,click:null},Or={keys:`3-9,0`,label:`swap active pane with this pane`,click:null},kr={keys:`esc`,label:`cancel`,click:null};function Ar(e,t,n){return e.armed&&e.swapPending?{chip:`SWAP`,segments:[Or,kr]}:e.armed?{chip:`PREFIX`,segments:Mr(n)}:t?{chip:null,segments:jr(t,n)}:{chip:null,segments:Nr(n)}}function jr(e,t){let n=r(e),i=[{keys:n,label:`leader`,click:{kind:`arm`}}];for(let e of ve)Er.includes(e.id)&&t(e.id)&&i.push(Pr(e,`${n} ${e.leader}`));return i}function Mr(e){let t=[],n=!1;for(let r of ve)r.leader!==void 0&&e(r.id)&&(T(r.id)===null?t.push(Pr(r,r.leader)):(n||t.push(Dr),n=!0));return t.push(kr),t}function Nr(e){let t=[{keys:`leader`,label:`switched off`,click:{kind:`run`,action:`help.shortcuts`}}];for(let n of ve)n.chord!==void 0&&e(n.id)&&t.push(Pr(n,n.chord));return t}function Pr(e,t){return{keys:t,label:e.hint,click:{kind:`run`,action:e.id}}}var Fr=`shrink-0 whitespace-nowrap`;function Ir({state:e,onClick:t}){let n=Ar(e,d(),we());return(0,M.jsxs)(`div`,{role:`toolbar`,"aria-label":`Keyboard hints`,className:`hidden shrink-0 items-center gap-1 overflow-hidden border-t border-chrome-line bg-ink-900 px-2 py-0.5 text-xs text-ink-400 md:flex`,children:[n.chip&&(0,M.jsx)(`span`,{"data-hint-chip":n.chip,className:`shrink-0 bg-accent px-1 font-bold text-ink-950`,children:n.chip}),n.segments.map((e,n)=>(0,M.jsxs)(j.Fragment,{children:[n>0&&(0,M.jsx)(`span`,{className:`shrink-0 text-ink-600`,children:`|`}),(0,M.jsx)(Lr,{segment:e,onClick:t})]},`${e.keys} ${e.label}`))]})}function Lr({segment:e,onClick:t}){let n=(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{className:`text-ink-200`,children:e.keys}),`: `,e.label]});if(!e.click)return(0,M.jsx)(`span`,{className:Fr,children:n});let r=e.click;return(0,M.jsx)(`button`,{type:`button`,"data-hint-action":r.kind===`run`?r.action:`arm`,onPointerDown:e=>e.preventDefault(),onClick:()=>t(r),className:`${Fr} rounded-sm hover:text-accent`,children:n})}function Rr(e,t){return e?`grid-rows-[minmax(0,1fr)_auto_auto] ${t===`terminal`?`md:grid-rows-[minmax(0,0fr)_minmax(0,1fr)_auto_auto]`:t===`files`?`md:grid-rows-[minmax(0,1fr)_minmax(0,0fr)_auto_auto]`:`md:grid-rows-[minmax(0,var(--nc-upper))_minmax(0,var(--nc-lower))_auto_auto]`}`:`grid-rows-[1fr]`}function zr(e,t){let n=Br(e);if(n.length===0)return null;let r=e.at,i=r===null?-1:n.findIndex(e=>Vr(e,r)),a;return a=i===-1?t>0?n[0]:n[n.length-1]:n[(i+t+n.length)%n.length],r!==null&&Vr(a,r)?null:a}function Br({paneCount:e,maximized:t,narrow:n,mobileView:r}){let i={kind:`list`},a={kind:`content`},o=Array.from({length:e},(e,t)=>({kind:`pane`,index:t}));if(n)switch(r){case`files`:return[i];case`diff`:return[a];case`terminal`:return o}switch(t){case`terminal`:return o;case`files`:return[i,a];case`none`:return[i,a,...o]}}function Vr(e,t){return e.kind===t.kind?e.kind!==`pane`||t.kind!==`pane`||e.index===t.index:!1}function Hr(e,t,n){if(e.length<=1||t===null)return null;let r=e.indexOf(t);return r<0?null:e[(r+n+e.length)%e.length]}var Ur={armed:!1},Wr={kind:`none`};function Gr(e=Wr){return{state:Ur,effect:e}}function Kr(e,t){switch(t.kind){case`blur`:case`focusChange`:case`dialogOpen`:case`repoChange`:case`socketReconnect`:case`disabled`:case`suppressed`:case`cancel`:return Gr();case`consumed`:return Gr();case`arm`:return{state:{armed:!0,swapPending:!1},effect:Wr};case`literalLeader`:return Gr({kind:`sendLiteralLeader`,data:t.data});case`action`:return qr(e,t.action.id);case`ignore`:return{state:e,effect:Wr}}}function qr(e,t){if(e.armed&&e.swapPending){let e=T(t);return e===null?Gr():Gr({kind:`swapWith`,pane:e})}return t===`terminal.swapPanePrompt`?{state:{armed:!0,swapPending:!0},effect:Wr}:Gr({kind:`run`,action:t})}var Jr=ve.flatMap(e=>{if(!e.chord)return[];let t=he(e.chord);return t?[{spec:t,action:e}]:[]}),Yr=new Set([`Shift`,`Control`,`Alt`,`Meta`]),Xr=229,Zr=new Set([`Process`,`Unidentified`]),Qr={kind:`ignore`};function $r(e){return e.isComposing===!0||e.keyCode===Xr||Zr.has(e.key)}function ei(e){return e.key===`Escape`||e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey&&e.key.toLowerCase()===`c`}function ti(e,t){if(e.type!==`keydown`||$r(e)||e.repeat===!0||t.suppressed)return Qr;if(t.armed){if(ei(e))return{kind:`cancel`};if(t.leader&&y(t.leader,e))return{kind:`literalLeader`,data:D(t.leader)??``};if(e.key.length===1){let t=ee(e.key);if(t)return{kind:`action`,action:t}}return Yr.has(e.key)?Qr:{kind:`consumed`}}if(t.leader&&y(t.leader,e))return{kind:`arm`};for(let{spec:t,action:n}of Jr)if(y(t,e))return{kind:`action`,action:n};return Qr}var ni=new Set([`checkbox`,`radio`,`button`,`submit`,`reset`,`image`,`range`,`color`,`file`]),ri=new Set([`textbox`,`searchbox`,`combobox`]);function ii(e){if(!e)return!1;if(e.isContentEditable===!0)return!0;let t=e.role?.toLowerCase()??``;if(ri.has(t))return!0;switch(e.tagName.toUpperCase()){case`INPUT`:return!ni.has(e.type?.toLowerCase()??`text`);case`TEXTAREA`:case`SELECT`:return!0;default:return!1}}function ai(e){return e.dialogOpen||e.composing||e.target?.inDialog===!0?!0:ii(e.target)}function oi(e,t=!0){let n=(0,j.useRef)(e);n.current=e,(0,j.useEffect)(()=>{if(!t)return;let e=e=>{n.current(e)&&(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation())};return document.addEventListener(`keydown`,e,{capture:!0}),()=>document.removeEventListener(`keydown`,e,{capture:!0})},[t])}function si({enabled:e,leader:t,dialogOpen:n,repo:r}){let i=ie(),a=(0,j.useRef)(Ur),[o,s]=(0,j.useState)(Ur),c=(0,j.useRef)(i);c.current=i;let l=(0,j.useCallback)(e=>{let t=Kr(a.current,e);a.current=t.state,s(t.state);let n=c.current;n&&ci(t.effect,n)},[]);oi((0,j.useCallback)(e=>{let r=ai({target:At(e.target),dialogOpen:n,composing:e.isComposing===!0}),i=ti(e,{leader:t,armed:a.current.armed,suppressed:r});return r?(l({kind:`suppressed`}),!1):(l(i),i.kind!==`ignore`)},[n,t,l]),e&&i!==null),(0,j.useEffect)(()=>{if(!e)return;let t=()=>l({kind:`blur`}),n=e=>{let t=At(e.target);(ii(t)||t?.inDialog===!0)&&l({kind:`focusChange`})};return window.addEventListener(`blur`,t),document.addEventListener(`focusin`,n,{capture:!0}),()=>{window.removeEventListener(`blur`,t),document.removeEventListener(`focusin`,n,{capture:!0})}},[e,l]),(0,j.useEffect)(()=>{n&&l({kind:`dialogOpen`})},[n,l]),(0,j.useEffect)(()=>{e||l({kind:`disabled`})},[e,l]);let u=(0,j.useRef)(r);return(0,j.useEffect)(()=>{u.current!==r&&(u.current=r,l({kind:`repoChange`}))},[r,l]),(0,j.useEffect)(()=>{if(i)return i.onDisarm(()=>l({kind:`socketReconnect`}))},[i,l]),(0,j.useEffect)(()=>{l({kind:`cancel`})},[t,l]),{state:o,arm:(0,j.useCallback)(()=>l({kind:`arm`}),[l]),disarm:(0,j.useCallback)(()=>l({kind:`cancel`}),[l])}}function ci(e,t){switch(e.kind){case`none`:return;case`run`:t.runAction(e.action);return;case`swapWith`:t.swapPanes(e.pane);return;case`sendLiteralLeader`:e.data&&t.sendLiteralLeader(e.data);return}}var li=`nightcrow.shortcut.leader`;function ui(){let[e,t]=(0,j.useState)(di),n=(0,j.useCallback)(e=>{t(e),pi(e===null?null:r(e))},[]),i=(0,j.useCallback)(e=>{let t=he(e);return t?(n(t),!0):!1},[n]),a=(0,j.useCallback)(()=>n(null),[n]),o=(0,j.useCallback)(()=>n(te),[n]);return{leader:e,leaderText:e?r(e):``,conflict:e?ce(e):null,setLeader:i,disable:a,reset:o}}function di(){let e=fi();return e?e.leader===null?null:he(e.leader)??te:te}function fi(){try{let e=localStorage.getItem(li);if(!e)return null;let t=JSON.parse(e);if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.leader;return n===null?{leader:null}:typeof n==`string`?{leader:n}:null}catch{return null}}function pi(e){try{localStorage.setItem(li,JSON.stringify({leader:e}))}catch{}}function mi({enabled:e,repo:t,repos:n,selectRepo:r,closeRepo:i,openPicker:a,pickerOpen:o,cycleAccent:s,reloadConfig:c,tab:l,chooseTab:u,maximized:d,setMaximized:f,mobileView:p}){let m=ie(),h=ui(),[g,_]=(0,j.useState)(!1),v=(0,j.useCallback)(()=>_(!0),[]),y=(0,j.useCallback)(()=>_(!1),[]),b=(0,j.useCallback)(e=>{let i=Hr(n.map(e=>e.id),t,e);i!==null&&r(i)},[n,t,r]),x=m?.zoomActivePane,S=(0,j.useCallback)(()=>{jt()?(f(e=>e===`terminal`?`none`:`terminal`),x?.()):f(e=>e===`files`?`none`:`files`)},[f,x]),C=(0,j.useCallback)(e=>{let t=m?.paneCursor()??null,n=Mt(),r=null;n===`terminal`?t&&t.index>=0&&(r={kind:`pane`,index:t.index}):n!==null&&(r={kind:n});let i=zr({at:r,paneCount:t?.count??0,maximized:d,narrow:window.innerWidth<768,mobileView:p},e);i!==null&&(i.kind===`pane`?m?.focusPaneAt(i.index):Nt(i.kind))},[m,d,p]),w=(0,j.useMemo)(()=>{let e={"project.openDialog":a,"session.cycleAccent":s,"session.reloadConfig":c,"help.shortcuts":v};return n.length>1&&(e[`project.previous`]=()=>b(-1),e[`project.next`]=()=>b(1)),t===null||(e[`project.close`]=()=>i(t),e[`view.toggleLog`]=()=>u(l===`log`?`status`:`log`),e[`view.toggleTree`]=()=>u(l===`tree`?`status`:`tree`),e[`view.toggleMaximize`]=S,e[`focus.list`]=()=>void Nt(`list`),e[`focus.content`]=()=>void Nt(`content`),e[`focus.previous`]=()=>C(-1),e[`focus.next`]=()=>C(1)),e},[a,s,c,v,n.length,b,t,l,i,u,S,C]);Ce(w);let T=si({enabled:e,leader:h.leader,dialogOpen:o||g,repo:t}),{arm:ee,disarm:te}=T,ne=(0,j.useCallback)(e=>{e.kind===`arm`?ee():(te(),m?.runAction(e.action))},[ee,te,m]);return{shortcutHelp:{open:g,show:v,hide:y},settings:h,hint:{state:T.state,onClick:ne}}}var hi=1e3,gi=3,_i=2e3;function vi(e,t){let[n,r]=(0,j.useState)(!1),i=(0,j.useRef)(!1),a=(0,j.useRef)(!1);(0,j.useEffect)(()=>(a.current=!1,()=>{a.current=!0}),[]);let o=(0,j.useCallback)(async t=>{for(;!a.current;){if(await new Promise(e=>setTimeout(e,hi)),a.current)return;let n;try{n=await A.cloneStatus(t)}catch(e){if(je(e)){i.current=!1,a.current||r(!1);return}if(e instanceof De&&e.status===404){if(a.current)return;E.error(`the clone's progress is no longer available`),i.current=!1,r(!1);return}continue}if(a.current)return;if(n.state===`done`){try{let t=await A.open(n.path);if(a.current)return;e(t)}catch(e){if(a.current)return;E.error(e instanceof Error?e.message:`could not open`)}finally{i.current=!1,a.current||r(!1)}return}if(n.state===`failed`){E.error(n.message),i.current=!1,r(!1);return}}},[e]),s=(0,j.useCallback)(async(e=()=>!1)=>{for(let t=0;t0&&await new Promise(e=>setTimeout(e,_i)),i.current||e()||a.current)return;let n;try{({job:n}=await A.runningClone())}catch(e){if(je(e))return;continue}if(n===null||e()||a.current||i.current)return;i.current=!0,r(!0),o(n);return}},[o]);return(0,j.useEffect)(()=>{if(!t)return;let e=!1;return s(()=>e),()=>{e=!0}},[t,s]),{busy:n,start:(0,j.useCallback)(async(e,t)=>{if(t.trim()&&!i.current){i.current=!0,r(!0);try{let{job:n}=await A.clone(e,t.trim());await o(n)}catch(e){if(i.current=!1,a.current)return;let t=e instanceof De&&e.status>=400;E.error(t?e.message:`could not confirm the clone started — check this folder before retrying`),r(!1),s()}}},[o,s])}}function yi(e,t,n,r=!1){return r&&n&&t.includes(n)?n:e&&t.includes(e)?e:n&&t.includes(n)?n:t[0]??null}function bi(e){let t=!1,n=null,r=()=>{if(t||n===null)return;let i=n;n=null,t=!0,e(i).catch(()=>{}).finally(()=>{t=!1,r()})};return e=>{n=e,r()}}function xi(e,t){return e?.enabled===t.enabled&&e.window_secs===t.window_secs?e:t}function Si(e,t){return e.length===t.length&&e.every((e,n)=>{let r=t[n];return e.id===r.id&&e.name===r.name&&e.display_path===r.display_path})?e:t}var Ci=`The viewer was updated on the server.`,wi=null,Ti=null,Ei=null;function Di(e,t){return e===null||t===null?!1:e!==t}function Oi(e){wi=e}function ki(e){Di(wi,e)?Ti!==e&&(Ti=e,Ei=E.info(Ci,{sticky:!0,action:{label:`Reload`,run:()=>window.location.reload()}})):e===wi&&Ti!==null&&(Ei!==null&&O(Ei),Ti=null,Ei=null)}var Ai=3e3;function ji({authed:e,setAuthed:t,handle:n,adoptAccent:r,adoptUpperPct:i,adoptMaximized:a,adoptViews:o,upperDraggingRef:s,accentWrites:c,upperPctWrites:l,maximizedWrites:u,viewWrites:d,resumeTick:f,orderWrites:p,repoDraggingRef:m,reorderInFlightRef:h,pendingReorderRef:g}){let[_,v]=(0,j.useState)([]),[y,b]=(0,j.useState)(null),[x,S]=(0,j.useState)(null),[C,w]=(0,j.useState)(null),[T,ee]=(0,j.useState)(!1),[te,ne]=(0,j.useState)(!0),{current:re}=(0,j.useRef)(bi(A.setActiveRepo)),ie=(0,j.useRef)(null),ae=(0,j.useRef)(null);return(0,j.useEffect)(()=>{if(e===!1)return;let f=!1,_,y=new AbortController,x=()=>{let e=c.current,C=l.current,T=u.current,te=d.current,re=p.current;return A.repos(y.signal).then(n=>{let{repos:y,hot:oe,accent:se,upper_pct:ce,active_repo:E,maximized:le,last_view:ue,now_ms:de,can_clone:fe,viewer_build:pe}=n;if(f)return;ki(pe),S(e=>xi(e,oe)),ne(fe),w(e=>$t(e,de,Date.now())),c.current===e&&r(se),l.current===C&&!s.current&&i(ce),u.current===T&&a(le),d.current===te&&o(ue??{},y.map(e=>e.id)),t(!0),ee(!0);let me=h.current||g.current!==null;p.current===re&&!m.current&&!me?v(e=>Si(e,y)):v(e=>{let t=xe(y.map(e=>e.id),e.map(e=>e.id)),n=new Map(y.map(e=>[e.id,e]));return Si(e,t.map(e=>n.get(e)).filter(Boolean))});let he=y.map(e=>e.id),ge=E!==ie.current;ie.current=E??null,ge&&E&&he.includes(E)&&(ae.current=E),b(e=>yi(e,he,E,ge)),f||(_=setTimeout(x,Ai))}).catch(e=>{f||(je(e)?(t(!1),ee(!1)):(ke(e)||n(e),_=setTimeout(x,Ai)))})};return x(),()=>{f=!0,y.abort(),_&&clearTimeout(_)}},[e,t,n,r,i,f,c,l,u,d,s,a,o,p,m,h,g]),(0,j.useEffect)(()=>{y?y!==ae.current&&(ae.current=null,re(y)):ae.current=null},[y,re]),{repos:_,setRepos:v,repo:y,setRepo:b,hot:x,clockSkewMs:C,reposLoaded:T,canClone:te}}var Mi=4;function Ni({ids:e,onReorder:t,draggingRef:n}){let r=(0,j.useRef)(null),i=(0,j.useRef)(null),a=(0,j.useRef)(null),[o,s]=(0,j.useState)(null),[c,l]=(0,j.useState)(null);return{dragging:o,target:c,onStart:(t,a)=>{t.target.closest(`button[data-tab-close]`)||t.button!==0||e.length<2||(r.current=a,i.current={x:t.clientX,y:t.clientY},n.current=!1)},onMove:e=>{let t=r.current,o=i.current;if(t===null||o===null)return;if(!n.current&&e.buttons===0){r.current=null,i.current=null;return}if(!n.current&&Math.hypot(e.clientX-o.x,e.clientY-o.y){let o=r.current,c=a.current;o!==null&&n.current&&c!==null&&t(ae(e,o,c)),r.current=null,i.current=null,a.current=null,n.current=!1,s(null),l(null)}}}function Pi({repos:e,setRepos:t,handle:n,writesRef:r,draggingRef:i,inFlightRef:a,pendingRef:o}){let s=(0,j.useCallback)(()=>{if(a.current||o.current===null)return;let e=o.current;o.current=null,a.current=!0;let i=r.current;A.reorderRepos(e).then(e=>{r.current===i&&t(e)}).catch(n).finally(()=>{a.current=!1,s()})},[n,t,a,o,r]),c=(0,j.useCallback)(e=>{r.current+=1,t(t=>{let n=xe(t.map(e=>e.id),e),r=new Map(t.map(e=>[e.id,e]));return n.map(e=>r.get(e)).filter(Boolean)}),o.current=e,s()},[s,t,o,r]);return{...Ni({ids:e.map(e=>e.id),onReorder:c,draggingRef:i}),writesRef:r,draggingRef:i,inFlightRef:a,pendingRef:o}}function Fi({authed:e,setAuthed:t,handle:n,resumeTick:r,adoptAccent:i,adoptUpperPct:a,adoptMaximized:o,adoptViews:s,accentWrites:c,upperPctWrites:l,maximizedWrites:u,viewWrites:d,upperDraggingRef:f}){let p=(0,j.useRef)(0),m=(0,j.useRef)(!1),h=(0,j.useRef)(!1),g=(0,j.useRef)(null),_=ji({authed:e,setAuthed:t,handle:n,adoptAccent:i,adoptUpperPct:a,adoptMaximized:o,adoptViews:s,upperDraggingRef:f,accentWrites:c,upperPctWrites:l,maximizedWrites:u,viewWrites:d,resumeTick:r,orderWrites:p,repoDraggingRef:m,reorderInFlightRef:h,pendingReorderRef:g}),{dragging:v,target:y,onStart:b,onMove:x,onEnd:S}=Pi({repos:_.repos,setRepos:_.setRepos,handle:n,writesRef:p,draggingRef:m,inFlightRef:h,pendingRef:g});return{..._,orderWrites:p,draggingRepo:v,dragOverRepo:y,onRepoDragStart:b,onRepoDragMove:x,onRepoDragEnd:S}}function Ii(){let[e,t]=(0,j.useState)(!1),n=(0,j.useRef)(!1);return{reload:(0,j.useCallback)(async()=>{if(!n.current){n.current=!0,t(!0);try{E.success(await A.reloadConfig())}catch(e){E.error(e instanceof Error?e.message:`could not reload the config`)}finally{n.current=!1,t(!1)}}},[]),pending:e}}function Li(e,t){let n=e.indexOf(t);return n===-1?e[0]??null:e[n+1]??e[n-1]??null}function Ri({repo:e,repos:t,setRepos:n,setRepo:r,setPane:i,setTab:a,setPickerOpen:o,handle:s,orderWrites:c}){let l=(0,j.useRef)(t);l.current=t;let u=(0,j.useRef)(e);return u.current=e,{selectOpenedRepo:(0,j.useCallback)(e=>{c.current+=1,n(t=>t.some(t=>t.id===e.id)?t:[...t,e]),r(e.id),e.id!==u.current&&(i({kind:`empty`}),a(`status`)),o(!1)},[n,r,i,a,o,c]),closeRepo:(0,j.useCallback)(async e=>{try{await A.close(e),c.current+=1;let t=Li(l.current.map(e=>e.id),e);n(t=>t.filter(t=>t.id!==e)),r(n=>n===e?t:n)}catch(e){s(e)}},[n,r,s,c])}}function zi(e,t,n){return t!==e&&(n.bumpPaneRequest(),e===`log`&&n.leaveLog(),n.recordTab(t),n.forgetPane(),!0)}function Bi(e,t,n,r,i){(0,j.useLayoutEffect)(()=>{t&&(e.some(e=>e.oid===t.commit.oid)||(r(),n(null),i()))},[e,t,n,r,i])}var Vi=5e3,Hi={refs:{},ahead:[],behind:[],truncated:!1};function Ui({repo:e,authed:t,tab:n,head:r,branch:i,refs:a,upstream:o}){let[s,c]=(0,j.useState)({key:``,value:Hi}),[l,u]=(0,j.useState)(0),d=e&&r!==void 0?`${e}|${r??``}|${i??``}|${a??``}|${o??``}`:``,f=(0,j.useRef)(s.key);f.current=s.key,(0,j.useEffect)(()=>{if(!e||!t||n!==`log`||d===``||f.current===d)return;let r=new AbortController,i;return A.logDecorations(e,r.signal).then(e=>c({key:d,value:e})).catch(()=>{r.signal.aborted||(i=setTimeout(()=>u(e=>e+1),Vi))}),()=>{r.abort(),i&&clearTimeout(i)}},[e,t,n,d,l]);let p=s.key.startsWith(`${e}|`)?s.value:Hi;return(0,j.useMemo)(()=>{let e=new Set(p.ahead),t=new Set(p.behind);return{refsOf:e=>p.refs[e],divergenceOf:n=>e.has(n)?`ahead`:t.has(n)?`behind`:void 0,truncated:p.truncated}},[p])}function Wi(e,t,n){let r=!e.truncated||e.head===void 0,i=t[0]?.oid,a=i===void 0?-1:e.commits.findIndex(e=>e.oid===i),o=a<0?[]:e.commits.slice(a);return a>=0&&o.length<=t.length&&o.every((e,n)=>e.oid===t[n].oid)?{commits:a===0?t:[...e.commits.slice(0,a),...t],anchor:e.head??null,done:n||r,mode:`prepend`}:{commits:e.commits,anchor:e.head??null,done:r,mode:`replace`}}function Gi({repo:e,authed:t,tab:n,filter:r,head:i,handle:a}){let[o,s]=(0,j.useState)([]),[c,l]=(0,j.useState)(!1),[u,d]=(0,j.useState)(!1),f=(0,j.useRef)(null),p=(0,j.useRef)(!1),m=(0,j.useRef)(!1),h=(0,j.useRef)(0),g=(0,j.useRef)(void 0),_=(0,j.useRef)(void 0),v=(0,j.useCallback)(()=>{h.current+=1,p.current=!1,m.current=!1,s([]),f.current=null,l(!1),d(!1),g.current=void 0,_.current=void 0},[]),[y,b]=(0,j.useState)(null),x=(0,j.useRef)(o);x.current=o;let S=(0,j.useRef)(c);S.current=c;let C=(0,j.useRef)(i);C.current=i;let w=(0,j.useCallback)(async t=>{if(!e)return;_.current=C.current,h.current+=1;let n=h.current;p.current=!0,m.current=!0;try{let r=await A.log(e);if(n!==h.current)return;let i=t??{commits:x.current,done:S.current},a=Wi(r,i.commits,i.done);s(a.commits),f.current=a.anchor,g.current=a.anchor,a.anchor===C.current&&(_.current=void 0),l(a.done),d(!1)}catch(e){n===h.current&&(_.current=void 0,a(e),d(!0))}finally{n===h.current&&(p.current=!1,m.current=!1)}},[e,a]),T=(0,j.useCallback)(async()=>{if(!e||p.current)return;p.current=!0;let t=h.current;try{let n=f.current,r=await A.log(e,n===null?void 0:{from:n,skip:x.current.length});if(t!==h.current)return;if(s(e=>[...e,...r.commits]),f.current=r.head??null,l(!r.truncated||r.head===void 0),n===null){g.current=r.head??null;let e=C.current;e!==void 0&&e!==(r.head??null)&&w({commits:r.commits,done:!r.truncated||r.head===void 0})}}catch(e){t===h.current&&(a(e),d(!0))}finally{t===h.current&&(p.current=!1)}},[e,a,w]);(0,j.useEffect)(()=>{e&&t&&n===`log`&&o.length===0&&!c&&!u&&T()},[e,t,n,o.length,c,u,T]),(0,j.useEffect)(()=>{if(!e||!t||n!==`log`||i===void 0||u)return;let r=g.current;r!==void 0&&(r===i?m.current||(_.current=void 0):_.current!==i&&w())},[e,t,n,i,u,w]);let ee=o.filter(e=>e.summary.toLowerCase().includes(r.toLowerCase())),te=r!==``,ne=(0,j.useRef)(null);return(0,j.useEffect)(()=>{let e=ne.current;if(!e)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&T()},{root:e.closest(`ul`),rootMargin:`400px`});return t.observe(e),()=>t.disconnect()},[T,c,u,te,y,n,ee.length]),{commits:o,logDone:c,logStalled:u,setLogStalled:d,commitDrillDown:y,setCommitDrillDown:b,resetLog:v,logSentinelRef:ne,visibleCommits:ee,logPagingPaused:te}}function Ki({repo:e,authed:t,resumeTick:n,tab:r,pane:i,setPane:a,handle:o,paneRequestRef:s}){let[c,l]=(0,j.useState)(null),u=(0,j.useRef)(i);u.current=i;let d=(0,j.useRef)(r);return d.current=r,(0,j.useLayoutEffect)(()=>{l(null)},[e,t]),(0,j.useEffect)(()=>{if(e&&t)return Oe(e,l,({reason:e})=>l({files:[],truncated:!1,unavailable:e}))},[e,t,n]),(0,j.useEffect)(()=>{if(!e||!c)return;let t=u.current;if(d.current!==`status`||t.kind!==`diff`)return;let n=t.value.path,r=c.files.find(e=>e.path===n);if(!r){a({kind:`empty`});return}let i=s.current,l=!0,f=()=>{let e=u.current;return l&&i===s.current&&e.kind===`diff`&&e.value.path===n};return A.diff(e,n).then(e=>{f()&&a({kind:`diff`,value:e,source:Pn(r)&&Fn(e)?{kind:`workdir`,path:n}:void 0})}).catch(e=>{f()&&o(e)}),()=>{l=!1}},[c,e,o,u,d,s,a]),{status:c,paneRef:u,tabRef:d}}function qi({repo:e,authed:t,hot:n,clockSkewMs:r,resumeTick:i,handle:a}){let[o,s]=(0,j.useState)(`status`),[c,l]=(0,j.useState)(``),[u,d]=(0,j.useState)(!1),[f,p]=(0,j.useState)({kind:`empty`}),[m,h]=(0,j.useState)(e);m!==e&&(h(e),p({kind:`empty`}),s(`status`));let g=(0,j.useRef)(0),_=(0,j.useCallback)(()=>{g.current+=1},[]),v=(0,j.useCallback)(()=>p({kind:`empty`}),[]),{status:y}=Ki({repo:e,authed:t,resumeTick:i,tab:o,pane:f,setPane:p,handle:a,paneRequestRef:g}),b=n?.enabled?n.window_secs*1e3:0,x=rn(y?.files,b,r??0),S=Gi({repo:e,authed:t,tab:o,filter:c,head:y?y.head??null:void 0,handle:a}),C=Ui({repo:e,authed:t,tab:o,head:y?y.head??null:void 0,branch:y?.branch,refs:y?.refs,upstream:y?.tracking?.upstream}),w=S.setCommitDrillDown,T=S.resetLog;(0,j.useLayoutEffect)(()=>{_(),w(null),T()},[e,_,w,T]);let ee=c.toLowerCase(),te=(0,j.useMemo)(()=>(y?.files??[]).filter(e=>e.path.toLowerCase().includes(ee)),[y?.files,ee]),ne=(0,j.useMemo)(()=>(S.commitDrillDown?.files??[]).filter(e=>e.path.toLowerCase().includes(ee)||e.old_path?.toLowerCase().includes(ee)),[S.commitDrillDown?.files,ee]);return{screen:{tab:o,setTab:s,filter:c,setFilter:l,filterOpen:u,setFilterOpen:d,pane:f,setPane:p},request:{paneRequestRef:g,bumpPaneRequest:_,clearPane:v},status:{value:y,files:te,now:x,hotWindowMs:b},log:{...S,decorations:C,visibleCommitFiles:ne}}}var Ji=`nightcrow.mobileView`;function Yi(e){return e===`diff`||e===`terminal`||e===`files`?e:`files`}function Xi(){try{return Yi(localStorage.getItem(Ji))}catch{return`files`}}function Zi(){let[e,t]=(0,j.useState)(Xi);return{mobileView:e,setMobileView:(0,j.useCallback)(e=>{try{localStorage.setItem(Ji,e)}catch{}t(e)},[])}}function Qi({repo:e,handle:t,setPane:n,paneRequestRef:r,setCommitDrillDown:i,setMobileView:a,setPreviewRendered:o,statusRef:s,track:c}){let l=(0,j.useCallback)(e=>{let t=s.current?.files.find(t=>t.path===e);return t?Pn(t):!1},[s]);return{openDiff:(0,j.useCallback)((i,o)=>{if(!e)return;o?.restoring||a(`diff`);let s=r.current+=1;c(s,A.diff(e,i)).then(e=>{s===r.current&&n({kind:`diff`,value:e,source:l(i)&&Fn(e)?{kind:`workdir`,path:i}:void 0})}).catch(e=>{if(s!==r.current)return je(e)?t(e):void 0;if(!o?.restoring)return t(e);je(e)&&t(e),n({kind:`empty`})})},[e,t,n,r,a,l,c]),openFile:(0,j.useCallback)((i,s)=>{if(!e)return;s?.restoring||a(`diff`),o(!0);let l=r.current+=1;c(l,A.file(e,i)).then(e=>{l===r.current&&n({kind:`file`,value:e})}).catch(e=>{if(l!==r.current)return je(e)?t(e):void 0;if(!s?.restoring)return t(e);je(e)&&t(e),n({kind:`empty`})})},[e,t,n,r,a,o,c]),openCommit:(0,j.useCallback)(i=>{if(!e)return;a(`diff`);let o=r.current+=1;c(o,A.commit(e,i)).then(e=>{o===r.current&&n({kind:`diff`,value:e})}).catch(e=>{o===r.current&&t(e)})},[e,t,n,r,a,c]),openCommitFileDiff:(0,j.useCallback)((i,o,s)=>{if(!e)return;s?.restoring||a(`diff`);let l=r.current+=1;c(l,A.commitFileDiff(e,i,o)).then(e=>{l===r.current&&n({kind:`diff`,value:e,source:Fn(e)?{kind:`commit`,oid:i,path:o}:void 0})}).catch(e=>{if(l!==r.current)return je(e)?t(e):void 0;if(!s?.restoring)return t(e);je(e)&&t(e),n({kind:`empty`})})},[e,t,n,r,a,c]),openCommitFiles:(0,j.useCallback)(async o=>{if(!e)return;a(`diff`);let s=r.current+=1;try{let t=await c(s,A.commitFiles(e,o.oid));if(s!==r.current)return;if(i({commit:o,...t}),t.files.length===0){n({kind:`empty`});return}let a=await c(s,A.commit(e,o.oid));s===r.current&&n({kind:`diff`,value:a})}catch(e){s===r.current&&t(e)}},[e,t,n,r,i,a,c]),showOtherFace:(0,j.useCallback)((i,a=0)=>{let s=Nn(i);if(!e||!s)return;let{source:u}=s,d=s.want===`file`,f=d&&i.kind===`diff`?Tn(i.value,a):null,p=r.current+=1,m=u.kind===`workdir`?d?A.file(e,u.path):A.diff(e,u.path):d?A.commitFile(e,u.oid,u.path):A.commitFileDiff(e,u.oid,u.path);d&&o(!1),c(p,m).then(e=>{p===r.current&&n(d?{kind:`file`,value:e,source:u,anchor:f===null?void 0:En(f)+1}:{kind:`diff`,value:e,source:Fn(e)&&(u.kind!==`workdir`||l(u.path))?u:void 0})}).catch(e=>{p===r.current&&t(e)})},[e,t,n,r,o,l,c])}}function $i(){let[e,t]=(0,j.useState)(null),n=(0,j.useCallback)((e,n)=>{t(e);let r=()=>t(t=>t===e?null:t);return n.then(r,r),n},[]);return{loading:e!==null,track:n}}function ea({repo:e,handle:t,pane:n,setPane:r,paneRequestRef:i,setCommitDrillDown:a,status:o}){let{mobileView:s,setMobileView:c}=Zi(),[l,u]=(0,j.useState)(!0),{loading:d,track:f}=$i(),p=(0,j.useRef)(o);p.current=o;let{openDiff:m,openFile:h,openCommit:g,openCommitFileDiff:_,openCommitFiles:v,showOtherFace:y}=Qi({repo:e,handle:t,setPane:r,paneRequestRef:i,setCommitDrillDown:a,setMobileView:c,setPreviewRendered:u,statusRef:p,track:f}),b=(0,j.useMemo)(()=>({openDiff:m,openFile:h,openCommit:g,openCommitFileDiff:_,openCommitFiles:v,showOtherFace:y}),[m,h,g,_,v,y]);return(0,j.useMemo)(()=>({openers:b,pane:n,setPane:r,paneLoading:d,previewRendered:l,setPreviewRendered:u,mobileView:s,setMobileView:c}),[b,n,r,d,l,s,c])}var ta=[`status`,`log`,`tree`];function na(){return{tab:`status`,file:null,tree_expanded:[]}}function ra(e,t){return{path:e,commit:null,face:t}}function ia(e,t,n){return{path:t,commit:e,face:n}}function aa(e){return[...e].sort().slice(0,200)}function oa(e){let t=e?.file;return!t||!t.path?{kind:`none`}:t.commit?{kind:`commitDiff`,oid:t.commit,path:t.path}:t.face===`source`?{kind:`file`,path:t.path}:{kind:`diff`,path:t.path}}function sa(e){let t=e?.tab;return t&&ta.includes(t)?t:`status`}function ca(e,t){return e?e.tab===t.tab&&e.tree_expanded.length===t.tree_expanded.length&&e.tree_expanded.every((e,n)=>e===t.tree_expanded[n])&&la(e.file,t.file):!1}function la(e,t){return!e||!t?e===t:e.path===t.path&&e.commit===t.commit&&e.face===t.face}function P({repo:e,known:t,remembered:n,latest:r,remember:i,setTab:a,openDiff:o,openFile:s,openCommitFileDiff:c}){let l=(0,j.useRef)(null),u=(0,j.useRef)(null),d=(0,j.useRef)(new Map),[f,p]=(0,j.useState)(!1),m=(0,j.useRef)(!1);(0,j.useEffect)(()=>{if(u.current!==e&&(u.current=e,l.current=null,m.current=!1,p(!1)),!e||!t||l.current===e)return;l.current=e;let r=d.current.get(e);d.current.delete(e);let f=r?{...n??na(),...r}:n;if(r&&i(e,f),m.current)return;a(sa(f));let h=oa(f);if(h.kind===`none`)return;let g={restoring:!0};h.kind===`diff`?o(h.path,g):h.kind===`file`?s(h.path,g):c(h.oid,h.path,g)},[e,t,n,i,a,o,s,c]);let h=(0,j.useCallback)(t=>{if(e){if(m.current=!0,p(!0),l.current!==e){let n=d.current.get(e);d.current.set(e,{...n,...t})}else i(e,{...r(e)??na(),...t})}},[e,r,i]);return{touched:f,noteTab:(0,j.useCallback)(e=>h({tab:e}),[h]),noteFile:(0,j.useCallback)(e=>h({file:e}),[h]),noteTree:(0,j.useCallback)(e=>h({tree_expanded:aa(e)}),[h])}}function F({repo:e,known:t,remembered:n,latest:r,remember:i,setTab:a,clearPane:o,openers:s}){let c=P({repo:e,known:t,remembered:n,latest:r,remember:i,setTab:a,openDiff:s.openDiff,openFile:s.openFile,openCommitFileDiff:s.openCommitFileDiff}),{noteFile:l,noteTab:u,noteTree:d}=c,f=(0,j.useCallback)(e=>{u(e),a(e)},[u,a]),p=(0,j.useCallback)(()=>{l(null),o()},[l,o]),m=(0,j.useMemo)(()=>({openDiff:e=>{l(ra(e,`diff`)),s.openDiff(e)},openFile:e=>{l(ra(e,`source`)),s.openFile(e)},openCommit:e=>{l(null),s.openCommit(e)},openCommitFiles:e=>(l(null),s.openCommitFiles(e)),openCommitFileDiff:(e,t)=>{l(ia(e,t,`diff`)),s.openCommitFileDiff(e,t)}}),[s,l]),h=(0,j.useCallback)((e,t)=>{l(e.kind===`commit`?ia(e.oid,e.path,t):ra(e.path,t))},[l]);return{...c,noteTree:d,chooseTab:f,forgetPane:p,asked:m,noteOtherFace:h}}function ua({project:e,view:t,layout:n}){let{repo:r,repos:i,authed:a,hot:o,clockSkewMs:s,resumeTick:c,handle:l}=e,u=qi({repo:r,authed:a,hot:o,clockSkewMs:s,resumeTick:c,handle:l}),d=ea({repo:r,handle:l,pane:u.screen.pane,setPane:u.screen.setPane,paneRequestRef:u.request.paneRequestRef,setCommitDrillDown:u.log.setCommitDrillDown,status:u.status.value}),f=F({repo:r,known:t.known,remembered:t.remembered,latest:t.latest,remember:t.remember,setTab:u.screen.setTab,clearPane:u.request.clearPane,openers:d.openers}),p=u.screen.tab,{bumpPaneRequest:m}=u.request,{setCommitDrillDown:h,resetLog:g}=u.log,{chooseTab:_,forgetPane:v}=f,y=(0,j.useCallback)(e=>void zi(p,e,{bumpPaneRequest:m,leaveLog:()=>{h(null),g()},recordTab:_,forgetPane:v}),[p,m,h,g,_,v]);Bi(u.log.commits,u.log.commitDrillDown,u.log.setCommitDrillDown,u.request.bumpPaneRequest,f.forgetPane);let b=n.maximizedPanelOf(r),x=n.setMaximizedFor,S=(0,j.useCallback)(e=>x(r,e),[r,x]),C=d.pane,w=d.openers.showOtherFace,T=f.noteOtherFace,ee=(0,j.useCallback)(e=>{let t=Nn(C);t&&T(t.source,t.want===`file`?`source`:`diff`),w(C,e)},[C,T,w]);return{setPane:d.setPane,setTab:u.screen.setTab,clearPane:u.request.clearPane,maximized:b,tab:p,chooseTab:y,setMaximized:S,repoShell:r?{repository:{id:r,current:i.find(e=>e.id===r),status:u.status.value},sidebar:{tab:u.screen.tab,filter:u.screen.filter,setFilter:u.screen.setFilter,filterOpen:u.screen.filterOpen,setFilterOpen:u.screen.setFilterOpen,files:u.status.files,now:u.status.now,hotWindowMs:u.status.hotWindowMs,...d.openers,...f.asked,chooseTab:y,authed:a,handle:l,bumpPaneRequest:u.request.bumpPaneRequest,...u.log,restoreTree:t.remembered?.tree_expanded??[],restoreKnown:t.known,onTreeExpanded:f.noteTree,clearPane:f.forgetPane,touched:f.touched},filePane:{repo:r,pane:d.pane,loading:d.paneLoading,previewRendered:d.previewRendered,setPreviewRendered:d.setPreviewRendered,showOtherFace:ee},layout:{...n.shell,maximized:b,setMaximized:S,mobileView:d.mobileView,setMobileView:d.setMobileView}}:null}}function da(){let[e,t]=(0,j.useState)(0);return(0,j.useEffect)(()=>{let e=()=>{document.visibilityState===`visible`&&t(e=>e+1)};return document.addEventListener(`visibilitychange`,e),window.addEventListener(`online`,e),()=>{document.removeEventListener(`visibilitychange`,e),window.removeEventListener(`online`,e)}},[]),e}var fa=[{name:`yellow`,color:`#d9a441`},{name:`cyan`,color:`#03c4db`},{name:`green`,color:`#77c47a`},{name:`magenta`,color:`#dc8fd5`},{name:`blue`,color:`#87acfd`}],pa=`nightcrow.viewer.accent`;function ma(e){if(!Number.isFinite(e))return 0;let t=fa.length;return(Math.trunc(e)%t+t)%t}function ha(){try{let e=localStorage.getItem(pa);return e===null?0:ma(Number(e))}catch{return 0}}function ga(e){try{localStorage.setItem(pa,String(e))}catch{}}function _a(){let[e,t]=(0,j.useState)(ha);(0,j.useLayoutEffect)(()=>{document.documentElement.style.setProperty(`--color-accent`,fa[e].color)},[e]);let n=(0,j.useCallback)(()=>{t(e=>{let t=ma(e+1);return ga(t),A.setAccent(t).catch(()=>{}),t})},[]),r=(0,j.useCallback)(e=>{t(t=>{let n=ma(e);return n===t?t:(ga(n),n)})},[]);return{accent:fa[e],next:fa[ma(e+1)],cycle:n,adopt:r}}function va(e){return Number.isFinite(e)?Math.min(Math.max(e,20),85):55}function ya(e){return Math.round(va(e))}function ba(e,t,n,r){let i=n-t;return va(i<=0?r:(e-t)/i*100)}var xa=`nightcrow.upperPct`;function Sa(){try{let e=Number(localStorage.getItem(xa));return Number.isFinite(e)&&e>0?ya(e):55}catch{return 55}}function Ca(e){try{localStorage.setItem(xa,String(e))}catch{}}function wa(){let[e,t]=(0,j.useState)(Sa);return{pct:e,resize:(0,j.useCallback)(e=>{t(va(e))},[]),commit:(0,j.useCallback)(e=>{let n=ya(e);t(n),Ca(n),A.setUpperPct(n).catch(()=>{})},[]),reset:(0,j.useCallback)(()=>{t(55),Ca(55),A.setUpperPct(55).catch(()=>{})},[]),adopt:(0,j.useCallback)(e=>{t(t=>{let n=ya(e);return n===t?t:(Ca(n),n)})},[])}}function Ta(){let[e,t]=(0,j.useState)({}),n=(0,j.useRef)(e),r=(0,j.useCallback)(e=>{n.current=e,t(e)},[]),i=(0,j.useRef)(0),a=(0,j.useRef)(new Map),o=(0,j.useCallback)(e=>{let t=a.current.get(e);if(t)return t;let n=bi(t=>A.setMaximized(e,t===`none`?null:t));return a.current.set(e,n),n},[]),s=(0,j.useCallback)((e,t)=>{if(e==null)return;let a=n.current,s=typeof t==`function`?t(a[e]??`none`):t;i.current+=1,o(e)(s);let{[e]:c,...l}=a;r(s===`none`?l:{...a,[e]:s})},[o,r]);return{panelOf:(0,j.useCallback)(t=>t!=null&&e[t]||`none`,[e]),setFor:s,adopt:(0,j.useCallback)(e=>{Ea(n.current,e)||r(e)},[r]),writes:i}}function Ea(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>e[n]===t[n])}function Da(){let[e,t]=(0,j.useState)({}),n=(0,j.useRef)(e),r=(0,j.useCallback)(e=>{n.current=e,t(e)},[]),i=(0,j.useRef)(0),a=(0,j.useRef)(new Map),o=(0,j.useCallback)(e=>{let t=a.current.get(e);if(t)return t;let n=bi(t=>A.setRepoView(e,t));return a.current.set(e,n),n},[]),s=(0,j.useCallback)((e,t)=>{e!=null&&(ca(n.current[e],t)||(i.current+=1,o(e)(t),r({...n.current,[e]:t})))},[o,r]),c=(0,j.useCallback)(t=>t==null?void 0:e[t],[e]),l=(0,j.useCallback)(e=>n.current[e],[]),u=(0,j.useRef)(new Set),[d,f]=(0,j.useState)(0);return{viewOf:c,rememberedFor:l,remember:s,adopt:(0,j.useCallback)((e,t)=>{let i=u.current;(i.size!==t.length||t.some(e=>!i.has(e)))&&(u.current=new Set(t),f(e=>e+1)),!Oa(n.current,e)&&r(e)},[r]),covers:(0,j.useCallback)(e=>e!=null&&u.current.has(e),[d]),writes:i}}function Oa(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>t[n]!==void 0&&ca(e[n],t[n]))}function ka(){let{accent:e,next:t,cycle:n,adopt:r}=_a(),{width:i,resize:a,commit:o,reset:s}=wt(),{pct:c,resize:l,commit:u,reset:d,adopt:f}=wa(),p=Ta(),m=Da(),h=(0,j.useRef)(0),g=(0,j.useRef)(0);return{accent:e,next:t,cycle:(0,j.useCallback)(()=>{h.current+=1,n()},[n]),adoptAccent:r,accentWrites:h,sidebarWidth:i,resizeSidebar:a,commitSidebarWidth:o,resetSidebarWidth:s,upperPct:c,resizeUpperPct:l,commitUpperPct:(0,j.useCallback)(e=>{g.current+=1,u(e)},[u]),resetUpperPct:(0,j.useCallback)(()=>{g.current+=1,d()},[d]),bumpUpperPctWrites:(0,j.useCallback)(()=>{g.current+=1},[]),adoptUpperPct:f,upperPctWrites:g,maximizedPanelOf:p.panelOf,setMaximizedFor:p.setFor,adoptMaximized:p.adopt,maximizedWrites:p.writes,viewOf:m.viewOf,rememberedViewFor:m.rememberedFor,rememberView:m.remember,adoptViews:m.adopt,viewCovers:m.covers,viewWrites:m.writes}}var Aa=400;function ja({value:e,valueAt:t,onGestureStart:n,resize:r,commit:i,reset:a,axis:o}){let s=(0,j.useRef)(0),c=(0,j.useRef)(0),l=(0,j.useRef)(!1),u=(0,j.useRef)(!1),d=(0,j.useRef)(0),[f,p]=(0,j.useState)(!1);return{dragging:f,onDragStart:(0,j.useCallback)(t=>{t.button===0&&t.isPrimary&&n()&&(s.current=o===`x`?t.clientX:t.clientY,c.current=e,l.current=!0,u.current=!1,p(!0),t.currentTarget.setPointerCapture(t.pointerId),t.preventDefault())},[e,n,o]),onDragMove:(0,j.useCallback)(e=>{if(!l.current)return;let n=o===`x`?e.clientX:e.clientY;if(!u.current&&Math.abs(n-s.current)<3)return;let i=t(e);i!==null&&(u.current=!0,c.current=i,r(i))},[t,r,o]),onDragEnd:(0,j.useCallback)(()=>{if(!l.current)return;if(l.current=!1,p(!1),u.current){i(c.current),d.current=0;return}let e=Date.now();e-d.current{l.current=!1,u.current=!1,d.current=0,p(!1)},[]),draggingRef:l}}function Ma({sidebarRef:e,sidebarWidth:t,resizeSidebar:n,commitSidebarWidth:r,resetSidebarWidth:i}){let a=(0,j.useRef)(0),o=(0,j.useCallback)(()=>{let t=e.current?.getBoundingClientRect().left;return t!==void 0&&(a.current=t,!0)},[e]),{dragging:s,onDragStart:c,onDragMove:l,onDragEnd:u,onDragCancel:d}=ja({value:t,valueAt:(0,j.useCallback)(e=>e.clientX-a.current,[]),onGestureStart:o,resize:n,commit:r,reset:i,axis:`x`});return{draggingSidebar:s,onSidebarDragStart:c,onSidebarDragMove:l,onSidebarDragEnd:u,onSidebarDragCancel:d}}function Na({upperRef:e,lowerRef:t,upperPct:n,resizeUpperPct:r,commitUpperPct:i,resetUpperPct:a,bumpUpperPctWrites:o}){let s=(0,j.useRef)(0),c=(0,j.useRef)(0),l=(0,j.useCallback)(()=>{let n=e.current?.getBoundingClientRect().top,r=t.current?.getBoundingClientRect().bottom;return n===void 0||r===void 0?!1:(s.current=n,c.current=r,o(),!0)},[e,t,o]),{dragging:u,onDragStart:d,onDragMove:f,onDragEnd:p,onDragCancel:m,draggingRef:h}=ja({value:n,valueAt:(0,j.useCallback)(e=>ba(e.clientY,s.current,c.current,n),[n]),onGestureStart:l,resize:r,commit:i,reset:a,axis:`y`});return{draggingUpper:u,onUpperDragStart:d,onUpperDragMove:f,onUpperDragEnd:p,onUpperDragCancel:m,upperDraggingRef:h}}function Pa(){let{accent:e,next:t,cycle:n,adoptAccent:r,accentWrites:i,sidebarWidth:a,resizeSidebar:o,commitSidebarWidth:s,resetSidebarWidth:c,upperPct:l,resizeUpperPct:u,commitUpperPct:d,resetUpperPct:f,bumpUpperPctWrites:p,adoptUpperPct:m,upperPctWrites:h,maximizedPanelOf:g,setMaximizedFor:_,adoptMaximized:v,maximizedWrites:y,viewOf:b,rememberedViewFor:x,rememberView:S,adoptViews:C,viewCovers:w,viewWrites:T}=ka(),ee=(0,j.useRef)(null),te=(0,j.useRef)(null),ne=(0,j.useRef)(null),re=Ma({sidebarRef:ee,sidebarWidth:a,resizeSidebar:o,commitSidebarWidth:s,resetSidebarWidth:c}),ie=Na({upperRef:te,lowerRef:ne,upperPct:l,resizeUpperPct:u,commitUpperPct:d,resetUpperPct:f,bumpUpperPctWrites:p});return{accent:e,next:t,cycle:n,upperPct:l,maximizedPanelOf:g,setMaximizedFor:_,viewOf:b,rememberedViewFor:x,rememberView:S,viewCovers:w,shell:{sidebarWidth:a,sidebarRef:ee,upperRef:te,lowerRef:ne,draggingSidebar:re.draggingSidebar,onSidebarDragStart:re.onSidebarDragStart,onSidebarDragMove:re.onSidebarDragMove,onSidebarDragEnd:re.onSidebarDragEnd,onSidebarDragCancel:re.onSidebarDragCancel,draggingUpper:ie.draggingUpper,onUpperDragStart:ie.onUpperDragStart,onUpperDragMove:ie.onUpperDragMove,onUpperDragEnd:ie.onUpperDragEnd,onUpperDragCancel:ie.onUpperDragCancel},guards:{adoptAccent:r,adoptUpperPct:m,adoptMaximized:v,adoptViews:C,accentWrites:i,upperPctWrites:h,maximizedWrites:y,viewWrites:T,upperDraggingRef:ie.upperDraggingRef}}}var Fa=`nightcrow.tabStripSide`;function I(){try{return ut(localStorage.getItem(Fa))??`top`}catch{return`top`}}function Ia(e){try{localStorage.setItem(Fa,e)}catch{}}function La(){let[e,t]=(0,j.useState)(I);return{side:e,toggle:(0,j.useCallback)(()=>{t(e=>{let t=dt(e);return Ia(t),t})},[])}}function Ra(){let[e,t]=(0,j.useState)(null),[n,r]=(0,j.useState)(!1),[i,a]=(0,j.useState)(null),o=(0,j.useCallback)(e=>{je(e)?t(!1):E.error(e instanceof Error?e.message:`request failed`)},[]),s=da(),c=Pa(),l=La(),u=Fi({authed:e,setAuthed:t,handle:o,resumeTick:s,...c.guards}),d=ua({project:{repo:u.repo,repos:u.repos,authed:e,hot:u.hot,clockSkewMs:u.clockSkewMs,resumeTick:s,handle:o},view:{known:c.viewCovers(u.repo),remembered:c.viewOf(u.repo),latest:c.rememberedViewFor,remember:c.rememberView},layout:{shell:c.shell,maximizedPanelOf:c.maximizedPanelOf,setMaximizedFor:c.setMaximizedFor}}),{selectOpenedRepo:f,closeRepo:p}=Ri({repo:u.repo,repos:u.repos,setRepos:u.setRepos,setRepo:u.setRepo,setPane:d.setPane,setTab:d.setTab,setPickerOpen:r,handle:o,orderWrites:u.orderWrites}),{busy:m,start:h}=vi(f,e===!0),g=u.repo,_=u.setRepo,v=d.clearPane,y=(0,j.useCallback)(e=>{e!==g&&(_(e),v())},[g,_,v]),b=u.repos.find(e=>e.id===i),x=(0,j.useCallback)(()=>a(null),[]),S=(0,j.useCallback)(()=>r(!0),[]),C=(0,j.useCallback)(()=>r(!1),[]),w=Ii(),T=mi({enabled:e===!0,repo:u.repo,repos:u.repos,selectRepo:y,closeRepo:p,openPicker:S,pickerOpen:n,cycleAccent:c.cycle,reloadConfig:w.reload,tab:d.tab,chooseTab:d.chooseTab,maximized:d.maximized,setMaximized:d.setMaximized,mobileView:d.repoShell?.layout.mobileView??`files`});return{authed:e,login:(0,j.useCallback)(()=>t(null),[]),reposLoaded:u.reposLoaded,rows:Rr(u.repo,d.maximized),upperPct:c.upperPct,header:{repos:u.repos,repo:u.repo,onSelectRepo:y,onCloseRepo:a,onOpenPicker:S,cloning:m,accent:c.accent,next:c.next,cycle:c.cycle,draggingRepo:u.draggingRepo,dragOverRepo:u.dragOverRepo,onRepoDragStart:u.onRepoDragStart,onRepoDragMove:u.onRepoDragMove,onRepoDragEnd:u.onRepoDragEnd,onReloadConfig:w.reload,reloading:w.pending,tabStrip:l},tabStrip:l,shortcutHelp:T.shortcutHelp,leader:T.settings,hint:T.hint,repoShell:d.repoShell,closeConfirm:b?{label:b.name,detail:`Its terminals and the processes running in them will be terminated.`,onConfirm:()=>{a(null),p(b.id)},onCancel:x}:null,picker:n?{onClose:C,onOpened:f,canClone:u.canClone,cloning:m,onClone:h}:null}}function za(){let e=Ra();return e.authed===null?(0,M.jsx)(gt,{}):e.authed?e.reposLoaded?(0,M.jsx)(s,{children:(0,M.jsx)(le,{children:(0,M.jsx)(C,{leader:e.leader.leader,children:(0,M.jsxs)(`div`,{className:`nc-fade-in flex h-full flex-col`,children:[(0,M.jsx)(ft,{...e.header,onShowShortcuts:e.shortcutHelp.show}),(0,M.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[e.tabStrip.side===`left`&&(0,M.jsx)(`aside`,{className:`hidden w-48 shrink-0 flex-col border-r border-chrome-line bg-ink-950 md:flex`,children:(0,M.jsx)(Ge,{side:`left`,...e.header})}),(0,M.jsxs)(`div`,{className:`grid min-h-0 min-w-0 flex-1 grid-cols-[minmax(0,1fr)] ${e.rows}`,style:{"--nc-upper":`${e.upperPct}fr`,"--nc-lower":`${100-e.upperPct}fr`},children:[e.repoShell?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(vr,{...e.repoShell}),(0,M.jsx)(Ir,{...e.hint})]}):(0,M.jsxs)(`div`,{className:`flex items-center justify-center p-6 text-center text-ink-400`,children:[(0,M.jsxs)(`span`,{className:`md:hidden`,children:[`No repository open. Tap`,` `,(0,M.jsx)(`span`,{className:`text-ink-200`,children:`No project`}),` above, then`,` `,(0,M.jsx)(`span`,{className:`text-ink-200`,children:`+ open`}),`, to add one.`]}),(0,M.jsxs)(`span`,{className:`hidden md:inline`,children:[`No repository open. Click`,` `,(0,M.jsx)(`span`,{className:`text-ink-200`,children:`+ open`}),` `,e.tabStrip.side===`left`?`beside`:`above`,` to add one.`]})]}),e.picker&&(0,M.jsx)(Ie,{...e.picker}),e.closeConfirm&&(0,M.jsx)(_e,{...e.closeConfirm}),e.shortcutHelp.open&&(0,M.jsx)(Tr,{onClose:e.shortcutHelp.hide,leader:e.leader})]})]})]})})})}):(0,M.jsx)(gt,{}):(0,M.jsx)(_t,{onSuccess:e.login})}var Ba={error:7e3,info:5e3,success:5e3},Va={error:`text-removed`,info:`text-accent`,success:`text-added`};function Ha(){let[e,t]=(0,j.useState)([]);return(0,j.useEffect)(()=>se(t),[]),e.length===0?null:(0,M.jsx)(`div`,{className:`pointer-events-none fixed right-3 top-3 z-[60] flex w-80 max-w-[calc(100vw-1.5rem)] flex-col gap-2`,"aria-live":`polite`,children:e.map(e=>(0,M.jsx)(Ua,{toast:e},e.id))})}function Ua({toast:e}){let[t,n]=(0,j.useState)(!1);return(0,j.useEffect)(()=>{if(t||e.sticky)return;let n=setTimeout(()=>O(e.id),Ba[e.kind]);return()=>clearTimeout(n)},[e.id,e.kind,e.bump,e.sticky,t]),(0,M.jsxs)(`div`,{role:e.kind===`error`?`alert`:`status`,className:`nc-slide-in pointer-events-auto flex items-start gap-2 rounded-md border border-ink-700 bg-ink-850 px-3 py-2 text-xs shadow-lg`,onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),children:[(0,M.jsx)(`span`,{className:`min-w-0 flex-1 break-words ${Va[e.kind]}`,children:e.message}),e.action&&(0,M.jsx)(`button`,{type:`button`,onClick:e.action.run,className:`shrink-0 rounded-sm border border-ink-700 px-1.5 py-0.5 text-ink-200 hover:border-accent hover:text-accent`,children:e.action.label}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>O(e.id),"aria-label":`dismiss`,className:`mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:bg-ink-700 hover:text-ink-200`,children:(0,M.jsx)(pe,{className:`h-3 w-3`})})]})}function Wa(e){let t=new URLSearchParams(e),n=t.get(`notice-repo`);if(!n)return null;let r=t.get(`notice-pane`);return{repo:n,pane:r!==null&&/^\d+$/.test(r)?Number(r):null}}async function Ga(e,t,n){let r=Wa(e.search);if(!r)return;let i=new URL(e.href);i.searchParams.delete(`notice-repo`),i.searchParams.delete(`notice-pane`),t.replaceState(t.state,``,i.pathname+i.search+i.hash),r.pane!==null&&ye(r.repo,r.pane),await n(r.repo).catch(()=>void 0)}ue(document.documentElement,window),_(fe()),Oi(document.querySelector(`meta[name="nightcrow-build"]`)?.getAttribute(`content`)||null),Ye(qe()),await Ga(window.location,window.history,A.setActiveRepo);var Ka=1500;await Promise.race([document.fonts?.load(`400 12px "JetBrains Mono"`).catch(()=>void 0),new Promise(e=>setTimeout(e,Ka))]),(0,Fe.createRoot)(document.getElementById(`root`)).render((0,M.jsxs)(j.StrictMode,{children:[(0,M.jsx)(er,{children:(0,M.jsx)(ne,{children:(0,M.jsx)(za,{})})}),(0,M.jsx)(Ha,{})]})); \ No newline at end of file diff --git a/viewer-ui/dist/index.html b/viewer-ui/dist/index.html index d0fdaa21..a1d8b6eb 100644 --- a/viewer-ui/dist/index.html +++ b/viewer-ui/dist/index.html @@ -14,7 +14,7 @@ nightcrow - + diff --git a/viewer-ui/src/components/repository/ProjectStrip.tsx b/viewer-ui/src/components/repository/ProjectStrip.tsx index 223d675e..520d27ca 100644 --- a/viewer-ui/src/components/repository/ProjectStrip.tsx +++ b/viewer-ui/src/components/repository/ProjectStrip.tsx @@ -133,7 +133,7 @@ export function ProjectStrip({ aria-label={`close ${r.name}`} className="mr-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-removed" > - +
))} diff --git a/viewer-ui/src/components/shell/Header.tsx b/viewer-ui/src/components/shell/Header.tsx index 27a630ce..fbf0f1e0 100644 --- a/viewer-ui/src/components/shell/Header.tsx +++ b/viewer-ui/src/components/shell/Header.tsx @@ -132,7 +132,7 @@ export function Header({ aria-label="sign out" className="ml-1 flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent" > - + ); diff --git a/viewer-ui/src/components/shell/SettingsMenu.tsx b/viewer-ui/src/components/shell/SettingsMenu.tsx index 959866d5..f975de5f 100644 --- a/viewer-ui/src/components/shell/SettingsMenu.tsx +++ b/viewer-ui/src/components/shell/SettingsMenu.tsx @@ -102,7 +102,7 @@ export function SettingsMenu({ title="Settings" className="ml-auto flex h-6 w-6 shrink-0 items-center justify-center rounded-sm text-ink-400 hover:text-accent" > - + {open && (
DN-Z7 zCra-D0t7-rPVo0W=bZI@-@DE^-#ULj{4-gLWbQpPduFbE?Q7rBuQgR^uHC&xMn*>S z@`bVv85srXBl-P*T_!ac+?#STvKwSCl@;{-bGH|0p6O!qiNwNa)~7e_k*j^AQx1Lx z{lZjg;80)4pU}|IG&?e3-stNE?P#v|Lk^*;8n=j3yT^^LQ!=g1Gcs-q&+QBiT5BDP zCzvW|E0{`S5~Ju8BFGf)1D_QT-TtNXiR@3Qd@!oYSfl+kFEZF`xbHLt77wxlaS1d2u_YD8~cF~gY-FScLqSd)iMt;#2JtL#MXkRF7h3OC7A1b0qjpU)D zi=iF07c-mmYn}I5IkNKwpW`bY_!XM`{poMqz66y}qnR^5Wb*yzrZr zukwh?snlx;*9lEVJ-P&?gv}Hgy6fs5akNyry`Y-EQ8%kVPI>*cyVB^El52}rB+Y%YFH|ia%W>12QvU%ntQ=}sF6gYQ zA_lQ3E~S`h?p~0)|3SX!Dp-VARIaIT!^GVlJEy2Gwv&|Er;`I|TXj+?n= zt-g6Oeg@4it1o>5w6uyOu-<`;*sH50Gzc-w)pd38z3Yjaaug%t*AnP?68IY*E@Vl0 zJYD)!1LE0i}bES@m7!ru-O3!-#}1Uigh$w}839 zs>;fr{DX0arR_Miop3VzT%^TOb|{5mAvE>_d7M`m4pY1|Fj*y&h96JG#!bx~yWm$k zI_mzoFHB^DPftgUDBV(LVfyA)j`ilFkI-U+A&%$Hg^mkYBoxt6ckXVc9?=||Ap`{H z-i9=?&DMwfaH^{8koMnO?hQL13+gu~j3E3<3-07SWrE{UEp`pMP0SgZ{}h9rCFj2! zveD8R)!*`%Na>4Z4PFgo2d$OyiSg^Y4fP2cxD%S7v7S?z4vqser>y}rEaC$9 ze;dePtxxuDUcE{WARL0@=%4#R&jq~;0eqM2lvb)pVWQq6Wo?CyWllQk^9fy{ezjoEWE5`fC);@hL zQuB0YROnUKV?OSllTNCfv>avkYV&Gi{t_+l6W94G+P7|ei3!is)*cZzsTi7szPl%C zhdcrhF~A{%v6A55&xRV?k3c_venpmx!E6_Hd|Q3D_m+|BnL>Oa%ACes;K0<5ymeSG z8gW~v6Y+P$;Y>MyNZ|Q%x#`0iji5{I@xr@ZVoKZmx z;F|7WU$N(pm38*q-2XepL6Q|V{WU!ns zIH$ffpVvu5u!j=Iy;GlGH!q0?%P-{xq>9N%5MgZ&Jdd3{C$abLYM=h;DX2b01#Lnb zOM8)X!EXTQ4fK$EST20u-He&#ehtTN+s6W}pFjI^t?%YEAI@}dyc52+pzGOL@%3|B zgnFhxZcf@`9XmN==b8YXLZA+lV3^10_qn4OA&1?a&Cndpx+?ke_UIt?TcYK|Xsx#h+VHB2R zO{lFE6^!WX6V3Bq>%y~C!T z7-JqYinZceRW=t``u2RU%&jp-QCY9ma_z#wl@*ImbNNc~;gk+^tkc4)^D^oM;ZJy9 zkWSmKG0n;3N%riq4Ozd+@?!VR@nyH*rF|`c;JWpm5TN$gugCj*xpH%|vn5)}{CDT= zmg@j4gN@9}#+0l{D4iCv%c*&}w@+XBhry62K@JPeCc;Sh)9ilyG zw5ZRj!@57s!K%Qp@NRueTT}A6UTPS8b0)7?XPKo9Q-iW)}NMmX+JfSK}t5 z(V=GD3>sbQFPD6d7#n){^M>9P1ibbMfalOyRvm7su6mI#5-)FfZLPt6L5`tHs{HTH z;vp|CTglL~$e0S87K}M`MQK}A-n}ckRp>7;`aOZ|)JhL|3m|b|#cnd#_cNKZe)j#| z-roB9`sU`N;vAeGBfWP|pI?}d!AI>a+Q-+Y44Kfv9o{P2L0y_z$D6wWx}Qh zu9QG(^lh2LO`#axu{%8T9#h*!qPOCdgytSS+R^#6mah~UgRUo?hu#LIAuKp#VXLv% z>JF!mi{sr}yIEdA_#}14wH&8oJ<=sr)j~>Z-Ec%bNxM7)M(jUl&I=j)%;(}=0 zRU69jUs4T+{IVE3B+DDW>c+}Er=tZ=?j7a&V<>+_S(-z(LwHi zw2WKAS*=;+yr!!s( zHFkT4lEndgs`s*pKd|MFi)|5oL+Hxd^6@g|yPQXhVfEXuv+vrCZ^ie#DBe}huAsxc z)Pqa8?ANXgjOwY^4CNm6m)Y>)gw54o3=F;yGYxSZ4%TifXULpRVG_1ze<<2{78BK- zT`EuMCd1`5S#|_v%BeVw82-fNG%4U#R;u-rVaYhxnxEH~ThQc4&EVs#spx<;AFqLE zo=JymK#al!PqB?nmc~^FBO{|bSGjd{Y@f#{G;2pM(dLK~mY^0O2^Zs-MrGL>S`u!^ z=_8KlVFyKSJ6WJ~zYp$P=QXnf0+uT>cB%Tq&3!%xFI%l&`nk2L5A6oQqUFWv<}9}v z0b)oNGI@#1;fiCx^1yu2@hBckM33P+wgXKAN} z?Koj$*-A+s6@N!`H(9l|Exk8EBTGhNsFlK^X|IMu$-6>T%ys^xtE<#1QA4(UEw74} zg$ZV-^+9s@V7)LgmQAf2mc<1rL53Wct8`UIvYW57IU?Jr;+`*kAXf>eqLSbH_QQ}G z%^YO87;6+~-T6@!9$|4dOa8zz)+i>CeN04M-sf>sqTfT?m)ol`$n>bFpH%FJujGVW z53%jo@H?WmF~0tLor6`OM^09e^)`bKtfJvc#r%t$XL~<}3Mx`kN&+rM>Af{c7uXy# zvvaigruL*Qtz^ObiDu-FQtw}qI{@Kim2MNJvtG5a8cefS$L2yJ77QNZ4L*Y2;d~w^ zASkHuGMnRg1U~RyOP={Um^ueh+IRyD^4CT77SIa_2)tr-V&-_e_q$UKg7aadXZf~2 zRuXp*dh~UKo}Q<-&h%)2vKoRr;>0vx+7J71*nEUBT2Dnxf8I(#oC1y*C ztGNi}`V%GAv=Yk&1;^q#h&2>`LB6t;Otb1*%~q=dStz})pW-^)I=654*2uLcHV=8N zLJ}wW_V#8z%VXD#9rIi*yviqay`J|F#tH))i)DN^i(ceM(lHbF6T_z4<-+C~g7=@X z-YTo82g!%%Y_Qch6ZayCt7Zzb_&d_xS(;N=z#sbCl9GZu?X9~&=%HSf<_9ExKm$}2 zM0bvgWDJw!*UJ5Rctu|8VY!~I>fHzW$?Sxv_npbff!#)W-UWR3B=qul>8Z#+o;l+k zi=v8RcJ|(?V@?`7aD{GRx1BKw6-QTS1L&Q?E4G!3b)#dSQl8zOf23IHh4jDaLC%1< zEt{U++#^}2;O3pjTYGnD@c}1ep(Bj7;dthy+2qG`euHJ>!+-`Ks1E%rM}?aD`)4a3 zSuu-ZFYgGtjVC2p)vmPfZBw5bgv3~da+Ut*q=s1t4Qhlu=_^761gKPE`&A~=(i|IB zE8ny{K$Wa6+t~v3MUAXnH*4D&T-oT3eZ-|D2%c}UFSh8U(|Ytp&|n6_;NO?fMx zb=Y7P>nM`-s;r{RlhfkEgZ9tesEv)G9iDs6^I2Ph+l-Bc-g6deP6IBQDqhAct(J<; zKaq|#51Sm-8eQg%9j92m*6)EB=nJF_|CCEsdu`<>MPpQ7>HUg80EG2qqpk9=rT%;8 zXXpUxpwhCkN8-MpI&YX62Pz&uj=J}|>=D9~otas<-MH%-=!E0nTtIT@z6~avU6%h= zrUW0GjITc$xe&AV+avD9fFM<3_syARFEnAm;(VLN|AA*zIEafY4*(8ML5WE1pB!%J zM$!iKNLl~9F+x-8GzH-2=U2AdsClOf4msutr=*BFSE}h<1>y3QsCJv)Wi-AX9BuKb zGHY_rZ}KPB+6=&94+E7|cpChc3oH)t0a{o^)$p@m)dF?p!O>*SNR|Are70we9fYcy zcRbhG?t;J_^)|!8reB%DSgxPnn|>rP&w0)y142R;JE_>)(1P3XJv}|T5Y2}V=Np2s z0M&#z*vw|z6wjG6YxmTe&+l(*^gNnOgc?#LF$@;Q99Nz=KL_KTpO5^0U`srznpu4R zvoDoraj7?e3T>~rL)zb>Xs=B{NMOw4Un1awIkmyKESeEU0Vd6EjA$e%WD1LVG)!E@wYYD%#K2iDzL%L)LJ5)u{91 z#v{S-v*u*xmv7Qyvp8ryVzQZ?GO$2q5BrycChrQ>4`pRQ2||e2jb43$$ASJY2<`D` zSDCf(TL%Ju%((pYGt*qs^5Teeyk(!_-(GI;|E<$13E-E+nMm z>Os%_>Q=8oSNPYj>q$w!vPJFqHB@=!3EqZtn6lu;{3^MY)z2Y8b5f0-<>rl+YIDHi z$|Q<+krCTvUv~r0xRZT))&zC-ki!p>PnYDb=^7d3rD9g!C1!Vh4>;N5C}!@ujNh^# z7K}{!RH5*ziy8d+xYr>e3%H{&rpO=4w{~a5df?Z-or!xl>>h0oBdp#P9X>bAZ%|z# zT4jB%E!eREO?>6YO@yb0PT-YYWc+g+B%<=nq0&;rw;^SdAu7emsY{EC<1gwfzn0fl z38i^SyNDyKbIu*YJ_J(l$BeBWPS(w~$TZD9^&hj;Os+DNP*JFN@OK(};S%9wDC<;h ze0Mx81E@A8MrHLPr`t+2i+(Ur{cSYTS)4`BNdd)nX`Nm0&KuUtn>mMDe?~W-zskuL ze^upJufWj)9EGk7mzXa5%FGKzwB{W@8$gDiwBg*ROt%5ipz5DLU(|$g;aLX( z%?GRw_7TnifY3H6p2mBSH)~x9pxYS3c2A2JFEHpqho``v9^n$9_Vh+KH)K401ZGvv zeOXjQ(lD>-*cd1Zik2Qho9h_mB`6T@^6m#(8;f zx@IZyp38YZc1AL$3gLuC$`KEQwLzV`iaLr+ru0Py~{VPTxx-e^EfDda6~z)XN#s zdD4suwk;{dd-webk-@T6wL}OHu**p!gLL8~krid(aGonyspvwH$Di(lUDiij6E(-j zRk)Ev>o$nw@sW5_~^K$oxoa$XW=z7YvSC_nQ*kvU*( z97qB|$s#A=c#DNiOtKbzHglF-QC_Z@ZIdf&r2hyd*SM^|K<_V#tT!(ZP&eq=+s{Tdy;wXa%5 z7oEtC`9@Ah*!6?XqNI$j^U?xPVZBC>&4gIh8?*2>gwtz?|Ldtu#r&R{SnEE`e5_= zdgft}jEs%iLG{}wZXJY@#$R@#xaBa>m|;f`%Q;)9%jSE1Joxq5Sgo!A!@_K6{(?OEVRX8;Ixag=E2{(W4=R znwVx8UT4jJX?XnDaMjhNVQ1Pb<85qSXjoz|2b_N>lSoj@O$KKCsU8bAEOyv254%X&Ay{fAJ?^Vq|6g_ims^ z`7???XaFDC2UZUeMQH9a{E{X-(tzf#t6|ng%Z>y6Y4#vetxz?Y)&$~+KI(P*6`J%& zx=g;!lS2s8@Lfh$DXEaRo?4Y`E@~s~B4CK)Ef+udnNv09{NzNk!*y=f z*B$;uQ`U3Rj1XYGzxO&@BR)sgT=?F(==BFo zX5Tb*KX%&k)x4P~x-#L|JR4_NI&3VdKx*@%T?fT%g|7At34CxfZ+et&CIdb)WyGk2Y zwb?yiTFA9-^f30WYvaILNJ?8<@3~-x=;E`I^@KepZXQHbR20KIA%XcVPq7B)d5w}c z-Cq3Eg(n5Ib2|m(%Gb?IOrTFe2@@j2Ez)y)e>l@i;0Oxpdq=yM#Tf$=^rdrUZ#q@uR=A2z>1 z*-*TF<{EwUjk(ocAA(ztsGTM%2;Fv--W9WU7a~smTy+8uZdo6{E7CPKkUw&rp;ax0 z9p}X8HRELVLHkL5L83Cd*aPL#DxZ{3XU_p4*76efjL9b*?w5eMnN10l0a+cQo+wFElWaA&^!4@gO(&Nvuj$P|*&9C=8x@Gq z1&GGj>oo)saPb;|r+STU3s5%%ZbAtwi$P(dXzfS@kU??l&1s{6b>(ak`O^(BQT9|B zq+7FNP6YaGt0~PK)67+jp^Z*378K%VRDgX_C;Dq_Dk$IgT8<*(i$_uSC($b?8&b4uO1&o0AwZ!Zy=JrO}kg(9* zz_oR3TFj6Z!UC8BvnpL|rbySx&9M{b@|LDG@fe=PGiP?dh$x2MPU0KMFrT;Qo9U-j zvW@3sD{5b?&iq$&n+u3jc2^ph%FRG)rOkt5{J9+mGqPG5H^cSAJFRMrk7CTxZ8cS7 z?Z8kI@aZ=EUQ;HIq6{LmVd?OrRH9(EtKYPXZ}G}1R47yYyxnam?)o+F++mda8&=M7 z9&7pi*QSdv*`yy4j=5TI^jNxVwRb!RrbfyVhI6RJRp;lAfLnhaFFjfnm}}j6VcU}mc;Vxa z4pa(oOP^&V;qa+{a5yP6e*re>NDz-E?L4;G@;H-*<MV^iJLI?H7D5B*uZ`sV!eyS$mGWrat66?+N!&roX;VDIo1PC`!G2YZu9UUJN0}? zc|qS_7NMsRn!7qq;)xD~ftPIBM>nPYG<*i=uC6ccnn?C$VXCNr@Ia*aB8nG1# zFcmuPi;0nU;(PTf_d$z^MZik2X8X6eo;P9gRl-AKTEx8}3DgZI_`3D6xxgmlty|o* z^9@>jN|ChCvNA_PYij}ahh=^^sGP9zWozIz3}s=uL+Jh02wzc zm+KSLP-jnY9Mf&dH~JH<#K6~fLEd*m{J*v~bToJ_R%_a>at=K482>jHASNcZ_}Y7{ z-guE;SWTb2%Q%Sy^A0Kb;nnVc-dXV-o$m0J)CL|^1!1UZQMgGz`BUXXthrZCr9wDm zw9=17_w-R+xvSr1P{h>YuRC|eUducVJ)SOPXQ#b$*Ym7!3^E9wE%}Hho9}(Fc8(uH z$rrT|;Hsgu#cLfjE9%uArl!wU@<;PPIjlFF<6@~RWjvb7g|$*P=E$~BIf@K39!4kl zhQH){Q)BO-c@;8y%m*NMH!+mRG(qeI1edygBg0R1wErQ19-bVo1X~xJO}Tb7`8ef` zg7w5+Z_gBen+5gd8ki4Rbv9?5uwCrqX@OQYM;Zj;2PHC!z8ftG^ZUwV}Zlv#OzH zfsr5s&l=rrxvwo76_Z#Ao2)k_n_rEwNDl2rz3pje3~3CWw4kC?Mr|LjttEt*|CM@p z7v+CQy+$~{Q$%n>S3Nq)Jxo76m=X(@#Y#?5IuhFEypH-d!@~ey{t71C2`6*p!81Om z1V$Df!7SDsS$t#w!m-YbIGj1RQYl;ofS(<%xiLm}GXDL3C76Vm1{T(Zf|o@1RsYeJ z*e;>@e*OLL{P_QqWaR_d^^0#NUH%_6FUAxS6%fx3=fSut~{ABM#Z!i@3HQ&7$xA)kBUzp7| zG8SA|M{VM4-l%i!5#RIT1SE@oTK)OC8XQ4 z#3z4l=Q!i~Jy~nqp-kHDRw`LJaIAK8{Nwh#l?ixayXHP7H*zh3cI;6la0yLtaVpi_ zFr2-CNgL@O3E>iRrT8YO!fL=uq6aLa9`W59*A z++;aAFp;Cl-1)_J=*+tWjEac__*zVEFnaLk{rzK{6j|&ykgVL^_e+-_yHk&B9g&z8 zd)SOX#u!8sL_+Ht8lWwA)7iFwcS=fOZWrpLFV0AO;_NJKs|F%hN?+GYVWWN5jJzDE z%PbV)+g%G0L9>?T0*pP+t^9Q+M~kV)bhx>)zSFGE>7rSo_1nVDzYS>kFquLo?cN@N zDUNc1<5pfQ!IR#JLvM1Q94OY@R(|r(MhFN6_>6mwEQBhC_6`ihXFAt2I|@aj#5Kc8 z)-Ai4Gf@tTs;_`@ey;srITAMeH`S3(Hmx8?kOy{o`aLC=dfi8Tf>O^rK^K$=0+Ko0|UduUL^t+M^>MWcD~w9mgx_qFt5CLA!8Re8MQE@{bpLfWPCXNsK3rM3_ZV z?)dma&Q~WzGCiAwc=?+hHruZam|c6n<+%KUl$ElPw|FEBka5&ARjnd<`IoA7Zw23= z5D25UZ>!lx$?g?PyO+q>w(*s%W4oCIW~Sv8Qoy3Sepck1OhNN9Hd8?B@rJ&>+o;Jw z>qO%Q@e>}xNEDkj%k$sxHM>PD%WJ%M`|DE!DWC{s;Lm33_C~eE0e-1+{s@`#;pix@ zluAW2=w!nq@8y-xpC`dnkJ>Nh_RpU`q+4YFRL9JWbY~V_Y`)NA5~;+9Ka zx%IAQwmeIR`oGbiTDm6=TyxGn0<9oF@~>aJIv!{~PDyzja_&7dfbgeP`xK@5NA%RK za!!BZk@cCt6?gbWT>I(MN$|@my3((bRTuje?C_Ml8=PP(6c1xAa6xr6$9rX-r z?hO|%isqSSE=_&-Y}J;x^buw1#%4r&*&2f_q}$3TkW%e&-R8NA?wAA2I2ZTnA#9yb zoU8bD*RzIU?qxvcKrziVYDWipRgHLl|E`}e;tOb=#7B=$PDLeHL>}pB{OSszLuAVb zA>q1;9sceh-Cb_oq^NJ&twm7-R)obPbvnwb+si)K44>0JQ}jFaad=h?)=heQqbJCK05S< z$@zfrQ*8fijMwC9M-v`IAeKndp7(w~g;K+&m@19iLkFx7RZ(@j%`O%&_nl3=m~cC0 zLqzq9)dK#z?kQ6;PzIPpG!={Vy9dVa`5Daf=Z$X%5wPft-G1Rvf23a~B=8!on^9QP zB<9OHdPZ&0WrRb`NZZ5OzI@cBvcCYo#JLt?*Dc%a6No_*tD!xHf@|4qr>g9E*h5jT zEi+@6l>`Yy5H2Ew>2lMs{Mq(csjgcGX1G=Uba^S`I|)*T5YGVK(kyD~>KAw1Aq*tb zsFjl;8-in7^e{)Rwn%G*j%_K~4!7ybHo5=#o+l@hzRPlhiK+6CTHj4PCpW_?mVHKF zjO*d;T&`}ehOJ}r9N_v)?7f7AbWljO!G^?aQq*fhjg|V2x@FjnZ$}KbZXN&RME$a_ zvqKnfZf+_n{dgXCJ79mYdwo5>xtZk}HTFa*k0fG|YgGV{EW#-fDSqdKb1ydp&=mnc z*3Eu-y>fz@B!q+sDlj}7i{Rqp6D5H|Qaq<)Xa{?v$;`A15*Or>lUqWE5lys5?9Ssp zU0nC>O389${J<~vsS3*$nb68n&pg*RWS|^z!5PaaWF6lWxc@>y`kp1`kc0|wG#Aj| z_vi1zh|A9aWfkx*BvXF(`~ra$E_A+Rze`m9OaA&lUHT}A&cH|5*8U+&jUMzrxB>t8 z9}Mw~C>hrNigbd1i&q#JzC(7HN*d>dlGydODfxc`NhIva42JFqR|atLE9kdqh-D3N z!~dG_%*l+(GJYf%H%jmurkUhb`ES{D(3fT^pt8$$WucLwu_# z^Owa0hhA3)+Gy5j?8o`k*eMRD%-2J`WW!?%2D|TEE!Z+lGg2!@mOhO7qYoA25F9FJ zu&Xl7HXK!`@}$CSEV1$ZH8dxYeTs~V_wI_0zRI_#=0c^N6`%OK8meOYUaMYJ0_xQ( zHg;=Lx*1i0PkxjKirB9%t_(2q%v_5By&NzQGn;_|VFncz_0!Hn!rt5hMljoeerAY3 zENf1g@UTmNM}gJsVt2MJ1X#P={3=x!+~8~ke0g-e-O(roc3+~gE9t18KQ`5v((vf2 zL-vDb79rf9EgFK2fR20(*)VgXdV%5}UWFkDNR{7}3v-)JPsYg0Z{BILB^D>gS_!vz z6u!0E{!Qyt76`Wz931N7t6o_ycM-ziZTc*l7b7m`w7)hYsyTk#5H!&#n*p|3ZNvoU z08_!)4hBbMR!(YdC24UFi`{M1GpolO1b_Ak>7|Io!eA=Wn)G8g;5GkTud%eNiee5L z#wiXJ{yIqnPlbelePB_X(`vtQwP$yXX{Ct6ZRktrg!M2$vfvRNhcV8K? z&BfX}DNOZA$iGB*w7{0@`@iKQ;&QOx2CMtctaclijDTaUt(&lp3X^mYIzA#q6eID) z31tgAx3?xE`^6H1gO^L#S(EhMQc@A5Teu{yuA9xLQQE}-I+k?b%FUyOgOs#DY#0g$ zmvya<^Ay=+RW$R*$|Tm6t#w&Lx)+<-(>rr5*GFucKc{sMWEQ=FS-i=f+OHBkB_xo2 zX{_rU$xrx^)3__>!Amtf&eJ0;n`55|G4ZiF7_Xu1EnR3mW`laRZ0p-?>l^p}nh{#6 ze`jw3)Bp47t=h_3t1m;w45JvX!68-kj_T*nj&}1oOlbFswCx2movi~o!_8k;$5ME* zeweQ1P@$J;?87go_Y;EX*r6`F``6?0a%H8YU$n&@gdeHc6eu<2h@y2dG9r>{#*UQF zwX#IU-%ccG++)%6v+kXQ=Q;SupD@!bdgTI>PP#@E)Raw?C)T)T_vyWhWe%`YS5A4$ zJsZPv7Mw{Fw`a2trJA-7cZwEtm}!XzJI~bG5ImJSXSWli?J7>8hO1kd<-|h_qOmiLeIIWLvs(V2wZLy4qIQWl*gAIm!-J@`X5=>f4t}6Q ztxNJ($M5WXitI>Fx81hSS%Ixie8;8eWNskKRi*E>g?ng*oJ2Rw;%}F|1S_?fU1T8750`|fgh2^pHm_)63=SnD>thecbo^Ddf*j1l1myEj5oDU^^ zur;L2+&Zru`mQ`SITG^RUWOeHq}&(NbXhLi5QQi=)p6>sY0!93B(zHScqbtgyNQig z$;c`jD}&xIs2&qS`X+deV-^7Zu%(uU#cjy$psVhiTHimQ9ar`hse1oVFW~UHdPwP^hAZ*qX6kUj`bL?DsQETvo(=ZME$k z$Sh*Zmlbt@+XrIm3seu6zuYuxjK98MroZxT^EiBli2fpOg)0!iocp-#w$GB6r!l(> z$lQ>Y@*cM?)?EnA$@44v8?`K#8u6LCPp}UMxozEPT>VtL{si;u3tV3eM28%`A2Zo2 z$)En*aHysLZpSbdcL0|$%lAknuLlNNM5u+FHO|C8C(#WS1zUj*DPy*LLas-357#1! zCl_xKeHn5aQYOi<)&~Z$`j_6bd~Q8{gJdUi0v`I#A09Sib}Njqjhx0REDTaRe;~a9 z-z_ce?Fpv|;&bv&F^a__yN+rp!=fs!!@LViqmS_5tL@U+BnrlS8b8F>uKj0(e*WEO9quKF{-kqry7LqzL zf|a^|g1lxC@kMgdp=1s=D>7985b^OFvm1=i*>7K-A$VCIh(PmyD3YITXO&urqEib? zp0^byC+GQD-=#0DsPgdUslYiWnJ2*B$+H;6Yqk@&5(l4BkpRhW^a68LnV+C`yWS(hz0{lv4@(A(N;TdLqNW%c$je z3_m~fQxBP72xkU7MsKWmF;+C3@2vvZ?b~nGKx=u4CqDyFMo+XnKuG)<;AA_{$Jlob z9K4Nm6U;Fpg+8UarVDWq9E~AMGSsS6;&S)kdV>yx4**i3k&#PY+g3=rP^R7kxA?q@LN6cZy6en`eIEOqw5Zc3RIKIbklkB(;xL7Z!W5&Jhoa^N{4PvC)EZIm36BiM?6OU?dXiF_B{>zmkEPW;1-T}LDJOHrGVDsYc)O*bhHFf7(pl;#*z&v8 zzhvq+!S9Jq@5veBJxj|TSa!{ihV?%^UED6n!{f5-?rS!L|pu*xh=pHXfElU<1w%~Wa9m|$KDJaAjn3sE#K z`PpBg2K-#lFgIvaRc?&Lr8}MGaaoAcT}*M4%Kxtr81vA4A}uAkh@sMXfonct%=rI? zZ_TS2%R}F)RH_WsSDK_ITaB)nxUj_+4hh&~o&WVbGL!8QwoF@!)Xg+x>(pzKi)9Ugt+0!^|~gc?V!{YAy_4Q zI%V0{=N5#uwevvE;^PdFGeo)lqQwdxc2k#=mCu>G|8fZ2uk=d@)heCFA951^1e9n6 zc`V)1)r-Qw00Kj;fyVWu=rPbRrhd9kx@w6(HUuGiVb5=-C-(&eOqro`rg#yJ{}AL+|QjRLxx+NNS8v>QS%YYq@dP_pUCj8 z&R?qF${4P*H*E2YBpme(jo{RvBvEx~4fSnNdFU^jHK zxD7uJlQMwMSl6y}w6%Pj)Els^k<7WbKIBmP(l%94urJBvLBBC2qMqAYz`S1GXGK>X zCRlcR*81m*Cu=izjtwx}EZ$lDcXL{jM9G!~i7iZpk6VU&HIH=epdG-P3pdx^R z$%nvyhp%MbRI9Z3F+dm*sG$Mp<5LhE>=P|2dbsW-Ksvw>eTY7O?@ALc9XHJcURe5@ zL%x?+Cm+K6$8YI}#KYL&QkF_VJ>&?k$F zwM+W&zvKp{e(;tdEp;+e5(ySk7Zn#l67dxByx>o1##nX zPg5(VA5iMGD2PD>&2t@m%lOpu2A)bCISgbJXX}Y^Y^9S3_q4@ZCOXf7&5?Fm|7=h0 z^Z6_4oFeW+=jzEYtMt)>&kCSb3pn3W`cdAN=M=zB$Q<7Ar8LqY9!{K)gS3eYVa+R@ zUc7iRbB#JSmb$`GQO9oTcTA?*weqWX_|!b|Uvv*$ot}~m@sO^dkeZRA$XIOK-fpvk zluc3jm$(dtyxpJ{?r5{JaZNbIK2yBJ7YMf#;+1lMsHELB6X6k#F!7eveAhu8hqps;e&P>D&DoPzQ@h zRyf)^4t$zT9CIsMH}ahY3bFgnO79l^^DssHwQqUys2+8FDj~j>uR>*k!i$16T*b1P z>5f7_`Sw9VM+%2nJijSParffW|HjLgpnrRCy``X_@b>M^#m;no!~Xu^sE+jW?LAIParf{zYX_7|&z|`$FGNKI*uH6~T)~%p6 z6UuBP>Fqd3YRg^EhyO(KO;XqImA4X(WmbnZF!F5j!Pdscfdf!d1qXX@^~T{ws+zF> z7@EZmuU)jI%1&5?fSJ4-&!#M+i?#%R)gjovAFsl#>pY+vyE4e) zR<2vg{?7}>4r5bNmKGDSq;dr%<;HcAmNtzAF>%-`bl>uqMEiah>1_oeDWMT0Po<%q zY?Q5^aZJyu?C{rHewW-YKxaL9hw@)aEGr{DxZwMDxsdeG z2q2K!?*C}-JHwjVwzYA)6;XyG^Hsev_K#sARr|`Kp@l*xIxc3_kQ<0=Q-c`{(aB0*Uy#AwdR_0jIri;=R4ko z%YbYTOfS>?&nv7Y^+Xpqp|VWuuZfnS8k{R3lrVQDk!f+dUa@W996{7h$&mDsvL z5k^(ox5bSh?Ba#^T?>kL?@~AoUM1KHGbOLYORIi~pj~Zb+WZYlv{ucac_L&j@X0Ls?! z)l5~7hP*At7+cfNOG$eDg0=p=&f7mN^wG`Uw|;SN@7(127ou@4Bn`l6&4)I`z_m-h z!#})!q2TGg5d(u4N&1|#!kD}8kGWn~?+)``vwS~(Z#)ZJ6PDF&in1~J*}WP`4r5y0 zi}w-Hr0{a|#lvn#xkN@yC#qP*guB%t<-@=DH6Bie>1&@0A!}e{4^@kaYRw4TU%RBh z+)iK~UTz;!23x!1+=7C;m6~ief1(OCDHXWd(SH|pX;)ZSB3Y)2BaF1dj4~kVvY|<#l?QQVm)?>TKCA+dzBnIu*}aGZfvY!GD3nFc0F2A_o!ey zzeTzQKpYdj;LaQs`Kv!I=^d9%Z4Nu%JKD?eLp3EXgNd1Y)Bfq+L$CI?aXVSK)r`-J zw0i?)5K{GCu3cDQ&b42y{=4#UoWwQCET81s3OY{v9z>av0`9JE0~iknJzzFv9~lN2 zh${JXvqFsuc;`lr8r&wMp>}k}JYq<#58 z@i(q%E>V_$VLo1F|1tPO-1GnN59fTX{lA@)nE4x%KRVc8$}GG1X%#Pqe`UOXjln_i z{>u*j8iW7e?ZAt<1LuX==}77PxrfC9)JpQw!9jzH_%#B(I$vFd-{1b|(~3TLOct+l z!2-@>>>{Ba`y(^?Xgl?cfH~YUPT=H~AFGZ#zo_Ow=_H6wRs9;aoU7h$)KrDJVP6N! z6`jy-3s(~LaI*P7GXin{3})78zux-#bJZ^#;F0y|fX6>K6#v<~sJ+>`ztRb7L{(m% z)!$N)_Ptv`D z46(9`qYkT%Us!d!p7ukMOKWd9S@dFSE^LWY{9#6BnB_x*TS25#t~BJ!wg_->vG>@? zm64MQRQi-+JB}!OP=dnZg%l{ryDeOhrx?W=2xqU2onPrs&_}A*{h3_qzkvWJ4vG;;Xj%ilDH5FA{V+N%hLTAp%%a6|7 zd$dD)_mlrYLmX<><>nr z?_f_HzD)C0T!3ayl`HQ$3+A^4g?16U$;DC@MZ26cTObV|4`n zId!hZ4NhYUvCy%+Hs`12=0vQ^K<^j1@r+Cr!aJBPTh_bMk+7Vir5O1?c|n_1k|)|Z zPIweZqkNU64m;RSnH?qd41+WMG$a;FKDLQg@)qB4JeY7hF^jBB#Y_G#mU&rOIf~Rm zKJ|ZFsFb#pRTC(ZwT-?K5ouE(RfH9AI?9m=5mA#7lMr*cT2D1K`(5Nd-&s}34->mg zMs_`q?h&q{0KDy;3hl^0THD{ZA6XDU@c38jQ!?y;pG=#l#0-VFr*F}iy(h>OWe z} zgy4I@wR%-EF^R!;S)DN@H5-DBiqDAUawe~-o%>){odUeI<%?*J;<=4ag~*%A@F$Vk z+yEi+LTv3pTzHrMThv?>7iG)Q;M<#%@%?b(wWs27G0z3RQ~A$=pNIxre8!(PX>|7? zjoi!{GSALNZ$luLIXyH?LHAdaKaR%$goX$2rj)qkyqtB$8B=A+=DxN|9^{Pem8kuf zzVC+C(r_wrcS3>}3iC4Ns|Z69&Dyk`lg>J5T|m(ZHos&7=C}Bji3GUdIN2Xps5;XN zQgaP_K4X(ouv`WprB$Q5(5kr_m~*mH1qHPEGxl}sK7Ypon#FtGmZ(>)ko#ZnhIBtm z`-f0rGUoc(IN`Hps2t)w@B6bu+M?XEiEoBYWv-l8uG_mhh9%)tl$?{FZ_jYDmP(9O zu7CNU+U5l#457s{Eb~e7YaNfxoW*nl1-ho)W)RfzJf9}Zr+$5-lPuc!+zW1+l9xP$ z0*%?WEs^?^u3f-30yb_mclIWgAX-{}4p=T@AglIfHYzIWpC*{YKxgnE2n6x&E&+~BgFu})XprelpkhsbbnSj)YhPVe&>~Bue}d>$Av2 zuz%ynKD5bE)(G3xmN{Mewh>Bv+>xE%M^ZwyF1w~CEyVG_G`C(x{|UQg@BD z3R0?(g*L_Gmg<)-N_}WLbw#uVj`{xb*uw{hl|G4{8n3Zlu9Y?CVD}}m!sODJgtBtQ zO|G$q5oqbYzcq?iQM6fHS6we4vtGcQyrGBnzu|7q7=cgs$<6Q~ru?90=iJ}M0oAJN zW0)-@)^1o^c&kG=-RT3IjvJpVD9C0b9t$kous~giQ%7*Jemq6ln7RjQwCXMv(7c4V zF!3-8?XDYZCoL9S+a>rEJ;JtGRjfYM7B5wO<4yTSnP+WJxLtQfv20>D%}RFv;Pw2& z(buK|QP0OS*mtkjqrI=8Hp!wn+Bda9UcPIQ{kdx~-K~CesMm5{Hlt_E6*TL~x4Iy3 zKTA>6L0lIvq7u3n3!ExI`$s%~x2H)lf`J*k=8cd7+F(zoT`mmDa>zY z11uXtsoEV7mGl)0EIqLyC%Ug%gu@?=*T;r$;Q3vB#Ucv8=DeV4;)^er4NU@w)RK1- z&DTK+T58ZehHvD8nhKmeOQMaOLzLTL@O)>40gA@_DuM4szl5+LSNbnHdcDs#=I3+B zY;f1}E6Cp}Ti<E5QvEpjfWZLzGhmht%ZG9TC)ZX06I<^i@xn#XJ`S243nroIYkMCUzr2!kJ4b`i<+n z-V4IBg?ZGtz*ad1A zH%>0YS{;^e=~)VFQq^c}s;LY1j8Cz7H**9v)#h9<=PbOmie~xST@%jCylfRqiaLfQBbmoIj>03N6V35 zA5MQGcJ{#|9FPz9NPhF2>~UQZOEnsg;w{$ggUsw z8L3{mGgr|Mp8I5vO}DS-fjF83z~<&J>T^cNsW>NQBI1lbuBf7pN@GU)xWb55la&Us>`_LNp zZ+tNBe+vmhU0iB@VS8vpYcsRIE!k01XIu_0^*?bwY~G-b;00I(KJ`&vL-r5vKo|3R zL+VpCL{1?cQ8a)O$X))Cbcn_4Rlh&&y36PK6EkF0Q)jJO^-VMv=a8aQ$GhHV*gV!n z5~hbZ=kVxScD2?@*AuqvLmZAlrHtUIkFmmWK+0Fg@r;vd1(aJ3_r^*sJv2rN{0xD? zIBf+7SPXXl>KG|RdQ`8v@Z-RMu7x}K4#X1U+4Sz+CvAbFQX8Fw*LJgF^PyJ2e8GxB z`qkysiG^>G43(q&FJ~PcyPo$AF46})$0dqQb`r%xCkcRb$`|??b871g2O_KkzBXQ) zYs=Moo9DqinPow*U3K;QIMv-jdFt%mz*=)nOWvU6J1wrotC~8R1V0j@4+RnNbCWY& zaT>{u^b9jfW{Cj$a@21u@AB1-HD!Mt51h~LO$^`Mxi$6FD0Gu;VgKH?YrMRK)Jh5V za7Pt=@2qD9fPSALNWUE*vqk(9(Vu-SJJOiG6yOsJq92K=&-t8KFWX*wm{f&G-~;;V zJ(F^(VI5Dh0-O6i1EXl!3u8ABMhka*9Ax4_19Zo&NN|THod=xU|0unmT@4F1M&~kA6hI~~H)gn0XYJk}^wbpbBfR2jjrH7>Ah#j`^=mkBaU+pYODBNp zvTbvvgTm;#=YHDOSAA(M*QEm28ZY8JaG-waDCKCrQ1=E`2GC`oeGdcJS(2tRlW=BIEBtS{&qIdC_g)0Ge zC0WHbQ(3(YJ@@%AHCHEOlgDyvGi5&)*r&vuSi69Q=C5D7=fK-N>}L~>yW7goS3eyT|liv>>w zfY9<1SO5D(wspCF%)d`Vi;{`!5}x$ZHgnFK zoP9YCDctxNT4lWvDw9QRBY9}VB%%XIg>L7?@*Ho+v*9r|gRIKXQRxQW&`aBd5_HOZ z4UO)ca4hkd#nOJN31|CAeQgkH(Jq@afqsE|v?|7|>iBep%oQ={jT)=PV{cz(Du1e+ zCD%1q3fDzcr6Z(_?#kE$r=lxGRU|9IP@|Wz$TA2#GOrQsPxmqSgC)YQtMO z2==H6nbCMYy9hV1=N^!~=0UgakaJBHsXmvrYJ@VxtcZ;Q+A>e6k9<4MC!<6c< z?M^tS`MSqHG%lYpgk`8rm#BT9ti!?sq0O3D+3V2EW@W%lQl(O_zshD$X=CMb#dH&P ze=Q1D>bZKE5uCmr9QIHKKeu8g9#PXlopd-2NNs))fKdxQK?SN$_6EM2*Z8=e)~%Bs z2_!fc1ya_HKIZ)9!I^BNv>Q3M=|O79-RIZVNs8K;uW{22a^B<_o`n8I}8W-f%jGfPPyJhtGn1w#zhl*bSx9QWiU>=5XB%( z&IR1K)_&oN^!`rQGcMa788*bOM2_dAX&+2oTBHl%hTh;?ur(L+t58~%{>#`PVOz$q zlZJ5bjf?r+@l0}1Y7V423t-=~-lOaE;=yef2iLJrWofaznxH}r7j|J<;oRX3=dX?a zg(XmIXpD?6>8NXUC3wEZy7y3xwq(jQ3sb{pX9gmWG3S zeLJerDwp%`Ql6p6PU544nH+=Wot43nFa-(bE6RWEFw52Pd4}W1%;j&f?V8(71h=8Y z{YG)kh7AqbW^xSUOS|W8m~*M8jW28n%oC!Va)%&cqHuN;IJr1h@4QIn>p-(ZgTCG~ zu`$o4JzW^OvF9>yju$rVfsn&g&HF)He!My790W~``n@9N4!6=&cBW!j)&f1RijXWB zDR%*#+m1_!F**j-2+GcqRpaR{sOj8v-_jqPdp3b|>d7j6J;QK}DksJJyM+tEbp|G8 zawvGmfMw2Sl*yT~)Z)b;x6VQ7D}-f(pVm;7I1whL=648?<|s-=Rq(j_0_4RkP)G5xs9Im_Bp<$Eh4JR~Wc~sX zA3qcmn~jW%=W*oe_>zQ4D_0uxNR>^)1dVVToROECBJodMx3b-~=ijs6cK6WLiBA9s zKTzN88#3_pR7b`~A0ONrap?~g5~eJ@EZuQA54$^=u{9s>IZe2o0Rk1ZH$uMG&M88N zYwHX`I@1Y=^ol~NQjF{+J@Gsdrz`A`55P^}PWAU{tD=;u&U|b;N57Lsm|=bVhS~Cc zD9_ET3Nj<6=F|}9&5;H$E6Q3PDIf=#e18|-E`GXte6gZ*%BWenHm{GUR7{%o0;bxm ziP|b8YaQ6*<*mJ7PYo;sUH4u*d>0iod7^$1NznAbv{dw!tvPhQGODX9%bxjW-55rF z*CQ(JA8v!WjsFVykQGV?Hg3WM-qyfQpuyAdl)Ss@%rx=VI>l&eEJwi22vHnRp1OAN zU7@E$sE{4Aah3}+&E06paLL_UY^aM5>7akOoRrAU@+kcbsOcaLWRd*eU;m8Q2e7d0 l@3*L>yk`D<^dROOX4!p-#DYhqKOMBVrDJ%bpJ||D9`ikzV^NDb*~-rT3w0e%AG3|6cjYdFXi7* zP+TPcN_qFM^WbU-!uIanYp-wk-J7KzyJ8=0 z7pDWLn=Pqq8H%jh^m3?n-Ux8UN>?8T_=5aTvBM+FDE=_{+1&F>;PrhuDrcHuXjp1M00XOp^lNA5fmPo`T}aT?)#x^4l|tOK0Vy z4-{9=%Gc-5-8w73UpW8dtbBI)g4tR5{>ERw&Poc7WlC5+^G~?X%=~rk2QSQDc=#Ga z52T$n{1xOzBk9xYtJ=`(*Z(|fB>myibgrPLFdI^2f@RpJa$~KEsc_7r(fwYR)V?81 zhI1`gpoW{@>UTVeTil%x{^zaf$CsZ{v~eZ_l#z!qXa{!vH9LG^a&A{NFREL)G(+rT7dJJVk7fTv z|Btf?qj=Bu*Ha2+i-^>Ed{D5BOzlcAN`|1Eyc^I^(}BBNSm2%mU`pEG)(F^{r-R`4 z>B}?fM82!`xTl|@lVPWRjmzKF6=fwChHJ}Pl`dXB`{J*N$9)uqbgQ$LD^Mh2vDPqP zIJ@LW{v_^h`}Yu&T-myv2pni@s(xlenzmp1dG^r`J!g27n3ojgj~zO~J`U+Kv!l&%OWMNms`XP z`mp(%G;!<~Tb}2Ce6japKUcn2{eG%~z~%khe1hNuJV|I#rrylwc`y}&Y91=By9#E2 z$j((`=uS#YEoNApX8_^eU%-FmH}CvNC43c3I)bV#@PAkvkjC*6wwvkl^VerD-FN>s zlyr?=xNF0UUB)jrJNs3I-&|{JtB$TNAeClTQOtdDT{BY=MU|DMRP8i=zt~4ESn+38 z_b9@DJWq?O#q%T0-Shoey187<9m!P0&-uQEAYgL*x2IO?BbR*}Hm69FzWdA9-QE&{? z5I}S!e!!~;$R6);Stt6bt&WuAl}MF{{Z6}!3R%4P9gVaai;s&V#MUqelnq~6&c@Lw zE}%B^bk|@k@S*^rV&h0oi_K?-i<&oykwGB6+jm#PMdoqa25{ZvWDdniZ<$uPyraa} z^(x8i#vyTwv|@uaf@juyvVByvA8eZG(`<6l>4xjo$&9nG1%5m+(i`La>A2-8C$kKVkzKMwgYd&6HDRFOCg_gYG8^N3&%URm%iEDl&W}3t}!ATKy zTUb=Ya}m5n)M6Vf$j`r-4)0y!L)+c!FKy0mkoD+vfqK20{he%K(Y@7xi>!f6Ku(yL znR_ExBpypjD#F+wlECxr&&wq?D>0{!eQg%I#!rvhpe&JNq6?H%tBBJB7exgH+^&|e zg<{gw4o=a9a=RD<8rJnl_)#b2hM(o`RGwoGd6g$1TS8i%|M~MG@`zpOSWb4zt%a$S z(OxvUt2nnRXZ=#**3nKcw70z7wvPDT0iUUHNkN}Ca`#cE;0$Z& z<26%(_!a!}A)k_3Y)&tD7q_#x=70Juo*an_wA<&4@uOwOTtDcq&YLRNbu;)Lu&%9Uv(SABtA+W(2lX;DINC%(_4=D6BI=HOM%0-o(IoP53mgUbDve7@xY1DZ`-q&*%z zeL9agVQe_XOV%sMQ+B6wZC4!P zjah4DO3-9qz<1{4xWzQS(scpnxJ^sKZuhKzGeB`yRE_ij&hWZiU zmS^1u;8g#L)YQZTuOtI2tF+4`HsEBOr;Ph|7H)01KW383%xB-eDv85$=YdLVmtY6R172l{vy+yF@ntJS)BqS`OP?Ro;$2~m>f;>;3zAe_h ze0k1Na$`B6dWxZWt8)>ws-yFe8WDSg*K%^7jG7k`6msxe z4>&!dEjS}QSVy%M_r1lUV$D|%A;8X-OC`Ga9pb7P<&C2&E1OR;ZdvK&o_=Z@T z5M4NX`Xg|wha`4=v>GMJ9zcjD{MAl%@7|BNxHzRqmO4j4%CUA-Z*)pv_eCs{96sKPs?M%4aeBLeZh?idBP7T}jPlt(aD&+E<{B32;TLr_an2O?Nvc zh4|ZD^x5jSW$(Xv%RUBozD^TxMlt!)i1zQTP-xJG{n5( z(P*V7rX{K2E}h4uTU)A7h0Dmcj+Rz=i+M+Tf&kKA9@Zfc=DtKo8TUM`SAu-HaM5$< zHI^MIg@0nvx-K^5rv`BkVY|G4XFAf+Xvc&LW`HzfIOoRdy~Awka}<5Dg&-*HWrC>U_U`>_yW-&`o{+M~n#I?6MO3Du>W+J(I#gA|RF!7a- zB=Ag`2E6qWa5-LR#!YzYwi@Gj@oo+{STzpRc%g^@n`*B?0ZzkRkebD6?cPU`Rk%Um zx;Gvo@gaDtb_u*S9^^CJ5Zl0X6HL|ng^7s@N!q+P1s*Tv=r;TYbX&>qRN1)S$zt`5 zgz3aV9d@iU`yC^194Mh!{riXow~JO(;`t4eibq3Phu4>M`PD=qhX&@pI@U=m16mHl z<-1mzMzb$X${a^6^g|H3mb~%T>xk1%IhNffwayDS3L3t*#~qEV4xtR}@6eae*Tg>r zTnRJoP|=l1Pt7$hOmr$`V01{-C^Cfe4*k3xi!K)~ivPXu=<=~jFQ!~bOKsM`b9?%f zJjnk28Nrr=(WXElV&|{ebma5>G=4|mBBfm>mg{h{;OWmUBoD_6wqTk_)t74N!r+V_ zyEVc>9PW)NGeyR``03@qJmu1RMi(#=wQbu`0riP-l`owI7a(1q==k}$CF(8OkP5I4 zBd%uUmoL9`y$}=>v@W+gaxLd2?LwC{Qj>s3+cTvWZBqdORj}O}w-EQGYygX=O|K*q zpYQ9kK8LNg&|Z`F6duY@g1E6o-p^W9pQP0HvjqJ0z1*rJ^}XghGkY?4 zg6Y_OPd2JI8*q?gNC#G_Hl0h>gM`O`GccA_DP$~l3<-(HdK`N_6|Iw}ia?(df#NK{ z=!Mf#Kaoc-lL0stMC#nHizDF!P{cRxC^X7{ZE)~5FnzL`_GkgrvJEdgPW9zEp6m$P zm5xs}BOmo)`QBf|xdQHsO2vItXF$7knF z?-8Ae1V;PlTvJZQk3a?@!{x%W1;gdwlrFz@Qn=ZWG8F^OF}#367Grl@{)Bi}WDX1?lAqL&cA)}hvkJJ|1DDIot zep|okwK3{m!NDe`&B_ODyC`?!NGJni9B)QaQaLiUAs1S<0_KRXgIye<8fHj=Qc;P{ zD4kk)zi$$Qz0+Q|fyR5B?O&K5)>~}rFuHf|SjYCSOV+hHM@B`3-mva|2Qb?ze_(sq z#DIb>jfNjbR`Q^4@EN=-ZFsU&+hnvBGt`k-L~Z{{wNiXH?YL3+qL)Q}iA?&$%(Q|; zFT+BXbh4x1qD-|^FGjgQKL%ZRSihjbE8uEddr@Csr#m+!9^-hCCtg--`3Yl)XD@2T z)ZM7?IJ{8b%oHxk(|sRkDd3ttWGN^a>Xg)CS!x@3W4zMuVrS#0mR(mE;m)DA6x_@I z?duZF{mU8_D~rhZVQq1v7oZpH)vo47Bm7$*o`IZJ7HN`SrPeh^e5P`aq(P_VduVTB ztLy?seqMaQb=hNMx&J``>0}M)qRPfQ(QqxAw5>_+dLy7Ml|Q@=ie> zMOt;X-?ORt`TIn}i&&|yE+gYMdvr>ibfdkUOZ;sAPcA@cetopO?3035c{_so_ML$3 zPwaGeZa&1Q*0wDs<4=iTi+=B`UByd z7grJVgkYYgJoC@OpahUA@b8Bpr58t}W~TTk_YXl4|@GaTk8>`Z?HFNHqjP4L@+Rg%Mk|AQSVlqqqXQ#$+)P zO1J38OdpAeBymajBuTw^2rx6GqH}#95L?14>#_V^>NmHI38c&qQ{OJ90-Q`r#sURi zc*Rfw)hq%UtQrL$G~MxX@pjnbh8C;J^V`}Dn7O}@pKED~XN|fJY->K&|1kotcYO0x zOs?i2$wd5B7>?}`j^)wh17}xyu1VggqQABhUkSc@HzRD*6Cbqz*zH#uU#K2p&?Z*@ zKuXtz(VVm{YO%T1G?uu&8c)jFED4(X9P9)uTzSV;q8ftE&gz6slNpGmjq0g;x|+w) z9X+RGVFHNhofIVTuomvMvD$sP6?pM<2zCk|o$`dyNmu+lc$GV;qMGs$z~&cKkiUNU za`eXy+K|1}`UIy@UyR9gh2^s7Bt{n2ZX%^n$j(ClQ8PaP{UI-_0RjTrHaC z;SWaXqBoZ}rwvfke4lD95hmIrZ$^ab8?1gtW{98y%*w`-Dh7v>nr4VR!5$-yw6P-n z_7x0qw~BNMl*^e8vDe?9-jns-1@nlD*J!|0Jl1F)zOL_y|us48K~iYxt@--yhf%6*UnM19+#YsR<-09%4FJlQNZ5RLZ9=R7 zdydhyS_`f=LW{s81EbdtXwgH`*nQ7N3yOkUp<1xw`rsSZ&P=G*VvB9dK~`yi%2rdqF` zPQr}gUZ-sVQoEDjE!Bi4c2fuqe;D3L5qX{rnPXtv6SciwQ-Gw`CuFGH1$ugLc(T+C@n*}imlyK z)HZ{0D-2ac%dUh{pi;p>p1Rm;whWOw%`zAY!bva$;}f*iaPo5*gpgvkKb*|X>j3Au zzMaCA;~psa_%tL~rAg`2YrC*xO|$sE(nau(pZ3b0*4AUzt1cLI+X@~o>K0hK0Lxmm zjot!VglZfWf<(7!2cU8Gli};T){Exw_*BPArUgbW&K%BUmLQA=Rmqp|@ED~Yuk}Y# zJ_BA`4W>SG5y*oM>3g32XyJjP;3;2=IqsY`Z};J*j`RNVYh;J~L{vH-2 z)}HzUyk-1WuVx5GV_;x#pVZ;x`=V(CzJ@ymov4;Q5d#@p%rThWh>Ob+bC$wFx*$|rej#`rdHLT>L8jQswM=x5 z2ILq;eYz8M;J-^oVt`q{6%|u9Nsr}`(z)Sc;wM<2%bZd10WrS-;J!N8!L9Y?GhLMb zT!gNF5G1)D_A6P_ONWYz&P#mNK+;TMn%+LZV0eMYaM~qfg57@nM}Hm!|HU|CsaVRt zfHWz9Wd4fc@j$%5WAVp)>!WRrIhheQ)r`VlBm9)k9T`#gvl4OfK9Y~>6RsIFC7{sR z*^Gix6UO>8+ukfnlZK#q>26!L)Ta;lq|qBkd&Qm1hv>)2SllznTw6=TM9EB%`r{KP zIg&`~f*}T3wzf+S>}DtwjNZxh+ZA&539>6H0>SX5{L?s`_K8lHGz?_rABD)6Z)AI4z~> zY=@WoayxE^z3~NZ*s6pcLXYcHfAGJ1s!`+3zS{SV3&So|v!p>6MYmj4Ay)enaE)5Q4JIm*KHyw1USLpXzr zep_Q==tbZgcQz>^zkD&MKVl9F8kZq#Qzn8jMJMH5zvfywLQT*Pm(-q0rbbLA8wIrl z+7&_Tg5;Hy>~^oc+kcrksof^60axA>v$PSItS#TpjJjeKMO=fyl4VII1tQP)gW|v3 z7#p0AnPL}e>ufH_SO}jwIuguSU=opH1Ift+FOiNSiQ|q|RCJ7}&A&|Fz3RN`^Hm|T zHrEz9j-Bwu7Pj2rGT0>E#Z{-M=SX?+1Q!<+(DUV3R7RE~CI!uZKk6^T)t)&b#=qiU zY?ZEl{rdG}t9Nt$z9jM!6+*s2%)>TtqIbO3Jy`1gUEH>1&$rv+_ui!}Qv*$n4hK+- z@f)1D%YH#0#3CzfH2RqkPxjiQ<&4ub9?Cf;vtwxLZ=*WZCw!LbL+D-VHmYhfc${>? zBl9oHc#h_YSbnL7%5AdIut~{#WUwSz0HVa8@TNf05?qX28^6UwT2YkMIY4?h>h+U$6I1MkU-EV_6*E zavd6~m7AT-s85IMIRsAXbAeR-M1rgRZngasNRYJ&Tt^HBMWm$&$r!jxbkeO)>aGm9 z$BZdJ#$O+eXYPp>-W!I;(bs)RMhm+{t);K!F6>N&hpQ%nbzzVlSO9UaHR9Ox_*E6* zMZL+u)?OTKewvL8R_UT(Bcq7cE%XelHkVYV~mNk!-1|W?+#LmO>583&c=-;rBj(fEt zhv9)1ZFNvT3nsM%!(o?F4WvbXujyX~)mal#4*d=EfflIGtV)zua)H}402Z_jAAW`U zxl4QFmYxSpe`FE@jv~%Z^FgnM0XTodhoQO>>q-SLn7V~(t5`OAk8uIsAdc~EhPc3#{fbnNM5sIFrWAa=TO;7%9URfT|D(3T#R8q1 zQl!DUsQ3`GnIp57OrObdwG-w+lNxJnMD^ku7no~fD0{_3fx3tJI0uO zhF^-AJI!>|1}-x9GEq~fhp!wR3ztPO9Z}V3dg4osZP@_kRN5R{?890tJ`j$O5q|uz zW=FmePq};RhoIn^1FrQ1(kgWt&9xNznHXT04Eh58foHg5PrxB%zk$^eIb{wi*7*qu zGZ_Ny*t?$^Ppmj%wbyRHCPV&{l@*X$y3B(|kCurz((U#GW8haMc48ITA%#c`4eQ8~ z=|x~y8TdF>!wY4iWSTmnhZ@X7TgmP%b~7)SB&|E~^H0JpJH!?c(Diu7)K`#G0C2V3 zIx8qJaB+!*#$gX9!DUY@$Rzb8I@vg`9Yl(@t^>JLtGTE;>;Z#rA zPbbwHRZOTK5^+=Hokm_F^?6!a^Xfu2|h!@n( zQZdM#){WDKi6F+*q3!X{mjb{Zlb`t#(@)z$)?zgW_@s?Bo>cz{%5{s<@Z9`-gR*(e zoV`MVStq6R?n?(pNA^MmAQ6|^J7w}-x6cDa$k9m0@1>JQk|{MP{cyY+1I;i#1YyO! z9I}XuyhVA5_Go62{e-nSow4{p>&{c({w-6Y-J9dpV7AjNT+W9VT(ZYGNNIZrNr@U! zji~3gB|Hd#98f85eEddcWw4|<8Ym=O?2$d85FnHtg;@uPvZ?vt#pnVN#D10X{2?-!dGb@8dZ3)dt()ex% zJiUR$9I%UnH;}_!8UzAYn3lmMrsB*k7y*`pF%hkim~>oq)qdw3nRa&VJK6COOr9&wQ@Ks1a=|bJK9n$sQn#LJ$&h*X zPOdi{SE0e({Fw$;T#O(rMOtnJcihy{(qd@uy;Q+Y7{er2^KQ3BQ*jFkEh3L*Nk+@W zYF`S=(4$2$_JElnQ;(;$kvied(G8nIrS-%^LueaAt&PB*9Es0bY*HZg-hH7FZQ~8g z6Oi`B(|F?|nwQlwv}CjIa_a-qRFaQZ)uGVsLfIatY{ZPDO{LrhYs2((V^a3ekmp|A zXwTuYN9z|?4P&Is!X?^4we+;dQS=Q5!*~Qfkl$ecy9o?;vcVmdRcvrjz(&&3Ox}ST zsh!aa*gC142hx{+NlYD=J86t-3_c_N3LKrI^>@ANs5im~Ro>tECl^4cnqFpRpM2$% z(v>|d>10ngz#Zm2H;yBDTbLpDm~&t69UXnoCuT_l#3UXKvaquo1nfWaF-?1ju0A(% zBKNXaHl7zSrpBmQ-rH z$I4g$YDC>6GHOI*X>24j?8}#@cbcPEd9M4*XQP*wZ>1J**tP5)*=ff$;OrK5cW^^R zHelctkCXiqq^RFk78L~S8jFieq8XyuYS?x@p_p*_sMu>(*;*MlD`1oZQkGfHp2hp~@ajS~;YOiu|L18XZ44Guw>KXbqLMqc`{Rbwxn5D^c* zf7ysqJ*^_-6m(j@G*X)RVQ_sR^j&$W$xLgb*A0y5;c_tpx$3#`SItbE9aR071rHAK z!_@D`jdpm@Fv8Yr_wjMWxXdP!lJdYXEe)_~ckWDB@Qmv`@%B%RsiTUzLGXa?u)AqL z&F}6M`(%rG~7`sQGq%3Pt*$K6S9==QEM^ zIrK9?-UivO-CKU zZB)(HeG>ocz+!Gd?M!g-Ye?9vDKPo(I>hSEk<|fzQ9P5qCEDe;IiXK}>%9Xd=KrQe zfn55dv~YD2ywjYm-oSDHe$&QbJ#G?U)9dTPD{0yORRFTX-(aFk4%IkdlxUSwmpQT1 zjh`-3d}j{~yoKGgKC8&Nj(8|Qd+V;(*6Gn;-fmsp*xr&rd(+-hF9rkXL^+X76uY4L zVDy7vd9i-VKXRCwssvR{GF*48Dnn6AvqizkQSp1|oPg&Zrs)^V{=1F>fG@O;3esDe z5Ce6+Zg9o0`J5c6W%2jJ_TLS2Tm1fk<)~ykH~slO9Z%%#STi97C=|*rS%EAodvP{- z?rx{`;qWB@WJtxsbn1ecih);re_FEc1V{v2xU-+8w#7yllH|A4m3yt$o5=FsYFa&! z&Cgok+^w1qw<217_BP$bSwzP}=Gvlyf`fCix}6-QaGP-Eq$E5z^K1@wHsPe)g0+(I zio$hor;XeF{#f`Wz4B~6-&raYR3^!D?U5V)b;nBi^^Q>usnSQ%2aED5fgQdoV?}fO zRT?Ti-cPkwKXS$MgUyu{%dBNR+84JI2*dl~D5DsORn<}!`GlBq#$FLNSxdm0o$QbI za|_3d?vZuEl}itt@3`=em&10;QCl7}4_wluLC&ko_aa2JMV9<5p8i&Akls7&aC@$H z-*^3`rsvr0?Qazc$!~13Rar!YM5VgK2c>{Nl?PKK=dOe%CJ43Oay)J_uI7rO&F7QV zp4uNBM88oAHWKwj22m7Ot*^rvZq_5+mkvWiwa7w)6iLsrnj{WWO~utYE|e$g6lErj@{l84 zUJQ#1aS3JV0TAV~(odnSzq<+x-^MP2Q{qzN99Mb*&*xC5`%Q^$rrYK7aicZrx7J2i ztc$W-O%5jnXFYsA`7B~V*=nVM`*kWtOpb|C;LX(X?ue`$?1RP0fT_WkL>nzx$im<_ z)A^dQnAn`oKJe`C5YYwpfO@oJB(ux}FL@SS{a1A+(cy~k1UgaOd>-?Q#kG0~dq$cj zW91!;7Mt#%v@F=|~YO}#g79YJ;q2D_{KmZ+qR`?4Y;D%138wcC;o9d(j>Jvaap0E zv6)J3p#8_>_Txhvug!XhdKffLdq^sXd2&&}U+rS%bNCET?5gHoYQBSPCTZ6yoN9E& z>-T-DpD(ovVa&|F&8KMiyc#b`nf`iue>b38y;{t~cVcPYv>U$M*qBjUSIXgD$Bgxd zN;9V})dxsvk555FYJM~V4!-8v;iP3I0U^`d+n>?CGstVdh8VA3cRSjCjuaTeV3g$L z&#cORIhn_)E^!_2&r~8H?y$>piX2eG>UVAW)v%#P#WD2@VY_L92IO!gyJ6irw`SRq zL_o)20)C_%6+;b`E&cwBvvAY_W9=!V9&qu4damI_k;?dP+d@QYM1=Wky^_h33>op7 zt-YLaea%JbN7p$4L8vPx#_$Gw+1HI~a+}EUWqL-&MI1+_U}4#A1-VJjWYH^^Is;gd z`OM<4xyXwXL&02>7$qGa=jie6=HkM9T+P#sH^^etf>07~yb2TEeo`yJSTq^C!1}1) zLm%gooWviDT@>QvG_=wv<&YS9NCor|{qd_7>+Ij&_jOp*uCT~6IFf}Siyr?3HS)+` zu4w(pse&CwllXKCA%V8(g}cAQYE276h6+ilCv{d|lpRsKS((;^u;XDMxj- z-^jbnqBY#fv>3Cd6n@Kdbx`@t%tEZIbtCRDxRm~;VP*vT)cQT9R*H&*<>%kPVp7#L zf*XEE*ZXe7WO)UzQ@P!g!gaNn=qtHxCVjMlHXN@+$1&tZN5y0f#%}ShZ^`W0eo)I^jO4s24%+zOq{KOe>s|nLa#g}jPqBts zQTHmevjrtR~ ztRw6|7o}ZQIo;>K#})u|{$vP)jp0}AT#zMGFDP_J+t>r1dam+SPx_7rvqSm}#BKY& zZ}}~O`E|AI>_Yxb-FTG~s=|)@?2wS@=?$nxOeRl-x0WOdyTsA;q)3#zFNya1Q+}q6 zxJG;-Y*54qEgE5b<~76{62hsg>=rVYPyCh5Z+$p>GF!DYzg|F3RAgtoy;)pTw+oFY zFrKeTYHIpC89>tYlq7bVBy21?g1_5t51+pl&lFDEp93LeA&9INOR6yVuv zD&6hvgp(=Lsq&?{XNoV*@IXy=F5CMc{)esRF~^vVVpv&fHZ$Y1CGxX^iRP0&TmoM^ z&$OcN9YS}>+DtsnnLu+osY#&s{4-fHW%+>I6j!I^p5D8Epn@y*{=Yc&Ka!Hoq?2%b zZqj7lZgE~{N7Ss58^-z3IzshXQNd9MywJXiP(5o6{p3^J0 zmVx7s*X7kblK+S-|9te)Ry&W$^)l9oE_)7@N6HZ4JIU+}K|NV4WCk?Y6P2=f*iTry0f~!Yc_fkX(fOA4$bE**S z`BtmkTKa%6Ag=^bS4Z%8j&|Az7bS^(vgXsTa#SwMEE$Qb_pn06H6)3E7wY0v3J*Wt z*PXQ}&=pW2u79&iv_OZq`0yR;>ZqEQJw&YzykQ4FM$HOk3m7Lk_t$@d86~Yh?n3bh zTFH_KG4sQXA{OSp@mKqxX&p1r|4DSRu{~i++FNls+iesSnDl49?>&VmF%Vzp!P%N} z(!|(PZfDnE5s^&Ik+5B$J2h)drYM7Mpf;py+) z^TF|kU*oKX!joJp9-64wTbDgD=pW-)2aZy^yNAjHb==e=Rohm8cgn=PTIho~6k5tY z)xK0QNlkOqe~^B2QA#(#!MIFPVlT9|jHy@;A=PW$1u8V=<|^)ZKi+@7BC$8+Mu5r% zie*|pUZbhkYx`fAlkbOJrugN__g(9|!q=XImEnlqO?U0k-`uRa?s4<54h_SqL$qUC zbVd_lLZkrbkD2Yfwzm6OU8z55LH5b0lbS(3rxERxgHUzx$&PP}Z=us)sh`0+OlNxl0N%iy|_ezbMAUgnDl?O@!- zSSc){-?Zr3TFS{{&9MhANJL(R62@w|xlpV1iyU0V{zM42(xk-MohIWWUvoN9 z`cZd}PShK9Uu%xqmCKzi`zz^+WRuZwt*`g4Pp^-&jBZ19S>vdW zg0Ax9u0r*spH?e4F>joxy&a~zFZa+XwU;0I7X|(c|6{vJqHyLa-RAL84Wua*HznOOU2QVA zBAq;mJ=#2c?Em)dOEV=w;$NlNs_C|?JJXP$h;$IH>xcIE!i3Y91w3I=dWao~@Ul|> zAi#Lo-DUcz*r+QEpBa6Q;+f0-3fWUkN<0%wFEWxLpq>yK>M@921&(a+Yh{Etw6tXJ z=jg~<8C5R#-v~w}B&69@E)_l6lp3&~q>m+^$T-MbPML=(ssH2x95V8hpbJTFpuAw- zp|riOP(oyY6ZbU7`S+6p!L5N}Y~CPrag1VVb>Thk;(mCD7Z|S1m8HsRV=slUIN59- z;;$~R>(VcBA>(}~1n{bpgNcr~TTL$B@?(Q%z+r4*wZ;5-pyR2;SLf+EP@_>s2 zf0>>p%aB^8h-ODiZ^I6mfOWK_pxE}goJ%GCnid@Lz-MKQhTVCh#tkc^HItMQDQUBD zMhV|yH^lXGr91k{R9be2*2f#lpa>3S3k)970SelhJxTXbWu8DGW*r+t{~)q;!E&`l zv5)PWR=21fA0`J!vXg8*vum48d56P?$)c)(ffzo6bl&R}`!Oe~K2F<5iRDV2k)|3$ z2xEn|)X9CoF~Vg+7X21nuPVEPfZ60E1IDb6i+u7*e*7GCsueytjilN#OVQdo88a$4 zIZD%b{K9$?gbQz{-TY{qkU(tCf#6dCbIolNMC?MZ%)uaO(vnUODwxH49BrDonZT& zkAx*&oiJ+w?j2&qS8fU6ZttC?DE`tVl9@9C_q_jOylhm@L4?dwNVrtN&} z^q(6aj}rUxPZwe}8(1y=nmr~}=&_Nh$qej4zf1Qe)0ws8PUe=)fjMPOV8Pb^;zMk% zKQ_{si;fUr&yzOh0?S9y+)4CD=WeqO4MDOuC!l))xRnPv0zFlby2Bw>sPB7)mbC6; za5GnMR2r}3&_>HXfAr=vi}qPdm+r^MAK^34PRElwrRp-xcRmfjy9dvA0I=6rJ`bGi z6)%u4haYaI8Cx|8Wtw9|LEeOUvxeeE(;v3BTbnZ3Y< znujH<7onN+yC1+pKJadSGI*KE1Ei30Om7CZM5Lz)f+kZd9ZY3&nehK`EtoHTYHns$ z2UUz78fr0yTIawylaG!hG)djQT(D=G{DDzMnWZ#$HEj7zdU9HoA)ahw2SM? zq%R&XYJ#Ge8U0FL9XiG{)Yo}|Ju%QIeBNzNe(((zJ6ce>j4{(TUx=rm@Map+b^Abf ziqB;`kRw0@9J(xq)$1CD701gKSIO0+GFbJfQz7TyeDaW1C!>>3%V-BOha;UueOnrb zpxR2gRZRaPER>mX*4g$OHt8SmKQ~OZr$)?wKFd%Jjx7UwE!#j-@I|9<#0Ly>>6pc~ zPER&jJXeNMW$9Y%&R4efL$&=~UzUJwMhFQx%rrNDI$2M!dnUZ4YvEL6l%c6P$x#*_ zF(5W5>cv%rclv4)S#AMg)(=xoB*mTB7|4mRg5X( zva^rW;$?{(8Zc=WE_Mi@O!Wyc%Bf#5Pj1`7Cv-4S#-acl<7-H81Ll zcM7XOHd1kzicaO0u*|*u`tKz_KTJ_wA`?HNX3Kqlog?qI=Ff>5>HJLCOfmV-U&aiU z7)D?IjrxIJtYoI;+uT)**xR9lWfN5cy|-WBRb$5zDU2*f=7(M{8tlGKqOUeO+dNod zqIloSeulkOqW)xW;i>->v(_YX=e>x-VtGM&ulk@Q%<3%j=x?MA{l9}^D zE9PP8IOjScT8EI)0x?GeIPZq}1<@>i!v>(T(1$;1WYbC%NJ^Hc51&eUv=@#vCTj%t zhEhjeKbXk~xJ@rC%vVLQ3C&;6uGi+d5;0tuHOgp_ylJNEwn@jx;81m638kebtX~+S zn92DE?Ada?r{E1->PqyLGg2jt&M;~?DcFcuVVrclbgau1My|MH3Ojhp;7_&et>cF@ zGqT9Wef_vVXa43`J+j`mBHPN^#)dOAh9FYFAAj6VNVb05!TreXGPEf77iV}!he}xy zRHOA)| zpGWiTlnxa@vmjoJWml{1T4$wPPB&7lRaJXq^pDG8;@>&7&^jFM@j#7FJL3qwF~~%! zvq71-dw%8IaK}}nla*S{u(_U7cL(&(nnu>)!T*^lS|mmlnYHZNTw!g!U%Gi*A&+v1 zoPSy%?Q%?yqGmC0ey$U*Eo|R3qgGE&2@%%6SyWT6Qo{=UA9SI*_0x}x4!U-wlH+a2 za!%nPbKVkw6^%xDk5;nHKVgJ9vN(Gq5-2B3@ z{wi?s&$7pq$`D!2GDY@E+bl78nLnQhaKU~Ly<;y#y{m?+h6o+nCy5aAhIpXaRfN`P zK|yJ>eXj!;_ZaHx9k7QPv??45AC}keX3i^W(gdz>>SPac^umlAc(EA=EnR;SEsK@T zVJ}Ml4TBEGI8-)h-#wMQk_K))p;tI{R2 zHSw_u_?vLt)Lgq7C+{5!JYTxPYhz{ z)edLxGfTrLod5cp0C<(2b{?xjYpB`leENq*f2NDy=hQo^mcppupNXXZj2ZktXQCQY znWc^<9hM(g_s|SozW&q-Z%p!E`sw!kw1AALi?Ah{VHlf#MDD-v^hpdN-Ik?yoP2nIp_PM$96Xq88Qd}*a6_@6W%iM`v-Xe7toUYY_e!ZJ z2559l5u=iC88=KmzLGZ0Mx)E93}`$Ss+8VdY6r9p;}#xD+A6Wm*5_-o9;|Q1v)kb8 zI33J0A_&xHjS#D&IA3xtP1t6Y#!Ya?CfHD_k|9;cv(_=_;_<~p!i(gp&Eu}ODkf>w zgF0`&rn?|BvioCFav2sDliz63N7Ra**nC=IoL^+B9WMTsCnlyFFY(H;b#PuDT&68! zACZ6BIvPoKapJ6R4!?C!Hu({s=KR>G@_zNmy{9VnhXZW`5mkiqOfyVpZFzg`zoZ7F z!~4QH!xqcNSy>Od?6c?J#x{Ka{$1~3w!wJXuXW&vOGrr}m_x0fUh>It>IE-`*rb7-k3;L((xqw6x?U4` z!Q)EBUu4UMt=k#(FMbs*o`p{02Ww8|`&k?g3^uXz_Hui*zvQJxP5SyZ()&Quiyh0d zIXl_Rk4-aG^xn|(IfOd0Mrfgp6ndq1ayzUrWdjCWgOHSSXv^L*R6p>z1l8}xC305T z^raiGDGm>hMbir=!Rog%;JK^tFV(-JQ}A!Sk}986{|=~oYVamjjZ+J6p@I&y777`Z z*K$s#@KZ=HY1VmbbU!@L2=-_7EGI&aSmE?oSP%@-bjTVlzdZk)*OQicg>1+O(t$cQl zc;mfQl#`~ja|nmKvVlrnJ;4_{$1aoZ>|9GxQpExRyloBY@LFPvpw+m%EG6O@#+pLu_-Biouf9{VUWy?zwd0?hetn9LYa)4 zT$)ynbw0%)C#Nb=;~a3?{!c~9H7?zW?rr3xbqNUpx?6YY*WYi_I+yBM_okgG=azcG z1f5&ruc7gx)nqM7w>AB_u#k|`?dEPPt2O}v4>%SPb5HJbSBeB2^^dMj3b}KGXLNC1hn>cXw7YA1% z^7DPkDR~PPnf)W=pTWUFyuJDC&lR-IJ|{(QD%j>lQw@@^V3i0VtIvZM0;?R4pY4BH zm+onA_d6I$$u#%Kk0q#=amL}8H(p1*PaGE;MK z^4wezl&$TG+mC~%SaKetdg@~)>`%MKtSk;EbxLQ3X}e#n(WxEe{CgmN!j^Wwz|<~yr^qH6miw##uL&L)K^a{^#inQUwxS$10DEf)&L+zR*O2@HIo0&~`Z)5nJXM*x^fy|` z7Zlv@XYlTlu4GbF&PP=4P)K_RQFfUL(mI9VkpFvi6hPyLl2K~BZs)T&TLk`>A) z%b87v&dLqMLjXUFoT1rBz5s%6`}&xp73mZgFKE$9!?H{g3+zotmN<>aI}fE2p)j&`%$gv}4iz~0Oha-NxAzYMVGpdXZk={v=%>3@(~|31pX zpIz2=W_;c=vr7Lu`{jQ(&EH-2{9gY4y0b!GSY9ZnB>&f+$BN}_)Ca#ga!Y(gk{r87 zhnvWfS_q?u)qiX6JHwh>*0piD1eGQtB7La~(S;yL?;=gW5D^urp-Ar#2rZyel_oZN z?=AEe2ne|7ErbpUJrF_&H9#mifwlL!&UNi;f8W{PkMGyY-^|QA^Sm?9%yZ9k-!D03 zH)TQ%?l8xI~?U?Lf@`E$nHT}FV;v`JzXhttD*Vy!K zTKD6F&nr!-BpL@@>?Q17q5QVX0FnY;ztp(ix!F3JdE_YW?5Tt2YNw7dew1W6DFrH% zyi`^36VNKdUlR;^n;`?<$`s)1yWt}FaSM&tZ{A-G;CLs2;)!W4>%1S`)V!YK$@g9A zLV}Hu@6nvxyhO*z9%W|;&a>pFcz*`;t;)M4CtyC;i~sCF;QV~sydxre^FIHK-oc|> z5XhYQ*U|Ib-zsd8Z#u|%&6_D{%^>GUsY4w*CaUt@W{1*LI{I*Np)&J*FGT)ek!Kfw zfp*ZvYSxm*o}$bH2aZ;#+RRJz_k-7 z_%2ocfu;Wl8Kii8%vU;{5d{>jZT?W%qr2|n?A&d)R+^v{5f4>B)Nk$+}46jBJk_mj$@fnX*!R_XU*n78!LR>&hcUxaBpI*M!C zsPym~^P--?cx9S0rwG_q75_zJyJGQs~_7%{je@6p)si`vp_EG+l_DwFz;Z1Mjt^KZoy|Hnz> zEw%33%m2?{_&-so9j8=kBI~I-B@KI$z`r{1|5#h| zZzKL~MC$7Mw|naUTBP;wiS)M-|DH&vJK6uoc@Ql4%SHmL1iNtZ*=;F}G38C`H<{Yq z0%xj}Y6GsUU)a-3PbS|T9oGgpjJ{2Ow>*Gi{)>EO z+Vw)Pl29^}h@hnXSrT$e8mMa=`V@YXwdv~(C9!~&aBA`p_4mVbrT0T(mQhUij$aMd z(ZPJ`uh8-bBNihkV5 z=4gA5hG7Fz&qn@85WO*n-2S3&4T$b}A`Xb+XTdYF|_UYecJ=Z?}%xDW;q4ODd$Sdu= zF^ja;`)K#03$;7K!!IVZ2>ZJ4cQw;Gl8N5Im0QNo=Q5WWr`0h?EQ^s%B8>A;Bn7AT z0GE07j_N33fasb5Z@I$3b6Z?SJCzsMsrL`X+}06Ie#CVao`o%`n{6xiP*s!Xb3CDC z;s{CCXHUlSFNQ%btfGR>5>^HwvSanb+j?^iK}EN*4}^y3MClfCs}rnArj3;VEPU)?1GD-KHB!DYUh{PRPtLbg=F0(cM4eN)fwo; zLYa6JZwYH9+i?*7OrW&ZnV-iC3L3Vrx?mBNrs5XlP^G~MEmRKEf=mnr<3bRc6O2F72m0G!`}3?SyQz- zec@>WeetpK^3I~vuag^E7yql?69diH)v$(Lz}D|VNd<@6AFC(q+K#JvkW$E(Ia zjek1F80{g%;{Ddnd$_L!kT*ajL>Gz3f}g2aqJ1*>9{w(KQ}VXr@Zee@*mpY9;~e@| z?TGL+aXZH^Xs zqYcS9Q_CR|*QPwhT>4%s-m?$C&-k&yW;I?{h?s6Sp6%DZL$+`}weL#q?9Fx-71;m- zc6rIC0&t*`?Z!`J>}HU^LR*El$XdbNi0DK&rpWr)e=i*W+%nhVrE-k z-9W$_+|whk)%3y0d-N67wmP-ug%V0GVdnksgU<){p^cWIeP*fG@|4PP-r735(s=tn z!$q=0dtVyliG^~tzULBLoo>Mfhqt4-Fq8h>Idaps-m_R1bGY6}Mbngzx84cXJ!ZYm z+sxb_+?hJ0trrf}QxYi* zU?}4L+@X55vo1Uoap2-4?1Af6UHru%EJ**l%M93cpW7q228znff@!0iQhdtyyeG1s zxCGT7_cazBTYN;EaArqfzti2w9N;lNHrI9A{sFzUrqqXN-3XW7t`BM!zANi*>gaUQ zSJo}QzHW6KXSt+l>2gU>(f`g}bFix3!HH$xX^`9I4^;an7C@s2B%2-2_M47{FmZZ| zs$a-In1;30D5%`Jm3hmkr~gGtd5lyPeTnSLJT7xycUWdcg~6{HA!<^ujtN;`1o|VO zHgr%l=fkSS>4N_Lj|5p7JfkRWM{46(jU9@w(|_aKa#xTM&{#fb>V}kO@Zo;w7j{d# ztSq>0#D_=*n4E5onz}kya8_|kRs^!EZhVN1uqoc%JejjkbeHs{co%vtm5wF5C&$8P zH!dYmL=E|bnJ9!5y)={dDeK2V)54G*X>`<y^`6zy^zVJvknXYP~FbS2^_BewRN;>KhtumC|;qz+ufyVBsj0!i-=Wn zVXI`%0rIiB`2(Xmh{5oza^00S|GkDGItO&~@|cxaks1RtME{j^aC3qb*`PO?^LN*h zyvyG91ix2}wUlu-IH;TPg4WaZ3!ZUjFC=qZkDdM+ezg2a@|Itd-boZ(LsCG;0Q%FWgZZB`CO(D?{vx zi`>Gx;+OM_V51h9yNnV#G5=INdc$5II?9;=8I|yY?>pC4f<0P3lnu+ULdPx~COn(v zEb3W(+@3d(rr@bgPEKm85-#jXHG;k#w#mzHNY;ULhR@Am68OF}nVlrFgfi)X_8Q`; zZr!8bV>wa9;_74CkMDvs5+3{0i6joBum)u{hFF*tdyw@E0gC1ott8A$`< z+)l)(gMC}{<0Yl^GueZu@wJ|5d2Pn_jHoP8QRz2uXF5!HhHdv{wE!K5p2n|fMY4Jm zR|EU&6VZt`y*g=#CKc*Gp%S9MXGgg0?Av?-$6oqiK9cs;^rT2NHB{E7tmT>hvi+d^ zOJAU3Dgd7hDKV8)7%9d_DtE zgA``Weltd1Mqhl5GBw$#;y2?1c&Zi2#451I8<}i}17AyBMNDaFWCs$uz;iWD{s#jM z_J7IOC~cv|GsdL2G5eDNM4rN9#?`Ib_*PI5c)b`(nIg&Ynru8G)rW3{MkowclMpgX zVtmxx_mE|IWjOo@AW<#!4Pm1!HNBNzKSwZ0rktJ%XAA3G3$w*FDusC+Y&~e*j|*5! z{a07!9}aE<4z;*Zxlg^VGyUf$>j^*ng4Bf&{Jjv9%{sZyVyfHgghP4{+@6y5H zMS2f*(ZOJ(7;mRI(VtL#KH8btKK$aCOc9TQ3|)f&Z7A1cS_zpoCs|KA+K$kR4Oy{G zrl-?*EdE^XO8!(y>_TQ}@M{0q*a)AzZh1yk#+*mpbB}b4xN5SUE1fIC4tTz-{|XP! zd~vZWi7;?=uPqqd{&Odiqns9jxgxAJL&k?%Xao+N&K8>4Nfe64pC^_@Rzlr zqp;8OR+`QQJ*H*0g~P5l(y-&NE~`GJk06s=}%^H$VVS9 z&on-NAxMr9wiwdqO`eFS#EmgY`|9PiuPbrd(I2)ne=mM8WTQ1+4a zu$%jYu1{6T6d6z@Qy*!-zcZSf2|q|(BtLaMXkJbf3{UvHPP z^tT-Z!jL1Q;Ds;j4}FKOL3dl$b1I5XzWdl~*HU`S86q0)S?L(I!5im!{U3o1y;Z?a z%ch@sO3~~UBYmZ*6kml!C03@(G11PGha@_+Fo(USWRyIzAO=DBK%5rqa*Vz{<0IUK zlP6)iL4hJGH5%)HPc!?-(8{orU2GB`uUw4_q~2q=Q4XLV-3OkEIT6FPrIqY&SZDxH z32hCKwWiFmb`f9FQ35iLe(U5VcA0Bzp;+G35Pe0|No#Sb?I$2X#>pZWma+9Cn&8)y zQo(24yN1*JE~4w_PVAUs{@M`SFYRk@KO~*i&~3M3cGss-9_m%BapTtelpH@Vf-sC> zO_1W@k|}tH*KewJQU{ON!U`vrFV&qSyS1`$n-7n1W3VRvz$Ds&hdQY|M)ia;b9F<< zu3Qt?rk-VYP2hA5z_5M6i&jGe&vOWIMEgzS?8f#@fJO2@6e^1*hgGgVv;=Hry;` zVKKGDNGVom#xv{Qj#p%lkIyDvk*ksiccf>o4L zVyDy723=j|q%NMB%|0GE`vU)xdS@|(^@LHtFh#kJlC z(M+fwr=lqn$ZwP=LZ0!MrCu%AxVyg>hw1Mv*>Y9Uw#mKd+Slw@LaGd?G1@ySNh7pR zIm@>Wj5ZL4J!8KNiRHD^;?e7g2%_USe>3}0@qvDTVNum4$F@y$WHl0L^OA`#mqN9R3x?mwRD)2Xh#?|;-A zq8F8k#?DuUA}ThSC8J3w+ZKIiT6BB4omktR%jdMO-%%BX^j>(>B;!l231=~?)(+q5 z%H`bOkoOI}M3M-6h(l$!kuK&}!j!HD+sr&ivtvEqPc}3J-%NA95s68>2Hir(1spF! zk$V9`(6!%K;?pxOY2MS+?9$X^wG7+;I33mBuCAZbBlL^a4LLa{i-rE$t*yN}0jL|+ zHfS)E|LMijiRzm!D8=Kd25jfmAPFZgi-q-C%!J`Q^1Ww3*btqDdJIF+p|p~Vp21F} zjHc*05I;#q3b~Yc{ItgiqbAn9Kt`5ZyMedml1M8qa0lz+QJAuLjH16P*!%TbS@?>% zx@B+plX_NSpgfs1X{KvtsR!Hv8(EL5E>8O|PE8n6F2< zr^0%2NvR%()urgkqZSv6-|ii^sj=q7Yr?awN_jQg@LcCAT%`U51r~<39FL19GRSecgUi)M$WMK66a?4)pns zq3Y8r^G|6RM}5pRG|+sA%>}7AzDa%i+B7to#C2;LSQ?6}p)5Byi{)5BT*%sDY2fw! zk-(-k1qkGYMMcI$Ls(hE)?ioVRxExPwp-tzItvcX7xB4k7!esg++f^N&e8%O+DbV{ zx^=rXi;5&ULxV-7J2|X2z7iD;1eyJTFKO5my!&p~eCYPC9FRpXt4tbCMfwOBLv=A;mU~^j$-&ADYdHBlLoqAELgFv+2!lezs zTK&mHC&R-iMi=3}8GTbfQm;nGPX+9TGGCYC?4!{m!Le0%4L)!BVXf0AFMJ-XcVyQW z%PiFfrty02E`LFif;Ha&=1EOMYJZ`@@o zt0cpjb-{N1p&I3?*vzEK$cftBQ8mb`<%%uAJYMfOf6!`eZ7=GX0o)0n>+}xOT6k=o zSLBpD(@qp4U~N1&mZ^X#`8i$QBPp3AhPm9EL2n-XaH7<232;~wWehPye7dr7rXEHs z2wpgxYVJLsEh=hq@+n*=5a(B0-hy)*OOd5YM6Zjhs^8dYX}{6u<4QbH$q^6^k%VL! zv9BL{UNs4CN#B$Ex>7!X_;3`JOQ`zAv3;P*;Yv(p4bn{VW1))Y-DK(q2CGiLDVQh= z{plLigPaYtF`?f)$qg5l?)}YAmy@pAh3f41e*wQtf=`(GNcvaR*H<(?kL0wOWY4`6;3A6oBN1>E-Ve~lMRE1{ky(%6%9ZAC9x-r}JyPypKzs$3uIWgIb5jzVhxO0-z??yc_0hm3;2VQV#3C*BsXTKC+84iZd;|S z1I_Oe&+qanZx$_+pj1>FR+%U%C^&zTT)5=A>Qt5HOPBV_XGe1eT^jB%heEz?@;huw z9PQ0li%tc5B$qF+ewcFcnjE{7ZEj?Yv?XwkE;#QP->;tsG+N|8!qU;aHQk`>V*K5E z91gl-jy6Jkw&)Q@pa;-F_YZcJPE&L>8cn3>kGYf3(&N<}Xh2x;^rkZIxq(1Km(N-h zh(ZPlBrUb9fv8f;$a^Zr_Ui2$pQUt4l!lPyHb5ub`qm{6UNYRZL1*1tkYYA>;)aW8 z`gW(09nIEQomakT26){bH1njuLpDVS6rTzYY5)Q>12>FNJf6ZSdja2hHKsCDfzWlp zaDcqN4*s^^qdsqbCB~uG%flh6zFg(HV&1a-z|deBX8w?nU*-0kq>ab&tDTPC=CaMc zH$~?<7ZzWe%bnEnD?wcm?iPd!O{wYm*^`{m4gk=8=hJ#4{rcObRj{0@KH0UR?UDox zET4zS4cn$lo9@d*SogcZcW6s|5A&)4(UU(o0SUEj&CaCWRv+aStT!- zt>KQmhyZTiDC{=s;d2Ydxma`Zikh{?Qb&^ZWV8mm+qQ}RsL$REIlIm^$e};8bil14 z#mZ=A9J~m3T*ZD#a#xJs>D*#p-_$uq$JLOX#jngJ22L0f2q1*T@lM^O#FKQY^2z2! zmZ9C@sR8o_iJ66sL%Whc(4g4V6Fv|`P8;E3@knsAdIKjC+3)Qd(ED!eq^=-m;YCF1 zLjlV|2g?Hx#M70(atdu-xxj*ze0e0{7@nqE?NsH(C^$nt&nk9ZQPSiU>AUnX!^_El z04gA{m5v}Fp@fbQ zAOZr?dnfc>5_$+}XW`zSv-kPFx14+L@BDM$zhGs}HP>2mj`ECWjIlx=sVgy_zI+-4 z0x>E-xce9cIu86x_v^`{z@O~{{X7up7m)H@1#PdSH7w&(?fDmAGM#A4vEO*lMy6fA z@k>tN=d=qs+M1=MGv;p^4Fw(7M+YjLR`b#81&-LU^}T}iDtq)qnK5BBzrs^xsKCM2 zDmO;=ypZsX3y+SGPu{qGA}5GdhmLRM22Ffr&r9Y*Ieo%4##cQfcX4>1{H z_?-4S69$IoF6WaYS>$Qk>QI~f zh9-ylH#%=Qd(01-<1kT)45f(1DWM?T=D$UU~&0cX8AF(aVr%+jjRJDfC<~3bB~= zJcck?;lIT=WGW#XZ$RmW(GJEKApO;p1 zvzk4ZGl1Er`o*xB_}rUWcBT6p3})iP$NSS|Q6a!+PLYl;-!1k2nnrKS@BloZ8w{f|1DbR0Q>ScB=n<{mA5G{i2zi znVIPvZ4Z8ryR%QUvQ5Y|>LjyP4wgQKnd2g9e36Q&ub<(RDW?xvt!Dt++O-NA4o3PA za9H-8$ZL#WyQqt;367k?Wx}weiHbK{-}+GCBqOa#GfGnlpL!AnM*Dyy@4!+foV409hRA|C zNaQ}IlS*7wGBkGruBR;`Qe=2-mQ9|x@7>e$qmXaEN~K2O^KIeo%kGaPoy=S2BC7{N zTUhwiIifD=eW>8QefvzC%!R>YHNQ&v4<^}$BK!9*iM9rMY~!olp2MXdoL7r?!{%*H zr>n++kvCAt2NiPfdv9(#RX@M4**J5rEvR>{>NtaLja-;>dwe;@r{@!Vs3Ts?|DmR> zd8bf?nsT;4Y$v9|s<@@twq&6rQC$9psV^S89j8~?X)~BqtPQ`)AuNnE@FgVYXDX<) zNey)*>LwV}PE8ztGo*8T+G{Jif9Ck=>t`K_+GRFWkGQ#;$mt0vu)f`xTMf*wk(Jo+I79j zcsVvwi!ZuSYnPavDktK#K4K*xk(n@ID^-50hL{!`KhxKBgQ+#ucyFyX7BFSA^=JD> zN@z-cetyQrj#l#vzk1p4EES7(O1f=K)iGQklTXsQTzy{yb6)>A-_fBq%~4WP5_s*F zuh%9XLHiafgyPh{=+6okU?^MT-8tA0#yiZLfKapHYkn`SS z_NT(wj3wO0nNyuYKQP8b_%Dh^`17?_me8J0Pa1nYz^tXW=&1@b@*_60Q};(RWa@hc zE1~oUkSlkJt*0{hny-wLD2C zr=k*w@ohN3U!d=&YiS_1Sxo)hl@vW&+VK=JHyFKvEP0cXmv^QfC)#|BgpO+`qe-;Q z*8&Ub)RqJ#!xU_ItC~(7y~^pRY1+A%RRI=@hxMC-k@aZ{%dOhrGc?{vE71Zp{Gm5- zrg8Og-vaizo=d~{SRB3$-Ll!26{aC{TG4hDTP#(9^>ACRI{rp0ssL?u|H;6*3R~%0 zrjR19&QdybTm>|{7!JcCRFVTkfvpq*W(je$y)V<*K=)M10k? zFMFdtZ7O31!Zt1F$uEe(PwWLXqH?xP)t1Dqr>)g+(bl#&UDl3xaa(HoaRu7>`{N

sN1qz82xjhD`Eva&CeV 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 literal 26731 zcmeFZcU)83wl*9@#VsIPQ9&uOY(S+7(%WXEqS8b<7>YEhL0W*2L_xp?s0fjcD1;uV z0Rn`gB3*h-LXqA}5+Edb7w)sq-RIs@?)%;Q&-Z)JKS0747zz$%Oo&)k-;5eLU|<31i!s0`cmen zm-|KPInG^rWtMTW#OgC93m5p{^TbJAYq%%H97nN%jX=sNOb;B3utfFu#A3_v%fk>{ zsV=(EV@{!<+@#>X|Iy4}pQqpZ^{m!eHG^YcU*6nJ`Q^!>pvQLmW*ASfKRVAT!Z6t&j$`I~ZW%llq(^E-E*6MtJeE;6W2Mul6y~i!X(IMku2Sm2j z72#gvzPjMRiGqIIy6$zhdQ#PsXlPmO39ctgtpwV(GMSTK=IMGRj}+6*rwijuEGr#3 zbk{_ACAE^mGfMf^(wO*5OYXFpNW5gWjkpFosO~5G_3syXMU$zmwoEntGbc{)*&w$~ zpMDw-OY!vdbno9~4!Zc&AK-%o48@Ia_RMWEXeiZW5AU{vXFx254q?P;hug_Yw#KhR zs&Yr1T}o)D6uOYSp4F&J8vstZH8<^^1h$<>ANL)d!Z4d={8(I-fqe7zMA2E zFL0$;nmLBSh4&a>%-UJ&XG@x;Dm^;*yi)v!dYi9lF{+x7t5MKSTV}_v52y)pwd(^o z{n3xBd~|HBXaAJQ(;ZX7*787Y(Q0Ny7g*xDVRo6V0S!A#uP;N9T46RdSY9=5x`(u@kJd-x~Y9)t2H?SKLGzWklLqeD za93i)2F4(TqR3J-r8PsP$jJL8pR!-S&Uo!NKCW}l1$}p83QF?#bmiAigI`3fdD^x~ zNl5DVorp+SdI?ItP`T5e1W!id4olM~$P8k;eHCeSv`64s2VrYin%VQ|btj7IZb%@i z>vbB787A$9%NdU-76wbHQzmj0cPZopl(e1s$)(G<)ne=}gWQ?GUkbyDtFYDuYJJu| zH5ekPs(B+|h>Fm0gH$Wo0>|FmPo+7=7y~^$DZw(8%ko^UBYcYc+0R&N_)<5oB66#9 zb0sYBW3}}7-Vb3{jiwf@o#P{)%R-DH*2cC;%OU47<9wlnn%wMwo0Q`8E0qCV8F5g< z$>pIQo&f3GxA4}*XX`B)-JceNXeL=bWx9N7y&6M~Lz@Y{GaV8E7xK8Y=)=hF15mzNi*T@f|iXFdQ1TwTc4$Nc>KRI5+xVtTc9 z^OfOqQQ|fhCH5{=HQ)0uI<1-bGAm~c582qRwfPDd7p#;fo4h6YS+we{RnDB?kQYz2 ze2^{z0*Tc^@Bucy?U9Y|-slK#4>1{%nVFe#&Uektamq^0LaHW;!j`1|{^8Nl

X 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 diff --git a/viewer-ui/visual/snapshots/linux/maximized-file-pane.png b/viewer-ui/visual/snapshots/linux/maximized-file-pane.png index b7092d87175ec854ee552f2756b5a81c4c12064f..e8fb8aad7c2bf3fd6aeed4f6ec5183e63ec5ed6f 100644 GIT binary patch literal 20070 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 D2Rin| literal 19981 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 PBX!%{`bO=)9zOpcU3m*Q diff --git a/viewer-ui/visual/snapshots/linux/unavailable-repository.png b/viewer-ui/visual/snapshots/linux/unavailable-repository.png index e8e55fbf6f7f91b75765ccb21ac18e71f909aee1..7947994cbacd2d8281c1c78acd946df23c7d9f34 100644 GIT binary patch literal 24614 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 From 9cbbd476111e6c1214d04cb394fc28f5c7ecf0d0 Mon Sep 17 00:00:00 2001 From: whackur Date: Sat, 31 Oct 2026 23:01:03 +0900 Subject: [PATCH 11/13] fix(tui): skip redundant terminal output and cursor commands --- src/application/draw_backend.rs | 132 ++++++++++++ src/application/mod.rs | 1 + src/application/terminal_guard.rs | 12 +- src/application/tests/draw_backend.rs | 285 ++++++++++++++++++++++++++ src/application/tests/mod.rs | 1 + 5 files changed, 425 insertions(+), 6 deletions(-) create mode 100644 src/application/draw_backend.rs create mode 100644 src/application/tests/draw_backend.rs diff --git a/src/application/draw_backend.rs b/src/application/draw_backend.rs new file mode 100644 index 00000000..b2d46db2 --- /dev/null +++ b/src/application/draw_backend.rs @@ -0,0 +1,132 @@ +use ratatui::backend::{Backend, ClearType, WindowSize}; +use ratatui::layout::{Position, Size}; + +/// Avoids emitting terminal commands when Ratatui's frame diff is empty or +/// when the physical cursor already has the requested state. +pub(crate) struct QuietBackend { + inner: B, + cursor_visible: Option, + cursor_position: Option, + output_pending: bool, +} + +impl QuietBackend { + pub(crate) fn new(inner: B) -> Self { + Self { + inner, + cursor_visible: None, + cursor_position: None, + output_pending: false, + } + } +} + +impl Backend for QuietBackend { + type Error = B::Error; + + fn draw<'a, I>(&mut self, content: I) -> Result<(), Self::Error> + where + I: Iterator, + { + let mut content = content.peekable(); + if content.peek().is_none() { + return Ok(()); + } + self.cursor_position = None; + self.output_pending = true; + self.inner.draw(content) + } + + fn append_lines(&mut self, n: u16) -> Result<(), Self::Error> { + if n == 0 { + return Ok(()); + } + self.invalidate_physical_state(); + self.output_pending = true; + self.inner.append_lines(n) + } + + fn hide_cursor(&mut self) -> Result<(), Self::Error> { + self.set_cursor_visibility(false) + } + + fn show_cursor(&mut self) -> Result<(), Self::Error> { + self.set_cursor_visibility(true) + } + + fn get_cursor_position(&mut self) -> Result { + let position = self.inner.get_cursor_position()?; + self.cursor_position = Some(position); + Ok(position) + } + + fn set_cursor_position>(&mut self, position: P) -> Result<(), Self::Error> { + let position = position.into(); + if self.cursor_position == Some(position) { + return Ok(()); + } + self.cursor_position = None; + self.output_pending = true; + self.inner.set_cursor_position(position)?; + self.cursor_position = Some(position); + Ok(()) + } + + fn clear(&mut self) -> Result<(), Self::Error> { + self.invalidate_physical_state(); + self.output_pending = true; + self.inner.clear() + } + + fn clear_region(&mut self, clear_type: ClearType) -> Result<(), Self::Error> { + self.invalidate_physical_state(); + self.output_pending = true; + self.inner.clear_region(clear_type) + } + + fn size(&self) -> Result { + self.inner.size() + } + + fn window_size(&mut self) -> Result { + self.inner.window_size() + } + + fn flush(&mut self) -> Result<(), Self::Error> { + if self.output_pending { + match self.inner.flush() { + Ok(()) => self.output_pending = false, + Err(error) => { + self.invalidate_physical_state(); + return Err(error); + } + } + } + Ok(()) + } +} + +impl QuietBackend { + fn set_cursor_visibility(&mut self, visible: bool) -> Result<(), B::Error> + where + B: Backend, + { + if self.cursor_visible == Some(visible) { + return Ok(()); + } + self.cursor_visible = None; + self.output_pending = true; + if visible { + self.inner.show_cursor()?; + } else { + self.inner.hide_cursor()?; + } + self.cursor_visible = Some(visible); + Ok(()) + } + + fn invalidate_physical_state(&mut self) { + self.cursor_position = None; + self.cursor_visible = None; + } +} diff --git a/src/application/mod.rs b/src/application/mod.rs index 7193fef9..44169653 100644 --- a/src/application/mod.rs +++ b/src/application/mod.rs @@ -6,6 +6,7 @@ pub(crate) mod attach; pub(crate) mod bootstrap; +pub(crate) mod draw_backend; pub(crate) mod event_loop; pub(crate) mod input; pub(crate) mod redraw; diff --git a/src/application/terminal_guard.rs b/src/application/terminal_guard.rs index f850e6e8..733b8b46 100644 --- a/src/application/terminal_guard.rs +++ b/src/application/terminal_guard.rs @@ -1,6 +1,7 @@ //! Raw mode and the alternate screen: entered once at startup, restored on the //! way out however the process leaves. +use crate::application::draw_backend::QuietBackend; use anyhow::Result; use crossterm::event::{ DisableBracketedPaste, DisableMouseCapture, EnableBracketedPaste, EnableMouseCapture, @@ -21,9 +22,9 @@ use std::io::{self, BufWriter, Write}; /// so a frame leaves this process in buffer-sized pieces rather than as one /// write. On Windows each piece is its own console write that the host has to /// re-parse, which is both the expensive path and the one where a frame can be -/// split. Buffering a whole frame collapses that to a single write per -/// `flush`, which Ratatui already performs exactly once per `draw`. -pub(crate) type TuiTerminal = Terminal>>; +/// split. Buffering a whole frame collapses its cell writes before they reach +/// the terminal. Cursor, clear, and mode commands can flush independently. +pub(crate) type TuiTerminal = Terminal>>>; /// Sized so a full-screen redraw with per-cell styling never has to be split: /// worst case is roughly one SGR sequence per cell, and a large window is a few @@ -33,9 +34,8 @@ const FRAME_BUFFER_BYTES: usize = 1 << 20; /// Build the buffered terminal. Enter [`TerminalGuard`] first — this only opens /// the writer, it does not touch the terminal's modes. pub(crate) fn open_terminal() -> io::Result { - Terminal::new(CrosstermBackend::new(BufWriter::with_capacity( - FRAME_BUFFER_BYTES, - io::stdout(), + Terminal::new(QuietBackend::new(CrosstermBackend::new( + BufWriter::with_capacity(FRAME_BUFFER_BYTES, io::stdout()), ))) } diff --git a/src/application/tests/draw_backend.rs b/src/application/tests/draw_backend.rs new file mode 100644 index 00000000..c1291036 --- /dev/null +++ b/src/application/tests/draw_backend.rs @@ -0,0 +1,285 @@ +use crate::application::draw_backend::QuietBackend; +use ratatui::backend::{Backend, ClearType, WindowSize}; +use ratatui::buffer::Cell; +use ratatui::layout::{Position, Size}; +use ratatui::style::{Color, Modifier, Style}; +use ratatui::widgets::Paragraph; +use ratatui::{Terminal, backend::CrosstermBackend}; +use std::cell::{Cell as StateCell, RefCell}; +use std::io::{self, Write}; +use std::rc::Rc; + +#[derive(Default)] +struct WriterState { + bytes: Vec, + writes: usize, + flushes: usize, + fail_writes: usize, + fail_flushes: usize, +} + +#[derive(Clone, Default)] +struct RecordingWriter(Rc>); + +impl Write for RecordingWriter { + fn write(&mut self, bytes: &[u8]) -> io::Result { + let mut state = self.0.borrow_mut(); + if state.fail_writes > 0 { + state.fail_writes -= 1; + return Err(io::Error::other("injected write failure")); + } + state.writes += 1; + state.bytes.extend_from_slice(bytes); + Ok(bytes.len()) + } + + fn flush(&mut self) -> io::Result<()> { + let mut state = self.0.borrow_mut(); + if state.fail_flushes > 0 { + state.fail_flushes -= 1; + return Err(io::Error::other("injected flush failure")); + } + state.flushes += 1; + Ok(()) + } +} + +struct FixedCrossterm { + inner: CrosstermBackend, + size: Rc>, + cursor: Position, +} + +impl Backend for FixedCrossterm { + type Error = io::Error; + + fn draw<'a, I>(&mut self, content: I) -> io::Result<()> + where + I: Iterator, + { + self.inner.draw(content) + } + + fn append_lines(&mut self, n: u16) -> io::Result<()> { + self.inner.append_lines(n) + } + + fn hide_cursor(&mut self) -> io::Result<()> { + self.inner.hide_cursor() + } + + fn show_cursor(&mut self) -> io::Result<()> { + self.inner.show_cursor() + } + + fn get_cursor_position(&mut self) -> io::Result { + Ok(self.cursor) + } + + fn set_cursor_position>(&mut self, position: P) -> io::Result<()> { + let position = position.into(); + self.inner.set_cursor_position(position)?; + self.cursor = position; + Ok(()) + } + + fn clear(&mut self) -> io::Result<()> { + self.inner.clear() + } + + fn clear_region(&mut self, clear_type: ClearType) -> io::Result<()> { + self.inner.clear_region(clear_type) + } + + fn size(&self) -> io::Result { + Ok(self.size.get()) + } + + fn window_size(&mut self) -> io::Result { + Ok(WindowSize { + columns_rows: self.size.get(), + pixels: Size::default(), + }) + } + + fn flush(&mut self) -> io::Result<()> { + Backend::flush(&mut self.inner) + } +} + +type TestTerminal = Terminal>; + +fn terminal() -> (TestTerminal, RecordingWriter, Rc>) { + let writer = RecordingWriter::default(); + let size = Rc::new(StateCell::new(Size::new(80, 24))); + let backend = FixedCrossterm { + inner: CrosstermBackend::new(writer.clone()), + size: size.clone(), + cursor: Position { x: 0, y: 0 }, + }; + ( + Terminal::new(QuietBackend::new(backend)).unwrap(), + writer, + size, + ) +} + +fn draw( + terminal: &mut TestTerminal, + text: &str, + cursor: Option, + style: Style, +) -> io::Result<()> { + terminal + .draw(|frame| { + frame.render_widget(Paragraph::new(text).style(style), frame.area()); + if let Some(cursor) = cursor { + frame.set_cursor_position(cursor); + } + }) + .map(|_| ()) +} + +fn reset(writer: &RecordingWriter) { + let mut state = writer.0.borrow_mut(); + state.bytes.clear(); + state.writes = 0; + state.flushes = 0; + state.fail_flushes = 0; +} + +fn captured_bytes(writer: &RecordingWriter) -> Vec { + writer.0.borrow().bytes.clone() +} + +#[test] +fn identical_frames_emit_no_bytes_or_backend_flushes() { + let (mut terminal, writer, _) = terminal(); + draw(&mut terminal, "nightcrow", None, Style::default()).unwrap(); + let baseline = writer.0.borrow(); + assert!(!baseline.bytes.is_empty()); + assert!(baseline.writes > 0); + assert!(baseline.flushes > 0); + eprintln!( + "initial frame: {} bytes, {} writes, {} flushes", + baseline.bytes.len(), + baseline.writes, + baseline.flushes + ); + drop(baseline); + reset(&writer); + + draw(&mut terminal, "nightcrow", None, Style::default()).unwrap(); + + let state = writer.0.borrow(); + assert!(state.bytes.is_empty()); + assert_eq!(state.writes, 0); + assert_eq!(state.flushes, 0); +} + +#[test] +fn content_cursor_visibility_and_position_changes_emit_only_when_needed() { + let (mut terminal, writer, _) = terminal(); + draw(&mut terminal, "same", None, Style::default()).unwrap(); + reset(&writer); + + let cursor = Position { x: 79, y: 23 }; + draw(&mut terminal, "same", Some(cursor), Style::default()).unwrap(); + assert!( + !captured_bytes(&writer).is_empty(), + "cursor-only change is drawn" + ); + reset(&writer); + draw(&mut terminal, "same", Some(cursor), Style::default()).unwrap(); + assert!(captured_bytes(&writer).is_empty(), "same cursor is cached"); + + reset(&writer); + draw( + &mut terminal, + "changed", + Some(cursor), + Style::default().fg(Color::Red).add_modifier(Modifier::BOLD), + ) + .unwrap(); + let bytes = captured_bytes(&writer); + assert!(!bytes.is_empty()); + assert!(bytes.windows(8).any(|part| part == b"\x1b[24;80H")); + + reset(&writer); + draw(&mut terminal, "changed", None, Style::default()).unwrap(); + assert!( + !captured_bytes(&writer).is_empty(), + "cursor hide is emitted once" + ); + reset(&writer); + draw(&mut terminal, "changed", None, Style::default()).unwrap(); + assert!( + captured_bytes(&writer).is_empty(), + "repeated hide is skipped" + ); +} + +#[test] +fn clear_redraw_resize_and_failed_writes_are_not_cached() { + let (mut terminal, writer, size) = terminal(); + draw(&mut terminal, "before", None, Style::default()).unwrap(); + reset(&writer); + + terminal.clear().unwrap(); + assert!(!writer.0.borrow().bytes.is_empty()); + reset(&writer); + draw(&mut terminal, "before", None, Style::default()).unwrap(); + assert!( + !writer.0.borrow().bytes.is_empty(), + "clear forces a full redraw" + ); + + reset(&writer); + size.set(Size::new(40, 10)); + draw(&mut terminal, "before", None, Style::default()).unwrap(); + assert!( + !writer.0.borrow().bytes.is_empty(), + "resize redraws the cells" + ); + + reset(&writer); + writer.0.borrow_mut().fail_writes = 1; + assert!(draw(&mut terminal, "after", None, Style::default()).is_err()); + reset(&writer); + draw(&mut terminal, "after", None, Style::default()).unwrap(); + assert!( + !writer.0.borrow().bytes.is_empty(), + "failed drawing is retried" + ); +} + +#[test] +fn failed_cursor_visibility_is_retried() { + let (mut terminal, writer, _) = terminal(); + draw(&mut terminal, "same", None, Style::default()).unwrap(); + reset(&writer); + writer.0.borrow_mut().fail_writes = 1; + let cursor = Position { x: 2, y: 1 }; + assert!(draw(&mut terminal, "same", Some(cursor), Style::default()).is_err()); + + reset(&writer); + draw(&mut terminal, "same", Some(cursor), Style::default()).unwrap(); + let bytes = captured_bytes(&writer); + assert!(bytes.windows(6).any(|part| part == b"\x1b[?25h")); + assert!(bytes.windows(6).any(|part| part == b"\x1b[2;3H")); +} + +#[test] +fn a_failed_final_flush_invalidates_cursor_visibility_for_retry() { + let (mut terminal, writer, _) = terminal(); + draw(&mut terminal, "before", None, Style::default()).unwrap(); + reset(&writer); + writer.0.borrow_mut().fail_flushes = 1; + + assert!(draw(&mut terminal, "after", None, Style::default()).is_err()); + + reset(&writer); + draw(&mut terminal, "after", None, Style::default()).unwrap(); + let bytes = captured_bytes(&writer); + assert!(bytes.windows(6).any(|part| part == b"\x1b[?25l")); +} diff --git a/src/application/tests/mod.rs b/src/application/tests/mod.rs index db6cfa95..2394ac92 100644 --- a/src/application/tests/mod.rs +++ b/src/application/tests/mod.rs @@ -1,4 +1,5 @@ mod accent; +mod draw_backend; mod enter_fullscreen; mod helpers; mod mouse; From 5b19bcf6f09556aa60c3275c278c7b24cbfd7c86 Mon Sep 17 00:00:00 2001 From: whackur Date: Sat, 31 Oct 2026 23:01:04 +0900 Subject: [PATCH 12/13] fix(tui): prioritize input and ignore hidden-project redraws --- docs/architecture/ui.md | 4 +- src/application/event_loop.rs | 154 +++++++---------- src/application/event_loop_tests.rs | 192 ++++++++++++++++++++++ src/application/input/events.rs | 73 ++++++++ src/application/input/mod.rs | 2 + src/application/input/ready.rs | 52 ++++++ src/application/input/ready_tests.rs | 96 +++++++++++ src/application/redraw.rs | 149 ++--------------- src/application/redraw_tests.rs | 141 ++++++++++++++++ src/application/tests/mod.rs | 2 + src/application/tests/redraw_benchmark.rs | 33 +--- 11 files changed, 649 insertions(+), 249 deletions(-) create mode 100644 src/application/event_loop_tests.rs create mode 100644 src/application/input/events.rs create mode 100644 src/application/input/ready.rs create mode 100644 src/application/input/ready_tests.rs create mode 100644 src/application/redraw_tests.rs diff --git a/docs/architecture/ui.md b/docs/architecture/ui.md index 734bd080..076769d0 100644 --- a/docs/architecture/ui.md +++ b/docs/architecture/ui.md @@ -24,7 +24,9 @@ TUI workspace state is saved in `~/.nightcrow/workspace.json`. It records open p `ui::chrome::chrome_areas` always creates four areas: project tabs, body, notice, and hint. Notice and hint occupy the bottom two rows (`bottom_rows`) regardless of layout. According to `[layout] tabs`, project tabs use either the first row above them (`top`) or the left `STRIP_WIDTH` (20) columns (`left`); the body uses the remaining area. The TUI layout config determines the body's upper/lower split, and terminal pane rectangles use the single geometry source described in [terminal.md](terminal.md). Notices and dialogs do not add or remove rows. -Input, PTY output, snapshot/load results, tree watch, resize, recovery, and title changes request a dirty frame. The event loop polls queues every 16 ms but does not call `Terminal::draw` on unchanged ticks. ` r` explicitly requests ownership, resends current geometry, clears the front buffer, and performs a full repaint. Status hot-file fades and attention/search caret boundaries also dirty a frame on timer events. Opening repo input keeps the notice-row side borders fixed while showing two accent/dim pulses, then remains dim. This focus cue repaints only at phase boundaries and schedules no timer after it finishes. +After session synchronization, terminal events drain for every project before ready input is routed. This adopts confirmed pane lifecycle and size changes before the next event reaches a pane, and continues applying hidden-project output to each client's emulator. Only terminal changes for the visible project request a body repaint; hidden terminal and Git results still update local state while their bodies stay out of view. Tab attention is compared per project, so every changed unread badge requests a repaint even while another tab remains unread. + +Each tick dispatches one ready source event before rendering on Unix. On Windows, it dispatches the single event after the existing bounded paste-burst coalescer has classified that event; it does not group additional source events into the same tick. Git, snapshot, and tree queues are drained after input and before rendering. Mouse hit-testing reads the current terminal size and rebuilds tab, dialog, and help snapshots for each mouse event. Pane geometry and render snapshots are recomputed after input state changes. The event loop waits for up to 16 ms at the end of an idle tick; Windows paste coalescing retains its existing burst timing and size bounds. The terminal backend skips an empty cell diff, repeated cursor visibility or position commands, and a flush with no pending output. ` r` explicitly requests ownership, resends current geometry, clears the front buffer, and performs a full repaint. Status hot-file fades and attention/search caret boundaries also dirty a frame on timer events. Opening repo input keeps the notice-row side borders fixed while showing two accent/dim pulses, then remains dim. This focus cue repaints only at phase boundaries and schedules no timer after it finishes. ## Notice row diff --git a/src/application/event_loop.rs b/src/application/event_loop.rs index 73ae4d98..5921fefb 100644 --- a/src/application/event_loop.rs +++ b/src/application/event_loop.rs @@ -1,7 +1,7 @@ +use crate::application::input::dispatch::KeyOutcome; pub(crate) use crate::application::input::dispatch::ProjectContext; -use crate::application::input::dispatch::{KeyOutcome, dispatch_key}; -use crate::application::input::mouse::dispatch_mouse; -use crate::application::input::paste::dispatch_paste; +use crate::application::input::events::dispatch_input_event; +use crate::application::input::ready::{InputControl, process_ready_input}; use crate::application::redraw::{RedrawCause, RedrawState}; use crate::application::session_link::SessionLink; use crate::application::size_activity::claim_for_user_activity; @@ -42,14 +42,35 @@ pub(crate) fn main_loop( reattach with `nightcrow attach`" ); } - // Every project drains its queues, not just the visible one: the - // snapshot worker and PTY reader keep producing regardless of which - // tab is on screen. Only the active project - // *applies* its snapshot, though — a background one waits in - // `pending_snapshot` until its tab is shown. + // Pane lifecycle and resize confirmations must precede the next input. + poll_terminals_before_input(ws, &mut redraw); + + let progress = process_ready_input(read_ready_event, expand_input_event, |event| { + claim_for_user_activity(ws, &event); + let outcome = + dispatch_input_event(terminal, ws, cfg, event, &mut redraw, blink_started)?; + if let Some(outcome) = outcome { + let force_redraw = matches!(outcome, KeyOutcome::Redraw); + if apply_outcome(terminal, ws, &mut link, outcome)? { + return Ok(InputControl::Quit); + } + if force_redraw { + redraw.request(RedrawCause::Redraw); + } + } + Ok(InputControl::Continue) + })?; + if progress.quit { + return Ok(()); + } let active = ws.active_index(); + // Every project drains its queues, not just the visible one: the + // snapshot worker keeps producing regardless of which tab is on + // screen. Terminal events were already drained before input; only the + // active project applies its snapshot, while hidden ones wait in + // `pending_snapshot` until shown. for (i, project) in ws.projects_mut().iter_mut().enumerate() { - if project.poll_git_loads() { + if project.poll_git_loads() && i == active { redraw.request(RedrawCause::Git); } if i == active { @@ -65,10 +86,9 @@ pub(crate) fn main_loop( } else { project.drain_snapshot(); } - // Cheap drains that must run everywhere: the tree watcher so OS - // filesystem events do not pile up, the terminal so PTY output is - // consumed before the pipe fills and blocks the child. Acting on a - // watcher event is active-only; a hidden project records the event. + // Cheap drains that must run everywhere: the tree watcher keeps OS + // filesystem events from piling up. Acting on a watcher event is + // active-only; a hidden project records the event. if i == active { if project.poll_tree_watcher() { redraw.request(RedrawCause::Tree); @@ -76,14 +96,7 @@ pub(crate) fn main_loop( } else { project.drain_tree_watcher(); } - if project.poll_terminal() { - redraw.request(RedrawCause::Terminal); - } } - // Project-tab attention is client-local and means "not seen on this - // screen". The project in front has just consumed its terminal events, - // so everything through this tick is visible and acknowledged. - ws.acknowledge_active_attention(); let size = terminal.size()?; let screen = Rect::new(0, 0, size.width, size.height); @@ -112,9 +125,8 @@ pub(crate) fn main_loop( .iter() .map(|project| project.terminal.has_unread_attention()) .collect(); - let has_attention = tab_attention.iter().any(|attention| *attention); let attention_bright = crate::ui::project_tab::blink_is_bright(blink_started.elapsed()); - redraw.observe_attention(has_attention, attention_bright); + redraw.observe_attention(&tab_attention, attention_bright); let now = SystemTime::now(); let hot_deadline = ws .active() @@ -162,78 +174,38 @@ pub(crate) fn main_loop( })?; } - // `tabs` above borrows the workspace for the draw; input needs it - // mutably, so rebuild the same view over a snapshot of the dialog. - // Only the buffer is copied here; the frame itself may be skipped when - // no state or visual clock phase changed. - let repo_input = ws.repo_input.clone(); - let help_snapshot = ws.help.clone(); - let tabs = crate::ui::Chrome { - repo_paths: &tab_paths, - attention: &tab_attention, - attention_bright, - active: active_tab, - repo_input: &repo_input, - help: &help_snapshot, - strip: cfg.layout.tabs, - }; - - // 16 ms ≈ 60 fps is only the polling latency cap. Unlike the old frame - // clock, an idle tick does not draw; the wait lets asynchronous PTY and - // watcher results be noticed without keeping a terminal frame alive. - if event::poll(Duration::from_millis(16))? { - let first = event::read()?; - // Unix gets a real `Event::Paste` from crossterm; Windows never - // does, so a paste burst is drained and rewritten into one here - // (`input::burst`) for the same arm below to route. - #[cfg(windows)] - let events = crate::application::input::burst::coalesce_paste(first)?; - #[cfg(not(windows))] - let events = [first]; + // Ready input was handled before rendering; this 16 ms wait is only + // the idle latency cap between source events. + event::poll(Duration::from_millis(16))?; + } +} - for event in events { - claim_for_user_activity(ws, &event); - match event { - // Ratatui's next draw will pick up the new size from - // `Frame::area()`. An explicit clear() here only adds a - // visible flash on resize without improving correctness. - Event::Resize(_, _) => redraw.request(RedrawCause::Resize), - Event::Key(key) => { - let pressed = key.kind == crossterm::event::KeyEventKind::Press; - if pressed { - redraw.request(RedrawCause::Input); - } - let outcome = dispatch_key(ws, key); - let force_redraw = matches!(outcome, KeyOutcome::Redraw); - if apply_outcome(terminal, ws, &mut link, outcome)? { - return Ok(()); - } - if force_redraw { - redraw.request(RedrawCause::Redraw); - } - } - Event::Paste(text) => { - redraw.request(RedrawCause::Input); - dispatch_paste(ws, &text); - } - Event::Mouse(mouse) => { - redraw.request(RedrawCause::Input); - let screen = Rect::new(0, 0, size.width, size.height); - let outcome = - dispatch_mouse(ws, tabs, mouse, screen, &cfg.layout, cfg.mouse.enabled); - let force_redraw = matches!(outcome, KeyOutcome::Redraw); - if apply_outcome(terminal, ws, &mut link, outcome)? { - return Ok(()); - } - if force_redraw { - redraw.request(RedrawCause::Redraw); - } - } - _ => redraw.request(RedrawCause::Input), - } - } +pub(crate) fn poll_terminals_before_input(ws: &mut Workspace, redraw: &mut RedrawState) { + let active = ws.active_index(); + for (i, project) in ws.projects_mut().iter_mut().enumerate() { + if project.poll_terminal() && i == active { + redraw.request(RedrawCause::Terminal); } } + ws.acknowledge_active_attention(); +} + +fn read_ready_event() -> anyhow::Result> { + if event::poll(Duration::ZERO)? { + return Ok(Some(event::read()?)); + } + Ok(None) +} + +fn expand_input_event(first: Event) -> anyhow::Result> { + #[cfg(windows)] + { + Ok(crate::application::input::burst::coalesce_paste(first)?) + } + #[cfg(not(windows))] + { + Ok(vec![first]) + } } /// Track physical screen changes for redraw. Geometry changes do not claim diff --git a/src/application/event_loop_tests.rs b/src/application/event_loop_tests.rs new file mode 100644 index 00000000..2a328bd9 --- /dev/null +++ b/src/application/event_loop_tests.rs @@ -0,0 +1,192 @@ +use crate::app::Focus; +use crate::application::event_loop::poll_terminals_before_input; +use crate::application::input::dispatch::KeyOutcome; +use crate::application::input::events::dispatch_input_event; +use crate::application::input::ready::{InputControl, process_ready_input}; +use crate::application::redraw::RedrawState; +use crate::config::Config; +use crate::runtime::terminal::TerminalState; +use crate::test_util::FakeBackend; +use crate::workspace::Workspace; +use crossterm::event::{ + Event, KeyCode, KeyEvent, KeyModifiers, MouseButton, MouseEvent, MouseEventKind, +}; +use ratatui::Terminal; +use ratatui::backend::TestBackend; +use ratatui::layout::Rect; +use std::time::Instant; + +fn leader() -> Event { + Event::Key(KeyEvent::new(KeyCode::Char('f'), KeyModifiers::CONTROL)) +} + +fn leader_key() -> KeyEvent { + KeyEvent::new(KeyCode::Char('f'), KeyModifiers::CONTROL) +} + +fn key(c: char) -> Event { + Event::Key(KeyEvent::new(KeyCode::Char(c), KeyModifiers::NONE)) +} + +fn tick_input( + terminal: &Terminal, + workspace: &mut Workspace, + cfg: &Config, + event: Event, + redraw: &mut RedrawState, +) -> anyhow::Result<()> { + poll_terminals_before_input(workspace, redraw); + let mut ready = Some(event); + let progress = process_ready_input( + || Ok(ready.take()), + |event| Ok(vec![event]), + |event| { + let outcome = + dispatch_input_event(terminal, workspace, cfg, event, redraw, Instant::now())?; + assert!(matches!(outcome, Some(KeyOutcome::Continue))); + Ok(InputControl::Continue) + }, + )?; + assert_eq!(progress.processed, 1); + Ok(()) +} + +#[test] +fn confirmed_pane_creation_is_polled_before_the_next_unix_input_event() { + let mut app = crate::app::tests::app_with_fake_backend(); + app.terminal.create_pane_now().unwrap(); + app.poll_terminal(); + let mut workspace = Workspace::new(leader_key()); + workspace.add(app); + let cfg = Config::default(); + let terminal = Terminal::new(TestBackend::new(80, 24)).unwrap(); + let mut redraw = RedrawState::new(); + let first_pane = workspace.active().unwrap().terminal.active_pane_id(); + + tick_input(&terminal, &mut workspace, &cfg, leader(), &mut redraw).unwrap(); + tick_input(&terminal, &mut workspace, &cfg, key('t'), &mut redraw).unwrap(); + assert_eq!(workspace.active().unwrap().terminal.panes.len(), 1); + + tick_input(&terminal, &mut workspace, &cfg, key('x'), &mut redraw).unwrap(); + + let app = workspace.active().unwrap(); + assert_eq!(app.terminal.panes.len(), 2); + assert_ne!(app.terminal.active_pane_id(), first_pane); + assert_eq!(app.terminal.fake_backend_sent().unwrap(), vec![vec![b'x']]); +} + +#[test] +fn hidden_terminal_output_is_consumed_without_body_repaint_until_badge_changes() { + let mut active = crate::app::tests::app_with_files(vec![]); + active.focus = Focus::Terminal; + let mut hidden = crate::app::tests::app_with_files(vec![]); + let backend = FakeBackend::default(); + let events = backend.pending_events.clone(); + hidden.terminal = TerminalState::new(Some(Box::new(backend)), false); + hidden.terminal.create_pane().unwrap(); + events.borrow_mut().extend([ + crate::backend::BackendEvent::Output { + pane: 1, + data: b"hidden output".to_vec(), + }, + crate::backend::BackendEvent::Attention { pane: 1 }, + ]); + let mut workspace = Workspace::new(leader_key()); + workspace.add(active); + workspace.add(hidden); + workspace.switch(0); + let mut redraw = RedrawState::new(); + redraw.take(); + + poll_terminals_before_input(&mut workspace, &mut redraw); + + assert!( + !redraw.take(), + "hidden output must not repaint the active body" + ); + let hidden = &workspace.projects()[1]; + let mut first_cell = String::new(); + hidden + .terminal + .screen_for_pane(1) + .unwrap() + .cell(0, 0) + .unwrap() + .append_contents(&mut first_cell); + assert_eq!(first_cell, "h", "hidden output still updates the emulator"); + assert!(hidden.terminal.has_unread_attention()); + let attention = [false, true]; + redraw.observe_attention(&attention, true); + assert!(redraw.take(), "the new unread badge must repaint the tabs"); + + events + .borrow_mut() + .push(crate::backend::BackendEvent::Output { + pane: 1, + data: b" again".to_vec(), + }); + poll_terminals_before_input(&mut workspace, &mut redraw); + redraw.observe_attention(&attention, true); + assert!( + !redraw.take(), + "more hidden bytes do not repaint a stable badge" + ); +} + +#[test] +fn mouse_hit_testing_uses_the_post_resize_terminal_size() { + let mut app = crate::app::tests::app_with_fake_backend(); + app.terminal.create_pane_now().unwrap(); + app.terminal.create_pane_now().unwrap(); + app.poll_terminal(); + app.focus = Focus::Terminal; + app.terminal.active = 1; + let target = app.terminal.panes[0].id; + let cfg = Config::default(); + let old_screen = Rect::new(0, 0, 100, 40); + let new_screen = Rect::new(0, 0, 50, 20); + let point = (0..new_screen.height) + .flat_map(|y| (0..new_screen.width).map(move |x| (x, y))) + .find(|&(x, y)| { + crate::ui::pane_at(&app, new_screen, &cfg.layout, x, y) + .is_some_and(|(pane, _)| pane == target) + && !crate::ui::pane_at(&app, old_screen, &cfg.layout, x, y) + .is_some_and(|(pane, _)| pane == target) + }) + .expect("resize changes the target pane hit area"); + let mut workspace = Workspace::new(leader_key()); + workspace.add(app); + let mut terminal = Terminal::new(TestBackend::new(100, 40)).unwrap(); + terminal.backend_mut().resize(50, 20); + let mut redraw = RedrawState::new(); + let now = Instant::now(); + + dispatch_input_event( + &terminal, + &mut workspace, + &cfg, + Event::Resize(50, 20), + &mut redraw, + now, + ) + .unwrap(); + dispatch_input_event( + &terminal, + &mut workspace, + &cfg, + Event::Mouse(MouseEvent { + kind: MouseEventKind::Down(MouseButton::Left), + column: point.0, + row: point.1, + modifiers: KeyModifiers::NONE, + }), + &mut redraw, + now, + ) + .unwrap(); + + assert_eq!( + workspace.active().unwrap().terminal.active_pane_id(), + Some(target) + ); +} diff --git a/src/application/input/events.rs b/src/application/input/events.rs new file mode 100644 index 00000000..baac717a --- /dev/null +++ b/src/application/input/events.rs @@ -0,0 +1,73 @@ +use crate::application::input::dispatch::{KeyOutcome, dispatch_key}; +use crate::application::input::mouse::dispatch_mouse; +use crate::application::input::paste::dispatch_paste; +use crate::application::redraw::{RedrawCause, RedrawState}; +use crate::config::Config; +use crate::workspace::Workspace; +use crossterm::event::{Event, KeyEventKind}; +use ratatui::backend::Backend; +use ratatui::{Terminal, layout::Rect}; +use std::time::Instant; + +pub(crate) fn dispatch_input_event( + terminal: &Terminal, + ws: &mut Workspace, + cfg: &Config, + event: Event, + redraw: &mut RedrawState, + blink_started: Instant, +) -> anyhow::Result> +where + B::Error: Send + Sync + 'static, +{ + let outcome = match event { + Event::Resize(_, _) => { + redraw.request(RedrawCause::Resize); + None + } + Event::Key(key) => { + if key.kind == KeyEventKind::Press { + redraw.request(RedrawCause::Input); + } + Some(dispatch_key(ws, key)) + } + Event::Paste(text) => { + redraw.request(RedrawCause::Input); + dispatch_paste(ws, &text); + None + } + Event::Mouse(mouse) => { + redraw.request(RedrawCause::Input); + let size = terminal.size()?; + let screen = Rect::new(0, 0, size.width, size.height); + let tab_paths: Vec = ws + .projects() + .iter() + .map(|project| project.repository_path().to_string()) + .collect(); + let tab_attention: Vec = ws + .projects() + .iter() + .map(|project| project.terminal.has_unread_attention()) + .collect(); + let repo_input = ws.repo_input.clone(); + let help = ws.help.clone(); + let tabs = crate::ui::Chrome { + repo_paths: &tab_paths, + attention: &tab_attention, + attention_bright: crate::ui::project_tab::blink_is_bright(blink_started.elapsed()), + active: ws.active_index(), + repo_input: &repo_input, + help: &help, + strip: cfg.layout.tabs, + }; + let outcome = dispatch_mouse(ws, tabs, mouse, screen, &cfg.layout, cfg.mouse.enabled); + Some(outcome) + } + _ => { + redraw.request(RedrawCause::Input); + None + } + }; + Ok(outcome) +} diff --git a/src/application/input/mod.rs b/src/application/input/mod.rs index 6824c679..ff53ea79 100644 --- a/src/application/input/mod.rs +++ b/src/application/input/mod.rs @@ -2,9 +2,11 @@ pub(crate) mod burst; pub(crate) mod dispatch; +pub(crate) mod events; mod handlers; mod help; pub(crate) mod mouse; pub(crate) mod paste; mod prefix; +pub(crate) mod ready; mod repo_dialog; diff --git a/src/application/input/ready.rs b/src/application/input/ready.rs new file mode 100644 index 00000000..ea6b0e6b --- /dev/null +++ b/src/application/input/ready.rs @@ -0,0 +1,52 @@ +use crossterm::event::Event; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub(crate) enum InputControl { + Continue, + Quit, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub(crate) struct InputProgress { + pub(crate) processed: usize, + pub(crate) quit: bool, +} + +/// Dispatch one source event per tick, preserving crossterm's Unix event +/// boundary and one Windows paste-coalesced batch. +pub(crate) fn process_ready_input( + mut read_ready: impl FnMut() -> anyhow::Result>, + mut expand: impl FnMut(Event) -> anyhow::Result>, + mut dispatch: impl FnMut(Event) -> anyhow::Result, +) -> anyhow::Result { + let Some(first) = read_ready()? else { + return Ok(InputProgress { + processed: 0, + quit: false, + }); + }; + let events = expand(first)?; + anyhow::ensure!( + !events.is_empty(), + "input expansion discarded a consumed event" + ); + + let mut processed = 0; + for event in events { + processed += 1; + if dispatch(event)? == InputControl::Quit { + return Ok(InputProgress { + processed, + quit: true, + }); + } + } + Ok(InputProgress { + processed, + quit: false, + }) +} + +#[cfg(test)] +#[path = "ready_tests.rs"] +mod tests; diff --git a/src/application/input/ready_tests.rs b/src/application/input/ready_tests.rs new file mode 100644 index 00000000..8a6bf16b --- /dev/null +++ b/src/application/input/ready_tests.rs @@ -0,0 +1,96 @@ +use super::{InputControl, process_ready_input}; +use crossterm::event::{Event, KeyCode, KeyEvent, KeyModifiers}; +use std::collections::VecDeque; + +fn key(c: char) -> Event { + Event::Key(KeyEvent::new(KeyCode::Char(c), KeyModifiers::NONE)) +} + +#[test] +fn each_tick_reads_one_source_event_and_dispatches_its_expansion_in_order() { + let mut incoming = VecDeque::from([Event::FocusGained, Event::FocusLost]); + let mut reads = 0; + let mut seen = Vec::new(); + let first = process_ready_input( + || { + reads += 1; + Ok(incoming.pop_front()) + }, + |_| Ok((0u8..65).map(|n| key(char::from(b'a' + n))).collect()), + |event| { + let Event::Key(key) = event else { + unreachable!() + }; + let KeyCode::Char(c) = key.code else { + unreachable!() + }; + seen.push(c); + Ok(InputControl::Continue) + }, + ) + .unwrap(); + assert_eq!(first.processed, 65); + assert!(!first.quit); + assert_eq!(reads, 1, "a tick must not aggregate later source events"); + assert_eq!(seen[0], 'a'); + assert_eq!(seen[64], char::from(b'a' + 64)); + + let second = process_ready_input( + || { + reads += 1; + Ok(incoming.pop_front()) + }, + |event| Ok(vec![event]), + |event| { + assert!(matches!(event, Event::FocusLost)); + Ok(InputControl::Continue) + }, + ) + .unwrap(); + assert_eq!(second.processed, 1); + assert_eq!(reads, 2); +} + +#[test] +fn a_quit_in_a_coalesced_batch_stops_dispatching_following_events() { + let mut incoming = VecDeque::from([Event::FocusGained]); + let mut seen = Vec::new(); + let progress = process_ready_input( + || Ok(incoming.pop_front()), + |_| Ok(vec![key('q'), key('x')]), + |event| { + let Event::Key(key) = event else { + unreachable!() + }; + let KeyCode::Char(c) = key.code else { + unreachable!() + }; + seen.push(c); + Ok(if c == 'q' { + InputControl::Quit + } else { + InputControl::Continue + }) + }, + ) + .unwrap(); + assert_eq!(progress.processed, 1); + assert!(progress.quit); + assert_eq!(seen, ['q']); +} + +#[test] +fn an_empty_ready_source_returns_without_waiting_for_an_event() { + let mut reads = 0; + let progress = process_ready_input( + || { + reads += 1; + Ok(None) + }, + |event| Ok(vec![event]), + |_| panic!("no event was ready"), + ) + .unwrap(); + assert_eq!(progress.processed, 0); + assert_eq!(reads, 1); +} diff --git a/src/application/redraw.rs b/src/application/redraw.rs index 90382078..9b01ec99 100644 --- a/src/application/redraw.rs +++ b/src/application/redraw.rs @@ -30,6 +30,7 @@ pub(crate) struct RedrawState { dirty: bool, screen: Option<(u16, u16)>, attention_phase: Option, + attention_state: Option>, caret_phase: Option, hot_observed: bool, hot_deadline: Option, @@ -59,10 +60,21 @@ impl RedrawState { changed } - pub(crate) fn observe_attention(&mut self, has_attention: bool, bright: bool) { + pub(crate) fn observe_attention(&mut self, attention: &[bool], bright: bool) { + let state_changed = self + .attention_state + .as_deref() + .is_some_and(|previous| previous != attention); + if self.attention_state.as_deref() != Some(attention) { + self.attention_state = Some(attention.to_vec()); + } + let has_attention = attention.iter().any(|attention| *attention); let phase = has_attention.then_some(bright); - if self.attention_phase != phase { + let phase_changed = self.attention_phase != phase; + if phase_changed { self.attention_phase = phase; + } + if state_changed || phase_changed { self.request(RedrawCause::AttentionBlink); } } @@ -107,134 +119,5 @@ impl RedrawState { } #[cfg(test)] -mod tests { - use super::{RedrawCause, RedrawState}; - use std::time::SystemTime; - - #[test] - fn initial_state_draws_once_then_stays_clean() { - let mut state = RedrawState::new(); - - assert!(state.take()); - assert!(!state.take()); - } - - #[test] - fn every_external_cause_marks_the_next_frame_dirty() { - let causes = [ - RedrawCause::Terminal, - RedrawCause::Input, - RedrawCause::Resize, - RedrawCause::Snapshot, - RedrawCause::Tree, - RedrawCause::Git, - RedrawCause::Log, - RedrawCause::HotFile, - RedrawCause::RepoInputFocus, - RedrawCause::Session, - RedrawCause::Redraw, - ]; - - let mut state = RedrawState::new(); - state.take(); - for cause in causes { - state.request(cause); - assert!(state.take(), "{cause:?} must repaint"); - assert!(!state.is_dirty()); - } - } - - #[test] - fn screen_change_is_dirty_but_same_size_is_idle() { - let mut state = RedrawState::new(); - state.take(); - - assert!(!state.observe_screen(0, 0)); - assert!(!state.observe_screen(100, 40)); - assert!(state.take()); - assert!(!state.observe_screen(100, 40)); - assert!(!state.take()); - assert!(!state.observe_screen(0, 40)); - assert!(!state.observe_screen(100, 40)); - assert!(!state.take()); - assert!(state.observe_screen(101, 40)); - assert!(state.take()); - } - - #[test] - fn attention_and_caret_only_repaint_when_their_visible_phase_changes() { - let mut state = RedrawState::new(); - state.take(); - - state.observe_attention(true, true); - assert!(state.take()); - state.observe_attention(true, true); - assert!(!state.take()); - state.observe_attention(true, false); - assert!(state.take()); - state.observe_attention(false, true); - assert!(state.take()); - - state.observe_caret(true, true); - assert!(state.take()); - state.observe_caret(true, true); - assert!(!state.take()); - state.observe_caret(true, false); - assert!(state.take()); - state.observe_caret(false, true); - assert!(state.take()); - } - - #[test] - fn hot_deadline_dirties_exactly_once_at_each_stage_boundary() { - let mut state = RedrawState::new(); - state.take(); - let start = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(100); - let fresh_to_warm = start + std::time::Duration::from_secs(5); - let warm_to_cool = start + std::time::Duration::from_secs(15); - - state.observe_hot_deadline(Some(fresh_to_warm), start); - assert!(!state.take()); - state.observe_hot_deadline(Some(warm_to_cool), fresh_to_warm); - assert!(state.take()); - state.observe_hot_deadline(Some(warm_to_cool), fresh_to_warm); - assert!(!state.take()); - state.observe_hot_deadline(None, warm_to_cool); - assert!(state.take()); - state.observe_hot_deadline(None, warm_to_cool); - assert!(!state.take()); - } - - #[test] - fn hot_deadline_rollback_from_cool_to_fresh_dirties_exactly_once() { - let mut state = RedrawState::new(); - state.take(); - let cool_now = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(120); - let rolled_back_now = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(100); - let fresh_to_warm = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(105); - - state.observe_hot_deadline(None, cool_now); - assert!(!state.take()); - state.observe_hot_deadline(Some(fresh_to_warm), rolled_back_now); - assert!(state.take(), "cool-to-fresh rollback must repaint"); - state.observe_hot_deadline(Some(fresh_to_warm), rolled_back_now); - assert!(!state.take(), "the synchronized phase must stay idle"); - } - - #[test] - fn hot_deadline_rollback_from_warm_to_fresh_dirties_exactly_once() { - let mut state = RedrawState::new(); - state.take(); - let warm_now = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(110); - let warm_to_cool = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(115); - let rolled_back_now = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(102); - let fresh_to_warm = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(105); - - state.observe_hot_deadline(Some(warm_to_cool), warm_now); - assert!(!state.take()); - state.observe_hot_deadline(Some(fresh_to_warm), rolled_back_now); - assert!(state.take(), "warm-to-fresh rollback must repaint"); - state.observe_hot_deadline(Some(fresh_to_warm), rolled_back_now); - assert!(!state.take(), "the synchronized phase must stay idle"); - } -} +#[path = "redraw_tests.rs"] +mod tests; diff --git a/src/application/redraw_tests.rs b/src/application/redraw_tests.rs new file mode 100644 index 00000000..5ce5592e --- /dev/null +++ b/src/application/redraw_tests.rs @@ -0,0 +1,141 @@ +use super::{RedrawCause, RedrawState}; +use std::time::SystemTime; + +#[test] +fn initial_state_draws_once_then_stays_clean() { + let mut state = RedrawState::new(); + + assert!(state.take()); + assert!(!state.take()); +} + +#[test] +fn every_external_cause_marks_the_next_frame_dirty() { + let causes = [ + RedrawCause::Terminal, + RedrawCause::Input, + RedrawCause::Resize, + RedrawCause::Snapshot, + RedrawCause::Tree, + RedrawCause::Git, + RedrawCause::Log, + RedrawCause::HotFile, + RedrawCause::RepoInputFocus, + RedrawCause::Session, + RedrawCause::Redraw, + ]; + + let mut state = RedrawState::new(); + state.take(); + for cause in causes { + state.request(cause); + assert!(state.take(), "{cause:?} must repaint"); + assert!(!state.is_dirty()); + } +} + +#[test] +fn screen_change_is_dirty_but_same_size_is_idle() { + let mut state = RedrawState::new(); + state.take(); + + assert!(!state.observe_screen(0, 0)); + assert!(!state.observe_screen(100, 40)); + assert!(state.take()); + assert!(!state.observe_screen(100, 40)); + assert!(!state.take()); + assert!(!state.observe_screen(0, 40)); + assert!(!state.observe_screen(100, 40)); + assert!(!state.take()); + assert!(state.observe_screen(101, 40)); + assert!(state.take()); +} + +#[test] +fn attention_and_caret_only_repaint_when_their_visible_phase_changes() { + let mut state = RedrawState::new(); + state.take(); + + state.observe_attention(&[true], true); + assert!(state.take()); + state.observe_attention(&[true], true); + assert!(!state.take()); + state.observe_attention(&[true], false); + assert!(state.take()); + state.observe_attention(&[false], true); + assert!(state.take()); + + state.observe_caret(true, true); + assert!(state.take()); + state.observe_caret(true, true); + assert!(!state.take()); + state.observe_caret(true, false); + assert!(state.take()); + state.observe_caret(false, true); + assert!(state.take()); +} + +#[test] +fn switching_between_unread_tabs_repaints_the_changed_badge() { + let mut state = RedrawState::new(); + state.take(); + state.observe_attention(&[true, false], true); + assert!(state.take()); + state.observe_attention(&[false, true], true); + assert!(state.take()); + state.observe_attention(&[false, true], true); + assert!(!state.take()); +} + +#[test] +fn hot_deadline_dirties_exactly_once_at_each_stage_boundary() { + let mut state = RedrawState::new(); + state.take(); + let start = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(100); + let fresh_to_warm = start + std::time::Duration::from_secs(5); + let warm_to_cool = start + std::time::Duration::from_secs(15); + + state.observe_hot_deadline(Some(fresh_to_warm), start); + assert!(!state.take()); + state.observe_hot_deadline(Some(warm_to_cool), fresh_to_warm); + assert!(state.take()); + state.observe_hot_deadline(Some(warm_to_cool), fresh_to_warm); + assert!(!state.take()); + state.observe_hot_deadline(None, warm_to_cool); + assert!(state.take()); + state.observe_hot_deadline(None, warm_to_cool); + assert!(!state.take()); +} + +#[test] +fn hot_deadline_rollback_from_cool_to_fresh_dirties_exactly_once() { + let mut state = RedrawState::new(); + state.take(); + let cool_now = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(120); + let rolled_back_now = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(100); + let fresh_to_warm = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(105); + + state.observe_hot_deadline(None, cool_now); + assert!(!state.take()); + state.observe_hot_deadline(Some(fresh_to_warm), rolled_back_now); + assert!(state.take(), "cool-to-fresh rollback must repaint"); + state.observe_hot_deadline(Some(fresh_to_warm), rolled_back_now); + assert!(!state.take(), "the synchronized phase must stay idle"); +} + +#[test] +fn hot_deadline_rollback_from_warm_to_fresh_dirties_exactly_once() { + let mut state = RedrawState::new(); + state.take(); + let warm_now = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(110); + let warm_to_cool = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(115); + let rolled_back_now = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(102); + let fresh_to_warm = SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(105); + + state.observe_hot_deadline(Some(warm_to_cool), warm_now); + assert!(!state.take()); + state.observe_hot_deadline(Some(fresh_to_warm), rolled_back_now); + assert!(state.take(), "warm-to-fresh rollback must repaint"); + state.observe_hot_deadline(Some(fresh_to_warm), rolled_back_now); + assert!(!state.take(), "the synchronized phase must stay idle"); +} diff --git a/src/application/tests/mod.rs b/src/application/tests/mod.rs index 2394ac92..604e3649 100644 --- a/src/application/tests/mod.rs +++ b/src/application/tests/mod.rs @@ -1,6 +1,8 @@ mod accent; mod draw_backend; mod enter_fullscreen; +#[path = "../event_loop_tests.rs"] +mod event_loop; mod helpers; mod mouse; mod mouse_clicks; diff --git a/src/application/tests/redraw_benchmark.rs b/src/application/tests/redraw_benchmark.rs index e1a97e39..93abd1fc 100644 --- a/src/application/tests/redraw_benchmark.rs +++ b/src/application/tests/redraw_benchmark.rs @@ -1,4 +1,4 @@ -//! Release-only measurements for the dirty-frame event loop. +//! Release-only measurements for dirty-frame gating and PTY echo observation. //! //! Run explicitly because the PTY half starts a real shell: //! @@ -15,7 +15,8 @@ use ratatui::{Terminal, backend::TestBackend, widgets::Paragraph}; use std::time::{Duration, Instant}; const TICKS: usize = 600; -const TICK: Duration = Duration::from_millis(16); +#[cfg(unix)] +const PTY_SAMPLE_INTERVAL: Duration = Duration::from_millis(16); #[cfg(unix)] const PTY_SAMPLES: usize = 20; #[cfg(unix)] @@ -64,20 +65,13 @@ fn run_dirty(ticks: usize, event_every: Option) -> DrawRun { } } +#[cfg(unix)] fn p95(mut samples: Vec) -> Duration { samples.sort_unstable(); let rank = (samples.len() * 95).div_ceil(100).saturating_sub(1); samples[rank] } -/// Events arrive after the current frame's draw in `main_loop`, so the next -/// frame is bounded by one input-poll interval. Keep this virtual measurement -/// beside the real PTY sample to make the latency claim explicit and stable. -fn simulated_event_latency_p95(ticks: usize, event_every: usize) -> Duration { - let samples = (0..ticks).step_by(event_every).map(|_| TICK).collect(); - p95(samples) -} - #[cfg(unix)] fn pty_command(marker: &str) -> Vec { format!("printf '{marker}\\n'\n").into_bytes() @@ -94,7 +88,7 @@ fn measure_pty_echo() -> Vec { let warmup_deadline = Instant::now() + Duration::from_millis(250); while Instant::now() < warmup_deadline { let _ = backend.drain_events(); - std::thread::sleep(TICK); + std::thread::sleep(PTY_SAMPLE_INTERVAL); } let mut samples = Vec::with_capacity(PTY_SAMPLES); @@ -125,7 +119,7 @@ fn measure_pty_echo() -> Vec { if seen { break; } - std::thread::sleep(TICK); + std::thread::sleep(PTY_SAMPLE_INTERVAL); } assert!( seen, @@ -144,9 +138,6 @@ fn measure_dirty_redraw() { let idle = run_dirty(TICKS, None); let heartbeat = run_dirty(TICKS, Some(60)); let active = run_dirty(TICKS, Some(1)); - let before_latency = simulated_event_latency_p95(TICKS, 1); - let after_latency = simulated_event_latency_p95(TICKS, 1); - assert_eq!(idle.draws, 1, "idle should retain only the initial frame"); assert_eq!(heartbeat.draws, TICKS / 60, "one heartbeat per second"); assert_eq!( @@ -165,22 +156,16 @@ fn measure_dirty_redraw() { heartbeat.elapsed.as_secs_f64() * 1000.0, active.elapsed.as_secs_f64() * 1000.0 ); - println!( - "event-to-next-frame-p95-ms: before={:.3} after={:.3} (poll cap {:?})", - before_latency.as_secs_f64() * 1000.0, - after_latency.as_secs_f64() * 1000.0, - TICK - ); #[cfg(unix)] { let echo = measure_pty_echo(); println!( - "pty-echo-p95-ms: {:.3} ({} samples; poll cap {:?})", + "pty-echo-observed-p95-ms: {:.3} ({} samples; poll interval {:?})", p95(echo).as_secs_f64() * 1000.0, PTY_SAMPLES, - TICK + PTY_SAMPLE_INTERVAL ); } #[cfg(not(unix))] - println!("pty-echo-p95-ms: unavailable (headless Windows ConPTY)"); + println!("pty-echo-observed-p95-ms: unavailable (headless Windows ConPTY)"); } From e6342c12f354e20f2625fdc834fdd21bcd42e150 Mon Sep 17 00:00:00 2001 From: whackur Date: Sat, 31 Oct 2026 23:01:46 +0900 Subject: [PATCH 13/13] chore: prepare release v0.1.21 --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- viewer-ui/package-lock.json | 4 ++-- viewer-ui/package.json | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2e24b245..a97ba260 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1496,7 +1496,7 @@ dependencies = [ [[package]] name = "nightcrow" -version = "0.1.20" +version = "0.1.21" dependencies = [ "aes-gcm", "alacritty_terminal", @@ -1537,7 +1537,7 @@ dependencies = [ [[package]] name = "nightcrow-memory" -version = "0.1.20" +version = "0.1.21" dependencies = [ "anyhow", "rusqlite", @@ -1548,7 +1548,7 @@ dependencies = [ [[package]] name = "nightcrow-recovery" -version = "0.1.20" +version = "0.1.21" dependencies = [ "anyhow", "serde", diff --git a/Cargo.toml b/Cargo.toml index 206d090c..d44f4bcb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = [".", "plugins/nightcrow-recovery", "plugins/nightcrow-memory"] # was never built at — a class of drift the release check could only report # after the fact. [workspace.package] -version = "0.1.20" +version = "0.1.21" [package] name = "nightcrow" diff --git a/viewer-ui/package-lock.json b/viewer-ui/package-lock.json index f0971c69..c749fc52 100644 --- a/viewer-ui/package-lock.json +++ b/viewer-ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "nightcrow-viewer-ui", - "version": "0.1.20", + "version": "0.1.21", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nightcrow-viewer-ui", - "version": "0.1.20", + "version": "0.1.21", "dependencies": { "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", diff --git a/viewer-ui/package.json b/viewer-ui/package.json index 6776c42c..f9f805e5 100644 --- a/viewer-ui/package.json +++ b/viewer-ui/package.json @@ -1,7 +1,7 @@ { "name": "nightcrow-viewer-ui", "private": true, - "version": "0.1.20", + "version": "0.1.21", "type": "module", "scripts": { "dev": "vite",