From 1c303a903671b6f01f6ea66952cc6c7f659a5df0 Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Wed, 3 Jun 2026 19:46:10 +0200 Subject: [PATCH 01/13] feat: refactor playground and run views into features --- gno.land/pkg/gnoweb/Makefile | 41 ++- gno.land/pkg/gnoweb/app.go | 4 +- .../pkg/gnoweb/components/view_playground.go | 22 +- gno.land/pkg/gnoweb/components/view_run.go | 23 +- .../gnoweb/feature/playground/component.go | 30 ++ gno.land/pkg/gnoweb/feature/playground/doc.go | 7 + .../pkg/gnoweb/feature/playground/feature.go | 69 ++++ .../frontend}/controller-playground.ts | 18 +- .../playground/frontend/playground.css | 249 ++++++++++++++ .../pkg/gnoweb/feature/playground/handler.go | 238 +++++++++++++ .../playground/handler_test.go} | 106 ++++-- .../gnoweb/feature/playground/ratelimit.go | 99 ++++++ .../pkg/gnoweb/feature/playground/template.go | 22 ++ .../playground/templates/page.html} | 6 +- .../pkg/gnoweb/feature/playground/view.go | 23 ++ gno.land/pkg/gnoweb/feature/run/component.go | 30 ++ gno.land/pkg/gnoweb/feature/run/doc.go | 8 + gno.land/pkg/gnoweb/feature/run/feature.go | 33 ++ .../run/frontend}/controller-run.ts | 26 +- .../pkg/gnoweb/feature/run/frontend/run.css | 62 ++++ gno.land/pkg/gnoweb/feature/run/handler.go | 18 + gno.land/pkg/gnoweb/feature/run/template.go | 21 ++ .../run/templates/page.html} | 16 +- gno.land/pkg/gnoweb/feature/run/view.go | 16 + .../pkg/gnoweb/frontend/css/06-blocks.css | 316 +----------------- gno.land/pkg/gnoweb/frontend/css/main.css | 5 + gno.land/pkg/gnoweb/handler_http.go | 151 +++------ gno.land/pkg/gnoweb/handler_playground.go | 256 -------------- .../gnoweb/public/js/controller-playground.js | 26 +- .../pkg/gnoweb/public/js/controller-run.js | 24 +- gno.land/pkg/gnoweb/public/main.css | 2 +- gno.land/pkg/gnoweb/weburl/url.go | 5 - 32 files changed, 1163 insertions(+), 809 deletions(-) create mode 100644 gno.land/pkg/gnoweb/feature/playground/component.go create mode 100644 gno.land/pkg/gnoweb/feature/playground/doc.go create mode 100644 gno.land/pkg/gnoweb/feature/playground/feature.go rename gno.land/pkg/gnoweb/{frontend/js => feature/playground/frontend}/controller-playground.ts (97%) create mode 100644 gno.land/pkg/gnoweb/feature/playground/frontend/playground.css create mode 100644 gno.land/pkg/gnoweb/feature/playground/handler.go rename gno.land/pkg/gnoweb/{handler_playground_test.go => feature/playground/handler_test.go} (71%) create mode 100644 gno.land/pkg/gnoweb/feature/playground/ratelimit.go create mode 100644 gno.land/pkg/gnoweb/feature/playground/template.go rename gno.land/pkg/gnoweb/{components/views/playground.html => feature/playground/templates/page.html} (96%) create mode 100644 gno.land/pkg/gnoweb/feature/playground/view.go create mode 100644 gno.land/pkg/gnoweb/feature/run/component.go create mode 100644 gno.land/pkg/gnoweb/feature/run/doc.go create mode 100644 gno.land/pkg/gnoweb/feature/run/feature.go rename gno.land/pkg/gnoweb/{frontend/js => feature/run/frontend}/controller-run.ts (87%) create mode 100644 gno.land/pkg/gnoweb/feature/run/frontend/run.css create mode 100644 gno.land/pkg/gnoweb/feature/run/handler.go create mode 100644 gno.land/pkg/gnoweb/feature/run/template.go rename gno.land/pkg/gnoweb/{components/views/run.html => feature/run/templates/page.html} (87%) create mode 100644 gno.land/pkg/gnoweb/feature/run/view.go delete mode 100644 gno.land/pkg/gnoweb/handler_playground.go diff --git a/gno.land/pkg/gnoweb/Makefile b/gno.land/pkg/gnoweb/Makefile index 316418f8b88..bc6d77810d2 100644 --- a/gno.land/pkg/gnoweb/Makefile +++ b/gno.land/pkg/gnoweb/Makefile @@ -20,8 +20,10 @@ biome := $(node_modules)/.bin/biome # css config css_config_path := frontend/css/main.css -# main css config -main_css_files := $(shell find frontend/css -name '*.css') +# main css config — includes per-feature CSS pulled into the Cube CSS Block +# layer via @import from frontend/css/main.css (postcss-import resolves at +# compile time, so the final bundle and layer order are unchanged). +main_css_files := $(shell find frontend/css feature -name '*.css' 2>/dev/null) output_maincss := $(PUBLIC_DIR)/main.css templates_files := $(shell find . -iname '*.html') @@ -35,11 +37,25 @@ output_static := $(patsubst $(src_dir_static)/%, $(out_dir_static)/%, $(input_st # esbuild config src_dir_js := frontend/js out_dir_js := $(PUBLIC_DIR)/js -input_js := $(shell find $(src_dir_js) -name '*.ts') +# Pick up both legacy controllers under frontend/js/ and per-feature +# controllers under feature//frontend/. All compile to +# $(out_dir_js)/.js (flat output, no source-path mirroring). +input_js := $(shell find $(src_dir_js) -name '*.ts') \ + $(shell find feature -path 'feature/*/frontend/*.ts' 2>/dev/null) +# Guard against silent overwrites: two features cannot ship the same +# controller-X.ts basename (they would compile to the same target). +_dup_check := $(shell echo "$(notdir $(input_js))" | tr ' ' '\n' | sort | uniq -d) +ifneq ($(_dup_check),) +$(error duplicate JS controller basenames: $(_dup_check)) +endif # Separate shared and controller files shared_js := $(src_dir_js)/controller.ts controller_js := $(filter-out $(shared_js),$(input_js)) -output_js := $(patsubst $(src_dir_js)/%.ts,$(out_dir_js)/%.js,$(input_js)) +# Flatten: any .ts (legacy or feature) → $(out_dir_js)/.js. +output_js := $(addprefix $(out_dir_js)/,$(patsubst %.ts,%.js,$(notdir $(input_js)))) +# Tell make where to look for .ts sources so the %.js pattern rule below +# resolves both legacy and feature-local controllers. +vpath %.ts $(src_dir_js) $(shell find feature -path 'feature/*/frontend' -type d 2>/dev/null) # cache cache_dir := .cache @@ -82,14 +98,21 @@ $(output_maincss): $(main_css_files) $(templates_files) $(postcss) $(postcss) $(css_config_path) -o $@ --env production touch $@ +# Per-feature controllers live under feature//frontend/, outside +# frontend/js/. NODE_PATH points esbuild at the single frontend/node_modules +# so npm imports (e.g. "htmx.org") resolve from any source location. +node_path := $(node_modules) + ts: $(esbuild) $(output_js) # Build shared chunk first (always loaded) $(out_dir_js)/controller.js: $(shared_js) $(esbuild) - NODE_ENV=production $(esbuild) $< --log-level=error --bundle --outfile=$@ --format=esm --minify + NODE_ENV=production NODE_PATH=$(node_path) $(esbuild) $< --log-level=error --bundle --outfile=$@ --format=esm --minify -# Build controller files with shared chunk reference -$(out_dir_js)/%.js: $(src_dir_js)/%.ts $(out_dir_js)/controller.js - NODE_ENV=production $(esbuild) $< --log-level=error --bundle --outdir=$(out_dir_js) --format=esm --define:process.env.NODE_ENV="\"production\"" --minify --external:./controller.js +# Build controller files with shared chunk reference. The bare %.ts +# prerequisite lets `vpath` resolve sources from frontend/js/ OR from +# feature//frontend/ (set above). $< is the path Make found. +$(out_dir_js)/%.js: %.ts $(out_dir_js)/controller.js + NODE_ENV=production NODE_PATH=$(node_path) $(esbuild) $< --log-level=error --bundle --outdir=$(out_dir_js) --format=esm --define:process.env.NODE_ENV="\"production\"" --minify --external:./controller.js # Rule to copy static files while preserving directory structure static: $(output_static) @@ -123,7 +146,7 @@ dev.maincss: generate | $(PUBLIC_DIR) # TS in development mode dev.ts: $(esbuild) generate | $(PUBLIC_DIR) - NODE_ENV=development $(esbuild) $(input_js) --bundle --outdir=$(out_dir_js) --sourcemap --format=esm --watch \ + NODE_ENV=development NODE_PATH=$(node_path) $(esbuild) $(input_js) --bundle --outdir=$(out_dir_js) --sourcemap --format=esm --watch \ 2>&1 | $(logname) esbuild # Install node modules deps located in ./tools diff --git a/gno.land/pkg/gnoweb/app.go b/gno.land/pkg/gnoweb/app.go index 8dae3ef87df..8b0bebe7093 100644 --- a/gno.land/pkg/gnoweb/app.go +++ b/gno.land/pkg/gnoweb/app.go @@ -178,8 +178,8 @@ func NewRouter(logger *slog.Logger, cfg *AppConfig) (http.Handler, error) { mux.Handle(assetsBase, http.StripPrefix(assetsBase, assetsHandler)) // Handle playground API endpoints - mux.Handle("/_/api/eval", handlerPlaygroundEval(logger, adpcli, cfg.Domain, cfg.NodeRemote)) - mux.Handle("/_/api/funcs", handlerPlaygroundFuncs(logger, adpcli)) + mux.Handle("/_/api/eval", httphandler.Playground.EvalHandler()) + mux.Handle("/_/api/funcs", httphandler.Playground.FuncsHandler()) // Handle status page mux.Handle("/status.json", handlerStatusJSON(logger, rpcclient)) diff --git a/gno.land/pkg/gnoweb/components/view_playground.go b/gno.land/pkg/gnoweb/components/view_playground.go index d6ffa7657e2..e2dde31cfcf 100644 --- a/gno.land/pkg/gnoweb/components/view_playground.go +++ b/gno.land/pkg/gnoweb/components/view_playground.go @@ -1,22 +1,6 @@ package components +// PlaygroundViewType identifies the playground feature view in +// layout-level switch cases (see layout_index.go). The data type +// and view constructor live in the playground feature package. const PlaygroundViewType ViewType = "playground-view" - -type PlaygroundData struct { - // InitialCode is pre-filled code (e.g. from fork) - InitialCode string - // ForkFrom is the package path this was forked from - ForkFrom string - // Remote is the RPC endpoint - Remote string - // ChainId is the current chain ID - ChainId string - // Domain is the node domain - Domain string - // DefaultFile is the filename that should be focus on first load - DefaultFile string -} - -func PlaygroundView(data PlaygroundData) *View { - return NewTemplateView(PlaygroundViewType, "renderPlayground", data) -} diff --git a/gno.land/pkg/gnoweb/components/view_run.go b/gno.land/pkg/gnoweb/components/view_run.go index d6a990aa886..d32e1fc29a3 100644 --- a/gno.land/pkg/gnoweb/components/view_run.go +++ b/gno.land/pkg/gnoweb/components/view_run.go @@ -1,23 +1,6 @@ package components -import "path" - +// RunViewType identifies the run feature view in layout-level switch +// cases (see layout_index.go). The data type and view constructor live +// in the run feature package. const RunViewType ViewType = "run-view" - -// RunData holds the data for the maketx-run scratchpad view. -type RunData struct { - PkgPath string // full path, e.g. "gno.land/r/demo/boards" - Domain string // e.g. "gno.land" - Remote string // e.g. "https://rpc.gno.land:443" - ChainId string // e.g. "portal-loop" -} - -// PkgAlias returns the last segment of the import path, used as the package alias -// in the generated template code (e.g. "boards" from "gno.land/r/demo/boards"). -func (d RunData) PkgAlias() string { - return path.Base(d.PkgPath) -} - -func RunView(data RunData) *View { - return NewTemplateView(RunViewType, "renderRun", data) -} diff --git a/gno.land/pkg/gnoweb/feature/playground/component.go b/gno.land/pkg/gnoweb/feature/playground/component.go new file mode 100644 index 00000000000..422249cc365 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/playground/component.go @@ -0,0 +1,30 @@ +package playground + +import ( + "html/template" + "io" + + "github.com/gnolang/gno/gno.land/pkg/gnoweb/components" +) + +type playgroundComponent struct { + tmpl *template.Template + name string + data any +} + +func (c *playgroundComponent) Render(w io.Writer) error { + return c.tmpl.ExecuteTemplate(w, c.name, c.data) +} + +// NewPageView wraps the playground template. +func NewPageView(data PlaygroundData) *components.View { + return &components.View{ + Type: components.PlaygroundViewType, + Component: &playgroundComponent{ + tmpl: PageTemplate, + name: "renderPage", + data: data, + }, + } +} diff --git a/gno.land/pkg/gnoweb/feature/playground/doc.go b/gno.land/pkg/gnoweb/feature/playground/doc.go new file mode 100644 index 00000000000..a724c8a7057 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/playground/doc.go @@ -0,0 +1,7 @@ +// Package playground implements the gnoweb playground feature. +// +// It serves the standalone playground page at /_/play, the fork view +// (?fork on a package or realm URL — concatenates the source files +// into the playground), and the JSON API endpoints used by the +// playground UI (/_/api/eval, /_/api/funcs). +package playground diff --git a/gno.land/pkg/gnoweb/feature/playground/feature.go b/gno.land/pkg/gnoweb/feature/playground/feature.go new file mode 100644 index 00000000000..be390a734a0 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/playground/feature.go @@ -0,0 +1,69 @@ +package playground + +import ( + "context" + "log/slog" + + "github.com/gnolang/gno/gnovm/pkg/doc" +) + +// ClientAdapter is the subset of the gnoweb chain-client interface that +// the playground feature consumes. Declared locally so feature/playground +// does not import the gnoweb package. The signatures match the +// corresponding methods on gnoweb.ClientAdapter so a *gnoweb.MockClient +// or *gnoweb.rpcClient satisfies this contract through a thin adapter +// wired in at construction time. +type ClientAdapter interface { + // ListFiles is used by the fork view to enumerate package sources. + ListFiles(ctx context.Context, path string) ([]string, error) + + // File is used by the fork view to read each source file. + File(ctx context.Context, path, filename string) ([]byte, error) + + // Doc is used by the funcs API to enumerate exported functions. + Doc(ctx context.Context, path string) (*doc.JSONDocumentation, error) + + // Eval is used by the eval API to run an expression against a + // realm via vm/qeval. + Eval(ctx context.Context, data string) ([]byte, error) +} + +// Deps gathers the dependencies the playground Handler needs. +type Deps struct { + Client ClientAdapter + + // Logger falls back to slog.Default(). + Logger *slog.Logger + + // Domain is the chain domain (e.g. "gno.land"). + Domain string + + // Remote is the RPC endpoint surfaced to the playground UI so it + // can show the user which node it is talking to. + Remote string + + // ChainId is the active chain id surfaced to the playground UI. + ChainId string +} + +// Handler owns the playground feature state. +type Handler struct { + deps Deps + limiter *rateLimiter +} + +// New validates required deps and returns a Handler. +func New(deps Deps) *Handler { + if deps.Client == nil { + panic("playground.New: Client is required") + } + + if deps.Logger == nil { + deps.Logger = slog.Default() + } + + return &Handler{ + deps: deps, + limiter: newRateLimiter(evalBurstSize, evalRefillInterval), + } +} diff --git a/gno.land/pkg/gnoweb/frontend/js/controller-playground.ts b/gno.land/pkg/gnoweb/feature/playground/frontend/controller-playground.ts similarity index 97% rename from gno.land/pkg/gnoweb/frontend/js/controller-playground.ts rename to gno.land/pkg/gnoweb/feature/playground/frontend/controller-playground.ts index 3070b81cfa2..0fb856312e3 100644 --- a/gno.land/pkg/gnoweb/frontend/js/controller-playground.ts +++ b/gno.land/pkg/gnoweb/feature/playground/frontend/controller-playground.ts @@ -1,5 +1,5 @@ -import { CodeEditor, isDarkMode } from "./code-editor.js"; -import { BaseController, makeCopyIcon } from "./controller.js"; +import { CodeEditor, isDarkMode } from "../../../frontend/js/code-editor.js"; +import { BaseController, makeCopyIcon } from "../../../frontend/js/controller.js"; interface PlaygroundFile { name: string; @@ -35,8 +35,9 @@ export class PlaygroundController extends BaseController { this.tabsWrapEl = this.getTarget("tabs-wrap") as HTMLElement; this.prevBtnEl = this.getTarget("prev-button") as HTMLButtonElement; this.nextBtnEl = this.getTarget("next-button") as HTMLButtonElement; - if (!this.editorEl || !this.outputEl || !this.tabsEl || !initialCodeEl) + if (!this.editorEl || !this.outputEl || !this.tabsEl || !initialCodeEl) { return; + } this.editorEl.addEventListener("focusin", () => this._scrollActiveTabIntoView(), @@ -170,7 +171,9 @@ export class PlaygroundController extends BaseController { ): void { const row = document.createElement("div"); row.className = "b-playground-output-item"; - if (isError) row.classList.add("u-color-danger"); + if (isError) { + row.classList.add("u-color-danger"); + } const pre = document.createElement("pre"); pre.className = "b-playground-output-item-text"; @@ -210,8 +213,9 @@ export class PlaygroundController extends BaseController { } private renderTabs(): void { - while (this.tabsEl.firstChild) + while (this.tabsEl.firstChild) { this.tabsEl.removeChild(this.tabsEl.firstChild); + } this.files.forEach((f, i) => { const btn = document.createElement("button"); @@ -227,7 +231,9 @@ export class PlaygroundController extends BaseController { public switchTab(event: Event & { params?: Record }): void { const fileName = event.params?.file as string; - if (fileName) this._switchToFile(fileName); + if (fileName) { + this._switchToFile(fileName); + } } public addFile(): void { diff --git a/gno.land/pkg/gnoweb/feature/playground/frontend/playground.css b/gno.land/pkg/gnoweb/feature/playground/frontend/playground.css new file mode 100644 index 00000000000..520a4ebf59f --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/playground/frontend/playground.css @@ -0,0 +1,249 @@ +/* ========================================================================== + PLAYGROUND - Scratch pad editor + ========================================================================== */ +.b-playground { + display: flex; + flex-direction: column; + min-height: 70vh; + grid-column: 1 / -1; + padding-bottom: var(--g-space-24); +} + +.b-playground-toolbar { + display: flex; + justify-content: space-between; + align-items: center; + gap: var(--g-space-2); + flex-wrap: wrap; +} + +.b-playground-toolbar-left { + display: flex; + align-items: center; + gap: var(--g-space-2); +} + +.b-playground-toolbar-right { + display: flex; + align-items: center; + gap: var(--g-space-1); +} + +.b-playground-tabs-wrap { + display: flex; + align-items: center; + gap: 0; + border-bottom: 1px solid var(--s-color-border-default); + padding-left: var(--g-space-1-5); +} + +.b-playground-tabs { + flex: 0 1 auto; + min-width: 0; + display: flex; + align-items: center; + gap: 0; + overflow-x: auto; + scroll-behavior: smooth; + scrollbar-width: none; + -ms-overflow-style: none; + + &::-webkit-scrollbar { + display: none; + } +} + +.b-playground-tabs-actions { + flex: 0 0 auto; + display: inline-flex; + align-items: center; + gap: 0; + margin-left: var(--g-space-1); + padding-bottom: var(--g-space-2); +} + +.b-playground-tabs-nav { + flex: 0 0 auto; + display: inline-flex; + align-items: center; + justify-content: center; + width: var(--g-space-6); + height: var(--g-space-6); + padding: 0; + border: none; + background: none; + cursor: pointer; + color: var(--s-color-text-tertiary); + transition: color var(--g-transition-fast); + + &:hover:not(:disabled) { + color: var(--s-color-text-secondary); + } + + &:disabled { + opacity: 0.3; + cursor: default; + } + + & .c-icon { + width: var(--g-space-3); + height: var(--g-space-3); + } +} + +.b-playground-tabs-nav--prev .c-icon { + transform: rotate(90deg); +} + +.b-playground-tabs-nav--next .c-icon { + transform: rotate(-90deg); +} + +.b-playground-tab { + position: relative; + padding: var(--g-space-1) var(--g-space-2) var(--g-space-3); + margin-right: var(--g-space-1); + border: none; + background: none; + cursor: pointer; + font-size: var(--g-font-size-100); + font-family: var(--g-font-mono); + font-weight: var(--g-font-semibold); + color: var(--s-color-text-tertiary); + white-space: nowrap; + transition: color var(--g-transition-fast); + + &::after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + width: 0; + height: var(--g-space-1); + border-radius: var(--s-rounded) var(--s-rounded) 0 0; + background-color: var(--s-color-bg-brand-default); + transition: width var(--g-transition-fast); + } + + &:hover { + color: var(--s-color-text-tertiary-hover); + } +} + +.b-playground-tab--active { + color: var(--s-color-text-secondary); + + &::after { + width: 100%; + } +} + +.b-playground-tab-add { + flex: 0 0 auto; + display: inline-flex; + align-items: center; + justify-content: center; + width: var(--g-space-6); + height: var(--g-space-6); + padding: 0; + border: none; + background: none; + cursor: pointer; + font-size: var(--g-font-size-200); + line-height: 1; + color: var(--s-color-text-muted); + transition: color var(--g-transition-fast); + + &:hover { + color: var(--s-color-text-secondary); + } +} + +.b-playground-output { + background-color: var(--s-color-bg-surface-secondary); + border: 1px solid var(--s-color-border-default); + border-radius: var(--g-radius-2); + overflow: hidden; + padding: var(--g-space-4); +} + +.b-playground-output-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: var(--g-space-1) 0; + background-color: var(--s-color-bg-muted); + border-bottom: 1px solid var(--s-color-border-default); +} + +.b-playground-output-title { + font-size: var(--g-font-size-50); + font-weight: var(--g-font-semibold); + text-transform: uppercase; + letter-spacing: 0.05em; + margin-bottom: var(--g-space-1); +} + +.b-playground-output-clear { + border: none; + background: none; + cursor: pointer; + font-size: var(--g-font-size-100); + color: var(--s-color-text-tertiary); + + &:hover { + color: var(--s-color-text-tertiary-hover); + } +} + +.b-playground-output-content { + padding: var(--g-space-2); + margin: 0; + font-family: var(--g-font-mono); + font-size: var(--g-font-size-75); + line-height: 1.6; + min-height: 80px; + max-height: 300px; + overflow-y: auto; + background-color: var(--s-color-bg-base); + display: flex; + flex-direction: column; + gap: 0; +} + +.b-playground-output-item { + display: flex; + align-items: flex-start; + gap: var(--g-space-2); +} + +.b-playground-output-item-text { + flex: 1; + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + white-space: pre-wrap; + word-break: break-word; + color: inherit; +} + +.b-playground-output-copy-btn { + flex-shrink: 0; + display: flex; + align-items: center; + background: none; + border: none; + cursor: pointer; + padding: var(--g-space-1); + color: var(--s-color-fg-muted); + border-radius: var(--g-radius-1); + transition: + color 0.15s, + background-color 0.15s; +} + +.b-playground-output-copy-btn:hover { + color: var(--s-color-fg-default); + background-color: var(--s-color-bg-surface-secondary); +} diff --git a/gno.land/pkg/gnoweb/feature/playground/handler.go b/gno.land/pkg/gnoweb/feature/playground/handler.go new file mode 100644 index 00000000000..080812d9c76 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/playground/handler.go @@ -0,0 +1,238 @@ +package playground + +import ( + "bytes" + "compress/flate" + "context" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "net/http" + "path" + "strings" + "time" + + "github.com/gnolang/gno/gno.land/pkg/gnoweb/components" + "github.com/gnolang/gno/gno.land/pkg/gnoweb/weburl" +) + +const defaultCode = `package main + +func Render(path string) string { + return "Hello, Playground!" +} +` + +func (h *Handler) GetPlaygroundView(u *weburl.GnoURL) (int, *components.View) { + initial := u.Query.Get("code") + if initial != "" { + if decoded, err := base64.StdEncoding.DecodeString(initial); err == nil { + if u.Query.Has("z") { + zr := flate.NewReader(bytes.NewReader(decoded)) + if plain, err := io.ReadAll(zr); err == nil { + initial = string(plain) + } + zr.Close() + } else { + initial = string(decoded) + } + } + } + + if initial == "" { + initial = defaultCode + } + + return http.StatusOK, NewPageView(PlaygroundData{ + InitialCode: initial, + Remote: h.deps.Remote, + ChainId: h.deps.ChainId, + Domain: h.deps.Domain, + }) +} + +func (h *Handler) GetForkView(ctx context.Context, u *weburl.GnoURL) (int, *components.View) { + pkgPath := u.Path + + files, err := h.deps.Client.ListFiles(ctx, pkgPath) + if err != nil { + h.deps.Logger.Warn("unable to list files for fork", "path", pkgPath, "error", err) + // Render the playground with default code rather than a hard + // error — the user can still write code from scratch. + return http.StatusOK, NewPageView(PlaygroundData{ + InitialCode: defaultCode, + ForkFrom: path.Join(h.deps.Domain, pkgPath), + Remote: h.deps.Remote, + ChainId: h.deps.ChainId, + Domain: h.deps.Domain, + DefaultFile: u.Query.Get("file"), + }) + } + + var allCode strings.Builder + for _, fileName := range files { + if !strings.HasSuffix(fileName, ".gno") && fileName != "gnomod.toml" { + continue + } + + body, err := h.deps.Client.File(ctx, pkgPath, fileName) + if err != nil { + continue + } + + if allCode.Len() > 0 { + allCode.WriteString("\n// --- " + fileName + " ---\n\n") + } else { + allCode.WriteString("// --- " + fileName + " ---\n\n") + } + allCode.Write(body) + } + + return http.StatusOK, NewPageView(PlaygroundData{ + InitialCode: allCode.String(), + ForkFrom: path.Join(h.deps.Domain, pkgPath), + Remote: h.deps.Remote, + ChainId: h.deps.ChainId, + Domain: h.deps.Domain, + DefaultFile: u.Query.Get("file"), + }) +} + +// EvalHandler returns the http.Handler for POST /_/api/eval. +func (h *Handler) EvalHandler() http.Handler { + return http.HandlerFunc(h.serveEval) +} + +// FuncsHandler returns the http.Handler for GET /_/api/funcs. +func (h *Handler) FuncsHandler() http.Handler { + return http.HandlerFunc(h.serveFuncs) +} + +// evalRequest is the JSON request body for the eval endpoint. +type evalRequest struct { + PkgPath string `json:"pkg_path"` + Expression string `json:"expression"` +} + +// evalResponse is the JSON response for the eval endpoint. +type evalResponse struct { + Result string `json:"result,omitempty"` + Error string `json:"error,omitempty"` +} + +// funcsResponse represents the JSON response of the funcs endpoint. +type funcsResponse struct { + Functions []funcInfo `json:"functions"` + PkgDoc string `json:"pkg_doc,omitempty"` +} + +type funcInfo struct { + Name string `json:"name"` + Doc string `json:"doc,omitempty"` + Signature string `json:"signature"` + Params []paramInfo `json:"params,omitempty"` + Crossing bool `json:"crossing"` +} + +type paramInfo struct { + Name string `json:"name"` + Type string `json:"type"` +} + +func (h *Handler) serveEval(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + if h.limiter != nil && !h.limiter.allow(clientIP(r)) { + writeJSON(w, http.StatusTooManyRequests, evalResponse{Error: "rate limit exceeded, please slow down"}) + return + } + + var req evalRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeJSON(w, http.StatusBadRequest, evalResponse{Error: "invalid request body"}) + return + } + + if req.PkgPath == "" || req.Expression == "" { + writeJSON(w, http.StatusBadRequest, evalResponse{Error: "pkg_path and expression are required"}) + return + } + + // Clean the pkg path. + pkgPath := strings.TrimPrefix(req.PkgPath, h.deps.Domain+"/") + pkgPath = strings.TrimPrefix(pkgPath, h.deps.Domain) + pkgPath = strings.TrimPrefix(pkgPath, "/") + + // Build the qeval data string: "gno.land/r/demo/boards.Render("")". + data := fmt.Sprintf("%s/%s.%s", h.deps.Domain, pkgPath, req.Expression) + + h.deps.Logger.Debug("playground eval", "data", data) + + start := time.Now() + result, err := h.deps.Client.Eval(r.Context(), data) + took := time.Since(start) + + h.deps.Logger.Debug("playground eval result", "took", took, "error", err) + + if err != nil { + writeJSON(w, http.StatusOK, evalResponse{Error: err.Error()}) + return + } + + writeJSON(w, http.StatusOK, evalResponse{Result: string(result)}) +} + +func (h *Handler) serveFuncs(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + pkgPath := r.URL.Query().Get("path") + if pkgPath == "" { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "path parameter required"}) + return + } + + jdoc, err := h.deps.Client.Doc(r.Context(), pkgPath) + if err != nil { + writeJSON(w, http.StatusOK, map[string]string{"error": err.Error()}) + return + } + + resp := funcsResponse{ + PkgDoc: jdoc.PackageDoc, + Functions: make([]funcInfo, 0, len(jdoc.Funcs)), + } + + for _, fn := range jdoc.Funcs { + if fn.Type != "" { // skip methods + continue + } + + fi := funcInfo{ + Name: fn.Name, + Doc: fn.Doc, + Signature: fn.Signature, + Crossing: fn.Crossing, + Params: make([]paramInfo, 0, len(fn.Params)), + } + for _, p := range fn.Params { + fi.Params = append(fi.Params, paramInfo{Name: p.Name, Type: p.Type}) + } + + resp.Functions = append(resp.Functions, fi) + } + + writeJSON(w, http.StatusOK, resp) +} + +func writeJSON(w http.ResponseWriter, status int, v any) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + json.NewEncoder(w).Encode(v) //nolint:errcheck +} diff --git a/gno.land/pkg/gnoweb/handler_playground_test.go b/gno.land/pkg/gnoweb/feature/playground/handler_test.go similarity index 71% rename from gno.land/pkg/gnoweb/handler_playground_test.go rename to gno.land/pkg/gnoweb/feature/playground/handler_test.go index b55697bc297..bd28a28a04a 100644 --- a/gno.land/pkg/gnoweb/handler_playground_test.go +++ b/gno.land/pkg/gnoweb/feature/playground/handler_test.go @@ -1,8 +1,11 @@ -package gnoweb +package playground import ( "bytes" + "context" "encoding/json" + "errors" + "io" "log/slog" "net/http" "net/http/httptest" @@ -14,17 +17,53 @@ import ( "github.com/stretchr/testify/require" ) +// stubClient is a minimal ClientAdapter for handler tests — every method +// returns canned data so the API path can be exercised without importing +// the gnoweb package (which would create a test-time cycle). +type stubClient struct { + evalResult []byte + evalErr error + docResult *doc.JSONDocumentation + docErr error + files []string + fileBodies map[string][]byte +} + +func (s *stubClient) ListFiles(context.Context, string) ([]string, error) { + return s.files, nil +} + +func (s *stubClient) File(_ context.Context, _, filename string) ([]byte, error) { + body, ok := s.fileBodies[filename] + if !ok { + return nil, errors.New("file not found") + } + return body, nil +} + +func (s *stubClient) Doc(context.Context, string) (*doc.JSONDocumentation, error) { + return s.docResult, s.docErr +} + +func (s *stubClient) Eval(context.Context, string) ([]byte, error) { + return s.evalResult, s.evalErr +} + +func discardLogger() *slog.Logger { + return slog.New(slog.NewTextHandler(io.Discard, nil)) +} + // TestHandlerPlaygroundEval tests the POST /_/api/eval handler directly. func TestHandlerPlaygroundEval(t *testing.T) { t.Parallel() - logger := slog.New(slog.NewTextHandler(io_discard{}, nil)) - cli := NewMockClient(&MockPackage{ - Domain: "gno.land", - Path: "/r/mock/path", - Files: map[string]string{"mock.gno": `package mock`}, + h := New(Deps{ + Client: &stubClient{evalResult: []byte("mock eval")}, + Logger: discardLogger(), + Domain: "gno.land", + Remote: "http://localhost:26657", + ChainId: "test", }) - handler := handlerPlaygroundEval(logger, cli, "gno.land", "http://localhost:26657") cases := []struct { name string @@ -69,6 +108,7 @@ func TestHandlerPlaygroundEval(t *testing.T) { }, } + handler := h.EvalHandler() for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { t.Parallel() @@ -98,17 +138,18 @@ func TestHandlerPlaygroundEval(t *testing.T) { func TestHandlerPlaygroundFuncs(t *testing.T) { t.Parallel() - logger := slog.New(slog.NewTextHandler(io_discard{}, nil)) - cli := NewMockClient(&MockPackage{ - Domain: "gno.land", - Path: "/r/mock/path", - Files: map[string]string{"mock.gno": `package mock`}, - Functions: []*doc.JSONFunc{ - {Name: "Hello", Signature: "Hello() string"}, - {Name: "method", Type: "MyType", Signature: "method()"}, + h := New(Deps{ + Client: &stubClient{ + docResult: &doc.JSONDocumentation{ + Funcs: []*doc.JSONFunc{ + {Name: "Hello", Signature: "Hello() string"}, + {Name: "method", Type: "MyType", Signature: "method()"}, + }, + }, }, + Logger: discardLogger(), + Domain: "gno.land", }) - handler := handlerPlaygroundFuncs(logger, cli) cases := []struct { name string @@ -153,6 +194,7 @@ func TestHandlerPlaygroundFuncs(t *testing.T) { }, } + handler := h.FuncsHandler() for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { t.Parallel() @@ -168,26 +210,21 @@ func TestHandlerPlaygroundFuncs(t *testing.T) { } } -// TestRateLimiter tests that the per-IP rate limiter enforces burst limits. +// TestRateLimiter tests that the per-IP rate limiter enforces burst +// limits. Uses a custom (burst=2, refill=10s) bucket so the test does +// not race the production +1/3s refill rate. func TestRateLimiter(t *testing.T) { t.Parallel() - logger := slog.New(slog.NewTextHandler(io_discard{}, nil)) - cli := NewMockClient(&MockPackage{ - Domain: "gno.land", - Path: "/r/mock/path", - Files: map[string]string{"mock.gno": `package mock`}, - }) - - // Burst of 2, refill every 10 seconds (won't refill during test). - rl := newRateLimiter(2, 10*time.Second) - h := &playgroundAPIHandler{ - logger: logger, - client: cli, - domain: "gno.land", - limiter: rl, + h := &Handler{ + deps: Deps{ + Client: &stubClient{evalResult: []byte("ok")}, + Logger: discardLogger(), + Domain: "gno.land", + }, + limiter: newRateLimiter(2, 10*time.Second), } - handler := http.HandlerFunc(h.serveEval) + handler := h.EvalHandler() body := `{"pkg_path":"r/mock/path","expression":"Render(\"\")"}` ip := "192.0.2.1:1234" @@ -211,8 +248,3 @@ func TestRateLimiter(t *testing.T) { assert.Equal(t, http.StatusTooManyRequests, rr.Code, "third request should be rate-limited") assert.Contains(t, rr.Body.String(), "rate limit") } - -// io_discard is an io.Writer that discards all output, used for test loggers. -type io_discard struct{} - -func (io_discard) Write(p []byte) (int, error) { return len(p), nil } diff --git a/gno.land/pkg/gnoweb/feature/playground/ratelimit.go b/gno.land/pkg/gnoweb/feature/playground/ratelimit.go new file mode 100644 index 00000000000..114d84b6869 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/playground/ratelimit.go @@ -0,0 +1,99 @@ +package playground + +import ( + "net" + "net/http" + "strings" + "sync" + "time" +) + +// Rate-limit defaults for the eval API: 10 tokens of burst, +1 token +// every 3s ≈ 20 req/min sustained per IP. Matches the legacy +// handler_playground.go behavior. +const ( + evalBurstSize = 10 + evalRefillInterval = 3 * time.Second +) + +// rateLimiter is a simple per-IP token bucket. Each IP gets burstSize +// tokens; one token is added every refillInterval. +type rateLimiter struct { + mu sync.Mutex + buckets map[string]*rateBucket + burstSize int + refillInterval time.Duration +} + +type rateBucket struct { + tokens int + lastSeen time.Time +} + +func newRateLimiter(burstSize int, refillInterval time.Duration) *rateLimiter { + rl := &rateLimiter{ + buckets: make(map[string]*rateBucket), + burstSize: burstSize, + refillInterval: refillInterval, + } + // Prune stale buckets every minute. + go rl.pruneLoop() + return rl +} + +func (rl *rateLimiter) allow(ip string) bool { + rl.mu.Lock() + defer rl.mu.Unlock() + + now := time.Now() + b, ok := rl.buckets[ip] + if !ok { + rl.buckets[ip] = &rateBucket{tokens: rl.burstSize - 1, lastSeen: now} + return true + } + + // Refill tokens based on elapsed time. + elapsed := now.Sub(b.lastSeen) + refill := int(elapsed / rl.refillInterval) + if refill > 0 { + b.tokens = min(rl.burstSize, b.tokens+refill) + b.lastSeen = now + } + + if b.tokens <= 0 { + return false + } + b.tokens-- + return true +} + +func (rl *rateLimiter) pruneLoop() { + ticker := time.NewTicker(time.Minute) + defer ticker.Stop() + for range ticker.C { + rl.mu.Lock() + cutoff := time.Now().Add(-5 * time.Minute) + for ip, b := range rl.buckets { + if b.lastSeen.Before(cutoff) { + delete(rl.buckets, ip) + } + } + rl.mu.Unlock() + } +} + +// clientIP extracts the real client IP, respecting X-Forwarded-For when +// present (first hop wins; downstream proxies should overwrite it). +func clientIP(r *http.Request) string { + if xff := r.Header.Get("X-Forwarded-For"); xff != "" { + if ip, _, err := net.SplitHostPort(strings.TrimSpace(strings.SplitN(xff, ",", 2)[0])); err == nil { + return ip + } + return strings.TrimSpace(strings.SplitN(xff, ",", 2)[0]) + } + ip, _, err := net.SplitHostPort(r.RemoteAddr) + if err != nil { + return r.RemoteAddr + } + return ip +} diff --git a/gno.land/pkg/gnoweb/feature/playground/template.go b/gno.land/pkg/gnoweb/feature/playground/template.go new file mode 100644 index 00000000000..ce380ce3313 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/playground/template.go @@ -0,0 +1,22 @@ +package playground + +import ( + "embed" + "html/template" +) + +//go:embed templates/*.html +var templateFS embed.FS + +// PageTemplate is the standalone playground page. Pre-parsed at init +// so a misconfigured template surfaces immediately, not on the first +// request. +var PageTemplate = mustParse("renderPage", "templates/page.html") + +func mustParse(name string, paths ...string) *template.Template { + t, err := template.New(name).ParseFS(templateFS, paths...) + if err != nil { + panic("playground: parse " + paths[0] + ": " + err.Error()) + } + return t +} diff --git a/gno.land/pkg/gnoweb/components/views/playground.html b/gno.land/pkg/gnoweb/feature/playground/templates/page.html similarity index 96% rename from gno.land/pkg/gnoweb/components/views/playground.html rename to gno.land/pkg/gnoweb/feature/playground/templates/page.html index d796b923c43..a965bc191d2 100644 --- a/gno.land/pkg/gnoweb/components/views/playground.html +++ b/gno.land/pkg/gnoweb/feature/playground/templates/page.html @@ -1,7 +1,7 @@ {{/* =================================================================================== LAYOUT - Playground view =================================================================================== */}} -{{ define "renderPlayground" }} +{{ define "renderPage" }}
-
+
@@ -73,7 +73,7 @@

-
+
diff --git a/gno.land/pkg/gnoweb/feature/playground/view.go b/gno.land/pkg/gnoweb/feature/playground/view.go new file mode 100644 index 00000000000..0e895749d15 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/playground/view.go @@ -0,0 +1,23 @@ +package playground + +// PlaygroundData is the render payload for templates/page.html. +type PlaygroundData struct { + // InitialCode is pre-filled code (e.g. from fork or shared snippet). + InitialCode string + + // ForkFrom is the package path this was forked from, when the page + // is rendered as a fork. Empty for a fresh playground. + ForkFrom string + + // Remote is the RPC endpoint surfaced to the UI. + Remote string + + // ChainId is the current chain ID surfaced to the UI. + ChainId string + + // Domain is the chain domain. + Domain string + + // DefaultFile is the filename that should be focused on first load. + DefaultFile string +} diff --git a/gno.land/pkg/gnoweb/feature/run/component.go b/gno.land/pkg/gnoweb/feature/run/component.go new file mode 100644 index 00000000000..a3d84d46629 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/run/component.go @@ -0,0 +1,30 @@ +package run + +import ( + "html/template" + "io" + + "github.com/gnolang/gno/gno.land/pkg/gnoweb/components" +) + +type runComponent struct { + tmpl *template.Template + name string + data any +} + +func (c *runComponent) Render(w io.Writer) error { + return c.tmpl.ExecuteTemplate(w, c.name, c.data) +} + +// NewPageView wraps the run template. +func NewPageView(data RunData) *components.View { + return &components.View{ + Type: components.RunViewType, + Component: &runComponent{ + tmpl: PageTemplate, + name: "renderPage", + data: data, + }, + } +} diff --git a/gno.land/pkg/gnoweb/feature/run/doc.go b/gno.land/pkg/gnoweb/feature/run/doc.go new file mode 100644 index 00000000000..6e0164dec9d --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/run/doc.go @@ -0,0 +1,8 @@ +// Package run implements the gnoweb run feature. +// +// It serves the maketx-run scratchpad at any package or realm URL +// carrying the ?run query (e.g. /r/demo/boards?run). The page is +// purely client-side: it renders an editable code template and lets +// the user copy the resulting `gnokey maketx run` command. There is +// no chain RPC call from this feature. +package run diff --git a/gno.land/pkg/gnoweb/feature/run/feature.go b/gno.land/pkg/gnoweb/feature/run/feature.go new file mode 100644 index 00000000000..ad4bda509cd --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/run/feature.go @@ -0,0 +1,33 @@ +package run + +import "log/slog" + +// Deps gathers the dependencies the run Handler needs. +type Deps struct { + // Logger falls back to slog.Default(). + Logger *slog.Logger + + // Domain is the chain domain (e.g. "gno.land"), used to build the + // fully-qualified package import path stamped on the rendered page. + Domain string + + // Remote is the RPC endpoint surfaced to the run UI so the CLI + // command builder can default it. + Remote string + + // ChainId is the active chain id surfaced to the run UI. + ChainId string +} + +// Handler owns the run feature state. +type Handler struct { + deps Deps +} + +// New returns a Run handler. +func New(deps Deps) *Handler { + if deps.Logger == nil { + deps.Logger = slog.Default() + } + return &Handler{deps: deps} +} diff --git a/gno.land/pkg/gnoweb/frontend/js/controller-run.ts b/gno.land/pkg/gnoweb/feature/run/frontend/controller-run.ts similarity index 87% rename from gno.land/pkg/gnoweb/frontend/js/controller-run.ts rename to gno.land/pkg/gnoweb/feature/run/frontend/controller-run.ts index 00a489afd49..8564ee0ced1 100644 --- a/gno.land/pkg/gnoweb/frontend/js/controller-run.ts +++ b/gno.land/pkg/gnoweb/feature/run/frontend/controller-run.ts @@ -1,5 +1,5 @@ -import { CodeEditor, isDarkMode } from "./code-editor.js"; -import { BaseController } from "./controller.js"; +import { CodeEditor, isDarkMode } from "../../../frontend/js/code-editor.js"; +import { BaseController } from "../../../frontend/js/controller.js"; export class RunController extends BaseController { private declare pkgPath: string; @@ -77,13 +77,25 @@ func main() { ` -gas-fee ${gasFee}`, ]; - if (send && send !== "0ugnot") parts.push(` -send "${send}"`); + if (send && send !== "0ugnot") { + parts.push(` -send "${send}"`); + } + parts.push(" -broadcast"); - if (dryRun) parts.push(" -simulate only"); - if (this.chainId) parts.push(` -chainid ${this.chainId}`); - if (this.remote) parts.push(` -remote "${this.remote}"`); - parts.push(` ${key} script.gno`); + if (dryRun) { + parts.push(" -simulate only"); + } + + if (this.chainId) { + parts.push(` -chainid ${this.chainId}`); + } + + if (this.remote) { + parts.push(` -remote "${this.remote}"`); + } + + parts.push(` ${key} script.gno`); return parts.join(" \\\n"); } diff --git a/gno.land/pkg/gnoweb/feature/run/frontend/run.css b/gno.land/pkg/gnoweb/feature/run/frontend/run.css new file mode 100644 index 00000000000..0f8429128d6 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/run/frontend/run.css @@ -0,0 +1,62 @@ +/* ========================================================================== + RUN - maketx run scratchpad + ========================================================================== */ +.b-run { + display: flex; + flex-direction: column; + min-height: 70vh; + grid-column: 1 / -1; + padding-bottom: var(--g-space-24); +} + +.b-run-settings { + background-color: var(--s-color-bg-surface-secondary); + border-radius: var(--s-rounded); + padding: var(--g-space-4); +} + +.b-run-commands { + display: flex; + flex-direction: column; + gap: var(--g-space-3); + background-color: var(--s-color-bg-surface-secondary); + border-radius: var(--s-rounded); + padding: var(--g-space-4); +} + +.b-run-commands h3 { + font-size: var(--g-font-size-400); +} + +.b-run-settings-grid { + display: flex; + flex-direction: column; + gap: var(--g-space-1); + align-items: stretch; + width: 100%; + margin-block-start: var(--g-space-4); + + label { + background-color: var(--s-color-bg-surface-primary); + } + + .b-input:has(input:focus), + .b-input:has(input:hover) { + label { + background-color: var(--s-color-bg-surface-secondary); + } + } +} + +.b-run-command-header { + display: flex; + align-items: center; + gap: var(--g-space-2); + margin-block-end: var(--g-space-2); + font-size: var(--g-font-size-100); +} + +.b-run-command-label { + font-weight: var(--g-font-semibold); + color: var(--s-color-text-primary); +} diff --git a/gno.land/pkg/gnoweb/feature/run/handler.go b/gno.land/pkg/gnoweb/feature/run/handler.go new file mode 100644 index 00000000000..239d4fd6461 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/run/handler.go @@ -0,0 +1,18 @@ +package run + +import ( + "net/http" + "path" + + "github.com/gnolang/gno/gno.land/pkg/gnoweb/components" + "github.com/gnolang/gno/gno.land/pkg/gnoweb/weburl" +) + +func (h *Handler) GetRunView(u *weburl.GnoURL) (int, *components.View) { + return http.StatusOK, NewPageView(RunData{ + PkgPath: path.Join(h.deps.Domain, u.Path), + Domain: h.deps.Domain, + Remote: h.deps.Remote, + ChainId: h.deps.ChainId, + }) +} diff --git a/gno.land/pkg/gnoweb/feature/run/template.go b/gno.land/pkg/gnoweb/feature/run/template.go new file mode 100644 index 00000000000..2c73dea1dff --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/run/template.go @@ -0,0 +1,21 @@ +package run + +import ( + "embed" + "html/template" +) + +//go:embed templates/*.html +var templateFS embed.FS + +// PageTemplate is the run scratchpad page. Pre-parsed at init so a +// misconfigured template surfaces immediately, not on the first request. +var PageTemplate = mustParse("renderPage", "templates/page.html") + +func mustParse(name string, paths ...string) *template.Template { + t, err := template.New(name).ParseFS(templateFS, paths...) + if err != nil { + panic("run: parse " + paths[0] + ": " + err.Error()) + } + return t +} diff --git a/gno.land/pkg/gnoweb/components/views/run.html b/gno.land/pkg/gnoweb/feature/run/templates/page.html similarity index 87% rename from gno.land/pkg/gnoweb/components/views/run.html rename to gno.land/pkg/gnoweb/feature/run/templates/page.html index 298ead399ca..626aad79223 100644 --- a/gno.land/pkg/gnoweb/components/views/run.html +++ b/gno.land/pkg/gnoweb/feature/run/templates/page.html @@ -1,7 +1,7 @@ {{/* =================================================================================== UI - Run (maketx run) scratchpad =================================================================================== */}} -{{ define "renderRun" }} +{{ define "renderPage" }}
Run Script -
-
+
+
@@ -79,7 +79,10 @@

Dry Run

@@ -95,7 +98,10 @@

Execute

diff --git a/gno.land/pkg/gnoweb/feature/run/view.go b/gno.land/pkg/gnoweb/feature/run/view.go new file mode 100644 index 00000000000..28a8096450c --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/run/view.go @@ -0,0 +1,16 @@ +package run + +import "path" + +// RunData is the render payload for templates/page.html. +type RunData struct { + PkgPath string // full path, e.g. "gno.land/r/demo/boards" + Domain string // e.g. "gno.land" + Remote string // e.g. "https://rpc.gno.land:443" + ChainId string // e.g. "portal-loop" +} + +// PkgAlias returns the last segment of the import path. +func (d RunData) PkgAlias() string { + return path.Base(d.PkgPath) +} diff --git a/gno.land/pkg/gnoweb/frontend/css/06-blocks.css b/gno.land/pkg/gnoweb/frontend/css/06-blocks.css index 493a350fc0c..8c12ec9be1f 100644 --- a/gno.land/pkg/gnoweb/frontend/css/06-blocks.css +++ b/gno.land/pkg/gnoweb/frontend/css/06-blocks.css @@ -2663,37 +2663,9 @@ main.dev-mode .b-toc a { } /* ========================================================================== - PLAYGROUND - Scratch pad editor + CODE EDITOR - CodeMirror wrapper block ========================================================================== */ -.b-playground { - display: flex; - flex-direction: column; - min-height: 70vh; - grid-column: 1 / -1; - padding-bottom: var(--g-space-24); -} - -.b-playground-toolbar { - display: flex; - justify-content: space-between; - align-items: center; - gap: var(--g-space-2); - flex-wrap: wrap; -} - -.b-playground-toolbar-left { - display: flex; - align-items: center; - gap: var(--g-space-2); -} - -.b-playground-toolbar-right { - display: flex; - align-items: center; - gap: var(--g-space-1); -} - -.b-playground-editor-area { +.b-code-editor-area { display: flex; flex-direction: column; border: 1px solid var(--s-color-border-default); @@ -2702,137 +2674,7 @@ main.dev-mode .b-toc a { margin-bottom: var(--g-space-8); } -.b-playground-tabs-wrap { - display: flex; - align-items: center; - gap: 0; - border-bottom: 1px solid var(--s-color-border-default); - padding-left: var(--g-space-1-5); -} - -.b-playground-tabs { - flex: 0 1 auto; - min-width: 0; - display: flex; - align-items: center; - gap: 0; - overflow-x: auto; - scroll-behavior: smooth; - scrollbar-width: none; - -ms-overflow-style: none; - - &::-webkit-scrollbar { - display: none; - } -} - -.b-playground-tabs-actions { - flex: 0 0 auto; - display: inline-flex; - align-items: center; - gap: 0; - margin-left: var(--g-space-1); - padding-bottom: var(--g-space-2); -} - -.b-playground-tabs-nav { - flex: 0 0 auto; - display: inline-flex; - align-items: center; - justify-content: center; - width: var(--g-space-6); - height: var(--g-space-6); - padding: 0; - border: none; - background: none; - cursor: pointer; - color: var(--s-color-text-tertiary); - transition: color var(--g-transition-fast); - - &:hover:not(:disabled) { - color: var(--s-color-text-secondary); - } - - &:disabled { - opacity: 0.3; - cursor: default; - } - - & .c-icon { - width: var(--g-space-3); - height: var(--g-space-3); - } -} - -.b-playground-tabs-nav--prev .c-icon { - transform: rotate(90deg); -} - -.b-playground-tabs-nav--next .c-icon { - transform: rotate(-90deg); -} - -.b-playground-tab { - position: relative; - padding: var(--g-space-1) var(--g-space-2) var(--g-space-3); - margin-right: var(--g-space-1); - border: none; - background: none; - cursor: pointer; - font-size: var(--g-font-size-100); - font-family: var(--g-font-mono); - font-weight: var(--g-font-semibold); - color: var(--s-color-text-tertiary); - white-space: nowrap; - transition: color var(--g-transition-fast); - - &::after { - content: ""; - position: absolute; - left: 0; - bottom: 0; - width: 0; - height: var(--g-space-1); - border-radius: var(--s-rounded) var(--s-rounded) 0 0; - background-color: var(--s-color-bg-brand-default); - transition: width var(--g-transition-fast); - } - - &:hover { - color: var(--s-color-text-tertiary-hover); - } -} - -.b-playground-tab--active { - color: var(--s-color-text-secondary); - - &::after { - width: 100%; - } -} - -.b-playground-tab-add { - flex: 0 0 auto; - display: inline-flex; - align-items: center; - justify-content: center; - width: var(--g-space-6); - height: var(--g-space-6); - padding: 0; - border: none; - background: none; - cursor: pointer; - font-size: var(--g-font-size-200); - line-height: 1; - color: var(--s-color-text-muted); - transition: color var(--g-transition-fast); - - &:hover { - color: var(--s-color-text-secondary); - } -} - -.b-playground-editor { +.b-code-editor { display: flex; height: 60vh; min-height: 300px; @@ -2866,95 +2708,6 @@ main.dev-mode .b-toc a { } } -.b-playground-output { - background-color: var(--s-color-bg-surface-secondary); - border: 1px solid var(--s-color-border-default); - border-radius: var(--g-radius-2); - overflow: hidden; - padding: var(--g-space-4); -} - -.b-playground-output-header { - display: flex; - justify-content: space-between; - align-items: center; - padding: var(--g-space-1) 0; - background-color: var(--s-color-bg-muted); - border-bottom: 1px solid var(--s-color-border-default); -} - -.b-playground-output-title { - font-size: var(--g-font-size-50); - font-weight: var(--g-font-semibold); - text-transform: uppercase; - letter-spacing: 0.05em; - margin-bottom: var(--g-space-1); -} - -.b-playground-output-clear { - border: none; - background: none; - cursor: pointer; - font-size: var(--g-font-size-100); - color: var(--s-color-text-tertiary); - - &:hover { - color: var(--s-color-text-tertiary-hover); - } -} - -.b-playground-output-content { - padding: var(--g-space-2); - margin: 0; - font-family: var(--g-font-mono); - font-size: var(--g-font-size-75); - line-height: 1.6; - min-height: 80px; - max-height: 300px; - overflow-y: auto; - background-color: var(--s-color-bg-base); - display: flex; - flex-direction: column; - gap: 0; -} - -.b-playground-output-item { - display: flex; - align-items: flex-start; - gap: var(--g-space-2); -} - -.b-playground-output-item-text { - flex: 1; - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; - white-space: pre-wrap; - word-break: break-word; - color: inherit; -} - -.b-playground-output-copy-btn { - flex-shrink: 0; - display: flex; - align-items: center; - background: none; - border: none; - cursor: pointer; - padding: var(--g-space-1); - color: var(--s-color-fg-muted); - border-radius: var(--g-radius-1); - transition: - color 0.15s, - background-color 0.15s; -} - -.b-playground-output-copy-btn:hover { - color: var(--s-color-fg-default); - background-color: var(--s-color-bg-surface-secondary); -} - /* ========================================================================== EVAL - Expression evaluator ========================================================================== */ @@ -3083,69 +2836,6 @@ main.dev-mode .b-toc a { word-break: break-word; } -/* ========================================================================== - RUN - maketx run scratchpad - ========================================================================== */ -.b-run { - display: flex; - flex-direction: column; - min-height: 70vh; - grid-column: 1 / -1; - padding-bottom: var(--g-space-24); -} - -.b-run-settings { - background-color: var(--s-color-bg-surface-secondary); - border-radius: var(--s-rounded); - padding: var(--g-space-4); -} - -.b-run-commands { - display: flex; - flex-direction: column; - gap: var(--g-space-3); - background-color: var(--s-color-bg-surface-secondary); - border-radius: var(--s-rounded); - padding: var(--g-space-4); -} - -.b-run-commands h3 { - font-size: var(--g-font-size-400); -} - -.b-run-settings-grid { - display: flex; - flex-direction: column; - gap: var(--g-space-1); - align-items: stretch; - width: 100%; - margin-block-start: var(--g-space-4); - - label { - background-color: var(--s-color-bg-surface-primary); - } - - .b-input:has(input:focus), - .b-input:has(input:hover) { - label { - background-color: var(--s-color-bg-surface-secondary); - } - } -} - -.b-run-command-header { - display: flex; - align-items: center; - gap: var(--g-space-2); - margin-block-end: var(--g-space-2); - font-size: var(--g-font-size-100); -} - -.b-run-command-label { - font-weight: var(--g-font-semibold); - color: var(--s-color-text-primary); -} - /* ========================================================================== DOC EXAMPLE — collapsible code block in doc-context markdown rendering ========================================================================== */ diff --git a/gno.land/pkg/gnoweb/frontend/css/main.css b/gno.land/pkg/gnoweb/frontend/css/main.css index 74afec700c3..71330405fbc 100644 --- a/gno.land/pkg/gnoweb/frontend/css/main.css +++ b/gno.land/pkg/gnoweb/frontend/css/main.css @@ -16,4 +16,9 @@ @import "./04-elements.css"; @import "./05-composition.css"; @import "./06-blocks.css"; +/* Per-feature Block-layer CSS lives co-located with each feature module. + Pulled in here so they sit inside the Block layer slot (between + 06-blocks and 07-utilities) — cascade order preserved. */ +@import "../../feature/playground/frontend/playground.css"; +@import "../../feature/run/frontend/run.css"; @import "./07-utilities.css"; diff --git a/gno.land/pkg/gnoweb/handler_http.go b/gno.land/pkg/gnoweb/handler_http.go index d8944440351..c479030ff2f 100644 --- a/gno.land/pkg/gnoweb/handler_http.go +++ b/gno.land/pkg/gnoweb/handler_http.go @@ -2,14 +2,11 @@ package gnoweb import ( "bytes" - "compress/flate" "context" - "encoding/base64" "errors" "fmt" "go/token" "html/template" - "io" "log/slog" "net/http" "net/url" @@ -20,6 +17,8 @@ import ( "time" "github.com/gnolang/gno/gno.land/pkg/gnoweb/components" + "github.com/gnolang/gno/gno.land/pkg/gnoweb/feature/playground" + "github.com/gnolang/gno/gno.land/pkg/gnoweb/feature/run" "github.com/gnolang/gno/gno.land/pkg/gnoweb/weburl" "github.com/gnolang/gno/gnovm/pkg/doc" "github.com/gnolang/gno/tm2/pkg/bech32" @@ -27,13 +26,6 @@ import ( const ReadmeFileName = "README.md" -const defaultPlaygroundCode = `package main - -func Render(path string) string { - return "Hello, Playground!" -} -` - // StaticMetadata holds static configuration for a web handler. type StaticMetadata struct { Domain string @@ -88,6 +80,10 @@ type HTTPHandler struct { Client ClientAdapter Renderer Renderer Aliases map[string]AliasTarget + + // Features + Playground *playground.Handler + Run *run.Handler } // NewHTTPHandler creates a new HTTPHandler. @@ -102,9 +98,45 @@ func NewHTTPHandler(logger *slog.Logger, cfg *HTTPHandlerConfig) (*HTTPHandler, Renderer: cfg.Renderer, Aliases: cfg.Aliases, Logger: logger, + Playground: playground.New(playground.Deps{ + Client: &featureClientAdapter{cfg.ClientAdapter}, + Logger: logger, + Domain: cfg.Meta.Domain, + Remote: cfg.Meta.RemoteHelp, + ChainId: cfg.Meta.ChainId, + }), + Run: run.New(run.Deps{ + Logger: logger, + Domain: cfg.Meta.Domain, + Remote: cfg.Meta.RemoteHelp, + ChainId: cfg.Meta.ChainId, + }), }, nil } +// featureClientAdapter adapts ClientAdapter for custom features by removing +// the FileMeta type dependency to break circular dependencies with gnoweb. +type featureClientAdapter struct { + client ClientAdapter +} + +func (a *featureClientAdapter) ListFiles(ctx context.Context, p string) ([]string, error) { + return a.client.ListFiles(ctx, p) +} + +func (a *featureClientAdapter) File(ctx context.Context, p, filename string) ([]byte, error) { + body, _, err := a.client.File(ctx, p, filename) + return body, err +} + +func (a *featureClientAdapter) Doc(ctx context.Context, p string) (*doc.JSONDocumentation, error) { + return a.client.Doc(ctx, p) +} + +func (a *featureClientAdapter) Eval(ctx context.Context, data string) ([]byte, error) { + return a.client.Eval(ctx, data) +} + // ServeHTTP handles HTTP requests and only allows GET requests. func (h *HTTPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { h.Logger.Debug("receiving request", "method", r.Method, "path", r.URL.Path) @@ -253,8 +285,6 @@ func (h *HTTPHandler) Post(w http.ResponseWriter, r *http.Request) { // prepareIndexBodyView prepares the data and main view for the index page. func (h *HTTPHandler) prepareIndexBodyView(r *http.Request, indexData *components.IndexData) (int, *components.View) { - ctx := r.Context() - aliasTarget, aliasExists := h.Aliases[r.URL.Path] // If the alias target exists and is a gnoweb path, replace the URL path with it. @@ -280,10 +310,10 @@ func (h *HTTPHandler) prepareIndexBodyView(r *http.Request, indexData *component switch { case aliasExists && aliasTarget.Kind == StaticMarkdown: return h.GetMarkdownView(gnourl, indexData, aliasTarget.Value) - case gnourl.IsRealm(), gnourl.IsPure(), gnourl.IsUser(), gnourl.IsPackageFork(): - return h.GetPackageView(ctx, gnourl, indexData) + case gnourl.IsRealm(), gnourl.IsPure(), gnourl.IsUser(): + return h.GetPackageView(r, gnourl, indexData) case gnourl.IsPlayground(): - return h.GetPlaygroundView(gnourl, indexData) + return h.Playground.GetPlaygroundView(gnourl) default: h.Logger.Debug("invalid path: path is neither a pure package or a realm") return http.StatusBadRequest, components.StatusErrorComponent("invalid path") @@ -314,7 +344,9 @@ func (h *HTTPHandler) GetMarkdownView(gnourl *weburl.GnoURL, indexData *componen } // GetPackageView handles package pages, including help, source, directory, and user views. -func (h *HTTPHandler) GetPackageView(ctx context.Context, gnourl *weburl.GnoURL, indexData *components.IndexData) (int, *components.View) { +func (h *HTTPHandler) GetPackageView(r *http.Request, gnourl *weburl.GnoURL, indexData *components.IndexData) (int, *components.View) { + ctx := r.Context() + // Handle Help page if gnourl.WebQuery.Has("help") { return h.GetHelpView(ctx, gnourl) @@ -322,12 +354,12 @@ func (h *HTTPHandler) GetPackageView(ctx context.Context, gnourl *weburl.GnoURL, // Handle Fork page (fork source to playground) if gnourl.WebQuery.Has("fork") { - return h.GetForkView(ctx, gnourl) + return h.Playground.GetForkView(ctx, gnourl) } // Handle Run page (maketx run scratchpad) if gnourl.WebQuery.Has("run") { - return h.GetRunView(ctx, gnourl) + return h.Run.GetRunView(gnourl) } // Handle Source page @@ -779,89 +811,6 @@ func (h *HTTPHandler) ServeSourceDownload(ctx context.Context, gnourl *weburl.Gn w.Write(source) // write raw file } -// GetPlaygroundView renders the standalone playground page. -func (h *HTTPHandler) GetPlaygroundView(gnourl *weburl.GnoURL, indexData *components.IndexData) (int, *components.View) { - indexData.HeadData.Title = "Playground — " + h.Static.Domain - - // Check if we have initial code from query (e.g. shared snippet). - // Code can be given as a base64 encoded string or plaintext. - // When the "z" query flag is present the base64 payload is also deflate-compressed. - initialCode := gnourl.Query.Get("code") - decoded, err := base64.StdEncoding.DecodeString(initialCode) - if err == nil { - if gnourl.Query.Has("z") { - r := flate.NewReader(bytes.NewReader(decoded)) - if plain, err := io.ReadAll(r); err == nil { - initialCode = string(plain) - } - - r.Close() - } else { - initialCode = string(decoded) - } - } - - // Use default code when no code is provided - if initialCode == "" { - initialCode = defaultPlaygroundCode - } - - return http.StatusOK, components.PlaygroundView(components.PlaygroundData{ - InitialCode: initialCode, - Remote: h.Static.RemoteHelp, - ChainId: h.Static.ChainId, - Domain: h.Static.Domain, - }) -} - -// GetForkView loads all source files from a package and redirects to playground with the code. -func (h *HTTPHandler) GetForkView(ctx context.Context, gnourl *weburl.GnoURL) (int, *components.View) { - pkgPath := gnourl.Path - - files, err := h.Client.ListFiles(ctx, pkgPath) - if err != nil { - h.Logger.Warn("unable to list files for fork", "path", pkgPath, "error", err) - return GetClientErrorStatusPage(gnourl, err) - } - - // Collect all .gno files - var allCode strings.Builder - for _, fileName := range files { - if !strings.HasSuffix(fileName, ".gno") && fileName != "gnomod.toml" { - continue - } - file, _, err := h.Client.File(ctx, pkgPath, fileName) - if err != nil { - continue - } - if allCode.Len() > 0 { - allCode.WriteString("\n// --- " + fileName + " ---\n\n") - } else { - allCode.WriteString("// --- " + fileName + " ---\n\n") - } - allCode.Write(file) - } - - return http.StatusOK, components.PlaygroundView(components.PlaygroundData{ - InitialCode: allCode.String(), - ForkFrom: path.Join(h.Static.Domain, pkgPath), - Remote: h.Static.RemoteHelp, - ChainId: h.Static.ChainId, - Domain: h.Static.Domain, - DefaultFile: gnourl.Query.Get("file"), - }) -} - -// GetRunView renders the maketx run scratchpad for a realm/package. -func (h *HTTPHandler) GetRunView(_ context.Context, gnourl *weburl.GnoURL) (int, *components.View) { - return http.StatusOK, components.RunView(components.RunData{ - PkgPath: path.Join(h.Static.Domain, gnourl.Path), - Domain: h.Static.Domain, - Remote: h.Static.RemoteHelp, - ChainId: h.Static.ChainId, - }) -} - func GetClientErrorStatusPage(_ *weburl.GnoURL, err error) (int, *components.View) { if err == nil { return http.StatusOK, nil diff --git a/gno.land/pkg/gnoweb/handler_playground.go b/gno.land/pkg/gnoweb/handler_playground.go deleted file mode 100644 index ffe1d651c1c..00000000000 --- a/gno.land/pkg/gnoweb/handler_playground.go +++ /dev/null @@ -1,256 +0,0 @@ -package gnoweb - -import ( - "encoding/json" - "fmt" - "log/slog" - "net" - "net/http" - "strings" - "sync" - "time" -) - -// playgroundRateLimiter is a simple per-IP token bucket limiter. -// Each IP gets burstSize tokens; one token is added every refillInterval. -type playgroundRateLimiter struct { - mu sync.Mutex - buckets map[string]*rateBucket - burstSize int - refillInterval time.Duration -} - -type rateBucket struct { - tokens int - lastSeen time.Time -} - -func newRateLimiter(burstSize int, refillInterval time.Duration) *playgroundRateLimiter { - rl := &playgroundRateLimiter{ - buckets: make(map[string]*rateBucket), - burstSize: burstSize, - refillInterval: refillInterval, - } - // Prune stale buckets every minute. - go rl.pruneLoop() - return rl -} - -func (rl *playgroundRateLimiter) allow(ip string) bool { - rl.mu.Lock() - defer rl.mu.Unlock() - - now := time.Now() - b, ok := rl.buckets[ip] - if !ok { - rl.buckets[ip] = &rateBucket{tokens: rl.burstSize - 1, lastSeen: now} - return true - } - - // Refill tokens based on elapsed time. - elapsed := now.Sub(b.lastSeen) - refill := int(elapsed / rl.refillInterval) - if refill > 0 { - b.tokens = min(rl.burstSize, b.tokens+refill) - b.lastSeen = now - } - - if b.tokens <= 0 { - return false - } - b.tokens-- - return true -} - -func (rl *playgroundRateLimiter) pruneLoop() { - ticker := time.NewTicker(time.Minute) - defer ticker.Stop() - for range ticker.C { - rl.mu.Lock() - cutoff := time.Now().Add(-5 * time.Minute) - for ip, b := range rl.buckets { - if b.lastSeen.Before(cutoff) { - delete(rl.buckets, ip) - } - } - rl.mu.Unlock() - } -} - -// playgroundAPIHandler handles playground JSON API endpoints. -type playgroundAPIHandler struct { - logger *slog.Logger - client ClientAdapter - domain string - remote string - limiter *playgroundRateLimiter -} - -// evalRequest is the JSON request body for the eval endpoint. -type evalRequest struct { - PkgPath string `json:"pkg_path"` - Expression string `json:"expression"` -} - -// evalResponse is the JSON response for the eval endpoint. -type evalResponse struct { - Result string `json:"result,omitempty"` - Error string `json:"error,omitempty"` -} - -// funcsResponse represents function info returned by the funcs endpoint. -type funcsResponse struct { - Functions []funcInfo `json:"functions"` - PkgDoc string `json:"pkg_doc,omitempty"` -} - -type funcInfo struct { - Name string `json:"name"` - Doc string `json:"doc,omitempty"` - Signature string `json:"signature"` - Params []paramInfo `json:"params,omitempty"` - Crossing bool `json:"crossing"` -} - -type paramInfo struct { - Name string `json:"name"` - Type string `json:"type"` -} - -// handlerPlaygroundEval creates an HTTP handler for expression evaluation. -// burstSize: max requests per IP before throttling; refillInterval: one token per interval. -func handlerPlaygroundEval(logger *slog.Logger, cli ClientAdapter, domain, remote string) http.Handler { - h := &playgroundAPIHandler{ - logger: logger, - client: cli, - domain: domain, - remote: remote, - limiter: newRateLimiter(10, 3*time.Second), // 10 burst, +1 token every 3s ≈ 20 req/min - } - return http.HandlerFunc(h.serveEval) -} - -// handlerPlaygroundFuncs creates an HTTP handler for listing functions. -func handlerPlaygroundFuncs(logger *slog.Logger, cli ClientAdapter) http.Handler { - h := &playgroundAPIHandler{ - logger: logger, - client: cli, - } - return http.HandlerFunc(h.serveFuncs) -} - -// clientIP extracts the real client IP, respecting X-Forwarded-For if present. -func clientIP(r *http.Request) string { - if xff := r.Header.Get("X-Forwarded-For"); xff != "" { - if ip, _, err := net.SplitHostPort(strings.TrimSpace(strings.SplitN(xff, ",", 2)[0])); err == nil { - return ip - } - return strings.TrimSpace(strings.SplitN(xff, ",", 2)[0]) - } - ip, _, err := net.SplitHostPort(r.RemoteAddr) - if err != nil { - return r.RemoteAddr - } - return ip -} - -func (h *playgroundAPIHandler) serveEval(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - http.Error(w, "method not allowed", http.StatusMethodNotAllowed) - return - } - - if h.limiter != nil && !h.limiter.allow(clientIP(r)) { - writeJSON(w, http.StatusTooManyRequests, evalResponse{Error: "rate limit exceeded, please slow down"}) - return - } - - var req evalRequest - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - writeJSON(w, http.StatusBadRequest, evalResponse{Error: "invalid request body"}) - return - } - - if req.PkgPath == "" || req.Expression == "" { - writeJSON(w, http.StatusBadRequest, evalResponse{Error: "pkg_path and expression are required"}) - return - } - - // Clean the pkg path. - pkgPath := strings.TrimPrefix(req.PkgPath, h.domain+"/") - pkgPath = strings.TrimPrefix(pkgPath, h.domain) - pkgPath = strings.TrimPrefix(pkgPath, "/") - - // Build the qeval data string: "gno.land/r/demo/boards.Render("")" - data := fmt.Sprintf("%s/%s.%s", h.domain, pkgPath, req.Expression) - - h.logger.Debug("playground eval", "data", data) - - start := time.Now() - result, err := h.client.Eval(r.Context(), data) - took := time.Since(start) - - h.logger.Debug("playground eval result", "took", took, "error", err) - - if err != nil { - writeJSON(w, http.StatusOK, evalResponse{Error: err.Error()}) - return - } - - writeJSON(w, http.StatusOK, evalResponse{Result: string(result)}) -} - -func (h *playgroundAPIHandler) serveFuncs(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet { - http.Error(w, "method not allowed", http.StatusMethodNotAllowed) - return - } - - pkgPath := r.URL.Query().Get("path") - if pkgPath == "" { - writeJSON(w, http.StatusBadRequest, map[string]string{"error": "path parameter required"}) - return - } - - jdoc, err := h.client.Doc(r.Context(), pkgPath) - if err != nil { - writeJSON(w, http.StatusOK, map[string]string{"error": err.Error()}) - return - } - - resp := funcsResponse{ - PkgDoc: jdoc.PackageDoc, - Functions: make([]funcInfo, 0, len(jdoc.Funcs)), - } - - for _, fn := range jdoc.Funcs { - if fn.Type != "" { // Skip methods - continue - } - - fi := funcInfo{ - Name: fn.Name, - Doc: fn.Doc, - Signature: fn.Signature, - Crossing: fn.Crossing, - Params: make([]paramInfo, 0, len(fn.Params)), - } - - for _, p := range fn.Params { - fi.Params = append(fi.Params, paramInfo{ - Name: p.Name, - Type: p.Type, - }) - } - - resp.Functions = append(resp.Functions, fi) - } - - writeJSON(w, http.StatusOK, resp) -} - -func writeJSON(w http.ResponseWriter, status int, v any) { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(status) - json.NewEncoder(w).Encode(v) //nolint:errcheck -} diff --git a/gno.land/pkg/gnoweb/public/js/controller-playground.js b/gno.land/pkg/gnoweb/public/js/controller-playground.js index c23ebfb02cb..b13df15c541 100644 --- a/gno.land/pkg/gnoweb/public/js/controller-playground.js +++ b/gno.land/pkg/gnoweb/public/js/controller-playground.js @@ -1,16 +1,16 @@ -var Gn=[],so=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(t=>t?parseInt(t,36):1);for(let t=0,e=0;t>1;if(n=so[i])t=i+1;else return!0;if(t==e)return!1}}function eo(n){return n>=127462&&n<=127487}var io=8205;function ro(n,t,e=!0,i=!0){return(e?oo:Uh)(n,t,i)}function oo(n,t,e){if(t==n.length)return t;t&&lo(n.charCodeAt(t))&&ao(n.charCodeAt(t-1))&&t--;let i=jn(n,t);for(t+=no(i);t=0&&eo(jn(n,o));)r++,o-=2;if(r%2==0)break;t+=2}else break}return t}function Uh(n,t,e){for(;t>0;){let i=oo(n,t-2,e);if(i=56320&&n<57344}function ao(n){return n>=55296&&n<56320}function no(n){return n<65536?1:2}var R=class n{lineAt(t){if(t<0||t>this.length)throw new RangeError(`Invalid position ${t} in document of length ${this.length}`);return this.lineInner(t,!1,1,0)}line(t){if(t<1||t>this.lines)throw new RangeError(`Invalid line number ${t} in ${this.lines}-line document`);return this.lineInner(t,!0,1,0)}replace(t,e,i){[t,e]=Ie(this,t,e);let s=[];return this.decompose(0,t,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(e,this.length,s,1),Re.from(s,this.length-(e-t)+i.length)}append(t){return this.replace(this.length,this.length,t)}slice(t,e=this.length){[t,e]=Ie(this,t,e);let i=[];return this.decompose(t,e,i,0),Re.from(i,e-t)}eq(t){if(t==this)return!0;if(t.length!=this.length||t.lines!=this.lines)return!1;let e=this.scanIdentical(t,1),i=this.length-this.scanIdentical(t,-1),s=new ue(this),r=new ue(t);for(let o=e,l=e;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(t=1){return new ue(this,t)}iterRange(t,e=this.length){return new zi(this,t,e)}iterLines(t,e){let i;if(t==null)i=this.iter();else{e==null&&(e=this.lines+1);let s=this.line(t).from;i=this.iterRange(s,Math.max(s,e==this.lines+1?this.length:e<=1?0:this.line(e-1).to))}return new _i(i)}toString(){return this.sliceString(0)}toJSON(){let t=[];return this.flatten(t),t}constructor(){}static of(t){if(t.length==0)throw new RangeError("A document must have at least one line");return t.length==1&&!t[0]?n.empty:t.length<=32?new ct(t):Re.from(ct.split(t,[]))}},ct=class n extends R{constructor(t,e=jh(t)){super(),this.text=t,this.length=e}get lines(){return this.text.length}get children(){return null}lineInner(t,e,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((e?i:l)>=t)return new Yn(s,l,i,o);s=l+1,i++}}decompose(t,e,i,s){let r=t<=0&&e>=this.length?this:new n(ho(this.text,t,e),Math.min(e,this.length)-Math.max(0,t));if(s&1){let o=i.pop(),l=Vi(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new n(l,o.length+r.length));else{let a=l.length>>1;i.push(new n(l.slice(0,a)),new n(l.slice(a)))}}else i.push(r)}replace(t,e,i){if(!(i instanceof n))return super.replace(t,e,i);[t,e]=Ie(this,t,e);let s=Vi(this.text,Vi(i.text,ho(this.text,0,t)),e),r=this.length+i.length-(e-t);return s.length<=32?new n(s,r):Re.from(n.split(s,[]),r)}sliceString(t,e=this.length,i=` +var Yn=[],ho=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(t=>t?parseInt(t,36):1);for(let t=0,e=0;t>1;if(n=ho[i])t=i+1;else return!0;if(t==e)return!1}}function oo(n){return n>=127462&&n<=127487}var lo=8205;function fo(n,t,e=!0,i=!0){return(e?co:Zh)(n,t,i)}function co(n,t,e){if(t==n.length)return t;t&&uo(n.charCodeAt(t))&&po(n.charCodeAt(t-1))&&t--;let i=Jn(n,t);for(t+=ao(i);t=0&&oo(Jn(n,o));)r++,o-=2;if(r%2==0)break;t+=2}else break}return t}function Zh(n,t,e){for(;t>0;){let i=co(n,t-2,e);if(i=56320&&n<57344}function po(n){return n>=55296&&n<56320}function ao(n){return n<65536?1:2}var R=class n{lineAt(t){if(t<0||t>this.length)throw new RangeError(`Invalid position ${t} in document of length ${this.length}`);return this.lineInner(t,!1,1,0)}line(t){if(t<1||t>this.lines)throw new RangeError(`Invalid line number ${t} in ${this.lines}-line document`);return this.lineInner(t,!0,1,0)}replace(t,e,i){[t,e]=Ie(this,t,e);let s=[];return this.decompose(0,t,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(e,this.length,s,1),Re.from(s,this.length-(e-t)+i.length)}append(t){return this.replace(this.length,this.length,t)}slice(t,e=this.length){[t,e]=Ie(this,t,e);let i=[];return this.decompose(t,e,i,0),Re.from(i,e-t)}eq(t){if(t==this)return!0;if(t.length!=this.length||t.lines!=this.lines)return!1;let e=this.scanIdentical(t,1),i=this.length-this.scanIdentical(t,-1),s=new ue(this),r=new ue(t);for(let o=e,l=e;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(t=1){return new ue(this,t)}iterRange(t,e=this.length){return new zi(this,t,e)}iterLines(t,e){let i;if(t==null)i=this.iter();else{e==null&&(e=this.lines+1);let s=this.line(t).from;i=this.iterRange(s,Math.max(s,e==this.lines+1?this.length:e<=1?0:this.line(e-1).to))}return new _i(i)}toString(){return this.sliceString(0)}toJSON(){let t=[];return this.flatten(t),t}constructor(){}static of(t){if(t.length==0)throw new RangeError("A document must have at least one line");return t.length==1&&!t[0]?n.empty:t.length<=32?new ct(t):Re.from(ct.split(t,[]))}},ct=class n extends R{constructor(t,e=tf(t)){super(),this.text=t,this.length=e}get lines(){return this.text.length}get children(){return null}lineInner(t,e,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((e?i:l)>=t)return new Qn(s,l,i,o);s=l+1,i++}}decompose(t,e,i,s){let r=t<=0&&e>=this.length?this:new n(go(this.text,t,e),Math.min(e,this.length)-Math.max(0,t));if(s&1){let o=i.pop(),l=Wi(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new n(l,o.length+r.length));else{let a=l.length>>1;i.push(new n(l.slice(0,a)),new n(l.slice(a)))}}else i.push(r)}replace(t,e,i){if(!(i instanceof n))return super.replace(t,e,i);[t,e]=Ie(this,t,e);let s=Wi(this.text,Wi(i.text,go(this.text,0,t)),e),r=this.length+i.length-(e-t);return s.length<=32?new n(s,r):Re.from(n.split(s,[]),r)}sliceString(t,e=this.length,i=` `){[t,e]=Ie(this,t,e);let s="";for(let r=0,o=0;r<=e&&ot&&o&&(s+=i),tr&&(s+=l.slice(Math.max(0,t-r),e-r)),r=a+1}return s}flatten(t){for(let e of this.text)t.push(e)}scanIdentical(){return 0}static split(t,e){let i=[],s=-1;for(let r of t)i.push(r),s+=r.length+1,i.length==32&&(e.push(new n(i,s)),i=[],s=-1);return s>-1&&e.push(new n(i,s)),e}},Re=class n extends R{constructor(t,e){super(),this.children=t,this.length=e,this.lines=0;for(let i of t)this.lines+=i.lines}lineInner(t,e,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,a=i+o.lines-1;if((e?a:l)>=t)return o.lineInner(t,e,i,s);s=l+1,i=a+1}}decompose(t,e,i,s){for(let r=0,o=0;o<=e&&r=o){let h=s&((o<=t?1:0)|(a>=e?2:0));o>=t&&a<=e&&!h?i.push(l):l.decompose(t-o,e-o,i,h)}o=a+1}}replace(t,e,i){if([t,e]=Ie(this,t,e),i.lines=r&&e<=l){let a=o.replace(t-r,e-r,i),h=this.lines-o.lines+a.lines;if(a.lines>4&&a.lines>h>>6){let f=this.children.slice();return f[s]=a,new n(f,this.length-(e-t)+i.length)}return super.replace(r,l,a)}r=l+1}return super.replace(t,e,i)}sliceString(t,e=this.length,i=` -`){[t,e]=Ie(this,t,e);let s="";for(let r=0,o=0;rt&&r&&(s+=i),to&&(s+=l.sliceString(t-o,e-o,i)),o=a+1}return s}flatten(t){for(let e of this.children)e.flatten(t)}scanIdentical(t,e){if(!(t instanceof n))return 0;let i=0,[s,r,o,l]=e>0?[0,0,this.children.length,t.children.length]:[this.children.length-1,t.children.length-1,-1,-1];for(;;s+=e,r+=e){if(s==o||r==l)return i;let a=this.children[s],h=t.children[r];if(a!=h)return i+a.scanIdentical(h,e);i+=a.length+1}}static from(t,e=t.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of t)i+=d.lines;if(i<32){let d=[];for(let p of t)p.flatten(d);return new ct(d,e)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,f=[];function c(d){let p;if(d.lines>r&&d instanceof n)for(let g of d.children)c(g);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof ct&&a&&(p=f[f.length-1])instanceof ct&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,f[f.length-1]=new ct(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,f.push(d))}function u(){a!=0&&(l.push(f.length==1?f[0]:n.from(f,h)),h=-1,a=f.length=0)}for(let d of t)c(d);return u(),l.length==1?l[0]:new n(l,e)}};R.empty=new ct([""],0);function jh(n){let t=-1;for(let e of n)t+=e.length+1;return t}function Vi(n,t,e=0,i=1e9){for(let s=0,r=0,o=!0;r=e&&(a>i&&(l=l.slice(0,i-s)),s0?1:(t instanceof ct?t.text.length:t.children.length)<<1]}nextInner(t,e){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof ct?s.text.length:s.children.length;if(o==(e>0?l:0)){if(i==0)return this.done=!0,this.value="",this;e>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(e>0?0:1)){if(this.offsets[i]+=e,t==0)return this.lineBreak=!0,this.value=` -`,this;t--}else if(s instanceof ct){let a=s.text[o+(e<0?-1:0)];if(this.offsets[i]+=e,a.length>Math.max(0,t))return this.value=t==0?a:e>0?a.slice(t):a.slice(0,a.length-t),this;t-=a.length}else{let a=s.children[o+(e<0?-1:0)];t>a.length?(t-=a.length,this.offsets[i]+=e):(e<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(e>0?1:(a instanceof ct?a.text.length:a.children.length)<<1))}}}next(t=0){return t<0&&(this.nextInner(-t,-this.dir),t=this.value.length),this.nextInner(t,this.dir)}},zi=class{constructor(t,e,i){this.value="",this.done=!1,this.cursor=new ue(t,e>i?-1:1),this.pos=e>i?t.length:0,this.from=Math.min(e,i),this.to=Math.max(e,i)}nextInner(t,e){if(e<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;t+=Math.max(0,e<0?this.pos-this.to:this.from-this.pos);let i=e<0?this.pos-this.from:this.to-this.pos;t>i&&(t=i),i-=t;let{value:s}=this.cursor.next(t);return this.pos+=(s.length+t)*e,this.value=s.length<=i?s:e<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(t=0){return t<0?t=Math.max(t,this.from-this.pos):t>0&&(t=Math.min(t,this.to-this.pos)),this.nextInner(t,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},_i=class{constructor(t){this.inner=t,this.afterBreak=!0,this.value="",this.done=!1}next(t=0){let{done:e,lineBreak:i,value:s}=this.inner.next(t);return e&&this.afterBreak?(this.value="",this.afterBreak=!1):e?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(R.prototype[Symbol.iterator]=function(){return this.iter()},ue.prototype[Symbol.iterator]=zi.prototype[Symbol.iterator]=_i.prototype[Symbol.iterator]=function(){return this});var Yn=class{constructor(t,e,i,s){this.from=t,this.to=e,this.number=i,this.text=s}get length(){return this.to-this.from}};function Ie(n,t,e){return t=Math.max(0,Math.min(n.length,t)),[t,Math.max(t,Math.min(n.length,e))]}function Q(n,t,e=!0,i=!0){return ro(n,t,e,i)}function Gh(n){return n>=56320&&n<57344}function Jh(n){return n>=55296&&n<56320}function go(n,t){let e=n.charCodeAt(t);if(!Jh(e)||t+1==n.length)return e;let i=n.charCodeAt(t+1);return Gh(i)?(e-55296<<10)+(i-56320)+65536:e}function mo(n){return n<65536?1:2}var Xn=/\r\n?|\n/,lt=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(lt||(lt={})),jt=class n{constructor(t){this.sections=t}get length(){let t=0;for(let e=0;et)return r+(t-s);r+=l}else{if(i!=lt.Simple&&h>=t&&(i==lt.TrackDel&&st||i==lt.TrackBefore&&st))return null;if(h>t||h==t&&e<0&&!l)return t==s||e<0?r:r+a;r+=a}s=h}if(t>s)throw new RangeError(`Position ${t} is out of range for changeset of length ${s}`);return r}touchesRange(t,e=t){for(let i=0,s=0;i=0&&s<=e&&l>=t)return se?"cover":!0;s=l}return!1}toString(){let t="";for(let e=0;e=0?":"+s:"")}return t}toJSON(){return this.sections}static fromJSON(t){if(!Array.isArray(t)||t.length%2||t.some(e=>typeof e!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new n(t)}static create(t){return new n(t)}},st=class n extends jt{constructor(t,e){super(t),this.inserted=e}apply(t){if(this.length!=t.length)throw new RangeError("Applying change set to a document with the wrong length");return Qn(this,(e,i,s,r,o)=>t=t.replace(s,s+(i-e),o),!1),t}mapDesc(t,e=!1){return Zn(this,t,e,!0)}invert(t){let e=this.sections.slice(),i=[];for(let s=0,r=0;s=0){e[s]=l,e[s+1]=o;let a=s>>1;for(;i.length0&&Zt(i,e,r.text),r.forward(f),l+=f}let h=t[o++];for(;l>1].toJSON()))}return t}static of(t,e,i){let s=[],r=[],o=0,l=null;function a(f=!1){if(!f&&!s.length)return;ou||c<0||u>e)throw new RangeError(`Invalid change range ${c} to ${u} (in doc of length ${e})`);let p=d?typeof d=="string"?R.of(d.split(i||Xn)):d:R.empty,g=p.length;if(c==u&&g==0)return;co&&et(s,c-o,-1),et(s,u-c,g),Zt(r,s,p),o=u}}return h(t),a(!l),l}static empty(t){return new n(t?[t,-1]:[],[])}static fromJSON(t){if(!Array.isArray(t))throw new RangeError("Invalid JSON representation of ChangeSet");let e=[],i=[];for(let s=0;sl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)e.push(r[0],0);else{for(;i.length=0&&e<=0&&e==n[s+1]?n[s]+=t:s>=0&&t==0&&n[s]==0?n[s+1]+=e:i?(n[s]+=t,n[s+1]+=e):n.push(t,e)}function Zt(n,t,e){if(e.length==0)return;let i=t.length-2>>1;if(i>1])),!(e||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];t(s,h,r,f,c),s=h,r=f}}}function Zn(n,t,e,i=!1){let s=[],r=i?[]:null,o=new de(n),l=new de(t);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);et(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,f=o.len;for(;f;)if(l.ins==-1){let c=Math.min(f,l.len);h+=c,f-=c,l.forward(c)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}var de=class{constructor(t){this.set=t,this.i=0,this.next()}next(){let{sections:t}=this.set;this.i>1;return e>=t.length?R.empty:t[e]}textBit(t){let{inserted:e}=this.set,i=this.i-2>>1;return i>=e.length&&!t?R.empty:e[i].slice(this.off,t==null?void 0:this.off+t)}forward(t){t==this.len?this.next():(this.len-=t,this.off+=t)}forward2(t){this.ins==-1?this.forward(t):t==this.ins?this.next():(this.ins-=t,this.off+=t)}},Le=class n{constructor(t,e,i){this.from=t,this.to=e,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let t=this.flags&7;return t==7?null:t}get goalColumn(){let t=this.flags>>6;return t==16777215?void 0:t}map(t,e=-1){let i,s;return this.empty?i=s=t.mapPos(this.from,e):(i=t.mapPos(this.from,1),s=t.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new n(i,s,this.flags)}extend(t,e=t,i=0){if(t<=this.anchor&&e>=this.anchor)return w.range(t,e,void 0,void 0,i);let s=Math.abs(t-this.anchor)>Math.abs(e-this.anchor)?t:e;return w.range(this.anchor,s,void 0,void 0,i)}eq(t,e=!1){return this.anchor==t.anchor&&this.head==t.head&&this.goalColumn==t.goalColumn&&(!e||!this.empty||this.assoc==t.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(t){if(!t||typeof t.anchor!="number"||typeof t.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return w.range(t.anchor,t.head)}static create(t,e,i){return new n(t,e,i)}},w=class n{constructor(t,e){this.ranges=t,this.mainIndex=e}map(t,e=-1){return t.empty?this:n.create(this.ranges.map(i=>i.map(t,e)),this.mainIndex)}eq(t,e=!1){if(this.ranges.length!=t.ranges.length||this.mainIndex!=t.mainIndex)return!1;for(let i=0;it.toJSON()),main:this.mainIndex}}static fromJSON(t){if(!t||!Array.isArray(t.ranges)||typeof t.main!="number"||t.main>=t.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new n(t.ranges.map(e=>Le.fromJSON(e)),t.main)}static single(t,e=t){return new n([n.range(t,e)],0)}static create(t,e=0){if(t.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;ss.from-r.from),e=t.indexOf(i);for(let s=1;sr.head?n.range(a,l):n.range(l,a))}}return new n(t,e)}};function bo(n,t){for(let e of n.ranges)if(e.to>t)throw new RangeError("Selection points outside of document")}var hs=0,M=class n{constructor(t,e,i,s,r){this.combine=t,this.compareInput=e,this.compare=i,this.isStatic=s,this.id=hs++,this.default=t([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(t={}){return new n(t.combine||(e=>e),t.compareInput||((e,i)=>e===i),t.compare||(t.combine?(e,i)=>e===i:fs),!!t.static,t.enables)}of(t){return new Pe([],this,0,t)}compute(t,e){if(this.isStatic)throw new Error("Can't compute a static facet");return new Pe(t,this,1,e)}computeN(t,e){if(this.isStatic)throw new Error("Can't compute a static facet");return new Pe(t,this,2,e)}from(t,e){return e||(e=i=>i),this.compute([t],i=>e(i.field(t)))}};function fs(n,t){return n==t||n.length==t.length&&n.every((e,i)=>e===t[i])}var Pe=class{constructor(t,e,i,s){this.dependencies=t,this.facet=e,this.type=i,this.value=s,this.id=hs++}dynamicSlot(t){var e;let i=this.value,s=this.facet.compareInput,r=this.id,o=t[r]>>1,l=this.type==2,a=!1,h=!1,f=[];for(let c of this.dependencies)c=="doc"?a=!0:c=="selection"?h=!0:(((e=t[c.id])!==null&&e!==void 0?e:1)&1)==0&&f.push(t[c.id]);return{create(c){return c.values[o]=i(c),1},update(c,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||ts(c,f)){let d=i(c);if(l?!fo(d,c.values[o],s):!s(d,c.values[o]))return c.values[o]=d,1}return 0},reconfigure:(c,u)=>{let d,p=u.config.address[r];if(p!=null){let g=$i(u,p);if(this.dependencies.every(m=>m instanceof M?u.facet(m)===c.facet(m):m instanceof Ct?u.field(m,!1)==c.field(m,!1):!0)||(l?fo(d=i(c),g,s):s(d=i(c),g)))return c.values[o]=g,0}else d=i(c);return c.values[o]=d,1}}}};function fo(n,t,e){if(n.length!=t.length)return!1;for(let i=0;in[a.id]),s=e.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[t.id]>>1;function l(a){let h=[];for(let f=0;fi===s),t);return t.provide&&(e.provides=t.provide(e)),e}create(t){let e=t.facet(Hi).find(i=>i.field==this);return(e?.create||this.createF)(t)}slot(t){let e=t[this.id]>>1;return{create:i=>(i.values[e]=this.create(i),1),update:(i,s)=>{let r=i.values[e],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[e]=o,1)},reconfigure:(i,s)=>{let r=i.facet(Hi),o=s.facet(Hi),l;return(l=r.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[e]=l.create(i),1):s.config.address[this.id]!=null?(i.values[e]=s.field(this),0):(i.values[e]=this.create(i),1)}}}init(t){return[this,Hi.of({field:this,create:t})]}get extension(){return this}},fe={lowest:4,low:3,default:2,high:1,highest:0};function ni(n){return t=>new qi(t,n)}var He={highest:ni(fe.highest),high:ni(fe.high),default:ni(fe.default),low:ni(fe.low),lowest:ni(fe.lowest)},qi=class{constructor(t,e){this.inner=t,this.prec=e}},pe=class n{of(t){return new ri(this,t)}reconfigure(t){return n.reconfigure.of({compartment:this,extension:t})}get(t){return t.config.compartments.get(this)}},ri=class{constructor(t,e){this.compartment=t,this.inner=e}},Ki=class n{constructor(t,e,i,s,r,o){for(this.base=t,this.compartments=e,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(t,e,i){let s=[],r=Object.create(null),o=new Map;for(let u of Xh(t,e,o))u instanceof Ct?s.push(u):(r[u.facet.id]||(r[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of s)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let f=i?.config.facets;for(let u in r){let d=r[u],p=d[0].facet,g=f&&f[u]||[];if(d.every(m=>m.type==0))if(l[p.id]=a.length<<1|1,fs(g,d))a.push(i.facet(p));else{let m=p.combine(d.map(b=>b.value));a.push(i&&p.compare(m,i.facet(p))?i.facet(p):m)}else{for(let m of d)m.type==0?(l[m.id]=a.length<<1|1,a.push(m.value)):(l[m.id]=h.length<<1,h.push(b=>m.dynamicSlot(b)));l[p.id]=h.length<<1,h.push(m=>Yh(m,p,d))}}let c=h.map(u=>u(l));return new n(t,o,c,l,a,r)}};function Xh(n,t,e){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof ri&&e.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof ri){if(e.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=t.get(o.compartment)||o.inner;e.set(o.compartment,h),r(h,l)}else if(o instanceof qi)r(o.inner,o.prec);else if(o instanceof Ct)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof Pe)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,fe.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,fe.default),i.reduce((o,l)=>o.concat(l))}function si(n,t){if(t&1)return 2;let e=t>>1,i=n.status[e];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[e]=4;let s=n.computeSlot(n,n.config.dynamicSlots[e]);return n.status[e]=2|s}function $i(n,t){return t&1?n.config.staticValues[t>>1]:n.values[t>>1]}var wo=M.define(),es=M.define({combine:n=>n.some(t=>t),static:!0}),xo=M.define({combine:n=>n.length?n[0]:void 0,static:!0}),vo=M.define(),ko=M.define(),So=M.define(),Co=M.define({combine:n=>n.length?n[0]:!1}),mt=class{constructor(t,e){this.type=t,this.value=e}static define(){return new is}},is=class{of(t){return new mt(this,t)}},ns=class{constructor(t){this.map=t}of(t){return new U(this,t)}},U=class n{constructor(t,e){this.type=t,this.value=e}map(t){let e=this.type.map(this.value,t);return e===void 0?void 0:e==this.value?this:new n(this.type,e)}is(t){return this.type==t}static define(t={}){return new ns(t.map||(e=>e))}static mapEffects(t,e){if(!t.length)return t;let i=[];for(let s of t){let r=s.map(e);r&&i.push(r)}return i}};U.reconfigure=U.define();U.appendConfig=U.define();var X=class n{constructor(t,e,i,s,r,o){this.startState=t,this.changes=e,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&bo(i,e.newLength),r.some(l=>l.type==n.time)||(this.annotations=r.concat(n.time.of(Date.now())))}static create(t,e,i,s,r,o){return new n(t,e,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(t){for(let e of this.annotations)if(e.type==t)return e.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(t){let e=this.annotation(n.userEvent);return!!(e&&(e==t||e.length>t.length&&e.slice(0,t.length)==t&&e[t.length]=="."))}};X.time=mt.define();X.userEvent=mt.define();X.addToHistory=mt.define();X.remote=mt.define();function Qh(n,t){let e=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof X?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof X?n=r[0]:n=Mo(t,Ne(r),!1)}return n}function tf(n){let t=n.startState,e=t.facet(So),i=n;for(let s=e.length-1;s>=0;s--){let r=e[s](n);r&&Object.keys(r).length&&(i=Ao(i,ss(t,r,n.changes.newLength),!0))}return i==n?n:X.create(t,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}var ef=[];function Ne(n){return n==null?ef:Array.isArray(n)?n:[n]}var St=function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n}(St||(St={})),nf=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,rs;try{rs=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function sf(n){if(rs)return rs.test(n);for(let t=0;t"\x80"&&(e.toUpperCase()!=e.toLowerCase()||nf.test(e)))return!0}return!1}function rf(n){return t=>{if(!/\S/.test(t))return St.Space;if(sf(t))return St.Word;for(let e=0;e-1)return St.Word;return St.Other}}var $=class n{constructor(t,e,i,s,r,o){this.config=t,this.doc=e,this.selection=i,this.values=s,this.status=t.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;ls.set(h,a)),e=null),s.set(l.value.compartment,l.value.extension)):l.is(U.reconfigure)?(e=null,i=l.value):l.is(U.appendConfig)&&(e=null,i=Ne(i).concat(l.value));let r;e?r=t.startState.values.slice():(e=Ki.resolve(i,s,this),r=new n(e,this.doc,this.selection,e.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=t.startState.facet(es)?t.newSelection:t.newSelection.asSingle();new n(e,t.newDoc,o,r,(l,a)=>a.update(l,t),t)}replaceSelection(t){return typeof t=="string"&&(t=this.toText(t)),this.changeByRange(e=>({changes:{from:e.from,to:e.to,insert:t},range:w.cursor(e.from+t.length)}))}changeByRange(t){let e=this.selection,i=t(e.ranges[0]),s=this.changes(i.changes),r=[i.range],o=Ne(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return n.create({doc:t.doc,selection:w.fromJSON(t.selection),extensions:e.extensions?s.concat([e.extensions]):s})}static create(t={}){let e=Ki.resolve(t.extensions||[],new Map),i=t.doc instanceof R?t.doc:R.of((t.doc||"").split(e.staticFacet(n.lineSeparator)||Xn)),s=t.selection?t.selection instanceof w?t.selection:w.single(t.selection.anchor,t.selection.head):w.single(0);return bo(s,i.length),e.staticFacet(es)||(s=s.asSingle()),new n(e,i,s,e.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(n.tabSize)}get lineBreak(){return this.facet(n.lineSeparator)||` -`}get readOnly(){return this.facet(Co)}phrase(t,...e){for(let i of this.facet(n.phrases))if(Object.prototype.hasOwnProperty.call(i,t)){t=i[t];break}return e.length&&(t=t.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>e.length?i:e[r-1]})),t}languageDataAt(t,e,i=-1){let s=[];for(let r of this.facet(wo))for(let o of r(this,e,i))Object.prototype.hasOwnProperty.call(o,t)&&s.push(o[t]);return s}charCategorizer(t){let e=this.languageDataAt("wordChars",t);return rf(e.length?e[0]:"")}wordAt(t){let{text:e,from:i,length:s}=this.doc.lineAt(t),r=this.charCategorizer(t),o=t-i,l=t-i;for(;o>0;){let a=Q(e,o,!1);if(r(e.slice(a,o))!=St.Word)break;o=a}for(;ln.length?n[0]:4});$.lineSeparator=xo;$.readOnly=Co;$.phrases=M.define({compare(n,t){let e=Object.keys(n),i=Object.keys(t);return e.length==i.length&&e.every(s=>n[s]==t[s])}});$.languageData=wo;$.changeFilter=vo;$.transactionFilter=ko;$.transactionExtender=So;pe.reconfigure=U.define();function me(n,t,e={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],l=i[r];if(l===void 0)i[r]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(e,r))i[r]=e[r](l,o);else throw new Error("Config merge conflict for field "+r)}for(let s in t)i[s]===void 0&&(i[s]=t[s]);return i}var Wt=class{eq(t){return this==t}range(t,e=t){return oi.create(t,e,this)}};Wt.prototype.startSide=Wt.prototype.endSide=0;Wt.prototype.point=!1;Wt.prototype.mapMode=lt.TrackDel;function cs(n,t){return n==t||n.constructor==t.constructor&&n.eq(t)}var oi=class n{constructor(t,e,i){this.from=t,this.to=e,this.value=i}static create(t,e,i){return new n(t,e,i)}};function os(n,t){return n.from-t.from||n.value.startSide-t.value.startSide}var ls=class n{constructor(t,e,i,s){this.from=t,this.to=e,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(t,e,i,s=0){let r=i?this.to:this.from;for(let o=s,l=r.length;;){if(o==l)return o;let a=o+l>>1,h=r[a]-t||(i?this.value[a].endSide:this.value[a].startSide)-e;if(a==o)return h>=0?o:l;h>=0?l=a:o=a+1}}between(t,e,i,s){for(let r=this.findIndex(e,-1e9,!0),o=this.findIndex(i,1e9,!1,r);rd||u==d&&h.startSide>0&&h.endSide<=0)continue;(d-u||h.endSide-h.startSide)<0||(o<0&&(o=u),h.point&&(l=Math.max(l,d-u)),i.push(h),s.push(u-o),r.push(d-o))}return{mapped:i.length?new n(s,r,i,l):null,pos:o}}},F=class n{constructor(t,e,i,s){this.chunkPos=t,this.chunk=e,this.nextLayer=i,this.maxPoint=s}static create(t,e,i,s){return new n(t,e,i,s)}get length(){let t=this.chunk.length-1;return t<0?0:Math.max(this.chunkEnd(t),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let t=this.nextLayer.size;for(let e of this.chunk)t+=e.value.length;return t}chunkEnd(t){return this.chunkPos[t]+this.chunk[t].length}update(t){let{add:e=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=t,o=t.filter;if(e.length==0&&!o)return this;if(i&&(e=e.slice().sort(os)),this.isEmpty)return e.length?n.of(e):this;let l=new Ui(this,null,-1).goto(0),a=0,h=[],f=new ge;for(;l.value||a=0){let c=e[a++];f.addInner(c.from,c.to,c.value)||h.push(c)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||rl.to||r=r&&t<=r+o.length&&o.between(r,t-r,e-r,i)===!1)return}this.nextLayer.between(t,e,i)}}iter(t=0){return li.from([this]).goto(t)}get isEmpty(){return this.nextLayer==this}static iter(t,e=0){return li.from(t).goto(e)}static compare(t,e,i,s,r=-1){let o=t.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=r),l=e.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=r),a=co(o,l,i),h=new ce(o,a,r),f=new ce(l,a,r);i.iterGaps((c,u,d)=>uo(h,c,f,u,d,s)),i.empty&&i.length==0&&uo(h,0,f,0,0,s)}static eq(t,e,i=0,s){s==null&&(s=999999999);let r=t.filter(f=>!f.isEmpty&&e.indexOf(f)<0),o=e.filter(f=>!f.isEmpty&&t.indexOf(f)<0);if(r.length!=o.length)return!1;if(!r.length)return!0;let l=co(r,o),a=new ce(r,l,0).goto(i),h=new ce(o,l,0).goto(i);for(;;){if(a.to!=h.to||!as(a.active,h.active)||a.point&&(!h.point||!cs(a.point,h.point)))return!1;if(a.to>s)return!0;a.next(),h.next()}}static spans(t,e,i,s,r=-1){let o=new ce(t,null,r).goto(e),l=e,a=o.openStart;for(;;){let h=Math.min(o.to,i);if(o.point){let f=o.activeForPoint(o.to),c=o.pointFroml&&(s.span(l,h,o.active,a),a=o.openEnd(h));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(t,e=!1){let i=new ge;for(let s of t instanceof oi?[t]:e?of(t):t)i.add(s.from,s.to,s.value);return i.finish()}static join(t){if(!t.length)return n.empty;let e=t[t.length-1];for(let i=t.length-2;i>=0;i--)for(let s=t[i];s!=n.empty;s=s.nextLayer)e=new n(s.chunkPos,s.chunk,e,Math.max(s.maxPoint,e.maxPoint));return e}};F.empty=new F([],[],null,-1);function of(n){if(n.length>1)for(let t=n[0],e=1;e0)return n.slice().sort(os);t=i}return n}F.empty.nextLayer=F.empty;var ge=class n{finishChunk(t){this.chunks.push(new ls(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,t&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(t,e,i){this.addInner(t,e,i)||(this.nextLayer||(this.nextLayer=new n)).add(t,e,i)}addInner(t,e,i){let s=t-this.lastTo||i.startSide-this.last.endSide;if(s<=0&&(t-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=t),this.from.push(t-this.chunkStart),this.to.push(e-this.chunkStart),this.last=i,this.lastFrom=t,this.lastTo=e,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,e-t)),!0)}addChunk(t,e){if((t-this.lastTo||e.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,e.maxPoint),this.chunks.push(e),this.chunkPos.push(t);let i=e.value.length-1;return this.last=e.value[i],this.lastFrom=e.from[i]+t,this.lastTo=e.to[i]+t,!0}finish(){return this.finishInner(F.empty)}finishInner(t){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return t;let e=F.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(t):t,this.setMaxPoint);return this.from=null,e}};function co(n,t,e){let i=new Map;for(let r of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(t){if(t==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&s.push(new Ui(o,e,i,r));return s.length==1?s[0]:new n(s)}get startSide(){return this.value?this.value.startSide:0}goto(t,e=-1e9){for(let i of this.heap)i.goto(t,e);for(let i=this.heap.length>>1;i>=0;i--)Jn(this.heap,i);return this.next(),this}forward(t,e){for(let i of this.heap)i.forward(t,e);for(let i=this.heap.length>>1;i>=0;i--)Jn(this.heap,i);(this.to-t||this.value.endSide-e)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let t=this.heap[0];this.from=t.from,this.to=t.to,this.value=t.value,this.rank=t.rank,t.value&&t.next(),Jn(this.heap,0)}}};function Jn(n,t){for(let e=n[t];;){let i=(t<<1)+1;if(i>=n.length)break;let s=n[i];if(i+1=0&&(s=n[i+1],i++),e.compare(s)<0)break;n[i]=e,n[t]=s,t=i}}var ce=class{constructor(t,e,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=li.from(t,e,i)}goto(t,e=-1e9){return this.cursor.goto(t,e),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=t,this.endSide=e,this.openStart=-1,this.next(),this}forward(t,e){for(;this.minActive>-1&&(this.activeTo[this.minActive]-t||this.active[this.minActive].endSide-e)<0;)this.removeActive(this.minActive);this.cursor.forward(t,e)}removeActive(t){Fi(this.active,t),Fi(this.activeTo,t),Fi(this.activeRank,t),this.minActive=po(this.active,this.activeTo)}addActive(t){let e=0,{value:i,to:s,rank:r}=this.cursor;for(;e0;)e++;Wi(this.active,e,i),Wi(this.activeTo,e,s),Wi(this.activeRank,e,r),t&&Wi(t,e,this.cursor.from),this.minActive=po(this.active,this.activeTo)}next(){let t=this.to,e=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>t){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&Fi(i,s)}else if(this.cursor.value)if(this.cursor.from>t){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(e&&this.cursor.to==this.to&&this.cursor.from=0&&i[s]=0&&!(this.activeRank[i]t||this.activeTo[i]==t&&this.active[i].endSide>=this.point.endSide)&&e.push(this.active[i]);return e.reverse()}openEnd(t){let e=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>t;i--)e++;return e}};function uo(n,t,e,i,s,r){n.goto(t),e.goto(i);let o=i+s,l=i,a=i-t,h=!!r.boundChange;for(let f=!1;;){let c=n.to+a-e.to,u=c||n.endSide-e.endSide,d=u<0?n.to+a:e.to,p=Math.min(d,o);if(n.point||e.point?(n.point&&e.point&&cs(n.point,e.point)&&as(n.activeForPoint(n.to),e.activeForPoint(e.to))||r.comparePoint(l,p,n.point,e.point),f=!1):(f&&r.boundChange(l),p>l&&!as(n.active,e.active)&&r.compareRange(l,p,n.active,e.active),h&&po)break;l=d,u<=0&&n.next(),u>=0&&e.next()}}function as(n,t){if(n.length!=t.length)return!1;for(let e=0;e=t;i--)n[i+1]=n[i];n[t]=e}function po(n,t){let e=-1,i=1e9;for(let s=0;s=t)return s;if(s==n.length)break;r+=n.charCodeAt(s)==9?e-r%e:1,s=Q(n,s)}return i===!0?-1:n.length}var us="\u037C",Do=typeof Symbol>"u"?"__"+us:Symbol.for(us),ds=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Oo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},yt=class{constructor(t,e){this.rules=[];let{finish:i}=e||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,l,a,h){let f=[],c=/^@(\w+)\b/.exec(o[0]),u=c&&c[1]=="keyframes";if(c&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))r(d.split(/,\s*/).map(g=>o.map(m=>g.replace(/&/,m))).reduce((g,m)=>g.concat(m)),p,a);else if(p&&typeof p=="object"){if(!c)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,f,u)}else p!=null&&f.push(d.replace(/_.*/,"").replace(/[A-Z]/g,g=>"-"+g.toLowerCase())+": "+p+";")}(f.length||u)&&a.push((i&&!c&&!h?o.map(i):o).join(", ")+" {"+f.join(" ")+"}")}for(let o in t)r(s(o),t[o],this.rules)}getRules(){return this.rules.join(` -`)}static newName(){let t=Oo[Do]||1;return Oo[Do]=t+1,us+t.toString(36)}static mount(t,e,i){let s=t[ds],r=i&&i.nonce;s?r&&s.setNonce(r):s=new ps(t,r),s.mount(Array.isArray(e)?e:[e],t)}},Bo=new Map,ps=class{constructor(t,e){let i=t.ownerDocument||t,s=i.defaultView;if(!t.head&&t.adoptedStyleSheets&&s.CSSStyleSheet){let r=Bo.get(i);if(r)return t[ds]=r;this.sheet=new s.CSSStyleSheet,Bo.set(i,this)}else this.styleTag=i.createElement("style"),e&&this.styleTag.setAttribute("nonce",e);this.modules=[],t[ds]=this}mount(t,e){let i=this.sheet,s=0,r=0;for(let o=0;o-1&&(this.modules.splice(a,1),r--,a=-1),a==-1){if(this.modules.splice(r++,0,l),i)for(let h=0;h",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},lf=typeof navigator<"u"&&/Mac/.test(navigator.platform),af=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(Y=0;Y<10;Y++)Gt[48+Y]=Gt[96+Y]=String(Y);var Y;for(Y=1;Y<=24;Y++)Gt[Y+111]="F"+Y;var Y;for(Y=65;Y<=90;Y++)Gt[Y]=String.fromCharCode(Y+32),Fe[Y]=String.fromCharCode(Y);var Y;for(ji in Gt)Fe.hasOwnProperty(ji)||(Fe[ji]=Gt[ji]);var ji;function Eo(n){var t=lf&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||af&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",e=!t&&n.key||(n.shiftKey?Fe:Gt)[n.keyCode]||n.key||"Unidentified";return e=="Esc"&&(e="Escape"),e=="Del"&&(e="Delete"),e=="Left"&&(e="ArrowLeft"),e=="Up"&&(e="ArrowUp"),e=="Right"&&(e="ArrowRight"),e=="Down"&&(e="ArrowDown"),e}var rt=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},vs=typeof document<"u"?document:{documentElement:{style:{}}},ks=/Edge\/(\d+)/.exec(rt.userAgent),hl=/MSIE \d/.test(rt.userAgent),Ss=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(rt.userAgent),kn=!!(hl||Ss||ks),Lo=!kn&&/gecko\/(\d+)/i.test(rt.userAgent),gs=!kn&&/Chrome\/(\d+)/.exec(rt.userAgent),Ro="webkitFontSmoothing"in vs.documentElement.style,Cs=!kn&&/Apple Computer/.test(rt.vendor),Po=Cs&&(/Mobile\/\w+/.test(rt.userAgent)||rt.maxTouchPoints>2),S={mac:Po||/Mac/.test(rt.platform),windows:/Win/.test(rt.platform),linux:/Linux|X11/.test(rt.platform),ie:kn,ie_version:hl?vs.documentMode||6:Ss?+Ss[1]:ks?+ks[1]:0,gecko:Lo,gecko_version:Lo?+(/Firefox\/(\d+)/.exec(rt.userAgent)||[0,0])[1]:0,chrome:!!gs,chrome_version:gs?+gs[1]:0,ios:Po,android:/Android\b/.test(rt.userAgent),webkit:Ro,webkit_version:Ro?+(/\bAppleWebKit\/(\d+)/.exec(rt.userAgent)||[0,0])[1]:0,safari:Cs,safari_version:Cs?+(/\bVersion\/(\d+(\.\d+)?)/.exec(rt.userAgent)||[0,0])[1]:0,tabSize:vs.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function fr(n,t){for(let e in n)e=="class"&&t.class?t.class+=" "+n.class:e=="style"&&t.style?t.style+=";"+n.style:t[e]=n[e];return t}var ln=Object.create(null);function cr(n,t,e){if(n==t)return!0;n||(n=ln),t||(t=ln);let i=Object.keys(n),s=Object.keys(t);if(i.length-(e&&i.indexOf(e)>-1?1:0)!=s.length-(e&&s.indexOf(e)>-1?1:0))return!1;for(let r of i)if(r!=e&&(s.indexOf(r)==-1||n[r]!==t[r]))return!1;return!0}function hf(n,t){for(let e=n.attributes.length-1;e>=0;e--){let i=n.attributes[e].name;t[i]==null&&n.removeAttribute(i)}for(let e in t){let i=t[e];e=="style"?n.style.cssText=i:n.getAttribute(e)!=i&&n.setAttribute(e,i)}}function No(n,t,e){let i=!1;if(t)for(let s in t)e&&s in e||(i=!0,s=="style"?n.style.cssText="":n.removeAttribute(s));if(e)for(let s in e)t&&t[s]==e[s]||(i=!0,s=="style"?n.style.cssText=e[s]:n.setAttribute(s,e[s]));return i}function ff(n){let t=Object.create(null);for(let e=0;e0?3e8:-4e8:e>0?1e8:-1e8,new ke(t,e,e,i,t.widget||null,!1)}static replace(t){let e=!!t.block,i,s;if(t.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=fl(t,e);i=(r?e?-3e8:-1:5e8)-1,s=(o?e?2e8:1:-6e8)+1}return new ke(t,i,s,e,t.widget||null,!0)}static line(t){return new wi(t)}static set(t,e=!1){return F.of(t,e)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};z.none=F.empty;var bi=class n extends z{constructor(t){let{start:e,end:i}=fl(t);super(e?-1:5e8,i?1:-6e8,null,t),this.tagName=t.tagName||"span",this.attrs=t.class&&t.attributes?fr(t.attributes,{class:t.class}):t.class?{class:t.class}:t.attributes||ln}eq(t){return this==t||t instanceof n&&this.tagName==t.tagName&&cr(this.attrs,t.attrs)}range(t,e=t){if(t>=e)throw new RangeError("Mark decorations may not be empty");return super.range(t,e)}};bi.prototype.point=!1;var wi=class n extends z{constructor(t){super(-2e8,-2e8,null,t)}eq(t){return t instanceof n&&this.spec.class==t.spec.class&&cr(this.spec.attributes,t.spec.attributes)}range(t,e=t){if(e!=t)throw new RangeError("Line decoration ranges must be zero-length");return super.range(t,e)}};wi.prototype.mapMode=lt.TrackBefore;wi.prototype.point=!0;var ke=class n extends z{constructor(t,e,i,s,r,o){super(e,i,r,t),this.block=s,this.isReplace=o,this.mapMode=s?e<=0?lt.TrackBefore:lt.TrackAfter:lt.TrackDel}get type(){return this.startSide!=this.endSide?tt.WidgetRange:this.startSide<=0?tt.WidgetBefore:tt.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(t){return t instanceof n&&cf(this.widget,t.widget)&&this.block==t.block&&this.startSide==t.startSide&&this.endSide==t.endSide}range(t,e=t){if(this.isReplace&&(t>e||t==e&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&e!=t)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(t,e)}};ke.prototype.point=!0;function fl(n,t=!1){let{inclusiveStart:e,inclusiveEnd:i}=n;return e==null&&(e=n.inclusive),i==null&&(i=n.inclusive),{start:e??t,end:i??t}}function cf(n,t){return n==t||!!(n&&t&&n.compare(t))}function qe(n,t,e,i=0){let s=e.length-1;s>=0&&e[s]+i>=n?e[s]=Math.max(e[s],t):e.push(n,t)}var an=class n extends Wt{constructor(t,e){super(),this.tagName=t,this.attributes=e}eq(t){return t==this||t instanceof n&&this.tagName==t.tagName&&cr(this.attributes,t.attributes)}static create(t){return new n(t.tagName,t.attributes||ln)}static set(t,e=!1){return F.of(t,e)}};an.prototype.startSide=an.prototype.endSide=-1;function xi(n){let t;return n.nodeType==11?t=n.getSelection?n:n.ownerDocument:t=n,t.getSelection()}function As(n,t){return t?n==t||n.contains(t.nodeType!=1?t.parentNode:t):!1}function fi(n,t){if(!t.anchorNode)return!1;try{return As(n,t.anchorNode)}catch{return!1}}function en(n){return n.nodeType==3?vi(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function ci(n,t,e,i){return e?Io(n,t,e,i,-1)||Io(n,t,e,i,1):!1}function ie(n){for(var t=0;;t++)if(n=n.previousSibling,!n)return t}function hn(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function Io(n,t,e,i,s){for(;;){if(n==e&&t==i)return!0;if(t==(s<0?0:Xt(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;t=ie(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[t+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;t=s<0?Xt(n):0}else return!1}}function Xt(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function fn(n,t){let e=t?n.left:n.right;return{left:e,right:e,top:n.top,bottom:n.bottom}}function uf(n){let t=n.visualViewport;return t?{left:0,right:t.width,top:0,bottom:t.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function cl(n,t){let e=t.width/n.offsetWidth,i=t.height/n.offsetHeight;return(e>.995&&e<1.005||!isFinite(e)||Math.abs(t.width-n.offsetWidth)<1)&&(e=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(t.height-n.offsetHeight)<1)&&(i=1),{scaleX:e,scaleY:i}}function df(n,t,e,i,s,r,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let f=n,c=!1;f&&!c;)if(f.nodeType==1){let u,d=f==a.body,p=1,g=1;if(d)u=uf(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(f).position)&&(c=!0),f.scrollHeight<=f.clientHeight&&f.scrollWidth<=f.clientWidth){f=f.assignedSlot||f.parentNode;continue}let C=f.getBoundingClientRect();({scaleX:p,scaleY:g}=cl(f,C)),u={left:C.left,right:C.left+f.clientWidth*p,top:C.top,bottom:C.top+f.clientHeight*g}}let m=0,b=0;if(s=="nearest")t.top0&&t.bottom>u.bottom+b&&(b=t.bottom-u.bottom+o)):t.bottom>u.bottom-o&&(b=t.bottom-u.bottom+o,e<0&&t.top-b0&&t.right>u.right+m&&(m=t.right-u.right+r)):t.right>u.right-r&&(m=t.right-u.right+r,e<0&&t.leftu.bottom||t.leftu.right)&&(t={left:Math.max(t.left,u.left),right:Math.min(t.right,u.right),top:Math.max(t.top,u.top),bottom:Math.min(t.bottom,u.bottom)}),f=f.assignedSlot||f.parentNode}else if(f.nodeType==11)f=f.host;else break}function ul(n,t=!0){let e=n.ownerDocument,i=null,s=null;for(let r=n.parentNode;r&&!(r==e.body||(!t||i)&&s);)if(r.nodeType==1)!s&&r.scrollHeight>r.clientHeight&&(s=r),t&&!i&&r.scrollWidth>r.clientWidth&&(i=r),r=r.assignedSlot||r.parentNode;else if(r.nodeType==11)r=r.host;else break;return{x:i,y:s}}var Ms=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(t){return this.anchorNode==t.anchorNode&&this.anchorOffset==t.anchorOffset&&this.focusNode==t.focusNode&&this.focusOffset==t.focusOffset}setRange(t){let{anchorNode:e,focusNode:i}=t;this.set(e,Math.min(t.anchorOffset,e?Xt(e):0),i,Math.min(t.focusOffset,i?Xt(i):0))}set(t,e,i,s){this.anchorNode=t,this.anchorOffset=e,this.focusNode=i,this.focusOffset=s}},be=null;S.safari&&S.safari_version>=26&&(be=!1);function dl(n){if(n.setActive)return n.setActive();if(be)return n.focus(be);let t=[];for(let e=n;e&&(t.push(e,e.scrollTop,e.scrollLeft),e!=e.ownerDocument);e=e.parentNode);if(n.focus(be==null?{get preventScroll(){return be={preventScroll:!0},!0}}:void 0),!be){be=!1;for(let e=0;eMath.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function gl(n,t){for(let e=n,i=t;;){if(e.nodeType==3&&i>0)return{node:e,offset:i};if(e.nodeType==1&&i>0){if(e.contentEditable=="false")return null;e=e.childNodes[i-1],i=Xt(e)}else if(e.parentNode&&!hn(e))i=ie(e),e=e.parentNode;else return null}}function ml(n,t){for(let e=n,i=t;;){if(e.nodeType==3&&i=e){if(l.level==i)return o;(r<0||(s!=0?s<0?l.frome:t[r].level>l.level))&&(r=o)}}if(r<0)throw new RangeError("Index out of range");return r}};function wl(n,t){if(n.length!=t.length)return!1;for(let e=0;e=0;g-=3)if(Vt[g+1]==-d){let m=Vt[g+2],b=m&2?s:m&4?m&1?r:s:0;b&&(V[c]=V[Vt[g]]=b),l=g;break}}else{if(Vt.length==189)break;Vt[l++]=c,Vt[l++]=u,Vt[l++]=a}else if((p=V[c])==2||p==1){let g=p==s;a=g?0:1;for(let m=l-3;m>=0;m-=3){let b=Vt[m+2];if(b&2)break;if(g)Vt[m+2]|=2;else{if(b&4)break;Vt[m+2]|=4}}}}}function vf(n,t,e,i){for(let s=0,r=i;s<=e.length;s++){let o=s?e[s-1].to:n,l=sa;)p==m&&(p=e[--g].from,m=g?e[g-1].to:n),V[--p]=d;a=f}else r=h,a++}}}function Ds(n,t,e,i,s,r,o){let l=i%2?2:1;if(i%2==s%2)for(let a=t,h=0;aa&&o.push(new xt(a,g.from,d));let m=g.direction==Se!=!(d%2);Os(n,m?i+1:i,s,g.inner,g.from,g.to,o),a=g.to}p=g.to}else{if(p==e||(f?V[p]!=l:V[p]==l))break;p++}u?Ds(n,a,p,i+1,s,u,o):at;){let f=!0,c=!1;if(!h||a>r[h-1].to){let g=V[a-1];g!=l&&(f=!1,c=g==16)}let u=!f&&l==1?[]:null,d=f?i:i+1,p=a;t:for(;;)if(h&&p==r[h-1].to){if(c)break t;let g=r[--h];if(!f)for(let m=g.from,b=h;;){if(m==t)break t;if(b&&r[b-1].to==m)m=r[--b].from;else{if(V[m-1]==l)break t;break}}if(u)u.push(g);else{g.toV.length;)V[V.length]=256;let i=[],s=t==Se?0:1;return Os(n,s,s,e,0,n.length,i),i}function xl(n){return[new xt(0,n,0)]}var vl="";function Sf(n,t,e,i,s){var r;let o=i.head-n.from,l=xt.find(t,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),a=t[l],h=a.side(s,e);if(o==h){let u=l+=s?1:-1;if(u<0||u>=t.length)return null;a=t[l=u],o=a.side(!s,e),h=a.side(s,e)}let f=Q(n.text,o,a.forward(s,e));(fa.to)&&(f=h),vl=n.text.slice(Math.min(o,f),Math.max(o,f));let c=l==(s?t.length-1:0)?null:t[l+(s?1:-1)];return c&&f==h&&c.level+(s?0:1)n.some(t=>t)}),Ol=M.define({combine:n=>n.some(t=>t)}),Bl=M.define(),ui=class n{constructor(t,e,i,s,r,o=!1){this.range=t,this.y=e,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(t){return t.empty?this:new n(this.range.map(t),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(t){return this.range.to<=t.doc.length?this:new n(w.cursor(t.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},Gi=U.define({map:(n,t)=>n.map(t)}),El=U.define();function Mt(n,t,e){let i=n.facet(Al);i.length?i[0](t):window.onerror&&window.onerror(String(t),e,void 0,void 0,t)||(e?console.error(e+":",t):console.error(t))}var Jt=M.define({combine:n=>n.length?n[0]:!0}),Af=0,Ve=M.define({combine(n){return n.filter((t,e)=>{for(let i=0;i{let a=[];return o&&a.push(Sn.of(h=>{let f=h.plugin(l);return f?o(f):z.none})),r&&a.push(r(l)),a})}static fromClass(t,e){return n.define((i,s)=>new t(i,s),e)}},di=class{constructor(t){this.spec=t,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(t){if(this.value){if(this.mustUpdate){let e=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(e)}catch(i){if(Mt(e.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(t,this.spec.arg)}catch(e){Mt(t.state,e,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(t){var e;if(!((e=this.value)===null||e===void 0)&&e.destroy)try{this.value.destroy()}catch(i){Mt(t.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},Ll=M.define(),gr=M.define(),Sn=M.define(),Rl=M.define(),mr=M.define(),ki=M.define(),Pl=M.define();function Fo(n,t){let e=n.state.facet(Pl);if(!e.length)return e;let i=e.map(r=>r instanceof Function?r(n):r),s=[];return F.spans(i,t.from,t.to,{point(){},span(r,o,l,a){let h=r-t.from,f=o-t.from,c=s;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=Cf(t.text,h,f)),a>0&&c.length&&(p=c[c.length-1]).to==h&&p.direction==d)p.to=f,c=p.inner;else{let g={from:h,to:f,direction:d,inner:[]};c.push(g),c=g.inner}}}}),s}var Nl=M.define();function Il(n){let t=0,e=0,i=0,s=0;for(let r of n.state.facet(Nl)){let o=r(n);o&&(o.left!=null&&(t=Math.max(t,o.left)),o.right!=null&&(e=Math.max(e,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:t,right:e,top:i,bottom:s}}var ai=M.define(),Tt=class n{constructor(t,e,i,s){this.fromA=t,this.toA=e,this.fromB=i,this.toB=s}join(t){return new n(Math.min(this.fromA,t.fromA),Math.max(this.toA,t.toA),Math.min(this.fromB,t.fromB),Math.max(this.toB,t.toB))}addToSet(t){let e=t.length,i=this;for(;e>0;e--){let s=t[e-1];if(!(s.fromA>i.toA)){if(s.toAs.push(new Tt(r,o,l,a))),this.changedRanges=s}static create(t,e,i){return new n(t,e,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(t=>t.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},Mf=[],j=class{constructor(t,e,i=0){this.dom=t,this.length=e,this.flags=i,this.parent=null,t.cmTile=this}get breakAfter(){return this.flags&1}get children(){return Mf}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(t){if(this.flags|=2,this.flags&4){this.flags&=-5;let e=this.domAttrs;e&&hf(this.dom,e)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(t){this.dom=t,t.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(t,e=this.posAtStart){let i=e;for(let s of this.children){if(s==t)return i;i+=s.length+s.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(t){return this.posBefore(t)+t.length}covers(t){return!0}coordsIn(t,e){return null}domPosFor(t,e){let i=ie(this.dom),s=this.length?t>0:e>0;return new zt(this.parent.dom,i+(s?1:0),t==0||t==this.length)}markDirty(t){this.flags&=-3,t&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let t=this;t;t=t.parent)if(t instanceof Ue)return t;return null}static get(t){return t.cmTile}},$e=class extends j{constructor(t){super(t,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(t){this.children.push(t),t.parent=this}sync(t){if(this.flags&2)return;super.sync(t);let e=this.dom,i=null,s,r=t?.node==e?t:null,o=0;for(let l of this.children){if(l.sync(t),o+=l.length+l.breakAfter,s=i?i.nextSibling:e.firstChild,r&&s!=l.dom&&(r.written=!0),l.dom.parentNode==e)for(;s&&s!=l.dom;)s=Wo(s);else e.insertBefore(l.dom,s);i=l.dom}for(s=i?i.nextSibling:e.firstChild,r&&s&&(r.written=!0);s;)s=Wo(s);this.length=o}};function Wo(n){let t=n.nextSibling;return n.parentNode.removeChild(n),t}var Ue=class extends $e{constructor(t,e){super(e),this.view=t}owns(t){for(;t;t=t.parent)if(t==this)return!0;return!1}isBlock(){return!0}nearest(t){for(;;){if(!t)return null;let e=j.get(t);if(e&&this.owns(e))return e;t=t.parentNode}}blockTiles(t){for(let e=[],i=this,s=0,r=0;;)if(s==i.children.length){if(!e.length)return;i=i.parent,i.breakAfter&&r++,s=e.pop()}else{let o=i.children[s++];if(o instanceof Yt)e.push(s),i=o,s=0;else{let l=r+o.length,a=t(o,r);if(a!==void 0)return a;r=l+o.breakAfter}}}resolveBlock(t,e){let i,s=-1,r,o=-1;if(this.blockTiles((l,a)=>{let h=a+l.length;if(t>=a&&t<=h){if(l.isWidget()&&e>=-1&&e<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(at||t==a&&(e>1?l.length:l.covers(-1)))&&(!r||!l.isWidget()&&r.isWidget())&&(r=l,o=t-a)}}),!i&&!r)throw new Error("No tile at position "+t);return i&&e<0||!r?{tile:i,offset:s}:{tile:r,offset:o}}},Yt=class n extends $e{constructor(t,e){super(t),this.wrapper=e}isBlock(){return!0}covers(t){return this.children.length?t<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(t,e){let i=new n(e||document.createElement(t.tagName),t);return e||(i.flags|=4),i}},je=class n extends $e{constructor(t,e){super(t),this.attrs=e}isLine(){return!0}static start(t,e,i){let s=new n(e||document.createElement("div"),t);return(!e||!i)&&(s.flags|=4),s}get domAttrs(){return this.attrs}resolveInline(t,e,i){let s=null,r=-1,o=null,l=-1;function a(f,c){for(let u=0,d=0;u=c&&(p.isComposite()?a(p,c-d):(!o||o.isHidden&&(e>0||i&&Df(o,p)))&&(g>c||p.flags&32)?(o=p,l=c-d):(di&&(t=i);let s=t,r=t,o=0;t==0&&e<0||t==i&&e>=0?S.chrome||S.gecko||(t?(s--,o=1):r=0)?0:l.length-1];return S.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?fn(a,o<0):a||null}static of(t,e){let i=new n(e||document.createTextNode(t),t);return e||(i.flags|=2),i}},Ce=class n extends j{constructor(t,e,i,s){super(t,e,s),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(t){return this.flags&48?!1:(this.flags&(t<0?64:128))>0}coordsIn(t,e){return this.coordsInWidget(t,e,!1)}coordsInWidget(t,e,i){let s=this.widget.coordsAt(this.dom,t,e);if(s)return s;if(i)return fn(this.dom.getBoundingClientRect(),this.length?t==0:e<=0);{let r=this.dom.getClientRects(),o=null;if(!r.length)return null;let l=this.flags&16?!0:this.flags&32?!1:t>0;for(let a=l?r.length-1:0;o=r[a],!(t>0?a==0:a==r.length-1||o.top0;)if(s.isComposite())if(o){if(!t)break;i&&i.break(),t--,o=!1}else if(r==s.children.length){if(!t&&!l.length)break;i&&i.leave(s),o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++}else{let a=s.children[r],h=a.breakAfter;(e>0?a.length<=t:a.length=0;l--){let a=e.marks[l],h=s.lastChild;if(h instanceof at&&h.mark.eq(a.mark))h.dom!=a.dom&&h.setDOM(ms(a.dom)),s=h;else{if(this.cache.reused.get(a)){let c=j.get(a.dom);c&&c.setDOM(ms(a.dom))}let f=at.of(a.mark,a.dom);s.append(f),s=f}this.cache.reused.set(a,2)}let r=j.get(t.text);r&&this.cache.reused.set(r,2);let o=new we(t.text,t.text.nodeValue);o.flags|=8,s.append(o)}addInlineWidget(t,e,i){let s=this.afterWidget&&t.flags&48&&(this.afterWidget.flags&48)==(t.flags&48);s||this.flushBuffer();let r=this.ensureMarks(e,i);!s&&!(t.flags&16)&&r.append(this.getBuffer(1)),r.append(t),this.pos+=t.length,this.afterWidget=t}addMark(t,e,i){this.flushBuffer(),this.ensureMarks(e,i).append(t),this.pos+=t.length,this.afterWidget=null}addBlockWidget(t){this.getBlockPos().append(t),this.pos+=t.length,this.lastBlock=t,this.endLine()}continueWidget(t){let e=this.afterWidget||this.lastBlock;e.length+=t,this.pos+=t}addLineStart(t,e){var i;t||(t=Hl);let s=je.start(t,e||((i=this.cache.find(je))===null||i===void 0?void 0:i.dom),!!e);this.getBlockPos().append(this.lastBlock=this.curLine=s)}addLine(t){this.getBlockPos().append(t),this.pos+=t.length,this.lastBlock=t,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(t){this.blockPosCovered()||this.addLineStart(t)}ensureLine(t){this.curLine||this.addLineStart(t)}ensureMarks(t,e){var i;let s=this.curLine;for(let r=t.length-1;r>=0;r--){let o=t[r],l;if(e>0&&(l=s.lastChild)&&l instanceof at&&l.mark.eq(o))s=l,e--;else{let a=at.of(o,(i=this.cache.find(at,h=>h.mark.eq(o)))===null||i===void 0?void 0:i.dom);s.append(a),s=a,e=0}}return s}endLine(){if(this.curLine){this.flushBuffer();let t=this.curLine.lastChild;(!t||!Vo(this.curLine,!1)||t.dom.nodeName!="BR"&&t.isWidget()&&!(S.ios&&Vo(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(ys,0,32)||new Ce(ys.toDOM(),0,ys,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let t=this.wrappers.length-1;t>=0;t--)this.wrappers[t].to=this.pos){let e=new Ls(t.from,t.to,t.value,t.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-e.rank||this.wrappers[i-1].to-e.to)<0;)i--;this.wrappers.splice(i,0,e)}this.wrapperPos=this.pos}getBlockPos(){var t;this.updateBlockWrappers();let e=this.root;for(let i of this.wrappers){let s=e.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||t===void 0?void 0:t.dom);e.append(r),e=r}}return e}blockPosCovered(){let t=this.lastBlock;return t!=null&&!t.breakAfter&&(!t.isWidget()||(t.flags&160)>0)}getBuffer(t){let e=2|(t<0?16:32),i=this.cache.find(Ge,void 0,1);return i&&(i.flags=e),i||new Ge(e)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},Ps=class{constructor(t){this.skipCount=0,this.text="",this.textOff=0,this.cursor=t.iter()}skip(t){this.textOff+t<=this.text.length?this.textOff+=t:(this.skipCount+=t-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(t){if(this.textOff==this.text.length){let{value:s,lineBreak:r,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=s;let l=this.textOff=Math.min(t,s.length);return r?null:s.slice(0,l)}let e=Math.min(this.text.length,this.textOff+t),i=this.text.slice(this.textOff,e);return this.textOff=e,i}},un=[Ce,je,we,at,Ge,Yt,Ue];for(let n=0;n[]),this.index=un.map(()=>0),this.reused=new Map}add(t){let e=t.constructor.bucket,i=this.buckets[e];i.length<6?i.push(t):i[this.index[e]=(this.index[e]+1)%6]=t}find(t,e,i=2){let s=t.bucket,r=this.buckets[s],o=this.index[s];for(let l=r.length-1;l>=0;l--){let a=(l+o)%r.length,h=r[a];if((!e||e(h))&&!this.reused.has(h))return r.splice(a,1),a{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(t,e){let i=e&&this.getCompositionContext(e.text);for(let s=0,r=0,o=0;;){let l=os){let h=a-s;this.preserve(h,!o,!l),s=a,r+=h}if(!l)break;e&&l.fromA<=e.range.fromA&&l.toA>=e.range.toA?(this.forward(l.fromA,e.range.fromA,e.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let h=a>0||l{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof at&&s.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?s.length&&(s.length=r=0):o instanceof at&&(s.shift(),r=Math.min(r,s.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(t)}emit(t,e){let i=null,s=this.builder,r=0,o=F.spans(this.decorations,t,e,{point:(l,a,h,f,c,u)=>{if(h instanceof ke){if(this.disallowBlockEffectsFor[u]){if(h.block)throw new RangeError("Block decorations may not be specified via plugins");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(r=f.length,c>f.length)s.continueWidget(a-l);else{let d=h.widget||(h.block?ne.block:ne.inline),p=Of(h),g=this.cache.findWidget(d,a-l,p)||Ce.of(d,this.view,a-l,p);h.block?(h.startSide>0&&s.addLineStartIfNotCovered(i),s.addBlockWidget(g)):(s.ensureLine(i),s.addInlineWidget(g,f,c))}i=null}else i=Bf(i,h);a>l&&this.text.skip(a-l)},span:(l,a,h,f)=>{for(let c=l;cr,this.openMarks=o}forward(t,e,i=1){e-t<=10?this.old.advance(e-t,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(e-t-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(t){let e=[],i=null;for(let s=t.parentNode;;s=s.parentNode){let r=j.get(s);if(s==this.view.contentDOM)break;r instanceof at?e.push(r):r?.isLine()?i=r:r instanceof Yt||(s.nodeName=="DIV"&&!i&&s!=this.view.contentDOM?i=new je(s,Hl):i||e.push(at.of(new bi({tagName:s.nodeName.toLowerCase(),attributes:ff(s)}),s)))}return{line:i,marks:e}}};function Vo(n,t){let e=i=>{for(let s of i.children)if((t?s.isText():s.length)||e(s))return!0;return!1};return e(n)}function Of(n){let t=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(t|=256),t}var Hl={class:"cm-line"};function Bf(n,t){let e=t.spec.attributes,i=t.spec.class;return!e&&!i||(n||(n={class:"cm-line"}),e&&fr(e,n),i&&(n.class+=" "+i)),n}function Ef(n){let t=[];for(let e=n.parents.length;e>1;e--){let i=e==n.parents.length?n.tile:n.parents[e].tile;i instanceof at&&t.push(i.mark)}return t}function ms(n){let t=j.get(n);return t&&t.setDOM(n.cloneNode()),n}var ne=class extends ve{constructor(t){super(),this.tag=t}eq(t){return t.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(t){return t.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}};ne.inline=new ne("span");ne.block=new ne("div");var ys=new class extends ve{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}},dn=class{constructor(t){this.view=t,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=z.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new Ue(t,t.contentDOM),this.updateInner([new Tt(0,0,0,t.state.doc.length)],null)}update(t){var e;let i=t.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:f,toA:c})=>cthis.minWidthTo)?(this.minWidthFrom=t.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=t.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(t);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((e=this.domChanged)===null||e===void 0)&&e.newSel?s=this.domChanged.newSel.head:!Wf(t.changes,this.hasComposition)&&!t.selectionSet&&(s=t.state.selection.main.head));let r=s>-1?Rf(this.view,t.changes,s):null;if(this.domChanged=null,this.hasComposition){let{from:f,to:c}=this.hasComposition;i=new Tt(f,c,t.changes.mapPos(f,-1),t.changes.mapPos(c,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(S.ie||S.chrome)&&!r&&t&&t.state.doc.lines!=t.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=If(o,this.decorations,t.changes);a.length&&(i=Tt.extendWithRanges(i,a));let h=Hf(l,this.blockWrappers,t.changes);return h.length&&(i=Tt.extendWithRanges(i,h)),r&&!i.some(f=>f.fromA<=r.range.fromA&&f.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),t.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(t,e){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(e||t.length){let o=this.tile,l=new Is(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);e&&j.get(e.text)&&l.cache.reused.set(j.get(e.text),2),this.tile=l.run(t,e),Hs(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let r=S.chrome||S.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let s=[];if(this.view.viewport.from||this.view.viewport.to-1)&&fi(i,this.view.observer.selectionRange)&&!(s&&i.contains(s));if(!(r||e||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,h,f;if(a.empty?f=h=this.inlineDOMNearPos(a.anchor,a.assoc||1):(f=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),h=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),S.gecko&&a.empty&&!this.hasComposition&&Lf(h)){let u=document.createTextNode("");this.view.observer.ignore(()=>h.node.insertBefore(u,h.node.childNodes[h.offset]||null)),h=f=new zt(u,0),l=!0}let c=this.view.observer.selectionRange;(l||!c.focusNode||(!ci(h.node,h.offset,c.anchorNode,c.anchorOffset)||!ci(f.node,f.offset,c.focusNode,c.focusOffset))&&!this.suppressWidgetCursorChange(c,a))&&(this.view.observer.ignore(()=>{S.android&&S.chrome&&i.contains(c.focusNode)&&Ff(c.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let u=xi(this.view.root);if(u)if(a.empty){if(S.gecko){let d=Pf(h.node,h.offset);if(d&&d!=3){let p=(d==1?gl:ml)(h.node,h.offset);p&&(h=new zt(p.node,p.offset))}}u.collapse(h.node,h.offset),a.bidiLevel!=null&&u.caretBidiLevel!==void 0&&(u.caretBidiLevel=a.bidiLevel)}else if(u.extend){u.collapse(h.node,h.offset);try{u.extend(f.node,f.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([h,f]=[f,h]),d.setEnd(f.node,f.offset),d.setStart(h.node,h.offset),u.removeAllRanges(),u.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),s&&s.focus())}),this.view.observer.setSelectionRange(h,f)),this.impreciseAnchor=h.precise?null:new zt(c.anchorNode,c.anchorOffset),this.impreciseHead=f.precise?null:new zt(c.focusNode,c.focusOffset)}suppressWidgetCursorChange(t,e){return this.hasComposition&&e.empty&&ci(t.focusNode,t.focusOffset,t.anchorNode,t.anchorOffset)&&this.posFromDOM(t.focusNode,t.focusOffset)==e.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:t}=this,e=t.state.selection.main,i=xi(t.root),{anchorNode:s,anchorOffset:r}=t.observer.selectionRange;if(!i||!e.empty||!e.assoc||!i.modify)return;let o=this.lineAt(e.head,e.assoc);if(!o)return;let l=o.posAtStart;if(e.head==l||e.head==l+o.length)return;let a=this.coordsAt(e.head,-1),h=this.coordsAt(e.head,1);if(!a||!h||a.bottom>h.top)return;let f=this.domAtPos(e.head+e.assoc,e.assoc);i.collapse(f.node,f.offset),i.modify("move",e.assoc<0?"forward":"backward","lineboundary"),t.observer.readSelectionRange();let c=t.observer.selectionRange;t.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=e.from&&i.collapse(s,r)}posFromDOM(t,e){let i=this.tile.nearest(t);if(!i)return this.tile.dom.compareDocumentPosition(t)&2?0:this.view.state.doc.length;let s=i.posAtStart;if(i.isComposite()){let r;if(t==i.dom)r=i.dom.childNodes[e];else{let o=Xt(t)==0?0:e==0?-1:1;for(;;){let l=t.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(t==l.firstChild?o=-1:o=1),t=l}o<0?r=t:r=t.nextSibling}if(r==i.dom.firstChild)return s;for(;r&&!j.get(r);)r=r.nextSibling;if(!r)return s+i.length;for(let o=0,l=s;;o++){let a=i.children[o];if(a.dom==r)return l;l+=a.length+a.breakAfter}}else return i.isText()?t==i.dom?s+e:s+(e?i.length:0):s}domAtPos(t,e){let{tile:i,offset:s}=this.tile.resolveBlock(t,e);return i.isWidget()?i.domPosFor(t,e):i.domIn(s,e)}inlineDOMNearPos(t,e){let i,s=-1,r=!1,o,l=-1,a=!1;return this.tile.blockTiles((h,f)=>{if(h.isWidget()){if(h.flags&32&&f>=t)return!0;h.flags&16&&(r=!0)}else{let c=f+h.length;if(f<=t&&(i=h,s=t-f,r=c=t&&!o&&(o=h,l=t-f,a=f>t),f>t&&o)return!0}}),!i&&!o?this.domAtPos(t,e):(r&&o?i=null:a&&i&&(o=null),i&&e<0||!o?i.domIn(s,e):o.domIn(l,e))}coordsAt(t,e){let{tile:i,offset:s}=this.tile.resolveBlock(t,e);return i.isWidget()?i.widget instanceof pi?null:i.coordsInWidget(s,e,!0):i.coordsIn(s,e)}lineAt(t,e){let{tile:i}=this.tile.resolveBlock(t,e);return i.isLine()?i:null}coordsForChar(t){let{tile:e,offset:i}=this.tile.resolveBlock(t,1);if(!e.isLine())return null;function s(r,o){if(r.isComposite())for(let l of r.children){if(l.length>=o){let a=s(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(r.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==K.LTR,h=0,f=(c,u,d)=>{for(let p=0;ps);p++){let g=c.children[p],m=u+g.length,b=g.dom.getBoundingClientRect(),{height:C}=b;if(d&&!p&&(h+=b.top-d.top),g instanceof Yt)m>i&&f(g,u,b);else if(u>=i&&(h>0&&e.push(-h),e.push(C+h),h=0,o)){let T=g.dom.lastChild,P=T?en(T):[];if(P.length){let A=P[P.length-1],k=a?A.right-b.left:b.right-A.left;k>l&&(l=k,this.minWidth=r,this.minWidthFrom=u,this.minWidthTo=m)}}d&&p==c.children.length-1&&(h+=d.bottom-b.bottom),u=m+g.breakAfter}};return f(this.tile,0,null),e}textDirectionAt(t){let{tile:e}=this.tile.resolveBlock(t,1);return getComputedStyle(e.dom).direction=="rtl"?K.RTL:K.LTR}measureTextSize(){let t=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let h of o.children){if(!h.isText()||/[^ -~]/.test(h.text))return;let f=en(h.dom);if(f.length!=1)return;l+=f[0].width,a=f[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(t)return t;let e=document.createElement("div"),i,s,r;return e.className="cm-line",e.style.width="99999px",e.style.position="absolute",e.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(e);let o=en(e.firstChild)[0];i=e.getBoundingClientRect().height,s=o&&o.width?o.width/27:7,r=o&&o.height?o.height:i,e.remove()}),{lineHeight:i,charWidth:s,textHeight:r}}computeBlockGapDeco(){let t=[],e=this.view.viewState;for(let i=0,s=0;;s++){let r=s==e.viewports.length?null:e.viewports[s],o=r?r.from-1:this.view.state.doc.length;if(o>i){let l=(e.lineBlockAt(o).bottom-e.lineBlockAt(i).top)/this.view.scaleY;t.push(z.replace({widget:new pi(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return z.set(t)}updateDeco(){let t=1,e=this.view.state.facet(Sn).map(r=>(this.dynamicDecorationMap[t++]=typeof r=="function")?r(this.view):r),i=!1,s=this.view.state.facet(mr).map((r,o)=>{let l=typeof r=="function";return l&&(i=!0),l?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[t++]=i,e.push(F.join(s))),this.decorations=[this.editContextFormatting,...e,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];ttypeof r=="function"?r(this.view):r)}scrollIntoView(t){var e;if(t.isSnapshot){let f=this.view.viewState.lineBlockAt(t.range.head);this.view.scrollDOM.scrollTop=f.top-t.yMargin,this.view.scrollDOM.scrollLeft=t.xMargin;return}for(let f of this.view.state.facet(Bl))try{if(f(this.view,t.range,t))return!0}catch(c){Mt(this.view.state,c,"scroll handler")}let{range:i}=t,s=this.coordsAt(i.head,(e=i.assoc)!==null&&e!==void 0?e:i.empty?0:i.head>i.anchor?-1:1),r;if(!s)return;!i.empty&&(r=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(s={left:Math.min(s.left,r.left),top:Math.min(s.top,r.top),right:Math.max(s.right,r.right),bottom:Math.max(s.bottom,r.bottom)});let o=Il(this.view),l={left:s.left-o.left,top:s.top-o.top,right:s.right+o.right,bottom:s.bottom+o.bottom},{offsetWidth:a,offsetHeight:h}=this.view.scrollDOM;if(df(this.view.scrollDOM,l,i.head1&&(s.top>window.pageYOffset+window.visualViewport.offsetTop+window.visualViewport.height||s.bottomi.isWidget()||i.children.some(e);return e(this.tile.resolveBlock(t,1).tile)}destroy(){Hs(this.tile)}};function Hs(n,t){let e=t?.get(n);if(e!=1){e==null&&n.destroy();for(let i of n.children)Hs(i,t)}}function Lf(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function Fl(n,t){let e=n.observer.selectionRange;if(!e.focusNode)return null;let i=gl(e.focusNode,e.focusOffset),s=ml(e.focusNode,e.focusOffset),r=i||s;if(s&&i&&s.node!=i.node){let l=j.get(s.node);if(!l||l.isText()&&l.text!=s.node.nodeValue)r=s;else if(n.docView.lastCompositionAfterCursor){let a=j.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(r=s)}}if(n.docView.lastCompositionAfterCursor=r!=i,!r)return null;let o=t-r.offset;return{from:o,to:o+r.node.nodeValue.length,node:r.node}}function Rf(n,t,e){let i=Fl(n,e);if(!i)return null;let{node:s,from:r,to:o}=i,l=s.nodeValue;if(/[\n\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=t.invertedDesc;return{range:new Tt(a.mapPos(r),a.mapPos(o),r,o),text:s}}function Pf(n,t){return n.nodeType!=1?0:(t&&n.childNodes[t-1].contentEditable=="false"?1:0)|(t{it.from&&(e=!0)}),e}var pi=class extends ve{constructor(t){super(),this.height=t}toDOM(){let t=document.createElement("div");return t.className="cm-gap",this.updateDOM(t),t}eq(t){return t.height==this.height}updateDOM(t){return t.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function Vf(n,t,e=1){let i=n.charCategorizer(t),s=n.doc.lineAt(t),r=t-s.from;if(s.length==0)return w.cursor(t);r==0?e=1:r==s.length&&(e=-1);let o=r,l=r;e<0?o=Q(s.text,r,!1):l=Q(s.text,r);let a=i(s.text.slice(o,l));for(;o>0;){let h=Q(s.text,o,!1);if(i(s.text.slice(h,o))!=a)break;o=h}for(;ln.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((s-e.top-(n.defaultLineHeight-l)*.5)/l);r+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(e.from,e.to);return e.from+To(o,r,n.state.tabSize)}function Ws(n,t,e){let i=n.lineBlockAt(t);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>t)break;if(!(r.tot)return r;(!s||r.type==tt.Text&&(s.type!=r.type||(e<0?r.fromt)))&&(s=r)}}return s||i}return i}function _f(n,t,e,i){let s=Ws(n,t.head,t.assoc||-1),r=!i||s.type!=tt.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(t.assoc<0&&t.head>s.from?t.head-1:t.head);if(r){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(s.from),a=n.posAtCoords({x:e==(l==K.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(a!=null)return w.cursor(a,e?-1:1)}return w.cursor(e?s.to:s.from,e?-1:1)}function zo(n,t,e,i){let s=n.state.doc.lineAt(t.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let l=t,a=null;;){let h=Sf(s,r,o,l,e),f=vl;if(!h){if(s.number==(e?n.state.doc.lines:1))return l;f=` -`,s=n.state.doc.line(s.number+(e?1:-1)),r=n.bidiSpans(s),h=n.visualLineSide(s,!e)}if(a){if(!a(f))return l}else{if(!i)return h;a=i(f)}l=h}}function qf(n,t,e){let i=n.state.charCategorizer(t),s=i(e);return r=>{let o=i(r);return s==St.Space&&(s=o),s==o}}function Kf(n,t,e,i){let s=t.head,r=e?1:-1;if(s==(e?n.state.doc.length:0))return w.cursor(s,t.assoc);let o=t.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(s,t.assoc||((t.empty?e:t.head==t.from)?1:-1)),f=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=r<0?h.top:h.bottom;else{let p=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(s-p.from))),l=(r<0?p.top:p.bottom)+f}let c=a.left+o,u=n.viewState.heightOracle.textHeight>>1,d=i??u;for(let p=0;;p+=u){let g=l+(d+p)*r,m=Vs(n,{x:c,y:g},!1,r);if(e?g>a.bottom:gl:C{if(t>r&&ts(n)),e.from,t.head>e.from?-1:1);return i==e.from?e:w.cursor(i,in.viewState.docHeight)return new wt(n.state.doc.length,-1);if(h=n.elementAtHeight(a),i==null)break;if(h.type==tt.Text){if(i<0?h.ton.viewport.to)break;let u=n.docView.coordsAt(i<0?h.from:h.to,i>0?-1:1);if(u&&(i<0?u.top<=a+r:u.bottom>=a+r))break}let c=n.viewState.heightOracle.textHeight/2;a=i>0?h.bottom+c:h.top-c}if(n.viewport.from>=h.to||n.viewport.to<=h.from){if(e)return null;if(h.type==tt.Text){let c=zf(n,s,h,o,l);return new wt(c,c==h.from?1:-1)}}if(h.type!=tt.Text)return a<(h.top+h.bottom)/2?new wt(h.from,1):new wt(h.to,-1);let f=n.docView.lineAt(h.from,2);return(!f||f.length!=h.length)&&(f=n.docView.lineAt(h.from,-2)),new zs(n,o,l,n.textDirectionAt(h.from)).scanTile(f,h.from)}var zs=class{constructor(t,e,i,s){this.view=t,this.x=e,this.y=i,this.baseDir=s,this.line=null,this.spans=null}bidiSpansAt(t){return(!this.line||this.line.from>t||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+s.from>1;e:if(r.has(p)){let m=i+Math.floor(Math.random()*d);for(let b=0;b1)){if(b.bottomthis.y)(!a||a.top>b.top)&&(a=b),C=-1;else{let T=b.left>this.x?this.x-b.left:b.right(d+d+p)/3)return this.y=l.bottom-1,this.scan(t,e);if(a&&a.top<(d+p+p)/3)return this.y=a.top+1,this.scan(t,e)}let u=(o?this.dirAt(t[h],1):this.baseDir)==K.LTR;return{i:h,after:this.x>(c.left+c.right)/2==u}}scanText(t,e){let i=[];for(let r=0;r{let o=i[r]-e,l=i[r+1]-e;return vi(t.dom,o,l).getClientRects()});return s.after?new wt(i[s.i+1],-1):new wt(i[s.i],1)}scanTile(t,e){if(!t.length)return new wt(e,1);if(t.children.length==1){let l=t.children[0];if(l.isText())return this.scanText(l,e);if(l.isComposite())return this.scanTile(l,e)}let i=[e];for(let l=0,a=e;l{let a=t.children[l];return a.flags&48?null:(a.dom.nodeType==1?a.dom:vi(a.dom,0,a.length)).getClientRects()}),r=t.children[s.i],o=i[s.i];return r.isText()?this.scanText(r,o):r.isComposite()?this.scanTile(r,o):s.after?new wt(i[s.i+1],-1):new wt(o,1)}},We="\uFFFF",_s=class{constructor(t,e){this.points=t,this.view=e,this.text="",this.lineSeparator=e.state.facet($.lineSeparator)}append(t){this.text+=t}lineBreak(){this.text+=We}readRange(t,e){if(!t)return this;let i=t.parentNode;for(let s=t;;){this.findPointBefore(i,s);let r=this.text.length;this.readNode(s);let o=j.get(s),l=s.nextSibling;if(l==e){o?.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=j.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:hn(s))||hn(l)&&(s.nodeName!="BR"||o?.isWidget())&&this.text.length>r)&&!Uf(l,e)&&this.lineBreak(),s=l}return this.findPointBefore(i,e),this}readTextNode(t){let e=t.nodeValue;for(let i of this.points)i.node==t&&(i.pos=this.text.length+Math.min(i.offset,e.length));for(let i=0,s=this.lineSeparator?null:/\r\n?|\n/g;;){let r=-1,o=1,l;if(this.lineSeparator?(r=e.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=s.exec(e))&&(r=l.index,o=l[0].length),this.append(e.slice(i,r<0?e.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==t&&a.pos>this.text.length&&(a.pos-=o-1);i=r+o}}readNode(t){let e=j.get(t),i=e&&e.overrideDOMText;if(i!=null){this.findPointInside(t,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else t.nodeType==3?this.readTextNode(t):t.nodeName=="BR"?t.nextSibling&&this.lineBreak():t.nodeType==1&&this.readRange(t.firstChild,null)}findPointBefore(t,e){for(let i of this.points)i.node==t&&t.childNodes[i.offset]==e&&(i.pos=this.text.length)}findPointInside(t,e){for(let i of this.points)(t.nodeType==3?i.node==t:t.contains(i.node))&&(i.pos=this.text.length+($f(t,i.node,i.offset)?e:0))}};function $f(n,t,e){for(;;){if(!t||e-1;let{impreciseHead:r,impreciseAnchor:o}=t.docView,l=t.state.selection;if(t.state.readOnly&&e>-1)this.newSel=null;else if(e>-1&&(this.bounds=Vl(t.docView.tile,e,i,0))){let a=r||o?[]:Gf(t),h=new _s(a,t);h.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=h.text,this.newSel=Jf(a,this.bounds.from)}else{let a=t.observer.selectionRange,h=r&&r.node==a.focusNode&&r.offset==a.focusOffset||!As(t.contentDOM,a.focusNode)?l.main.head:t.docView.posFromDOM(a.focusNode,a.focusOffset),f=o&&o.node==a.anchorNode&&o.offset==a.anchorOffset||!As(t.contentDOM,a.anchorNode)?l.main.anchor:t.docView.posFromDOM(a.anchorNode,a.anchorOffset),c=t.viewport;if((S.ios||S.chrome)&&l.main.empty&&h!=f&&(c.from>0||c.to-1&&l.ranges.length>1)this.newSel=l.replaceRange(w.range(f,h));else if(t.lineWrapping&&f==h&&!(l.main.empty&&l.main.head==h)&&t.inputState.lastTouchTime>Date.now()-100){let u=t.coordsAtPos(h,-1),d=0;u&&(d=t.inputState.lastTouchY<=u.bottom?-1:1),this.newSel=w.create([w.cursor(h,d)])}else this.newSel=w.single(f,h)}}};function Vl(n,t,e,i){if(n.isComposite()){let s=-1,r=-1,o=-1,l=-1;for(let a=0,h=i,f=i;ae)return Vl(c,t,e,h);if(u>=t&&s==-1&&(s=a,r=h),h>e&&c.dom.parentNode==n.dom){o=a,l=f;break}f=u,h=u+c.breakAfter}return{from:r,to:l<0?i+n.length:l,startDOM:(s?n.children[s-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function zl(n,t){let e,{newSel:i}=t,{state:s}=n,r=s.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(t.bounds){let{from:l,to:a}=t.bounds,h=r.from,f=null;(o===8||S.android&&t.text.length=l&&r.to<=a&&(t.typeOver||c!=t.text)&&c.slice(0,r.from-l)==t.text.slice(0,r.from-l)&&c.slice(r.to-l)==t.text.slice(u=t.text.length-(c.length-(r.to-l)))?e={from:r.from,to:r.to,insert:R.of(t.text.slice(r.from-l,u).split(We))}:(d=_l(c,t.text,h-l,f))&&(S.chrome&&o==13&&d.toB==d.from+2&&t.text.slice(d.from,d.toB)==We+We&&d.toB--,e={from:l+d.from,to:l+d.toA,insert:R.of(t.text.slice(d.from,d.toB).split(We))})}else i&&(!n.hasFocus&&s.facet(Jt)||gn(i,r))&&(i=null);if(!e&&!i)return!1;if((S.mac||S.android)&&e&&e.from==e.to&&e.from==r.head-1&&/^\. ?$/.test(e.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&e.insert.length==2&&(i=w.single(i.main.anchor-1,i.main.head-1)),e={from:e.from,to:e.to,insert:R.of([e.insert.toString().replace("."," ")])}):s.doc.lineAt(r.from).toDate.now()-50?e={from:r.from,to:r.to,insert:s.toText(n.inputState.insertingText)}:S.chrome&&e&&e.from==e.to&&e.from==r.head&&e.insert.toString()==` - `&&n.lineWrapping&&(i&&(i=w.single(i.main.anchor-1,i.main.head-1)),e={from:r.from,to:r.to,insert:R.of([" "])}),e)return yr(n,e,i,o);if(i&&!gn(i,r)){let l=!1,a="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(l=!0),a=n.inputState.lastSelectionOrigin,a=="select.pointer"&&(i=Wl(s.facet(ki).map(h=>h(n)),i))),n.dispatch({selection:i,scrollIntoView:l,userEvent:a}),!0}else return!1}function yr(n,t,e,i=-1){if(S.ios&&n.inputState.flushIOSKey(t))return!0;let s=n.state.selection.main;if(S.android&&(t.to==s.to&&(t.from==s.from||t.from==s.from-1&&n.state.sliceDoc(t.from,s.from)==" ")&&t.insert.length==1&&t.insert.lines==2&&Ke(n.contentDOM,"Enter",13)||(t.from==s.from-1&&t.to==s.to&&t.insert.length==0||i==8&&t.insert.lengths.head)&&Ke(n.contentDOM,"Backspace",8)||t.from==s.from&&t.to==s.to+1&&t.insert.length==0&&Ke(n.contentDOM,"Delete",46)))return!0;let r=t.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=jf(n,t,e));return n.state.facet(Ml).some(a=>a(n,t.from,t.to,r,l))||n.dispatch(l()),!0}function jf(n,t,e){let i,s=n.state,r=s.selection.main,o=-1;if(t.from==t.to&&t.fromr.to){let a=t.fromc(n)),h,a);t.from==f&&(o=f)}if(o>-1)i={changes:t,selection:w.cursor(t.from+t.insert.length,-1)};else if(t.from>=r.from&&t.to<=r.to&&t.to-t.from>=(r.to-r.from)/3&&(!e||e.main.empty&&e.main.from==t.from+t.insert.length)&&n.inputState.composing<0){let a=r.fromt.to?s.sliceDoc(t.to,r.to):"";i=s.replaceSelection(n.state.toText(a+t.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let a=s.changes(t),h=e&&e.main.to<=a.newLength?e.main:void 0;if(s.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&t.to<=r.to+10&&t.to>=r.to-10){let f=n.state.sliceDoc(t.from,t.to),c,u=e&&Fl(n,e.main.head);if(u){let p=t.insert.length-(t.to-t.from);c={from:u.from,to:u.to-p}}else c=n.state.doc.lineAt(r.head);let d=r.to-t.to;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:a,range:h||p.map(a)};let g=p.to-d,m=g-f.length;if(n.state.sliceDoc(m,g)!=f||g>=c.from&&m<=c.to)return{range:p};let b=s.changes({from:m,to:g,insert:t.insert}),C=p.to-r.to;return{changes:b,range:h?w.range(Math.max(0,h.anchor+C),Math.max(0,h.head+C)):p.map(b)}})}else i={changes:a,selection:h&&s.selection.replaceRange(h)}}let l="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=".compose",n.inputState.compositionFirstChange&&(l+=".start",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:l,scrollIntoView:!0})}function _l(n,t,e,i){let s=Math.min(n.length,t.length),r=0;for(;r0&&l>0&&n.charCodeAt(o-1)==t.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,r-Math.min(o,l));e-=o+a-r}if(o=o?r-e:0;r-=a,l=r+(l-o),o=r}else if(l=l?r-e:0;r-=a,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}function Gf(n){let t=[];if(n.root.activeElement!=n.contentDOM)return t;let{anchorNode:e,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return e&&(t.push(new pn(e,i)),(s!=e||r!=i)&&t.push(new pn(s,r))),t}function Jf(n,t){if(n.length==0)return null;let e=n[0].pos,i=n.length==2?n[1].pos:e;return e>-1&&i>-1?w.single(e+t,i+t):null}function gn(n,t){return t.head==n.main.head&&t.anchor==n.main.anchor}var Ks=class{setSelectionOrigin(t){this.lastSelectionOrigin=t,this.lastSelectionTime=Date.now()}constructor(t){this.view=t,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=t.hasFocus,S.safari&&t.contentDOM.addEventListener("input",()=>null),S.gecko&&hc(t.contentDOM.ownerDocument)}handleEvent(t){!ic(this.view,t)||this.ignoreDuringComposition(t)||t.type=="keydown"&&this.keydown(t)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(t.type,t)):this.runHandlers(t.type,t))}runHandlers(t,e){let i=this.handlers[t];if(i){for(let s of i.observers)s(this.view,e);for(let s of i.handlers){if(e.defaultPrevented)break;if(s(this.view,e)){e.preventDefault();break}}}}ensureHandlers(t){let e=Yf(t),i=this.handlers,s=this.view.contentDOM;for(let r in e)if(r!="scroll"){let o=!e[r].handlers.length,l=i[r];l&&o!=!l.handlers.length&&(s.removeEventListener(r,this.handleEvent),l=null),l||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!="scroll"&&!e[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=e}keydown(t){if(this.lastKeyCode=t.keyCode,this.lastKeyTime=Date.now(),t.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&t.keyCode!=27&&Kl.indexOf(t.keyCode)<0&&(this.tabFocusMode=-1),S.android&&S.chrome&&!t.synthetic&&(t.keyCode==13||t.keyCode==8))return this.view.observer.delayAndroidKey(t.key,t.keyCode),!0;let e;return S.ios&&!t.synthetic&&!t.altKey&&!t.metaKey&&!t.shiftKey&&((e=ql.find(i=>i.keyCode==t.keyCode))&&!t.ctrlKey||Xf.indexOf(t.key)>-1&&t.ctrlKey)?(this.pendingIOSKey=e||t,setTimeout(()=>this.flushIOSKey(),250),!0):(t.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(t){let e=this.pendingIOSKey;return!e||e.key=="Enter"&&t&&t.from0?!0:S.safari&&!S.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(t){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=t}update(t){this.view.observer.update(t),this.mouseSelection&&this.mouseSelection.update(t),this.draggedContent&&t.docChanged&&(this.draggedContent=this.draggedContent.map(t.changes)),t.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function _o(n,t){return(e,i)=>{try{return t.call(n,i,e)}catch(s){Mt(e.state,s)}}}function Yf(n){let t=Object.create(null);function e(i){return t[i]||(t[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let l in r){let a=r[l];a&&e(l).handlers.push(_o(i.value,a))}if(o)for(let l in o){let a=o[l];a&&e(l).observers.push(_o(i.value,a))}}for(let i in Ot)e(i).handlers.push(Ot[i]);for(let i in ht)e(i).observers.push(ht[i]);return t}var ql=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],Xf="dthko",Kl=[16,17,18,20,91,92,224,225],Ji=6;function Yi(n){return Math.max(0,n)*.7+8}function Qf(n,t){return Math.max(Math.abs(n.clientX-t.clientX),Math.abs(n.clientY-t.clientY))}var $s=class{constructor(t,e,i,s){this.view=t,this.startEvent=e,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=e,this.scrollParents=ul(t.contentDOM),this.atoms=t.state.facet(ki).map(o=>o(t));let r=t.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=e.shiftKey,this.multiple=t.state.facet($.allowMultipleSelections)&&Zf(t,e),this.dragging=ec(t,e)&&jl(e)==1?null:!1}start(t){this.dragging===!1&&this.select(t)}move(t){if(t.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&Qf(this.startEvent,t)<10)return;this.select(this.lastEvent=t);let e=0,i=0,s=0,r=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=Il(this.view);t.clientX-a.left<=s+Ji?e=-Yi(s-t.clientX):t.clientX+a.right>=o-Ji&&(e=Yi(t.clientX-o)),t.clientY-a.top<=r+Ji?i=-Yi(r-t.clientY):t.clientY+a.bottom>=l-Ji&&(i=Yi(t.clientY-l)),this.setScrollSpeed(e,i)}up(t){this.dragging==null&&this.select(this.lastEvent),this.dragging||t.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let t=this.view.contentDOM.ownerDocument;t.removeEventListener("mousemove",this.move),t.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(t,e){this.scrollSpeed={x:t,y:e},t||e?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:t,y:e}=this.scrollSpeed;t&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=t,t=0),e&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=e,e=0),(t||e)&&this.view.win.scrollBy(t,e),this.dragging===!1&&this.select(this.lastEvent)}select(t){let{view:e}=this,i=Wl(this.atoms,this.style.get(t,this.extend,this.multiple));(this.mustSelect||!i.eq(e.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(t){t.transactions.some(e=>e.isUserEvent("input.type"))?this.destroy():this.style.update(t)&&setTimeout(()=>this.select(this.lastEvent),20)}};function Zf(n,t){let e=n.state.facet(kl);return e.length?e[0](t):S.mac?t.metaKey:t.ctrlKey}function tc(n,t){let e=n.state.facet(Sl);return e.length?e[0](t):S.mac?!t.altKey:!t.ctrlKey}function ec(n,t){let{main:e}=n.state.selection;if(e.empty)return!1;let i=xi(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r=t.clientX&&o.top<=t.clientY&&o.bottom>=t.clientY)return!0}return!1}function ic(n,t){if(!t.bubbles)return!0;if(t.defaultPrevented)return!1;for(let e=t.target,i;e!=n.contentDOM;e=e.parentNode)if(!e||e.nodeType==11||(i=j.get(e))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(t))return!1;return!0}var Ot=Object.create(null),ht=Object.create(null),$l=S.ie&&S.ie_version<15||S.ios&&S.webkit_version<604;function nc(n){let t=n.dom.parentNode;if(!t)return;let e=t.appendChild(document.createElement("textarea"));e.style.cssText="position: fixed; left: -10000px; top: 10px",e.focus(),setTimeout(()=>{n.focus(),e.remove(),Ul(n,e.value)},50)}function Cn(n,t,e){for(let i of n.facet(t))e=i(e,n);return e}function Ul(n,t){t=Cn(n.state,dr,t);let{state:e}=n,i,s=1,r=e.toText(t),o=r.lines==e.selection.ranges.length;if(Us!=null&&e.selection.ranges.every(a=>a.empty)&&Us==r.toString()){let a=-1;i=e.changeByRange(h=>{let f=e.doc.lineAt(h.from);if(f.from==a)return{range:h};a=f.from;let c=e.toText((o?r.line(s++).text:t)+e.lineBreak);return{changes:{from:f.from,insert:c},range:w.cursor(h.from+c.length)}})}else o?i=e.changeByRange(a=>{let h=r.line(s++);return{changes:{from:a.from,to:a.to,insert:h.text},range:w.cursor(a.from+h.length)}}):i=e.replaceSelection(r);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}ht.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};ht.wheel=ht.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};Ot.keydown=(n,t)=>(n.inputState.setSelectionOrigin("select"),t.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);ht.touchstart=(n,t)=>{let e=n.inputState,i=t.targetTouches[0];e.lastTouchTime=Date.now(),i&&(e.lastTouchX=i.clientX,e.lastTouchY=i.clientY),e.setSelectionOrigin("select.pointer")};ht.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};Ot.mousedown=(n,t)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let e=null;for(let i of n.state.facet(Cl))if(e=i(n,t),e)break;if(!e&&t.button==0&&(e=rc(n,t)),e){let i=!n.hasFocus;n.inputState.startMouseSelection(new $s(n,t,e,i)),i&&n.observer.ignore(()=>{dl(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(t),s.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function qo(n,t,e,i){if(i==1)return w.cursor(t,e);if(i==2)return Vf(n.state,t,e);{let s=n.docView.lineAt(t,e),r=n.state.doc.lineAt(s?s.posAtEnd:t),o=s?s.posAtStart:r.from,l=s?s.posAtEnd:r.to;return lDate.now()-400&&Math.abs(t.clientX-n.clientX)<2&&Math.abs(t.clientY-n.clientY)<2?($o+1)%3:1}function rc(n,t){let e=n.posAndSideAtCoords({x:t.clientX,y:t.clientY},!1),i=jl(t),s=n.state.selection;return{update(r){r.docChanged&&(e.pos=r.changes.mapPos(e.pos),s=s.map(r.changes))},get(r,o,l){let a=n.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),h,f=qo(n,a.pos,a.assoc,i);if(e.pos!=a.pos&&!o){let c=qo(n,e.pos,e.assoc,i),u=Math.min(c.from,f.from),d=Math.max(c.to,f.to);f=u1&&(h=oc(s,a.pos))?h:l?s.addRange(f):w.create([f])}}}function oc(n,t){for(let e=0;e=t)return w.create(n.ranges.slice(0,e).concat(n.ranges.slice(e+1)),n.mainIndex==e?0:n.mainIndex-(n.mainIndex>e?1:0))}return null}Ot.dragstart=(n,t)=>{let{selection:{main:e}}=n.state;if(t.target.draggable){let s=n.docView.tile.nearest(t.target);if(s&&s.isWidget()){let r=s.posAtStart,o=r+s.length;(r>=e.to||o<=e.from)&&(e=w.range(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=e,t.dataTransfer&&(t.dataTransfer.setData("Text",Cn(n.state,pr,n.state.sliceDoc(e.from,e.to))),t.dataTransfer.effectAllowed="copyMove"),!1};Ot.dragend=n=>(n.inputState.draggedContent=null,!1);function jo(n,t,e,i){if(e=Cn(n.state,dr,e),!e)return;let s=n.posAtCoords({x:t.clientX,y:t.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&tc(n,t)?{from:r.from,to:r.to}:null,l={from:s,insert:e},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(s,-1),head:a.mapPos(s,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}Ot.drop=(n,t)=>{if(!t.dataTransfer)return!1;if(n.state.readOnly)return!0;let e=t.dataTransfer.files;if(e&&e.length){let i=Array(e.length),s=0,r=()=>{++s==e.length&&jo(n,t,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),r()},l.readAsText(e[o])}return!0}else{let i=t.dataTransfer.getData("Text");if(i)return jo(n,t,i,!0),!0}return!1};Ot.paste=(n,t)=>{if(n.state.readOnly)return!0;n.observer.flush();let e=$l?null:t.clipboardData;return e?(Ul(n,e.getData("text/plain")||e.getData("text/uri-list")),!0):(nc(n),!1)};function lc(n,t){let e=n.dom.parentNode;if(!e)return;let i=e.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=t,i.focus(),i.selectionEnd=t.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function ac(n){let t=[],e=[],i=!1;for(let s of n.selection.ranges)s.empty||(t.push(n.sliceDoc(s.from,s.to)),e.push(s));if(!t.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(t.push(o.text),e.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:Cn(n,pr,t.join(n.lineBreak)),ranges:e,linewise:i}}var Us=null;Ot.copy=Ot.cut=(n,t)=>{if(!fi(n.contentDOM,n.observer.selectionRange))return!1;let{text:e,ranges:i,linewise:s}=ac(n.state);if(!e&&!s)return!1;Us=s?e:null,t.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let r=$l?null:t.clipboardData;return r?(r.clearData(),r.setData("text/plain",e),!0):(lc(n,e),!1)};var Gl=mt.define();function Jl(n,t){let e=[];for(let i of n.facet(Tl)){let s=i(n,t);s&&e.push(s)}return e.length?n.update({effects:e,annotations:Gl.of(!0)}):null}function Yl(n){setTimeout(()=>{let t=n.hasFocus;if(t!=n.inputState.notifiedFocused){let e=Jl(n.state,t);e?n.dispatch(e):n.update([])}},10)}ht.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),Yl(n)};ht.blur=n=>{n.observer.clearSelectionRange(),Yl(n)};ht.compositionstart=ht.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};ht.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,S.chrome&&S.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};ht.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};Ot.beforeinput=(n,t)=>{var e,i;if((t.inputType=="insertText"||t.inputType=="insertCompositionText")&&(n.inputState.insertingText=t.data,n.inputState.insertingTextAt=Date.now()),t.inputType=="insertReplacementText"&&n.observer.editContext){let r=(e=t.dataTransfer)===null||e===void 0?void 0:e.getData("text/plain"),o=t.getTargetRanges();if(r&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return yr(n,{from:a,to:h,insert:n.state.toText(r)},null),!0}}let s;if(S.chrome&&S.android&&(s=ql.find(r=>r.inputType==t.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key=="Backspace"||s.key=="Delete")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return S.ios&&t.inputType=="deleteContentForward"&&n.observer.flushSoon(),S.safari&&t.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>ht.compositionend(n,t),20),!1};var Go=new Set;function hc(n){Go.has(n)||(Go.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}var Jo=["pre-wrap","normal","pre-line","break-spaces"],Je=!1;function Yo(){Je=!1}var js=class{constructor(t){this.lineWrapping=t,this.doc=R.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(t,e){let i=this.doc.lineAt(e).number-this.doc.lineAt(t).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((e-t-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(t){return this.lineWrapping?(1+Math.max(0,Math.ceil((t-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(t){return this.doc=t,this}mustRefreshForWrapping(t){return Jo.indexOf(t)>-1!=this.lineWrapping}mustRefreshForHeights(t){let e=!1;for(let i=0;i-1,a=Math.abs(e-this.lineHeight)>.3||this.lineWrapping!=l||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=l,this.lineHeight=e,this.charWidth=i,this.textHeight=s,this.lineLength=r,a){this.heightSamples={};for(let h=0;h0}set outdated(t){this.flags=(t?2:0)|this.flags&-3}setHeight(t){this.height!=t&&(Math.abs(this.height-t)>nn&&(Je=!0),this.height=t)}replace(t,e,i){return n.of(i)}decomposeLeft(t,e){e.push(this)}decomposeRight(t,e){e.push(this)}applyChanges(t,e,i,s){let r=this,o=i.doc;for(let l=s.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:f,toB:c}=s[l],u=r.lineAt(a,q.ByPosNoHeight,i.setDoc(e),0,0),d=u.to>=h?u:r.lineAt(h,q.ByPosNoHeight,i,0,0);for(c+=d.to-h,h=d.to;l>0&&u.from<=s[l-1].toA;)a=s[l-1].fromA,f=s[l-1].fromB,l--,ar*2){let l=t[e-1];l.break?t.splice(--e,1,l.left,null,l.right):t.splice(--e,1,l.left,l.right),i+=1+l.break,s-=l.size}else if(r>s*2){let l=t[i];l.break?t.splice(i,1,l.left,null,l.right):t.splice(i,1,l.left,l.right),i+=2+l.break,r-=l.size}else break;else if(s=r&&o(this.lineAt(0,q.ByPos,i,s,r))}setMeasuredHeight(t){let e=t.heights[t.index++];e<0?(this.spaceAbove=-e,e=t.heights[t.index++]):this.spaceAbove=0,this.setHeight(e)}updateHeight(t,e=0,i=!1,s){return s&&s.from<=e&&s.more&&this.setMeasuredHeight(s),this.outdated=!1,this}toString(){return`block(${this.length})`}},bt=class n extends yn{constructor(t,e,i){super(t,e,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(t,e){return new At(e,this.length,t+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(t,e,i){let s=i[0];return i.length==1&&(s instanceof n||s instanceof ee&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof ee?s=new n(s.length,this.height,this.spaceAbove):s.height=this.height,this.outdated||(s.outdated=!1),s):ut.of(i)}updateHeight(t,e=0,i=!1,s){return s&&s.from<=e&&s.more?this.setMeasuredHeight(s):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,t.heightForLine(this.length-this.collapsed))+this.breaks*t.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},ee=class n extends ut{constructor(t){super(t,0)}heightMetrics(t,e){let i=t.doc.lineAt(e).number,s=t.doc.lineAt(e+this.length).number,r=s-i+1,o,l=0;if(t.lineWrapping){let a=Math.min(this.height,t.lineHeight*r);o=a/r,this.length>r+1&&(l=(this.height-a)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:l}}blockAt(t,e,i,s){let{firstLine:r,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(e,s);if(e.lineWrapping){let h=s+(t0){let r=i[i.length-1];r instanceof n?i[i.length-1]=new n(r.length+s):i.push(null,new n(s-1))}if(t>0){let r=i[0];r instanceof n?i[0]=new n(t+r.length):i.unshift(new n(t-1),null)}return ut.of(i)}decomposeLeft(t,e){e.push(new n(t-1),null)}decomposeRight(t,e){e.push(null,new n(this.length-t-1))}updateHeight(t,e=0,i=!1,s){let r=e+this.length;if(s&&s.from<=e+this.length&&s.more){let o=[],l=Math.max(e,s.from),a=-1;for(s.from>e&&o.push(new n(s.from-e-1).updateHeight(t,e));l<=r&&s.more;){let f=t.doc.lineAt(l).length;o.length&&o.push(null);let c=s.heights[s.index++],u=0;c<0&&(u=-c,c=s.heights[s.index++]),a==-1?a=c:Math.abs(c-a)>=nn&&(a=-2);let d=new bt(f,c,u);d.outdated=!1,o.push(d),l+=f+1}l<=r&&o.push(null,new n(r-l).updateHeight(t,l));let h=ut.of(o);return(a<0||Math.abs(h.height-this.height)>=nn||Math.abs(a-this.heightMetrics(t,e).perLine)>=nn)&&(Je=!0),mn(this,h)}else(i||this.outdated)&&(this.setHeight(t.heightForGap(e,e+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},Js=class extends ut{constructor(t,e,i){super(t.length+e+i.length,t.height+i.height,e|(t.outdated||i.outdated?2:0)),this.left=t,this.right=i,this.size=t.size+i.size}get break(){return this.flags&1}blockAt(t,e,i,s){let r=i+this.left.height;return tl))return h;let f=e==q.ByPosNoHeight?q.ByPosNoHeight:q.ByPos;return a?h.join(this.right.lineAt(l,f,i,o,l)):this.left.lineAt(l,f,i,s,r).join(h)}forEachLine(t,e,i,s,r,o){let l=s+this.left.height,a=r+this.left.length+this.break;if(this.break)t=a&&this.right.forEachLine(t,e,i,l,a,o);else{let h=this.lineAt(a,q.ByPos,i,s,r);t=t&&h.from<=e&&o(h),e>h.to&&this.right.forEachLine(h.to+1,e,i,l,a,o)}}replace(t,e,i){let s=this.left.length+this.break;if(ethis.left.length)return this.balanced(this.left,this.right.replace(t-s,e-s,i));let r=[];t>0&&this.decomposeLeft(t,r);let o=r.length;for(let l of i)r.push(l);if(t>0&&Xo(r,o-1),e=i&&e.push(null)),t>i&&this.right.decomposeLeft(t-i,e)}decomposeRight(t,e){let i=this.left.length,s=i+this.break;if(t>=s)return this.right.decomposeRight(t-s,e);t2*e.size||e.size>2*t.size?ut.of(this.break?[t,null,e]:[t,e]):(this.left=mn(this.left,t),this.right=mn(this.right,e),this.setHeight(t.height+e.height),this.outdated=t.outdated||e.outdated,this.size=t.size+e.size,this.length=t.length+this.break+e.length,this)}updateHeight(t,e=0,i=!1,s){let{left:r,right:o}=this,l=e+r.length+this.break,a=null;return s&&s.from<=e+r.length&&s.more?a=r=r.updateHeight(t,e,i,s):r.updateHeight(t,e,i),s&&s.from<=l+o.length&&s.more?a=o=o.updateHeight(t,l,i,s):o.updateHeight(t,l,i),a?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function Xo(n,t){let e,i;n[t]==null&&(e=n[t-1])instanceof ee&&(i=n[t+1])instanceof ee&&n.splice(t-1,3,new ee(e.length+1+i.length))}var cc=5,Ys=class n{constructor(t,e){this.pos=t,this.oracle=e,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=t}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(t,e){if(this.lineStart>-1){let i=Math.min(e,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof bt?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new bt(i-this.pos,-1,0)),this.writtenTo=i,e>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=e}point(t,e,i){if(t=cc)&&this.addLineDeco(s,r,o)}else e>t&&this.span(t,e);this.lineEnd>-1&&this.lineEnd-1)return;let{from:t,to:e}=this.oracle.doc.lineAt(this.pos);this.lineStart=t,this.lineEnd=e,this.writtenTot&&this.nodes.push(new bt(this.pos-t,-1,0)),this.writtenTo=this.pos}blankContent(t,e){let i=new ee(e-t);return this.oracle.doc.lineAt(t).to==e&&(i.flags|=4),i}ensureLine(){this.enterLine();let t=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(t instanceof bt)return t;let e=new bt(0,-1,0);return this.nodes.push(e),e}addBlock(t){this.enterLine();let e=t.deco;e&&e.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(t),this.writtenTo=this.pos=this.pos+t.length,e&&e.endSide>0&&(this.covering=t)}addLineDeco(t,e,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,t),s.breaks+=e,this.writtenTo=this.pos=this.pos+i}finish(t){let e=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(e instanceof bt)&&!this.isCovered?this.nodes.push(new bt(0,-1,0)):(this.writtenTof.clientHeight||f.scrollWidth>f.clientWidth)&&c.overflow!="visible"){let u=f.getBoundingClientRect();r=Math.max(r,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?s.innerHeight:a,u.bottom)}h=c.position=="absolute"||c.position=="fixed"?f.offsetParent:f.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:r-e.left,right:Math.max(r,o)-e.left,top:l-(e.top+t),bottom:Math.max(l,a)-(e.top+t)}}function pc(n){let t=n.getBoundingClientRect(),e=n.ownerDocument.defaultView||window;return t.left0&&t.top0}function gc(n,t){let e=n.getBoundingClientRect();return{left:0,right:e.right-e.left,top:t,bottom:e.bottom-(e.top+t)}}var mi=class{constructor(t,e,i,s){this.from=t,this.to=e,this.size=i,this.displaySize=s}static same(t,e){if(t.length!=e.length)return!1;for(let i=0;itypeof s!="function"&&s.class=="cm-lineWrapping");this.heightOracle=new js(i),this.stateDeco=Zo(e),this.heightMap=ut.empty().applyChanges(this.stateDeco,R.empty,this.heightOracle.setDoc(e.doc),[new Tt(0,0,0,e.doc.length)]);for(let s=0;s<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());s++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=z.set(this.lineGaps.map(s=>s.draw(this,!1))),this.scrollParent=t.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let t=[this.viewport],{main:e}=this.state.selection;for(let i=0;i<=1;i++){let s=i?e.head:e.anchor;if(!t.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);t.push(new ze(r,o))}}return this.viewports=t.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let t=this.scaler;return this.scaler=this.heightMap.height<=7e6?Qo:new Zs(this.heightOracle,this.heightMap,this.viewports),t.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,t=>{this.viewportLines.push(hi(t,this.scaler))})}update(t,e=null){this.state=t.state;let i=this.stateDeco;this.stateDeco=Zo(this.state);let s=t.changedRanges,r=Tt.extendWithRanges(s,uc(i,this.stateDeco,t?t.changes:st.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);Yo(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,t.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||Je)&&(t.flags|=2),l?(this.scrollAnchorPos=t.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=r.length?this.mapViewport(this.viewport,t.changes):this.viewport;(e&&(e.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,e));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,t.flags|=this.updateForViewport(),(h||!t.changes.empty||t.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,t.changes))),t.flags|=this.computeVisibleRanges(t.changes),e&&(this.scrollTarget=e),!this.mustEnforceCursorAssoc&&(t.selectionSet||t.focusChanged)&&t.view.lineWrapping&&t.state.selection.main.empty&&t.state.selection.main.assoc&&!t.state.facet(Ol)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:t}=this,e=t.contentDOM,i=window.getComputedStyle(e),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?K.RTL:K.LTR;let o=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent==="refresh",l=e.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,f=0;if(l.width&&l.height){let{scaleX:A,scaleY:k}=cl(e,l);(A>.005&&Math.abs(this.scaleX-A)>.005||k>.005&&Math.abs(this.scaleY-k)>.005)&&(this.scaleX=A,this.scaleY=k,h|=16,o=a=!0)}let c=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=c||this.paddingBottom!=u)&&(this.paddingTop=c,this.paddingBottom=u,h|=18),this.editorWidth!=t.scrollDOM.clientWidth&&(s.lineWrapping&&(a=!0),this.editorWidth=t.scrollDOM.clientWidth,h|=16);let d=ul(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=pl(this.scrollParent||t.win);let g=(this.printing?gc:dc)(e,this.paddingTop),m=g.top-this.pixelViewport.top,b=g.bottom-this.pixelViewport.bottom;this.pixelViewport=g;let C=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(C!=this.inView&&(this.inView=C,C&&(a=!0)),!this.inView&&!this.scrollTarget&&!pc(t.dom))return 0;let T=l.width;if((this.contentDOMWidth!=T||this.editorHeight!=t.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=t.scrollDOM.clientHeight,h|=16),a){let A=t.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(A)&&(o=!0),o||s.lineWrapping&&Math.abs(T-this.contentDOMWidth)>s.charWidth){let{lineHeight:k,charWidth:v,textHeight:N}=t.docView.measureTextSize();o=k>0&&s.refresh(r,k,v,N,Math.max(5,T/v),A),o&&(t.docView.minWidth=0,h|=16)}m>0&&b>0?f=Math.max(m,b):m<0&&b<0&&(f=Math.min(m,b)),Yo();for(let k of this.viewports){let v=k.from==this.viewport.from?A:t.docView.measureVisibleLineHeights(k);this.heightMap=(o?ut.empty().applyChanges(this.stateDeco,R.empty,this.heightOracle,[new Tt(0,0,0,t.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new Gs(k.from,v))}Je&&(h|=2)}let P=!this.viewportIsAppropriate(this.viewport,f)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return P&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(f,this.scrollTarget),h|=this.updateForViewport()),(h&2||P)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,t)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,t.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(t,e){let i=.5-Math.max(-.5,Math.min(.5,t/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new ze(s.lineAt(o-i*1e3,q.ByHeight,r,0,0).from,s.lineAt(l+(1-i)*1e3,q.ByHeight,r,0,0).to);if(e){let{head:h}=e.range;if(ha.to){let f=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),c=s.lineAt(h,q.ByPos,r,0,0),u;e.y=="center"?u=(c.top+c.bottom)/2-f/2:e.y=="start"||e.y=="nearest"&&h=l+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r>1,o=s<<1;if(this.defaultTextDirection!=K.LTR&&!i)return[];let l=[],a=(f,c,u,d)=>{if(c-ff&&bb.from>=u.from&&b.to<=u.to&&Math.abs(b.from-f)b.fromC));if(!m){if(cT.from<=c&&T.to>=c)){let T=e.moveToLineBoundary(w.cursor(c),!1,!0).head;T>f&&(c=T)}let b=this.gapSize(u,f,c,d),C=i||b<2e6?b:2e6;m=new mi(f,c,b,C)}l.push(m)},h=f=>{if(f.length2e6)for(let k of t)k.from>=f.from&&k.fromf.from&&a(f.from,d,f,c),pe.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(t){let e=this.stateDeco;this.lineGaps.length&&(e=e.concat(this.lineGapDeco));let i=[];F.spans(e,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r=this.viewport.from&&t<=this.viewport.to&&this.viewportLines.find(e=>e.from<=t&&e.to>=t)||hi(this.heightMap.lineAt(t,q.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(t){return t>=this.viewportLines[0].top&&t<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(e=>e.top<=t&&e.bottom>=t)||hi(this.heightMap.lineAt(this.scaler.fromDOM(t),q.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(t){let e=this.lineBlockAtHeight(t+8);return e.from>=this.viewport.from||this.viewportLines[0].top-t>200?e:this.viewportLines[0]}elementAtHeight(t){return hi(this.heightMap.blockAt(this.scaler.fromDOM(t),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},ze=class{constructor(t,e){this.from=t,this.to=e}};function mc(n,t,e){let i=[],s=n,r=0;return F.spans(e,n,t,{span(){},point(o,l){o>s&&(i.push({from:s,to:o}),r+=o-s),s=l}},20),s=1)return t[t.length-1].to;let i=Math.floor(n*e);for(let s=0;;s++){let{from:r,to:o}=t[s],l=o-r;if(i<=l)return r+i;i-=l}}function Qi(n,t){let e=0;for(let{from:i,to:s}of n.ranges){if(t<=s){e+=t-i;break}e+=s-i}return e/n.total}function yc(n,t){for(let e of n)if(t(e))return e}var Qo={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function Zo(n){let t=n.facet(Sn).filter(i=>typeof i!="function"),e=n.facet(mr).filter(i=>typeof i!="function");return e.length&&t.push(F.join(e)),t}var Zs=class n{constructor(t,e,i){let s=0,r=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=e.lineAt(l,q.ByPos,t,0,0).top,f=e.lineAt(a,q.ByPos,t,0,0).bottom;return s+=f-h,{from:l,to:a,top:h,bottom:f,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(e.height-s);for(let l of this.viewports)l.domTop=o+(l.top-r)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),r=l.bottom}toDOM(t){for(let e=0,i=0,s=0;;e++){let r=ee.from==t.viewports[i].from&&e.to==t.viewports[i].to):!1}};function hi(n,t){if(t.scale==1)return n;let e=t.toDOM(n.top),i=t.toDOM(n.bottom);return new At(n.from,n.length,e,i-e,Array.isArray(n._content)?n._content.map(s=>hi(s,t)):n._content)}var Zi=M.define({combine:n=>n.join(" ")}),tr=M.define({combine:n=>n.indexOf(!0)>-1}),er=yt.newName(),Xl=yt.newName(),Ql=yt.newName(),Zl={"&light":"."+Xl,"&dark":"."+Ql};function ir(n,t,e){return new yt(t,{finish(i){return/&/.test(i)?i.replace(/&\w*/,s=>{if(s=="&")return n;if(!e||!e[s])throw new RangeError(`Unsupported selector: ${s}`);return e[s]}):n+" "+i}})}var bc=ir("."+er,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Zl),wc={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},ws=S.ie&&S.ie_version<=11,nr=class{constructor(t){this.view=t,this.active=!1,this.editContext=null,this.selectionRange=new Ms,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=t.contentDOM,this.observer=new MutationObserver(e=>{for(let i of e)this.queue.push(i);(S.ie&&S.ie_version<=11||S.ios&&t.composing)&&e.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&S.android&&t.constructor.EDIT_CONTEXT!==!1&&!(S.chrome&&S.chrome_version<126)&&(this.editContext=new sr(t),t.state.facet(Jt)&&(t.contentDOM.editContext=this.editContext.editContext)),ws&&(this.onCharData=e=>{this.queue.push({target:e.target,type:"characterData",oldValue:e.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var e;((e=this.view.docView)===null||e===void 0?void 0:e.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),e.length>0&&e[e.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(e=>{e.length>0&&e[e.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(t){this.view.inputState.runHandlers("scroll",t),this.intersecting&&this.view.measure()}onScroll(t){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(t)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(t){(t.type=="change"||!t.type)&&!t.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(t){if(this.gapIntersection&&(t.length!=this.gaps.length||this.gaps.some((e,i)=>e!=t[i]))){this.gapIntersection.disconnect();for(let e of t)this.gapIntersection.observe(e);this.gaps=t}}onSelectionChange(t){let e=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(Jt)?i.root.activeElement!=this.dom:!fi(this.dom,s))return;let r=s.anchorNode&&i.docView.tile.nearest(s.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(t)){e||(this.selectionChanged=!1);return}(S.ie&&S.ie_version<=11||S.android&&S.chrome)&&!i.state.selection.main.empty&&s.focusNode&&ci(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:t}=this,e=xi(t.root);if(!e)return!1;let i=S.safari&&t.root.nodeType==11&&t.root.activeElement==this.dom&&xc(this.view,e)||e;if(!i||this.selectionRange.eq(i))return!1;let s=fi(this.dom,i);return s&&!this.selectionChanged&&t.inputState.lastFocusTime>Date.now()-200&&t.inputState.lastTouchTime{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&Ke(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||t=="Enter")&&(this.delayedAndroidKey={key:t,keyCode:e,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let t of this.observer.takeRecords())this.queue.push(t);return this.queue}processRecords(){let t=this.pendingRecords();t.length&&(this.queue=[]);let e=-1,i=-1,s=!1;for(let r of t){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),e==-1?{from:e,to:i}=o:(e=Math.min(o.from,e),i=Math.max(o.to,i)))}return{from:e,to:i,typeOver:s}}readChange(){let{from:t,to:e,typeOver:i}=this.processRecords(),s=this.selectionChanged&&fi(this.dom,this.selectionRange);if(t<0&&!s)return null;t>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new qs(this.view,t,e,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(t=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;t&&this.readSelectionRange();let e=this.readChange();if(!e)return this.view.requestMeasure(),!1;let i=this.view.state,s=zl(this.view,e);return this.view.state==i&&(e.domChanged||e.newSel&&!gn(this.view.state.selection,e.newSel.main))&&this.view.update([]),s}readMutation(t){let e=this.view.docView.tile.nearest(t.target);if(!e||e.isWidget())return null;if(e.markDirty(t.type=="attributes"),t.type=="childList"){let i=tl(e,t.previousSibling||t.target.previousSibling,-1),s=tl(e,t.nextSibling||t.target.nextSibling,1);return{from:i?e.posAfter(i):e.posAtStart,to:s?e.posBefore(s):e.posAtEnd,typeOver:!1}}else return t.type=="characterData"?{from:e.posAtStart,to:e.posAtEnd,typeOver:t.target.nodeValue==t.oldValue}:null}setWindow(t){t!=this.win&&(this.removeWindowListeners(this.win),this.win=t,this.addWindowListeners(this.win))}addWindowListeners(t){t.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):t.addEventListener("beforeprint",this.onPrint),t.addEventListener("scroll",this.onScroll),t.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(t){t.removeEventListener("scroll",this.onScroll),t.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):t.removeEventListener("beforeprint",this.onPrint),t.document.removeEventListener("selectionchange",this.onSelectionChange)}update(t){this.editContext&&(this.editContext.update(t),t.startState.facet(Jt)!=t.state.facet(Jt)&&(t.view.contentDOM.editContext=t.state.facet(Jt)?this.editContext.editContext:null))}destroy(){var t,e,i;this.stop(),(t=this.intersection)===null||t===void 0||t.disconnect(),(e=this.gapIntersection)===null||e===void 0||e.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function tl(n,t,e){for(;t;){let i=j.get(t);if(i&&i.parent==n)return i;let s=t.parentNode;t=s!=n.dom?s:e>0?t.nextSibling:t.previousSibling}return null}function el(n,t){let e=t.startContainer,i=t.startOffset,s=t.endContainer,r=t.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return ci(o.node,o.offset,s,r)&&([e,i,s,r]=[s,r,e,i]),{anchorNode:e,anchorOffset:i,focusNode:s,focusOffset:r}}function xc(n,t){if(t.getComposedRanges){let s=t.getComposedRanges(n.root)[0];if(s)return el(n,s)}let e=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),e=s.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),e?el(n,e):null}var sr=class{constructor(t){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(t.state);let e=this.editContext=new window.EditContext({text:t.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,t.state.selection.main.anchor))),selectionEnd:this.toContextPos(t.state.selection.main.head)});this.handlers.textupdate=i=>{let s=t.state.selection.main,{anchor:r,head:o}=s,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);t.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h=a-l>i.text.length;l==this.from&&rthis.to&&(a=r);let f=_l(t.state.sliceDoc(l,a),i.text,(h?s.from:s.to)-l,h?"end":null);if(!f){let u=w.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));gn(u,s)||t.dispatch({selection:u,userEvent:"select"});return}let c={from:f.from+l,to:f.toA+l,insert:R.of(i.text.slice(f.from,f.toB).split(` -`))};if((S.mac||S.android)&&c.from==o-1&&/^\. ?$/.test(i.text)&&t.contentDOM.getAttribute("autocorrect")=="off"&&(c={from:l,to:a,insert:R.of([i.text.replace("."," ")])}),this.pendingContextChange=c,!t.state.readOnly){let u=this.to-this.from+(c.to-c.from+c.insert.length);yr(t,c,w.single(this.toEditorPos(i.selectionStart,u),this.toEditorPos(i.selectionEnd,u)))}this.pendingContextChange&&(this.revertPending(t.state),this.setSelection(t.state)),c.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(e.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(e.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,l=r.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(r.rangeStart),h=this.toEditorPos(r.rangeEnd);if(a{t.inputState.composing<0&&(t.inputState.composing=0,t.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(t.inputState.composing=-1,t.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(t.state)}};for(let i in this.handlers)e.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let s=xi(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(t){let e=0,i=!1,s=this.pendingContextChange;return t.changes.iterChanges((r,o,l,a,h)=>{if(i)return;let f=h.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(h)){s=this.pendingContextChange=null,e+=f,this.to+=f;return}else s=null,this.revertPending(t.state);if(r+=e,o+=e,o<=this.from)this.from+=f,this.to+=f;else if(rthis.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),h.toString()),this.to+=f}e+=f}),s&&!i&&this.revertPending(t.state),!i}update(t){let e=this.pendingContextChange,i=t.startState.selection.main;this.composing&&(this.composing.drifted||!t.changes.touchesRange(i.from,i.to)&&t.transactions.some(s=>!s.isUserEvent("input.type")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=t.changes.mapPos(this.composing.editorBase)):!this.applyEdits(t)||!this.rangeIsValid(t.state)?(this.pendingContextChange=null,this.reset(t.state)):(t.docChanged||t.selectionSet||e)&&this.setSelection(t.state),(t.geometryChanged||t.docChanged||t.selectionSet)&&t.view.requestMeasure(this.measureReq)}resetRange(t){let{head:e}=t.selection.main;this.from=Math.max(0,e-1e4),this.to=Math.min(t.doc.length,e+1e4)}reset(t){this.resetRange(t),this.editContext.updateText(0,this.editContext.text.length,t.doc.sliceString(this.from,this.to)),this.setSelection(t)}revertPending(t){let e=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(e.from),this.toContextPos(e.from+e.insert.length),t.doc.sliceString(e.from,e.to))}setSelection(t){let{main:e}=t.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,e.anchor))),s=this.toContextPos(e.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(t){let{head:e}=t.selection.main;return!(this.from>0&&e-this.from<500||this.to1e4*3)}toEditorPos(t,e=this.to-this.from){t=Math.min(t,e);let i=this.composing;return i&&i.drifted?i.editorBase+(t-i.contextBase):t+this.from}toContextPos(t){let e=this.composing;return e&&e.drifted?e.contextBase+(t-e.editorBase):t-this.from}destroy(){for(let t in this.handlers)this.editContext.removeEventListener(t,this.handlers[t])}},D=class n{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(t={}){var e;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),t.parent&&t.parent.appendChild(this.dom);let{dispatch:i}=t;this.dispatchTransactions=t.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=t.root||pf(t.parent)||document,this.viewState=new bn(this,t.state||$.create(t)),t.scrollTo&&t.scrollTo.is(Gi)&&(this.viewState.scrollTarget=t.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Ve).map(s=>new di(s));for(let s of this.plugins)s.update(this);this.observer=new nr(this),this.inputState=new Ks(this),this.inputState.ensureHandlers(this.plugins),this.docView=new dn(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((e=document.fonts)===null||e===void 0)&&e.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...t){let e=t.length==1&&t[0]instanceof X?t:t.length==1&&Array.isArray(t[0])?t[0]:[this.state.update(...t)];this.dispatchTransactions(e,this)}update(t){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let e=!1,i=!1,s,r=this.state;for(let u of t){if(u.startState!=r)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");r=u.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,l=0,a=null;t.some(u=>u.annotation(Gl))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=Jl(r,o),a||(l=1));let h=this.observer.delayedAndroidKey,f=null;if(h?(this.observer.clearDelayedAndroidKey(),f=this.observer.readChange(),(f&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(f=null)):this.observer.clear(),r.facet($.phrases)!=this.state.facet($.phrases))return this.setState(r);s=cn.create(this,r,t),s.flags|=l;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let u of t){if(c&&(c=c.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection,{x:p,y:g}=this.state.facet(n.cursorScrollMargin);c=new ui(d.empty?d:w.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",g,p)}for(let d of u.effects)d.is(Gi)&&(c=d.value.clip(this.state))}this.viewState.update(s,c),this.bidiCache=wn.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),e=this.docView.update(s),this.state.facet(ai)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(t),this.docView.updateSelection(e,t.some(u=>u.isUserEvent("select.pointer")))}finally{this.updateState=0}if(s.startState.facet(Zi)!=s.state.facet(Zi)&&(this.viewState.mustMeasureContent=!0),(e||i||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),e&&this.docViewUpdate(),!s.empty)for(let u of this.state.facet(Bs))try{u(s)}catch(d){Mt(this.state,d,"update listener")}(a||f)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),f&&!zl(this,f)&&h.force&&Ke(this.contentDOM,h.key,h.keyCode)})}setState(t){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=t;return}this.updateState=2;let e=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new bn(this,t),this.plugins=t.facet(Ve).map(i=>new di(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new dn(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}e&&this.focus(),this.requestMeasure()}updatePlugins(t){let e=t.startState.facet(Ve),i=t.state.facet(Ve);if(e!=i){let s=[];for(let r of i){let o=e.indexOf(r);if(o<0)s.push(new di(r));else{let l=this.plugins[o];l.mustUpdate=t,s.push(l)}}for(let r of this.plugins)r.mustUpdate!=t&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=t;for(let s=0;s-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,t&&this.observer.forceFlush();let e=null,i=this.viewState.scrollParent,s=this.viewState.getScrollOffset(),{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(pl(i||this.win))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure();if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let f=h.map(d=>{try{return d.read(this)}catch(p){return Mt(this.state,p),il}}),c=cn.create(this,this.state,[]),u=!1;c.flags|=a,e?e.flags|=a:e=c,this.updateState=2,c.empty||(this.updatePlugins(c),this.inputState.update(c),this.updateAttrs(),u=this.docView.update(c),u&&this.docViewUpdate());for(let d=0;d1||p<-1)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){s=s+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(e&&!e.empty)for(let l of this.state.facet(Bs))l(e)}get themeClasses(){return er+" "+(this.state.facet(tr)?Ql:Xl)+" "+this.state.facet(Zi)}updateAttrs(){let t=nl(this,Ll,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),e={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(Jt)?"true":"false",class:"cm-content",style:`${S.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(e["aria-readonly"]="true"),nl(this,gr,e);let i=this.observer.ignore(()=>{let s=No(this.contentDOM,this.contentAttrs,e),r=No(this.dom,this.editorAttrs,t);return s||r});return this.editorAttrs=t,this.contentAttrs=e,i}showAnnouncements(t){let e=!0;for(let i of t)for(let s of i.effects)if(s.is(n.announce)){e&&(this.announceDOM.textContent=""),e=!1;let r=this.announceDOM.appendChild(document.createElement("div"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(ai);let t=this.state.facet(n.cspNonce);yt.mount(this.root,this.styleModules.concat(bc).reverse(),t?{nonce:t}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(t){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),t){if(this.measureRequests.indexOf(t)>-1)return;if(t.key!=null){for(let e=0;ei.plugin==t)||null),e&&e.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(t){return this.readMeasured(),this.viewState.elementAtHeight(t)}lineBlockAtHeight(t){return this.readMeasured(),this.viewState.lineBlockAtHeight(t)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(t){return this.viewState.lineBlockAt(t)}get contentHeight(){return this.viewState.contentHeight}moveByChar(t,e,i){return bs(this,t,zo(this,t,e,i))}moveByGroup(t,e){return bs(this,t,zo(this,t,e,i=>qf(this,t.head,i)))}visualLineSide(t,e){let i=this.bidiSpans(t),s=this.textDirectionAt(t.from),r=i[e?i.length-1:0];return w.cursor(r.side(e,s)+t.from,r.forward(!e,s)?1:-1)}moveToLineBoundary(t,e,i=!0){return _f(this,t,e,i)}moveVertically(t,e,i){return bs(this,t,Kf(this,t,e,i))}domAtPos(t,e=1){return this.docView.domAtPos(t,e)}posAtDOM(t,e=0){return this.docView.posFromDOM(t,e)}posAtCoords(t,e=!0){this.readMeasured();let i=Vs(this,t,e);return i&&i.pos}posAndSideAtCoords(t,e=!0){return this.readMeasured(),Vs(this,t,e)}coordsAtPos(t,e=1){this.readMeasured();let i=this.docView.coordsAt(t,e);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(t),r=this.bidiSpans(s),o=r[xt.find(r,t-s.from,-1,e)];return fn(i,o.dir==K.LTR==e>0)}coordsForChar(t){return this.readMeasured(),this.docView.coordsForChar(t)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(t){return!this.state.facet(Dl)||tthis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(t))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(t){if(t.length>vc)return xl(t.length);let e=this.textDirectionAt(t.from),i;for(let r of this.bidiCache)if(r.from==t.from&&r.dir==e&&(r.fresh||wl(r.isolates,i=Fo(this,t))))return r.order;i||(i=Fo(this,t));let s=kf(t.text,e,i);return this.bidiCache.push(new wn(t.from,t.to,e,i,!0,s)),s}get hasFocus(){var t;return(this.dom.ownerDocument.hasFocus()||S.safari&&((t=this.inputState)===null||t===void 0?void 0:t.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{dl(this.contentDOM),this.docView.updateSelection()})}setRoot(t){this._root!=t&&(this._root=t,this.observer.setWindow((t.nodeType==9?t:t.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let t of this.plugins)t.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(t,e={}){var i,s,r,o;return Gi.of(new ui(typeof t=="number"?w.cursor(t):t,(i=e.y)!==null&&i!==void 0?i:"nearest",(s=e.x)!==null&&s!==void 0?s:"nearest",(r=e.yMargin)!==null&&r!==void 0?r:5,(o=e.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:t,scrollLeft:e}=this.scrollDOM,i=this.viewState.scrollAnchorAt(t);return Gi.of(new ui(w.cursor(i.from),"start","start",i.top-t,e,!0))}setTabFocusMode(t){t==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof t=="boolean"?this.inputState.tabFocusMode=t?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+t)}static domEventHandlers(t){return Dt.define(()=>({}),{eventHandlers:t})}static domEventObservers(t){return Dt.define(()=>({}),{eventObservers:t})}static theme(t,e){let i=yt.newName(),s=[Zi.of(i),ai.of(ir(`.${i}`,t))];return e&&e.dark&&s.push(tr.of(!0)),s}static baseTheme(t){return He.lowest(ai.of(ir("."+er,t,Zl)))}static findFromDOM(t){var e;let i=t.querySelector(".cm-content"),s=i&&j.get(i)||j.get(t);return((e=s?.root)===null||e===void 0?void 0:e.view)||null}};D.styleModule=ai;D.inputHandler=Ml;D.clipboardInputFilter=dr;D.clipboardOutputFilter=pr;D.scrollHandler=Bl;D.focusChangeEffect=Tl;D.perLineTextDirection=Dl;D.exceptionSink=Al;D.updateListener=Bs;D.editable=Jt;D.mouseSelectionStyle=Cl;D.dragMovesSelection=Sl;D.clickAddsSelectionRange=kl;D.decorations=Sn;D.blockWrappers=Rl;D.outerDecorations=mr;D.atomicRanges=ki;D.bidiIsolatedRanges=Pl;D.cursorScrollMargin=M.define({combine:n=>{let t=5,e=5;for(let i of n)typeof i=="number"?t=e=i:{x:t,y:e}=i;return{x:t,y:e}}});D.scrollMargins=Nl;D.darkTheme=tr;D.cspNonce=M.define({combine:n=>n.length?n[0]:""});D.contentAttributes=gr;D.editorAttributes=Ll;D.lineWrapping=D.contentAttributes.of({class:"cm-lineWrapping"});D.announce=U.define();var vc=4096,il={},wn=class n{constructor(t,e,i,s,r,o){this.from=t,this.to=e,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(t,e){if(e.empty&&!t.some(r=>r.fresh))return t;let i=[],s=t.length?t[t.length-1].dir:K.LTR;for(let r=Math.max(0,t.length-10);r=0;s--){let r=i[s],o=typeof r=="function"?r(n):r;o&&fr(o,e)}return e}var kc=S.mac?"mac":S.windows?"win":S.linux?"linux":"key";function Sc(n,t){let e=n.split(/-(?!$)/),i=e[e.length-1];i=="Space"&&(i=" ");let s,r,o,l;for(let a=0;ai.concat(s),[]))),e}var te=null,Mc=4e3;function Tc(n,t=kc){let e=Object.create(null),i=Object.create(null),s=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},r=(o,l,a,h,f)=>{var c,u;let d=e[o]||(e[o]=Object.create(null)),p=l.split(/ (?!$)/).map(b=>Sc(b,t));for(let b=1;b{let P=te={view:T,prefix:C,scope:o};return setTimeout(()=>{te==P&&(te=null)},Mc),!0}]})}let g=p.join(" ");s(g,!1);let m=d[g]||(d[g]={preventDefault:!1,stopPropagation:!1,run:((u=(c=d._any)===null||c===void 0?void 0:c.run)===null||u===void 0?void 0:u.slice())||[]});a&&m.run.push(a),h&&(m.preventDefault=!0),f&&(m.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let h of l){let f=e[h]||(e[h]=Object.create(null));f._any||(f._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:c}=o;for(let u in f)f[u].run.push(d=>c(d,rr))}let a=o[t]||o.key;if(a)for(let h of l)r(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(h,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return e}var rr=null;function Dc(n,t,e,i){rr=t;let s=Eo(t),r=go(s,0),o=mo(r)==s.length&&s!=" ",l="",a=!1,h=!1,f=!1;te&&te.view==e&&te.scope==i&&(l=te.prefix+" ",Kl.indexOf(t.keyCode)<0&&(h=!0,te=null));let c=new Set,u=m=>{if(m){for(let b of m.run)if(!c.has(b)&&(c.add(b),b(e)))return m.stopPropagation&&(f=!0),!0;m.preventDefault&&(m.stopPropagation&&(f=!0),h=!0)}return!1},d=n[i],p,g;return d&&(u(d[l+tn(s,t,!o)])?a=!0:o&&(t.altKey||t.metaKey||t.ctrlKey)&&!(S.windows&&t.ctrlKey&&t.altKey)&&!(S.mac&&t.altKey&&!(t.ctrlKey||t.metaKey))&&(p=Gt[t.keyCode])&&p!=s?(u(d[l+tn(p,t,!0)])||t.shiftKey&&(g=Fe[t.keyCode])!=s&&g!=p&&u(d[l+tn(g,t,!1)]))&&(a=!0):o&&t.shiftKey&&u(d[l+tn(s,t,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&f&&t.stopPropagation(),rr=null,a}var xe=class n{constructor(t,e,i,s,r){this.className=t,this.left=e,this.top=i,this.width=s,this.height=r}draw(){let t=document.createElement("div");return t.className=this.className,this.adjust(t),t}update(t,e){return e.className!=this.className?!1:(this.adjust(t),!0)}adjust(t){t.style.left=this.left+"px",t.style.top=this.top+"px",this.width!=null&&(t.style.width=this.width+"px"),t.style.height=this.height+"px"}eq(t){return this.left==t.left&&this.top==t.top&&this.width==t.width&&this.height==t.height&&this.className==t.className}static forRange(t,e,i){if(i.empty){let s=t.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let r=ta(t);return[new n(e,s.left-r.left,s.top-r.top,null,s.bottom-s.top)]}else return Oc(t,e,i)}};function ta(n){let t=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==K.LTR?t.left:t.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:t.top-n.scrollDOM.scrollTop*n.scaleY}}function rl(n,t,e,i){let s=n.coordsAtPos(t,e*2);if(!s)return i;let r=n.dom.getBoundingClientRect(),o=(s.top+s.bottom)/2,l=n.posAtCoords({x:r.left+1,y:o}),a=n.posAtCoords({x:r.right-1,y:o});return l==null||a==null?i:{from:Math.max(i.from,Math.min(l,a)),to:Math.min(i.to,Math.max(l,a))}}function Oc(n,t,e){if(e.to<=n.viewport.from||e.from>=n.viewport.to)return[];let i=Math.max(e.from,n.viewport.from),s=Math.min(e.to,n.viewport.to),r=n.textDirection==K.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=ta(n),h=o.querySelector(".cm-line"),f=h&&window.getComputedStyle(h),c=l.left+(f?parseInt(f.paddingLeft)+Math.min(0,parseInt(f.textIndent)):0),u=l.right-(f?parseInt(f.paddingRight):0),d=Ws(n,i,1),p=Ws(n,s,-1),g=d.type==tt.Text?d:null,m=p.type==tt.Text?p:null;if(g&&(n.lineWrapping||d.widgetLineBreaks)&&(g=rl(n,i,1,g)),m&&(n.lineWrapping||p.widgetLineBreaks)&&(m=rl(n,s,-1,m)),g&&m&&g.from==m.from&&g.to==m.to)return C(T(e.from,e.to,g));{let A=g?T(e.from,null,g):P(d,!1),k=m?T(null,e.to,m):P(p,!0),v=[];return(g||d).to<(m||p).from-(g&&m?1:0)||d.widgetLineBreaks>1&&A.bottom+n.defaultLineHeight/2O&&I.from=nt)break;pt>_&&E(Math.max(Z,_),A==null&&Z<=O,Math.min(pt,nt),k==null&&pt>=H,Ht.dir)}if(_=ft.to+1,_>=nt)break}return W.length==0&&E(O,A==null,H,k==null,n.textDirection),{top:N,bottom:L,horizontal:W}}function P(A,k){let v=l.top+(k?A.top:A.bottom);return{top:v,bottom:v,horizontal:[]}}}function Bc(n,t){return n.constructor==t.constructor&&n.eq(t)}var or=class{constructor(t,e){this.view=t,this.layer=e,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=t.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),e.above&&this.dom.classList.add("cm-layer-above"),e.class&&this.dom.classList.add(e.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(t.state),t.requestMeasure(this.measureReq),e.mount&&e.mount(this.dom,t)}update(t){t.startState.facet(sn)!=t.state.facet(sn)&&this.setOrder(t.state),(this.layer.update(t,this.dom)||t.geometryChanged)&&(this.scale(),t.view.requestMeasure(this.measureReq))}docViewUpdate(t){this.layer.updateOnDocViewUpdate!==!1&&t.requestMeasure(this.measureReq)}setOrder(t){let e=0,i=t.facet(sn);for(;e!Bc(e,this.drawn[i]))){let e=this.dom.firstChild,i=0;for(let s of t)s.update&&e&&s.constructor&&this.drawn[i].constructor&&s.update(e,this.drawn[i])?(e=e.nextSibling,i++):this.dom.insertBefore(s.draw(),e);for(;e;){let s=e.nextSibling;e.remove(),e=s}this.drawn=t,S.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},sn=M.define();function ea(n){return[Dt.define(t=>new or(t,n)),sn.of(n)]}var Ye=M.define({combine(n){return me(n,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(t,e)=>Math.min(t,e),drawRangeCursor:(t,e)=>t||e})}});function ia(n={}){return[Ye.of(n),Ec,Lc,Rc,Ol.of(!0)]}function na(n){return n.startState.facet(Ye)!=n.state.facet(Ye)}var Ec=ea({above:!0,markers(n){let{state:t}=n,e=t.facet(Ye),i=[];for(let s of t.selection.ranges){let r=s==t.selection.main;if(s.empty||e.drawRangeCursor&&!(r&&S.ios&&e.iosSelectionHandles)){let o=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=s.empty?s:w.cursor(s.head,s.assoc);for(let a of xe.forRange(n,o,l))i.push(a)}}return i},update(n,t){n.transactions.some(i=>i.selection)&&(t.style.animationName=t.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let e=na(n);return e&&ol(n.state,t),n.docChanged||n.selectionSet||e},mount(n,t){ol(t.state,n)},class:"cm-cursorLayer"});function ol(n,t){t.style.animationDuration=n.facet(Ye).cursorBlinkRate+"ms"}var Lc=ea({above:!1,markers(n){let t=[],{main:e,ranges:i}=n.state.selection;for(let s of i)if(!s.empty)for(let r of xe.forRange(n,"cm-selectionBackground",s))t.push(r);if(S.ios&&!e.empty&&n.state.facet(Ye).iosSelectionHandles){for(let s of xe.forRange(n,"cm-selectionHandle cm-selectionHandle-start",w.cursor(e.from,1)))t.push(s);for(let s of xe.forRange(n,"cm-selectionHandle cm-selectionHandle-end",w.cursor(e.to,1)))t.push(s)}return t},update(n,t){return n.docChanged||n.selectionSet||n.viewportChanged||na(n)},class:"cm-selectionLayer"}),Rc=He.highest(D.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}}));var mp=/x/.unicode!=null?"gu":"g";function sa(){return Nc}var Pc=z.line({class:"cm-activeLine"}),Nc=Dt.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let t=-1,e=[];for(let i of n.state.selection.ranges){let s=n.lineBlockAt(i.head);s.from>t&&(e.push(Pc.range(s.from)),t=s.from)}return z.set(e)}},{decorations:n=>n.decorations});var yp=D.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:`${7*2}px`,position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}});var Bt=class extends Wt{compare(t){return this==t||this.constructor==t.constructor&&this.eq(t)}eq(t){return!1}destroy(t){}};Bt.prototype.elementClass="";Bt.prototype.toDOM=void 0;Bt.prototype.mapMode=lt.TrackBefore;Bt.prototype.startSide=Bt.prototype.endSide=-1;Bt.prototype.point=!0;var rn=M.define(),Ic=M.define();var on=M.define();var lr=M.define({combine:n=>n.some(t=>t)});function Hc(n){let t=[Fc];return n&&n.fixed===!1&&t.push(lr.of(!0)),t}var Fc=Dt.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(on).map(t=>new xn(n,t)),this.fixed=!n.state.facet(lr);for(let t of this.gutters)t.config.side=="after"?this.getDOMAfter().appendChild(t.dom):this.dom.appendChild(t.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let t=this.prevViewport,e=n.view.viewport,i=Math.min(t.to,e.to)-Math.max(t.from,e.from);this.syncGutters(i<(e.to-e.from)*.8)}if(n.geometryChanged){let t=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=t,this.domAfter&&(this.domAfter.style.minHeight=t)}this.view.state.facet(lr)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let t=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let e=F.iter(this.view.state.facet(rn),this.view.viewport.from),i=[],s=this.gutters.map(r=>new hr(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let o=!0;for(let l of r.type)if(l.type==tt.Text&&o){ar(e,i,l.from);for(let a of s)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of s)a.widget(this.view,l)}else if(r.type==tt.Text){ar(e,i,r.from);for(let o of s)o.line(this.view,r,i)}else if(r.widget)for(let o of s)o.widget(this.view,r);for(let r of s)r.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,t),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let t=n.startState.facet(on),e=n.state.facet(on),i=n.docChanged||n.heightChanged||n.viewportChanged||!F.eq(n.startState.facet(rn),n.state.facet(rn),n.view.viewport.from,n.view.viewport.to);if(t==e)for(let s of this.gutters)s.update(n)&&(i=!0);else{i=!0;let s=[];for(let r of e){let o=t.indexOf(r);o<0?s.push(new xn(this.view,r)):(this.gutters[o].update(n),s.push(this.gutters[o]))}for(let r of this.gutters)r.dom.remove(),s.indexOf(r)<0&&r.destroy();for(let r of s)r.config.side=="after"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=s}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>D.scrollMargins.of(t=>{let e=t.plugin(n);if(!e||e.gutters.length==0||!e.fixed)return null;let i=e.dom.offsetWidth*t.scaleX,s=e.domAfter?e.domAfter.offsetWidth*t.scaleX:0;return t.textDirection==K.LTR?{left:i,right:s}:{right:i,left:s}})});function ll(n){return Array.isArray(n)?n:[n]}function ar(n,t,e){for(;n.value&&n.from<=e;)n.from==e&&t.push(n.value),n.next()}var hr=class{constructor(t,e,i){this.gutter=t,this.height=i,this.i=0,this.cursor=F.iter(t.markers,e.from)}addElement(t,e,i){let{gutter:s}=this,r=(e.top-this.height)/t.scaleY,o=e.height/t.scaleY;if(this.i==s.elements.length){let l=new vn(t,o,r,i);s.elements.push(l),s.dom.appendChild(l.dom)}else s.elements[this.i].update(t,o,r,i);this.height=e.bottom,this.i++}line(t,e,i){let s=[];ar(this.cursor,s,e.from),i.length&&(s=s.concat(i));let r=this.gutter.config.lineMarker(t,e,s);r&&s.unshift(r);let o=this.gutter;s.length==0&&!o.config.renderEmptyElements||this.addElement(t,e,s)}widget(t,e){let i=this.gutter.config.widgetMarker(t,e.widget,e),s=i?[i]:null;for(let r of t.state.facet(Ic)){let o=r(t,e.widget,e);o&&(s||(s=[])).push(o)}s&&this.addElement(t,e,s)}finish(){let t=this.gutter;for(;t.elements.length>this.i;){let e=t.elements.pop();t.dom.removeChild(e.dom),e.destroy()}}},xn=class{constructor(t,e){this.view=t,this.config=e,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in e.domEventHandlers)this.dom.addEventListener(i,s=>{let r=s.target,o;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let a=r.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=s.clientY;let l=t.lineBlockAtHeight(o-t.documentTop);e.domEventHandlers[i](t,l,s)&&s.preventDefault()});this.markers=ll(e.markers(t)),e.initialSpacer&&(this.spacer=new vn(t,0,0,[e.initialSpacer(t)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(t){let e=this.markers;if(this.markers=ll(this.config.markers(t.view)),this.spacer&&this.config.updateSpacer){let s=this.config.updateSpacer(this.spacer.markers[0],t);s!=this.spacer.markers[0]&&this.spacer.update(t.view,0,0,[s])}let i=t.view.viewport;return!F.eq(this.markers,e,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(t):!1)}destroy(){for(let t of this.elements)t.destroy()}},vn=class{constructor(t,e,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(t,e,i,s)}update(t,e,i,s){this.height!=e&&(this.height=e,this.dom.style.height=e+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),Wc(this.markers,s)||this.setMarkers(t,s)}setMarkers(t,e){let i="cm-gutterElement",s=this.dom.firstChild;for(let r=0,o=0;;){let l=o,a=rr(l,a,h)||o(l,a,h):o}return i}})}}),yi=class extends Bt{constructor(t){super(),this.number=t}eq(t){return this.number==t.number}toDOM(){return document.createTextNode(this.number)}};function xs(n,t){return n.state.facet(_e).formatNumber(t,n.state)}var _c=on.compute([_e],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(t){return t.state.facet(Vc)},lineMarker(t,e,i){return i.some(s=>s.toDOM)?null:new yi(xs(t,t.state.doc.lineAt(e.from).number))},widgetMarker:(t,e,i)=>{for(let s of t.state.facet(zc)){let r=s(t,e,i);if(r)return r}return null},lineMarkerChange:t=>t.startState.facet(_e)!=t.state.facet(_e),initialSpacer(t){return new yi(xs(t,al(t.state.doc.lines)))},updateSpacer(t,e){let i=xs(e.view,al(e.view.state.doc.lines));return i==t.number?t:new yi(i)},domEventHandlers:n.facet(_e).domEventHandlers,side:"before"}));function ra(n={}){return[_e.of(n),Hc(),_c]}function al(n){let t=9;for(;t{let t=[],e=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.head).from;s>e&&(e=s,t.push(qc.range(s)))}return F.of(t)});function oa(){return Kc}var $c=0,Si=class{constructor(t,e){this.from=t,this.to=e}},B=class{constructor(t={}){this.id=$c++,this.perNode=!!t.perNode,this.deserialize=t.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=t.combine||null}add(t){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof t!="function"&&(t=ot.match(t)),e=>{let i=t(e);return i===void 0?null:[this,i]}}};B.closedBy=new B({deserialize:n=>n.split(" ")});B.openedBy=new B({deserialize:n=>n.split(" ")});B.group=new B({deserialize:n=>n.split(" ")});B.isolate=new B({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});B.contextHash=new B({perNode:!0});B.lookAhead=new B({perNode:!0});B.mounted=new B({perNode:!0});var Ae=class{constructor(t,e,i,s=!1){this.tree=t,this.overlay=e,this.parser=i,this.bracketed=s}static get(t){return t&&t.props&&t.props[B.mounted.id]}},Uc=Object.create(null),ot=class n{constructor(t,e,i,s=0){this.name=t,this.props=e,this.id=i,this.flags=s}static define(t){let e=t.props&&t.props.length?Object.create(null):Uc,i=(t.top?1:0)|(t.skipped?2:0)|(t.error?4:0)|(t.name==null?8:0),s=new n(t.name||"",e,t.id,i);if(t.props){for(let r of t.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");e[r[0].id]=r[1]}}return s}prop(t){return this.props[t.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(t){if(typeof t=="string"){if(this.name==t)return!0;let e=this.prop(B.group);return e?e.indexOf(t)>-1:!1}return this.id==t}static match(t){let e=Object.create(null);for(let i in t)for(let s of i.split(" "))e[s]=t[i];return i=>{for(let s=i.prop(B.group),r=-1;r<(s?s.length:0);r++){let o=e[r<0?i.name:s[r]];if(o)return o}}}};ot.none=new ot("",Object.create(null),0,8);var Dn=class n{constructor(t){this.types=t;for(let e=0;e0;for(let a=this.cursor(o|J.IncludeAnonymous);;){let h=!1;if(a.from<=r&&a.to>=s&&(!l&&a.type.isAnonymous||e(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(t){return t.perNode?this.props?this.props[t.id]:void 0:this.type.prop(t)}get propValues(){let t=[];if(this.props)for(let e in this.props)t.push([+e,this.props[e]]);return t}balance(t={}){return this.children.length<=8?this:Cr(ot.none,this.children,this.positions,0,this.children.length,0,this.length,(e,i,s)=>new n(this.type,e,i,s,this.propValues),t.makeTree||((e,i,s)=>new n(ot.none,e,i,s)))}static build(t){return Gc(t)}};G.empty=new G(ot.none,[],[],0);var br=class n{constructor(t,e){this.buffer=t,this.index=e}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new n(this.buffer,this.index)}},se=class n{constructor(t,e,i){this.buffer=t,this.length=e,this.set=i}get type(){return ot.none}toString(){let t=[];for(let e=0;e0));a=o[a+3]);return l}slice(t,e,i){let s=this.buffer,r=new Uint16Array(e-t),o=0;for(let l=t,a=0;l=t&&et;case 1:return e<=t&&i>t;case 2:return i>t;case 4:return!0}}function Ci(n,t,e,i){for(var s;n.from==n.to||(e<1?n.from>=t:n.from>t)||(e>-1?n.to<=t:n.to0?l.length:-1;t!=h;t+=e){let f=l[t],c=a[t]+o.from,u;if(!(!(r&J.EnterBracketed&&f instanceof G&&(u=Ae.get(f))&&!u.overlay&&u.bracketed&&i>=c&&i<=c+f.length)&&!fa(s,i,c,c+f.length))){if(f instanceof se){if(r&J.ExcludeBuffers)continue;let d=f.findChild(0,f.buffer.length,e,i-c,s);if(d>-1)return new Ai(new xr(o,f,t,c),null,d)}else if(r&J.IncludeAnonymous||!f.type.isAnonymous||Sr(f)){let d;if(!(r&J.IgnoreMounts)&&(d=Ae.get(f))&&!d.overlay)return new n(d.tree,c,t,o);let p=new n(f,c,t,o);return r&J.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(e<0?f.children.length-1:0,e,i,s,r)}}}if(r&J.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?t=o.index+e:t=e<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(t){return this.nextChild(0,1,t,2)}childBefore(t){return this.nextChild(this._tree.children.length-1,-1,t,-2)}prop(t){return this._tree.prop(t)}enter(t,e,i=0){let s;if(!(i&J.IgnoreOverlays)&&(s=Ae.get(this._tree))&&s.overlay){let r=t-this.from,o=i&J.EnterBracketed&&s.bracketed;for(let{from:l,to:a}of s.overlay)if((e>0||o?l<=r:l=r:a>r))return new n(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,t,e,i)}nextSignificantParent(){let t=this;for(;t.type.isAnonymous&&t._parent;)t=t._parent;return t}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function aa(n,t,e,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(e!=null){for(let o=!1;!o;)if(o=s.type.is(e),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(t)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function wr(n,t,e=t.length-1){for(let i=n;e>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(t[e]&&t[e]!=i.name)return!1;e--}}return!0}var xr=class{constructor(t,e,i,s){this.parent=t,this.buffer=e,this.index=i,this.start=s}},Ai=class n extends On{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(t,e,i){super(),this.context=t,this._parent=e,this.index=i,this.type=t.buffer.set.types[t.buffer.buffer[i]]}child(t,e,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t,e-this.context.start,i);return r<0?null:new n(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(t){return this.child(1,t,2)}childBefore(t){return this.child(-1,t,-2)}prop(t){return this.type.prop(t)}enter(t,e,i=0){if(i&J.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e>0?1:-1,t-this.context.start,e);return r<0?null:new n(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(t){return this._parent?null:this.context.parent.nextChild(this.context.index+t,t,0,4)}get nextSibling(){let{buffer:t}=this.context,e=t.buffer[this.index+3];return e<(this._parent?t.buffer[this._parent.index+3]:t.buffer.length)?new n(this.context,this._parent,e):this.externalSibling(1)}get prevSibling(){let{buffer:t}=this.context,e=this._parent?this._parent.index+4:0;return this.index==e?this.externalSibling(-1):new n(this.context,this._parent,t.findChild(e,this.index,-1,0,4))}get tree(){return null}toTree(){let t=[],e=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];t.push(i.slice(s,r,o)),e.push(0)}return new G(this.type,t,e,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function ca(n){if(!n.length)return null;let t=0,e=n[0];for(let r=1;re.from||o.to=t){let l=new _t(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(Ci(l,t,e,!1))}}return s?ca(s):i}var Mi=class{get name(){return this.type.name}constructor(t,e=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=e&~J.EnterBracketed,t instanceof _t)this.yieldNode(t);else{this._tree=t.context.parent,this.buffer=t.context;for(let i=t._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=t,this.yieldBuf(t.index)}}yieldNode(t){return t?(this._tree=t,this.type=t.type,this.from=t.from,this.to=t.to,!0):!1}yieldBuf(t,e){this.index=t;let{start:i,buffer:s}=this.buffer;return this.type=e||s.set.types[s.buffer[t]],this.from=i+s.buffer[t+1],this.to=i+s.buffer[t+2],!0}yield(t){return t?t instanceof _t?(this.buffer=null,this.yieldNode(t)):(this.buffer=t.context,this.yieldBuf(t.index,t.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(t,e,i){if(!this.buffer)return this.yield(this._tree.nextChild(t<0?this._tree._tree.children.length-1:0,t,e,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],t,e-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(t){return this.enterChild(1,t,2)}childBefore(t){return this.enterChild(-1,t,-2)}enter(t,e,i=this.mode){return this.buffer?i&J.ExcludeBuffers?!1:this.enterChild(1,t,e):this.yield(this._tree.enter(t,e,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&J.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let t=this.mode&J.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(t)}sibling(t){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+t,t,0,4,this.mode)):!1;let{buffer:e}=this.buffer,i=this.stack.length-1;if(t<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(e.findChild(s,this.index,-1,0,4))}else{let s=e.buffer[this.index+3];if(s<(i<0?e.buffer.length:e.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+t,t,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(t){let e,i,{buffer:s}=this;if(s){if(t>0){if(this.index-1)for(let r=e+t,o=t<0?-1:i._tree.children.length;r!=o;r+=t){let l=i._tree.children[r];if(this.mode&J.IncludeAnonymous||l instanceof se||!l.type.isAnonymous||Sr(l))return!1}return!0}move(t,e){if(e&&this.enterChild(t,0,4))return!0;for(;;){if(this.sibling(t))return!0;if(this.atLastNode(t)||!this.parent())return!1}}next(t=!0){return this.move(1,t)}prev(t=!0){return this.move(-1,t)}moveTo(t,e=0){for(;(this.from==this.to||(e<1?this.from>=t:this.from>t)||(e>-1?this.to<=t:this.to=0;){for(let o=t;o;o=o._parent)if(o.index==s){if(s==this.index)return o;e=o,i=r+1;break t}s=this.stack[--r]}for(let s=i;s=0;r--){if(r<0)return wr(this._tree,t,s);let o=i[e.buffer[this.stack[r]]];if(!o.isAnonymous){if(t[s]&&t[s]!=o.name)return!1;s--}}return!0}};function Sr(n){return n.children.some(t=>t instanceof se||!t.type.isAnonymous||Sr(t))}function Gc(n){var t;let{buffer:e,nodeSet:i,maxBufferLength:s=1024,reused:r=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(e)?new br(e,e.length):e,a=i.types,h=0,f=0;function c(A,k,v,N,L,W){let{id:E,start:O,end:H,size:I}=l,_=f,nt=h;if(I<0)if(l.next(),I==-1){let Ut=r[E];v.push(Ut),N.push(O-A);return}else if(I==-3){h=E;return}else if(I==-4){f=E;return}else throw new RangeError(`Unrecognized record size: ${I}`);let ft=a[E],Ht,Z,pt=O-A;if(H-O<=s&&(Z=m(l.pos-k,L))){let Ut=new Uint16Array(Z.size-Z.skip),gt=l.pos-Z.size,Ft=Ut.length;for(;l.pos>gt;)Ft=b(Z.start,Ut,Ft);Ht=new se(Ut,H-Z.start,i),pt=Z.start-A}else{let Ut=l.pos-I;l.next();let gt=[],Ft=[],he=E>=o?E:-1,Ee=0,Ii=H;for(;l.pos>Ut;)he>=0&&l.id==he&&l.size>=0?(l.end<=Ii-s&&(p(gt,Ft,O,Ee,l.end,Ii,he,_,nt),Ee=gt.length,Ii=l.end),l.next()):W>2500?u(O,Ut,gt,Ft):c(O,Ut,gt,Ft,he,W+1);if(he>=0&&Ee>0&&Ee-1&&Ee>0){let to=d(ft,nt);Ht=Cr(ft,gt,Ft,0,gt.length,0,H-O,to,to)}else Ht=g(ft,gt,Ft,H-O,_-H,nt)}v.push(Ht),N.push(pt)}function u(A,k,v,N){let L=[],W=0,E=-1;for(;l.pos>k;){let{id:O,start:H,end:I,size:_}=l;if(_>4)l.next();else{if(E>-1&&H=0;I-=3)O[_++]=L[I],O[_++]=L[I+1]-H,O[_++]=L[I+2]-H,O[_++]=_;v.push(new se(O,L[2]-H,i)),N.push(H-A)}}function d(A,k){return(v,N,L)=>{let W=0,E=v.length-1,O,H;if(E>=0&&(O=v[E])instanceof G){if(!E&&O.type==A&&O.length==L)return O;(H=O.prop(B.lookAhead))&&(W=N[E]+O.length+H)}return g(A,v,N,L,W,k)}}function p(A,k,v,N,L,W,E,O,H){let I=[],_=[];for(;A.length>N;)I.push(A.pop()),_.push(k.pop()+v-L);A.push(g(i.types[E],I,_,W-L,O-W,H)),k.push(L-v)}function g(A,k,v,N,L,W,E){if(W){let O=[B.contextHash,W];E=E?[O].concat(E):[O]}if(L>25){let O=[B.lookAhead,L];E=E?[O].concat(E):[O]}return new G(A,k,v,N,E)}function m(A,k){let v=l.fork(),N=0,L=0,W=0,E=v.end-s,O={size:0,start:0,skip:0};t:for(let H=v.pos-A;v.pos>H;){let I=v.size;if(v.id==k&&I>=0){O.size=N,O.start=L,O.skip=W,W+=4,N+=4,v.next();continue}let _=v.pos-I;if(I<0||_=o?4:0,ft=v.start;for(v.next();v.pos>_;){if(v.size<0)if(v.size==-3||v.size==-4)nt+=4;else break t;else v.id>=o&&(nt+=4);v.next()}L=ft,N+=I,W+=nt}return(k<0||N==A)&&(O.size=N,O.start=L,O.skip=W),O.size>4?O:void 0}function b(A,k,v){let{id:N,start:L,end:W,size:E}=l;if(l.next(),E>=0&&N4){let H=l.pos-(E-4);for(;l.pos>H;)v=b(A,k,v)}k[--v]=O,k[--v]=W-A,k[--v]=L-A,k[--v]=N}else E==-3?h=N:E==-4&&(f=N);return v}let C=[],T=[];for(;l.pos>0;)c(n.start||0,n.bufferStart||0,C,T,-1,0);let P=(t=n.length)!==null&&t!==void 0?t:C.length?T[0]+C[0].length:0;return new G(a[n.topID],C.reverse(),T.reverse(),P)}var ha=new WeakMap;function Tn(n,t){if(!n.isAnonymous||t instanceof se||t.type!=n)return 1;let e=ha.get(t);if(e==null){e=1;for(let i of t.children){if(i.type!=n||!(i instanceof G)){e=1;break}e+=Tn(n,i)}ha.set(t,e)}return e}function Cr(n,t,e,i,s,r,o,l,a){let h=0;for(let p=i;p=f)break;k+=v}if(T==P+1){if(k>f){let v=p[P];d(v.children,v.positions,0,v.children.length,g[P]+C);continue}c.push(p[P])}else{let v=g[T-1]+p[T-1].length-A;c.push(Cr(n,p,g,P,T,A,v,null,a))}u.push(A+C-r)}}return d(t,e,i,s,0),(l||a)(c,u,o)}var Me=class n{constructor(t,e,i,s,r=!1,o=!1){this.from=t,this.to=e,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(t,e=[],i=!1){let s=[new n(0,t.length,t,0,!1,i)];for(let r of e)r.to>t.length&&s.push(r);return s}static applyChanges(t,e,i=128){if(!e.length)return t;let s=[],r=1,o=t.length?t[0]:null;for(let l=0,a=0,h=0;;l++){let f=l=i)for(;o&&o.from=u.from||c<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,c)-h;u=d>=p?null:new n(d,p,u.tree,u.offset+h,l>0,!!f)}if(u&&s.push(u),o.to>c)break;o=rnew Si(s.from,s.to)):[new Si(0,0)]:[new Si(0,t.length)],this.createParse(t,e||[],i)}parse(t,e,i){let s=this.startParse(t,e,i);for(;;){let r=s.advance();if(r)return r}}},kr=class{constructor(t){this.string=t}get length(){return this.string.length}chunk(t){return this.string.slice(t)}get lineChunks(){return!1}read(t,e){return this.string.slice(t,e)}};var Sp=new B({perNode:!0});var Jc=0,Et=class n{constructor(t,e,i,s){this.name=t,this.set=e,this.base=i,this.modified=s,this.id=Jc++}toString(){let{name:t}=this;for(let e of this.modified)e.name&&(t=`${e.name}(${t})`);return t}static define(t,e){let i=typeof t=="string"?t:"?";if(t instanceof n&&(e=t),e?.base)throw new Error("Can not derive from a modified tag");let s=new n(i,[],null,[]);if(s.set.push(s),e)for(let r of e.set)s.set.push(r);return s}static defineModifier(t){let e=new Rn(t);return i=>i.modified.indexOf(e)>-1?i:Rn.get(i.base||i,i.modified.concat(e).sort((s,r)=>s.id-r.id))}},Yc=0,Rn=class n{constructor(t){this.name=t,this.instances=[],this.id=Yc++}static get(t,e){if(!e.length)return t;let i=e[0].instances.find(l=>l.base==t&&Xc(e,l.modified));if(i)return i;let s=[],r=new Et(t.name,s,t,e);for(let l of e)l.instances.push(r);let o=Qc(e);for(let l of t.set)if(!l.modified.length)for(let a of o)s.push(n.get(l,a));return r}};function Xc(n,t){return n.length==t.length&&n.every((e,i)=>e==t[i])}function Qc(n){let t=[[]];for(let e=0;ei.length-e.length)}function pa(n){let t=Object.create(null);for(let e in n){let i=n[e];Array.isArray(i)||(i=[i]);for(let s of e.split(" "))if(s){let r=[],o=2,l=s;for(let c=0;;){if(l=="..."&&c>0&&c+3==s.length){o=1;break}let u=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!u)throw new RangeError("Invalid path: "+s);if(r.push(u[0]=="*"?"":u[0][0]=='"'?JSON.parse(u[0]):u[0]),c+=u[0].length,c==s.length)break;let d=s[c++];if(c==s.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+s);l=s.slice(c)}let a=r.length-1,h=r[a];if(!h)throw new RangeError("Invalid path: "+s);let f=new De(i,o,a>0?r.slice(0,a):null);t[h]=f.sort(t[h])}}return ga.add(t)}var ga=new B({combine(n,t){let e,i,s;for(;n||t;){if(!n||t&&n.depth>=t.depth?(s=t,t=t.next):(s=n,n=n.next),e&&e.mode==s.mode&&!s.context&&!e.context)continue;let r=new De(s.tags,s.mode,s.context);e?e.next=r:i=r,e=r}return i}}),De=class{constructor(t,e,i,s){this.tags=t,this.mode=e,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(t){return!t||t.depth{let o=s;for(let l of r)for(let a of l.set){let h=e[a.id];if(h){o=o?o+" "+h:h;break}}return o},scope:i}}function Zc(n,t){let e=null;for(let i of n){let s=i.style(t);s&&(e=e?e+" "+s:s)}return e}function ma(n,t,e,i=0,s=n.length){let r=new Mr(i,Array.isArray(t)?t:[t],e);r.highlightRange(n.cursor(),i,s,"",r.highlighters),r.flush(s)}var Mr=class{constructor(t,e,i){this.at=t,this.highlighters=e,this.span=i,this.class=""}startSpan(t,e){e!=this.class&&(this.flush(t),t>this.at&&(this.at=t),this.class=e)}flush(t){t>this.at&&this.class&&this.span(this.at,t,this.class)}highlightRange(t,e,i,s,r){let{type:o,from:l,to:a}=t;if(l>=i||a<=e)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=s,f=tu(t)||De.empty,c=Zc(r,f.tags);if(c&&(h&&(h+=" "),h+=c,f.mode==1&&(s+=(s?" ":"")+c)),this.startSpan(Math.max(e,l),h),f.opaque)return;let u=t.tree&&t.tree.prop(B.mounted);if(u&&u.overlay){let d=t.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(m=>!m.scope||m.scope(u.tree.type)),g=t.firstChild();for(let m=0,b=l;;m++){let C=m=T||!t.nextSibling())););if(!C||T>i)break;b=C.to+l,b>e&&(this.highlightRange(d.cursor(),Math.max(e,C.from+l),Math.min(i,b),"",p),this.startSpan(Math.min(i,b),h))}g&&t.parent()}else if(t.firstChild()){u&&(s="");do if(!(t.to<=e)){if(t.from>=i)break;this.highlightRange(t,e,i,s,r),this.startSpan(Math.min(i,t.to),h)}while(t.nextSibling());t.parent()}}};function tu(n){let t=n.type.prop(ga);for(;t&&t.context&&!n.matchContext(t.context);)t=t.next;return t||null}var x=Et.define,Bn=x(),re=x(),ua=x(re),da=x(re),oe=x(),En=x(oe),Ar=x(oe),$t=x(),Te=x($t),qt=x(),Kt=x(),Tr=x(),Di=x(Tr),Ln=x(),y={comment:Bn,lineComment:x(Bn),blockComment:x(Bn),docComment:x(Bn),name:re,variableName:x(re),typeName:ua,tagName:x(ua),propertyName:da,attributeName:x(da),className:x(re),labelName:x(re),namespace:x(re),macroName:x(re),literal:oe,string:En,docString:x(En),character:x(En),attributeValue:x(En),number:Ar,integer:x(Ar),float:x(Ar),bool:x(oe),regexp:x(oe),escape:x(oe),color:x(oe),url:x(oe),keyword:qt,self:x(qt),null:x(qt),atom:x(qt),unit:x(qt),modifier:x(qt),operatorKeyword:x(qt),controlKeyword:x(qt),definitionKeyword:x(qt),moduleKeyword:x(qt),operator:Kt,derefOperator:x(Kt),arithmeticOperator:x(Kt),logicOperator:x(Kt),bitwiseOperator:x(Kt),compareOperator:x(Kt),updateOperator:x(Kt),definitionOperator:x(Kt),typeOperator:x(Kt),controlOperator:x(Kt),punctuation:Tr,separator:x(Tr),bracket:Di,angleBracket:x(Di),squareBracket:x(Di),paren:x(Di),brace:x(Di),content:$t,heading:Te,heading1:x(Te),heading2:x(Te),heading3:x(Te),heading4:x(Te),heading5:x(Te),heading6:x(Te),contentSeparator:x($t),list:x($t),quote:x($t),emphasis:x($t),strong:x($t),link:x($t),monospace:x($t),strikethrough:x($t),inserted:x(),deleted:x(),changed:x(),invalid:x(),meta:Ln,documentMeta:x(Ln),annotation:x(Ln),processingInstruction:x(Ln),definition:Et.defineModifier("definition"),constant:Et.defineModifier("constant"),function:Et.defineModifier("function"),standard:Et.defineModifier("standard"),local:Et.defineModifier("local"),special:Et.defineModifier("special")};for(let n in y){let t=y[n];t instanceof Et&&(t.name=n)}var Mp=Dr([{tag:y.link,class:"tok-link"},{tag:y.heading,class:"tok-heading"},{tag:y.emphasis,class:"tok-emphasis"},{tag:y.strong,class:"tok-strong"},{tag:y.keyword,class:"tok-keyword"},{tag:y.atom,class:"tok-atom"},{tag:y.bool,class:"tok-bool"},{tag:y.url,class:"tok-url"},{tag:y.labelName,class:"tok-labelName"},{tag:y.inserted,class:"tok-inserted"},{tag:y.deleted,class:"tok-deleted"},{tag:y.literal,class:"tok-literal"},{tag:y.string,class:"tok-string"},{tag:y.number,class:"tok-number"},{tag:[y.regexp,y.escape,y.special(y.string)],class:"tok-string2"},{tag:y.variableName,class:"tok-variableName"},{tag:y.local(y.variableName),class:"tok-variableName tok-local"},{tag:y.definition(y.variableName),class:"tok-variableName tok-definition"},{tag:y.special(y.variableName),class:"tok-variableName2"},{tag:y.definition(y.propertyName),class:"tok-propertyName tok-definition"},{tag:y.typeName,class:"tok-typeName"},{tag:y.namespace,class:"tok-namespace"},{tag:y.className,class:"tok-className"},{tag:y.macroName,class:"tok-macroName"},{tag:y.propertyName,class:"tok-propertyName"},{tag:y.operator,class:"tok-operator"},{tag:y.comment,class:"tok-comment"},{tag:y.meta,class:"tok-meta"},{tag:y.invalid,class:"tok-invalid"},{tag:y.punctuation,class:"tok-punctuation"}]);var Or,Xe=new B;function eu(n){return M.define({combine:n?t=>t.concat(n):void 0})}var iu=new B,dt=class{constructor(t,e,i=[],s=""){this.data=t,this.name=s,$.prototype.hasOwnProperty("tree")||Object.defineProperty($.prototype,"tree",{get(){return Rt(this)}}),this.parser=e,this.extension=[Qe.of(this),$.languageData.of((r,o,l)=>{let a=ya(r,o,l),h=a.type.prop(Xe);if(!h)return[];let f=r.facet(h),c=a.type.prop(iu);if(c){let u=a.resolve(o-a.from,l);for(let d of c)if(d.test(u,r)){let p=r.facet(d.facet);return d.type=="replace"?p:p.concat(f)}}return f})].concat(i)}isActiveAt(t,e,i=-1){return ya(t,e,i).type.prop(Xe)==this.data}findRegions(t){let e=t.facet(Qe);if(e?.data==this.data)return[{from:0,to:t.doc.length}];if(!e||!e.allowsNesting)return[];let i=[],s=(r,o)=>{if(r.prop(Xe)==this.data){i.push({from:o,to:o+r.length});return}let l=r.prop(B.mounted);if(l){if(l.tree.prop(Xe)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+r.length});return}else if(l.overlay){let a=i.length;if(s(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;a=this.cursorPos?this.doc.sliceString(t,e):this.string.slice(t-i,e-i)}},Oi=null,Bi=class n{constructor(t,e,i=[],s,r,o,l,a){this.parser=t,this.state=e,this.fragments=i,this.tree=s,this.treeLen=r,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(t,e,i){return new n(t,e,[],G.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Rr(this.state.doc),this.fragments)}work(t,e){return e!=null&&e>=this.state.doc.length&&(e=void 0),this.tree!=G.empty&&this.isDone(e??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof t=="number"){let s=Date.now()+t;t=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),e!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&e=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&this.parse.stopAt(t),this.withContext(()=>{for(;!(e=this.parse.advance()););}),this.treeLen=t,this.tree=e,this.fragments=this.withoutTempSkipped(Me.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(t){let e=Oi;Oi=this;try{return t()}finally{Oi=e}}withoutTempSkipped(t){for(let e;e=this.tempSkipped.pop();)t=ba(t,e.from,e.to);return t}changes(t,e){let{fragments:i,tree:s,treeLen:r,viewport:o,skipped:l}=this;if(this.takeTree(),!t.empty){let a=[];if(t.iterChangedRanges((h,f,c,u)=>a.push({fromA:h,toA:f,fromB:c,toB:u})),i=Me.applyChanges(i,a),s=G.empty,r=0,o={from:t.mapPos(o.from,-1),to:t.mapPos(o.to,1)},this.skipped.length){l=[];for(let h of this.skipped){let f=t.mapPos(h.from,1),c=t.mapPos(h.to,-1);ft.from&&(this.fragments=ba(this.fragments,s,r),this.skipped.splice(i--,1))}return this.skipped.length>=e?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(t,e){this.skipped.push({from:t,to:e})}static getSkippingParser(t){return new class extends Ti{createParse(e,i,s){let r=s[0].from,o=s[s.length-1].to;return{parsedPos:r,advance(){let a=Oi;if(a){for(let h of s)a.tempSkipped.push(h);t&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,t]):t)}return this.parsedPos=o,new G(ot.none,[],[],o-r)},stoppedAt:null,stopAt(){}}}}}isDone(t){t=Math.min(t,this.state.doc.length);let e=this.fragments;return this.treeLen>=t&&e.length&&e[0].from==0&&e[0].to>=t}static get(){return Oi}};function ba(n,t,e){return Me.applyChanges(n,[{fromA:t,toA:e,fromB:t,toB:e}])}var Ei=class n{constructor(t){this.context=t,this.tree=t.tree}apply(t){if(!t.docChanged&&this.tree==this.context.tree)return this;let e=this.context.changes(t.changes,t.state),i=this.context.treeLen==t.startState.doc.length?void 0:Math.max(t.changes.mapPos(this.context.treeLen),e.viewport.to);return e.work(20,i)||e.takeTree(),new n(e)}static init(t){let e=Math.min(3e3,t.doc.length),i=Bi.create(t.facet(Qe).parser,t,{from:0,to:e});return i.work(20,e)||i.takeTree(),new n(i)}};dt.state=Ct.define({create:Ei.init,update(n,t){for(let e of t.effects)if(e.is(dt.setState))return e.value;return t.startState.facet(Qe)!=t.state.facet(Qe)?Ei.init(t.state):n.apply(t)}});var Ca=n=>{let t=setTimeout(()=>n(),500);return()=>clearTimeout(t)};typeof requestIdleCallback<"u"&&(Ca=n=>{let t=-1,e=setTimeout(()=>{t=requestIdleCallback(n,{timeout:400})},100);return()=>t<0?clearTimeout(e):cancelIdleCallback(t)});var Br=typeof navigator<"u"&&(!((Or=navigator.scheduling)===null||Or===void 0)&&Or.isInputPending)?()=>navigator.scheduling.isInputPending():null,nu=Dt.fromClass(class{constructor(t){this.view=t,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(t){let e=this.view.state.field(dt.state).context;(e.updateViewport(t.view.viewport)||this.view.viewport.to>e.treeLen)&&this.scheduleWork(),(t.docChanged||t.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(e)}scheduleWork(){if(this.working)return;let{state:t}=this.view,e=t.field(dt.state);(e.tree!=e.context.tree||!e.context.isDone(t.doc.length))&&(this.working=Ca(this.work))}work(t){this.working=null;let e=Date.now();if(this.chunkEnds+1e3,a=r.context.work(()=>Br&&Br()||Date.now()>o,s+(l?0:1e5));this.chunkBudget-=Date.now()-e,(a||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:dt.setState.of(new Ei(r.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(t){t.scheduleOn&&(this.workScheduled++,t.scheduleOn.then(()=>this.scheduleWork()).catch(e=>Mt(this.view.state,e)).then(()=>this.workScheduled--),t.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Qe=M.define({combine(n){return n.length?n[0]:null},enables:n=>[dt.state,nu,D.contentAttributes.compute([n],t=>{let e=t.facet(n);return e&&e.name?{"data-language":e.name}:{}})]});var su=M.define(),ti=M.define({combine:n=>{if(!n.length)return" ";let t=n[0];if(!t||/\S/.test(t)||Array.from(t).some(e=>e!=t[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return t}});function le(n){let t=n.facet(ti);return t.charCodeAt(0)==9?n.tabSize*t.length:t.length}function ei(n,t){let e="",i=n.tabSize,s=n.facet(ti)[0];if(s==" "){for(;t>=i;)e+=" ",t-=i;s=" "}for(let r=0;r=t?ru(n,e,t):null}var Oe=class{constructor(t,e={}){this.state=t,this.options=e,this.unit=le(t)}lineAt(t,e=1){let i=this.state.doc.lineAt(t),{simulateBreak:s,simulateDoubleBreak:r}=this.options;return s!=null&&s>=i.from&&s<=i.to?r&&s==t?{text:"",from:t}:(e<0?s-1&&(r+=o-this.countColumn(i,i.search(/\S|$/))),r}countColumn(t,e=t.length){return ye(t,this.state.tabSize,e)}lineIndent(t,e=1){let{text:i,from:s}=this.lineAt(t,e),r=this.options.overrideIndentation;if(r){let o=r(s);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},Aa=new B;function ru(n,t,e){let i=t.resolveStack(e),s=t.resolveInner(e,-1).resolve(e,0).enterUnfinishedNodesBefore(e);if(s!=i.node){let r=[];for(let o=s;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)r.push(o);for(let o=r.length-1;o>=0;o--)i={node:r[o],next:i}}return Ma(i,n,e)}function Ma(n,t,e){for(let i=n;i;i=i.next){let s=lu(i.node);if(s)return s(Pr.create(t,e,i))}return 0}function ou(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function lu(n){let t=n.type.prop(Aa);if(t)return t;let e=n.firstChild,i;if(e&&(i=e.type.prop(B.closedBy))){let s=n.lastChild,r=s&&i.indexOf(s.name)>-1;return o=>cu(o,!0,1,void 0,r&&!ou(o)?s.from:void 0)}return n.parent==null?au:null}function au(){return 0}var Pr=class n extends Oe{constructor(t,e,i){super(t.state,t.options),this.base=t,this.pos=e,this.context=i}get node(){return this.context.node}static create(t,e,i){return new n(t,e,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(t){let e=this.state.doc.lineAt(t.from);for(;;){let i=t.resolve(e.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(hu(i,t))break;e=this.state.doc.lineAt(i.from)}return this.lineIndent(e.from)}continue(){return Ma(this.context.next,this.base,this.pos)}};function hu(n,t){for(let e=t;e;e=e.parent)if(n==e)return!0;return!1}function fu(n){let t=n.node,e=t.childAfter(t.from),i=t.lastChild;if(!e)return null;let s=n.options.simulateBreak,r=n.state.doc.lineAt(e.from),o=s==null||s<=r.from?r.to:Math.min(r.to,s);for(let l=e.to;;){let a=t.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let h=/^ */.exec(r.text.slice(e.to-r.from))[0].length;return{from:e.from,to:e.to+h}}l=a.to}}function cu(n,t,e,i,s){let r=n.textAfter,o=r.match(/^\s*/)[0].length,l=i&&r.slice(o,o+i.length)==i||s==n.pos+o,a=t?fu(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*e)}var uu=200;function Ta(){return $.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let t=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!t.length)return n;let e=n.newDoc,{head:i}=n.newSelection.main,s=e.lineAt(i);if(i>s.from+uu)return n;let r=e.sliceString(s.from,i);if(!t.some(h=>h.test(r)))return n;let{state:o}=n,l=-1,a=[];for(let{head:h}of o.selection.ranges){let f=o.doc.lineAt(h);if(f.from==l)continue;l=f.from;let c=In(o,f.from);if(c==null)continue;let u=/^\s*/.exec(f.text)[0],d=ei(o,c);u!=d&&a.push({from:f.from,to:f.from+u.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}var Ze=class n{constructor(t,e){this.specs=t;let i;function s(l){let a=yt.newName();return(i||(i=Object.create(null)))["."+a]=l,a}let r=typeof e.all=="string"?e.all:e.all?s(e.all):void 0,o=e.scope;this.scope=o instanceof dt?l=>l.prop(Xe)==o.data:o?l=>l==o:void 0,this.style=Dr(t.map(l=>({tag:l.tag,class:l.class||s(Object.assign({},l,{tag:null}))})),{all:r}).style,this.module=i?new yt(i):null,this.themeType=e.themeType}static define(t,e){return new n(t,e||{})}},Nr=M.define(),Da=M.define({combine(n){return n.length?[n[0]]:null}});function Er(n){let t=n.facet(Nr);return t.length?t:n.facet(Da)}function Hn(n,t){let e=[du],i;return n instanceof Ze&&(n.module&&e.push(D.styleModule.of(n.module)),i=n.themeType),t?.fallback?e.push(Da.of(n)):i?e.push(Nr.computeN([D.darkTheme],s=>s.facet(D.darkTheme)==(i=="dark")?[n]:[])):e.push(Nr.of(n)),e}var Ir=class{constructor(t){this.markCache=Object.create(null),this.tree=Rt(t.state),this.decorations=this.buildDeco(t,Er(t.state)),this.decoratedTo=t.viewport.to}update(t){let e=Rt(t.state),i=Er(t.state),s=i!=Er(t.startState),{viewport:r}=t.view,o=t.changes.mapPos(this.decoratedTo,1);e.length=r.to?(this.decorations=this.decorations.map(t.changes),this.decoratedTo=o):(e!=this.tree||t.viewportChanged||s)&&(this.tree=e,this.decorations=this.buildDeco(t.view,i),this.decoratedTo=r.to)}buildDeco(t,e){if(!e||!this.tree.length)return z.none;let i=new ge;for(let{from:s,to:r}of t.visibleRanges)ma(this.tree,e,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=z.mark({class:a})))},s,r);return i.finish()}},du=He.high(Dt.fromClass(Ir,{decorations:n=>n.decorations})),Oa=Ze.define([{tag:y.meta,color:"#404740"},{tag:y.link,textDecoration:"underline"},{tag:y.heading,textDecoration:"underline",fontWeight:"bold"},{tag:y.emphasis,fontStyle:"italic"},{tag:y.strong,fontWeight:"bold"},{tag:y.strikethrough,textDecoration:"line-through"},{tag:y.keyword,color:"#708"},{tag:[y.atom,y.bool,y.url,y.contentSeparator,y.labelName],color:"#219"},{tag:[y.literal,y.inserted],color:"#164"},{tag:[y.string,y.deleted],color:"#a11"},{tag:[y.regexp,y.escape,y.special(y.string)],color:"#e40"},{tag:y.definition(y.variableName),color:"#00f"},{tag:y.local(y.variableName),color:"#30a"},{tag:[y.typeName,y.namespace],color:"#085"},{tag:y.className,color:"#167"},{tag:[y.special(y.variableName),y.macroName],color:"#256"},{tag:y.definition(y.propertyName),color:"#00c"},{tag:y.comment,color:"#940"},{tag:y.invalid,color:"#f00"}]),pu=D.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Ba=1e4,Ea="()[]{}",La=M.define({combine(n){return me(n,{afterCursor:!0,brackets:Ea,maxScanDistance:Ba,renderMatch:yu})}}),gu=z.mark({class:"cm-matchingBracket"}),mu=z.mark({class:"cm-nonmatchingBracket"});function yu(n){let t=[],e=n.matched?gu:mu;return t.push(e.range(n.start.from,n.start.to)),n.end&&t.push(e.range(n.end.from,n.end.to)),t}function wa(n){let t=[],e=n.facet(La);for(let i of n.selection.ranges){if(!i.empty)continue;let s=Lt(n,i.head,-1,e)||i.head>0&&Lt(n,i.head-1,1,e)||e.afterCursor&&(Lt(n,i.head,1,e)||i.headn.decorations}),wu=[bu,pu];function Ra(n={}){return[La.of(n),wu]}var xu=new B;function Hr(n,t,e){let i=n.prop(t<0?B.openedBy:B.closedBy);if(i)return i;if(n.name.length==1){let s=e.indexOf(n.name);if(s>-1&&s%2==(t<0?1:0))return[e[s+t]]}return null}function Fr(n){let t=n.type.prop(xu);return t?t(n.node):n}function Lt(n,t,e,i={}){let s=i.maxScanDistance||Ba,r=i.brackets||Ea,o=Rt(n),l=o.resolveInner(t,e);for(let a=l;a;a=a.parent){let h=Hr(a.type,e,r);if(h&&a.from0?t>=f.from&&tf.from&&t<=f.to))return vu(n,t,e,a,f,h,r)}}return ku(n,t,e,o,l.type,s,r)}function vu(n,t,e,i,s,r,o){let l=i.parent,a={from:s.from,to:s.to},h=0,f=l?.cursor();if(f&&(e<0?f.childBefore(i.from):f.childAfter(i.to)))do if(e<0?f.to<=i.from:f.from>=i.to){if(h==0&&r.indexOf(f.type.name)>-1&&f.from0)return null;let h={from:e<0?t-1:t,to:e>0?t+1:t},f=n.doc.iterRange(t,e>0?n.doc.length:0),c=0;for(let u=0;!f.next().done&&u<=r;){let d=f.value;e<0&&(u+=d.length);let p=t+u*e;for(let g=e>0?0:d.length-1,m=e>0?d.length:-1;g!=m;g+=e){let b=o.indexOf(d[g]);if(!(b<0||i.resolveInner(p+g,1).type!=s))if(b%2==0==e>0)c++;else{if(c==1)return{start:h,end:{from:p+g,to:p+g+1},matched:b>>1==a>>1};c--}}e>0&&(u+=d.length)}return f.done?{start:h,matched:!1}:null}function xa(n,t,e,i=0,s=0){t==null&&(t=n.search(/[^\s\u00a0]/),t==-1&&(t=n.length));let r=s;for(let o=i;o=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.pose}eatSpace(){let t=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>t}skipToEnd(){this.pos=this.string.length}skipTo(t){let e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0}backUp(t){this.pos-=t}column(){return this.lastColumnPosi?o.toLowerCase():o,r=this.string.substr(this.pos,t.length);return s(r)==s(t)?(e!==!1&&(this.pos+=t.length),!0):null}else{let s=this.string.slice(this.pos).match(t);return s&&s.index>0?null:(s&&e!==!1&&(this.pos+=s[0].length),s)}}current(){return this.string.slice(this.start,this.pos)}};function Su(n){return{name:n.name||"",token:n.token,blankLine:n.blankLine||(()=>{}),startState:n.startState||(()=>!0),copyState:n.copyState||Cu,indent:n.indent||(()=>null),languageData:n.languageData||{},tokenTable:n.tokenTable||zr,mergeTokens:n.mergeTokens!==!1}}function Cu(n){if(typeof n!="object")return n;let t={};for(let e in n){let i=n[e];t[e]=i instanceof Array?i.slice():i}return t}var va=new WeakMap,Li=class n extends dt{constructor(t){let e=eu(t.languageData),i=Su(t),s,r=new class extends Ti{createParse(o,l,a){return new Wr(s,o,l,a)}};super(e,r,[],t.name),this.topNode=Du(e,this),s=this,this.streamParser=i,this.stateAfter=new B({perNode:!0}),this.tokenTable=t.tokenTable?new Nn(i.tokenTable):Tu}static define(t){return new n(t)}getIndent(t){let e,{overrideIndentation:i}=t.options;i&&(e=va.get(t.state),e!=null&&e1e4)return null;for(;r=i&&e+t.length<=s&&t.prop(n.stateAfter);if(r)return{state:n.streamParser.copyState(r),pos:e+t.length};for(let o=t.children.length-1;o>=0;o--){let l=t.children[o],a=e+t.positions[o],h=l instanceof G&&a=t.length)return t;!s&&e==0&&t.type==n.topNode&&(s=!0);for(let r=t.children.length-1;r>=0;r--){let o=t.positions[r],l=t.children[r],a;if(oe&&Vr(n,r.tree,0-r.offset,e,l),h;if(a&&a.pos<=i&&(h=Pa(n,r.tree,e+r.offset,a.pos+r.offset,!1)))return{state:a.state,tree:h}}return{state:n.streamParser.startState(s?le(s):4),tree:G.empty}}var Wr=class{constructor(t,e,i,s){this.lang=t,this.input=e,this.fragments=i,this.ranges=s,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=s[s.length-1].to;let r=Bi.get(),o=s[0].from,{state:l,tree:a}=Au(t,i,o,this.to,r?.state);this.state=l,this.parsedPos=this.chunkStart=o+a.length;for(let h=0;hh.from<=r.viewport.from&&h.to>=r.viewport.from)&&(this.state=this.lang.streamParser.startState(le(r.state)),r.skipUntilInView(this.parsedPos,r.viewport.from),this.parsedPos=r.viewport.from),this.moveRangeIndex()}advance(){let t=Bi.get(),e=this.stoppedAt==null?this.to:Math.min(this.to,this.stoppedAt),i=Math.min(e,this.chunkStart+512);for(t&&(i=Math.min(i,t.viewport.to));this.parsedPos=e?this.finish():t&&this.parsedPos>=t.viewport.to?(t.skipUntilInView(this.parsedPos,e),this.finish()):null}stopAt(t){this.stoppedAt=t}lineAfter(t){let e=this.input.chunk(t);if(this.input.lineChunks)e==` +`){[t,e]=Ie(this,t,e);let s="";for(let r=0,o=0;rt&&r&&(s+=i),to&&(s+=l.sliceString(t-o,e-o,i)),o=a+1}return s}flatten(t){for(let e of this.children)e.flatten(t)}scanIdentical(t,e){if(!(t instanceof n))return 0;let i=0,[s,r,o,l]=e>0?[0,0,this.children.length,t.children.length]:[this.children.length-1,t.children.length-1,-1,-1];for(;;s+=e,r+=e){if(s==o||r==l)return i;let a=this.children[s],h=t.children[r];if(a!=h)return i+a.scanIdentical(h,e);i+=a.length+1}}static from(t,e=t.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of t)i+=d.lines;if(i<32){let d=[];for(let p of t)p.flatten(d);return new ct(d,e)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,f=[];function c(d){let p;if(d.lines>r&&d instanceof n)for(let g of d.children)c(g);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof ct&&a&&(p=f[f.length-1])instanceof ct&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,f[f.length-1]=new ct(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,f.push(d))}function u(){a!=0&&(l.push(f.length==1?f[0]:n.from(f,h)),h=-1,a=f.length=0)}for(let d of t)c(d);return u(),l.length==1?l[0]:new n(l,e)}};R.empty=new ct([""],0);function tf(n){let t=-1;for(let e of n)t+=e.length+1;return t}function Wi(n,t,e=0,i=1e9){for(let s=0,r=0,o=!0;r=e&&(a>i&&(l=l.slice(0,i-s)),s0?1:(t instanceof ct?t.text.length:t.children.length)<<1]}nextInner(t,e){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof ct?s.text.length:s.children.length;if(o==(e>0?l:0)){if(i==0)return this.done=!0,this.value="",this;e>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(e>0?0:1)){if(this.offsets[i]+=e,t==0)return this.lineBreak=!0,this.value=` +`,this;t--}else if(s instanceof ct){let a=s.text[o+(e<0?-1:0)];if(this.offsets[i]+=e,a.length>Math.max(0,t))return this.value=t==0?a:e>0?a.slice(t):a.slice(0,a.length-t),this;t-=a.length}else{let a=s.children[o+(e<0?-1:0)];t>a.length?(t-=a.length,this.offsets[i]+=e):(e<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(e>0?1:(a instanceof ct?a.text.length:a.children.length)<<1))}}}next(t=0){return t<0&&(this.nextInner(-t,-this.dir),t=this.value.length),this.nextInner(t,this.dir)}},zi=class{constructor(t,e,i){this.value="",this.done=!1,this.cursor=new ue(t,e>i?-1:1),this.pos=e>i?t.length:0,this.from=Math.min(e,i),this.to=Math.max(e,i)}nextInner(t,e){if(e<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;t+=Math.max(0,e<0?this.pos-this.to:this.from-this.pos);let i=e<0?this.pos-this.from:this.to-this.pos;t>i&&(t=i),i-=t;let{value:s}=this.cursor.next(t);return this.pos+=(s.length+t)*e,this.value=s.length<=i?s:e<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(t=0){return t<0?t=Math.max(t,this.from-this.pos):t>0&&(t=Math.min(t,this.to-this.pos)),this.nextInner(t,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},_i=class{constructor(t){this.inner=t,this.afterBreak=!0,this.value="",this.done=!1}next(t=0){let{done:e,lineBreak:i,value:s}=this.inner.next(t);return e&&this.afterBreak?(this.value="",this.afterBreak=!1):e?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(R.prototype[Symbol.iterator]=function(){return this.iter()},ue.prototype[Symbol.iterator]=zi.prototype[Symbol.iterator]=_i.prototype[Symbol.iterator]=function(){return this});var Qn=class{constructor(t,e,i,s){this.from=t,this.to=e,this.number=i,this.text=s}get length(){return this.to-this.from}};function Ie(n,t,e){return t=Math.max(0,Math.min(n.length,t)),[t,Math.max(t,Math.min(n.length,e))]}function Q(n,t,e=!0,i=!0){return fo(n,t,e,i)}function ef(n){return n>=56320&&n<57344}function nf(n){return n>=55296&&n<56320}function xo(n,t){let e=n.charCodeAt(t);if(!nf(e)||t+1==n.length)return e;let i=n.charCodeAt(t+1);return ef(i)?(e-55296<<10)+(i-56320)+65536:e}function vo(n){return n<65536?1:2}var Zn=/\r\n?|\n/,lt=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(lt||(lt={})),jt=class n{constructor(t){this.sections=t}get length(){let t=0;for(let e=0;et)return r+(t-s);r+=l}else{if(i!=lt.Simple&&h>=t&&(i==lt.TrackDel&&st||i==lt.TrackBefore&&st))return null;if(h>t||h==t&&e<0&&!l)return t==s||e<0?r:r+a;r+=a}s=h}if(t>s)throw new RangeError(`Position ${t} is out of range for changeset of length ${s}`);return r}touchesRange(t,e=t){for(let i=0,s=0;i=0&&s<=e&&l>=t)return se?"cover":!0;s=l}return!1}toString(){let t="";for(let e=0;e=0?":"+s:"")}return t}toJSON(){return this.sections}static fromJSON(t){if(!Array.isArray(t)||t.length%2||t.some(e=>typeof e!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new n(t)}static create(t){return new n(t)}},st=class n extends jt{constructor(t,e){super(t),this.inserted=e}apply(t){if(this.length!=t.length)throw new RangeError("Applying change set to a document with the wrong length");return ts(this,(e,i,s,r,o)=>t=t.replace(s,s+(i-e),o),!1),t}mapDesc(t,e=!1){return es(this,t,e,!0)}invert(t){let e=this.sections.slice(),i=[];for(let s=0,r=0;s=0){e[s]=l,e[s+1]=o;let a=s>>1;for(;i.length0&&Zt(i,e,r.text),r.forward(f),l+=f}let h=t[o++];for(;l>1].toJSON()))}return t}static of(t,e,i){let s=[],r=[],o=0,l=null;function a(f=!1){if(!f&&!s.length)return;ou||c<0||u>e)throw new RangeError(`Invalid change range ${c} to ${u} (in doc of length ${e})`);let p=d?typeof d=="string"?R.of(d.split(i||Zn)):d:R.empty,g=p.length;if(c==u&&g==0)return;co&&et(s,c-o,-1),et(s,u-c,g),Zt(r,s,p),o=u}}return h(t),a(!l),l}static empty(t){return new n(t?[t,-1]:[],[])}static fromJSON(t){if(!Array.isArray(t))throw new RangeError("Invalid JSON representation of ChangeSet");let e=[],i=[];for(let s=0;sl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)e.push(r[0],0);else{for(;i.length=0&&e<=0&&e==n[s+1]?n[s]+=t:s>=0&&t==0&&n[s]==0?n[s+1]+=e:i?(n[s]+=t,n[s+1]+=e):n.push(t,e)}function Zt(n,t,e){if(e.length==0)return;let i=t.length-2>>1;if(i>1])),!(e||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];t(s,h,r,f,c),s=h,r=f}}}function es(n,t,e,i=!1){let s=[],r=i?[]:null,o=new de(n),l=new de(t);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);et(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,f=o.len;for(;f;)if(l.ins==-1){let c=Math.min(f,l.len);h+=c,f-=c,l.forward(c)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}var de=class{constructor(t){this.set=t,this.i=0,this.next()}next(){let{sections:t}=this.set;this.i>1;return e>=t.length?R.empty:t[e]}textBit(t){let{inserted:e}=this.set,i=this.i-2>>1;return i>=e.length&&!t?R.empty:e[i].slice(this.off,t==null?void 0:this.off+t)}forward(t){t==this.len?this.next():(this.len-=t,this.off+=t)}forward2(t){this.ins==-1?this.forward(t):t==this.ins?this.next():(this.ins-=t,this.off+=t)}},Le=class n{constructor(t,e,i){this.from=t,this.to=e,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let t=this.flags&7;return t==7?null:t}get goalColumn(){let t=this.flags>>6;return t==16777215?void 0:t}map(t,e=-1){let i,s;return this.empty?i=s=t.mapPos(this.from,e):(i=t.mapPos(this.from,1),s=t.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new n(i,s,this.flags)}extend(t,e=t,i=0){if(t<=this.anchor&&e>=this.anchor)return w.range(t,e,void 0,void 0,i);let s=Math.abs(t-this.anchor)>Math.abs(e-this.anchor)?t:e;return w.range(this.anchor,s,void 0,void 0,i)}eq(t,e=!1){return this.anchor==t.anchor&&this.head==t.head&&this.goalColumn==t.goalColumn&&(!e||!this.empty||this.assoc==t.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(t){if(!t||typeof t.anchor!="number"||typeof t.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return w.range(t.anchor,t.head)}static create(t,e,i){return new n(t,e,i)}},w=class n{constructor(t,e){this.ranges=t,this.mainIndex=e}map(t,e=-1){return t.empty?this:n.create(this.ranges.map(i=>i.map(t,e)),this.mainIndex)}eq(t,e=!1){if(this.ranges.length!=t.ranges.length||this.mainIndex!=t.mainIndex)return!1;for(let i=0;it.toJSON()),main:this.mainIndex}}static fromJSON(t){if(!t||!Array.isArray(t.ranges)||typeof t.main!="number"||t.main>=t.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new n(t.ranges.map(e=>Le.fromJSON(e)),t.main)}static single(t,e=t){return new n([n.range(t,e)],0)}static create(t,e=0){if(t.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;ss.from-r.from),e=t.indexOf(i);for(let s=1;sr.head?n.range(a,l):n.range(l,a))}}return new n(t,e)}};function So(n,t){for(let e of n.ranges)if(e.to>t)throw new RangeError("Selection points outside of document")}var cs=0,M=class n{constructor(t,e,i,s,r){this.combine=t,this.compareInput=e,this.compare=i,this.isStatic=s,this.id=cs++,this.default=t([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(t={}){return new n(t.combine||(e=>e),t.compareInput||((e,i)=>e===i),t.compare||(t.combine?(e,i)=>e===i:us),!!t.static,t.enables)}of(t){return new Pe([],this,0,t)}compute(t,e){if(this.isStatic)throw new Error("Can't compute a static facet");return new Pe(t,this,1,e)}computeN(t,e){if(this.isStatic)throw new Error("Can't compute a static facet");return new Pe(t,this,2,e)}from(t,e){return e||(e=i=>i),this.compute([t],i=>e(i.field(t)))}};function us(n,t){return n==t||n.length==t.length&&n.every((e,i)=>e===t[i])}var Pe=class{constructor(t,e,i,s){this.dependencies=t,this.facet=e,this.type=i,this.value=s,this.id=cs++}dynamicSlot(t){var e;let i=this.value,s=this.facet.compareInput,r=this.id,o=t[r]>>1,l=this.type==2,a=!1,h=!1,f=[];for(let c of this.dependencies)c=="doc"?a=!0:c=="selection"?h=!0:(((e=t[c.id])!==null&&e!==void 0?e:1)&1)==0&&f.push(t[c.id]);return{create(c){return c.values[o]=i(c),1},update(c,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||is(c,f)){let d=i(c);if(l?!mo(d,c.values[o],s):!s(d,c.values[o]))return c.values[o]=d,1}return 0},reconfigure:(c,u)=>{let d,p=u.config.address[r];if(p!=null){let g=Ki(u,p);if(this.dependencies.every(m=>m instanceof M?u.facet(m)===c.facet(m):m instanceof Ct?u.field(m,!1)==c.field(m,!1):!0)||(l?mo(d=i(c),g,s):s(d=i(c),g)))return c.values[o]=g,0}else d=i(c);return c.values[o]=d,1}}}};function mo(n,t,e){if(n.length!=t.length)return!1;for(let i=0;in[a.id]),s=e.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[t.id]>>1;function l(a){let h=[];for(let f=0;fi===s),t);return t.provide&&(e.provides=t.provide(e)),e}create(t){let e=t.facet(Hi).find(i=>i.field==this);return(e?.create||this.createF)(t)}slot(t){let e=t[this.id]>>1;return{create:i=>(i.values[e]=this.create(i),1),update:(i,s)=>{let r=i.values[e],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[e]=o,1)},reconfigure:(i,s)=>{let r=i.facet(Hi),o=s.facet(Hi),l;return(l=r.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[e]=l.create(i),1):s.config.address[this.id]!=null?(i.values[e]=s.field(this),0):(i.values[e]=this.create(i),1)}}}init(t){return[this,Hi.of({field:this,create:t})]}get extension(){return this}},fe={lowest:4,low:3,default:2,high:1,highest:0};function ni(n){return t=>new qi(t,n)}var He={highest:ni(fe.highest),high:ni(fe.high),default:ni(fe.default),low:ni(fe.low),lowest:ni(fe.lowest)},qi=class{constructor(t,e){this.inner=t,this.prec=e}},pe=class n{of(t){return new ri(this,t)}reconfigure(t){return n.reconfigure.of({compartment:this,extension:t})}get(t){return t.config.compartments.get(this)}},ri=class{constructor(t,e){this.compartment=t,this.inner=e}},$i=class n{constructor(t,e,i,s,r,o){for(this.base=t,this.compartments=e,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(t,e,i){let s=[],r=Object.create(null),o=new Map;for(let u of rf(t,e,o))u instanceof Ct?s.push(u):(r[u.facet.id]||(r[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of s)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let f=i?.config.facets;for(let u in r){let d=r[u],p=d[0].facet,g=f&&f[u]||[];if(d.every(m=>m.type==0))if(l[p.id]=a.length<<1|1,us(g,d))a.push(i.facet(p));else{let m=p.combine(d.map(y=>y.value));a.push(i&&p.compare(m,i.facet(p))?i.facet(p):m)}else{for(let m of d)m.type==0?(l[m.id]=a.length<<1|1,a.push(m.value)):(l[m.id]=h.length<<1,h.push(y=>m.dynamicSlot(y)));l[p.id]=h.length<<1,h.push(m=>sf(m,p,d))}}let c=h.map(u=>u(l));return new n(t,o,c,l,a,r)}};function rf(n,t,e){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof ri&&e.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof ri){if(e.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=t.get(o.compartment)||o.inner;e.set(o.compartment,h),r(h,l)}else if(o instanceof qi)r(o.inner,o.prec);else if(o instanceof Ct)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof Pe)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,fe.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,fe.default),i.reduce((o,l)=>o.concat(l))}function si(n,t){if(t&1)return 2;let e=t>>1,i=n.status[e];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[e]=4;let s=n.computeSlot(n,n.config.dynamicSlots[e]);return n.status[e]=2|s}function Ki(n,t){return t&1?n.config.staticValues[t>>1]:n.values[t>>1]}var Co=M.define(),ns=M.define({combine:n=>n.some(t=>t),static:!0}),Ao=M.define({combine:n=>n.length?n[0]:void 0,static:!0}),Mo=M.define(),To=M.define(),Eo=M.define(),Do=M.define({combine:n=>n.length?n[0]:!1}),mt=class{constructor(t,e){this.type=t,this.value=e}static define(){return new ss}},ss=class{of(t){return new mt(this,t)}},rs=class{constructor(t){this.map=t}of(t){return new U(this,t)}},U=class n{constructor(t,e){this.type=t,this.value=e}map(t){let e=this.type.map(this.value,t);return e===void 0?void 0:e==this.value?this:new n(this.type,e)}is(t){return this.type==t}static define(t={}){return new rs(t.map||(e=>e))}static mapEffects(t,e){if(!t.length)return t;let i=[];for(let s of t){let r=s.map(e);r&&i.push(r)}return i}};U.reconfigure=U.define();U.appendConfig=U.define();var X=class n{constructor(t,e,i,s,r,o){this.startState=t,this.changes=e,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&So(i,e.newLength),r.some(l=>l.type==n.time)||(this.annotations=r.concat(n.time.of(Date.now())))}static create(t,e,i,s,r,o){return new n(t,e,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(t){for(let e of this.annotations)if(e.type==t)return e.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(t){let e=this.annotation(n.userEvent);return!!(e&&(e==t||e.length>t.length&&e.slice(0,t.length)==t&&e[t.length]=="."))}};X.time=mt.define();X.userEvent=mt.define();X.addToHistory=mt.define();X.remote=mt.define();function of(n,t){let e=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof X?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof X?n=r[0]:n=Bo(t,Ne(r),!1)}return n}function af(n){let t=n.startState,e=t.facet(Eo),i=n;for(let s=e.length-1;s>=0;s--){let r=e[s](n);r&&Object.keys(r).length&&(i=Oo(i,os(t,r,n.changes.newLength),!0))}return i==n?n:X.create(t,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}var hf=[];function Ne(n){return n==null?hf:Array.isArray(n)?n:[n]}var St=function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n}(St||(St={})),ff=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,ls;try{ls=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function cf(n){if(ls)return ls.test(n);for(let t=0;t"\x80"&&(e.toUpperCase()!=e.toLowerCase()||ff.test(e)))return!0}return!1}function uf(n){return t=>{if(!/\S/.test(t))return St.Space;if(cf(t))return St.Word;for(let e=0;e-1)return St.Word;return St.Other}}var K=class n{constructor(t,e,i,s,r,o){this.config=t,this.doc=e,this.selection=i,this.values=s,this.status=t.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;ls.set(h,a)),e=null),s.set(l.value.compartment,l.value.extension)):l.is(U.reconfigure)?(e=null,i=l.value):l.is(U.appendConfig)&&(e=null,i=Ne(i).concat(l.value));let r;e?r=t.startState.values.slice():(e=$i.resolve(i,s,this),r=new n(e,this.doc,this.selection,e.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=t.startState.facet(ns)?t.newSelection:t.newSelection.asSingle();new n(e,t.newDoc,o,r,(l,a)=>a.update(l,t),t)}replaceSelection(t){return typeof t=="string"&&(t=this.toText(t)),this.changeByRange(e=>({changes:{from:e.from,to:e.to,insert:t},range:w.cursor(e.from+t.length)}))}changeByRange(t){let e=this.selection,i=t(e.ranges[0]),s=this.changes(i.changes),r=[i.range],o=Ne(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return n.create({doc:t.doc,selection:w.fromJSON(t.selection),extensions:e.extensions?s.concat([e.extensions]):s})}static create(t={}){let e=$i.resolve(t.extensions||[],new Map),i=t.doc instanceof R?t.doc:R.of((t.doc||"").split(e.staticFacet(n.lineSeparator)||Zn)),s=t.selection?t.selection instanceof w?t.selection:w.single(t.selection.anchor,t.selection.head):w.single(0);return So(s,i.length),e.staticFacet(ns)||(s=s.asSingle()),new n(e,i,s,e.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(n.tabSize)}get lineBreak(){return this.facet(n.lineSeparator)||` +`}get readOnly(){return this.facet(Do)}phrase(t,...e){for(let i of this.facet(n.phrases))if(Object.prototype.hasOwnProperty.call(i,t)){t=i[t];break}return e.length&&(t=t.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>e.length?i:e[r-1]})),t}languageDataAt(t,e,i=-1){let s=[];for(let r of this.facet(Co))for(let o of r(this,e,i))Object.prototype.hasOwnProperty.call(o,t)&&s.push(o[t]);return s}charCategorizer(t){let e=this.languageDataAt("wordChars",t);return uf(e.length?e[0]:"")}wordAt(t){let{text:e,from:i,length:s}=this.doc.lineAt(t),r=this.charCategorizer(t),o=t-i,l=t-i;for(;o>0;){let a=Q(e,o,!1);if(r(e.slice(a,o))!=St.Word)break;o=a}for(;ln.length?n[0]:4});K.lineSeparator=Ao;K.readOnly=Do;K.phrases=M.define({compare(n,t){let e=Object.keys(n),i=Object.keys(t);return e.length==i.length&&e.every(s=>n[s]==t[s])}});K.languageData=Co;K.changeFilter=Mo;K.transactionFilter=To;K.transactionExtender=Eo;pe.reconfigure=U.define();function me(n,t,e={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],l=i[r];if(l===void 0)i[r]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(e,r))i[r]=e[r](l,o);else throw new Error("Config merge conflict for field "+r)}for(let s in t)i[s]===void 0&&(i[s]=t[s]);return i}var Vt=class{eq(t){return this==t}range(t,e=t){return oi.create(t,e,this)}};Vt.prototype.startSide=Vt.prototype.endSide=0;Vt.prototype.point=!1;Vt.prototype.mapMode=lt.TrackDel;function ds(n,t){return n==t||n.constructor==t.constructor&&n.eq(t)}var oi=class n{constructor(t,e,i){this.from=t,this.to=e,this.value=i}static create(t,e,i){return new n(t,e,i)}};function as(n,t){return n.from-t.from||n.value.startSide-t.value.startSide}var hs=class n{constructor(t,e,i,s){this.from=t,this.to=e,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(t,e,i,s=0){let r=i?this.to:this.from;for(let o=s,l=r.length;;){if(o==l)return o;let a=o+l>>1,h=r[a]-t||(i?this.value[a].endSide:this.value[a].startSide)-e;if(a==o)return h>=0?o:l;h>=0?l=a:o=a+1}}between(t,e,i,s){for(let r=this.findIndex(e,-1e9,!0),o=this.findIndex(i,1e9,!1,r);rd||u==d&&h.startSide>0&&h.endSide<=0)continue;(d-u||h.endSide-h.startSide)<0||(o<0&&(o=u),h.point&&(l=Math.max(l,d-u)),i.push(h),s.push(u-o),r.push(d-o))}return{mapped:i.length?new n(s,r,i,l):null,pos:o}}},F=class n{constructor(t,e,i,s){this.chunkPos=t,this.chunk=e,this.nextLayer=i,this.maxPoint=s}static create(t,e,i,s){return new n(t,e,i,s)}get length(){let t=this.chunk.length-1;return t<0?0:Math.max(this.chunkEnd(t),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let t=this.nextLayer.size;for(let e of this.chunk)t+=e.value.length;return t}chunkEnd(t){return this.chunkPos[t]+this.chunk[t].length}update(t){let{add:e=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=t,o=t.filter;if(e.length==0&&!o)return this;if(i&&(e=e.slice().sort(as)),this.isEmpty)return e.length?n.of(e):this;let l=new Ui(this,null,-1).goto(0),a=0,h=[],f=new ge;for(;l.value||a=0){let c=e[a++];f.addInner(c.from,c.to,c.value)||h.push(c)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||rl.to||r=r&&t<=r+o.length&&o.between(r,t-r,e-r,i)===!1)return}this.nextLayer.between(t,e,i)}}iter(t=0){return li.from([this]).goto(t)}get isEmpty(){return this.nextLayer==this}static iter(t,e=0){return li.from(t).goto(e)}static compare(t,e,i,s,r=-1){let o=t.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=r),l=e.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=r),a=bo(o,l,i),h=new ce(o,a,r),f=new ce(l,a,r);i.iterGaps((c,u,d)=>yo(h,c,f,u,d,s)),i.empty&&i.length==0&&yo(h,0,f,0,0,s)}static eq(t,e,i=0,s){s==null&&(s=999999999);let r=t.filter(f=>!f.isEmpty&&e.indexOf(f)<0),o=e.filter(f=>!f.isEmpty&&t.indexOf(f)<0);if(r.length!=o.length)return!1;if(!r.length)return!0;let l=bo(r,o),a=new ce(r,l,0).goto(i),h=new ce(o,l,0).goto(i);for(;;){if(a.to!=h.to||!fs(a.active,h.active)||a.point&&(!h.point||!ds(a.point,h.point)))return!1;if(a.to>s)return!0;a.next(),h.next()}}static spans(t,e,i,s,r=-1){let o=new ce(t,null,r).goto(e),l=e,a=o.openStart;for(;;){let h=Math.min(o.to,i);if(o.point){let f=o.activeForPoint(o.to),c=o.pointFroml&&(s.span(l,h,o.active,a),a=o.openEnd(h));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(t,e=!1){let i=new ge;for(let s of t instanceof oi?[t]:e?df(t):t)i.add(s.from,s.to,s.value);return i.finish()}static join(t){if(!t.length)return n.empty;let e=t[t.length-1];for(let i=t.length-2;i>=0;i--)for(let s=t[i];s!=n.empty;s=s.nextLayer)e=new n(s.chunkPos,s.chunk,e,Math.max(s.maxPoint,e.maxPoint));return e}};F.empty=new F([],[],null,-1);function df(n){if(n.length>1)for(let t=n[0],e=1;e0)return n.slice().sort(as);t=i}return n}F.empty.nextLayer=F.empty;var ge=class n{finishChunk(t){this.chunks.push(new hs(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,t&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(t,e,i){this.addInner(t,e,i)||(this.nextLayer||(this.nextLayer=new n)).add(t,e,i)}addInner(t,e,i){let s=t-this.lastTo||i.startSide-this.last.endSide;if(s<=0&&(t-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=t),this.from.push(t-this.chunkStart),this.to.push(e-this.chunkStart),this.last=i,this.lastFrom=t,this.lastTo=e,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,e-t)),!0)}addChunk(t,e){if((t-this.lastTo||e.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,e.maxPoint),this.chunks.push(e),this.chunkPos.push(t);let i=e.value.length-1;return this.last=e.value[i],this.lastFrom=e.from[i]+t,this.lastTo=e.to[i]+t,!0}finish(){return this.finishInner(F.empty)}finishInner(t){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return t;let e=F.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(t):t,this.setMaxPoint);return this.from=null,e}};function bo(n,t,e){let i=new Map;for(let r of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(t){if(t==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&s.push(new Ui(o,e,i,r));return s.length==1?s[0]:new n(s)}get startSide(){return this.value?this.value.startSide:0}goto(t,e=-1e9){for(let i of this.heap)i.goto(t,e);for(let i=this.heap.length>>1;i>=0;i--)Xn(this.heap,i);return this.next(),this}forward(t,e){for(let i of this.heap)i.forward(t,e);for(let i=this.heap.length>>1;i>=0;i--)Xn(this.heap,i);(this.to-t||this.value.endSide-e)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let t=this.heap[0];this.from=t.from,this.to=t.to,this.value=t.value,this.rank=t.rank,t.value&&t.next(),Xn(this.heap,0)}}};function Xn(n,t){for(let e=n[t];;){let i=(t<<1)+1;if(i>=n.length)break;let s=n[i];if(i+1=0&&(s=n[i+1],i++),e.compare(s)<0)break;n[i]=e,n[t]=s,t=i}}var ce=class{constructor(t,e,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=li.from(t,e,i)}goto(t,e=-1e9){return this.cursor.goto(t,e),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=t,this.endSide=e,this.openStart=-1,this.next(),this}forward(t,e){for(;this.minActive>-1&&(this.activeTo[this.minActive]-t||this.active[this.minActive].endSide-e)<0;)this.removeActive(this.minActive);this.cursor.forward(t,e)}removeActive(t){Fi(this.active,t),Fi(this.activeTo,t),Fi(this.activeRank,t),this.minActive=wo(this.active,this.activeTo)}addActive(t){let e=0,{value:i,to:s,rank:r}=this.cursor;for(;e0;)e++;Vi(this.active,e,i),Vi(this.activeTo,e,s),Vi(this.activeRank,e,r),t&&Vi(t,e,this.cursor.from),this.minActive=wo(this.active,this.activeTo)}next(){let t=this.to,e=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>t){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&Fi(i,s)}else if(this.cursor.value)if(this.cursor.from>t){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(e&&this.cursor.to==this.to&&this.cursor.from=0&&i[s]=0&&!(this.activeRank[i]t||this.activeTo[i]==t&&this.active[i].endSide>=this.point.endSide)&&e.push(this.active[i]);return e.reverse()}openEnd(t){let e=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>t;i--)e++;return e}};function yo(n,t,e,i,s,r){n.goto(t),e.goto(i);let o=i+s,l=i,a=i-t,h=!!r.boundChange;for(let f=!1;;){let c=n.to+a-e.to,u=c||n.endSide-e.endSide,d=u<0?n.to+a:e.to,p=Math.min(d,o);if(n.point||e.point?(n.point&&e.point&&ds(n.point,e.point)&&fs(n.activeForPoint(n.to),e.activeForPoint(e.to))||r.comparePoint(l,p,n.point,e.point),f=!1):(f&&r.boundChange(l),p>l&&!fs(n.active,e.active)&&r.compareRange(l,p,n.active,e.active),h&&po)break;l=d,u<=0&&n.next(),u>=0&&e.next()}}function fs(n,t){if(n.length!=t.length)return!1;for(let e=0;e=t;i--)n[i+1]=n[i];n[t]=e}function wo(n,t){let e=-1,i=1e9;for(let s=0;s=t)return s;if(s==n.length)break;r+=n.charCodeAt(s)==9?e-r%e:1,s=Q(n,s)}return i===!0?-1:n.length}var ps="\u037C",Ro=typeof Symbol>"u"?"__"+ps:Symbol.for(ps),gs=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Po=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},bt=class{constructor(t,e){this.rules=[];let{finish:i}=e||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,l,a,h){let f=[],c=/^@(\w+)\b/.exec(o[0]),u=c&&c[1]=="keyframes";if(c&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))r(d.split(/,\s*/).map(g=>o.map(m=>g.replace(/&/,m))).reduce((g,m)=>g.concat(m)),p,a);else if(p&&typeof p=="object"){if(!c)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,f,u)}else p!=null&&f.push(d.replace(/_.*/,"").replace(/[A-Z]/g,g=>"-"+g.toLowerCase())+": "+p+";")}(f.length||u)&&a.push((i&&!c&&!h?o.map(i):o).join(", ")+" {"+f.join(" ")+"}")}for(let o in t)r(s(o),t[o],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let t=Po[Ro]||1;return Po[Ro]=t+1,ps+t.toString(36)}static mount(t,e,i){let s=t[gs],r=i&&i.nonce;s?r&&s.setNonce(r):s=new ms(t,r),s.mount(Array.isArray(e)?e:[e],t)}},No=new Map,ms=class{constructor(t,e){let i=t.ownerDocument||t,s=i.defaultView;if(!t.head&&t.adoptedStyleSheets&&s.CSSStyleSheet){let r=No.get(i);if(r)return t[gs]=r;this.sheet=new s.CSSStyleSheet,No.set(i,this)}else this.styleTag=i.createElement("style"),e&&this.styleTag.setAttribute("nonce",e);this.modules=[],t[gs]=this}mount(t,e){let i=this.sheet,s=0,r=0;for(let o=0;o-1&&(this.modules.splice(a,1),r--,a=-1),a==-1){if(this.modules.splice(r++,0,l),i)for(let h=0;h",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},pf=typeof navigator<"u"&&/Mac/.test(navigator.platform),gf=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(Y=0;Y<10;Y++)Gt[48+Y]=Gt[96+Y]=String(Y);var Y;for(Y=1;Y<=24;Y++)Gt[Y+111]="F"+Y;var Y;for(Y=65;Y<=90;Y++)Gt[Y]=String.fromCharCode(Y+32),Fe[Y]=String.fromCharCode(Y);var Y;for(ji in Gt)Fe.hasOwnProperty(ji)||(Fe[ji]=Gt[ji]);var ji;function Io(n){var t=pf&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||gf&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",e=!t&&n.key||(n.shiftKey?Fe:Gt)[n.keyCode]||n.key||"Unidentified";return e=="Esc"&&(e="Escape"),e=="Del"&&(e="Delete"),e=="Left"&&(e="ArrowLeft"),e=="Up"&&(e="ArrowUp"),e=="Right"&&(e="ArrowRight"),e=="Down"&&(e="ArrowDown"),e}var rt=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},Ss=typeof document<"u"?document:{documentElement:{style:{}}},Cs=/Edge\/(\d+)/.exec(rt.userAgent),pl=/MSIE \d/.test(rt.userAgent),As=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(rt.userAgent),kn=!!(pl||As||Cs),Ho=!kn&&/gecko\/(\d+)/i.test(rt.userAgent),bs=!kn&&/Chrome\/(\d+)/.exec(rt.userAgent),Fo="webkitFontSmoothing"in Ss.documentElement.style,Ms=!kn&&/Apple Computer/.test(rt.vendor),Vo=Ms&&(/Mobile\/\w+/.test(rt.userAgent)||rt.maxTouchPoints>2),S={mac:Vo||/Mac/.test(rt.platform),windows:/Win/.test(rt.platform),linux:/Linux|X11/.test(rt.platform),ie:kn,ie_version:pl?Ss.documentMode||6:As?+As[1]:Cs?+Cs[1]:0,gecko:Ho,gecko_version:Ho?+(/Firefox\/(\d+)/.exec(rt.userAgent)||[0,0])[1]:0,chrome:!!bs,chrome_version:bs?+bs[1]:0,ios:Vo,android:/Android\b/.test(rt.userAgent),webkit:Fo,webkit_version:Fo?+(/\bAppleWebKit\/(\d+)/.exec(rt.userAgent)||[0,0])[1]:0,safari:Ms,safari_version:Ms?+(/\bVersion\/(\d+(\.\d+)?)/.exec(rt.userAgent)||[0,0])[1]:0,tabSize:Ss.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function ur(n,t){for(let e in n)e=="class"&&t.class?t.class+=" "+n.class:e=="style"&&t.style?t.style+=";"+n.style:t[e]=n[e];return t}var ln=Object.create(null);function dr(n,t,e){if(n==t)return!0;n||(n=ln),t||(t=ln);let i=Object.keys(n),s=Object.keys(t);if(i.length-(e&&i.indexOf(e)>-1?1:0)!=s.length-(e&&s.indexOf(e)>-1?1:0))return!1;for(let r of i)if(r!=e&&(s.indexOf(r)==-1||n[r]!==t[r]))return!1;return!0}function mf(n,t){for(let e=n.attributes.length-1;e>=0;e--){let i=n.attributes[e].name;t[i]==null&&n.removeAttribute(i)}for(let e in t){let i=t[e];e=="style"?n.style.cssText=i:n.getAttribute(e)!=i&&n.setAttribute(e,i)}}function Wo(n,t,e){let i=!1;if(t)for(let s in t)e&&s in e||(i=!0,s=="style"?n.style.cssText="":n.removeAttribute(s));if(e)for(let s in e)t&&t[s]==e[s]||(i=!0,s=="style"?n.style.cssText=e[s]:n.setAttribute(s,e[s]));return i}function bf(n){let t=Object.create(null);for(let e=0;e0?3e8:-4e8:e>0?1e8:-1e8,new ke(t,e,e,i,t.widget||null,!1)}static replace(t){let e=!!t.block,i,s;if(t.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=gl(t,e);i=(r?e?-3e8:-1:5e8)-1,s=(o?e?2e8:1:-6e8)+1}return new ke(t,i,s,e,t.widget||null,!0)}static line(t){return new wi(t)}static set(t,e=!1){return F.of(t,e)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};z.none=F.empty;var yi=class n extends z{constructor(t){let{start:e,end:i}=gl(t);super(e?-1:5e8,i?1:-6e8,null,t),this.tagName=t.tagName||"span",this.attrs=t.class&&t.attributes?ur(t.attributes,{class:t.class}):t.class?{class:t.class}:t.attributes||ln}eq(t){return this==t||t instanceof n&&this.tagName==t.tagName&&dr(this.attrs,t.attrs)}range(t,e=t){if(t>=e)throw new RangeError("Mark decorations may not be empty");return super.range(t,e)}};yi.prototype.point=!1;var wi=class n extends z{constructor(t){super(-2e8,-2e8,null,t)}eq(t){return t instanceof n&&this.spec.class==t.spec.class&&dr(this.spec.attributes,t.spec.attributes)}range(t,e=t){if(e!=t)throw new RangeError("Line decoration ranges must be zero-length");return super.range(t,e)}};wi.prototype.mapMode=lt.TrackBefore;wi.prototype.point=!0;var ke=class n extends z{constructor(t,e,i,s,r,o){super(e,i,r,t),this.block=s,this.isReplace=o,this.mapMode=s?e<=0?lt.TrackBefore:lt.TrackAfter:lt.TrackDel}get type(){return this.startSide!=this.endSide?tt.WidgetRange:this.startSide<=0?tt.WidgetBefore:tt.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(t){return t instanceof n&&yf(this.widget,t.widget)&&this.block==t.block&&this.startSide==t.startSide&&this.endSide==t.endSide}range(t,e=t){if(this.isReplace&&(t>e||t==e&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&e!=t)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(t,e)}};ke.prototype.point=!0;function gl(n,t=!1){let{inclusiveStart:e,inclusiveEnd:i}=n;return e==null&&(e=n.inclusive),i==null&&(i=n.inclusive),{start:e??t,end:i??t}}function yf(n,t){return n==t||!!(n&&t&&n.compare(t))}function qe(n,t,e,i=0){let s=e.length-1;s>=0&&e[s]+i>=n?e[s]=Math.max(e[s],t):e.push(n,t)}var an=class n extends Vt{constructor(t,e){super(),this.tagName=t,this.attributes=e}eq(t){return t==this||t instanceof n&&this.tagName==t.tagName&&dr(this.attributes,t.attributes)}static create(t){return new n(t.tagName,t.attributes||ln)}static set(t,e=!1){return F.of(t,e)}};an.prototype.startSide=an.prototype.endSide=-1;function xi(n){let t;return n.nodeType==11?t=n.getSelection?n:n.ownerDocument:t=n,t.getSelection()}function Ts(n,t){return t?n==t||n.contains(t.nodeType!=1?t.parentNode:t):!1}function fi(n,t){if(!t.anchorNode)return!1;try{return Ts(n,t.anchorNode)}catch{return!1}}function en(n){return n.nodeType==3?vi(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function ci(n,t,e,i){return e?zo(n,t,e,i,-1)||zo(n,t,e,i,1):!1}function ie(n){for(var t=0;;t++)if(n=n.previousSibling,!n)return t}function hn(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function zo(n,t,e,i,s){for(;;){if(n==e&&t==i)return!0;if(t==(s<0?0:Xt(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;t=ie(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[t+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;t=s<0?Xt(n):0}else return!1}}function Xt(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function fn(n,t){let e=t?n.left:n.right;return{left:e,right:e,top:n.top,bottom:n.bottom}}function wf(n){let t=n.visualViewport;return t?{left:0,right:t.width,top:0,bottom:t.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function ml(n,t){let e=t.width/n.offsetWidth,i=t.height/n.offsetHeight;return(e>.995&&e<1.005||!isFinite(e)||Math.abs(t.width-n.offsetWidth)<1)&&(e=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(t.height-n.offsetHeight)<1)&&(i=1),{scaleX:e,scaleY:i}}function xf(n,t,e,i,s,r,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let f=n,c=!1;f&&!c;)if(f.nodeType==1){let u,d=f==a.body,p=1,g=1;if(d)u=wf(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(f).position)&&(c=!0),f.scrollHeight<=f.clientHeight&&f.scrollWidth<=f.clientWidth){f=f.assignedSlot||f.parentNode;continue}let C=f.getBoundingClientRect();({scaleX:p,scaleY:g}=ml(f,C)),u={left:C.left,right:C.left+f.clientWidth*p,top:C.top,bottom:C.top+f.clientHeight*g}}let m=0,y=0;if(s=="nearest")t.top0&&t.bottom>u.bottom+y&&(y=t.bottom-u.bottom+o)):t.bottom>u.bottom-o&&(y=t.bottom-u.bottom+o,e<0&&t.top-y0&&t.right>u.right+m&&(m=t.right-u.right+r)):t.right>u.right-r&&(m=t.right-u.right+r,e<0&&t.leftu.bottom||t.leftu.right)&&(t={left:Math.max(t.left,u.left),right:Math.min(t.right,u.right),top:Math.max(t.top,u.top),bottom:Math.min(t.bottom,u.bottom)}),f=f.assignedSlot||f.parentNode}else if(f.nodeType==11)f=f.host;else break}function bl(n,t=!0){let e=n.ownerDocument,i=null,s=null;for(let r=n.parentNode;r&&!(r==e.body||(!t||i)&&s);)if(r.nodeType==1)!s&&r.scrollHeight>r.clientHeight&&(s=r),t&&!i&&r.scrollWidth>r.clientWidth&&(i=r),r=r.assignedSlot||r.parentNode;else if(r.nodeType==11)r=r.host;else break;return{x:i,y:s}}var Es=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(t){return this.anchorNode==t.anchorNode&&this.anchorOffset==t.anchorOffset&&this.focusNode==t.focusNode&&this.focusOffset==t.focusOffset}setRange(t){let{anchorNode:e,focusNode:i}=t;this.set(e,Math.min(t.anchorOffset,e?Xt(e):0),i,Math.min(t.focusOffset,i?Xt(i):0))}set(t,e,i,s){this.anchorNode=t,this.anchorOffset=e,this.focusNode=i,this.focusOffset=s}},ye=null;S.safari&&S.safari_version>=26&&(ye=!1);function yl(n){if(n.setActive)return n.setActive();if(ye)return n.focus(ye);let t=[];for(let e=n;e&&(t.push(e,e.scrollTop,e.scrollLeft),e!=e.ownerDocument);e=e.parentNode);if(n.focus(ye==null?{get preventScroll(){return ye={preventScroll:!0},!0}}:void 0),!ye){ye=!1;for(let e=0;eMath.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function xl(n,t){for(let e=n,i=t;;){if(e.nodeType==3&&i>0)return{node:e,offset:i};if(e.nodeType==1&&i>0){if(e.contentEditable=="false")return null;e=e.childNodes[i-1],i=Xt(e)}else if(e.parentNode&&!hn(e))i=ie(e),e=e.parentNode;else return null}}function vl(n,t){for(let e=n,i=t;;){if(e.nodeType==3&&i=e){if(l.level==i)return o;(r<0||(s!=0?s<0?l.frome:t[r].level>l.level))&&(r=o)}}if(r<0)throw new RangeError("Index out of range");return r}};function Cl(n,t){if(n.length!=t.length)return!1;for(let e=0;e=0;g-=3)if(Wt[g+1]==-d){let m=Wt[g+2],y=m&2?s:m&4?m&1?r:s:0;y&&(W[c]=W[Wt[g]]=y),l=g;break}}else{if(Wt.length==189)break;Wt[l++]=c,Wt[l++]=u,Wt[l++]=a}else if((p=W[c])==2||p==1){let g=p==s;a=g?0:1;for(let m=l-3;m>=0;m-=3){let y=Wt[m+2];if(y&2)break;if(g)Wt[m+2]|=2;else{if(y&4)break;Wt[m+2]|=4}}}}}function Ef(n,t,e,i){for(let s=0,r=i;s<=e.length;s++){let o=s?e[s-1].to:n,l=sa;)p==m&&(p=e[--g].from,m=g?e[g-1].to:n),W[--p]=d;a=f}else r=h,a++}}}function Os(n,t,e,i,s,r,o){let l=i%2?2:1;if(i%2==s%2)for(let a=t,h=0;aa&&o.push(new xt(a,g.from,d));let m=g.direction==Se!=!(d%2);Bs(n,m?i+1:i,s,g.inner,g.from,g.to,o),a=g.to}p=g.to}else{if(p==e||(f?W[p]!=l:W[p]==l))break;p++}u?Os(n,a,p,i+1,s,u,o):at;){let f=!0,c=!1;if(!h||a>r[h-1].to){let g=W[a-1];g!=l&&(f=!1,c=g==16)}let u=!f&&l==1?[]:null,d=f?i:i+1,p=a;t:for(;;)if(h&&p==r[h-1].to){if(c)break t;let g=r[--h];if(!f)for(let m=g.from,y=h;;){if(m==t)break t;if(y&&r[y-1].to==m)m=r[--y].from;else{if(W[m-1]==l)break t;break}}if(u)u.push(g);else{g.toW.length;)W[W.length]=256;let i=[],s=t==Se?0:1;return Bs(n,s,s,e,0,n.length,i),i}function Al(n){return[new xt(0,n,0)]}var Ml="";function Of(n,t,e,i,s){var r;let o=i.head-n.from,l=xt.find(t,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),a=t[l],h=a.side(s,e);if(o==h){let u=l+=s?1:-1;if(u<0||u>=t.length)return null;a=t[l=u],o=a.side(!s,e),h=a.side(s,e)}let f=Q(n.text,o,a.forward(s,e));(fa.to)&&(f=h),Ml=n.text.slice(Math.min(o,f),Math.max(o,f));let c=l==(s?t.length-1:0)?null:t[l+(s?1:-1)];return c&&f==h&&c.level+(s?0:1)n.some(t=>t)}),Pl=M.define({combine:n=>n.some(t=>t)}),Nl=M.define(),ui=class n{constructor(t,e,i,s,r,o=!1){this.range=t,this.y=e,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(t){return t.empty?this:new n(this.range.map(t),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(t){return this.range.to<=t.doc.length?this:new n(w.cursor(t.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},Gi=U.define({map:(n,t)=>n.map(t)}),Il=U.define();function Mt(n,t,e){let i=n.facet(Ol);i.length?i[0](t):window.onerror&&window.onerror(String(t),e,void 0,void 0,t)||(e?console.error(e+":",t):console.error(t))}var Jt=M.define({combine:n=>n.length?n[0]:!0}),Lf=0,We=M.define({combine(n){return n.filter((t,e)=>{for(let i=0;i{let a=[];return o&&a.push(Sn.of(h=>{let f=h.plugin(l);return f?o(f):z.none})),r&&a.push(r(l)),a})}static fromClass(t,e){return n.define((i,s)=>new t(i,s),e)}},di=class{constructor(t){this.spec=t,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(t){if(this.value){if(this.mustUpdate){let e=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(e)}catch(i){if(Mt(e.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(t,this.spec.arg)}catch(e){Mt(t.state,e,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(t){var e;if(!((e=this.value)===null||e===void 0)&&e.destroy)try{this.value.destroy()}catch(i){Mt(t.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},Hl=M.define(),br=M.define(),Sn=M.define(),Fl=M.define(),yr=M.define(),ki=M.define(),Vl=M.define();function qo(n,t){let e=n.state.facet(Vl);if(!e.length)return e;let i=e.map(r=>r instanceof Function?r(n):r),s=[];return F.spans(i,t.from,t.to,{point(){},span(r,o,l,a){let h=r-t.from,f=o-t.from,c=s;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=Bf(t.text,h,f)),a>0&&c.length&&(p=c[c.length-1]).to==h&&p.direction==d)p.to=f,c=p.inner;else{let g={from:h,to:f,direction:d,inner:[]};c.push(g),c=g.inner}}}}),s}var Wl=M.define();function zl(n){let t=0,e=0,i=0,s=0;for(let r of n.state.facet(Wl)){let o=r(n);o&&(o.left!=null&&(t=Math.max(t,o.left)),o.right!=null&&(e=Math.max(e,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:t,right:e,top:i,bottom:s}}var ai=M.define(),Tt=class n{constructor(t,e,i,s){this.fromA=t,this.toA=e,this.fromB=i,this.toB=s}join(t){return new n(Math.min(this.fromA,t.fromA),Math.max(this.toA,t.toA),Math.min(this.fromB,t.fromB),Math.max(this.toB,t.toB))}addToSet(t){let e=t.length,i=this;for(;e>0;e--){let s=t[e-1];if(!(s.fromA>i.toA)){if(s.toAs.push(new Tt(r,o,l,a))),this.changedRanges=s}static create(t,e,i){return new n(t,e,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(t=>t.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},Rf=[],j=class{constructor(t,e,i=0){this.dom=t,this.length=e,this.flags=i,this.parent=null,t.cmTile=this}get breakAfter(){return this.flags&1}get children(){return Rf}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(t){if(this.flags|=2,this.flags&4){this.flags&=-5;let e=this.domAttrs;e&&mf(this.dom,e)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(t){this.dom=t,t.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(t,e=this.posAtStart){let i=e;for(let s of this.children){if(s==t)return i;i+=s.length+s.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(t){return this.posBefore(t)+t.length}covers(t){return!0}coordsIn(t,e){return null}domPosFor(t,e){let i=ie(this.dom),s=this.length?t>0:e>0;return new zt(this.parent.dom,i+(s?1:0),t==0||t==this.length)}markDirty(t){this.flags&=-3,t&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let t=this;t;t=t.parent)if(t instanceof Ue)return t;return null}static get(t){return t.cmTile}},Ke=class extends j{constructor(t){super(t,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(t){this.children.push(t),t.parent=this}sync(t){if(this.flags&2)return;super.sync(t);let e=this.dom,i=null,s,r=t?.node==e?t:null,o=0;for(let l of this.children){if(l.sync(t),o+=l.length+l.breakAfter,s=i?i.nextSibling:e.firstChild,r&&s!=l.dom&&(r.written=!0),l.dom.parentNode==e)for(;s&&s!=l.dom;)s=$o(s);else e.insertBefore(l.dom,s);i=l.dom}for(s=i?i.nextSibling:e.firstChild,r&&s&&(r.written=!0);s;)s=$o(s);this.length=o}};function $o(n){let t=n.nextSibling;return n.parentNode.removeChild(n),t}var Ue=class extends Ke{constructor(t,e){super(e),this.view=t}owns(t){for(;t;t=t.parent)if(t==this)return!0;return!1}isBlock(){return!0}nearest(t){for(;;){if(!t)return null;let e=j.get(t);if(e&&this.owns(e))return e;t=t.parentNode}}blockTiles(t){for(let e=[],i=this,s=0,r=0;;)if(s==i.children.length){if(!e.length)return;i=i.parent,i.breakAfter&&r++,s=e.pop()}else{let o=i.children[s++];if(o instanceof Yt)e.push(s),i=o,s=0;else{let l=r+o.length,a=t(o,r);if(a!==void 0)return a;r=l+o.breakAfter}}}resolveBlock(t,e){let i,s=-1,r,o=-1;if(this.blockTiles((l,a)=>{let h=a+l.length;if(t>=a&&t<=h){if(l.isWidget()&&e>=-1&&e<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(at||t==a&&(e>1?l.length:l.covers(-1)))&&(!r||!l.isWidget()&&r.isWidget())&&(r=l,o=t-a)}}),!i&&!r)throw new Error("No tile at position "+t);return i&&e<0||!r?{tile:i,offset:s}:{tile:r,offset:o}}},Yt=class n extends Ke{constructor(t,e){super(t),this.wrapper=e}isBlock(){return!0}covers(t){return this.children.length?t<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(t,e){let i=new n(e||document.createElement(t.tagName),t);return e||(i.flags|=4),i}},je=class n extends Ke{constructor(t,e){super(t),this.attrs=e}isLine(){return!0}static start(t,e,i){let s=new n(e||document.createElement("div"),t);return(!e||!i)&&(s.flags|=4),s}get domAttrs(){return this.attrs}resolveInline(t,e,i){let s=null,r=-1,o=null,l=-1;function a(f,c){for(let u=0,d=0;u=c&&(p.isComposite()?a(p,c-d):(!o||o.isHidden&&(e>0||i&&Nf(o,p)))&&(g>c||p.flags&32)?(o=p,l=c-d):(di&&(t=i);let s=t,r=t,o=0;t==0&&e<0||t==i&&e>=0?S.chrome||S.gecko||(t?(s--,o=1):r=0)?0:l.length-1];return S.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?fn(a,o<0):a||null}static of(t,e){let i=new n(e||document.createTextNode(t),t);return e||(i.flags|=2),i}},Ce=class n extends j{constructor(t,e,i,s){super(t,e,s),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(t){return this.flags&48?!1:(this.flags&(t<0?64:128))>0}coordsIn(t,e){return this.coordsInWidget(t,e,!1)}coordsInWidget(t,e,i){let s=this.widget.coordsAt(this.dom,t,e);if(s)return s;if(i)return fn(this.dom.getBoundingClientRect(),this.length?t==0:e<=0);{let r=this.dom.getClientRects(),o=null;if(!r.length)return null;let l=this.flags&16?!0:this.flags&32?!1:t>0;for(let a=l?r.length-1:0;o=r[a],!(t>0?a==0:a==r.length-1||o.top0;)if(s.isComposite())if(o){if(!t)break;i&&i.break(),t--,o=!1}else if(r==s.children.length){if(!t&&!l.length)break;i&&i.leave(s),o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++}else{let a=s.children[r],h=a.breakAfter;(e>0?a.length<=t:a.length=0;l--){let a=e.marks[l],h=s.lastChild;if(h instanceof at&&h.mark.eq(a.mark))h.dom!=a.dom&&h.setDOM(ys(a.dom)),s=h;else{if(this.cache.reused.get(a)){let c=j.get(a.dom);c&&c.setDOM(ys(a.dom))}let f=at.of(a.mark,a.dom);s.append(f),s=f}this.cache.reused.set(a,2)}let r=j.get(t.text);r&&this.cache.reused.set(r,2);let o=new we(t.text,t.text.nodeValue);o.flags|=8,s.append(o)}addInlineWidget(t,e,i){let s=this.afterWidget&&t.flags&48&&(this.afterWidget.flags&48)==(t.flags&48);s||this.flushBuffer();let r=this.ensureMarks(e,i);!s&&!(t.flags&16)&&r.append(this.getBuffer(1)),r.append(t),this.pos+=t.length,this.afterWidget=t}addMark(t,e,i){this.flushBuffer(),this.ensureMarks(e,i).append(t),this.pos+=t.length,this.afterWidget=null}addBlockWidget(t){this.getBlockPos().append(t),this.pos+=t.length,this.lastBlock=t,this.endLine()}continueWidget(t){let e=this.afterWidget||this.lastBlock;e.length+=t,this.pos+=t}addLineStart(t,e){var i;t||(t=_l);let s=je.start(t,e||((i=this.cache.find(je))===null||i===void 0?void 0:i.dom),!!e);this.getBlockPos().append(this.lastBlock=this.curLine=s)}addLine(t){this.getBlockPos().append(t),this.pos+=t.length,this.lastBlock=t,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(t){this.blockPosCovered()||this.addLineStart(t)}ensureLine(t){this.curLine||this.addLineStart(t)}ensureMarks(t,e){var i;let s=this.curLine;for(let r=t.length-1;r>=0;r--){let o=t[r],l;if(e>0&&(l=s.lastChild)&&l instanceof at&&l.mark.eq(o))s=l,e--;else{let a=at.of(o,(i=this.cache.find(at,h=>h.mark.eq(o)))===null||i===void 0?void 0:i.dom);s.append(a),s=a,e=0}}return s}endLine(){if(this.curLine){this.flushBuffer();let t=this.curLine.lastChild;(!t||!Ko(this.curLine,!1)||t.dom.nodeName!="BR"&&t.isWidget()&&!(S.ios&&Ko(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(ws,0,32)||new Ce(ws.toDOM(),0,ws,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let t=this.wrappers.length-1;t>=0;t--)this.wrappers[t].to=this.pos){let e=new Ps(t.from,t.to,t.value,t.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-e.rank||this.wrappers[i-1].to-e.to)<0;)i--;this.wrappers.splice(i,0,e)}this.wrapperPos=this.pos}getBlockPos(){var t;this.updateBlockWrappers();let e=this.root;for(let i of this.wrappers){let s=e.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||t===void 0?void 0:t.dom);e.append(r),e=r}}return e}blockPosCovered(){let t=this.lastBlock;return t!=null&&!t.breakAfter&&(!t.isWidget()||(t.flags&160)>0)}getBuffer(t){let e=2|(t<0?16:32),i=this.cache.find(Ge,void 0,1);return i&&(i.flags=e),i||new Ge(e)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},Is=class{constructor(t){this.skipCount=0,this.text="",this.textOff=0,this.cursor=t.iter()}skip(t){this.textOff+t<=this.text.length?this.textOff+=t:(this.skipCount+=t-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(t){if(this.textOff==this.text.length){let{value:s,lineBreak:r,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=s;let l=this.textOff=Math.min(t,s.length);return r?null:s.slice(0,l)}let e=Math.min(this.text.length,this.textOff+t),i=this.text.slice(this.textOff,e);return this.textOff=e,i}},un=[Ce,je,we,at,Ge,Yt,Ue];for(let n=0;n[]),this.index=un.map(()=>0),this.reused=new Map}add(t){let e=t.constructor.bucket,i=this.buckets[e];i.length<6?i.push(t):i[this.index[e]=(this.index[e]+1)%6]=t}find(t,e,i=2){let s=t.bucket,r=this.buckets[s],o=this.index[s];for(let l=r.length-1;l>=0;l--){let a=(l+o)%r.length,h=r[a];if((!e||e(h))&&!this.reused.has(h))return r.splice(a,1),a{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(t,e){let i=e&&this.getCompositionContext(e.text);for(let s=0,r=0,o=0;;){let l=os){let h=a-s;this.preserve(h,!o,!l),s=a,r+=h}if(!l)break;e&&l.fromA<=e.range.fromA&&l.toA>=e.range.toA?(this.forward(l.fromA,e.range.fromA,e.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let h=a>0||l{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof at&&s.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?s.length&&(s.length=r=0):o instanceof at&&(s.shift(),r=Math.min(r,s.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(t)}emit(t,e){let i=null,s=this.builder,r=0,o=F.spans(this.decorations,t,e,{point:(l,a,h,f,c,u)=>{if(h instanceof ke){if(this.disallowBlockEffectsFor[u]){if(h.block)throw new RangeError("Block decorations may not be specified via plugins");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(r=f.length,c>f.length)s.continueWidget(a-l);else{let d=h.widget||(h.block?ne.block:ne.inline),p=If(h),g=this.cache.findWidget(d,a-l,p)||Ce.of(d,this.view,a-l,p);h.block?(h.startSide>0&&s.addLineStartIfNotCovered(i),s.addBlockWidget(g)):(s.ensureLine(i),s.addInlineWidget(g,f,c))}i=null}else i=Hf(i,h);a>l&&this.text.skip(a-l)},span:(l,a,h,f)=>{for(let c=l;cr,this.openMarks=o}forward(t,e,i=1){e-t<=10?this.old.advance(e-t,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(e-t-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(t){let e=[],i=null;for(let s=t.parentNode;;s=s.parentNode){let r=j.get(s);if(s==this.view.contentDOM)break;r instanceof at?e.push(r):r?.isLine()?i=r:r instanceof Yt||(s.nodeName=="DIV"&&!i&&s!=this.view.contentDOM?i=new je(s,_l):i||e.push(at.of(new yi({tagName:s.nodeName.toLowerCase(),attributes:bf(s)}),s)))}return{line:i,marks:e}}};function Ko(n,t){let e=i=>{for(let s of i.children)if((t?s.isText():s.length)||e(s))return!0;return!1};return e(n)}function If(n){let t=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(t|=256),t}var _l={class:"cm-line"};function Hf(n,t){let e=t.spec.attributes,i=t.spec.class;return!e&&!i||(n||(n={class:"cm-line"}),e&&ur(e,n),i&&(n.class+=" "+i)),n}function Ff(n){let t=[];for(let e=n.parents.length;e>1;e--){let i=e==n.parents.length?n.tile:n.parents[e].tile;i instanceof at&&t.push(i.mark)}return t}function ys(n){let t=j.get(n);return t&&t.setDOM(n.cloneNode()),n}var ne=class extends ve{constructor(t){super(),this.tag=t}eq(t){return t.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(t){return t.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}};ne.inline=new ne("span");ne.block=new ne("div");var ws=new class extends ve{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}},dn=class{constructor(t){this.view=t,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=z.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new Ue(t,t.contentDOM),this.updateInner([new Tt(0,0,0,t.state.doc.length)],null)}update(t){var e;let i=t.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:f,toA:c})=>cthis.minWidthTo)?(this.minWidthFrom=t.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=t.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(t);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((e=this.domChanged)===null||e===void 0)&&e.newSel?s=this.domChanged.newSel.head:!Uf(t.changes,this.hasComposition)&&!t.selectionSet&&(s=t.state.selection.main.head));let r=s>-1?Wf(this.view,t.changes,s):null;if(this.domChanged=null,this.hasComposition){let{from:f,to:c}=this.hasComposition;i=new Tt(f,c,t.changes.mapPos(f,-1),t.changes.mapPos(c,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(S.ie||S.chrome)&&!r&&t&&t.state.doc.lines!=t.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=qf(o,this.decorations,t.changes);a.length&&(i=Tt.extendWithRanges(i,a));let h=$f(l,this.blockWrappers,t.changes);return h.length&&(i=Tt.extendWithRanges(i,h)),r&&!i.some(f=>f.fromA<=r.range.fromA&&f.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),t.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(t,e){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(e||t.length){let o=this.tile,l=new Fs(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);e&&j.get(e.text)&&l.cache.reused.set(j.get(e.text),2),this.tile=l.run(t,e),Vs(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let r=S.chrome||S.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let s=[];if(this.view.viewport.from||this.view.viewport.to-1)&&fi(i,this.view.observer.selectionRange)&&!(s&&i.contains(s));if(!(r||e||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,h,f;if(a.empty?f=h=this.inlineDOMNearPos(a.anchor,a.assoc||1):(f=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),h=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),S.gecko&&a.empty&&!this.hasComposition&&Vf(h)){let u=document.createTextNode("");this.view.observer.ignore(()=>h.node.insertBefore(u,h.node.childNodes[h.offset]||null)),h=f=new zt(u,0),l=!0}let c=this.view.observer.selectionRange;(l||!c.focusNode||(!ci(h.node,h.offset,c.anchorNode,c.anchorOffset)||!ci(f.node,f.offset,c.focusNode,c.focusOffset))&&!this.suppressWidgetCursorChange(c,a))&&(this.view.observer.ignore(()=>{S.android&&S.chrome&&i.contains(c.focusNode)&&Kf(c.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let u=xi(this.view.root);if(u)if(a.empty){if(S.gecko){let d=zf(h.node,h.offset);if(d&&d!=3){let p=(d==1?xl:vl)(h.node,h.offset);p&&(h=new zt(p.node,p.offset))}}u.collapse(h.node,h.offset),a.bidiLevel!=null&&u.caretBidiLevel!==void 0&&(u.caretBidiLevel=a.bidiLevel)}else if(u.extend){u.collapse(h.node,h.offset);try{u.extend(f.node,f.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([h,f]=[f,h]),d.setEnd(f.node,f.offset),d.setStart(h.node,h.offset),u.removeAllRanges(),u.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),s&&s.focus())}),this.view.observer.setSelectionRange(h,f)),this.impreciseAnchor=h.precise?null:new zt(c.anchorNode,c.anchorOffset),this.impreciseHead=f.precise?null:new zt(c.focusNode,c.focusOffset)}suppressWidgetCursorChange(t,e){return this.hasComposition&&e.empty&&ci(t.focusNode,t.focusOffset,t.anchorNode,t.anchorOffset)&&this.posFromDOM(t.focusNode,t.focusOffset)==e.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:t}=this,e=t.state.selection.main,i=xi(t.root),{anchorNode:s,anchorOffset:r}=t.observer.selectionRange;if(!i||!e.empty||!e.assoc||!i.modify)return;let o=this.lineAt(e.head,e.assoc);if(!o)return;let l=o.posAtStart;if(e.head==l||e.head==l+o.length)return;let a=this.coordsAt(e.head,-1),h=this.coordsAt(e.head,1);if(!a||!h||a.bottom>h.top)return;let f=this.domAtPos(e.head+e.assoc,e.assoc);i.collapse(f.node,f.offset),i.modify("move",e.assoc<0?"forward":"backward","lineboundary"),t.observer.readSelectionRange();let c=t.observer.selectionRange;t.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=e.from&&i.collapse(s,r)}posFromDOM(t,e){let i=this.tile.nearest(t);if(!i)return this.tile.dom.compareDocumentPosition(t)&2?0:this.view.state.doc.length;let s=i.posAtStart;if(i.isComposite()){let r;if(t==i.dom)r=i.dom.childNodes[e];else{let o=Xt(t)==0?0:e==0?-1:1;for(;;){let l=t.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(t==l.firstChild?o=-1:o=1),t=l}o<0?r=t:r=t.nextSibling}if(r==i.dom.firstChild)return s;for(;r&&!j.get(r);)r=r.nextSibling;if(!r)return s+i.length;for(let o=0,l=s;;o++){let a=i.children[o];if(a.dom==r)return l;l+=a.length+a.breakAfter}}else return i.isText()?t==i.dom?s+e:s+(e?i.length:0):s}domAtPos(t,e){let{tile:i,offset:s}=this.tile.resolveBlock(t,e);return i.isWidget()?i.domPosFor(t,e):i.domIn(s,e)}inlineDOMNearPos(t,e){let i,s=-1,r=!1,o,l=-1,a=!1;return this.tile.blockTiles((h,f)=>{if(h.isWidget()){if(h.flags&32&&f>=t)return!0;h.flags&16&&(r=!0)}else{let c=f+h.length;if(f<=t&&(i=h,s=t-f,r=c=t&&!o&&(o=h,l=t-f,a=f>t),f>t&&o)return!0}}),!i&&!o?this.domAtPos(t,e):(r&&o?i=null:a&&i&&(o=null),i&&e<0||!o?i.domIn(s,e):o.domIn(l,e))}coordsAt(t,e){let{tile:i,offset:s}=this.tile.resolveBlock(t,e);return i.isWidget()?i.widget instanceof pi?null:i.coordsInWidget(s,e,!0):i.coordsIn(s,e)}lineAt(t,e){let{tile:i}=this.tile.resolveBlock(t,e);return i.isLine()?i:null}coordsForChar(t){let{tile:e,offset:i}=this.tile.resolveBlock(t,1);if(!e.isLine())return null;function s(r,o){if(r.isComposite())for(let l of r.children){if(l.length>=o){let a=s(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(r.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==$.LTR,h=0,f=(c,u,d)=>{for(let p=0;ps);p++){let g=c.children[p],m=u+g.length,y=g.dom.getBoundingClientRect(),{height:C}=y;if(d&&!p&&(h+=y.top-d.top),g instanceof Yt)m>i&&f(g,u,y);else if(u>=i&&(h>0&&e.push(-h),e.push(C+h),h=0,o)){let T=g.dom.lastChild,P=T?en(T):[];if(P.length){let A=P[P.length-1],k=a?A.right-y.left:y.right-A.left;k>l&&(l=k,this.minWidth=r,this.minWidthFrom=u,this.minWidthTo=m)}}d&&p==c.children.length-1&&(h+=d.bottom-y.bottom),u=m+g.breakAfter}};return f(this.tile,0,null),e}textDirectionAt(t){let{tile:e}=this.tile.resolveBlock(t,1);return getComputedStyle(e.dom).direction=="rtl"?$.RTL:$.LTR}measureTextSize(){let t=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let h of o.children){if(!h.isText()||/[^ -~]/.test(h.text))return;let f=en(h.dom);if(f.length!=1)return;l+=f[0].width,a=f[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(t)return t;let e=document.createElement("div"),i,s,r;return e.className="cm-line",e.style.width="99999px",e.style.position="absolute",e.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(e);let o=en(e.firstChild)[0];i=e.getBoundingClientRect().height,s=o&&o.width?o.width/27:7,r=o&&o.height?o.height:i,e.remove()}),{lineHeight:i,charWidth:s,textHeight:r}}computeBlockGapDeco(){let t=[],e=this.view.viewState;for(let i=0,s=0;;s++){let r=s==e.viewports.length?null:e.viewports[s],o=r?r.from-1:this.view.state.doc.length;if(o>i){let l=(e.lineBlockAt(o).bottom-e.lineBlockAt(i).top)/this.view.scaleY;t.push(z.replace({widget:new pi(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return z.set(t)}updateDeco(){let t=1,e=this.view.state.facet(Sn).map(r=>(this.dynamicDecorationMap[t++]=typeof r=="function")?r(this.view):r),i=!1,s=this.view.state.facet(yr).map((r,o)=>{let l=typeof r=="function";return l&&(i=!0),l?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[t++]=i,e.push(F.join(s))),this.decorations=[this.editContextFormatting,...e,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];ttypeof r=="function"?r(this.view):r)}scrollIntoView(t){var e;if(t.isSnapshot){let f=this.view.viewState.lineBlockAt(t.range.head);this.view.scrollDOM.scrollTop=f.top-t.yMargin,this.view.scrollDOM.scrollLeft=t.xMargin;return}for(let f of this.view.state.facet(Nl))try{if(f(this.view,t.range,t))return!0}catch(c){Mt(this.view.state,c,"scroll handler")}let{range:i}=t,s=this.coordsAt(i.head,(e=i.assoc)!==null&&e!==void 0?e:i.empty?0:i.head>i.anchor?-1:1),r;if(!s)return;!i.empty&&(r=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(s={left:Math.min(s.left,r.left),top:Math.min(s.top,r.top),right:Math.max(s.right,r.right),bottom:Math.max(s.bottom,r.bottom)});let o=zl(this.view),l={left:s.left-o.left,top:s.top-o.top,right:s.right+o.right,bottom:s.bottom+o.bottom},{offsetWidth:a,offsetHeight:h}=this.view.scrollDOM;if(xf(this.view.scrollDOM,l,i.head1&&(s.top>window.pageYOffset+window.visualViewport.offsetTop+window.visualViewport.height||s.bottomi.isWidget()||i.children.some(e);return e(this.tile.resolveBlock(t,1).tile)}destroy(){Vs(this.tile)}};function Vs(n,t){let e=t?.get(n);if(e!=1){e==null&&n.destroy();for(let i of n.children)Vs(i,t)}}function Vf(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function ql(n,t){let e=n.observer.selectionRange;if(!e.focusNode)return null;let i=xl(e.focusNode,e.focusOffset),s=vl(e.focusNode,e.focusOffset),r=i||s;if(s&&i&&s.node!=i.node){let l=j.get(s.node);if(!l||l.isText()&&l.text!=s.node.nodeValue)r=s;else if(n.docView.lastCompositionAfterCursor){let a=j.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(r=s)}}if(n.docView.lastCompositionAfterCursor=r!=i,!r)return null;let o=t-r.offset;return{from:o,to:o+r.node.nodeValue.length,node:r.node}}function Wf(n,t,e){let i=ql(n,e);if(!i)return null;let{node:s,from:r,to:o}=i,l=s.nodeValue;if(/[\n\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=t.invertedDesc;return{range:new Tt(a.mapPos(r),a.mapPos(o),r,o),text:s}}function zf(n,t){return n.nodeType!=1?0:(t&&n.childNodes[t-1].contentEditable=="false"?1:0)|(t{it.from&&(e=!0)}),e}var pi=class extends ve{constructor(t){super(),this.height=t}toDOM(){let t=document.createElement("div");return t.className="cm-gap",this.updateDOM(t),t}eq(t){return t.height==this.height}updateDOM(t){return t.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function jf(n,t,e=1){let i=n.charCategorizer(t),s=n.doc.lineAt(t),r=t-s.from;if(s.length==0)return w.cursor(t);r==0?e=1:r==s.length&&(e=-1);let o=r,l=r;e<0?o=Q(s.text,r,!1):l=Q(s.text,r);let a=i(s.text.slice(o,l));for(;o>0;){let h=Q(s.text,o,!1);if(i(s.text.slice(h,o))!=a)break;o=h}for(;ln.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((s-e.top-(n.defaultLineHeight-l)*.5)/l);r+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(e.from,e.to);return e.from+Lo(o,r,n.state.tabSize)}function zs(n,t,e){let i=n.lineBlockAt(t);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>t)break;if(!(r.tot)return r;(!s||r.type==tt.Text&&(s.type!=r.type||(e<0?r.fromt)))&&(s=r)}}return s||i}return i}function Jf(n,t,e,i){let s=zs(n,t.head,t.assoc||-1),r=!i||s.type!=tt.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(t.assoc<0&&t.head>s.from?t.head-1:t.head);if(r){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(s.from),a=n.posAtCoords({x:e==(l==$.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(a!=null)return w.cursor(a,e?-1:1)}return w.cursor(e?s.to:s.from,e?-1:1)}function Uo(n,t,e,i){let s=n.state.doc.lineAt(t.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let l=t,a=null;;){let h=Of(s,r,o,l,e),f=Ml;if(!h){if(s.number==(e?n.state.doc.lines:1))return l;f=` +`,s=n.state.doc.line(s.number+(e?1:-1)),r=n.bidiSpans(s),h=n.visualLineSide(s,!e)}if(a){if(!a(f))return l}else{if(!i)return h;a=i(f)}l=h}}function Yf(n,t,e){let i=n.state.charCategorizer(t),s=i(e);return r=>{let o=i(r);return s==St.Space&&(s=o),s==o}}function Xf(n,t,e,i){let s=t.head,r=e?1:-1;if(s==(e?n.state.doc.length:0))return w.cursor(s,t.assoc);let o=t.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(s,t.assoc||((t.empty?e:t.head==t.from)?1:-1)),f=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=r<0?h.top:h.bottom;else{let p=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(s-p.from))),l=(r<0?p.top:p.bottom)+f}let c=a.left+o,u=n.viewState.heightOracle.textHeight>>1,d=i??u;for(let p=0;;p+=u){let g=l+(d+p)*r,m=_s(n,{x:c,y:g},!1,r);if(e?g>a.bottom:gl:C{if(t>r&&ts(n)),e.from,t.head>e.from?-1:1);return i==e.from?e:w.cursor(i,in.viewState.docHeight)return new wt(n.state.doc.length,-1);if(h=n.elementAtHeight(a),i==null)break;if(h.type==tt.Text){if(i<0?h.ton.viewport.to)break;let u=n.docView.coordsAt(i<0?h.from:h.to,i>0?-1:1);if(u&&(i<0?u.top<=a+r:u.bottom>=a+r))break}let c=n.viewState.heightOracle.textHeight/2;a=i>0?h.bottom+c:h.top-c}if(n.viewport.from>=h.to||n.viewport.to<=h.from){if(e)return null;if(h.type==tt.Text){let c=Gf(n,s,h,o,l);return new wt(c,c==h.from?1:-1)}}if(h.type!=tt.Text)return a<(h.top+h.bottom)/2?new wt(h.from,1):new wt(h.to,-1);let f=n.docView.lineAt(h.from,2);return(!f||f.length!=h.length)&&(f=n.docView.lineAt(h.from,-2)),new qs(n,o,l,n.textDirectionAt(h.from)).scanTile(f,h.from)}var qs=class{constructor(t,e,i,s){this.view=t,this.x=e,this.y=i,this.baseDir=s,this.line=null,this.spans=null}bidiSpansAt(t){return(!this.line||this.line.from>t||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+s.from>1;e:if(r.has(p)){let m=i+Math.floor(Math.random()*d);for(let y=0;y1)){if(y.bottomthis.y)(!a||a.top>y.top)&&(a=y),C=-1;else{let T=y.left>this.x?this.x-y.left:y.right(d+d+p)/3)return this.y=l.bottom-1,this.scan(t,e);if(a&&a.top<(d+p+p)/3)return this.y=a.top+1,this.scan(t,e)}let u=(o?this.dirAt(t[h],1):this.baseDir)==$.LTR;return{i:h,after:this.x>(c.left+c.right)/2==u}}scanText(t,e){let i=[];for(let r=0;r{let o=i[r]-e,l=i[r+1]-e;return vi(t.dom,o,l).getClientRects()});return s.after?new wt(i[s.i+1],-1):new wt(i[s.i],1)}scanTile(t,e){if(!t.length)return new wt(e,1);if(t.children.length==1){let l=t.children[0];if(l.isText())return this.scanText(l,e);if(l.isComposite())return this.scanTile(l,e)}let i=[e];for(let l=0,a=e;l{let a=t.children[l];return a.flags&48?null:(a.dom.nodeType==1?a.dom:vi(a.dom,0,a.length)).getClientRects()}),r=t.children[s.i],o=i[s.i];return r.isText()?this.scanText(r,o):r.isComposite()?this.scanTile(r,o):s.after?new wt(i[s.i+1],-1):new wt(o,1)}},Ve="\uFFFF",$s=class{constructor(t,e){this.points=t,this.view=e,this.text="",this.lineSeparator=e.state.facet(K.lineSeparator)}append(t){this.text+=t}lineBreak(){this.text+=Ve}readRange(t,e){if(!t)return this;let i=t.parentNode;for(let s=t;;){this.findPointBefore(i,s);let r=this.text.length;this.readNode(s);let o=j.get(s),l=s.nextSibling;if(l==e){o?.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=j.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:hn(s))||hn(l)&&(s.nodeName!="BR"||o?.isWidget())&&this.text.length>r)&&!Zf(l,e)&&this.lineBreak(),s=l}return this.findPointBefore(i,e),this}readTextNode(t){let e=t.nodeValue;for(let i of this.points)i.node==t&&(i.pos=this.text.length+Math.min(i.offset,e.length));for(let i=0,s=this.lineSeparator?null:/\r\n?|\n/g;;){let r=-1,o=1,l;if(this.lineSeparator?(r=e.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=s.exec(e))&&(r=l.index,o=l[0].length),this.append(e.slice(i,r<0?e.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==t&&a.pos>this.text.length&&(a.pos-=o-1);i=r+o}}readNode(t){let e=j.get(t),i=e&&e.overrideDOMText;if(i!=null){this.findPointInside(t,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else t.nodeType==3?this.readTextNode(t):t.nodeName=="BR"?t.nextSibling&&this.lineBreak():t.nodeType==1&&this.readRange(t.firstChild,null)}findPointBefore(t,e){for(let i of this.points)i.node==t&&t.childNodes[i.offset]==e&&(i.pos=this.text.length)}findPointInside(t,e){for(let i of this.points)(t.nodeType==3?i.node==t:t.contains(i.node))&&(i.pos=this.text.length+(Qf(t,i.node,i.offset)?e:0))}};function Qf(n,t,e){for(;;){if(!t||e-1;let{impreciseHead:r,impreciseAnchor:o}=t.docView,l=t.state.selection;if(t.state.readOnly&&e>-1)this.newSel=null;else if(e>-1&&(this.bounds=Kl(t.docView.tile,e,i,0))){let a=r||o?[]:ec(t),h=new $s(a,t);h.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=h.text,this.newSel=ic(a,this.bounds.from)}else{let a=t.observer.selectionRange,h=r&&r.node==a.focusNode&&r.offset==a.focusOffset||!Ts(t.contentDOM,a.focusNode)?l.main.head:t.docView.posFromDOM(a.focusNode,a.focusOffset),f=o&&o.node==a.anchorNode&&o.offset==a.anchorOffset||!Ts(t.contentDOM,a.anchorNode)?l.main.anchor:t.docView.posFromDOM(a.anchorNode,a.anchorOffset),c=t.viewport;if((S.ios||S.chrome)&&l.main.empty&&h!=f&&(c.from>0||c.to-1&&l.ranges.length>1)this.newSel=l.replaceRange(w.range(f,h));else if(t.lineWrapping&&f==h&&!(l.main.empty&&l.main.head==h)&&t.inputState.lastTouchTime>Date.now()-100){let u=t.coordsAtPos(h,-1),d=0;u&&(d=t.inputState.lastTouchY<=u.bottom?-1:1),this.newSel=w.create([w.cursor(h,d)])}else this.newSel=w.single(f,h)}}};function Kl(n,t,e,i){if(n.isComposite()){let s=-1,r=-1,o=-1,l=-1;for(let a=0,h=i,f=i;ae)return Kl(c,t,e,h);if(u>=t&&s==-1&&(s=a,r=h),h>e&&c.dom.parentNode==n.dom){o=a,l=f;break}f=u,h=u+c.breakAfter}return{from:r,to:l<0?i+n.length:l,startDOM:(s?n.children[s-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function Ul(n,t){let e,{newSel:i}=t,{state:s}=n,r=s.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(t.bounds){let{from:l,to:a}=t.bounds,h=r.from,f=null;(o===8||S.android&&t.text.length=l&&r.to<=a&&(t.typeOver||c!=t.text)&&c.slice(0,r.from-l)==t.text.slice(0,r.from-l)&&c.slice(r.to-l)==t.text.slice(u=t.text.length-(c.length-(r.to-l)))?e={from:r.from,to:r.to,insert:R.of(t.text.slice(r.from-l,u).split(Ve))}:(d=jl(c,t.text,h-l,f))&&(S.chrome&&o==13&&d.toB==d.from+2&&t.text.slice(d.from,d.toB)==Ve+Ve&&d.toB--,e={from:l+d.from,to:l+d.toA,insert:R.of(t.text.slice(d.from,d.toB).split(Ve))})}else i&&(!n.hasFocus&&s.facet(Jt)||gn(i,r))&&(i=null);if(!e&&!i)return!1;if((S.mac||S.android)&&e&&e.from==e.to&&e.from==r.head-1&&/^\. ?$/.test(e.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&e.insert.length==2&&(i=w.single(i.main.anchor-1,i.main.head-1)),e={from:e.from,to:e.to,insert:R.of([e.insert.toString().replace("."," ")])}):s.doc.lineAt(r.from).toDate.now()-50?e={from:r.from,to:r.to,insert:s.toText(n.inputState.insertingText)}:S.chrome&&e&&e.from==e.to&&e.from==r.head&&e.insert.toString()==` + `&&n.lineWrapping&&(i&&(i=w.single(i.main.anchor-1,i.main.head-1)),e={from:r.from,to:r.to,insert:R.of([" "])}),e)return wr(n,e,i,o);if(i&&!gn(i,r)){let l=!1,a="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(l=!0),a=n.inputState.lastSelectionOrigin,a=="select.pointer"&&(i=$l(s.facet(ki).map(h=>h(n)),i))),n.dispatch({selection:i,scrollIntoView:l,userEvent:a}),!0}else return!1}function wr(n,t,e,i=-1){if(S.ios&&n.inputState.flushIOSKey(t))return!0;let s=n.state.selection.main;if(S.android&&(t.to==s.to&&(t.from==s.from||t.from==s.from-1&&n.state.sliceDoc(t.from,s.from)==" ")&&t.insert.length==1&&t.insert.lines==2&&$e(n.contentDOM,"Enter",13)||(t.from==s.from-1&&t.to==s.to&&t.insert.length==0||i==8&&t.insert.lengths.head)&&$e(n.contentDOM,"Backspace",8)||t.from==s.from&&t.to==s.to+1&&t.insert.length==0&&$e(n.contentDOM,"Delete",46)))return!0;let r=t.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=tc(n,t,e));return n.state.facet(Bl).some(a=>a(n,t.from,t.to,r,l))||n.dispatch(l()),!0}function tc(n,t,e){let i,s=n.state,r=s.selection.main,o=-1;if(t.from==t.to&&t.fromr.to){let a=t.fromc(n)),h,a);t.from==f&&(o=f)}if(o>-1)i={changes:t,selection:w.cursor(t.from+t.insert.length,-1)};else if(t.from>=r.from&&t.to<=r.to&&t.to-t.from>=(r.to-r.from)/3&&(!e||e.main.empty&&e.main.from==t.from+t.insert.length)&&n.inputState.composing<0){let a=r.fromt.to?s.sliceDoc(t.to,r.to):"";i=s.replaceSelection(n.state.toText(a+t.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let a=s.changes(t),h=e&&e.main.to<=a.newLength?e.main:void 0;if(s.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&t.to<=r.to+10&&t.to>=r.to-10){let f=n.state.sliceDoc(t.from,t.to),c,u=e&&ql(n,e.main.head);if(u){let p=t.insert.length-(t.to-t.from);c={from:u.from,to:u.to-p}}else c=n.state.doc.lineAt(r.head);let d=r.to-t.to;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:a,range:h||p.map(a)};let g=p.to-d,m=g-f.length;if(n.state.sliceDoc(m,g)!=f||g>=c.from&&m<=c.to)return{range:p};let y=s.changes({from:m,to:g,insert:t.insert}),C=p.to-r.to;return{changes:y,range:h?w.range(Math.max(0,h.anchor+C),Math.max(0,h.head+C)):p.map(y)}})}else i={changes:a,selection:h&&s.selection.replaceRange(h)}}let l="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=".compose",n.inputState.compositionFirstChange&&(l+=".start",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:l,scrollIntoView:!0})}function jl(n,t,e,i){let s=Math.min(n.length,t.length),r=0;for(;r0&&l>0&&n.charCodeAt(o-1)==t.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,r-Math.min(o,l));e-=o+a-r}if(o=o?r-e:0;r-=a,l=r+(l-o),o=r}else if(l=l?r-e:0;r-=a,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}function ec(n){let t=[];if(n.root.activeElement!=n.contentDOM)return t;let{anchorNode:e,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return e&&(t.push(new pn(e,i)),(s!=e||r!=i)&&t.push(new pn(s,r))),t}function ic(n,t){if(n.length==0)return null;let e=n[0].pos,i=n.length==2?n[1].pos:e;return e>-1&&i>-1?w.single(e+t,i+t):null}function gn(n,t){return t.head==n.main.head&&t.anchor==n.main.anchor}var Us=class{setSelectionOrigin(t){this.lastSelectionOrigin=t,this.lastSelectionTime=Date.now()}constructor(t){this.view=t,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=t.hasFocus,S.safari&&t.contentDOM.addEventListener("input",()=>null),S.gecko&&mc(t.contentDOM.ownerDocument)}handleEvent(t){!hc(this.view,t)||this.ignoreDuringComposition(t)||t.type=="keydown"&&this.keydown(t)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(t.type,t)):this.runHandlers(t.type,t))}runHandlers(t,e){let i=this.handlers[t];if(i){for(let s of i.observers)s(this.view,e);for(let s of i.handlers){if(e.defaultPrevented)break;if(s(this.view,e)){e.preventDefault();break}}}}ensureHandlers(t){let e=nc(t),i=this.handlers,s=this.view.contentDOM;for(let r in e)if(r!="scroll"){let o=!e[r].handlers.length,l=i[r];l&&o!=!l.handlers.length&&(s.removeEventListener(r,this.handleEvent),l=null),l||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!="scroll"&&!e[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=e}keydown(t){if(this.lastKeyCode=t.keyCode,this.lastKeyTime=Date.now(),t.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&t.keyCode!=27&&Jl.indexOf(t.keyCode)<0&&(this.tabFocusMode=-1),S.android&&S.chrome&&!t.synthetic&&(t.keyCode==13||t.keyCode==8))return this.view.observer.delayAndroidKey(t.key,t.keyCode),!0;let e;return S.ios&&!t.synthetic&&!t.altKey&&!t.metaKey&&!t.shiftKey&&((e=Gl.find(i=>i.keyCode==t.keyCode))&&!t.ctrlKey||sc.indexOf(t.key)>-1&&t.ctrlKey)?(this.pendingIOSKey=e||t,setTimeout(()=>this.flushIOSKey(),250),!0):(t.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(t){let e=this.pendingIOSKey;return!e||e.key=="Enter"&&t&&t.from0?!0:S.safari&&!S.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(t){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=t}update(t){this.view.observer.update(t),this.mouseSelection&&this.mouseSelection.update(t),this.draggedContent&&t.docChanged&&(this.draggedContent=this.draggedContent.map(t.changes)),t.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function jo(n,t){return(e,i)=>{try{return t.call(n,i,e)}catch(s){Mt(e.state,s)}}}function nc(n){let t=Object.create(null);function e(i){return t[i]||(t[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let l in r){let a=r[l];a&&e(l).handlers.push(jo(i.value,a))}if(o)for(let l in o){let a=o[l];a&&e(l).observers.push(jo(i.value,a))}}for(let i in Dt)e(i).handlers.push(Dt[i]);for(let i in ht)e(i).observers.push(ht[i]);return t}var Gl=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],sc="dthko",Jl=[16,17,18,20,91,92,224,225],Ji=6;function Yi(n){return Math.max(0,n)*.7+8}function rc(n,t){return Math.max(Math.abs(n.clientX-t.clientX),Math.abs(n.clientY-t.clientY))}var js=class{constructor(t,e,i,s){this.view=t,this.startEvent=e,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=e,this.scrollParents=bl(t.contentDOM),this.atoms=t.state.facet(ki).map(o=>o(t));let r=t.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=e.shiftKey,this.multiple=t.state.facet(K.allowMultipleSelections)&&oc(t,e),this.dragging=ac(t,e)&&Ql(e)==1?null:!1}start(t){this.dragging===!1&&this.select(t)}move(t){if(t.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&rc(this.startEvent,t)<10)return;this.select(this.lastEvent=t);let e=0,i=0,s=0,r=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=zl(this.view);t.clientX-a.left<=s+Ji?e=-Yi(s-t.clientX):t.clientX+a.right>=o-Ji&&(e=Yi(t.clientX-o)),t.clientY-a.top<=r+Ji?i=-Yi(r-t.clientY):t.clientY+a.bottom>=l-Ji&&(i=Yi(t.clientY-l)),this.setScrollSpeed(e,i)}up(t){this.dragging==null&&this.select(this.lastEvent),this.dragging||t.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let t=this.view.contentDOM.ownerDocument;t.removeEventListener("mousemove",this.move),t.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(t,e){this.scrollSpeed={x:t,y:e},t||e?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:t,y:e}=this.scrollSpeed;t&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=t,t=0),e&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=e,e=0),(t||e)&&this.view.win.scrollBy(t,e),this.dragging===!1&&this.select(this.lastEvent)}select(t){let{view:e}=this,i=$l(this.atoms,this.style.get(t,this.extend,this.multiple));(this.mustSelect||!i.eq(e.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(t){t.transactions.some(e=>e.isUserEvent("input.type"))?this.destroy():this.style.update(t)&&setTimeout(()=>this.select(this.lastEvent),20)}};function oc(n,t){let e=n.state.facet(Tl);return e.length?e[0](t):S.mac?t.metaKey:t.ctrlKey}function lc(n,t){let e=n.state.facet(El);return e.length?e[0](t):S.mac?!t.altKey:!t.ctrlKey}function ac(n,t){let{main:e}=n.state.selection;if(e.empty)return!1;let i=xi(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r=t.clientX&&o.top<=t.clientY&&o.bottom>=t.clientY)return!0}return!1}function hc(n,t){if(!t.bubbles)return!0;if(t.defaultPrevented)return!1;for(let e=t.target,i;e!=n.contentDOM;e=e.parentNode)if(!e||e.nodeType==11||(i=j.get(e))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(t))return!1;return!0}var Dt=Object.create(null),ht=Object.create(null),Yl=S.ie&&S.ie_version<15||S.ios&&S.webkit_version<604;function fc(n){let t=n.dom.parentNode;if(!t)return;let e=t.appendChild(document.createElement("textarea"));e.style.cssText="position: fixed; left: -10000px; top: 10px",e.focus(),setTimeout(()=>{n.focus(),e.remove(),Xl(n,e.value)},50)}function Cn(n,t,e){for(let i of n.facet(t))e=i(e,n);return e}function Xl(n,t){t=Cn(n.state,gr,t);let{state:e}=n,i,s=1,r=e.toText(t),o=r.lines==e.selection.ranges.length;if(Gs!=null&&e.selection.ranges.every(a=>a.empty)&&Gs==r.toString()){let a=-1;i=e.changeByRange(h=>{let f=e.doc.lineAt(h.from);if(f.from==a)return{range:h};a=f.from;let c=e.toText((o?r.line(s++).text:t)+e.lineBreak);return{changes:{from:f.from,insert:c},range:w.cursor(h.from+c.length)}})}else o?i=e.changeByRange(a=>{let h=r.line(s++);return{changes:{from:a.from,to:a.to,insert:h.text},range:w.cursor(a.from+h.length)}}):i=e.replaceSelection(r);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}ht.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};ht.wheel=ht.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};Dt.keydown=(n,t)=>(n.inputState.setSelectionOrigin("select"),t.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);ht.touchstart=(n,t)=>{let e=n.inputState,i=t.targetTouches[0];e.lastTouchTime=Date.now(),i&&(e.lastTouchX=i.clientX,e.lastTouchY=i.clientY),e.setSelectionOrigin("select.pointer")};ht.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};Dt.mousedown=(n,t)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let e=null;for(let i of n.state.facet(Dl))if(e=i(n,t),e)break;if(!e&&t.button==0&&(e=uc(n,t)),e){let i=!n.hasFocus;n.inputState.startMouseSelection(new js(n,t,e,i)),i&&n.observer.ignore(()=>{yl(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(t),s.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function Go(n,t,e,i){if(i==1)return w.cursor(t,e);if(i==2)return jf(n.state,t,e);{let s=n.docView.lineAt(t,e),r=n.state.doc.lineAt(s?s.posAtEnd:t),o=s?s.posAtStart:r.from,l=s?s.posAtEnd:r.to;return lDate.now()-400&&Math.abs(t.clientX-n.clientX)<2&&Math.abs(t.clientY-n.clientY)<2?(Yo+1)%3:1}function uc(n,t){let e=n.posAndSideAtCoords({x:t.clientX,y:t.clientY},!1),i=Ql(t),s=n.state.selection;return{update(r){r.docChanged&&(e.pos=r.changes.mapPos(e.pos),s=s.map(r.changes))},get(r,o,l){let a=n.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),h,f=Go(n,a.pos,a.assoc,i);if(e.pos!=a.pos&&!o){let c=Go(n,e.pos,e.assoc,i),u=Math.min(c.from,f.from),d=Math.max(c.to,f.to);f=u1&&(h=dc(s,a.pos))?h:l?s.addRange(f):w.create([f])}}}function dc(n,t){for(let e=0;e=t)return w.create(n.ranges.slice(0,e).concat(n.ranges.slice(e+1)),n.mainIndex==e?0:n.mainIndex-(n.mainIndex>e?1:0))}return null}Dt.dragstart=(n,t)=>{let{selection:{main:e}}=n.state;if(t.target.draggable){let s=n.docView.tile.nearest(t.target);if(s&&s.isWidget()){let r=s.posAtStart,o=r+s.length;(r>=e.to||o<=e.from)&&(e=w.range(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=e,t.dataTransfer&&(t.dataTransfer.setData("Text",Cn(n.state,mr,n.state.sliceDoc(e.from,e.to))),t.dataTransfer.effectAllowed="copyMove"),!1};Dt.dragend=n=>(n.inputState.draggedContent=null,!1);function Qo(n,t,e,i){if(e=Cn(n.state,gr,e),!e)return;let s=n.posAtCoords({x:t.clientX,y:t.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&lc(n,t)?{from:r.from,to:r.to}:null,l={from:s,insert:e},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(s,-1),head:a.mapPos(s,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}Dt.drop=(n,t)=>{if(!t.dataTransfer)return!1;if(n.state.readOnly)return!0;let e=t.dataTransfer.files;if(e&&e.length){let i=Array(e.length),s=0,r=()=>{++s==e.length&&Qo(n,t,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),r()},l.readAsText(e[o])}return!0}else{let i=t.dataTransfer.getData("Text");if(i)return Qo(n,t,i,!0),!0}return!1};Dt.paste=(n,t)=>{if(n.state.readOnly)return!0;n.observer.flush();let e=Yl?null:t.clipboardData;return e?(Xl(n,e.getData("text/plain")||e.getData("text/uri-list")),!0):(fc(n),!1)};function pc(n,t){let e=n.dom.parentNode;if(!e)return;let i=e.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=t,i.focus(),i.selectionEnd=t.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function gc(n){let t=[],e=[],i=!1;for(let s of n.selection.ranges)s.empty||(t.push(n.sliceDoc(s.from,s.to)),e.push(s));if(!t.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(t.push(o.text),e.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:Cn(n,mr,t.join(n.lineBreak)),ranges:e,linewise:i}}var Gs=null;Dt.copy=Dt.cut=(n,t)=>{if(!fi(n.contentDOM,n.observer.selectionRange))return!1;let{text:e,ranges:i,linewise:s}=gc(n.state);if(!e&&!s)return!1;Gs=s?e:null,t.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let r=Yl?null:t.clipboardData;return r?(r.clearData(),r.setData("text/plain",e),!0):(pc(n,e),!1)};var Zl=mt.define();function ta(n,t){let e=[];for(let i of n.facet(Ll)){let s=i(n,t);s&&e.push(s)}return e.length?n.update({effects:e,annotations:Zl.of(!0)}):null}function ea(n){setTimeout(()=>{let t=n.hasFocus;if(t!=n.inputState.notifiedFocused){let e=ta(n.state,t);e?n.dispatch(e):n.update([])}},10)}ht.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),ea(n)};ht.blur=n=>{n.observer.clearSelectionRange(),ea(n)};ht.compositionstart=ht.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};ht.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,S.chrome&&S.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};ht.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};Dt.beforeinput=(n,t)=>{var e,i;if((t.inputType=="insertText"||t.inputType=="insertCompositionText")&&(n.inputState.insertingText=t.data,n.inputState.insertingTextAt=Date.now()),t.inputType=="insertReplacementText"&&n.observer.editContext){let r=(e=t.dataTransfer)===null||e===void 0?void 0:e.getData("text/plain"),o=t.getTargetRanges();if(r&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return wr(n,{from:a,to:h,insert:n.state.toText(r)},null),!0}}let s;if(S.chrome&&S.android&&(s=Gl.find(r=>r.inputType==t.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key=="Backspace"||s.key=="Delete")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return S.ios&&t.inputType=="deleteContentForward"&&n.observer.flushSoon(),S.safari&&t.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>ht.compositionend(n,t),20),!1};var Zo=new Set;function mc(n){Zo.has(n)||(Zo.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}var tl=["pre-wrap","normal","pre-line","break-spaces"],Je=!1;function el(){Je=!1}var Js=class{constructor(t){this.lineWrapping=t,this.doc=R.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(t,e){let i=this.doc.lineAt(e).number-this.doc.lineAt(t).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((e-t-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(t){return this.lineWrapping?(1+Math.max(0,Math.ceil((t-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(t){return this.doc=t,this}mustRefreshForWrapping(t){return tl.indexOf(t)>-1!=this.lineWrapping}mustRefreshForHeights(t){let e=!1;for(let i=0;i-1,a=Math.abs(e-this.lineHeight)>.3||this.lineWrapping!=l||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=l,this.lineHeight=e,this.charWidth=i,this.textHeight=s,this.lineLength=r,a){this.heightSamples={};for(let h=0;h0}set outdated(t){this.flags=(t?2:0)|this.flags&-3}setHeight(t){this.height!=t&&(Math.abs(this.height-t)>nn&&(Je=!0),this.height=t)}replace(t,e,i){return n.of(i)}decomposeLeft(t,e){e.push(this)}decomposeRight(t,e){e.push(this)}applyChanges(t,e,i,s){let r=this,o=i.doc;for(let l=s.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:f,toB:c}=s[l],u=r.lineAt(a,q.ByPosNoHeight,i.setDoc(e),0,0),d=u.to>=h?u:r.lineAt(h,q.ByPosNoHeight,i,0,0);for(c+=d.to-h,h=d.to;l>0&&u.from<=s[l-1].toA;)a=s[l-1].fromA,f=s[l-1].fromB,l--,ar*2){let l=t[e-1];l.break?t.splice(--e,1,l.left,null,l.right):t.splice(--e,1,l.left,l.right),i+=1+l.break,s-=l.size}else if(r>s*2){let l=t[i];l.break?t.splice(i,1,l.left,null,l.right):t.splice(i,1,l.left,l.right),i+=2+l.break,r-=l.size}else break;else if(s=r&&o(this.lineAt(0,q.ByPos,i,s,r))}setMeasuredHeight(t){let e=t.heights[t.index++];e<0?(this.spaceAbove=-e,e=t.heights[t.index++]):this.spaceAbove=0,this.setHeight(e)}updateHeight(t,e=0,i=!1,s){return s&&s.from<=e&&s.more&&this.setMeasuredHeight(s),this.outdated=!1,this}toString(){return`block(${this.length})`}},yt=class n extends bn{constructor(t,e,i){super(t,e,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(t,e){return new At(e,this.length,t+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(t,e,i){let s=i[0];return i.length==1&&(s instanceof n||s instanceof ee&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof ee?s=new n(s.length,this.height,this.spaceAbove):s.height=this.height,this.outdated||(s.outdated=!1),s):ut.of(i)}updateHeight(t,e=0,i=!1,s){return s&&s.from<=e&&s.more?this.setMeasuredHeight(s):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,t.heightForLine(this.length-this.collapsed))+this.breaks*t.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},ee=class n extends ut{constructor(t){super(t,0)}heightMetrics(t,e){let i=t.doc.lineAt(e).number,s=t.doc.lineAt(e+this.length).number,r=s-i+1,o,l=0;if(t.lineWrapping){let a=Math.min(this.height,t.lineHeight*r);o=a/r,this.length>r+1&&(l=(this.height-a)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:l}}blockAt(t,e,i,s){let{firstLine:r,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(e,s);if(e.lineWrapping){let h=s+(t0){let r=i[i.length-1];r instanceof n?i[i.length-1]=new n(r.length+s):i.push(null,new n(s-1))}if(t>0){let r=i[0];r instanceof n?i[0]=new n(t+r.length):i.unshift(new n(t-1),null)}return ut.of(i)}decomposeLeft(t,e){e.push(new n(t-1),null)}decomposeRight(t,e){e.push(null,new n(this.length-t-1))}updateHeight(t,e=0,i=!1,s){let r=e+this.length;if(s&&s.from<=e+this.length&&s.more){let o=[],l=Math.max(e,s.from),a=-1;for(s.from>e&&o.push(new n(s.from-e-1).updateHeight(t,e));l<=r&&s.more;){let f=t.doc.lineAt(l).length;o.length&&o.push(null);let c=s.heights[s.index++],u=0;c<0&&(u=-c,c=s.heights[s.index++]),a==-1?a=c:Math.abs(c-a)>=nn&&(a=-2);let d=new yt(f,c,u);d.outdated=!1,o.push(d),l+=f+1}l<=r&&o.push(null,new n(r-l).updateHeight(t,l));let h=ut.of(o);return(a<0||Math.abs(h.height-this.height)>=nn||Math.abs(a-this.heightMetrics(t,e).perLine)>=nn)&&(Je=!0),mn(this,h)}else(i||this.outdated)&&(this.setHeight(t.heightForGap(e,e+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},Xs=class extends ut{constructor(t,e,i){super(t.length+e+i.length,t.height+i.height,e|(t.outdated||i.outdated?2:0)),this.left=t,this.right=i,this.size=t.size+i.size}get break(){return this.flags&1}blockAt(t,e,i,s){let r=i+this.left.height;return tl))return h;let f=e==q.ByPosNoHeight?q.ByPosNoHeight:q.ByPos;return a?h.join(this.right.lineAt(l,f,i,o,l)):this.left.lineAt(l,f,i,s,r).join(h)}forEachLine(t,e,i,s,r,o){let l=s+this.left.height,a=r+this.left.length+this.break;if(this.break)t=a&&this.right.forEachLine(t,e,i,l,a,o);else{let h=this.lineAt(a,q.ByPos,i,s,r);t=t&&h.from<=e&&o(h),e>h.to&&this.right.forEachLine(h.to+1,e,i,l,a,o)}}replace(t,e,i){let s=this.left.length+this.break;if(ethis.left.length)return this.balanced(this.left,this.right.replace(t-s,e-s,i));let r=[];t>0&&this.decomposeLeft(t,r);let o=r.length;for(let l of i)r.push(l);if(t>0&&il(r,o-1),e=i&&e.push(null)),t>i&&this.right.decomposeLeft(t-i,e)}decomposeRight(t,e){let i=this.left.length,s=i+this.break;if(t>=s)return this.right.decomposeRight(t-s,e);t2*e.size||e.size>2*t.size?ut.of(this.break?[t,null,e]:[t,e]):(this.left=mn(this.left,t),this.right=mn(this.right,e),this.setHeight(t.height+e.height),this.outdated=t.outdated||e.outdated,this.size=t.size+e.size,this.length=t.length+this.break+e.length,this)}updateHeight(t,e=0,i=!1,s){let{left:r,right:o}=this,l=e+r.length+this.break,a=null;return s&&s.from<=e+r.length&&s.more?a=r=r.updateHeight(t,e,i,s):r.updateHeight(t,e,i),s&&s.from<=l+o.length&&s.more?a=o=o.updateHeight(t,l,i,s):o.updateHeight(t,l,i),a?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function il(n,t){let e,i;n[t]==null&&(e=n[t-1])instanceof ee&&(i=n[t+1])instanceof ee&&n.splice(t-1,3,new ee(e.length+1+i.length))}var yc=5,Qs=class n{constructor(t,e){this.pos=t,this.oracle=e,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=t}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(t,e){if(this.lineStart>-1){let i=Math.min(e,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof yt?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new yt(i-this.pos,-1,0)),this.writtenTo=i,e>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=e}point(t,e,i){if(t=yc)&&this.addLineDeco(s,r,o)}else e>t&&this.span(t,e);this.lineEnd>-1&&this.lineEnd-1)return;let{from:t,to:e}=this.oracle.doc.lineAt(this.pos);this.lineStart=t,this.lineEnd=e,this.writtenTot&&this.nodes.push(new yt(this.pos-t,-1,0)),this.writtenTo=this.pos}blankContent(t,e){let i=new ee(e-t);return this.oracle.doc.lineAt(t).to==e&&(i.flags|=4),i}ensureLine(){this.enterLine();let t=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(t instanceof yt)return t;let e=new yt(0,-1,0);return this.nodes.push(e),e}addBlock(t){this.enterLine();let e=t.deco;e&&e.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(t),this.writtenTo=this.pos=this.pos+t.length,e&&e.endSide>0&&(this.covering=t)}addLineDeco(t,e,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,t),s.breaks+=e,this.writtenTo=this.pos=this.pos+i}finish(t){let e=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(e instanceof yt)&&!this.isCovered?this.nodes.push(new yt(0,-1,0)):(this.writtenTof.clientHeight||f.scrollWidth>f.clientWidth)&&c.overflow!="visible"){let u=f.getBoundingClientRect();r=Math.max(r,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?s.innerHeight:a,u.bottom)}h=c.position=="absolute"||c.position=="fixed"?f.offsetParent:f.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:r-e.left,right:Math.max(r,o)-e.left,top:l-(e.top+t),bottom:Math.max(l,a)-(e.top+t)}}function vc(n){let t=n.getBoundingClientRect(),e=n.ownerDocument.defaultView||window;return t.left0&&t.top0}function kc(n,t){let e=n.getBoundingClientRect();return{left:0,right:e.right-e.left,top:t,bottom:e.bottom-(e.top+t)}}var mi=class{constructor(t,e,i,s){this.from=t,this.to=e,this.size=i,this.displaySize=s}static same(t,e){if(t.length!=e.length)return!1;for(let i=0;itypeof s!="function"&&s.class=="cm-lineWrapping");this.heightOracle=new Js(i),this.stateDeco=sl(e),this.heightMap=ut.empty().applyChanges(this.stateDeco,R.empty,this.heightOracle.setDoc(e.doc),[new Tt(0,0,0,e.doc.length)]);for(let s=0;s<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());s++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=z.set(this.lineGaps.map(s=>s.draw(this,!1))),this.scrollParent=t.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let t=[this.viewport],{main:e}=this.state.selection;for(let i=0;i<=1;i++){let s=i?e.head:e.anchor;if(!t.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);t.push(new ze(r,o))}}return this.viewports=t.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let t=this.scaler;return this.scaler=this.heightMap.height<=7e6?nl:new er(this.heightOracle,this.heightMap,this.viewports),t.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,t=>{this.viewportLines.push(hi(t,this.scaler))})}update(t,e=null){this.state=t.state;let i=this.stateDeco;this.stateDeco=sl(this.state);let s=t.changedRanges,r=Tt.extendWithRanges(s,wc(i,this.stateDeco,t?t.changes:st.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);el(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,t.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||Je)&&(t.flags|=2),l?(this.scrollAnchorPos=t.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=r.length?this.mapViewport(this.viewport,t.changes):this.viewport;(e&&(e.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,e));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,t.flags|=this.updateForViewport(),(h||!t.changes.empty||t.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,t.changes))),t.flags|=this.computeVisibleRanges(t.changes),e&&(this.scrollTarget=e),!this.mustEnforceCursorAssoc&&(t.selectionSet||t.focusChanged)&&t.view.lineWrapping&&t.state.selection.main.empty&&t.state.selection.main.assoc&&!t.state.facet(Pl)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:t}=this,e=t.contentDOM,i=window.getComputedStyle(e),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?$.RTL:$.LTR;let o=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent==="refresh",l=e.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,f=0;if(l.width&&l.height){let{scaleX:A,scaleY:k}=ml(e,l);(A>.005&&Math.abs(this.scaleX-A)>.005||k>.005&&Math.abs(this.scaleY-k)>.005)&&(this.scaleX=A,this.scaleY=k,h|=16,o=a=!0)}let c=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=c||this.paddingBottom!=u)&&(this.paddingTop=c,this.paddingBottom=u,h|=18),this.editorWidth!=t.scrollDOM.clientWidth&&(s.lineWrapping&&(a=!0),this.editorWidth=t.scrollDOM.clientWidth,h|=16);let d=bl(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=wl(this.scrollParent||t.win);let g=(this.printing?kc:xc)(e,this.paddingTop),m=g.top-this.pixelViewport.top,y=g.bottom-this.pixelViewport.bottom;this.pixelViewport=g;let C=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(C!=this.inView&&(this.inView=C,C&&(a=!0)),!this.inView&&!this.scrollTarget&&!vc(t.dom))return 0;let T=l.width;if((this.contentDOMWidth!=T||this.editorHeight!=t.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=t.scrollDOM.clientHeight,h|=16),a){let A=t.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(A)&&(o=!0),o||s.lineWrapping&&Math.abs(T-this.contentDOMWidth)>s.charWidth){let{lineHeight:k,charWidth:v,textHeight:N}=t.docView.measureTextSize();o=k>0&&s.refresh(r,k,v,N,Math.max(5,T/v),A),o&&(t.docView.minWidth=0,h|=16)}m>0&&y>0?f=Math.max(m,y):m<0&&y<0&&(f=Math.min(m,y)),el();for(let k of this.viewports){let v=k.from==this.viewport.from?A:t.docView.measureVisibleLineHeights(k);this.heightMap=(o?ut.empty().applyChanges(this.stateDeco,R.empty,this.heightOracle,[new Tt(0,0,0,t.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new Ys(k.from,v))}Je&&(h|=2)}let P=!this.viewportIsAppropriate(this.viewport,f)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return P&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(f,this.scrollTarget),h|=this.updateForViewport()),(h&2||P)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,t)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,t.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(t,e){let i=.5-Math.max(-.5,Math.min(.5,t/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new ze(s.lineAt(o-i*1e3,q.ByHeight,r,0,0).from,s.lineAt(l+(1-i)*1e3,q.ByHeight,r,0,0).to);if(e){let{head:h}=e.range;if(ha.to){let f=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),c=s.lineAt(h,q.ByPos,r,0,0),u;e.y=="center"?u=(c.top+c.bottom)/2-f/2:e.y=="start"||e.y=="nearest"&&h=l+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r>1,o=s<<1;if(this.defaultTextDirection!=$.LTR&&!i)return[];let l=[],a=(f,c,u,d)=>{if(c-ff&&yy.from>=u.from&&y.to<=u.to&&Math.abs(y.from-f)y.fromC));if(!m){if(cT.from<=c&&T.to>=c)){let T=e.moveToLineBoundary(w.cursor(c),!1,!0).head;T>f&&(c=T)}let y=this.gapSize(u,f,c,d),C=i||y<2e6?y:2e6;m=new mi(f,c,y,C)}l.push(m)},h=f=>{if(f.length2e6)for(let k of t)k.from>=f.from&&k.fromf.from&&a(f.from,d,f,c),pe.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(t){let e=this.stateDeco;this.lineGaps.length&&(e=e.concat(this.lineGapDeco));let i=[];F.spans(e,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r=this.viewport.from&&t<=this.viewport.to&&this.viewportLines.find(e=>e.from<=t&&e.to>=t)||hi(this.heightMap.lineAt(t,q.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(t){return t>=this.viewportLines[0].top&&t<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(e=>e.top<=t&&e.bottom>=t)||hi(this.heightMap.lineAt(this.scaler.fromDOM(t),q.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(t){let e=this.lineBlockAtHeight(t+8);return e.from>=this.viewport.from||this.viewportLines[0].top-t>200?e:this.viewportLines[0]}elementAtHeight(t){return hi(this.heightMap.blockAt(this.scaler.fromDOM(t),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},ze=class{constructor(t,e){this.from=t,this.to=e}};function Sc(n,t,e){let i=[],s=n,r=0;return F.spans(e,n,t,{span(){},point(o,l){o>s&&(i.push({from:s,to:o}),r+=o-s),s=l}},20),s=1)return t[t.length-1].to;let i=Math.floor(n*e);for(let s=0;;s++){let{from:r,to:o}=t[s],l=o-r;if(i<=l)return r+i;i-=l}}function Qi(n,t){let e=0;for(let{from:i,to:s}of n.ranges){if(t<=s){e+=t-i;break}e+=s-i}return e/n.total}function Cc(n,t){for(let e of n)if(t(e))return e}var nl={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function sl(n){let t=n.facet(Sn).filter(i=>typeof i!="function"),e=n.facet(yr).filter(i=>typeof i!="function");return e.length&&t.push(F.join(e)),t}var er=class n{constructor(t,e,i){let s=0,r=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=e.lineAt(l,q.ByPos,t,0,0).top,f=e.lineAt(a,q.ByPos,t,0,0).bottom;return s+=f-h,{from:l,to:a,top:h,bottom:f,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(e.height-s);for(let l of this.viewports)l.domTop=o+(l.top-r)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),r=l.bottom}toDOM(t){for(let e=0,i=0,s=0;;e++){let r=ee.from==t.viewports[i].from&&e.to==t.viewports[i].to):!1}};function hi(n,t){if(t.scale==1)return n;let e=t.toDOM(n.top),i=t.toDOM(n.bottom);return new At(n.from,n.length,e,i-e,Array.isArray(n._content)?n._content.map(s=>hi(s,t)):n._content)}var Zi=M.define({combine:n=>n.join(" ")}),ir=M.define({combine:n=>n.indexOf(!0)>-1}),nr=bt.newName(),ia=bt.newName(),na=bt.newName(),sa={"&light":"."+ia,"&dark":"."+na};function sr(n,t,e){return new bt(t,{finish(i){return/&/.test(i)?i.replace(/&\w*/,s=>{if(s=="&")return n;if(!e||!e[s])throw new RangeError(`Unsupported selector: ${s}`);return e[s]}):n+" "+i}})}var Ac=sr("."+nr,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},sa),Mc={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},vs=S.ie&&S.ie_version<=11,rr=class{constructor(t){this.view=t,this.active=!1,this.editContext=null,this.selectionRange=new Es,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=t.contentDOM,this.observer=new MutationObserver(e=>{for(let i of e)this.queue.push(i);(S.ie&&S.ie_version<=11||S.ios&&t.composing)&&e.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&S.android&&t.constructor.EDIT_CONTEXT!==!1&&!(S.chrome&&S.chrome_version<126)&&(this.editContext=new or(t),t.state.facet(Jt)&&(t.contentDOM.editContext=this.editContext.editContext)),vs&&(this.onCharData=e=>{this.queue.push({target:e.target,type:"characterData",oldValue:e.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var e;((e=this.view.docView)===null||e===void 0?void 0:e.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),e.length>0&&e[e.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(e=>{e.length>0&&e[e.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(t){this.view.inputState.runHandlers("scroll",t),this.intersecting&&this.view.measure()}onScroll(t){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(t)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(t){(t.type=="change"||!t.type)&&!t.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(t){if(this.gapIntersection&&(t.length!=this.gaps.length||this.gaps.some((e,i)=>e!=t[i]))){this.gapIntersection.disconnect();for(let e of t)this.gapIntersection.observe(e);this.gaps=t}}onSelectionChange(t){let e=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(Jt)?i.root.activeElement!=this.dom:!fi(this.dom,s))return;let r=s.anchorNode&&i.docView.tile.nearest(s.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(t)){e||(this.selectionChanged=!1);return}(S.ie&&S.ie_version<=11||S.android&&S.chrome)&&!i.state.selection.main.empty&&s.focusNode&&ci(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:t}=this,e=xi(t.root);if(!e)return!1;let i=S.safari&&t.root.nodeType==11&&t.root.activeElement==this.dom&&Tc(this.view,e)||e;if(!i||this.selectionRange.eq(i))return!1;let s=fi(this.dom,i);return s&&!this.selectionChanged&&t.inputState.lastFocusTime>Date.now()-200&&t.inputState.lastTouchTime{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&$e(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||t=="Enter")&&(this.delayedAndroidKey={key:t,keyCode:e,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let t of this.observer.takeRecords())this.queue.push(t);return this.queue}processRecords(){let t=this.pendingRecords();t.length&&(this.queue=[]);let e=-1,i=-1,s=!1;for(let r of t){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),e==-1?{from:e,to:i}=o:(e=Math.min(o.from,e),i=Math.max(o.to,i)))}return{from:e,to:i,typeOver:s}}readChange(){let{from:t,to:e,typeOver:i}=this.processRecords(),s=this.selectionChanged&&fi(this.dom,this.selectionRange);if(t<0&&!s)return null;t>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new Ks(this.view,t,e,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(t=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;t&&this.readSelectionRange();let e=this.readChange();if(!e)return this.view.requestMeasure(),!1;let i=this.view.state,s=Ul(this.view,e);return this.view.state==i&&(e.domChanged||e.newSel&&!gn(this.view.state.selection,e.newSel.main))&&this.view.update([]),s}readMutation(t){let e=this.view.docView.tile.nearest(t.target);if(!e||e.isWidget())return null;if(e.markDirty(t.type=="attributes"),t.type=="childList"){let i=rl(e,t.previousSibling||t.target.previousSibling,-1),s=rl(e,t.nextSibling||t.target.nextSibling,1);return{from:i?e.posAfter(i):e.posAtStart,to:s?e.posBefore(s):e.posAtEnd,typeOver:!1}}else return t.type=="characterData"?{from:e.posAtStart,to:e.posAtEnd,typeOver:t.target.nodeValue==t.oldValue}:null}setWindow(t){t!=this.win&&(this.removeWindowListeners(this.win),this.win=t,this.addWindowListeners(this.win))}addWindowListeners(t){t.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):t.addEventListener("beforeprint",this.onPrint),t.addEventListener("scroll",this.onScroll),t.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(t){t.removeEventListener("scroll",this.onScroll),t.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):t.removeEventListener("beforeprint",this.onPrint),t.document.removeEventListener("selectionchange",this.onSelectionChange)}update(t){this.editContext&&(this.editContext.update(t),t.startState.facet(Jt)!=t.state.facet(Jt)&&(t.view.contentDOM.editContext=t.state.facet(Jt)?this.editContext.editContext:null))}destroy(){var t,e,i;this.stop(),(t=this.intersection)===null||t===void 0||t.disconnect(),(e=this.gapIntersection)===null||e===void 0||e.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function rl(n,t,e){for(;t;){let i=j.get(t);if(i&&i.parent==n)return i;let s=t.parentNode;t=s!=n.dom?s:e>0?t.nextSibling:t.previousSibling}return null}function ol(n,t){let e=t.startContainer,i=t.startOffset,s=t.endContainer,r=t.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return ci(o.node,o.offset,s,r)&&([e,i,s,r]=[s,r,e,i]),{anchorNode:e,anchorOffset:i,focusNode:s,focusOffset:r}}function Tc(n,t){if(t.getComposedRanges){let s=t.getComposedRanges(n.root)[0];if(s)return ol(n,s)}let e=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),e=s.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),e?ol(n,e):null}var or=class{constructor(t){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(t.state);let e=this.editContext=new window.EditContext({text:t.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,t.state.selection.main.anchor))),selectionEnd:this.toContextPos(t.state.selection.main.head)});this.handlers.textupdate=i=>{let s=t.state.selection.main,{anchor:r,head:o}=s,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);t.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h=a-l>i.text.length;l==this.from&&rthis.to&&(a=r);let f=jl(t.state.sliceDoc(l,a),i.text,(h?s.from:s.to)-l,h?"end":null);if(!f){let u=w.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));gn(u,s)||t.dispatch({selection:u,userEvent:"select"});return}let c={from:f.from+l,to:f.toA+l,insert:R.of(i.text.slice(f.from,f.toB).split(` +`))};if((S.mac||S.android)&&c.from==o-1&&/^\. ?$/.test(i.text)&&t.contentDOM.getAttribute("autocorrect")=="off"&&(c={from:l,to:a,insert:R.of([i.text.replace("."," ")])}),this.pendingContextChange=c,!t.state.readOnly){let u=this.to-this.from+(c.to-c.from+c.insert.length);wr(t,c,w.single(this.toEditorPos(i.selectionStart,u),this.toEditorPos(i.selectionEnd,u)))}this.pendingContextChange&&(this.revertPending(t.state),this.setSelection(t.state)),c.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(e.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(e.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,l=r.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(r.rangeStart),h=this.toEditorPos(r.rangeEnd);if(a{t.inputState.composing<0&&(t.inputState.composing=0,t.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(t.inputState.composing=-1,t.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(t.state)}};for(let i in this.handlers)e.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let s=xi(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(t){let e=0,i=!1,s=this.pendingContextChange;return t.changes.iterChanges((r,o,l,a,h)=>{if(i)return;let f=h.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(h)){s=this.pendingContextChange=null,e+=f,this.to+=f;return}else s=null,this.revertPending(t.state);if(r+=e,o+=e,o<=this.from)this.from+=f,this.to+=f;else if(rthis.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),h.toString()),this.to+=f}e+=f}),s&&!i&&this.revertPending(t.state),!i}update(t){let e=this.pendingContextChange,i=t.startState.selection.main;this.composing&&(this.composing.drifted||!t.changes.touchesRange(i.from,i.to)&&t.transactions.some(s=>!s.isUserEvent("input.type")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=t.changes.mapPos(this.composing.editorBase)):!this.applyEdits(t)||!this.rangeIsValid(t.state)?(this.pendingContextChange=null,this.reset(t.state)):(t.docChanged||t.selectionSet||e)&&this.setSelection(t.state),(t.geometryChanged||t.docChanged||t.selectionSet)&&t.view.requestMeasure(this.measureReq)}resetRange(t){let{head:e}=t.selection.main;this.from=Math.max(0,e-1e4),this.to=Math.min(t.doc.length,e+1e4)}reset(t){this.resetRange(t),this.editContext.updateText(0,this.editContext.text.length,t.doc.sliceString(this.from,this.to)),this.setSelection(t)}revertPending(t){let e=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(e.from),this.toContextPos(e.from+e.insert.length),t.doc.sliceString(e.from,e.to))}setSelection(t){let{main:e}=t.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,e.anchor))),s=this.toContextPos(e.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(t){let{head:e}=t.selection.main;return!(this.from>0&&e-this.from<500||this.to1e4*3)}toEditorPos(t,e=this.to-this.from){t=Math.min(t,e);let i=this.composing;return i&&i.drifted?i.editorBase+(t-i.contextBase):t+this.from}toContextPos(t){let e=this.composing;return e&&e.drifted?e.contextBase+(t-e.editorBase):t-this.from}destroy(){for(let t in this.handlers)this.editContext.removeEventListener(t,this.handlers[t])}},E=class n{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(t={}){var e;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),t.parent&&t.parent.appendChild(this.dom);let{dispatch:i}=t;this.dispatchTransactions=t.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=t.root||vf(t.parent)||document,this.viewState=new yn(this,t.state||K.create(t)),t.scrollTo&&t.scrollTo.is(Gi)&&(this.viewState.scrollTarget=t.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(We).map(s=>new di(s));for(let s of this.plugins)s.update(this);this.observer=new rr(this),this.inputState=new Us(this),this.inputState.ensureHandlers(this.plugins),this.docView=new dn(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((e=document.fonts)===null||e===void 0)&&e.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...t){let e=t.length==1&&t[0]instanceof X?t:t.length==1&&Array.isArray(t[0])?t[0]:[this.state.update(...t)];this.dispatchTransactions(e,this)}update(t){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let e=!1,i=!1,s,r=this.state;for(let u of t){if(u.startState!=r)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");r=u.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,l=0,a=null;t.some(u=>u.annotation(Zl))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=ta(r,o),a||(l=1));let h=this.observer.delayedAndroidKey,f=null;if(h?(this.observer.clearDelayedAndroidKey(),f=this.observer.readChange(),(f&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(f=null)):this.observer.clear(),r.facet(K.phrases)!=this.state.facet(K.phrases))return this.setState(r);s=cn.create(this,r,t),s.flags|=l;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let u of t){if(c&&(c=c.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection,{x:p,y:g}=this.state.facet(n.cursorScrollMargin);c=new ui(d.empty?d:w.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",g,p)}for(let d of u.effects)d.is(Gi)&&(c=d.value.clip(this.state))}this.viewState.update(s,c),this.bidiCache=wn.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),e=this.docView.update(s),this.state.facet(ai)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(t),this.docView.updateSelection(e,t.some(u=>u.isUserEvent("select.pointer")))}finally{this.updateState=0}if(s.startState.facet(Zi)!=s.state.facet(Zi)&&(this.viewState.mustMeasureContent=!0),(e||i||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),e&&this.docViewUpdate(),!s.empty)for(let u of this.state.facet(Ls))try{u(s)}catch(d){Mt(this.state,d,"update listener")}(a||f)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),f&&!Ul(this,f)&&h.force&&$e(this.contentDOM,h.key,h.keyCode)})}setState(t){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=t;return}this.updateState=2;let e=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new yn(this,t),this.plugins=t.facet(We).map(i=>new di(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new dn(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}e&&this.focus(),this.requestMeasure()}updatePlugins(t){let e=t.startState.facet(We),i=t.state.facet(We);if(e!=i){let s=[];for(let r of i){let o=e.indexOf(r);if(o<0)s.push(new di(r));else{let l=this.plugins[o];l.mustUpdate=t,s.push(l)}}for(let r of this.plugins)r.mustUpdate!=t&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=t;for(let s=0;s-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,t&&this.observer.forceFlush();let e=null,i=this.viewState.scrollParent,s=this.viewState.getScrollOffset(),{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(wl(i||this.win))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure();if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let f=h.map(d=>{try{return d.read(this)}catch(p){return Mt(this.state,p),ll}}),c=cn.create(this,this.state,[]),u=!1;c.flags|=a,e?e.flags|=a:e=c,this.updateState=2,c.empty||(this.updatePlugins(c),this.inputState.update(c),this.updateAttrs(),u=this.docView.update(c),u&&this.docViewUpdate());for(let d=0;d1||p<-1)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){s=s+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(e&&!e.empty)for(let l of this.state.facet(Ls))l(e)}get themeClasses(){return nr+" "+(this.state.facet(ir)?na:ia)+" "+this.state.facet(Zi)}updateAttrs(){let t=al(this,Hl,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),e={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(Jt)?"true":"false",class:"cm-content",style:`${S.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(e["aria-readonly"]="true"),al(this,br,e);let i=this.observer.ignore(()=>{let s=Wo(this.contentDOM,this.contentAttrs,e),r=Wo(this.dom,this.editorAttrs,t);return s||r});return this.editorAttrs=t,this.contentAttrs=e,i}showAnnouncements(t){let e=!0;for(let i of t)for(let s of i.effects)if(s.is(n.announce)){e&&(this.announceDOM.textContent=""),e=!1;let r=this.announceDOM.appendChild(document.createElement("div"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(ai);let t=this.state.facet(n.cspNonce);bt.mount(this.root,this.styleModules.concat(Ac).reverse(),t?{nonce:t}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(t){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),t){if(this.measureRequests.indexOf(t)>-1)return;if(t.key!=null){for(let e=0;ei.plugin==t)||null),e&&e.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(t){return this.readMeasured(),this.viewState.elementAtHeight(t)}lineBlockAtHeight(t){return this.readMeasured(),this.viewState.lineBlockAtHeight(t)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(t){return this.viewState.lineBlockAt(t)}get contentHeight(){return this.viewState.contentHeight}moveByChar(t,e,i){return xs(this,t,Uo(this,t,e,i))}moveByGroup(t,e){return xs(this,t,Uo(this,t,e,i=>Yf(this,t.head,i)))}visualLineSide(t,e){let i=this.bidiSpans(t),s=this.textDirectionAt(t.from),r=i[e?i.length-1:0];return w.cursor(r.side(e,s)+t.from,r.forward(!e,s)?1:-1)}moveToLineBoundary(t,e,i=!0){return Jf(this,t,e,i)}moveVertically(t,e,i){return xs(this,t,Xf(this,t,e,i))}domAtPos(t,e=1){return this.docView.domAtPos(t,e)}posAtDOM(t,e=0){return this.docView.posFromDOM(t,e)}posAtCoords(t,e=!0){this.readMeasured();let i=_s(this,t,e);return i&&i.pos}posAndSideAtCoords(t,e=!0){return this.readMeasured(),_s(this,t,e)}coordsAtPos(t,e=1){this.readMeasured();let i=this.docView.coordsAt(t,e);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(t),r=this.bidiSpans(s),o=r[xt.find(r,t-s.from,-1,e)];return fn(i,o.dir==$.LTR==e>0)}coordsForChar(t){return this.readMeasured(),this.docView.coordsForChar(t)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(t){return!this.state.facet(Rl)||tthis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(t))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(t){if(t.length>Ec)return Al(t.length);let e=this.textDirectionAt(t.from),i;for(let r of this.bidiCache)if(r.from==t.from&&r.dir==e&&(r.fresh||Cl(r.isolates,i=qo(this,t))))return r.order;i||(i=qo(this,t));let s=Df(t.text,e,i);return this.bidiCache.push(new wn(t.from,t.to,e,i,!0,s)),s}get hasFocus(){var t;return(this.dom.ownerDocument.hasFocus()||S.safari&&((t=this.inputState)===null||t===void 0?void 0:t.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{yl(this.contentDOM),this.docView.updateSelection()})}setRoot(t){this._root!=t&&(this._root=t,this.observer.setWindow((t.nodeType==9?t:t.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let t of this.plugins)t.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(t,e={}){var i,s,r,o;return Gi.of(new ui(typeof t=="number"?w.cursor(t):t,(i=e.y)!==null&&i!==void 0?i:"nearest",(s=e.x)!==null&&s!==void 0?s:"nearest",(r=e.yMargin)!==null&&r!==void 0?r:5,(o=e.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:t,scrollLeft:e}=this.scrollDOM,i=this.viewState.scrollAnchorAt(t);return Gi.of(new ui(w.cursor(i.from),"start","start",i.top-t,e,!0))}setTabFocusMode(t){t==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof t=="boolean"?this.inputState.tabFocusMode=t?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+t)}static domEventHandlers(t){return Et.define(()=>({}),{eventHandlers:t})}static domEventObservers(t){return Et.define(()=>({}),{eventObservers:t})}static theme(t,e){let i=bt.newName(),s=[Zi.of(i),ai.of(sr(`.${i}`,t))];return e&&e.dark&&s.push(ir.of(!0)),s}static baseTheme(t){return He.lowest(ai.of(sr("."+nr,t,sa)))}static findFromDOM(t){var e;let i=t.querySelector(".cm-content"),s=i&&j.get(i)||j.get(t);return((e=s?.root)===null||e===void 0?void 0:e.view)||null}};E.styleModule=ai;E.inputHandler=Bl;E.clipboardInputFilter=gr;E.clipboardOutputFilter=mr;E.scrollHandler=Nl;E.focusChangeEffect=Ll;E.perLineTextDirection=Rl;E.exceptionSink=Ol;E.updateListener=Ls;E.editable=Jt;E.mouseSelectionStyle=Dl;E.dragMovesSelection=El;E.clickAddsSelectionRange=Tl;E.decorations=Sn;E.blockWrappers=Fl;E.outerDecorations=yr;E.atomicRanges=ki;E.bidiIsolatedRanges=Vl;E.cursorScrollMargin=M.define({combine:n=>{let t=5,e=5;for(let i of n)typeof i=="number"?t=e=i:{x:t,y:e}=i;return{x:t,y:e}}});E.scrollMargins=Wl;E.darkTheme=ir;E.cspNonce=M.define({combine:n=>n.length?n[0]:""});E.contentAttributes=br;E.editorAttributes=Hl;E.lineWrapping=E.contentAttributes.of({class:"cm-lineWrapping"});E.announce=U.define();var Ec=4096,ll={},wn=class n{constructor(t,e,i,s,r,o){this.from=t,this.to=e,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(t,e){if(e.empty&&!t.some(r=>r.fresh))return t;let i=[],s=t.length?t[t.length-1].dir:$.LTR;for(let r=Math.max(0,t.length-10);r=0;s--){let r=i[s],o=typeof r=="function"?r(n):r;o&&ur(o,e)}return e}var Dc=S.mac?"mac":S.windows?"win":S.linux?"linux":"key";function Oc(n,t){let e=n.split(/-(?!$)/),i=e[e.length-1];i=="Space"&&(i=" ");let s,r,o,l;for(let a=0;ai.concat(s),[]))),e}var te=null,Rc=4e3;function Pc(n,t=Dc){let e=Object.create(null),i=Object.create(null),s=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},r=(o,l,a,h,f)=>{var c,u;let d=e[o]||(e[o]=Object.create(null)),p=l.split(/ (?!$)/).map(y=>Oc(y,t));for(let y=1;y{let P=te={view:T,prefix:C,scope:o};return setTimeout(()=>{te==P&&(te=null)},Rc),!0}]})}let g=p.join(" ");s(g,!1);let m=d[g]||(d[g]={preventDefault:!1,stopPropagation:!1,run:((u=(c=d._any)===null||c===void 0?void 0:c.run)===null||u===void 0?void 0:u.slice())||[]});a&&m.run.push(a),h&&(m.preventDefault=!0),f&&(m.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let h of l){let f=e[h]||(e[h]=Object.create(null));f._any||(f._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:c}=o;for(let u in f)f[u].run.push(d=>c(d,lr))}let a=o[t]||o.key;if(a)for(let h of l)r(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(h,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return e}var lr=null;function Nc(n,t,e,i){lr=t;let s=Io(t),r=xo(s,0),o=vo(r)==s.length&&s!=" ",l="",a=!1,h=!1,f=!1;te&&te.view==e&&te.scope==i&&(l=te.prefix+" ",Jl.indexOf(t.keyCode)<0&&(h=!0,te=null));let c=new Set,u=m=>{if(m){for(let y of m.run)if(!c.has(y)&&(c.add(y),y(e)))return m.stopPropagation&&(f=!0),!0;m.preventDefault&&(m.stopPropagation&&(f=!0),h=!0)}return!1},d=n[i],p,g;return d&&(u(d[l+tn(s,t,!o)])?a=!0:o&&(t.altKey||t.metaKey||t.ctrlKey)&&!(S.windows&&t.ctrlKey&&t.altKey)&&!(S.mac&&t.altKey&&!(t.ctrlKey||t.metaKey))&&(p=Gt[t.keyCode])&&p!=s?(u(d[l+tn(p,t,!0)])||t.shiftKey&&(g=Fe[t.keyCode])!=s&&g!=p&&u(d[l+tn(g,t,!1)]))&&(a=!0):o&&t.shiftKey&&u(d[l+tn(s,t,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&f&&t.stopPropagation(),lr=null,a}var xe=class n{constructor(t,e,i,s,r){this.className=t,this.left=e,this.top=i,this.width=s,this.height=r}draw(){let t=document.createElement("div");return t.className=this.className,this.adjust(t),t}update(t,e){return e.className!=this.className?!1:(this.adjust(t),!0)}adjust(t){t.style.left=this.left+"px",t.style.top=this.top+"px",this.width!=null&&(t.style.width=this.width+"px"),t.style.height=this.height+"px"}eq(t){return this.left==t.left&&this.top==t.top&&this.width==t.width&&this.height==t.height&&this.className==t.className}static forRange(t,e,i){if(i.empty){let s=t.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let r=ra(t);return[new n(e,s.left-r.left,s.top-r.top,null,s.bottom-s.top)]}else return Ic(t,e,i)}};function ra(n){let t=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==$.LTR?t.left:t.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:t.top-n.scrollDOM.scrollTop*n.scaleY}}function fl(n,t,e,i){let s=n.coordsAtPos(t,e*2);if(!s)return i;let r=n.dom.getBoundingClientRect(),o=(s.top+s.bottom)/2,l=n.posAtCoords({x:r.left+1,y:o}),a=n.posAtCoords({x:r.right-1,y:o});return l==null||a==null?i:{from:Math.max(i.from,Math.min(l,a)),to:Math.min(i.to,Math.max(l,a))}}function Ic(n,t,e){if(e.to<=n.viewport.from||e.from>=n.viewport.to)return[];let i=Math.max(e.from,n.viewport.from),s=Math.min(e.to,n.viewport.to),r=n.textDirection==$.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=ra(n),h=o.querySelector(".cm-line"),f=h&&window.getComputedStyle(h),c=l.left+(f?parseInt(f.paddingLeft)+Math.min(0,parseInt(f.textIndent)):0),u=l.right-(f?parseInt(f.paddingRight):0),d=zs(n,i,1),p=zs(n,s,-1),g=d.type==tt.Text?d:null,m=p.type==tt.Text?p:null;if(g&&(n.lineWrapping||d.widgetLineBreaks)&&(g=fl(n,i,1,g)),m&&(n.lineWrapping||p.widgetLineBreaks)&&(m=fl(n,s,-1,m)),g&&m&&g.from==m.from&&g.to==m.to)return C(T(e.from,e.to,g));{let A=g?T(e.from,null,g):P(d,!1),k=m?T(null,e.to,m):P(p,!0),v=[];return(g||d).to<(m||p).from-(g&&m?1:0)||d.widgetLineBreaks>1&&A.bottom+n.defaultLineHeight/2D&&I.from=nt)break;pt>_&&B(Math.max(Z,_),A==null&&Z<=D,Math.min(pt,nt),k==null&&pt>=H,Ht.dir)}if(_=ft.to+1,_>=nt)break}return V.length==0&&B(D,A==null,H,k==null,n.textDirection),{top:N,bottom:L,horizontal:V}}function P(A,k){let v=l.top+(k?A.top:A.bottom);return{top:v,bottom:v,horizontal:[]}}}function Hc(n,t){return n.constructor==t.constructor&&n.eq(t)}var ar=class{constructor(t,e){this.view=t,this.layer=e,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=t.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),e.above&&this.dom.classList.add("cm-layer-above"),e.class&&this.dom.classList.add(e.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(t.state),t.requestMeasure(this.measureReq),e.mount&&e.mount(this.dom,t)}update(t){t.startState.facet(sn)!=t.state.facet(sn)&&this.setOrder(t.state),(this.layer.update(t,this.dom)||t.geometryChanged)&&(this.scale(),t.view.requestMeasure(this.measureReq))}docViewUpdate(t){this.layer.updateOnDocViewUpdate!==!1&&t.requestMeasure(this.measureReq)}setOrder(t){let e=0,i=t.facet(sn);for(;e!Hc(e,this.drawn[i]))){let e=this.dom.firstChild,i=0;for(let s of t)s.update&&e&&s.constructor&&this.drawn[i].constructor&&s.update(e,this.drawn[i])?(e=e.nextSibling,i++):this.dom.insertBefore(s.draw(),e);for(;e;){let s=e.nextSibling;e.remove(),e=s}this.drawn=t,S.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},sn=M.define();function oa(n){return[Et.define(t=>new ar(t,n)),sn.of(n)]}var Ye=M.define({combine(n){return me(n,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(t,e)=>Math.min(t,e),drawRangeCursor:(t,e)=>t||e})}});function la(n={}){return[Ye.of(n),Fc,Vc,Wc,Pl.of(!0)]}function aa(n){return n.startState.facet(Ye)!=n.state.facet(Ye)}var Fc=oa({above:!0,markers(n){let{state:t}=n,e=t.facet(Ye),i=[];for(let s of t.selection.ranges){let r=s==t.selection.main;if(s.empty||e.drawRangeCursor&&!(r&&S.ios&&e.iosSelectionHandles)){let o=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=s.empty?s:w.cursor(s.head,s.assoc);for(let a of xe.forRange(n,o,l))i.push(a)}}return i},update(n,t){n.transactions.some(i=>i.selection)&&(t.style.animationName=t.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let e=aa(n);return e&&cl(n.state,t),n.docChanged||n.selectionSet||e},mount(n,t){cl(t.state,n)},class:"cm-cursorLayer"});function cl(n,t){t.style.animationDuration=n.facet(Ye).cursorBlinkRate+"ms"}var Vc=oa({above:!1,markers(n){let t=[],{main:e,ranges:i}=n.state.selection;for(let s of i)if(!s.empty)for(let r of xe.forRange(n,"cm-selectionBackground",s))t.push(r);if(S.ios&&!e.empty&&n.state.facet(Ye).iosSelectionHandles){for(let s of xe.forRange(n,"cm-selectionHandle cm-selectionHandle-start",w.cursor(e.from,1)))t.push(s);for(let s of xe.forRange(n,"cm-selectionHandle cm-selectionHandle-end",w.cursor(e.to,1)))t.push(s)}return t},update(n,t){return n.docChanged||n.selectionSet||n.viewportChanged||aa(n)},class:"cm-selectionLayer"}),Wc=He.highest(E.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}}));var vp=/x/.unicode!=null?"gu":"g";function ha(){return _c}var zc=z.line({class:"cm-activeLine"}),_c=Et.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let t=-1,e=[];for(let i of n.state.selection.ranges){let s=n.lineBlockAt(i.head);s.from>t&&(e.push(zc.range(s.from)),t=s.from)}return z.set(e)}},{decorations:n=>n.decorations});var kp=E.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:`${7*2}px`,position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}});var Ot=class extends Vt{compare(t){return this==t||this.constructor==t.constructor&&this.eq(t)}eq(t){return!1}destroy(t){}};Ot.prototype.elementClass="";Ot.prototype.toDOM=void 0;Ot.prototype.mapMode=lt.TrackBefore;Ot.prototype.startSide=Ot.prototype.endSide=-1;Ot.prototype.point=!0;var rn=M.define(),qc=M.define();var on=M.define();var hr=M.define({combine:n=>n.some(t=>t)});function $c(n){let t=[Kc];return n&&n.fixed===!1&&t.push(hr.of(!0)),t}var Kc=Et.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(on).map(t=>new xn(n,t)),this.fixed=!n.state.facet(hr);for(let t of this.gutters)t.config.side=="after"?this.getDOMAfter().appendChild(t.dom):this.dom.appendChild(t.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let t=this.prevViewport,e=n.view.viewport,i=Math.min(t.to,e.to)-Math.max(t.from,e.from);this.syncGutters(i<(e.to-e.from)*.8)}if(n.geometryChanged){let t=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=t,this.domAfter&&(this.domAfter.style.minHeight=t)}this.view.state.facet(hr)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let t=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let e=F.iter(this.view.state.facet(rn),this.view.viewport.from),i=[],s=this.gutters.map(r=>new cr(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let o=!0;for(let l of r.type)if(l.type==tt.Text&&o){fr(e,i,l.from);for(let a of s)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of s)a.widget(this.view,l)}else if(r.type==tt.Text){fr(e,i,r.from);for(let o of s)o.line(this.view,r,i)}else if(r.widget)for(let o of s)o.widget(this.view,r);for(let r of s)r.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,t),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let t=n.startState.facet(on),e=n.state.facet(on),i=n.docChanged||n.heightChanged||n.viewportChanged||!F.eq(n.startState.facet(rn),n.state.facet(rn),n.view.viewport.from,n.view.viewport.to);if(t==e)for(let s of this.gutters)s.update(n)&&(i=!0);else{i=!0;let s=[];for(let r of e){let o=t.indexOf(r);o<0?s.push(new xn(this.view,r)):(this.gutters[o].update(n),s.push(this.gutters[o]))}for(let r of this.gutters)r.dom.remove(),s.indexOf(r)<0&&r.destroy();for(let r of s)r.config.side=="after"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=s}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>E.scrollMargins.of(t=>{let e=t.plugin(n);if(!e||e.gutters.length==0||!e.fixed)return null;let i=e.dom.offsetWidth*t.scaleX,s=e.domAfter?e.domAfter.offsetWidth*t.scaleX:0;return t.textDirection==$.LTR?{left:i,right:s}:{right:i,left:s}})});function ul(n){return Array.isArray(n)?n:[n]}function fr(n,t,e){for(;n.value&&n.from<=e;)n.from==e&&t.push(n.value),n.next()}var cr=class{constructor(t,e,i){this.gutter=t,this.height=i,this.i=0,this.cursor=F.iter(t.markers,e.from)}addElement(t,e,i){let{gutter:s}=this,r=(e.top-this.height)/t.scaleY,o=e.height/t.scaleY;if(this.i==s.elements.length){let l=new vn(t,o,r,i);s.elements.push(l),s.dom.appendChild(l.dom)}else s.elements[this.i].update(t,o,r,i);this.height=e.bottom,this.i++}line(t,e,i){let s=[];fr(this.cursor,s,e.from),i.length&&(s=s.concat(i));let r=this.gutter.config.lineMarker(t,e,s);r&&s.unshift(r);let o=this.gutter;s.length==0&&!o.config.renderEmptyElements||this.addElement(t,e,s)}widget(t,e){let i=this.gutter.config.widgetMarker(t,e.widget,e),s=i?[i]:null;for(let r of t.state.facet(qc)){let o=r(t,e.widget,e);o&&(s||(s=[])).push(o)}s&&this.addElement(t,e,s)}finish(){let t=this.gutter;for(;t.elements.length>this.i;){let e=t.elements.pop();t.dom.removeChild(e.dom),e.destroy()}}},xn=class{constructor(t,e){this.view=t,this.config=e,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in e.domEventHandlers)this.dom.addEventListener(i,s=>{let r=s.target,o;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let a=r.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=s.clientY;let l=t.lineBlockAtHeight(o-t.documentTop);e.domEventHandlers[i](t,l,s)&&s.preventDefault()});this.markers=ul(e.markers(t)),e.initialSpacer&&(this.spacer=new vn(t,0,0,[e.initialSpacer(t)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(t){let e=this.markers;if(this.markers=ul(this.config.markers(t.view)),this.spacer&&this.config.updateSpacer){let s=this.config.updateSpacer(this.spacer.markers[0],t);s!=this.spacer.markers[0]&&this.spacer.update(t.view,0,0,[s])}let i=t.view.viewport;return!F.eq(this.markers,e,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(t):!1)}destroy(){for(let t of this.elements)t.destroy()}},vn=class{constructor(t,e,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(t,e,i,s)}update(t,e,i,s){this.height!=e&&(this.height=e,this.dom.style.height=e+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),Uc(this.markers,s)||this.setMarkers(t,s)}setMarkers(t,e){let i="cm-gutterElement",s=this.dom.firstChild;for(let r=0,o=0;;){let l=o,a=rr(l,a,h)||o(l,a,h):o}return i}})}}),bi=class extends Ot{constructor(t){super(),this.number=t}eq(t){return this.number==t.number}toDOM(){return document.createTextNode(this.number)}};function ks(n,t){return n.state.facet(_e).formatNumber(t,n.state)}var Jc=on.compute([_e],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(t){return t.state.facet(jc)},lineMarker(t,e,i){return i.some(s=>s.toDOM)?null:new bi(ks(t,t.state.doc.lineAt(e.from).number))},widgetMarker:(t,e,i)=>{for(let s of t.state.facet(Gc)){let r=s(t,e,i);if(r)return r}return null},lineMarkerChange:t=>t.startState.facet(_e)!=t.state.facet(_e),initialSpacer(t){return new bi(ks(t,dl(t.state.doc.lines)))},updateSpacer(t,e){let i=ks(e.view,dl(e.view.state.doc.lines));return i==t.number?t:new bi(i)},domEventHandlers:n.facet(_e).domEventHandlers,side:"before"}));function fa(n={}){return[_e.of(n),$c(),Jc]}function dl(n){let t=9;for(;t{let t=[],e=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.head).from;s>e&&(e=s,t.push(Yc.range(s)))}return F.of(t)});function ca(){return Xc}var Qc=0,Si=class{constructor(t,e){this.from=t,this.to=e}},O=class{constructor(t={}){this.id=Qc++,this.perNode=!!t.perNode,this.deserialize=t.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=t.combine||null}add(t){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof t!="function"&&(t=ot.match(t)),e=>{let i=t(e);return i===void 0?null:[this,i]}}};O.closedBy=new O({deserialize:n=>n.split(" ")});O.openedBy=new O({deserialize:n=>n.split(" ")});O.group=new O({deserialize:n=>n.split(" ")});O.isolate=new O({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});O.contextHash=new O({perNode:!0});O.lookAhead=new O({perNode:!0});O.mounted=new O({perNode:!0});var Ae=class{constructor(t,e,i,s=!1){this.tree=t,this.overlay=e,this.parser=i,this.bracketed=s}static get(t){return t&&t.props&&t.props[O.mounted.id]}},Zc=Object.create(null),ot=class n{constructor(t,e,i,s=0){this.name=t,this.props=e,this.id=i,this.flags=s}static define(t){let e=t.props&&t.props.length?Object.create(null):Zc,i=(t.top?1:0)|(t.skipped?2:0)|(t.error?4:0)|(t.name==null?8:0),s=new n(t.name||"",e,t.id,i);if(t.props){for(let r of t.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");e[r[0].id]=r[1]}}return s}prop(t){return this.props[t.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(t){if(typeof t=="string"){if(this.name==t)return!0;let e=this.prop(O.group);return e?e.indexOf(t)>-1:!1}return this.id==t}static match(t){let e=Object.create(null);for(let i in t)for(let s of i.split(" "))e[s]=t[i];return i=>{for(let s=i.prop(O.group),r=-1;r<(s?s.length:0);r++){let o=e[r<0?i.name:s[r]];if(o)return o}}}};ot.none=new ot("",Object.create(null),0,8);var En=class n{constructor(t){this.types=t;for(let e=0;e0;for(let a=this.cursor(o|J.IncludeAnonymous);;){let h=!1;if(a.from<=r&&a.to>=s&&(!l&&a.type.isAnonymous||e(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(t){return t.perNode?this.props?this.props[t.id]:void 0:this.type.prop(t)}get propValues(){let t=[];if(this.props)for(let e in this.props)t.push([+e,this.props[e]]);return t}balance(t={}){return this.children.length<=8?this:Mr(ot.none,this.children,this.positions,0,this.children.length,0,this.length,(e,i,s)=>new n(this.type,e,i,s,this.propValues),t.makeTree||((e,i,s)=>new n(ot.none,e,i,s)))}static build(t){return eu(t)}};G.empty=new G(ot.none,[],[],0);var xr=class n{constructor(t,e){this.buffer=t,this.index=e}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new n(this.buffer,this.index)}},se=class n{constructor(t,e,i){this.buffer=t,this.length=e,this.set=i}get type(){return ot.none}toString(){let t=[];for(let e=0;e0));a=o[a+3]);return l}slice(t,e,i){let s=this.buffer,r=new Uint16Array(e-t),o=0;for(let l=t,a=0;l=t&&et;case 1:return e<=t&&i>t;case 2:return i>t;case 4:return!0}}function Ci(n,t,e,i){for(var s;n.from==n.to||(e<1?n.from>=t:n.from>t)||(e>-1?n.to<=t:n.to0?l.length:-1;t!=h;t+=e){let f=l[t],c=a[t]+o.from,u;if(!(!(r&J.EnterBracketed&&f instanceof G&&(u=Ae.get(f))&&!u.overlay&&u.bracketed&&i>=c&&i<=c+f.length)&&!ga(s,i,c,c+f.length))){if(f instanceof se){if(r&J.ExcludeBuffers)continue;let d=f.findChild(0,f.buffer.length,e,i-c,s);if(d>-1)return new Ai(new kr(o,f,t,c),null,d)}else if(r&J.IncludeAnonymous||!f.type.isAnonymous||Ar(f)){let d;if(!(r&J.IgnoreMounts)&&(d=Ae.get(f))&&!d.overlay)return new n(d.tree,c,t,o);let p=new n(f,c,t,o);return r&J.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(e<0?f.children.length-1:0,e,i,s,r)}}}if(r&J.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?t=o.index+e:t=e<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(t){return this.nextChild(0,1,t,2)}childBefore(t){return this.nextChild(this._tree.children.length-1,-1,t,-2)}prop(t){return this._tree.prop(t)}enter(t,e,i=0){let s;if(!(i&J.IgnoreOverlays)&&(s=Ae.get(this._tree))&&s.overlay){let r=t-this.from,o=i&J.EnterBracketed&&s.bracketed;for(let{from:l,to:a}of s.overlay)if((e>0||o?l<=r:l=r:a>r))return new n(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,t,e,i)}nextSignificantParent(){let t=this;for(;t.type.isAnonymous&&t._parent;)t=t._parent;return t}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function da(n,t,e,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(e!=null){for(let o=!1;!o;)if(o=s.type.is(e),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(t)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function vr(n,t,e=t.length-1){for(let i=n;e>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(t[e]&&t[e]!=i.name)return!1;e--}}return!0}var kr=class{constructor(t,e,i,s){this.parent=t,this.buffer=e,this.index=i,this.start=s}},Ai=class n extends Dn{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(t,e,i){super(),this.context=t,this._parent=e,this.index=i,this.type=t.buffer.set.types[t.buffer.buffer[i]]}child(t,e,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t,e-this.context.start,i);return r<0?null:new n(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(t){return this.child(1,t,2)}childBefore(t){return this.child(-1,t,-2)}prop(t){return this.type.prop(t)}enter(t,e,i=0){if(i&J.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e>0?1:-1,t-this.context.start,e);return r<0?null:new n(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(t){return this._parent?null:this.context.parent.nextChild(this.context.index+t,t,0,4)}get nextSibling(){let{buffer:t}=this.context,e=t.buffer[this.index+3];return e<(this._parent?t.buffer[this._parent.index+3]:t.buffer.length)?new n(this.context,this._parent,e):this.externalSibling(1)}get prevSibling(){let{buffer:t}=this.context,e=this._parent?this._parent.index+4:0;return this.index==e?this.externalSibling(-1):new n(this.context,this._parent,t.findChild(e,this.index,-1,0,4))}get tree(){return null}toTree(){let t=[],e=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];t.push(i.slice(s,r,o)),e.push(0)}return new G(this.type,t,e,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function ma(n){if(!n.length)return null;let t=0,e=n[0];for(let r=1;re.from||o.to=t){let l=new _t(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(Ci(l,t,e,!1))}}return s?ma(s):i}var Mi=class{get name(){return this.type.name}constructor(t,e=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=e&~J.EnterBracketed,t instanceof _t)this.yieldNode(t);else{this._tree=t.context.parent,this.buffer=t.context;for(let i=t._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=t,this.yieldBuf(t.index)}}yieldNode(t){return t?(this._tree=t,this.type=t.type,this.from=t.from,this.to=t.to,!0):!1}yieldBuf(t,e){this.index=t;let{start:i,buffer:s}=this.buffer;return this.type=e||s.set.types[s.buffer[t]],this.from=i+s.buffer[t+1],this.to=i+s.buffer[t+2],!0}yield(t){return t?t instanceof _t?(this.buffer=null,this.yieldNode(t)):(this.buffer=t.context,this.yieldBuf(t.index,t.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(t,e,i){if(!this.buffer)return this.yield(this._tree.nextChild(t<0?this._tree._tree.children.length-1:0,t,e,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],t,e-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(t){return this.enterChild(1,t,2)}childBefore(t){return this.enterChild(-1,t,-2)}enter(t,e,i=this.mode){return this.buffer?i&J.ExcludeBuffers?!1:this.enterChild(1,t,e):this.yield(this._tree.enter(t,e,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&J.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let t=this.mode&J.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(t)}sibling(t){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+t,t,0,4,this.mode)):!1;let{buffer:e}=this.buffer,i=this.stack.length-1;if(t<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(e.findChild(s,this.index,-1,0,4))}else{let s=e.buffer[this.index+3];if(s<(i<0?e.buffer.length:e.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+t,t,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(t){let e,i,{buffer:s}=this;if(s){if(t>0){if(this.index-1)for(let r=e+t,o=t<0?-1:i._tree.children.length;r!=o;r+=t){let l=i._tree.children[r];if(this.mode&J.IncludeAnonymous||l instanceof se||!l.type.isAnonymous||Ar(l))return!1}return!0}move(t,e){if(e&&this.enterChild(t,0,4))return!0;for(;;){if(this.sibling(t))return!0;if(this.atLastNode(t)||!this.parent())return!1}}next(t=!0){return this.move(1,t)}prev(t=!0){return this.move(-1,t)}moveTo(t,e=0){for(;(this.from==this.to||(e<1?this.from>=t:this.from>t)||(e>-1?this.to<=t:this.to=0;){for(let o=t;o;o=o._parent)if(o.index==s){if(s==this.index)return o;e=o,i=r+1;break t}s=this.stack[--r]}for(let s=i;s=0;r--){if(r<0)return vr(this._tree,t,s);let o=i[e.buffer[this.stack[r]]];if(!o.isAnonymous){if(t[s]&&t[s]!=o.name)return!1;s--}}return!0}};function Ar(n){return n.children.some(t=>t instanceof se||!t.type.isAnonymous||Ar(t))}function eu(n){var t;let{buffer:e,nodeSet:i,maxBufferLength:s=1024,reused:r=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(e)?new xr(e,e.length):e,a=i.types,h=0,f=0;function c(A,k,v,N,L,V){let{id:B,start:D,end:H,size:I}=l,_=f,nt=h;if(I<0)if(l.next(),I==-1){let Ut=r[B];v.push(Ut),N.push(D-A);return}else if(I==-3){h=B;return}else if(I==-4){f=B;return}else throw new RangeError(`Unrecognized record size: ${I}`);let ft=a[B],Ht,Z,pt=D-A;if(H-D<=s&&(Z=m(l.pos-k,L))){let Ut=new Uint16Array(Z.size-Z.skip),gt=l.pos-Z.size,Ft=Ut.length;for(;l.pos>gt;)Ft=y(Z.start,Ut,Ft);Ht=new se(Ut,H-Z.start,i),pt=Z.start-A}else{let Ut=l.pos-I;l.next();let gt=[],Ft=[],he=B>=o?B:-1,Be=0,Ii=H;for(;l.pos>Ut;)he>=0&&l.id==he&&l.size>=0?(l.end<=Ii-s&&(p(gt,Ft,D,Be,l.end,Ii,he,_,nt),Be=gt.length,Ii=l.end),l.next()):V>2500?u(D,Ut,gt,Ft):c(D,Ut,gt,Ft,he,V+1);if(he>=0&&Be>0&&Be-1&&Be>0){let ro=d(ft,nt);Ht=Mr(ft,gt,Ft,0,gt.length,0,H-D,ro,ro)}else Ht=g(ft,gt,Ft,H-D,_-H,nt)}v.push(Ht),N.push(pt)}function u(A,k,v,N){let L=[],V=0,B=-1;for(;l.pos>k;){let{id:D,start:H,end:I,size:_}=l;if(_>4)l.next();else{if(B>-1&&H=0;I-=3)D[_++]=L[I],D[_++]=L[I+1]-H,D[_++]=L[I+2]-H,D[_++]=_;v.push(new se(D,L[2]-H,i)),N.push(H-A)}}function d(A,k){return(v,N,L)=>{let V=0,B=v.length-1,D,H;if(B>=0&&(D=v[B])instanceof G){if(!B&&D.type==A&&D.length==L)return D;(H=D.prop(O.lookAhead))&&(V=N[B]+D.length+H)}return g(A,v,N,L,V,k)}}function p(A,k,v,N,L,V,B,D,H){let I=[],_=[];for(;A.length>N;)I.push(A.pop()),_.push(k.pop()+v-L);A.push(g(i.types[B],I,_,V-L,D-V,H)),k.push(L-v)}function g(A,k,v,N,L,V,B){if(V){let D=[O.contextHash,V];B=B?[D].concat(B):[D]}if(L>25){let D=[O.lookAhead,L];B=B?[D].concat(B):[D]}return new G(A,k,v,N,B)}function m(A,k){let v=l.fork(),N=0,L=0,V=0,B=v.end-s,D={size:0,start:0,skip:0};t:for(let H=v.pos-A;v.pos>H;){let I=v.size;if(v.id==k&&I>=0){D.size=N,D.start=L,D.skip=V,V+=4,N+=4,v.next();continue}let _=v.pos-I;if(I<0||_=o?4:0,ft=v.start;for(v.next();v.pos>_;){if(v.size<0)if(v.size==-3||v.size==-4)nt+=4;else break t;else v.id>=o&&(nt+=4);v.next()}L=ft,N+=I,V+=nt}return(k<0||N==A)&&(D.size=N,D.start=L,D.skip=V),D.size>4?D:void 0}function y(A,k,v){let{id:N,start:L,end:V,size:B}=l;if(l.next(),B>=0&&N4){let H=l.pos-(B-4);for(;l.pos>H;)v=y(A,k,v)}k[--v]=D,k[--v]=V-A,k[--v]=L-A,k[--v]=N}else B==-3?h=N:B==-4&&(f=N);return v}let C=[],T=[];for(;l.pos>0;)c(n.start||0,n.bufferStart||0,C,T,-1,0);let P=(t=n.length)!==null&&t!==void 0?t:C.length?T[0]+C[0].length:0;return new G(a[n.topID],C.reverse(),T.reverse(),P)}var pa=new WeakMap;function Tn(n,t){if(!n.isAnonymous||t instanceof se||t.type!=n)return 1;let e=pa.get(t);if(e==null){e=1;for(let i of t.children){if(i.type!=n||!(i instanceof G)){e=1;break}e+=Tn(n,i)}pa.set(t,e)}return e}function Mr(n,t,e,i,s,r,o,l,a){let h=0;for(let p=i;p=f)break;k+=v}if(T==P+1){if(k>f){let v=p[P];d(v.children,v.positions,0,v.children.length,g[P]+C);continue}c.push(p[P])}else{let v=g[T-1]+p[T-1].length-A;c.push(Mr(n,p,g,P,T,A,v,null,a))}u.push(A+C-r)}}return d(t,e,i,s,0),(l||a)(c,u,o)}var Me=class n{constructor(t,e,i,s,r=!1,o=!1){this.from=t,this.to=e,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(t,e=[],i=!1){let s=[new n(0,t.length,t,0,!1,i)];for(let r of e)r.to>t.length&&s.push(r);return s}static applyChanges(t,e,i=128){if(!e.length)return t;let s=[],r=1,o=t.length?t[0]:null;for(let l=0,a=0,h=0;;l++){let f=l=i)for(;o&&o.from=u.from||c<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,c)-h;u=d>=p?null:new n(d,p,u.tree,u.offset+h,l>0,!!f)}if(u&&s.push(u),o.to>c)break;o=rnew Si(s.from,s.to)):[new Si(0,0)]:[new Si(0,t.length)],this.createParse(t,e||[],i)}parse(t,e,i){let s=this.startParse(t,e,i);for(;;){let r=s.advance();if(r)return r}}},Cr=class{constructor(t){this.string=t}get length(){return this.string.length}chunk(t){return this.string.slice(t)}get lineChunks(){return!1}read(t,e){return this.string.slice(t,e)}};var Ep=new O({perNode:!0});var iu=0,Bt=class n{constructor(t,e,i,s){this.name=t,this.set=e,this.base=i,this.modified=s,this.id=iu++}toString(){let{name:t}=this;for(let e of this.modified)e.name&&(t=`${e.name}(${t})`);return t}static define(t,e){let i=typeof t=="string"?t:"?";if(t instanceof n&&(e=t),e?.base)throw new Error("Can not derive from a modified tag");let s=new n(i,[],null,[]);if(s.set.push(s),e)for(let r of e.set)s.set.push(r);return s}static defineModifier(t){let e=new Rn(t);return i=>i.modified.indexOf(e)>-1?i:Rn.get(i.base||i,i.modified.concat(e).sort((s,r)=>s.id-r.id))}},nu=0,Rn=class n{constructor(t){this.name=t,this.instances=[],this.id=nu++}static get(t,e){if(!e.length)return t;let i=e[0].instances.find(l=>l.base==t&&su(e,l.modified));if(i)return i;let s=[],r=new Bt(t.name,s,t,e);for(let l of e)l.instances.push(r);let o=ru(e);for(let l of t.set)if(!l.modified.length)for(let a of o)s.push(n.get(l,a));return r}};function su(n,t){return n.length==t.length&&n.every((e,i)=>e==t[i])}function ru(n){let t=[[]];for(let e=0;ei.length-e.length)}function wa(n){let t=Object.create(null);for(let e in n){let i=n[e];Array.isArray(i)||(i=[i]);for(let s of e.split(" "))if(s){let r=[],o=2,l=s;for(let c=0;;){if(l=="..."&&c>0&&c+3==s.length){o=1;break}let u=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!u)throw new RangeError("Invalid path: "+s);if(r.push(u[0]=="*"?"":u[0][0]=='"'?JSON.parse(u[0]):u[0]),c+=u[0].length,c==s.length)break;let d=s[c++];if(c==s.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+s);l=s.slice(c)}let a=r.length-1,h=r[a];if(!h)throw new RangeError("Invalid path: "+s);let f=new Ee(i,o,a>0?r.slice(0,a):null);t[h]=f.sort(t[h])}}return xa.add(t)}var xa=new O({combine(n,t){let e,i,s;for(;n||t;){if(!n||t&&n.depth>=t.depth?(s=t,t=t.next):(s=n,n=n.next),e&&e.mode==s.mode&&!s.context&&!e.context)continue;let r=new Ee(s.tags,s.mode,s.context);e?e.next=r:i=r,e=r}return i}}),Ee=class{constructor(t,e,i,s){this.tags=t,this.mode=e,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(t){return!t||t.depth{let o=s;for(let l of r)for(let a of l.set){let h=e[a.id];if(h){o=o?o+" "+h:h;break}}return o},scope:i}}function ou(n,t){let e=null;for(let i of n){let s=i.style(t);s&&(e=e?e+" "+s:s)}return e}function va(n,t,e,i=0,s=n.length){let r=new Er(i,Array.isArray(t)?t:[t],e);r.highlightRange(n.cursor(),i,s,"",r.highlighters),r.flush(s)}var Er=class{constructor(t,e,i){this.at=t,this.highlighters=e,this.span=i,this.class=""}startSpan(t,e){e!=this.class&&(this.flush(t),t>this.at&&(this.at=t),this.class=e)}flush(t){t>this.at&&this.class&&this.span(this.at,t,this.class)}highlightRange(t,e,i,s,r){let{type:o,from:l,to:a}=t;if(l>=i||a<=e)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=s,f=lu(t)||Ee.empty,c=ou(r,f.tags);if(c&&(h&&(h+=" "),h+=c,f.mode==1&&(s+=(s?" ":"")+c)),this.startSpan(Math.max(e,l),h),f.opaque)return;let u=t.tree&&t.tree.prop(O.mounted);if(u&&u.overlay){let d=t.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(m=>!m.scope||m.scope(u.tree.type)),g=t.firstChild();for(let m=0,y=l;;m++){let C=m=T||!t.nextSibling())););if(!C||T>i)break;y=C.to+l,y>e&&(this.highlightRange(d.cursor(),Math.max(e,C.from+l),Math.min(i,y),"",p),this.startSpan(Math.min(i,y),h))}g&&t.parent()}else if(t.firstChild()){u&&(s="");do if(!(t.to<=e)){if(t.from>=i)break;this.highlightRange(t,e,i,s,r),this.startSpan(Math.min(i,t.to),h)}while(t.nextSibling());t.parent()}}};function lu(n){let t=n.type.prop(xa);for(;t&&t.context&&!n.matchContext(t.context);)t=t.next;return t||null}var x=Bt.define,On=x(),re=x(),ba=x(re),ya=x(re),oe=x(),Bn=x(oe),Tr=x(oe),Kt=x(),Te=x(Kt),qt=x(),$t=x(),Dr=x(),Ei=x(Dr),Ln=x(),b={comment:On,lineComment:x(On),blockComment:x(On),docComment:x(On),name:re,variableName:x(re),typeName:ba,tagName:x(ba),propertyName:ya,attributeName:x(ya),className:x(re),labelName:x(re),namespace:x(re),macroName:x(re),literal:oe,string:Bn,docString:x(Bn),character:x(Bn),attributeValue:x(Bn),number:Tr,integer:x(Tr),float:x(Tr),bool:x(oe),regexp:x(oe),escape:x(oe),color:x(oe),url:x(oe),keyword:qt,self:x(qt),null:x(qt),atom:x(qt),unit:x(qt),modifier:x(qt),operatorKeyword:x(qt),controlKeyword:x(qt),definitionKeyword:x(qt),moduleKeyword:x(qt),operator:$t,derefOperator:x($t),arithmeticOperator:x($t),logicOperator:x($t),bitwiseOperator:x($t),compareOperator:x($t),updateOperator:x($t),definitionOperator:x($t),typeOperator:x($t),controlOperator:x($t),punctuation:Dr,separator:x(Dr),bracket:Ei,angleBracket:x(Ei),squareBracket:x(Ei),paren:x(Ei),brace:x(Ei),content:Kt,heading:Te,heading1:x(Te),heading2:x(Te),heading3:x(Te),heading4:x(Te),heading5:x(Te),heading6:x(Te),contentSeparator:x(Kt),list:x(Kt),quote:x(Kt),emphasis:x(Kt),strong:x(Kt),link:x(Kt),monospace:x(Kt),strikethrough:x(Kt),inserted:x(),deleted:x(),changed:x(),invalid:x(),meta:Ln,documentMeta:x(Ln),annotation:x(Ln),processingInstruction:x(Ln),definition:Bt.defineModifier("definition"),constant:Bt.defineModifier("constant"),function:Bt.defineModifier("function"),standard:Bt.defineModifier("standard"),local:Bt.defineModifier("local"),special:Bt.defineModifier("special")};for(let n in b){let t=b[n];t instanceof Bt&&(t.name=n)}var Bp=Or([{tag:b.link,class:"tok-link"},{tag:b.heading,class:"tok-heading"},{tag:b.emphasis,class:"tok-emphasis"},{tag:b.strong,class:"tok-strong"},{tag:b.keyword,class:"tok-keyword"},{tag:b.atom,class:"tok-atom"},{tag:b.bool,class:"tok-bool"},{tag:b.url,class:"tok-url"},{tag:b.labelName,class:"tok-labelName"},{tag:b.inserted,class:"tok-inserted"},{tag:b.deleted,class:"tok-deleted"},{tag:b.literal,class:"tok-literal"},{tag:b.string,class:"tok-string"},{tag:b.number,class:"tok-number"},{tag:[b.regexp,b.escape,b.special(b.string)],class:"tok-string2"},{tag:b.variableName,class:"tok-variableName"},{tag:b.local(b.variableName),class:"tok-variableName tok-local"},{tag:b.definition(b.variableName),class:"tok-variableName tok-definition"},{tag:b.special(b.variableName),class:"tok-variableName2"},{tag:b.definition(b.propertyName),class:"tok-propertyName tok-definition"},{tag:b.typeName,class:"tok-typeName"},{tag:b.namespace,class:"tok-namespace"},{tag:b.className,class:"tok-className"},{tag:b.macroName,class:"tok-macroName"},{tag:b.propertyName,class:"tok-propertyName"},{tag:b.operator,class:"tok-operator"},{tag:b.comment,class:"tok-comment"},{tag:b.meta,class:"tok-meta"},{tag:b.invalid,class:"tok-invalid"},{tag:b.punctuation,class:"tok-punctuation"}]);var Br,Xe=new O;function au(n){return M.define({combine:n?t=>t.concat(n):void 0})}var hu=new O,dt=class{constructor(t,e,i=[],s=""){this.data=t,this.name=s,K.prototype.hasOwnProperty("tree")||Object.defineProperty(K.prototype,"tree",{get(){return Rt(this)}}),this.parser=e,this.extension=[Qe.of(this),K.languageData.of((r,o,l)=>{let a=ka(r,o,l),h=a.type.prop(Xe);if(!h)return[];let f=r.facet(h),c=a.type.prop(hu);if(c){let u=a.resolve(o-a.from,l);for(let d of c)if(d.test(u,r)){let p=r.facet(d.facet);return d.type=="replace"?p:p.concat(f)}}return f})].concat(i)}isActiveAt(t,e,i=-1){return ka(t,e,i).type.prop(Xe)==this.data}findRegions(t){let e=t.facet(Qe);if(e?.data==this.data)return[{from:0,to:t.doc.length}];if(!e||!e.allowsNesting)return[];let i=[],s=(r,o)=>{if(r.prop(Xe)==this.data){i.push({from:o,to:o+r.length});return}let l=r.prop(O.mounted);if(l){if(l.tree.prop(Xe)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+r.length});return}else if(l.overlay){let a=i.length;if(s(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;a=this.cursorPos?this.doc.sliceString(t,e):this.string.slice(t-i,e-i)}},Di=null,Oi=class n{constructor(t,e,i=[],s,r,o,l,a){this.parser=t,this.state=e,this.fragments=i,this.tree=s,this.treeLen=r,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(t,e,i){return new n(t,e,[],G.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Nr(this.state.doc),this.fragments)}work(t,e){return e!=null&&e>=this.state.doc.length&&(e=void 0),this.tree!=G.empty&&this.isDone(e??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof t=="number"){let s=Date.now()+t;t=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),e!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&e=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&this.parse.stopAt(t),this.withContext(()=>{for(;!(e=this.parse.advance()););}),this.treeLen=t,this.tree=e,this.fragments=this.withoutTempSkipped(Me.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(t){let e=Di;Di=this;try{return t()}finally{Di=e}}withoutTempSkipped(t){for(let e;e=this.tempSkipped.pop();)t=Sa(t,e.from,e.to);return t}changes(t,e){let{fragments:i,tree:s,treeLen:r,viewport:o,skipped:l}=this;if(this.takeTree(),!t.empty){let a=[];if(t.iterChangedRanges((h,f,c,u)=>a.push({fromA:h,toA:f,fromB:c,toB:u})),i=Me.applyChanges(i,a),s=G.empty,r=0,o={from:t.mapPos(o.from,-1),to:t.mapPos(o.to,1)},this.skipped.length){l=[];for(let h of this.skipped){let f=t.mapPos(h.from,1),c=t.mapPos(h.to,-1);ft.from&&(this.fragments=Sa(this.fragments,s,r),this.skipped.splice(i--,1))}return this.skipped.length>=e?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(t,e){this.skipped.push({from:t,to:e})}static getSkippingParser(t){return new class extends Ti{createParse(e,i,s){let r=s[0].from,o=s[s.length-1].to;return{parsedPos:r,advance(){let a=Di;if(a){for(let h of s)a.tempSkipped.push(h);t&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,t]):t)}return this.parsedPos=o,new G(ot.none,[],[],o-r)},stoppedAt:null,stopAt(){}}}}}isDone(t){t=Math.min(t,this.state.doc.length);let e=this.fragments;return this.treeLen>=t&&e.length&&e[0].from==0&&e[0].to>=t}static get(){return Di}};function Sa(n,t,e){return Me.applyChanges(n,[{fromA:t,toA:e,fromB:t,toB:e}])}var Bi=class n{constructor(t){this.context=t,this.tree=t.tree}apply(t){if(!t.docChanged&&this.tree==this.context.tree)return this;let e=this.context.changes(t.changes,t.state),i=this.context.treeLen==t.startState.doc.length?void 0:Math.max(t.changes.mapPos(this.context.treeLen),e.viewport.to);return e.work(20,i)||e.takeTree(),new n(e)}static init(t){let e=Math.min(3e3,t.doc.length),i=Oi.create(t.facet(Qe).parser,t,{from:0,to:e});return i.work(20,e)||i.takeTree(),new n(i)}};dt.state=Ct.define({create:Bi.init,update(n,t){for(let e of t.effects)if(e.is(dt.setState))return e.value;return t.startState.facet(Qe)!=t.state.facet(Qe)?Bi.init(t.state):n.apply(t)}});var Da=n=>{let t=setTimeout(()=>n(),500);return()=>clearTimeout(t)};typeof requestIdleCallback<"u"&&(Da=n=>{let t=-1,e=setTimeout(()=>{t=requestIdleCallback(n,{timeout:400})},100);return()=>t<0?clearTimeout(e):cancelIdleCallback(t)});var Lr=typeof navigator<"u"&&(!((Br=navigator.scheduling)===null||Br===void 0)&&Br.isInputPending)?()=>navigator.scheduling.isInputPending():null,fu=Et.fromClass(class{constructor(t){this.view=t,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(t){let e=this.view.state.field(dt.state).context;(e.updateViewport(t.view.viewport)||this.view.viewport.to>e.treeLen)&&this.scheduleWork(),(t.docChanged||t.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(e)}scheduleWork(){if(this.working)return;let{state:t}=this.view,e=t.field(dt.state);(e.tree!=e.context.tree||!e.context.isDone(t.doc.length))&&(this.working=Da(this.work))}work(t){this.working=null;let e=Date.now();if(this.chunkEnds+1e3,a=r.context.work(()=>Lr&&Lr()||Date.now()>o,s+(l?0:1e5));this.chunkBudget-=Date.now()-e,(a||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:dt.setState.of(new Bi(r.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(t){t.scheduleOn&&(this.workScheduled++,t.scheduleOn.then(()=>this.scheduleWork()).catch(e=>Mt(this.view.state,e)).then(()=>this.workScheduled--),t.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Qe=M.define({combine(n){return n.length?n[0]:null},enables:n=>[dt.state,fu,E.contentAttributes.compute([n],t=>{let e=t.facet(n);return e&&e.name?{"data-language":e.name}:{}})]});var cu=M.define(),ti=M.define({combine:n=>{if(!n.length)return" ";let t=n[0];if(!t||/\S/.test(t)||Array.from(t).some(e=>e!=t[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return t}});function le(n){let t=n.facet(ti);return t.charCodeAt(0)==9?n.tabSize*t.length:t.length}function ei(n,t){let e="",i=n.tabSize,s=n.facet(ti)[0];if(s==" "){for(;t>=i;)e+=" ",t-=i;s=" "}for(let r=0;r=t?uu(n,e,t):null}var De=class{constructor(t,e={}){this.state=t,this.options=e,this.unit=le(t)}lineAt(t,e=1){let i=this.state.doc.lineAt(t),{simulateBreak:s,simulateDoubleBreak:r}=this.options;return s!=null&&s>=i.from&&s<=i.to?r&&s==t?{text:"",from:t}:(e<0?s-1&&(r+=o-this.countColumn(i,i.search(/\S|$/))),r}countColumn(t,e=t.length){return be(t,this.state.tabSize,e)}lineIndent(t,e=1){let{text:i,from:s}=this.lineAt(t,e),r=this.options.overrideIndentation;if(r){let o=r(s);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},Oa=new O;function uu(n,t,e){let i=t.resolveStack(e),s=t.resolveInner(e,-1).resolve(e,0).enterUnfinishedNodesBefore(e);if(s!=i.node){let r=[];for(let o=s;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)r.push(o);for(let o=r.length-1;o>=0;o--)i={node:r[o],next:i}}return Ba(i,n,e)}function Ba(n,t,e){for(let i=n;i;i=i.next){let s=pu(i.node);if(s)return s(Ir.create(t,e,i))}return 0}function du(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function pu(n){let t=n.type.prop(Oa);if(t)return t;let e=n.firstChild,i;if(e&&(i=e.type.prop(O.closedBy))){let s=n.lastChild,r=s&&i.indexOf(s.name)>-1;return o=>yu(o,!0,1,void 0,r&&!du(o)?s.from:void 0)}return n.parent==null?gu:null}function gu(){return 0}var Ir=class n extends De{constructor(t,e,i){super(t.state,t.options),this.base=t,this.pos=e,this.context=i}get node(){return this.context.node}static create(t,e,i){return new n(t,e,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(t){let e=this.state.doc.lineAt(t.from);for(;;){let i=t.resolve(e.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(mu(i,t))break;e=this.state.doc.lineAt(i.from)}return this.lineIndent(e.from)}continue(){return Ba(this.context.next,this.base,this.pos)}};function mu(n,t){for(let e=t;e;e=e.parent)if(n==e)return!0;return!1}function bu(n){let t=n.node,e=t.childAfter(t.from),i=t.lastChild;if(!e)return null;let s=n.options.simulateBreak,r=n.state.doc.lineAt(e.from),o=s==null||s<=r.from?r.to:Math.min(r.to,s);for(let l=e.to;;){let a=t.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let h=/^ */.exec(r.text.slice(e.to-r.from))[0].length;return{from:e.from,to:e.to+h}}l=a.to}}function yu(n,t,e,i,s){let r=n.textAfter,o=r.match(/^\s*/)[0].length,l=i&&r.slice(o,o+i.length)==i||s==n.pos+o,a=t?bu(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*e)}var wu=200;function La(){return K.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let t=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!t.length)return n;let e=n.newDoc,{head:i}=n.newSelection.main,s=e.lineAt(i);if(i>s.from+wu)return n;let r=e.sliceString(s.from,i);if(!t.some(h=>h.test(r)))return n;let{state:o}=n,l=-1,a=[];for(let{head:h}of o.selection.ranges){let f=o.doc.lineAt(h);if(f.from==l)continue;l=f.from;let c=In(o,f.from);if(c==null)continue;let u=/^\s*/.exec(f.text)[0],d=ei(o,c);u!=d&&a.push({from:f.from,to:f.from+u.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}var Ze=class n{constructor(t,e){this.specs=t;let i;function s(l){let a=bt.newName();return(i||(i=Object.create(null)))["."+a]=l,a}let r=typeof e.all=="string"?e.all:e.all?s(e.all):void 0,o=e.scope;this.scope=o instanceof dt?l=>l.prop(Xe)==o.data:o?l=>l==o:void 0,this.style=Or(t.map(l=>({tag:l.tag,class:l.class||s(Object.assign({},l,{tag:null}))})),{all:r}).style,this.module=i?new bt(i):null,this.themeType=e.themeType}static define(t,e){return new n(t,e||{})}},Hr=M.define(),Ra=M.define({combine(n){return n.length?[n[0]]:null}});function Rr(n){let t=n.facet(Hr);return t.length?t:n.facet(Ra)}function Hn(n,t){let e=[xu],i;return n instanceof Ze&&(n.module&&e.push(E.styleModule.of(n.module)),i=n.themeType),t?.fallback?e.push(Ra.of(n)):i?e.push(Hr.computeN([E.darkTheme],s=>s.facet(E.darkTheme)==(i=="dark")?[n]:[])):e.push(Hr.of(n)),e}var Fr=class{constructor(t){this.markCache=Object.create(null),this.tree=Rt(t.state),this.decorations=this.buildDeco(t,Rr(t.state)),this.decoratedTo=t.viewport.to}update(t){let e=Rt(t.state),i=Rr(t.state),s=i!=Rr(t.startState),{viewport:r}=t.view,o=t.changes.mapPos(this.decoratedTo,1);e.length=r.to?(this.decorations=this.decorations.map(t.changes),this.decoratedTo=o):(e!=this.tree||t.viewportChanged||s)&&(this.tree=e,this.decorations=this.buildDeco(t.view,i),this.decoratedTo=r.to)}buildDeco(t,e){if(!e||!this.tree.length)return z.none;let i=new ge;for(let{from:s,to:r}of t.visibleRanges)va(this.tree,e,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=z.mark({class:a})))},s,r);return i.finish()}},xu=He.high(Et.fromClass(Fr,{decorations:n=>n.decorations})),Pa=Ze.define([{tag:b.meta,color:"#404740"},{tag:b.link,textDecoration:"underline"},{tag:b.heading,textDecoration:"underline",fontWeight:"bold"},{tag:b.emphasis,fontStyle:"italic"},{tag:b.strong,fontWeight:"bold"},{tag:b.strikethrough,textDecoration:"line-through"},{tag:b.keyword,color:"#708"},{tag:[b.atom,b.bool,b.url,b.contentSeparator,b.labelName],color:"#219"},{tag:[b.literal,b.inserted],color:"#164"},{tag:[b.string,b.deleted],color:"#a11"},{tag:[b.regexp,b.escape,b.special(b.string)],color:"#e40"},{tag:b.definition(b.variableName),color:"#00f"},{tag:b.local(b.variableName),color:"#30a"},{tag:[b.typeName,b.namespace],color:"#085"},{tag:b.className,color:"#167"},{tag:[b.special(b.variableName),b.macroName],color:"#256"},{tag:b.definition(b.propertyName),color:"#00c"},{tag:b.comment,color:"#940"},{tag:b.invalid,color:"#f00"}]),vu=E.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Na=1e4,Ia="()[]{}",Ha=M.define({combine(n){return me(n,{afterCursor:!0,brackets:Ia,maxScanDistance:Na,renderMatch:Cu})}}),ku=z.mark({class:"cm-matchingBracket"}),Su=z.mark({class:"cm-nonmatchingBracket"});function Cu(n){let t=[],e=n.matched?ku:Su;return t.push(e.range(n.start.from,n.start.to)),n.end&&t.push(e.range(n.end.from,n.end.to)),t}function Ca(n){let t=[],e=n.facet(Ha);for(let i of n.selection.ranges){if(!i.empty)continue;let s=Lt(n,i.head,-1,e)||i.head>0&&Lt(n,i.head-1,1,e)||e.afterCursor&&(Lt(n,i.head,1,e)||i.headn.decorations}),Mu=[Au,vu];function Fa(n={}){return[Ha.of(n),Mu]}var Tu=new O;function Vr(n,t,e){let i=n.prop(t<0?O.openedBy:O.closedBy);if(i)return i;if(n.name.length==1){let s=e.indexOf(n.name);if(s>-1&&s%2==(t<0?1:0))return[e[s+t]]}return null}function Wr(n){let t=n.type.prop(Tu);return t?t(n.node):n}function Lt(n,t,e,i={}){let s=i.maxScanDistance||Na,r=i.brackets||Ia,o=Rt(n),l=o.resolveInner(t,e);for(let a=l;a;a=a.parent){let h=Vr(a.type,e,r);if(h&&a.from0?t>=f.from&&tf.from&&t<=f.to))return Eu(n,t,e,a,f,h,r)}}return Du(n,t,e,o,l.type,s,r)}function Eu(n,t,e,i,s,r,o){let l=i.parent,a={from:s.from,to:s.to},h=0,f=l?.cursor();if(f&&(e<0?f.childBefore(i.from):f.childAfter(i.to)))do if(e<0?f.to<=i.from:f.from>=i.to){if(h==0&&r.indexOf(f.type.name)>-1&&f.from0)return null;let h={from:e<0?t-1:t,to:e>0?t+1:t},f=n.doc.iterRange(t,e>0?n.doc.length:0),c=0;for(let u=0;!f.next().done&&u<=r;){let d=f.value;e<0&&(u+=d.length);let p=t+u*e;for(let g=e>0?0:d.length-1,m=e>0?d.length:-1;g!=m;g+=e){let y=o.indexOf(d[g]);if(!(y<0||i.resolveInner(p+g,1).type!=s))if(y%2==0==e>0)c++;else{if(c==1)return{start:h,end:{from:p+g,to:p+g+1},matched:y>>1==a>>1};c--}}e>0&&(u+=d.length)}return f.done?{start:h,matched:!1}:null}function Aa(n,t,e,i=0,s=0){t==null&&(t=n.search(/[^\s\u00a0]/),t==-1&&(t=n.length));let r=s;for(let o=i;o=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.pose}eatSpace(){let t=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>t}skipToEnd(){this.pos=this.string.length}skipTo(t){let e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0}backUp(t){this.pos-=t}column(){return this.lastColumnPosi?o.toLowerCase():o,r=this.string.substr(this.pos,t.length);return s(r)==s(t)?(e!==!1&&(this.pos+=t.length),!0):null}else{let s=this.string.slice(this.pos).match(t);return s&&s.index>0?null:(s&&e!==!1&&(this.pos+=s[0].length),s)}}current(){return this.string.slice(this.start,this.pos)}};function Ou(n){return{name:n.name||"",token:n.token,blankLine:n.blankLine||(()=>{}),startState:n.startState||(()=>!0),copyState:n.copyState||Bu,indent:n.indent||(()=>null),languageData:n.languageData||{},tokenTable:n.tokenTable||qr,mergeTokens:n.mergeTokens!==!1}}function Bu(n){if(typeof n!="object")return n;let t={};for(let e in n){let i=n[e];t[e]=i instanceof Array?i.slice():i}return t}var Ma=new WeakMap,Li=class n extends dt{constructor(t){let e=au(t.languageData),i=Ou(t),s,r=new class extends Ti{createParse(o,l,a){return new zr(s,o,l,a)}};super(e,r,[],t.name),this.topNode=Nu(e,this),s=this,this.streamParser=i,this.stateAfter=new O({perNode:!0}),this.tokenTable=t.tokenTable?new Nn(i.tokenTable):Pu}static define(t){return new n(t)}getIndent(t){let e,{overrideIndentation:i}=t.options;i&&(e=Ma.get(t.state),e!=null&&e1e4)return null;for(;r=i&&e+t.length<=s&&t.prop(n.stateAfter);if(r)return{state:n.streamParser.copyState(r),pos:e+t.length};for(let o=t.children.length-1;o>=0;o--){let l=t.children[o],a=e+t.positions[o],h=l instanceof G&&a=t.length)return t;!s&&e==0&&t.type==n.topNode&&(s=!0);for(let r=t.children.length-1;r>=0;r--){let o=t.positions[r],l=t.children[r],a;if(oe&&_r(n,r.tree,0-r.offset,e,l),h;if(a&&a.pos<=i&&(h=Va(n,r.tree,e+r.offset,a.pos+r.offset,!1)))return{state:a.state,tree:h}}return{state:n.streamParser.startState(s?le(s):4),tree:G.empty}}var zr=class{constructor(t,e,i,s){this.lang=t,this.input=e,this.fragments=i,this.ranges=s,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=s[s.length-1].to;let r=Oi.get(),o=s[0].from,{state:l,tree:a}=Lu(t,i,o,this.to,r?.state);this.state=l,this.parsedPos=this.chunkStart=o+a.length;for(let h=0;hh.from<=r.viewport.from&&h.to>=r.viewport.from)&&(this.state=this.lang.streamParser.startState(le(r.state)),r.skipUntilInView(this.parsedPos,r.viewport.from),this.parsedPos=r.viewport.from),this.moveRangeIndex()}advance(){let t=Oi.get(),e=this.stoppedAt==null?this.to:Math.min(this.to,this.stoppedAt),i=Math.min(e,this.chunkStart+512);for(t&&(i=Math.min(i,t.viewport.to));this.parsedPos=e?this.finish():t&&this.parsedPos>=t.viewport.to?(t.skipUntilInView(this.parsedPos,e),this.finish()):null}stopAt(t){this.stoppedAt=t}lineAfter(t){let e=this.input.chunk(t);if(this.input.lineChunks)e==` `&&(e="");else{let i=e.indexOf(` -`);i>-1&&(e=e.slice(0,i))}return t+e.length<=this.to?e:e.slice(0,this.to-t)}nextLine(){let t=this.parsedPos,e=this.lineAfter(t),i=t+e.length;for(let s=this.rangeIndex;;){let r=this.ranges[s].to;if(r>=i||(e=e.slice(0,r-(i-e.length)),s++,s==this.ranges.length))break;let o=this.ranges[s].from,l=this.lineAfter(o);e+=l,i=o+l.length}return{line:e,end:i}}skipGapsTo(t,e,i){for(;;){let s=this.ranges[this.rangeIndex].to,r=t+e;if(i>0?s>r:s>=r)break;let o=this.ranges[++this.rangeIndex].from;e+=o-s}return e}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){s=this.skipGapsTo(e,s,1),e+=s;let l=this.chunk.length;s=this.skipGapsTo(i,s,-1),i+=s,r+=this.chunk.length-l}let o=this.chunk.length-4;return this.lang.streamParser.mergeTokens&&r==4&&o>=0&&this.chunk[o]==t&&this.chunk[o+2]==e?this.chunk[o+2]=i:this.chunk.push(t,e,i,r),s}parseLine(t){let{line:e,end:i}=this.nextLine(),s=0,{streamParser:r}=this.lang,o=new Pn(e,t?t.state.tabSize:4,t?le(t.state):2);if(o.eol())r.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let l=Na(r.token,o,this.state);if(l&&(s=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+o.start,this.parsedPos+o.pos,s)),o.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPost.start)return s}throw new Error("Stream parser failed to advance stream.")}var zr=Object.create(null),Ri=[ot.none],Mu=new Dn(Ri),ka=[],Sa=Object.create(null),Ia=Object.create(null);for(let[n,t]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Ia[n]=Ha(zr,t);var Nn=class{constructor(t){this.extra=t,this.table=Object.assign(Object.create(null),Ia)}resolve(t){return t?this.table[t]||(this.table[t]=Ha(this.extra,t)):0}},Tu=new Nn(zr);function Lr(n,t){ka.indexOf(n)>-1||(ka.push(n),console.warn(t))}function Ha(n,t){let e=[];for(let l of t.split(" ")){let a=[];for(let h of l.split(".")){let f=n[h]||y[h];f?typeof f=="function"?a.length?a=a.map(f):Lr(h,`Modifier ${h} used at start of tag`):a.length?Lr(h,`Tag ${h} used as modifier`):a=Array.isArray(f)?f:[f]:Lr(h,`Unknown highlighting tag ${h}`)}for(let h of a)e.push(h)}if(!e.length)return 0;let i=t.replace(/ /g,"_"),s=i+" "+e.map(l=>l.id),r=Sa[s];if(r)return r.id;let o=Sa[s]=ot.define({id:Ri.length,name:i,props:[pa({[i]:e})]});return Ri.push(o),o.id}function Du(n,t){let e=ot.define({id:Ri.length,name:"Document",props:[Xe.add(()=>n),Aa.add(()=>i=>t.getIndent(i))],top:!0});return Ri.push(e),e}var Np={rtl:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:K.RTL}),ltr:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:K.LTR}),auto:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var Ou=n=>{let{state:t}=n,e=t.doc.lineAt(t.selection.main.from),i=Gr(n.state,e.from);return i.line?Bu(n):i.block?Lu(n):!1};function jr(n,t){return({state:e,dispatch:i})=>{if(e.readOnly)return!1;let s=n(t,e);return s?(i(e.update(s)),!0):!1}}var Bu=jr(Nu,0);var Eu=jr(Ua,0);var Lu=jr((n,t)=>Ua(n,t,Pu(t)),0);function Gr(n,t){let e=n.languageDataAt("commentTokens",t,1);return e.length?e[0]:{}}var Pi=50;function Ru(n,{open:t,close:e},i,s){let r=n.sliceDoc(i-Pi,i),o=n.sliceDoc(s,s+Pi),l=/\s*$/.exec(r)[0].length,a=/^\s*/.exec(o)[0].length,h=r.length-l;if(r.slice(h-t.length,h)==t&&o.slice(a,a+e.length)==e)return{open:{pos:i-l,margin:l&&1},close:{pos:s+a,margin:a&&1}};let f,c;s-i<=2*Pi?f=c=n.sliceDoc(i,s):(f=n.sliceDoc(i,i+Pi),c=n.sliceDoc(s-Pi,s));let u=/^\s*/.exec(f)[0].length,d=/\s*$/.exec(c)[0].length,p=c.length-d-e.length;return f.slice(u,u+t.length)==t&&c.slice(p,p+e.length)==e?{open:{pos:i+u+t.length,margin:/\s/.test(f.charAt(u+t.length))?1:0},close:{pos:s-d-e.length,margin:/\s/.test(c.charAt(p-1))?1:0}}:null}function Pu(n){let t=[];for(let e of n.selection.ranges){let i=n.doc.lineAt(e.from),s=e.to<=i.to?i:n.doc.lineAt(e.to);s.from>i.from&&s.from==e.to&&(s=e.to==i.to+1?i:n.doc.lineAt(e.to-1));let r=t.length-1;r>=0&&t[r].to>i.from?t[r].to=s.to:t.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:s.to})}return t}function Ua(n,t,e=t.selection.ranges){let i=e.map(r=>Gr(t,r.from).block);if(!i.every(r=>r))return null;let s=e.map((r,o)=>Ru(t,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:t.changes(e.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;os&&(r==o||o>c.from)){s=c.from;let u=/^\s*/.exec(c.text)[0].length,d=u==c.length,p=c.text.slice(u,u+h.length)==h?u:-1;ur.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:l,token:a,indent:h,empty:f,single:c}of i)(c||!f)&&r.push({from:l.from+h,insert:a+" "});let o=t.changes(r);return{changes:o,selection:t.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,f=h+a.length;o.text[f-o.from]==" "&&f++,r.push({from:h,to:f})}return{changes:r}}return null}var qr=mt.define(),Iu=mt.define(),Hu=M.define(),ja=M.define({combine(n){return me(n,{minDepth:100,newGroupDelay:500,joinToEvent:(t,e)=>e},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(t,e)=>(i,s)=>t(i,s)||e(i,s)})}}),Ga=Ct.define({create(){return Be.empty},update(n,t){let e=t.state.facet(ja),i=t.annotation(qr);if(i){let a=Pt.fromTransaction(t,i.selection),h=i.side,f=h==0?n.undone:n.done;return a?f=Wn(f,f.length,e.minDepth,a):f=Qa(f,t.startState.selection),new Be(h==0?i.rest:f,h==0?f:i.rest)}let s=t.annotation(Iu);if((s=="full"||s=="before")&&(n=n.isolate()),t.annotation(X.addToHistory)===!1)return t.changes.empty?n:n.addMapping(t.changes.desc);let r=Pt.fromTransaction(t),o=t.annotation(X.time),l=t.annotation(X.userEvent);return r?n=n.addChanges(r,o,l,e,t):t.selection&&(n=n.addSelection(t.startState.selection,o,l,e.newGroupDelay)),(s=="full"||s=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(t=>t.toJSON()),undone:n.undone.map(t=>t.toJSON())}},fromJSON(n){return new Be(n.done.map(Pt.fromJSON),n.undone.map(Pt.fromJSON))}});function Ja(n={}){return[Ga,ja.of(n),D.domEventHandlers({beforeinput(t,e){let i=t.inputType=="historyUndo"?Ya:t.inputType=="historyRedo"?Kr:null;return i?(t.preventDefault(),i(e)):!1}})]}function Vn(n,t){return function({state:e,dispatch:i}){if(!t&&e.readOnly)return!1;let s=e.field(Ga,!1);if(!s)return!1;let r=s.pop(n,e,t);return r?(i(r),!0):!1}}var Ya=Vn(0,!1),Kr=Vn(1,!1),Fu=Vn(0,!0),Wu=Vn(1,!0);var Pt=class n{constructor(t,e,i,s,r){this.changes=t,this.effects=e,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(t){return new n(this.changes,this.effects,this.mapped,this.startSelection,t)}toJSON(){var t,e,i;return{changes:(t=this.changes)===null||t===void 0?void 0:t.toJSON(),mapped:(e=this.mapped)===null||e===void 0?void 0:e.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(t){return new n(t.changes&&st.fromJSON(t.changes),[],t.mapped&&jt.fromJSON(t.mapped),t.startSelection&&w.fromJSON(t.startSelection),t.selectionsAfter.map(w.fromJSON))}static fromTransaction(t,e){let i=vt;for(let s of t.startState.facet(Hu)){let r=s(t);r.length&&(i=i.concat(r))}return!i.length&&t.changes.empty?null:new n(t.changes.invert(t.startState.doc),i,void 0,e||t.startState.selection,vt)}static selection(t){return new n(void 0,vt,void 0,void 0,t)}};function Wn(n,t,e,i){let s=t+1>e+20?t-e-1:0,r=n.slice(s,t);return r.push(i),r}function Vu(n,t){let e=[],i=!1;return n.iterChangedRanges((s,r)=>e.push(s,r)),t.iterChangedRanges((s,r,o,l)=>{for(let a=0;a=h&&o<=f&&(i=!0)}}),i}function zu(n,t){return n.ranges.length==t.ranges.length&&n.ranges.filter((e,i)=>e.empty!=t.ranges[i].empty).length===0}function Xa(n,t){return n.length?t.length?n.concat(t):n:t}var vt=[],_u=200;function Qa(n,t){if(n.length){let e=n[n.length-1],i=e.selectionsAfter.slice(Math.max(0,e.selectionsAfter.length-_u));return i.length&&i[i.length-1].eq(t)?n:(i.push(t),Wn(n,n.length-1,1e9,e.setSelAfter(i)))}else return[Pt.selection([t])]}function qu(n){let t=n[n.length-1],e=n.slice();return e[n.length-1]=t.setSelAfter(t.selectionsAfter.slice(0,t.selectionsAfter.length-1)),e}function _r(n,t){if(!n.length)return n;let e=n.length,i=vt;for(;e;){let s=Ku(n[e-1],t,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,e);return r[e-1]=s,r}else t=s.mapped,e--,i=s.selectionsAfter}return i.length?[Pt.selection(i)]:vt}function Ku(n,t,e){let i=Xa(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(t)):vt,e);if(!n.changes)return Pt.selection(i);let s=n.changes.map(t),r=t.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new Pt(s,U.mapEffects(n.effects,t),o,n.startSelection.map(r),i)}var $u=/^(input\.type|delete)($|\.)/,Be=class n{constructor(t,e,i=0,s=void 0){this.done=t,this.undone=e,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new n(this.done,this.undone):this}addChanges(t,e,i,s,r){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&t.changes&&(!i||$u.test(i))&&(!l.selectionsAfter.length&&e-this.prevTime0&&e-this.prevTimee.empty?n.moveByChar(e,t):zn(e,t))}function it(n){return n.textDirectionAt(n.state.selection.main.head)==K.LTR}var eh=n=>th(n,!it(n)),ih=n=>th(n,it(n));function nh(n,t){return It(n,e=>e.empty?n.moveByGroup(e,t):zn(e,t))}var Uu=n=>nh(n,!it(n)),ju=n=>nh(n,it(n));var Kp=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function Gu(n,t,e){if(t.type.prop(e))return!0;let i=t.to-t.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(t.from,t.to)))||t.firstChild}function _n(n,t,e){let i=Rt(n).resolveInner(t.head),s=e?B.closedBy:B.openedBy;for(let a=t.head;;){let h=e?i.childAfter(a):i.childBefore(a);if(!h)break;Gu(n,h,s)?i=h:a=e?h.to:h.from}let r=i.type.prop(s),o,l;return r&&(o=e?Lt(n,i.from,1):Lt(n,i.to,-1))&&o.matched?l=e?o.end.to:o.end.from:l=e?i.to:i.from,w.cursor(l,e?-1:1)}var Ju=n=>It(n,t=>_n(n.state,t,!it(n))),Yu=n=>It(n,t=>_n(n.state,t,it(n)));function sh(n,t){return It(n,e=>{if(!e.empty)return zn(e,t);let i=n.moveVertically(e,t);return i.head!=e.head?i:n.moveToLineBoundary(e,t)})}var rh=n=>sh(n,!1),oh=n=>sh(n,!0);function lh(n){let t=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,t,e.height):zn(o,t));if(s.eq(i.selection))return!1;let r;if(e.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+e.marginTop,h=l.bottom-e.marginBottom;o&&o.top>a&&o.bottomah(n,!1),$r=n=>ah(n,!0);function ae(n,t,e){let i=n.lineBlockAt(t.head),s=n.moveToLineBoundary(t,e);if(s.head==t.head&&s.head!=(e?i.to:i.from)&&(s=n.moveToLineBoundary(t,e,!1)),!e&&s.head==i.from&&i.length){let r=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&t.head!=i.from+r&&(s=w.cursor(i.from+r))}return s}var Xu=n=>It(n,t=>ae(n,t,!0)),Qu=n=>It(n,t=>ae(n,t,!1)),Zu=n=>It(n,t=>ae(n,t,!it(n))),td=n=>It(n,t=>ae(n,t,it(n))),ed=n=>It(n,t=>w.cursor(n.lineBlockAt(t.head).from,1)),id=n=>It(n,t=>w.cursor(n.lineBlockAt(t.head).to,-1));function nd(n,t,e){let i=!1,s=ii(n.selection,r=>{let o=Lt(n,r.head,-1)||Lt(n,r.head,1)||r.head>0&&Lt(n,r.head-1,1)||r.headnd(n,t,!1);function kt(n,t){let e=ii(n.state.selection,i=>{let s=t(i);return w.range(i.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return e.eq(n.state.selection)?!1:(n.dispatch(Nt(n.state,e)),!0)}function hh(n,t){return kt(n,e=>n.moveByChar(e,t))}var fh=n=>hh(n,!it(n)),ch=n=>hh(n,it(n));function uh(n,t){return kt(n,e=>n.moveByGroup(e,t))}var rd=n=>uh(n,!it(n)),od=n=>uh(n,it(n));var ld=n=>kt(n,t=>_n(n.state,t,!it(n))),ad=n=>kt(n,t=>_n(n.state,t,it(n)));function dh(n,t){return kt(n,e=>n.moveVertically(e,t))}var ph=n=>dh(n,!1),gh=n=>dh(n,!0);function mh(n,t){return kt(n,e=>n.moveVertically(e,t,lh(n).height))}var Wa=n=>mh(n,!1),Va=n=>mh(n,!0),hd=n=>kt(n,t=>ae(n,t,!0)),fd=n=>kt(n,t=>ae(n,t,!1)),cd=n=>kt(n,t=>ae(n,t,!it(n))),ud=n=>kt(n,t=>ae(n,t,it(n))),dd=n=>kt(n,t=>w.cursor(n.lineBlockAt(t.head).from)),pd=n=>kt(n,t=>w.cursor(n.lineBlockAt(t.head).to)),za=({state:n,dispatch:t})=>(t(Nt(n,{anchor:0})),!0),_a=({state:n,dispatch:t})=>(t(Nt(n,{anchor:n.doc.length})),!0),qa=({state:n,dispatch:t})=>(t(Nt(n,{anchor:n.selection.main.anchor,head:0})),!0),Ka=({state:n,dispatch:t})=>(t(Nt(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),gd=({state:n,dispatch:t})=>(t(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),md=({state:n,dispatch:t})=>{let e=qn(n).map(({from:i,to:s})=>w.range(i,Math.min(s+1,n.doc.length)));return t(n.update({selection:w.create(e),userEvent:"select"})),!0},yd=({state:n,dispatch:t})=>{let e=ii(n.selection,i=>{let s=Rt(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return w.range(l.to,l.from)}return i});return e.eq(n.selection)?!1:(t(Nt(n,e)),!0)};function yh(n,t){let{state:e}=n,i=e.selection,s=e.selection.ranges.slice();for(let r of e.selection.ranges){let o=e.doc.lineAt(r.head);if(t?o.to0)for(let l=r;;){let a=n.moveVertically(l,t);if(a.heado.to){s.some(h=>h.head==a.head)||s.push(a);break}else{if(a.head==l.head)break;l=a}}}return s.length==i.ranges.length?!1:(n.dispatch(Nt(e,w.create(s,s.length-1))),!0)}var bd=n=>yh(n,!1),wd=n=>yh(n,!0),xd=({state:n,dispatch:t})=>{let e=n.selection,i=null;return e.ranges.length>1?i=w.create([e.main]):e.main.empty||(i=w.create([w.cursor(e.main.head)])),i?(t(Nt(n,i)),!0):!1};function Ni(n,t){if(n.state.readOnly)return!1;let e="delete.selection",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:l}=r;if(o==l){let a=t(r);ao&&(e="delete.forward",a=Fn(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=Fn(n,o,!1),l=Fn(n,l,!0);return o==l?{range:r}:{changes:{from:o,to:l},range:w.cursor(o,os(n)))i.between(t,t,(s,r)=>{st&&(t=e?r:s)});return t}var bh=(n,t,e)=>Ni(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),l,a;if(e&&!t&&s>o.from&&sbh(n,!1,!0);var wh=n=>bh(n,!0,!1),xh=(n,t)=>Ni(n,e=>{let i=e.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let l=null;;){if(i==(t?r.to:r.from)){i==e.head&&r.number!=(t?s.doc.lines:1)&&(i+=t?1:-1);break}let a=Q(r.text,i-r.from,t)+r.from,h=r.text.slice(Math.min(i,a)-r.from,Math.max(i,a)-r.from),f=o(h);if(l!=null&&f!=l)break;(h!=" "||i!=e.head)&&(l=f),i=a}return i}),vh=n=>xh(n,!1),vd=n=>xh(n,!0);var kd=n=>Ni(n,t=>{let e=n.lineBlockAt(t.head).to;return t.headNi(n,t=>{let e=n.moveToLineBoundary(t,!1).head;return t.head>e?e:Math.max(0,t.head-1)}),Cd=n=>Ni(n,t=>{let e=n.moveToLineBoundary(t,!0).head;return t.head{if(n.readOnly)return!1;let e=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:R.of(["",""])},range:w.cursor(i.from)}));return t(n.update(e,{scrollIntoView:!0,userEvent:"input"})),!0},Md=({state:n,dispatch:t})=>{if(n.readOnly)return!1;let e=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:Q(r.text,s-r.from,!1)+r.from,l=s==r.to?s+1:Q(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:l,insert:n.doc.slice(s,l).append(n.doc.slice(o,s))},range:w.cursor(l)}});return e.changes.empty?!1:(t(n.update(e,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function qn(n){let t=[],e=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),e>=s.number){let o=t[t.length-1];o.to=r.to,o.ranges.push(i)}else t.push({from:s.from,to:r.to,ranges:[i]});e=r.number+1}return t}function kh(n,t,e){if(n.readOnly)return!1;let i=[],s=[];for(let r of qn(n)){if(e?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(e?r.to+1:r.from-1),l=o.length+1;if(e){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let a of r.ranges)s.push(w.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let a of r.ranges)s.push(w.range(a.anchor-l,a.head-l))}}return i.length?(t(n.update({changes:i,scrollIntoView:!0,selection:w.create(s,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}var Td=({state:n,dispatch:t})=>kh(n,t,!1),Dd=({state:n,dispatch:t})=>kh(n,t,!0);function Sh(n,t,e){if(n.readOnly)return!1;let i=[];for(let r of qn(n))e?i.push({from:r.from,insert:n.doc.slice(r.from,r.to)+n.lineBreak}):i.push({from:r.to,insert:n.lineBreak+n.doc.slice(r.from,r.to)});let s=n.changes(i);return t(n.update({changes:s,selection:n.selection.map(s,e?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var Od=({state:n,dispatch:t})=>Sh(n,t,!1),Bd=({state:n,dispatch:t})=>Sh(n,t,!0),Ed=n=>{if(n.state.readOnly)return!1;let{state:t}=n,e=t.changes(qn(t).map(({from:s,to:r})=>(s>0?s--:r{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),l=n.coordsAtPos(s.head,s.assoc||1);l&&(r=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(e);return n.dispatch({changes:e,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function Ld(n,t){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(t-1,t+1)))return{from:t,to:t};let e=Rt(n).resolveInner(t),i=e.childBefore(t),s=e.childAfter(t),r;return i&&s&&i.to<=t&&s.from>=t&&(r=i.type.prop(B.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}var $a=Ch(!1),Rd=Ch(!0);function Ch(n){return({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=t.changeByRange(s=>{let{from:r,to:o}=s,l=t.doc.lineAt(r),a=!n&&r==o&&Ld(t,r);n&&(r=o=(o<=l.to?l:t.doc.lineAt(o)).to);let h=new Oe(t,{simulateBreak:r,simulateDoubleBreak:!!a}),f=In(h,r);for(f==null&&(f=ye(/^\s*/.exec(t.doc.lineAt(r).text)[0],t.tabSize));ol.from&&r{let s=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>e&&(i.empty||i.to>l.from)&&(t(l,s,i),e=l.number),o=l.to+1}let r=n.changes(s);return{changes:s,range:w.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}var Pd=({state:n,dispatch:t})=>{if(n.readOnly)return!1;let e=Object.create(null),i=new Oe(n,{overrideIndentation:r=>{let o=e[r];return o??-1}}),s=Jr(n,(r,o,l)=>{let a=In(i,r.from);if(a==null)return;/\S/.test(r.text)||(a=0);let h=/^\s*/.exec(r.text)[0],f=ei(n,a);(h!=f||l.fromn.readOnly?!1:(t(n.update(Jr(n,(e,i)=>{i.push({from:e.from,insert:n.facet(ti)})}),{userEvent:"input.indent"})),!0),Mh=({state:n,dispatch:t})=>n.readOnly?!1:(t(n.update(Jr(n,(e,i)=>{let s=/^\s*/.exec(e.text)[0];if(!s)return;let r=ye(s,n.tabSize),o=0,l=ei(n,Math.max(0,r-le(n)));for(;o(n.setTabFocusMode(),!0);var Id=[{key:"Ctrl-b",run:eh,shift:fh,preventDefault:!0},{key:"Ctrl-f",run:ih,shift:ch},{key:"Ctrl-p",run:rh,shift:ph},{key:"Ctrl-n",run:oh,shift:gh},{key:"Ctrl-a",run:ed,shift:dd},{key:"Ctrl-e",run:id,shift:pd},{key:"Ctrl-d",run:wh},{key:"Ctrl-h",run:Ur},{key:"Ctrl-k",run:kd},{key:"Ctrl-Alt-h",run:vh},{key:"Ctrl-o",run:Ad},{key:"Ctrl-t",run:Md},{key:"Ctrl-v",run:$r}],Hd=[{key:"ArrowLeft",run:eh,shift:fh,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:Uu,shift:rd,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:Zu,shift:cd,preventDefault:!0},{key:"ArrowRight",run:ih,shift:ch,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:ju,shift:od,preventDefault:!0},{mac:"Cmd-ArrowRight",run:td,shift:ud,preventDefault:!0},{key:"ArrowUp",run:rh,shift:ph,preventDefault:!0},{mac:"Cmd-ArrowUp",run:za,shift:qa},{mac:"Ctrl-ArrowUp",run:Fa,shift:Wa},{key:"ArrowDown",run:oh,shift:gh,preventDefault:!0},{mac:"Cmd-ArrowDown",run:_a,shift:Ka},{mac:"Ctrl-ArrowDown",run:$r,shift:Va},{key:"PageUp",run:Fa,shift:Wa},{key:"PageDown",run:$r,shift:Va},{key:"Home",run:Qu,shift:fd,preventDefault:!0},{key:"Mod-Home",run:za,shift:qa},{key:"End",run:Xu,shift:hd,preventDefault:!0},{key:"Mod-End",run:_a,shift:Ka},{key:"Enter",run:$a,shift:$a},{key:"Mod-a",run:gd},{key:"Backspace",run:Ur,shift:Ur,preventDefault:!0},{key:"Delete",run:wh,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:vh,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:vd,preventDefault:!0},{mac:"Mod-Backspace",run:Sd,preventDefault:!0},{mac:"Mod-Delete",run:Cd,preventDefault:!0}].concat(Id.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),Th=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:Ju,shift:ld},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:Yu,shift:ad},{key:"Alt-ArrowUp",run:Td},{key:"Shift-Alt-ArrowUp",run:Od},{key:"Alt-ArrowDown",run:Dd},{key:"Shift-Alt-ArrowDown",run:Bd},{key:"Mod-Alt-ArrowUp",run:bd},{key:"Mod-Alt-ArrowDown",run:wd},{key:"Escape",run:xd},{key:"Mod-Enter",run:Rd},{key:"Alt-l",mac:"Ctrl-l",run:md},{key:"Mod-i",run:yd,preventDefault:!0},{key:"Mod-[",run:Mh},{key:"Mod-]",run:Ah},{key:"Mod-Alt-\\",run:Pd},{key:"Shift-Mod-k",run:Ed},{key:"Shift-Mod-\\",run:sd},{key:"Mod-/",run:Ou},{key:"Alt-A",run:Eu},{key:"Ctrl-m",mac:"Shift-Alt-m",run:Nd}].concat(Hd),Dh={key:"Tab",run:Ah,shift:Mh};var Fd={break:!0,case:!0,chan:!0,const:!0,continue:!0,default:!0,defer:!0,else:!0,fallthrough:!0,for:!0,func:!0,go:!0,goto:!0,if:!0,import:!0,interface:!0,map:!0,package:!0,range:!0,return:!0,select:!0,struct:!0,switch:!0,type:!0,var:!0,bool:!0,byte:!0,complex64:!0,complex128:!0,float32:!0,float64:!0,int8:!0,int16:!0,int32:!0,int64:!0,string:!0,uint8:!0,uint16:!0,uint32:!0,uint64:!0,int:!0,uint:!0,uintptr:!0,error:!0,rune:!0,any:!0,comparable:!0},Wd={true:!0,false:!0,iota:!0,nil:!0,append:!0,cap:!0,close:!0,complex:!0,copy:!0,delete:!0,imag:!0,len:!0,make:!0,new:!0,panic:!0,print:!0,println:!0,real:!0,recover:!0},Oh=/[+\-*&^%:=<>!|\/]/,Qt;function Kn(n,t){var e=n.next();if(e=='"'||e=="'"||e=="`")return t.tokenize=Vd(e),t.tokenize(n,t);if(/[\d\.]/.test(e))return e=="."?n.match(/^[0-9]+([eE][\-+]?[0-9]+)?/):e=="0"?n.match(/^[xX][0-9a-fA-F]+/)||n.match(/^0[0-7]+/):n.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/),"number";if(/[\[\]{}\(\),;\:\.]/.test(e))return Qt=e,null;if(e=="/"){if(n.eat("*"))return t.tokenize=Bh,Bh(n,t);if(n.eat("/"))return n.skipToEnd(),"comment"}if(Oh.test(e))return n.eatWhile(Oh),"operator";n.eatWhile(/[\w\$_\xa1-\uffff]/);var i=n.current();return Fd.propertyIsEnumerable(i)?((i=="case"||i=="default")&&(Qt="case"),"keyword"):Wd.propertyIsEnumerable(i)?"atom":"variable"}function Vd(n){return function(t,e){for(var i=!1,s,r=!1;(s=t.next())!=null;){if(s==n&&!i){r=!0;break}i=!i&&n!="`"&&s=="\\"}return(r||!(i||n=="`"))&&(e.tokenize=Kn),"string"}}function Bh(n,t){for(var e=!1,i;i=n.next();){if(i=="/"&&e){t.tokenize=Kn;break}e=i=="*"}return"comment"}function Lh(n,t,e,i,s){this.indented=n,this.column=t,this.type=e,this.align=i,this.prev=s}function Yr(n,t,e){return n.context=new Lh(n.indented,t,e,null,n.context)}function Eh(n){if(n.context.prev){var t=n.context.type;return(t==")"||t=="]"||t=="}")&&(n.indented=n.context.indented),n.context=n.context.prev}}var Rh={name:"go",startState:function(n){return{tokenize:null,context:new Lh(-n,0,"top",!1),indented:0,startOfLine:!0}},token:function(n,t){var e=t.context;if(n.sol()&&(e.align==null&&(e.align=!1),t.indented=n.indentation(),t.startOfLine=!0,e.type=="case"&&(e.type="}")),n.eatSpace())return null;Qt=null;var i=(t.tokenize||Kn)(n,t);return i=="comment"||(e.align==null&&(e.align=!0),Qt=="{"?Yr(t,n.column(),"}"):Qt=="["?Yr(t,n.column(),"]"):Qt=="("?Yr(t,n.column(),")"):Qt=="case"?e.type="case":(Qt=="}"&&e.type=="}"||Qt==e.type)&&Eh(t),t.startOfLine=!1),i},indent:function(n,t,e){if(n.tokenize!=Kn&&n.tokenize!=null)return null;var i=n.context,s=t&&t.charAt(0);if(i.type=="case"&&/^(?:case|default)\b/.test(t))return i.indented;var r=s==i.type;return i.align?i.column+(r?0:1):i.indented+(r?0:e.unit)},languageData:{indentOnInput:/^\s([{}]|case |default\s*:)$/,commentTokens:{line:"//",block:{open:"/*",close:"*/"}}}};var Ph={name:"toml",startState:function(){return{inString:!1,stringType:"",lhs:!0,inArray:0}},token:function(n,t){let e;if(!t.inString&&(e=n.match(/^('''|"""|'|")/))&&(t.stringType=e[0],t.inString=!0),n.sol()&&!t.inString&&t.inArray===0&&(t.lhs=!0),t.inString){for(;t.inString;)if(n.match(t.stringType))t.inString=!1;else if(n.peek()==="\\")n.next(),n.next();else{if(n.eol())break;n.match(/^.[^\\\"\']*/)}return t.lhs?"property":"string"}else{if(t.inArray&&n.peek()==="]")return n.next(),t.inArray--,"bracket";if(t.lhs&&n.peek()==="["&&n.skipTo("]"))return n.next(),n.peek()==="]"&&n.next(),"atom";if(n.peek()==="#")return n.skipToEnd(),"comment";if(n.eatSpace())return null;if(t.lhs&&n.eatWhile(function(i){return i!="="&&i!=" "}))return"property";if(t.lhs&&n.peek()==="=")return n.next(),t.lhs=!1,null;if(!t.lhs&&n.match(/^\d\d\d\d[\d\-\:\.T]*Z/))return"atom";if(!t.lhs&&(n.match("true")||n.match("false")))return"atom";if(!t.lhs&&n.peek()==="[")return t.inArray++,n.next(),"bracket";if(!t.lhs&&n.match(/^\-?\d+(?:\.\d+)?/))return"number";n.eatSpace()||n.next()}return null},languageData:{commentTokens:{line:"#"}}};var zd="#e5c07b",Nh="#e06c75",_d="#56b6c2",qd="#ffffff",$n="#abb2bf",Qr="#7d8799",Kd="#61afef",$d="#98c379",Ih="#d19a66",Ud="#c678dd",jd="#21252b",Hh="#2c313a",Fh="#282c34",Xr="#353a42",Gd="#3E4451",Wh="#528bff";var Jd=D.theme({"&":{color:$n,backgroundColor:Fh},".cm-content":{caretColor:Wh},".cm-cursor, .cm-dropCursor":{borderLeftColor:Wh},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:Gd},".cm-panels":{backgroundColor:jd,color:$n},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:Fh,color:Qr,border:"none"},".cm-activeLineGutter":{backgroundColor:Hh},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Xr},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Xr,borderBottomColor:Xr},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:Hh,color:$n}}},{dark:!0}),Yd=Ze.define([{tag:y.keyword,color:Ud},{tag:[y.name,y.deleted,y.character,y.propertyName,y.macroName],color:Nh},{tag:[y.function(y.variableName),y.labelName],color:Kd},{tag:[y.color,y.constant(y.name),y.standard(y.name)],color:Ih},{tag:[y.definition(y.name),y.separator],color:$n},{tag:[y.typeName,y.className,y.number,y.changed,y.annotation,y.modifier,y.self,y.namespace],color:zd},{tag:[y.operator,y.operatorKeyword,y.url,y.escape,y.regexp,y.link,y.special(y.string)],color:_d},{tag:[y.meta,y.comment],color:Qr},{tag:y.strong,fontWeight:"bold"},{tag:y.emphasis,fontStyle:"italic"},{tag:y.strikethrough,textDecoration:"line-through"},{tag:y.link,color:Qr,textDecoration:"underline"},{tag:y.heading,fontWeight:"bold",color:Nh},{tag:[y.atom,y.bool,y.special(y.variableName)],color:Ih},{tag:[y.processingInstruction,y.string,y.inserted],color:$d},{tag:y.invalid,color:qd}]),Vh=[Jd,Hn(Yd)];var Xd=Li.define(Rh),Qd=Li.define(Ph);function zh(n){return n.endsWith(".toml")?Qd:Xd}function _h(n){return n?Vh:Hn(Oa,{fallback:!0})}function Zr(){return document.documentElement.getAttribute("data-theme")==="dark"}var Un=class{view;langCompartment=new pe;themeCompartment=new pe;constructor(t){let e=[ra(),sa(),oa(),ia(),Ja(),Ta(),ti.of(" "),Ra(),this.langCompartment.of(zh(t.fileName)),this.themeCompartment.of(_h(t.isDarkMode))];if(t.onRun){let i=t.onRun;e.push(An.of([{key:"Mod-Enter",preventDefault:!0,run:()=>(i(),!0)}]))}e.push(An.of([Dh,...Za,...Th])),this.view=new D({parent:t.parent,state:$.create({doc:t.content,extensions:e})})}getCode(){return this.view.state.doc.toString()}setCode(t){this.view.dispatch({changes:{from:0,to:this.view.state.doc.length,insert:t}})}setLanguage(t){this.view.dispatch({effects:this.langCompartment.reconfigure(zh(t))})}changeTheme(t){this.view.dispatch({effects:this.themeCompartment.reconfigure(_h(t))})}focus(){this.view.focus()}};import{BaseController as Zd,makeCopyIcon as tp}from"./controller.js";var qh="gnomod.toml",ep=`package main -`,ip=8e3,Kh=class extends Zd{connect(){let t=this.getTarget("initial-code");this.files=[],this.activeFile=0,this.editorEl=this.getTarget("editor"),this.outputEl=this.getTarget("output"),this.tabsEl=this.getTarget("tabs"),this.tabsWrapEl=this.getTarget("tabs-wrap"),this.prevBtnEl=this.getTarget("prev-button"),this.nextBtnEl=this.getTarget("next-button"),!(!this.editorEl||!this.outputEl||!this.tabsEl||!t)&&(this.editorEl.addEventListener("focusin",()=>this._scrollActiveTabIntoView()),this._parseInitialCode(t.value),this.editor=new Un({parent:this.editorEl,content:this.files[0].content,fileName:this.files[0].name,isDarkMode:Zr(),onRun:()=>this.runCode()}),this.on("theme:changed",()=>{this.editor.changeTheme(Zr())}),this._switchToDefaultFile(),this._setupTabsScroll(),this.renderTabs(),this.clearOutput())}_setupTabsScroll(){if(!this.tabsWrapEl||!this.prevBtnEl||!this.nextBtnEl)return;this.tabsEl.addEventListener("scroll",()=>this._updateNavButtons(),{passive:!0});let t=new ResizeObserver(()=>this._updateNavButtons());t.observe(this.tabsWrapEl),t.observe(this.tabsEl)}_updateNavButtons(){if(!this.tabsWrapEl||!this.prevBtnEl||!this.nextBtnEl)return;let t=this.tabsEl.scrollWidth>this.tabsWrapEl.clientWidth+1;if(this.prevBtnEl.hidden=!t,this.nextBtnEl.hidden=!t,!t)return;let{scrollLeft:e,scrollWidth:i,clientWidth:s}=this.tabsEl;this.prevBtnEl.disabled=e<=0,this.nextBtnEl.disabled=e+s>=i-1}_scrollByPage(t){let e=Math.max(this.tabsEl.clientWidth*.7,80);this.tabsEl.scrollBy({left:t*e,behavior:"smooth"})}_scrollActiveTabIntoView(){let t=this.tabsEl.querySelector(".b-playground-tab--active");t&&t.scrollIntoView({inline:"nearest",block:"nearest"})}scrollTabsPrev(){this._scrollByPage(-1)}scrollTabsNext(){this._scrollByPage(1)}_isValidFileName(t){return t.endsWith(".gno")||t===qh}_parseInitialCode(t){if(t.includes("// --- ")&&t.includes(" ---")){let e=t.split(/^\/\/ --- (.+?) ---$/m);for(let i=1;icopy#copy"),o.setAttribute("data-copy-text-value",t),o.appendChild(tp()),s.appendChild(o)}this.outputEl.appendChild(s),this.outputEl.scrollIntoView({behavior:"smooth",block:"nearest"})}_setErrorOutput(t){this._resetOutput(t,!1,!0)}_switchToFile(t){this.files[this.activeFile].content=this.editor.getCode();let e=this.files.findIndex(i=>i.name===t);return e>=0&&(this.activeFile=e,this.editor.setCode(this.files[e].content),this.editor.setLanguage(this.files[e].name),this.renderTabs()),e>=0}renderTabs(){for(;this.tabsEl.firstChild;)this.tabsEl.removeChild(this.tabsEl.firstChild);this.files.forEach((t,e)=>{let i=document.createElement("button");i.className=`b-playground-tab${e===this.activeFile?" b-playground-tab--active":""}`,i.textContent=t.name,i.addEventListener("click",()=>this._switchToFile(t.name)),this.tabsEl.appendChild(i)}),this._updateNavButtons(),this._scrollActiveTabIntoView()}switchTab(t){let e=t.params?.file;e&&this._switchToFile(e)}addFile(){let t=prompt("File name (e.g. main.gno or gnomod.toml):");if(t==null||this._switchToFile(t))return;if(!this._isValidFileName(t)){console.error(`PlaygroundController: invalid name, file not added: ${t}`);return}let e=ep;t===qh&&(e=`module = "${this.getValue("domain")||"gno.land"}/r/yourname/pkg" +`);i>-1&&(e=e.slice(0,i))}return t+e.length<=this.to?e:e.slice(0,this.to-t)}nextLine(){let t=this.parsedPos,e=this.lineAfter(t),i=t+e.length;for(let s=this.rangeIndex;;){let r=this.ranges[s].to;if(r>=i||(e=e.slice(0,r-(i-e.length)),s++,s==this.ranges.length))break;let o=this.ranges[s].from,l=this.lineAfter(o);e+=l,i=o+l.length}return{line:e,end:i}}skipGapsTo(t,e,i){for(;;){let s=this.ranges[this.rangeIndex].to,r=t+e;if(i>0?s>r:s>=r)break;let o=this.ranges[++this.rangeIndex].from;e+=o-s}return e}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){s=this.skipGapsTo(e,s,1),e+=s;let l=this.chunk.length;s=this.skipGapsTo(i,s,-1),i+=s,r+=this.chunk.length-l}let o=this.chunk.length-4;return this.lang.streamParser.mergeTokens&&r==4&&o>=0&&this.chunk[o]==t&&this.chunk[o+2]==e?this.chunk[o+2]=i:this.chunk.push(t,e,i,r),s}parseLine(t){let{line:e,end:i}=this.nextLine(),s=0,{streamParser:r}=this.lang,o=new Pn(e,t?t.state.tabSize:4,t?le(t.state):2);if(o.eol())r.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let l=Wa(r.token,o,this.state);if(l&&(s=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+o.start,this.parsedPos+o.pos,s)),o.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPost.start)return s}throw new Error("Stream parser failed to advance stream.")}var qr=Object.create(null),Ri=[ot.none],Ru=new En(Ri),Ta=[],Ea=Object.create(null),za=Object.create(null);for(let[n,t]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])za[n]=_a(qr,t);var Nn=class{constructor(t){this.extra=t,this.table=Object.assign(Object.create(null),za)}resolve(t){return t?this.table[t]||(this.table[t]=_a(this.extra,t)):0}},Pu=new Nn(qr);function Pr(n,t){Ta.indexOf(n)>-1||(Ta.push(n),console.warn(t))}function _a(n,t){let e=[];for(let l of t.split(" ")){let a=[];for(let h of l.split(".")){let f=n[h]||b[h];f?typeof f=="function"?a.length?a=a.map(f):Pr(h,`Modifier ${h} used at start of tag`):a.length?Pr(h,`Tag ${h} used as modifier`):a=Array.isArray(f)?f:[f]:Pr(h,`Unknown highlighting tag ${h}`)}for(let h of a)e.push(h)}if(!e.length)return 0;let i=t.replace(/ /g,"_"),s=i+" "+e.map(l=>l.id),r=Ea[s];if(r)return r.id;let o=Ea[s]=ot.define({id:Ri.length,name:i,props:[wa({[i]:e})]});return Ri.push(o),o.id}function Nu(n,t){let e=ot.define({id:Ri.length,name:"Document",props:[Xe.add(()=>n),Oa.add(()=>i=>t.getIndent(i))],top:!0});return Ri.push(e),e}var Wp={rtl:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:$.RTL}),ltr:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:$.LTR}),auto:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var Iu=n=>{let{state:t}=n,e=t.doc.lineAt(t.selection.main.from),i=Yr(n.state,e.from);return i.line?Hu(n):i.block?Vu(n):!1};function Jr(n,t){return({state:e,dispatch:i})=>{if(e.readOnly)return!1;let s=n(t,e);return s?(i(e.update(s)),!0):!1}}var Hu=Jr(_u,0);var Fu=Jr(Xa,0);var Vu=Jr((n,t)=>Xa(n,t,zu(t)),0);function Yr(n,t){let e=n.languageDataAt("commentTokens",t,1);return e.length?e[0]:{}}var Pi=50;function Wu(n,{open:t,close:e},i,s){let r=n.sliceDoc(i-Pi,i),o=n.sliceDoc(s,s+Pi),l=/\s*$/.exec(r)[0].length,a=/^\s*/.exec(o)[0].length,h=r.length-l;if(r.slice(h-t.length,h)==t&&o.slice(a,a+e.length)==e)return{open:{pos:i-l,margin:l&&1},close:{pos:s+a,margin:a&&1}};let f,c;s-i<=2*Pi?f=c=n.sliceDoc(i,s):(f=n.sliceDoc(i,i+Pi),c=n.sliceDoc(s-Pi,s));let u=/^\s*/.exec(f)[0].length,d=/\s*$/.exec(c)[0].length,p=c.length-d-e.length;return f.slice(u,u+t.length)==t&&c.slice(p,p+e.length)==e?{open:{pos:i+u+t.length,margin:/\s/.test(f.charAt(u+t.length))?1:0},close:{pos:s-d-e.length,margin:/\s/.test(c.charAt(p-1))?1:0}}:null}function zu(n){let t=[];for(let e of n.selection.ranges){let i=n.doc.lineAt(e.from),s=e.to<=i.to?i:n.doc.lineAt(e.to);s.from>i.from&&s.from==e.to&&(s=e.to==i.to+1?i:n.doc.lineAt(e.to-1));let r=t.length-1;r>=0&&t[r].to>i.from?t[r].to=s.to:t.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:s.to})}return t}function Xa(n,t,e=t.selection.ranges){let i=e.map(r=>Yr(t,r.from).block);if(!i.every(r=>r))return null;let s=e.map((r,o)=>Wu(t,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:t.changes(e.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;os&&(r==o||o>c.from)){s=c.from;let u=/^\s*/.exec(c.text)[0].length,d=u==c.length,p=c.text.slice(u,u+h.length)==h?u:-1;ur.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:l,token:a,indent:h,empty:f,single:c}of i)(c||!f)&&r.push({from:l.from+h,insert:a+" "});let o=t.changes(r);return{changes:o,selection:t.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,f=h+a.length;o.text[f-o.from]==" "&&f++,r.push({from:h,to:f})}return{changes:r}}return null}var Kr=mt.define(),qu=mt.define(),$u=M.define(),Qa=M.define({combine(n){return me(n,{minDepth:100,newGroupDelay:500,joinToEvent:(t,e)=>e},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(t,e)=>(i,s)=>t(i,s)||e(i,s)})}}),Za=Ct.define({create(){return Oe.empty},update(n,t){let e=t.state.facet(Qa),i=t.annotation(Kr);if(i){let a=Pt.fromTransaction(t,i.selection),h=i.side,f=h==0?n.undone:n.done;return a?f=Vn(f,f.length,e.minDepth,a):f=nh(f,t.startState.selection),new Oe(h==0?i.rest:f,h==0?f:i.rest)}let s=t.annotation(qu);if((s=="full"||s=="before")&&(n=n.isolate()),t.annotation(X.addToHistory)===!1)return t.changes.empty?n:n.addMapping(t.changes.desc);let r=Pt.fromTransaction(t),o=t.annotation(X.time),l=t.annotation(X.userEvent);return r?n=n.addChanges(r,o,l,e,t):t.selection&&(n=n.addSelection(t.startState.selection,o,l,e.newGroupDelay)),(s=="full"||s=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(t=>t.toJSON()),undone:n.undone.map(t=>t.toJSON())}},fromJSON(n){return new Oe(n.done.map(Pt.fromJSON),n.undone.map(Pt.fromJSON))}});function th(n={}){return[Za,Qa.of(n),E.domEventHandlers({beforeinput(t,e){let i=t.inputType=="historyUndo"?eh:t.inputType=="historyRedo"?Ur:null;return i?(t.preventDefault(),i(e)):!1}})]}function Wn(n,t){return function({state:e,dispatch:i}){if(!t&&e.readOnly)return!1;let s=e.field(Za,!1);if(!s)return!1;let r=s.pop(n,e,t);return r?(i(r),!0):!1}}var eh=Wn(0,!1),Ur=Wn(1,!1),Ku=Wn(0,!0),Uu=Wn(1,!0);var Pt=class n{constructor(t,e,i,s,r){this.changes=t,this.effects=e,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(t){return new n(this.changes,this.effects,this.mapped,this.startSelection,t)}toJSON(){var t,e,i;return{changes:(t=this.changes)===null||t===void 0?void 0:t.toJSON(),mapped:(e=this.mapped)===null||e===void 0?void 0:e.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(t){return new n(t.changes&&st.fromJSON(t.changes),[],t.mapped&&jt.fromJSON(t.mapped),t.startSelection&&w.fromJSON(t.startSelection),t.selectionsAfter.map(w.fromJSON))}static fromTransaction(t,e){let i=vt;for(let s of t.startState.facet($u)){let r=s(t);r.length&&(i=i.concat(r))}return!i.length&&t.changes.empty?null:new n(t.changes.invert(t.startState.doc),i,void 0,e||t.startState.selection,vt)}static selection(t){return new n(void 0,vt,void 0,void 0,t)}};function Vn(n,t,e,i){let s=t+1>e+20?t-e-1:0,r=n.slice(s,t);return r.push(i),r}function ju(n,t){let e=[],i=!1;return n.iterChangedRanges((s,r)=>e.push(s,r)),t.iterChangedRanges((s,r,o,l)=>{for(let a=0;a=h&&o<=f&&(i=!0)}}),i}function Gu(n,t){return n.ranges.length==t.ranges.length&&n.ranges.filter((e,i)=>e.empty!=t.ranges[i].empty).length===0}function ih(n,t){return n.length?t.length?n.concat(t):n:t}var vt=[],Ju=200;function nh(n,t){if(n.length){let e=n[n.length-1],i=e.selectionsAfter.slice(Math.max(0,e.selectionsAfter.length-Ju));return i.length&&i[i.length-1].eq(t)?n:(i.push(t),Vn(n,n.length-1,1e9,e.setSelAfter(i)))}else return[Pt.selection([t])]}function Yu(n){let t=n[n.length-1],e=n.slice();return e[n.length-1]=t.setSelAfter(t.selectionsAfter.slice(0,t.selectionsAfter.length-1)),e}function $r(n,t){if(!n.length)return n;let e=n.length,i=vt;for(;e;){let s=Xu(n[e-1],t,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,e);return r[e-1]=s,r}else t=s.mapped,e--,i=s.selectionsAfter}return i.length?[Pt.selection(i)]:vt}function Xu(n,t,e){let i=ih(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(t)):vt,e);if(!n.changes)return Pt.selection(i);let s=n.changes.map(t),r=t.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new Pt(s,U.mapEffects(n.effects,t),o,n.startSelection.map(r),i)}var Qu=/^(input\.type|delete)($|\.)/,Oe=class n{constructor(t,e,i=0,s=void 0){this.done=t,this.undone=e,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new n(this.done,this.undone):this}addChanges(t,e,i,s,r){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&t.changes&&(!i||Qu.test(i))&&(!l.selectionsAfter.length&&e-this.prevTime0&&e-this.prevTimee.empty?n.moveByChar(e,t):zn(e,t))}function it(n){return n.textDirectionAt(n.state.selection.main.head)==$.LTR}var oh=n=>rh(n,!it(n)),lh=n=>rh(n,it(n));function ah(n,t){return It(n,e=>e.empty?n.moveByGroup(e,t):zn(e,t))}var Zu=n=>ah(n,!it(n)),td=n=>ah(n,it(n));var Jp=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function ed(n,t,e){if(t.type.prop(e))return!0;let i=t.to-t.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(t.from,t.to)))||t.firstChild}function _n(n,t,e){let i=Rt(n).resolveInner(t.head),s=e?O.closedBy:O.openedBy;for(let a=t.head;;){let h=e?i.childAfter(a):i.childBefore(a);if(!h)break;ed(n,h,s)?i=h:a=e?h.to:h.from}let r=i.type.prop(s),o,l;return r&&(o=e?Lt(n,i.from,1):Lt(n,i.to,-1))&&o.matched?l=e?o.end.to:o.end.from:l=e?i.to:i.from,w.cursor(l,e?-1:1)}var id=n=>It(n,t=>_n(n.state,t,!it(n))),nd=n=>It(n,t=>_n(n.state,t,it(n)));function hh(n,t){return It(n,e=>{if(!e.empty)return zn(e,t);let i=n.moveVertically(e,t);return i.head!=e.head?i:n.moveToLineBoundary(e,t)})}var fh=n=>hh(n,!1),ch=n=>hh(n,!0);function uh(n){let t=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,t,e.height):zn(o,t));if(s.eq(i.selection))return!1;let r;if(e.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+e.marginTop,h=l.bottom-e.marginBottom;o&&o.top>a&&o.bottomdh(n,!1),jr=n=>dh(n,!0);function ae(n,t,e){let i=n.lineBlockAt(t.head),s=n.moveToLineBoundary(t,e);if(s.head==t.head&&s.head!=(e?i.to:i.from)&&(s=n.moveToLineBoundary(t,e,!1)),!e&&s.head==i.from&&i.length){let r=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&t.head!=i.from+r&&(s=w.cursor(i.from+r))}return s}var sd=n=>It(n,t=>ae(n,t,!0)),rd=n=>It(n,t=>ae(n,t,!1)),od=n=>It(n,t=>ae(n,t,!it(n))),ld=n=>It(n,t=>ae(n,t,it(n))),ad=n=>It(n,t=>w.cursor(n.lineBlockAt(t.head).from,1)),hd=n=>It(n,t=>w.cursor(n.lineBlockAt(t.head).to,-1));function fd(n,t,e){let i=!1,s=ii(n.selection,r=>{let o=Lt(n,r.head,-1)||Lt(n,r.head,1)||r.head>0&&Lt(n,r.head-1,1)||r.headfd(n,t,!1);function kt(n,t){let e=ii(n.state.selection,i=>{let s=t(i);return w.range(i.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return e.eq(n.state.selection)?!1:(n.dispatch(Nt(n.state,e)),!0)}function ph(n,t){return kt(n,e=>n.moveByChar(e,t))}var gh=n=>ph(n,!it(n)),mh=n=>ph(n,it(n));function bh(n,t){return kt(n,e=>n.moveByGroup(e,t))}var ud=n=>bh(n,!it(n)),dd=n=>bh(n,it(n));var pd=n=>kt(n,t=>_n(n.state,t,!it(n))),gd=n=>kt(n,t=>_n(n.state,t,it(n)));function yh(n,t){return kt(n,e=>n.moveVertically(e,t))}var wh=n=>yh(n,!1),xh=n=>yh(n,!0);function vh(n,t){return kt(n,e=>n.moveVertically(e,t,uh(n).height))}var $a=n=>vh(n,!1),Ka=n=>vh(n,!0),md=n=>kt(n,t=>ae(n,t,!0)),bd=n=>kt(n,t=>ae(n,t,!1)),yd=n=>kt(n,t=>ae(n,t,!it(n))),wd=n=>kt(n,t=>ae(n,t,it(n))),xd=n=>kt(n,t=>w.cursor(n.lineBlockAt(t.head).from)),vd=n=>kt(n,t=>w.cursor(n.lineBlockAt(t.head).to)),Ua=({state:n,dispatch:t})=>(t(Nt(n,{anchor:0})),!0),ja=({state:n,dispatch:t})=>(t(Nt(n,{anchor:n.doc.length})),!0),Ga=({state:n,dispatch:t})=>(t(Nt(n,{anchor:n.selection.main.anchor,head:0})),!0),Ja=({state:n,dispatch:t})=>(t(Nt(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),kd=({state:n,dispatch:t})=>(t(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),Sd=({state:n,dispatch:t})=>{let e=qn(n).map(({from:i,to:s})=>w.range(i,Math.min(s+1,n.doc.length)));return t(n.update({selection:w.create(e),userEvent:"select"})),!0},Cd=({state:n,dispatch:t})=>{let e=ii(n.selection,i=>{let s=Rt(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return w.range(l.to,l.from)}return i});return e.eq(n.selection)?!1:(t(Nt(n,e)),!0)};function kh(n,t){let{state:e}=n,i=e.selection,s=e.selection.ranges.slice();for(let r of e.selection.ranges){let o=e.doc.lineAt(r.head);if(t?o.to0)for(let l=r;;){let a=n.moveVertically(l,t);if(a.heado.to){s.some(h=>h.head==a.head)||s.push(a);break}else{if(a.head==l.head)break;l=a}}}return s.length==i.ranges.length?!1:(n.dispatch(Nt(e,w.create(s,s.length-1))),!0)}var Ad=n=>kh(n,!1),Md=n=>kh(n,!0),Td=({state:n,dispatch:t})=>{let e=n.selection,i=null;return e.ranges.length>1?i=w.create([e.main]):e.main.empty||(i=w.create([w.cursor(e.main.head)])),i?(t(Nt(n,i)),!0):!1};function Ni(n,t){if(n.state.readOnly)return!1;let e="delete.selection",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:l}=r;if(o==l){let a=t(r);ao&&(e="delete.forward",a=Fn(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=Fn(n,o,!1),l=Fn(n,l,!0);return o==l?{range:r}:{changes:{from:o,to:l},range:w.cursor(o,os(n)))i.between(t,t,(s,r)=>{st&&(t=e?r:s)});return t}var Sh=(n,t,e)=>Ni(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),l,a;if(e&&!t&&s>o.from&&sSh(n,!1,!0);var Ch=n=>Sh(n,!0,!1),Ah=(n,t)=>Ni(n,e=>{let i=e.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let l=null;;){if(i==(t?r.to:r.from)){i==e.head&&r.number!=(t?s.doc.lines:1)&&(i+=t?1:-1);break}let a=Q(r.text,i-r.from,t)+r.from,h=r.text.slice(Math.min(i,a)-r.from,Math.max(i,a)-r.from),f=o(h);if(l!=null&&f!=l)break;(h!=" "||i!=e.head)&&(l=f),i=a}return i}),Mh=n=>Ah(n,!1),Ed=n=>Ah(n,!0);var Dd=n=>Ni(n,t=>{let e=n.lineBlockAt(t.head).to;return t.headNi(n,t=>{let e=n.moveToLineBoundary(t,!1).head;return t.head>e?e:Math.max(0,t.head-1)}),Bd=n=>Ni(n,t=>{let e=n.moveToLineBoundary(t,!0).head;return t.head{if(n.readOnly)return!1;let e=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:R.of(["",""])},range:w.cursor(i.from)}));return t(n.update(e,{scrollIntoView:!0,userEvent:"input"})),!0},Rd=({state:n,dispatch:t})=>{if(n.readOnly)return!1;let e=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:Q(r.text,s-r.from,!1)+r.from,l=s==r.to?s+1:Q(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:l,insert:n.doc.slice(s,l).append(n.doc.slice(o,s))},range:w.cursor(l)}});return e.changes.empty?!1:(t(n.update(e,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function qn(n){let t=[],e=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),e>=s.number){let o=t[t.length-1];o.to=r.to,o.ranges.push(i)}else t.push({from:s.from,to:r.to,ranges:[i]});e=r.number+1}return t}function Th(n,t,e){if(n.readOnly)return!1;let i=[],s=[];for(let r of qn(n)){if(e?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(e?r.to+1:r.from-1),l=o.length+1;if(e){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let a of r.ranges)s.push(w.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let a of r.ranges)s.push(w.range(a.anchor-l,a.head-l))}}return i.length?(t(n.update({changes:i,scrollIntoView:!0,selection:w.create(s,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}var Pd=({state:n,dispatch:t})=>Th(n,t,!1),Nd=({state:n,dispatch:t})=>Th(n,t,!0);function Eh(n,t,e){if(n.readOnly)return!1;let i=[];for(let r of qn(n))e?i.push({from:r.from,insert:n.doc.slice(r.from,r.to)+n.lineBreak}):i.push({from:r.to,insert:n.lineBreak+n.doc.slice(r.from,r.to)});let s=n.changes(i);return t(n.update({changes:s,selection:n.selection.map(s,e?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var Id=({state:n,dispatch:t})=>Eh(n,t,!1),Hd=({state:n,dispatch:t})=>Eh(n,t,!0),Fd=n=>{if(n.state.readOnly)return!1;let{state:t}=n,e=t.changes(qn(t).map(({from:s,to:r})=>(s>0?s--:r{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),l=n.coordsAtPos(s.head,s.assoc||1);l&&(r=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(e);return n.dispatch({changes:e,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function Vd(n,t){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(t-1,t+1)))return{from:t,to:t};let e=Rt(n).resolveInner(t),i=e.childBefore(t),s=e.childAfter(t),r;return i&&s&&i.to<=t&&s.from>=t&&(r=i.type.prop(O.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}var Ya=Dh(!1),Wd=Dh(!0);function Dh(n){return({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=t.changeByRange(s=>{let{from:r,to:o}=s,l=t.doc.lineAt(r),a=!n&&r==o&&Vd(t,r);n&&(r=o=(o<=l.to?l:t.doc.lineAt(o)).to);let h=new De(t,{simulateBreak:r,simulateDoubleBreak:!!a}),f=In(h,r);for(f==null&&(f=be(/^\s*/.exec(t.doc.lineAt(r).text)[0],t.tabSize));ol.from&&r{let s=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>e&&(i.empty||i.to>l.from)&&(t(l,s,i),e=l.number),o=l.to+1}let r=n.changes(s);return{changes:s,range:w.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}var zd=({state:n,dispatch:t})=>{if(n.readOnly)return!1;let e=Object.create(null),i=new De(n,{overrideIndentation:r=>{let o=e[r];return o??-1}}),s=Xr(n,(r,o,l)=>{let a=In(i,r.from);if(a==null)return;/\S/.test(r.text)||(a=0);let h=/^\s*/.exec(r.text)[0],f=ei(n,a);(h!=f||l.fromn.readOnly?!1:(t(n.update(Xr(n,(e,i)=>{i.push({from:e.from,insert:n.facet(ti)})}),{userEvent:"input.indent"})),!0),Bh=({state:n,dispatch:t})=>n.readOnly?!1:(t(n.update(Xr(n,(e,i)=>{let s=/^\s*/.exec(e.text)[0];if(!s)return;let r=be(s,n.tabSize),o=0,l=ei(n,Math.max(0,r-le(n)));for(;o(n.setTabFocusMode(),!0);var qd=[{key:"Ctrl-b",run:oh,shift:gh,preventDefault:!0},{key:"Ctrl-f",run:lh,shift:mh},{key:"Ctrl-p",run:fh,shift:wh},{key:"Ctrl-n",run:ch,shift:xh},{key:"Ctrl-a",run:ad,shift:xd},{key:"Ctrl-e",run:hd,shift:vd},{key:"Ctrl-d",run:Ch},{key:"Ctrl-h",run:Gr},{key:"Ctrl-k",run:Dd},{key:"Ctrl-Alt-h",run:Mh},{key:"Ctrl-o",run:Ld},{key:"Ctrl-t",run:Rd},{key:"Ctrl-v",run:jr}],$d=[{key:"ArrowLeft",run:oh,shift:gh,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:Zu,shift:ud,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:od,shift:yd,preventDefault:!0},{key:"ArrowRight",run:lh,shift:mh,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:td,shift:dd,preventDefault:!0},{mac:"Cmd-ArrowRight",run:ld,shift:wd,preventDefault:!0},{key:"ArrowUp",run:fh,shift:wh,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Ua,shift:Ga},{mac:"Ctrl-ArrowUp",run:qa,shift:$a},{key:"ArrowDown",run:ch,shift:xh,preventDefault:!0},{mac:"Cmd-ArrowDown",run:ja,shift:Ja},{mac:"Ctrl-ArrowDown",run:jr,shift:Ka},{key:"PageUp",run:qa,shift:$a},{key:"PageDown",run:jr,shift:Ka},{key:"Home",run:rd,shift:bd,preventDefault:!0},{key:"Mod-Home",run:Ua,shift:Ga},{key:"End",run:sd,shift:md,preventDefault:!0},{key:"Mod-End",run:ja,shift:Ja},{key:"Enter",run:Ya,shift:Ya},{key:"Mod-a",run:kd},{key:"Backspace",run:Gr,shift:Gr,preventDefault:!0},{key:"Delete",run:Ch,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Mh,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:Ed,preventDefault:!0},{mac:"Mod-Backspace",run:Od,preventDefault:!0},{mac:"Mod-Delete",run:Bd,preventDefault:!0}].concat(qd.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),Lh=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:id,shift:pd},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:nd,shift:gd},{key:"Alt-ArrowUp",run:Pd},{key:"Shift-Alt-ArrowUp",run:Id},{key:"Alt-ArrowDown",run:Nd},{key:"Shift-Alt-ArrowDown",run:Hd},{key:"Mod-Alt-ArrowUp",run:Ad},{key:"Mod-Alt-ArrowDown",run:Md},{key:"Escape",run:Td},{key:"Mod-Enter",run:Wd},{key:"Alt-l",mac:"Ctrl-l",run:Sd},{key:"Mod-i",run:Cd,preventDefault:!0},{key:"Mod-[",run:Bh},{key:"Mod-]",run:Oh},{key:"Mod-Alt-\\",run:zd},{key:"Shift-Mod-k",run:Fd},{key:"Shift-Mod-\\",run:cd},{key:"Mod-/",run:Iu},{key:"Alt-A",run:Fu},{key:"Ctrl-m",mac:"Shift-Alt-m",run:_d}].concat($d),Rh={key:"Tab",run:Oh,shift:Bh};var Kd={break:!0,case:!0,chan:!0,const:!0,continue:!0,default:!0,defer:!0,else:!0,fallthrough:!0,for:!0,func:!0,go:!0,goto:!0,if:!0,import:!0,interface:!0,map:!0,package:!0,range:!0,return:!0,select:!0,struct:!0,switch:!0,type:!0,var:!0,bool:!0,byte:!0,complex64:!0,complex128:!0,float32:!0,float64:!0,int8:!0,int16:!0,int32:!0,int64:!0,string:!0,uint8:!0,uint16:!0,uint32:!0,uint64:!0,int:!0,uint:!0,uintptr:!0,error:!0,rune:!0,any:!0,comparable:!0},Ud={true:!0,false:!0,iota:!0,nil:!0,append:!0,cap:!0,close:!0,complex:!0,copy:!0,delete:!0,imag:!0,len:!0,make:!0,new:!0,panic:!0,print:!0,println:!0,real:!0,recover:!0},Ph=/[+\-*&^%:=<>!|\/]/,Qt;function $n(n,t){var e=n.next();if(e=='"'||e=="'"||e=="`")return t.tokenize=jd(e),t.tokenize(n,t);if(/[\d\.]/.test(e))return e=="."?n.match(/^[0-9]+([eE][\-+]?[0-9]+)?/):e=="0"?n.match(/^[xX][0-9a-fA-F]+/)||n.match(/^0[0-7]+/):n.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/),"number";if(/[\[\]{}\(\),;\:\.]/.test(e))return Qt=e,null;if(e=="/"){if(n.eat("*"))return t.tokenize=Nh,Nh(n,t);if(n.eat("/"))return n.skipToEnd(),"comment"}if(Ph.test(e))return n.eatWhile(Ph),"operator";n.eatWhile(/[\w\$_\xa1-\uffff]/);var i=n.current();return Kd.propertyIsEnumerable(i)?((i=="case"||i=="default")&&(Qt="case"),"keyword"):Ud.propertyIsEnumerable(i)?"atom":"variable"}function jd(n){return function(t,e){for(var i=!1,s,r=!1;(s=t.next())!=null;){if(s==n&&!i){r=!0;break}i=!i&&n!="`"&&s=="\\"}return(r||!(i||n=="`"))&&(e.tokenize=$n),"string"}}function Nh(n,t){for(var e=!1,i;i=n.next();){if(i=="/"&&e){t.tokenize=$n;break}e=i=="*"}return"comment"}function Hh(n,t,e,i,s){this.indented=n,this.column=t,this.type=e,this.align=i,this.prev=s}function Qr(n,t,e){return n.context=new Hh(n.indented,t,e,null,n.context)}function Ih(n){if(n.context.prev){var t=n.context.type;return(t==")"||t=="]"||t=="}")&&(n.indented=n.context.indented),n.context=n.context.prev}}var Fh={name:"go",startState:function(n){return{tokenize:null,context:new Hh(-n,0,"top",!1),indented:0,startOfLine:!0}},token:function(n,t){var e=t.context;if(n.sol()&&(e.align==null&&(e.align=!1),t.indented=n.indentation(),t.startOfLine=!0,e.type=="case"&&(e.type="}")),n.eatSpace())return null;Qt=null;var i=(t.tokenize||$n)(n,t);return i=="comment"||(e.align==null&&(e.align=!0),Qt=="{"?Qr(t,n.column(),"}"):Qt=="["?Qr(t,n.column(),"]"):Qt=="("?Qr(t,n.column(),")"):Qt=="case"?e.type="case":(Qt=="}"&&e.type=="}"||Qt==e.type)&&Ih(t),t.startOfLine=!1),i},indent:function(n,t,e){if(n.tokenize!=$n&&n.tokenize!=null)return null;var i=n.context,s=t&&t.charAt(0);if(i.type=="case"&&/^(?:case|default)\b/.test(t))return i.indented;var r=s==i.type;return i.align?i.column+(r?0:1):i.indented+(r?0:e.unit)},languageData:{indentOnInput:/^\s([{}]|case |default\s*:)$/,commentTokens:{line:"//",block:{open:"/*",close:"*/"}}}};var Vh={name:"toml",startState:function(){return{inString:!1,stringType:"",lhs:!0,inArray:0}},token:function(n,t){let e;if(!t.inString&&(e=n.match(/^('''|"""|'|")/))&&(t.stringType=e[0],t.inString=!0),n.sol()&&!t.inString&&t.inArray===0&&(t.lhs=!0),t.inString){for(;t.inString;)if(n.match(t.stringType))t.inString=!1;else if(n.peek()==="\\")n.next(),n.next();else{if(n.eol())break;n.match(/^.[^\\\"\']*/)}return t.lhs?"property":"string"}else{if(t.inArray&&n.peek()==="]")return n.next(),t.inArray--,"bracket";if(t.lhs&&n.peek()==="["&&n.skipTo("]"))return n.next(),n.peek()==="]"&&n.next(),"atom";if(n.peek()==="#")return n.skipToEnd(),"comment";if(n.eatSpace())return null;if(t.lhs&&n.eatWhile(function(i){return i!="="&&i!=" "}))return"property";if(t.lhs&&n.peek()==="=")return n.next(),t.lhs=!1,null;if(!t.lhs&&n.match(/^\d\d\d\d[\d\-\:\.T]*Z/))return"atom";if(!t.lhs&&(n.match("true")||n.match("false")))return"atom";if(!t.lhs&&n.peek()==="[")return t.inArray++,n.next(),"bracket";if(!t.lhs&&n.match(/^\-?\d+(?:\.\d+)?/))return"number";n.eatSpace()||n.next()}return null},languageData:{commentTokens:{line:"#"}}};var Gd="#e5c07b",Wh="#e06c75",Jd="#56b6c2",Yd="#ffffff",Kn="#abb2bf",to="#7d8799",Xd="#61afef",Qd="#98c379",zh="#d19a66",Zd="#c678dd",tp="#21252b",_h="#2c313a",qh="#282c34",Zr="#353a42",ep="#3E4451",$h="#528bff";var ip=E.theme({"&":{color:Kn,backgroundColor:qh},".cm-content":{caretColor:$h},".cm-cursor, .cm-dropCursor":{borderLeftColor:$h},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:ep},".cm-panels":{backgroundColor:tp,color:Kn},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:qh,color:to,border:"none"},".cm-activeLineGutter":{backgroundColor:_h},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Zr},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Zr,borderBottomColor:Zr},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:_h,color:Kn}}},{dark:!0}),np=Ze.define([{tag:b.keyword,color:Zd},{tag:[b.name,b.deleted,b.character,b.propertyName,b.macroName],color:Wh},{tag:[b.function(b.variableName),b.labelName],color:Xd},{tag:[b.color,b.constant(b.name),b.standard(b.name)],color:zh},{tag:[b.definition(b.name),b.separator],color:Kn},{tag:[b.typeName,b.className,b.number,b.changed,b.annotation,b.modifier,b.self,b.namespace],color:Gd},{tag:[b.operator,b.operatorKeyword,b.url,b.escape,b.regexp,b.link,b.special(b.string)],color:Jd},{tag:[b.meta,b.comment],color:to},{tag:b.strong,fontWeight:"bold"},{tag:b.emphasis,fontStyle:"italic"},{tag:b.strikethrough,textDecoration:"line-through"},{tag:b.link,color:to,textDecoration:"underline"},{tag:b.heading,fontWeight:"bold",color:Wh},{tag:[b.atom,b.bool,b.special(b.variableName)],color:zh},{tag:[b.processingInstruction,b.string,b.inserted],color:Qd},{tag:b.invalid,color:Yd}]),Kh=[ip,Hn(np)];var sp=Li.define(Fh),rp=Li.define(Vh);function Uh(n){return n.endsWith(".toml")?rp:sp}function jh(n){return n?Kh:Hn(Pa,{fallback:!0})}function eo(){return document.documentElement.getAttribute("data-theme")==="dark"}var Un=class{view;langCompartment=new pe;themeCompartment=new pe;constructor(t){let e=[fa(),ha(),ca(),la(),th(),La(),ti.of(" "),Fa(),this.langCompartment.of(Uh(t.fileName)),this.themeCompartment.of(jh(t.isDarkMode))];if(t.onRun){let i=t.onRun;e.push(An.of([{key:"Mod-Enter",preventDefault:!0,run:()=>(i(),!0)}]))}e.push(An.of([Rh,...sh,...Lh])),this.view=new E({parent:t.parent,state:K.create({doc:t.content,extensions:e})})}getCode(){return this.view.state.doc.toString()}setCode(t){this.view.dispatch({changes:{from:0,to:this.view.state.doc.length,insert:t}})}setLanguage(t){this.view.dispatch({effects:this.langCompartment.reconfigure(Uh(t))})}changeTheme(t){this.view.dispatch({effects:this.themeCompartment.reconfigure(jh(t))})}focus(){this.view.focus()}};function Gh(n){return n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function io(n){return n=n.replace(/-([a-z])/g,(t,e)=>e.toUpperCase()),n.charAt(0).toLowerCase()+n.slice(1)}function jn(n,t){return n.matches(t)?n:n.querySelector(t)}function no(n,t){let e=[];return n.matches(t)&&e.push(n),e.push(...Array.from(n.querySelectorAll(t))),e}function Jh(n){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.classList.add("c-icon");let e=document.createElementNS("http://www.w3.org/2000/svg","use");return e.setAttribute("href",`#ico-${n}`),t.appendChild(e),t}function so(){let n=Jh("copy");n.querySelector("use")?.setAttribute("data-copy-target","icon");let t=document.createElementNS("http://www.w3.org/2000/svg","use");return t.setAttribute("href","#ico-check"),t.setAttribute("data-copy-target","icon"),t.classList.add("u-hidden","u-color-valid"),n.appendChild(t),n}var Gn=class{element;initialized=!1;DOM={};controllerName;controllerKebabName;constructor(t){this.element=t,this.controllerName=io(this.getControllerName()),this.controllerKebabName=Gh(this.controllerName),this.init()}init(){this.initialized||(this.connect(),this.setupActions(),this.initialized=!0)}initializeDOM(t){return this.DOM={el:this.element,...t},t}getDOMElement(t){return Array.isArray(this.DOM[t])?this.DOM[t][0]:this.DOM[t]}getDOMArray(t){let e=this.DOM[t];return e?Array.isArray(e)?e:[e]:[]}getTarget(t,e){let i=e||this.element,s=`[data-${this.controllerKebabName}-target="${t}"]`;return jn(i,s)}getTargets(t,e){let i=e||this.element;return no(i,`[data-${this.controllerKebabName}-target="${t}"]`)}getGlobalTarget(t){return document.querySelector(`[data-${this.controllerKebabName}-target="${t}"]`)}setupActions(){no(this.element,"[data-action]").forEach(e=>{let i=e.getAttribute("data-action");if(i){let[s,r]=i.split("->"),[o,l]=r.split("#");if(o===this.controllerKebabName){let a=this[l];typeof a=="function"&&e.addEventListener(s,h=>{let f=this.extractActionParams(e);h.params=f,a.call(this,h)})}}})}extractActionParams(t){let e={};for(let[i,s]of Object.entries(t.dataset))if(i.startsWith(this.controllerName)&&i.endsWith("Param")){let r=io(i.slice(this.controllerName.length,-5));e[r]=this.parseParamValue(s)}return e}parseParamValue(t){if(t==null||t.trim()==="")return"";let e=t.trim();if(/^(true|false)$/i.test(e))return e.toLowerCase()==="true";if(/^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(e)){let i=Number(e);if(!Number.isNaN(i)&&Number.isFinite(i))return i}if(/^(null|undefined)$/i.test(e))return e.toLowerCase()==="null"?null:void 0;if(/^[{[]/.test(e)||/^".*"$/.test(e))try{return JSON.parse(e)}catch{}return t}getValue(t,e){let i=`data-${this.controllerKebabName}-${t}-value`,s=e||this.element,r=jn(s,`[${i}]`);return r&&r.getAttribute(i)||""}setValue(t,e,i){let s=`data-${this.controllerKebabName}-${t}-value`;(i||this.element).setAttribute(s,e)}hasValue(t,e){let i=`data-${this.controllerKebabName}-${t}-value`,s=e||this.element;return jn(s,`[${i}]`)!==null}on(t,e){document.addEventListener(t,e)}dispatch(t,e={}){let i=new CustomEvent(t,{detail:e,bubbles:!0});document.dispatchEvent(i)}getControllerName(){let t=this.element.getAttribute("data-controller");return t||this.constructor.name.replace(/^_/,"").replace(/Controller$/,"")}};var Yh="gnomod.toml",op=`package main +`,lp=8e3,Xh=class extends Gn{connect(){let t=this.getTarget("initial-code");this.files=[],this.activeFile=0,this.editorEl=this.getTarget("editor"),this.outputEl=this.getTarget("output"),this.tabsEl=this.getTarget("tabs"),this.tabsWrapEl=this.getTarget("tabs-wrap"),this.prevBtnEl=this.getTarget("prev-button"),this.nextBtnEl=this.getTarget("next-button"),!(!this.editorEl||!this.outputEl||!this.tabsEl||!t)&&(this.editorEl.addEventListener("focusin",()=>this._scrollActiveTabIntoView()),this._parseInitialCode(t.value),this.editor=new Un({parent:this.editorEl,content:this.files[0].content,fileName:this.files[0].name,isDarkMode:eo(),onRun:()=>this.runCode()}),this.on("theme:changed",()=>{this.editor.changeTheme(eo())}),this._switchToDefaultFile(),this._setupTabsScroll(),this.renderTabs(),this.clearOutput())}_setupTabsScroll(){if(!this.tabsWrapEl||!this.prevBtnEl||!this.nextBtnEl)return;this.tabsEl.addEventListener("scroll",()=>this._updateNavButtons(),{passive:!0});let t=new ResizeObserver(()=>this._updateNavButtons());t.observe(this.tabsWrapEl),t.observe(this.tabsEl)}_updateNavButtons(){if(!this.tabsWrapEl||!this.prevBtnEl||!this.nextBtnEl)return;let t=this.tabsEl.scrollWidth>this.tabsWrapEl.clientWidth+1;if(this.prevBtnEl.hidden=!t,this.nextBtnEl.hidden=!t,!t)return;let{scrollLeft:e,scrollWidth:i,clientWidth:s}=this.tabsEl;this.prevBtnEl.disabled=e<=0,this.nextBtnEl.disabled=e+s>=i-1}_scrollByPage(t){let e=Math.max(this.tabsEl.clientWidth*.7,80);this.tabsEl.scrollBy({left:t*e,behavior:"smooth"})}_scrollActiveTabIntoView(){let t=this.tabsEl.querySelector(".b-playground-tab--active");t&&t.scrollIntoView({inline:"nearest",block:"nearest"})}scrollTabsPrev(){this._scrollByPage(-1)}scrollTabsNext(){this._scrollByPage(1)}_isValidFileName(t){return t.endsWith(".gno")||t===Yh}_parseInitialCode(t){if(t.includes("// --- ")&&t.includes(" ---")){let e=t.split(/^\/\/ --- (.+?) ---$/m);for(let i=1;icopy#copy"),o.setAttribute("data-copy-text-value",t),o.appendChild(so()),s.appendChild(o)}this.outputEl.appendChild(s),this.outputEl.scrollIntoView({behavior:"smooth",block:"nearest"})}_setErrorOutput(t){this._resetOutput(t,!1,!0)}_switchToFile(t){this.files[this.activeFile].content=this.editor.getCode();let e=this.files.findIndex(i=>i.name===t);return e>=0&&(this.activeFile=e,this.editor.setCode(this.files[e].content),this.editor.setLanguage(this.files[e].name),this.renderTabs()),e>=0}renderTabs(){for(;this.tabsEl.firstChild;)this.tabsEl.removeChild(this.tabsEl.firstChild);this.files.forEach((t,e)=>{let i=document.createElement("button");i.className=`b-playground-tab${e===this.activeFile?" b-playground-tab--active":""}`,i.textContent=t.name,i.addEventListener("click",()=>this._switchToFile(t.name)),this.tabsEl.appendChild(i)}),this._updateNavButtons(),this._scrollActiveTabIntoView()}switchTab(t){let e=t.params?.file;e&&this._switchToFile(e)}addFile(){let t=prompt("File name (e.g. main.gno or gnomod.toml):");if(t==null||this._switchToFile(t))return;if(!this._isValidFileName(t)){console.error(`PlaygroundController: invalid name, file not added: ${t}`);return}let e=op;t===Yh&&(e=`module = "${this.getValue("domain")||"gno.land"}/r/yourname/pkg" gno = "0.9"`),this.files[this.activeFile].content=this.editor.getCode(),this.files.push({name:t,content:e}),this.activeFile=this.files.length-1,this.editor.setCode(this.files[this.activeFile].content),this.editor.setLanguage(this.files[this.activeFile].name),this.renderTabs()}async runCode(){this.files[this.activeFile].content=this.editor.getCode(),this._resetOutput("Running...");let t=this.editor.getCode(),e=t.match(/^package\s+(\w+)/m),i=e?e[1]:"main",s=this.getValue("domain")||"gno.land";if(t.includes("func Render("))try{let o=await(await fetch("/_/api/eval",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pkg_path:`${s}/r/playground_preview`,expression:'Render("")'})})).json();o.error?this._setErrorOutput(`Error: ${o.error}`):this._resetOutput(o.result)}catch{this._resetOutput(`Note: Server-side execution not available for scratch pad code. Package: ${i} @@ -29,7 +29,7 @@ To test locally:`),this._setOutput(" gno test .",!0)}formatCode(){this._resetOut To format locally:`),this._setOutput(` gno fmt -w ${this.files[this.activeFile].name}`,!0)}async shareCode(){this.files[this.activeFile].content=this.editor.getCode();let t=this.files.length===1?this.files[0].content:this.files.map(a=>`// --- ${a.name} --- ${a.content}`).join(` -`),e=new TextEncoder().encode(t),i=new CompressionStream("deflate-raw"),s=i.writable.getWriter();s.write(e),s.close();let r=await new Response(i.readable).arrayBuffer(),o=Array.from(new Uint8Array(r),a=>String.fromCharCode(a)).join(""),l=`${window.location.origin}/_/play?code=${encodeURIComponent(btoa(o))}&z`;if(l.length>ip){this._setErrorOutput(`Error: code is too large to share via URL. +`),e=new TextEncoder().encode(t),i=new CompressionStream("deflate-raw"),s=i.writable.getWriter();s.write(e),s.close();let r=await new Response(i.readable).arrayBuffer(),o=Array.from(new Uint8Array(r),a=>String.fromCharCode(a)).join(""),l=`${window.location.origin}/_/play?code=${encodeURIComponent(btoa(o))}&z`;if(l.length>lp){this._setErrorOutput(`Error: code is too large to share via URL. Try reducing the code or splitting into a deployed package.`);return}navigator.clipboard.writeText(l).then(()=>this._resetOutput("Share URL copied to clipboard!")).catch(()=>this._resetOutput(`Share URL: -${l}`))}downloadFiles(){this.files[this.activeFile].content=this.editor.getCode(),this.files.length===1?this._triggerDownload(new Blob([this.files[0].content],{type:"text/plain"}),this.files[0].name):this._triggerDownload(new Blob([np(this.files)],{type:"application/x-tar"}),"playground-gno-source-code.tar")}_triggerDownload(t,e){let i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=e,s.click(),URL.revokeObjectURL(i)}clearOutput(){this._resetOutput("// Run code to see output here")}};function np(n){let t=new TextEncoder,e=[];for(let o of n){if(o.name.includes("/")||o.name.includes("\\")||o.name.includes("..")){console.error(`PlaygroundController: skipped file with unsafe name in tar: "${o.name}"`);continue}let l=t.encode(o.content),a=Math.floor(Date.now()/1e3).toString(8),h=new Uint8Array(512);h.set(t.encode(o.name).slice(0,100),0),h.set(t.encode("0000644\0"),100),h.set(t.encode("0000000\0"),108),h.set(t.encode("0000000\0"),116),h.set(t.encode(`${l.length.toString(8).padStart(11,"0")}\0`),124),h.set(t.encode(`${a.padStart(11,"0")}\0`),136),h.fill(32,148,156),h[156]=48,h.set(t.encode("ustar\0"),257),h.set(t.encode("00"),263);let f=0;for(let u=0;u<512;u++)f+=h[u];h.set(t.encode(`${f.toString(8).padStart(6,"0")}\0 `),148);let c=new Uint8Array(Math.ceil(l.length/512)*512);c.set(l),e.push(h),e.push(c)}e.push(new Uint8Array(1024));let i=e.reduce((o,l)=>o+l.length,0),s=new Uint8Array(i),r=0;for(let o of e)s.set(o,r),r+=o.length;return s}export{Kh as PlaygroundController}; +${l}`))}downloadFiles(){this.files[this.activeFile].content=this.editor.getCode(),this.files.length===1?this._triggerDownload(new Blob([this.files[0].content],{type:"text/plain"}),this.files[0].name):this._triggerDownload(new Blob([ap(this.files)],{type:"application/x-tar"}),"playground-gno-source-code.tar")}_triggerDownload(t,e){let i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=e,s.click(),URL.revokeObjectURL(i)}clearOutput(){this._resetOutput("// Run code to see output here")}};function ap(n){let t=new TextEncoder,e=[];for(let o of n){if(o.name.includes("/")||o.name.includes("\\")||o.name.includes("..")){console.error(`PlaygroundController: skipped file with unsafe name in tar: "${o.name}"`);continue}let l=t.encode(o.content),a=Math.floor(Date.now()/1e3).toString(8),h=new Uint8Array(512);h.set(t.encode(o.name).slice(0,100),0),h.set(t.encode("0000644\0"),100),h.set(t.encode("0000000\0"),108),h.set(t.encode("0000000\0"),116),h.set(t.encode(`${l.length.toString(8).padStart(11,"0")}\0`),124),h.set(t.encode(`${a.padStart(11,"0")}\0`),136),h.fill(32,148,156),h[156]=48,h.set(t.encode("ustar\0"),257),h.set(t.encode("00"),263);let f=0;for(let u=0;u<512;u++)f+=h[u];h.set(t.encode(`${f.toString(8).padStart(6,"0")}\0 `),148);let c=new Uint8Array(Math.ceil(l.length/512)*512);c.set(l),e.push(h),e.push(c)}e.push(new Uint8Array(1024));let i=e.reduce((o,l)=>o+l.length,0),s=new Uint8Array(i),r=0;for(let o of e)s.set(o,r),r+=o.length;return s}export{Xh as PlaygroundController}; diff --git a/gno.land/pkg/gnoweb/public/js/controller-run.js b/gno.land/pkg/gnoweb/public/js/controller-run.js index 886361ef74d..dc5427cf928 100644 --- a/gno.land/pkg/gnoweb/public/js/controller-run.js +++ b/gno.land/pkg/gnoweb/public/js/controller-run.js @@ -1,15 +1,15 @@ -var Gn=[],so=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=so[i])e=i+1;else return!0;if(e==t)return!1}}function to(n){return n>=127462&&n<=127487}var io=8205;function ro(n,e,t=!0,i=!0){return(t?oo:jh)(n,e,i)}function oo(n,e,t){if(e==n.length)return e;e&&lo(n.charCodeAt(e))&&ao(n.charCodeAt(e-1))&&e--;let i=_n(n,e);for(e+=no(i);e=0&&to(_n(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function jh(n,e,t){for(;e>0;){let i=oo(n,e-2,t);if(i=56320&&n<57344}function ao(n){return n>=55296&&n<56320}function no(n){return n<65536?1:2}var R=class n{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=Nt(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),Rt.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=Nt(this,e,t);let i=[];return this.decompose(e,t,i,0),Rt.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new ut(this),r=new ut(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new ut(this,e)}iterRange(e,t=this.length){return new zi(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new qi(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?n.empty:e.length<=32?new ce(e):Rt.from(ce.split(e,[]))}},ce=class n extends R{constructor(e,t=Uh(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Yn(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new n(ho(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=Vi(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new n(l,o.length+r.length));else{let a=l.length>>1;i.push(new n(l.slice(0,a)),new n(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof n))return super.replace(e,t,i);[e,t]=Nt(this,e,t);let s=Vi(this.text,Vi(i.text,ho(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new n(s,r):Rt.from(n.split(s,[]),r)}sliceString(e,t=this.length,i=` -`){[e,t]=Nt(this,e,t);let s="";for(let r=0,o=0;r<=t&&oe&&o&&(s+=i),er&&(s+=l.slice(Math.max(0,e-r),t-r)),r=a+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new n(i,s)),i=[],s=-1);return s>-1&&t.push(new n(i,s)),t}},Rt=class n extends R{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,s);s=l+1,i=a+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r=o){let h=s&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!h?i.push(l):l.decompose(e-o,t-o,i,h)}o=a+1}}replace(e,t,i){if([e,t]=Nt(this,e,t),i.lines=r&&t<=l){let a=o.replace(e-r,t-r,i),h=this.lines-o.lines+a.lines;if(a.lines>4&&a.lines>h>>6){let f=this.children.slice();return f[s]=a,new n(f,this.length-(t-e)+i.length)}return super.replace(r,l,a)}r=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` -`){[e,t]=Nt(this,e,t);let s="";for(let r=0,o=0;re&&r&&(s+=i),eo&&(s+=l.sliceString(e-o,t-o,i)),o=a+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof n))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let a=this.children[s],h=e.children[r];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new ce(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,f=[];function c(d){let p;if(d.lines>r&&d instanceof n)for(let g of d.children)c(g);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof ce&&a&&(p=f[f.length-1])instanceof ce&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,f[f.length-1]=new ce(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,f.push(d))}function u(){a!=0&&(l.push(f.length==1?f[0]:n.from(f,h)),h=-1,a=f.length=0)}for(let d of e)c(d);return u(),l.length==1?l[0]:new n(l,t)}};R.empty=new ce([""],0);function Uh(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Vi(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r=t&&(a>i&&(l=l.slice(0,i-s)),s0?1:(e instanceof ce?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof ce?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` -`,this;e--}else if(s instanceof ce){let a=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=s.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof ce?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},zi=class{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new ut(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},qi=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(R.prototype[Symbol.iterator]=function(){return this.iter()},ut.prototype[Symbol.iterator]=zi.prototype[Symbol.iterator]=qi.prototype[Symbol.iterator]=function(){return this});var Yn=class{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}};function Nt(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function Q(n,e,t=!0,i=!0){return ro(n,e,t,i)}function _h(n){return n>=56320&&n<57344}function Gh(n){return n>=55296&&n<56320}function go(n,e){let t=n.charCodeAt(e);if(!Gh(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return _h(i)?(t-55296<<10)+(i-56320)+65536:t}function mo(n){return n<65536?1:2}var Xn=/\r\n?|\n/,le=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(le||(le={})),_e=class n{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return r+(e-s);r+=l}else{if(i!=le.Simple&&h>=e&&(i==le.TrackDel&&se||i==le.TrackBefore&&se))return null;if(h>e||h==e&&t<0&&!l)return e==s||t<0?r:r+a;r+=a}s=h}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i=0&&s<=t&&l>=e)return st?"cover":!0;s=l}return!1}toString(){let e="";for(let t=0;t=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new n(e)}static create(e){return new n(e)}},se=class n extends _e{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Qn(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return Zn(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s=0){t[s]=l,t[s+1]=o;let a=s>>1;for(;i.length0&&Ze(i,t,r.text),r.forward(f),l+=f}let h=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,l=null;function a(f=!1){if(!f&&!s.length)return;ou||c<0||u>t)throw new RangeError(`Invalid change range ${c} to ${u} (in doc of length ${t})`);let p=d?typeof d=="string"?R.of(d.split(i||Xn)):d:R.empty,g=p.length;if(c==u&&g==0)return;co&&te(s,c-o,-1),te(s,u-c,g),Ze(r,s,p),o=u}}return h(e),a(!l),l}static empty(e){return new n(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let s=0;sl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;i.length=0&&t<=0&&t==n[s+1]?n[s]+=e:s>=0&&e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function Ze(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(s,h,r,f,c),s=h,r=f}}}function Zn(n,e,t,i=!1){let s=[],r=i?[]:null,o=new dt(n),l=new dt(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);te(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,f=o.len;for(;f;)if(l.ins==-1){let c=Math.min(f,l.len);h+=c,f-=c,l.forward(c)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}var dt=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?R.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?R.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},Lt=class n{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new n(i,s,this.flags)}extend(e,t=e,i=0){if(e<=this.anchor&&t>=this.anchor)return w.range(e,t,void 0,void 0,i);let s=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return w.range(this.anchor,s,void 0,void 0,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return w.range(e.anchor,e.head)}static create(e,t,i){return new n(e,t,i)}},w=class n{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:n.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new n(e.ranges.map(t=>Lt.fromJSON(t)),e.main)}static single(e,t=e){return new n([n.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;ss.from-r.from),t=e.indexOf(i);for(let s=1;sr.head?n.range(a,l):n.range(l,a))}}return new n(e,t)}};function bo(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}var hs=0,M=class n{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=hs++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new n(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:fs),!!e.static,e.enables)}of(e){return new Pt([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Pt(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Pt(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}};function fs(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}var Pt=class{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=hs++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,l=this.type==2,a=!1,h=!1,f=[];for(let c of this.dependencies)c=="doc"?a=!0:c=="selection"?h=!0:(((t=e[c.id])!==null&&t!==void 0?t:1)&1)==0&&f.push(e[c.id]);return{create(c){return c.values[o]=i(c),1},update(c,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||es(c,f)){let d=i(c);if(l?!fo(d,c.values[o],s):!s(d,c.values[o]))return c.values[o]=d,1}return 0},reconfigure:(c,u)=>{let d,p=u.config.address[r];if(p!=null){let g=ji(u,p);if(this.dependencies.every(m=>m instanceof M?u.facet(m)===c.facet(m):m instanceof Ce?u.field(m,!1)==c.field(m,!1):!0)||(l?fo(d=i(c),g,s):s(d=i(c),g)))return c.values[o]=g,0}else d=i(c);return c.values[o]=d,1}}}};function fo(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),s=t.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let f=0;fi===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(Hi).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>{let r=i.facet(Hi),o=s.facet(Hi),l;return(l=r.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,Hi.of({field:this,create:e})]}get extension(){return this}},ft={lowest:4,low:3,default:2,high:1,highest:0};function ni(n){return e=>new Ki(e,n)}var Ht={highest:ni(ft.highest),high:ni(ft.high),default:ni(ft.default),low:ni(ft.low),lowest:ni(ft.lowest)},Ki=class{constructor(e,t){this.inner=e,this.prec=t}},pt=class n{of(e){return new ri(this,e)}reconfigure(e){return n.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},ri=class{constructor(e,t){this.compartment=e,this.inner=t}},$i=class n{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let u of Yh(e,t,o))u instanceof Ce?s.push(u):(r[u.facet.id]||(r[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of s)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let f=i?.config.facets;for(let u in r){let d=r[u],p=d[0].facet,g=f&&f[u]||[];if(d.every(m=>m.type==0))if(l[p.id]=a.length<<1|1,fs(g,d))a.push(i.facet(p));else{let m=p.combine(d.map(b=>b.value));a.push(i&&p.compare(m,i.facet(p))?i.facet(p):m)}else{for(let m of d)m.type==0?(l[m.id]=a.length<<1|1,a.push(m.value)):(l[m.id]=h.length<<1,h.push(b=>m.dynamicSlot(b)));l[p.id]=h.length<<1,h.push(m=>Jh(m,p,d))}}let c=h.map(u=>u(l));return new n(e,o,c,l,a,r)}};function Yh(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof ri&&t.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof ri){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),r(h,l)}else if(o instanceof Ki)r(o.inner,o.prec);else if(o instanceof Ce)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof Pt)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,ft.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,ft.default),i.reduce((o,l)=>o.concat(l))}function si(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function ji(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}var wo=M.define(),ts=M.define({combine:n=>n.some(e=>e),static:!0}),xo=M.define({combine:n=>n.length?n[0]:void 0,static:!0}),ko=M.define(),vo=M.define(),So=M.define(),Co=M.define({combine:n=>n.length?n[0]:!1}),me=class{constructor(e,t){this.type=e,this.value=t}static define(){return new is}},is=class{of(e){return new me(this,e)}},ns=class{constructor(e){this.map=e}of(e){return new U(this,e)}},U=class n{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new n(this.type,t)}is(e){return this.type==e}static define(e={}){return new ns(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}};U.reconfigure=U.define();U.appendConfig=U.define();var X=class n{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&bo(i,t.newLength),r.some(l=>l.type==n.time)||(this.annotations=r.concat(n.time.of(Date.now())))}static create(e,t,i,s,r,o){return new n(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(n.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}};X.time=me.define();X.userEvent=me.define();X.addToHistory=me.define();X.remote=me.define();function Xh(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof X?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof X?n=r[0]:n=Mo(e,It(r),!1)}return n}function Zh(n){let e=n.startState,t=e.facet(So),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=Ao(i,ss(e,r,n.changes.newLength),!0))}return i==n?n:X.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}var ef=[];function It(n){return n==null?ef:Array.isArray(n)?n:[n]}var Se=function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n}(Se||(Se={})),tf=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,rs;try{rs=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function nf(n){if(rs)return rs.test(n);for(let e=0;e"\x80"&&(t.toUpperCase()!=t.toLowerCase()||tf.test(t)))return!0}return!1}function sf(n){return e=>{if(!/\S/.test(e))return Se.Space;if(nf(e))return Se.Word;for(let t=0;t-1)return Se.Word;return Se.Other}}var j=class n{constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;ls.set(h,a)),t=null),s.set(l.value.compartment,l.value.extension)):l.is(U.reconfigure)?(t=null,i=l.value):l.is(U.appendConfig)&&(t=null,i=It(i).concat(l.value));let r;t?r=e.startState.values.slice():(t=$i.resolve(i,s,this),r=new n(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=e.startState.facet(ts)?e.newSelection:e.newSelection.asSingle();new n(t,e.newDoc,o,r,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:w.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=It(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return n.create({doc:e.doc,selection:w.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=$i.resolve(e.extensions||[],new Map),i=e.doc instanceof R?e.doc:R.of((e.doc||"").split(t.staticFacet(n.lineSeparator)||Xn)),s=e.selection?e.selection instanceof w?e.selection:w.single(e.selection.anchor,e.selection.head):w.single(0);return bo(s,i.length),t.staticFacet(ts)||(s=s.asSingle()),new n(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(n.tabSize)}get lineBreak(){return this.facet(n.lineSeparator)||` -`}get readOnly(){return this.facet(Co)}phrase(e,...t){for(let i of this.facet(n.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>t.length?i:t[r-1]})),e}languageDataAt(e,t,i=-1){let s=[];for(let r of this.facet(wo))for(let o of r(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&s.push(o[e]);return s}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return sf(t.length?t[0]:"")}wordAt(e){let{text:t,from:i,length:s}=this.doc.lineAt(e),r=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=Q(t,o,!1);if(r(t.slice(a,o))!=Se.Word)break;o=a}for(;ln.length?n[0]:4});j.lineSeparator=xo;j.readOnly=Co;j.phrases=M.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(s=>n[s]==e[s])}});j.languageData=wo;j.changeFilter=ko;j.transactionFilter=vo;j.transactionExtender=So;pt.reconfigure=U.define();function mt(n,e,t={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],l=i[r];if(l===void 0)i[r]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,r))i[r]=t[r](l,o);else throw new Error("Config merge conflict for field "+r)}for(let s in e)i[s]===void 0&&(i[s]=e[s]);return i}var We=class{eq(e){return this==e}range(e,t=e){return oi.create(e,t,this)}};We.prototype.startSide=We.prototype.endSide=0;We.prototype.point=!1;We.prototype.mapMode=le.TrackDel;function cs(n,e){return n==e||n.constructor==e.constructor&&n.eq(e)}var oi=class n{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new n(e,t,i)}};function os(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}var ls=class n{constructor(e,t,i,s){this.from=e,this.to=t,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,s=0){let r=i?this.to:this.from;for(let o=s,l=r.length;;){if(o==l)return o;let a=o+l>>1,h=r[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return h>=0?o:l;h>=0?l=a:o=a+1}}between(e,t,i,s){for(let r=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,r);rd||u==d&&h.startSide>0&&h.endSide<=0)continue;(d-u||h.endSide-h.startSide)<0||(o<0&&(o=u),h.point&&(l=Math.max(l,d-u)),i.push(h),s.push(u-o),r.push(d-o))}return{mapped:i.length?new n(s,r,i,l):null,pos:o}}},F=class n{constructor(e,t,i,s){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=s}static create(e,t,i,s){return new n(e,t,i,s)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(os)),this.isEmpty)return t.length?n.of(t):this;let l=new Ui(this,null,-1).goto(0),a=0,h=[],f=new gt;for(;l.value||a=0){let c=t[a++];f.addInner(c.from,c.to,c.value)||h.push(c)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||rl.to||r=r&&e<=r+o.length&&o.between(r,e-r,t-r,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return li.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return li.from(e).goto(t)}static compare(e,t,i,s,r=-1){let o=e.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=r),l=t.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=r),a=co(o,l,i),h=new ct(o,a,r),f=new ct(l,a,r);i.iterGaps((c,u,d)=>uo(h,c,f,u,d,s)),i.empty&&i.length==0&&uo(h,0,f,0,0,s)}static eq(e,t,i=0,s){s==null&&(s=999999999);let r=e.filter(f=>!f.isEmpty&&t.indexOf(f)<0),o=t.filter(f=>!f.isEmpty&&e.indexOf(f)<0);if(r.length!=o.length)return!1;if(!r.length)return!0;let l=co(r,o),a=new ct(r,l,0).goto(i),h=new ct(o,l,0).goto(i);for(;;){if(a.to!=h.to||!as(a.active,h.active)||a.point&&(!h.point||!cs(a.point,h.point)))return!1;if(a.to>s)return!0;a.next(),h.next()}}static spans(e,t,i,s,r=-1){let o=new ct(e,null,r).goto(t),l=t,a=o.openStart;for(;;){let h=Math.min(o.to,i);if(o.point){let f=o.activeForPoint(o.to),c=o.pointFroml&&(s.span(l,h,o.active,a),a=o.openEnd(h));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new gt;for(let s of e instanceof oi?[e]:t?rf(e):e)i.add(s.from,s.to,s.value);return i.finish()}static join(e){if(!e.length)return n.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let s=e[i];s!=n.empty;s=s.nextLayer)t=new n(s.chunkPos,s.chunk,t,Math.max(s.maxPoint,t.maxPoint));return t}};F.empty=new F([],[],null,-1);function rf(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(os);e=i}return n}F.empty.nextLayer=F.empty;var gt=class n{finishChunk(e){this.chunks.push(new ls(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new n)).add(e,t,i)}addInner(e,t,i){let s=e-this.lastTo||i.startSide-this.last.endSide;if(s<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(F.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=F.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}};function co(n,e,t){let i=new Map;for(let r of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&s.push(new Ui(o,t,i,r));return s.length==1?s[0]:new n(s)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)Jn(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)Jn(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Jn(this.heap,0)}}};function Jn(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let s=n[i];if(i+1=0&&(s=n[i+1],i++),t.compare(s)<0)break;n[i]=t,n[e]=s,e=i}}var ct=class{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=li.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Fi(this.active,e),Fi(this.activeTo,e),Fi(this.activeRank,e),this.minActive=po(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:s,rank:r}=this.cursor;for(;t0;)t++;Wi(this.active,t,i),Wi(this.activeTo,t,s),Wi(this.activeRank,t,r),e&&Wi(e,t,this.cursor.from),this.minActive=po(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>e){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&Fi(i,s)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[s]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}};function uo(n,e,t,i,s,r){n.goto(e),t.goto(i);let o=i+s,l=i,a=i-e,h=!!r.boundChange;for(let f=!1;;){let c=n.to+a-t.to,u=c||n.endSide-t.endSide,d=u<0?n.to+a:t.to,p=Math.min(d,o);if(n.point||t.point?(n.point&&t.point&&cs(n.point,t.point)&&as(n.activeForPoint(n.to),t.activeForPoint(t.to))||r.comparePoint(l,p,n.point,t.point),f=!1):(f&&r.boundChange(l),p>l&&!as(n.active,t.active)&&r.compareRange(l,p,n.active,t.active),h&&po)break;l=d,u<=0&&n.next(),u>=0&&t.next()}}function as(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function po(n,e){let t=-1,i=1e9;for(let s=0;s=e)return s;if(s==n.length)break;r+=n.charCodeAt(s)==9?t-r%t:1,s=Q(n,s)}return i===!0?-1:n.length}var us="\u037C",Do=typeof Symbol>"u"?"__"+us:Symbol.for(us),ds=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Oo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},ye=class{constructor(e,t){this.rules=[];let{finish:i}=t||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,l,a,h){let f=[],c=/^@(\w+)\b/.exec(o[0]),u=c&&c[1]=="keyframes";if(c&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))r(d.split(/,\s*/).map(g=>o.map(m=>g.replace(/&/,m))).reduce((g,m)=>g.concat(m)),p,a);else if(p&&typeof p=="object"){if(!c)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,f,u)}else p!=null&&f.push(d.replace(/_.*/,"").replace(/[A-Z]/g,g=>"-"+g.toLowerCase())+": "+p+";")}(f.length||u)&&a.push((i&&!c&&!h?o.map(i):o).join(", ")+" {"+f.join(" ")+"}")}for(let o in e)r(s(o),e[o],this.rules)}getRules(){return this.rules.join(` -`)}static newName(){let e=Oo[Do]||1;return Oo[Do]=e+1,us+e.toString(36)}static mount(e,t,i){let s=e[ds],r=i&&i.nonce;s?r&&s.setNonce(r):s=new ps(e,r),s.mount(Array.isArray(t)?t:[t],e)}},Bo=new Map,ps=class{constructor(e,t){let i=e.ownerDocument||e,s=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&s.CSSStyleSheet){let r=Bo.get(i);if(r)return e[ds]=r;this.sheet=new s.CSSStyleSheet,Bo.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[ds]=this}mount(e,t){let i=this.sheet,s=0,r=0;for(let o=0;o-1&&(this.modules.splice(a,1),r--,a=-1),a==-1){if(this.modules.splice(r++,0,l),i)for(let h=0;h",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},of=typeof navigator<"u"&&/Mac/.test(navigator.platform),lf=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(Y=0;Y<10;Y++)Ge[48+Y]=Ge[96+Y]=String(Y);var Y;for(Y=1;Y<=24;Y++)Ge[Y+111]="F"+Y;var Y;for(Y=65;Y<=90;Y++)Ge[Y]=String.fromCharCode(Y+32),Ft[Y]=String.fromCharCode(Y);var Y;for(_i in Ge)Ft.hasOwnProperty(_i)||(Ft[_i]=Ge[_i]);var _i;function Eo(n){var e=of&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||lf&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?Ft:Ge)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}var re=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},ks=typeof document<"u"?document:{documentElement:{style:{}}},vs=/Edge\/(\d+)/.exec(re.userAgent),hl=/MSIE \d/.test(re.userAgent),Ss=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(re.userAgent),vn=!!(hl||Ss||vs),Lo=!vn&&/gecko\/(\d+)/i.test(re.userAgent),gs=!vn&&/Chrome\/(\d+)/.exec(re.userAgent),Ro="webkitFontSmoothing"in ks.documentElement.style,Cs=!vn&&/Apple Computer/.test(re.vendor),Po=Cs&&(/Mobile\/\w+/.test(re.userAgent)||re.maxTouchPoints>2),S={mac:Po||/Mac/.test(re.platform),windows:/Win/.test(re.platform),linux:/Linux|X11/.test(re.platform),ie:vn,ie_version:hl?ks.documentMode||6:Ss?+Ss[1]:vs?+vs[1]:0,gecko:Lo,gecko_version:Lo?+(/Firefox\/(\d+)/.exec(re.userAgent)||[0,0])[1]:0,chrome:!!gs,chrome_version:gs?+gs[1]:0,ios:Po,android:/Android\b/.test(re.userAgent),webkit:Ro,webkit_version:Ro?+(/\bAppleWebKit\/(\d+)/.exec(re.userAgent)||[0,0])[1]:0,safari:Cs,safari_version:Cs?+(/\bVersion\/(\d+(\.\d+)?)/.exec(re.userAgent)||[0,0])[1]:0,tabSize:ks.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function fr(n,e){for(let t in n)t=="class"&&e.class?e.class+=" "+n.class:t=="style"&&e.style?e.style+=";"+n.style:e[t]=n[t];return e}var ln=Object.create(null);function cr(n,e,t){if(n==e)return!0;n||(n=ln),e||(e=ln);let i=Object.keys(n),s=Object.keys(e);if(i.length-(t&&i.indexOf(t)>-1?1:0)!=s.length-(t&&s.indexOf(t)>-1?1:0))return!1;for(let r of i)if(r!=t&&(s.indexOf(r)==-1||n[r]!==e[r]))return!1;return!0}function af(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t=="style"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function Io(n,e,t){let i=!1;if(e)for(let s in e)t&&s in t||(i=!0,s=="style"?n.style.cssText="":n.removeAttribute(s));if(t)for(let s in t)e&&e[s]==t[s]||(i=!0,s=="style"?n.style.cssText=t[s]:n.setAttribute(s,t[s]));return i}function hf(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new vt(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,s;if(e.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=fl(e,t);i=(r?t?-3e8:-1:5e8)-1,s=(o?t?2e8:1:-6e8)+1}return new vt(e,i,s,t,e.widget||null,!0)}static line(e){return new wi(e)}static set(e,t=!1){return F.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};z.none=F.empty;var bi=class n extends z{constructor(e){let{start:t,end:i}=fl(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?fr(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||ln}eq(e){return this==e||e instanceof n&&this.tagName==e.tagName&&cr(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}};bi.prototype.point=!1;var wi=class n extends z{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof n&&this.spec.class==e.spec.class&&cr(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}};wi.prototype.mapMode=le.TrackBefore;wi.prototype.point=!0;var vt=class n extends z{constructor(e,t,i,s,r,o){super(t,i,r,e),this.block=s,this.isReplace=o,this.mapMode=s?t<=0?le.TrackBefore:le.TrackAfter:le.TrackDel}get type(){return this.startSide!=this.endSide?ee.WidgetRange:this.startSide<=0?ee.WidgetBefore:ee.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof n&&ff(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}};vt.prototype.point=!0;function fl(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function ff(n,e){return n==e||!!(n&&e&&n.compare(e))}function Kt(n,e,t,i=0){let s=t.length-1;s>=0&&t[s]+i>=n?t[s]=Math.max(t[s],e):t.push(n,e)}var an=class n extends We{constructor(e,t){super(),this.tagName=e,this.attributes=t}eq(e){return e==this||e instanceof n&&this.tagName==e.tagName&&cr(this.attributes,e.attributes)}static create(e){return new n(e.tagName,e.attributes||ln)}static set(e,t=!1){return F.of(e,t)}};an.prototype.startSide=an.prototype.endSide=-1;function xi(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function As(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function fi(n,e){if(!e.anchorNode)return!1;try{return As(n,e.anchorNode)}catch{return!1}}function tn(n){return n.nodeType==3?ki(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function ci(n,e,t,i){return t?No(n,e,t,i,-1)||No(n,e,t,i,1):!1}function it(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function hn(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function No(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:Xe(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=it(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=s<0?Xe(n):0}else return!1}}function Xe(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function fn(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function cf(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function cl(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function uf(n,e,t,i,s,r,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let f=n,c=!1;f&&!c;)if(f.nodeType==1){let u,d=f==a.body,p=1,g=1;if(d)u=cf(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(f).position)&&(c=!0),f.scrollHeight<=f.clientHeight&&f.scrollWidth<=f.clientWidth){f=f.assignedSlot||f.parentNode;continue}let C=f.getBoundingClientRect();({scaleX:p,scaleY:g}=cl(f,C)),u={left:C.left,right:C.left+f.clientWidth*p,top:C.top,bottom:C.top+f.clientHeight*g}}let m=0,b=0;if(s=="nearest")e.top0&&e.bottom>u.bottom+b&&(b=e.bottom-u.bottom+o)):e.bottom>u.bottom-o&&(b=e.bottom-u.bottom+o,t<0&&e.top-b0&&e.right>u.right+m&&(m=e.right-u.right+r)):e.right>u.right-r&&(m=e.right-u.right+r,t<0&&e.leftu.bottom||e.leftu.right)&&(e={left:Math.max(e.left,u.left),right:Math.min(e.right,u.right),top:Math.max(e.top,u.top),bottom:Math.min(e.bottom,u.bottom)}),f=f.assignedSlot||f.parentNode}else if(f.nodeType==11)f=f.host;else break}function ul(n,e=!0){let t=n.ownerDocument,i=null,s=null;for(let r=n.parentNode;r&&!(r==t.body||(!e||i)&&s);)if(r.nodeType==1)!s&&r.scrollHeight>r.clientHeight&&(s=r),e&&!i&&r.scrollWidth>r.clientWidth&&(i=r),r=r.assignedSlot||r.parentNode;else if(r.nodeType==11)r=r.host;else break;return{x:i,y:s}}var Ms=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?Xe(t):0),i,Math.min(e.focusOffset,i?Xe(i):0))}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}},bt=null;S.safari&&S.safari_version>=26&&(bt=!1);function dl(n){if(n.setActive)return n.setActive();if(bt)return n.focus(bt);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(bt==null?{get preventScroll(){return bt={preventScroll:!0},!0}}:void 0),!bt){bt=!1;for(let t=0;tMath.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function gl(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=Xe(t)}else if(t.parentNode&&!hn(t))i=it(t),t=t.parentNode;else return null}}function ml(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i=t){if(l.level==i)return o;(r<0||(s!=0?s<0?l.fromt:e[r].level>l.level))&&(r=o)}}if(r<0)throw new RangeError("Index out of range");return r}};function wl(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;g-=3)if(Ve[g+1]==-d){let m=Ve[g+2],b=m&2?s:m&4?m&1?r:s:0;b&&(V[c]=V[Ve[g]]=b),l=g;break}}else{if(Ve.length==189)break;Ve[l++]=c,Ve[l++]=u,Ve[l++]=a}else if((p=V[c])==2||p==1){let g=p==s;a=g?0:1;for(let m=l-3;m>=0;m-=3){let b=Ve[m+2];if(b&2)break;if(g)Ve[m+2]|=2;else{if(b&4)break;Ve[m+2]|=4}}}}}function xf(n,e,t,i){for(let s=0,r=i;s<=t.length;s++){let o=s?t[s-1].to:n,l=sa;)p==m&&(p=t[--g].from,m=g?t[g-1].to:n),V[--p]=d;a=f}else r=h,a++}}}function Ds(n,e,t,i,s,r,o){let l=i%2?2:1;if(i%2==s%2)for(let a=e,h=0;aa&&o.push(new xe(a,g.from,d));let m=g.direction==St!=!(d%2);Os(n,m?i+1:i,s,g.inner,g.from,g.to,o),a=g.to}p=g.to}else{if(p==t||(f?V[p]!=l:V[p]==l))break;p++}u?Ds(n,a,p,i+1,s,u,o):ae;){let f=!0,c=!1;if(!h||a>r[h-1].to){let g=V[a-1];g!=l&&(f=!1,c=g==16)}let u=!f&&l==1?[]:null,d=f?i:i+1,p=a;e:for(;;)if(h&&p==r[h-1].to){if(c)break e;let g=r[--h];if(!f)for(let m=g.from,b=h;;){if(m==e)break e;if(b&&r[b-1].to==m)m=r[--b].from;else{if(V[m-1]==l)break e;break}}if(u)u.push(g);else{g.toV.length;)V[V.length]=256;let i=[],s=e==St?0:1;return Os(n,s,s,t,0,n.length,i),i}function xl(n){return[new xe(0,n,0)]}var kl="";function vf(n,e,t,i,s){var r;let o=i.head-n.from,l=xe.find(e,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),a=e[l],h=a.side(s,t);if(o==h){let u=l+=s?1:-1;if(u<0||u>=e.length)return null;a=e[l=u],o=a.side(!s,t),h=a.side(s,t)}let f=Q(n.text,o,a.forward(s,t));(fa.to)&&(f=h),kl=n.text.slice(Math.min(o,f),Math.max(o,f));let c=l==(s?e.length-1:0)?null:e[l+(s?1:-1)];return c&&f==h&&c.level+(s?0:1)n.some(e=>e)}),Ol=M.define({combine:n=>n.some(e=>e)}),Bl=M.define(),ui=class n{constructor(e,t,i,s,r,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(e){return e.empty?this:new n(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new n(w.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},Gi=U.define({map:(n,e)=>n.map(e)}),El=U.define();function Me(n,e,t){let i=n.facet(Al);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}var Je=M.define({combine:n=>n.length?n[0]:!0}),Cf=0,Vt=M.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let a=[];return o&&a.push(Sn.of(h=>{let f=h.plugin(l);return f?o(f):z.none})),r&&a.push(r(l)),a})}static fromClass(e,t){return n.define((i,s)=>new e(i,s),t)}},di=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(Me(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){Me(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){Me(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},Ll=M.define(),gr=M.define(),Sn=M.define(),Rl=M.define(),mr=M.define(),vi=M.define(),Pl=M.define();function Fo(n,e){let t=n.state.facet(Pl);if(!t.length)return t;let i=t.map(r=>r instanceof Function?r(n):r),s=[];return F.spans(i,e.from,e.to,{point(){},span(r,o,l,a){let h=r-e.from,f=o-e.from,c=s;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=Sf(e.text,h,f)),a>0&&c.length&&(p=c[c.length-1]).to==h&&p.direction==d)p.to=f,c=p.inner;else{let g={from:h,to:f,direction:d,inner:[]};c.push(g),c=g.inner}}}}),s}var Il=M.define();function Nl(n){let e=0,t=0,i=0,s=0;for(let r of n.state.facet(Il)){let o=r(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:e,right:t,top:i,bottom:s}}var ai=M.define(),Te=class n{constructor(e,t,i,s){this.fromA=e,this.toA=t,this.fromB=i,this.toB=s}join(e){return new n(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let s=e[t-1];if(!(s.fromA>i.toA)){if(s.toAs.push(new Te(r,o,l,a))),this.changedRanges=s}static create(e,t,i){return new n(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},Af=[],_=class{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return Af}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&af(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let s of this.children){if(s==e)return i;i+=s.length+s.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t){return null}domPosFor(e,t){let i=it(this.dom),s=this.length?e>0:t>0;return new ze(this.parent.dom,i+(s?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof Ut)return e;return null}static get(e){return e.cmTile}},jt=class extends _{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,s,r=e?.node==t?e:null,o=0;for(let l of this.children){if(l.sync(e),o+=l.length+l.breakAfter,s=i?i.nextSibling:t.firstChild,r&&s!=l.dom&&(r.written=!0),l.dom.parentNode==t)for(;s&&s!=l.dom;)s=Wo(s);else t.insertBefore(l.dom,s);i=l.dom}for(s=i?i.nextSibling:t.firstChild,r&&s&&(r.written=!0);s;)s=Wo(s);this.length=o}};function Wo(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}var Ut=class extends jt{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=_.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,s=0,r=0;;)if(s==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&r++,s=t.pop()}else{let o=i.children[s++];if(o instanceof Ye)t.push(s),i=o,s=0;else{let l=r+o.length,a=e(o,r);if(a!==void 0)return a;r=l+o.breakAfter}}}resolveBlock(e,t){let i,s=-1,r,o=-1;if(this.blockTiles((l,a)=>{let h=a+l.length;if(e>=a&&e<=h){if(l.isWidget()&&t>=-1&&t<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(ae||e==a&&(t>1?l.length:l.covers(-1)))&&(!r||!l.isWidget()&&r.isWidget())&&(r=l,o=e-a)}}),!i&&!r)throw new Error("No tile at position "+e);return i&&t<0||!r?{tile:i,offset:s}:{tile:r,offset:o}}},Ye=class n extends jt{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new n(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}},_t=class n extends jt{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let s=new n(t||document.createElement("div"),e);return(!t||!i)&&(s.flags|=4),s}get domAttrs(){return this.attrs}resolveInline(e,t,i){let s=null,r=-1,o=null,l=-1;function a(f,c){for(let u=0,d=0;u=c&&(p.isComposite()?a(p,c-d):(!o||o.isHidden&&(t>0||i&&Tf(o,p)))&&(g>c||p.flags&32)?(o=p,l=c-d):(di&&(e=i);let s=e,r=e,o=0;e==0&&t<0||e==i&&t>=0?S.chrome||S.gecko||(e?(s--,o=1):r=0)?0:l.length-1];return S.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?fn(a,o<0):a||null}static of(e,t){let i=new n(t||document.createTextNode(e),e);return t||(i.flags|=2),i}},Ct=class n extends _{constructor(e,t,i,s){super(e,t,s),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let s=this.widget.coordsAt(this.dom,e,t);if(s)return s;if(i)return fn(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let r=this.dom.getClientRects(),o=null;if(!r.length)return null;let l=this.flags&16?!0:this.flags&32?!1:e>0;for(let a=l?r.length-1:0;o=r[a],!(e>0?a==0:a==r.length-1||o.top0;)if(s.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(r==s.children.length){if(!e&&!l.length)break;i&&i.leave(s),o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++}else{let a=s.children[r],h=a.breakAfter;(t>0?a.length<=e:a.length=0;l--){let a=t.marks[l],h=s.lastChild;if(h instanceof ae&&h.mark.eq(a.mark))h.dom!=a.dom&&h.setDOM(ms(a.dom)),s=h;else{if(this.cache.reused.get(a)){let c=_.get(a.dom);c&&c.setDOM(ms(a.dom))}let f=ae.of(a.mark,a.dom);s.append(f),s=f}this.cache.reused.set(a,2)}let r=_.get(e.text);r&&this.cache.reused.set(r,2);let o=new wt(e.text,e.text.nodeValue);o.flags|=8,s.append(o)}addInlineWidget(e,t,i){let s=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);s||this.flushBuffer();let r=this.ensureMarks(t,i);!s&&!(e.flags&16)&&r.append(this.getBuffer(1)),r.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=Hl);let s=_t.start(e,t||((i=this.cache.find(_t))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=s)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let s=this.curLine;for(let r=e.length-1;r>=0;r--){let o=e[r],l;if(t>0&&(l=s.lastChild)&&l instanceof ae&&l.mark.eq(o))s=l,t--;else{let a=ae.of(o,(i=this.cache.find(ae,h=>h.mark.eq(o)))===null||i===void 0?void 0:i.dom);s.append(a),s=a,t=0}}return s}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Vo(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(S.ios&&Vo(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(ys,0,32)||new Ct(ys.toDOM(),0,ys,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=new Ls(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-t.rank||this.wrappers[i-1].to-t.to)<0;)i--;this.wrappers.splice(i,0,t)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let s=t.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(r),t=r}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(Gt,void 0,1);return i&&(i.flags=t),i||new Gt(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},Ps=class{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:s,lineBreak:r,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=s;let l=this.textOff=Math.min(e,s.length);return r?null:s.slice(0,l)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}},un=[Ct,_t,wt,ae,Gt,Ye,Ut];for(let n=0;n[]),this.index=un.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let s=e.bucket,r=this.buckets[s],o=this.index[s];for(let l=r.length-1;l>=0;l--){let a=(l+o)%r.length,h=r[a];if((!t||t(h))&&!this.reused.has(h))return r.splice(a,1),a{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let s=0,r=0,o=0;;){let l=os){let h=a-s;this.preserve(h,!o,!l),s=a,r+=h}if(!l)break;t&&l.fromA<=t.range.fromA&&l.toA>=t.range.toA?(this.forward(l.fromA,t.range.fromA,t.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let h=a>0||l{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof ae&&s.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?s.length&&(s.length=r=0):o instanceof ae&&(s.shift(),r=Math.min(r,s.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,s=this.builder,r=0,o=F.spans(this.decorations,e,t,{point:(l,a,h,f,c,u)=>{if(h instanceof vt){if(this.disallowBlockEffectsFor[u]){if(h.block)throw new RangeError("Block decorations may not be specified via plugins");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(r=f.length,c>f.length)s.continueWidget(a-l);else{let d=h.widget||(h.block?nt.block:nt.inline),p=Df(h),g=this.cache.findWidget(d,a-l,p)||Ct.of(d,this.view,a-l,p);h.block?(h.startSide>0&&s.addLineStartIfNotCovered(i),s.addBlockWidget(g)):(s.ensureLine(i),s.addInlineWidget(g,f,c))}i=null}else i=Of(i,h);a>l&&this.text.skip(a-l)},span:(l,a,h,f)=>{for(let c=l;cr,this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let s=e.parentNode;;s=s.parentNode){let r=_.get(s);if(s==this.view.contentDOM)break;r instanceof ae?t.push(r):r?.isLine()?i=r:r instanceof Ye||(s.nodeName=="DIV"&&!i&&s!=this.view.contentDOM?i=new _t(s,Hl):i||t.push(ae.of(new bi({tagName:s.nodeName.toLowerCase(),attributes:hf(s)}),s)))}return{line:i,marks:t}}};function Vo(n,e){let t=i=>{for(let s of i.children)if((e?s.isText():s.length)||t(s))return!0;return!1};return t(n)}function Df(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}var Hl={class:"cm-line"};function Of(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:"cm-line"}),t&&fr(t,n),i&&(n.class+=" "+i)),n}function Bf(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof ae&&e.push(i.mark)}return e}function ms(n){let e=_.get(n);return e&&e.setDOM(n.cloneNode()),n}var nt=class extends kt{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}};nt.inline=new nt("span");nt.block=new nt("div");var ys=new class extends kt{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}},dn=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=z.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new Ut(e,e.contentDOM),this.updateInner([new Te(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:f,toA:c})=>cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?s=this.domChanged.newSel.head:!Ff(e.changes,this.hasComposition)&&!e.selectionSet&&(s=e.state.selection.main.head));let r=s>-1?Lf(this.view,e.changes,s):null;if(this.domChanged=null,this.hasComposition){let{from:f,to:c}=this.hasComposition;i=new Te(f,c,e.changes.mapPos(f,-1),e.changes.mapPos(c,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(S.ie||S.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=If(o,this.decorations,e.changes);a.length&&(i=Te.extendWithRanges(i,a));let h=Nf(l,this.blockWrappers,e.changes);return h.length&&(i=Te.extendWithRanges(i,h)),r&&!i.some(f=>f.fromA<=r.range.fromA&&f.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,l=new Ns(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&_.get(t.text)&&l.cache.reused.set(_.get(t.text),2),this.tile=l.run(e,t),Hs(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let r=S.chrome||S.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let s=[];if(this.view.viewport.from||this.view.viewport.to-1)&&fi(i,this.view.observer.selectionRange)&&!(s&&i.contains(s));if(!(r||t||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,h,f;if(a.empty?f=h=this.inlineDOMNearPos(a.anchor,a.assoc||1):(f=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),h=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),S.gecko&&a.empty&&!this.hasComposition&&Ef(h)){let u=document.createTextNode("");this.view.observer.ignore(()=>h.node.insertBefore(u,h.node.childNodes[h.offset]||null)),h=f=new ze(u,0),l=!0}let c=this.view.observer.selectionRange;(l||!c.focusNode||(!ci(h.node,h.offset,c.anchorNode,c.anchorOffset)||!ci(f.node,f.offset,c.focusNode,c.focusOffset))&&!this.suppressWidgetCursorChange(c,a))&&(this.view.observer.ignore(()=>{S.android&&S.chrome&&i.contains(c.focusNode)&&Hf(c.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let u=xi(this.view.root);if(u)if(a.empty){if(S.gecko){let d=Rf(h.node,h.offset);if(d&&d!=3){let p=(d==1?gl:ml)(h.node,h.offset);p&&(h=new ze(p.node,p.offset))}}u.collapse(h.node,h.offset),a.bidiLevel!=null&&u.caretBidiLevel!==void 0&&(u.caretBidiLevel=a.bidiLevel)}else if(u.extend){u.collapse(h.node,h.offset);try{u.extend(f.node,f.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([h,f]=[f,h]),d.setEnd(f.node,f.offset),d.setStart(h.node,h.offset),u.removeAllRanges(),u.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),s&&s.focus())}),this.view.observer.setSelectionRange(h,f)),this.impreciseAnchor=h.precise?null:new ze(c.anchorNode,c.anchorOffset),this.impreciseHead=f.precise?null:new ze(c.focusNode,c.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&ci(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=xi(e.root),{anchorNode:s,anchorOffset:r}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),h=this.coordsAt(t.head,1);if(!a||!h||a.bottom>h.top)return;let f=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(f.node,f.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let c=e.observer.selectionRange;e.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=t.from&&i.collapse(s,r)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let s=i.posAtStart;if(i.isComposite()){let r;if(e==i.dom)r=i.dom.childNodes[t];else{let o=Xe(e)==0?0:t==0?-1:1;for(;;){let l=e.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(e==l.firstChild?o=-1:o=1),e=l}o<0?r=e:r=e.nextSibling}if(r==i.dom.firstChild)return s;for(;r&&!_.get(r);)r=r.nextSibling;if(!r)return s+i.length;for(let o=0,l=s;;o++){let a=i.children[o];if(a.dom==r)return l;l+=a.length+a.breakAfter}}else return i.isText()?e==i.dom?s+t:s+(t?i.length:0):s}domAtPos(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(e,t):i.domIn(s,t)}inlineDOMNearPos(e,t){let i,s=-1,r=!1,o,l=-1,a=!1;return this.tile.blockTiles((h,f)=>{if(h.isWidget()){if(h.flags&32&&f>=e)return!0;h.flags&16&&(r=!0)}else{let c=f+h.length;if(f<=e&&(i=h,s=e-f,r=c=e&&!o&&(o=h,l=e-f,a=f>e),f>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(r&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(s,t):o.domIn(l,t))}coordsAt(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.widget instanceof pi?null:i.coordsInWidget(s,t,!0):i.coordsIn(s,t)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function s(r,o){if(r.isComposite())for(let l of r.children){if(l.length>=o){let a=s(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(r.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==$.LTR,h=0,f=(c,u,d)=>{for(let p=0;ps);p++){let g=c.children[p],m=u+g.length,b=g.dom.getBoundingClientRect(),{height:C}=b;if(d&&!p&&(h+=b.top-d.top),g instanceof Ye)m>i&&f(g,u,b);else if(u>=i&&(h>0&&t.push(-h),t.push(C+h),h=0,o)){let T=g.dom.lastChild,P=T?tn(T):[];if(P.length){let A=P[P.length-1],v=a?A.right-b.left:b.right-A.left;v>l&&(l=v,this.minWidth=r,this.minWidthFrom=u,this.minWidthTo=m)}}d&&p==c.children.length-1&&(h+=d.bottom-b.bottom),u=m+g.breakAfter}};return f(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?$.RTL:$.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let h of o.children){if(!h.isText()||/[^ -~]/.test(h.text))return;let f=tn(h.dom);if(f.length!=1)return;l+=f[0].width,a=f[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(e)return e;let t=document.createElement("div"),i,s,r;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=tn(t.firstChild)[0];i=t.getBoundingClientRect().height,s=o&&o.width?o.width/27:7,r=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:s,textHeight:r}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,s=0;;s++){let r=s==t.viewports.length?null:t.viewports[s],o=r?r.from-1:this.view.state.doc.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(z.replace({widget:new pi(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return z.set(e)}updateDeco(){let e=1,t=this.view.state.facet(Sn).map(r=>(this.dynamicDecorationMap[e++]=typeof r=="function")?r(this.view):r),i=!1,s=this.view.state.facet(mr).map((r,o)=>{let l=typeof r=="function";return l&&(i=!0),l?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[e++]=i,t.push(F.join(s))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof r=="function"?r(this.view):r)}scrollIntoView(e){var t;if(e.isSnapshot){let f=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=f.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let f of this.view.state.facet(Bl))try{if(f(this.view,e.range,e))return!0}catch(c){Me(this.view.state,c,"scroll handler")}let{range:i}=e,s=this.coordsAt(i.head,(t=i.assoc)!==null&&t!==void 0?t:i.empty?0:i.head>i.anchor?-1:1),r;if(!s)return;!i.empty&&(r=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(s={left:Math.min(s.left,r.left),top:Math.min(s.top,r.top),right:Math.max(s.right,r.right),bottom:Math.max(s.bottom,r.bottom)});let o=Nl(this.view),l={left:s.left-o.left,top:s.top-o.top,right:s.right+o.right,bottom:s.bottom+o.bottom},{offsetWidth:a,offsetHeight:h}=this.view.scrollDOM;if(uf(this.view.scrollDOM,l,i.head1&&(s.top>window.pageYOffset+window.visualViewport.offsetTop+window.visualViewport.height||s.bottomi.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){Hs(this.tile)}};function Hs(n,e){let t=e?.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)Hs(i,e)}}function Ef(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function Fl(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=gl(t.focusNode,t.focusOffset),s=ml(t.focusNode,t.focusOffset),r=i||s;if(s&&i&&s.node!=i.node){let l=_.get(s.node);if(!l||l.isText()&&l.text!=s.node.nodeValue)r=s;else if(n.docView.lastCompositionAfterCursor){let a=_.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(r=s)}}if(n.docView.lastCompositionAfterCursor=r!=i,!r)return null;let o=e-r.offset;return{from:o,to:o+r.node.nodeValue.length,node:r.node}}function Lf(n,e,t){let i=Fl(n,t);if(!i)return null;let{node:s,from:r,to:o}=i,l=s.nodeValue;if(/[\n\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=e.invertedDesc;return{range:new Te(a.mapPos(r),a.mapPos(o),r,o),text:s}}function Rf(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(t=!0)}),t}var pi=class extends kt{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function Wf(n,e,t=1){let i=n.charCategorizer(e),s=n.doc.lineAt(e),r=e-s.from;if(s.length==0)return w.cursor(e);r==0?t=1:r==s.length&&(t=-1);let o=r,l=r;t<0?o=Q(s.text,r,!1):l=Q(s.text,r);let a=i(s.text.slice(o,l));for(;o>0;){let h=Q(s.text,o,!1);if(i(s.text.slice(h,o))!=a)break;o=h}for(;ln.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((s-t.top-(n.defaultLineHeight-l)*.5)/l);r+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+To(o,r,n.state.tabSize)}function Ws(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>e)break;if(!(r.toe)return r;(!s||r.type==ee.Text&&(s.type!=r.type||(t<0?r.frome)))&&(s=r)}}return s||i}return i}function zf(n,e,t,i){let s=Ws(n,e.head,e.assoc||-1),r=!i||s.type!=ee.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head);if(r){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(s.from),a=n.posAtCoords({x:t==(l==$.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(a!=null)return w.cursor(a,t?-1:1)}return w.cursor(t?s.to:s.from,t?-1:1)}function zo(n,e,t,i){let s=n.state.doc.lineAt(e.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let l=e,a=null;;){let h=vf(s,r,o,l,t),f=kl;if(!h){if(s.number==(t?n.state.doc.lines:1))return l;f=` -`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),h=n.visualLineSide(s,!t)}if(a){if(!a(f))return l}else{if(!i)return h;a=i(f)}l=h}}function qf(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==Se.Space&&(s=o),s==o}}function Kf(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return w.cursor(s,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(s,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),f=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=r<0?h.top:h.bottom;else{let p=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(s-p.from))),l=(r<0?p.top:p.bottom)+f}let c=a.left+o,u=n.viewState.heightOracle.textHeight>>1,d=i??u;for(let p=0;;p+=u){let g=l+(d+p)*r,m=Vs(n,{x:c,y:g},!1,r);if(t?g>a.bottom:gl:C{if(e>r&&es(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:w.cursor(i,in.viewState.docHeight)return new we(n.state.doc.length,-1);if(h=n.elementAtHeight(a),i==null)break;if(h.type==ee.Text){if(i<0?h.ton.viewport.to)break;let u=n.docView.coordsAt(i<0?h.from:h.to,i>0?-1:1);if(u&&(i<0?u.top<=a+r:u.bottom>=a+r))break}let c=n.viewState.heightOracle.textHeight/2;a=i>0?h.bottom+c:h.top-c}if(n.viewport.from>=h.to||n.viewport.to<=h.from){if(t)return null;if(h.type==ee.Text){let c=Vf(n,s,h,o,l);return new we(c,c==h.from?1:-1)}}if(h.type!=ee.Text)return a<(h.top+h.bottom)/2?new we(h.from,1):new we(h.to,-1);let f=n.docView.lineAt(h.from,2);return(!f||f.length!=h.length)&&(f=n.docView.lineAt(h.from,-2)),new zs(n,o,l,n.textDirectionAt(h.from)).scanTile(f,h.from)}var zs=class{constructor(e,t,i,s){this.view=e,this.x=t,this.y=i,this.baseDir=s,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+s.from>1;t:if(r.has(p)){let m=i+Math.floor(Math.random()*d);for(let b=0;b1)){if(b.bottomthis.y)(!a||a.top>b.top)&&(a=b),C=-1;else{let T=b.left>this.x?this.x-b.left:b.right(d+d+p)/3)return this.y=l.bottom-1,this.scan(e,t);if(a&&a.top<(d+p+p)/3)return this.y=a.top+1,this.scan(e,t)}let u=(o?this.dirAt(e[h],1):this.baseDir)==$.LTR;return{i:h,after:this.x>(c.left+c.right)/2==u}}scanText(e,t){let i=[];for(let r=0;r{let o=i[r]-t,l=i[r+1]-t;return ki(e.dom,o,l).getClientRects()});return s.after?new we(i[s.i+1],-1):new we(i[s.i],1)}scanTile(e,t){if(!e.length)return new we(t,1);if(e.children.length==1){let l=e.children[0];if(l.isText())return this.scanText(l,t);if(l.isComposite())return this.scanTile(l,t)}let i=[t];for(let l=0,a=t;l{let a=e.children[l];return a.flags&48?null:(a.dom.nodeType==1?a.dom:ki(a.dom,0,a.length)).getClientRects()}),r=e.children[s.i],o=i[s.i];return r.isText()?this.scanText(r,o):r.isComposite()?this.scanTile(r,o):s.after?new we(i[s.i+1],-1):new we(o,1)}},Wt="\uFFFF",qs=class{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(j.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=Wt}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let s=e;;){this.findPointBefore(i,s);let r=this.text.length;this.readNode(s);let o=_.get(s),l=s.nextSibling;if(l==t){o?.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=_.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:hn(s))||hn(l)&&(s.nodeName!="BR"||o?.isWidget())&&this.text.length>r)&&!jf(l,t)&&this.lineBreak(),s=l}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,s=this.lineSeparator?null:/\r\n?|\n/g;;){let r=-1,o=1,l;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=s.exec(t))&&(r=l.index,o=l[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=r+o}}readNode(e){let t=_.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+($f(e,i.node,i.offset)?t:0))}};function $f(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:r,impreciseAnchor:o}=e.docView,l=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=Vl(e.docView.tile,t,i,0))){let a=r||o?[]:_f(e),h=new qs(a,e);h.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=h.text,this.newSel=Gf(a,this.bounds.from)}else{let a=e.observer.selectionRange,h=r&&r.node==a.focusNode&&r.offset==a.focusOffset||!As(e.contentDOM,a.focusNode)?l.main.head:e.docView.posFromDOM(a.focusNode,a.focusOffset),f=o&&o.node==a.anchorNode&&o.offset==a.anchorOffset||!As(e.contentDOM,a.anchorNode)?l.main.anchor:e.docView.posFromDOM(a.anchorNode,a.anchorOffset),c=e.viewport;if((S.ios||S.chrome)&&l.main.empty&&h!=f&&(c.from>0||c.to-1&&l.ranges.length>1)this.newSel=l.replaceRange(w.range(f,h));else if(e.lineWrapping&&f==h&&!(l.main.empty&&l.main.head==h)&&e.inputState.lastTouchTime>Date.now()-100){let u=e.coordsAtPos(h,-1),d=0;u&&(d=e.inputState.lastTouchY<=u.bottom?-1:1),this.newSel=w.create([w.cursor(h,d)])}else this.newSel=w.single(f,h)}}};function Vl(n,e,t,i){if(n.isComposite()){let s=-1,r=-1,o=-1,l=-1;for(let a=0,h=i,f=i;at)return Vl(c,e,t,h);if(u>=e&&s==-1&&(s=a,r=h),h>t&&c.dom.parentNode==n.dom){o=a,l=f;break}f=u,h=u+c.breakAfter}return{from:r,to:l<0?i+n.length:l,startDOM:(s?n.children[s-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function zl(n,e){let t,{newSel:i}=e,{state:s}=n,r=s.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:l,to:a}=e.bounds,h=r.from,f=null;(o===8||S.android&&e.text.length=l&&r.to<=a&&(e.typeOver||c!=e.text)&&c.slice(0,r.from-l)==e.text.slice(0,r.from-l)&&c.slice(r.to-l)==e.text.slice(u=e.text.length-(c.length-(r.to-l)))?t={from:r.from,to:r.to,insert:R.of(e.text.slice(r.from-l,u).split(Wt))}:(d=ql(c,e.text,h-l,f))&&(S.chrome&&o==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==Wt+Wt&&d.toB--,t={from:l+d.from,to:l+d.toA,insert:R.of(e.text.slice(d.from,d.toB).split(Wt))})}else i&&(!n.hasFocus&&s.facet(Je)||gn(i,r))&&(i=null);if(!t&&!i)return!1;if((S.mac||S.android)&&t&&t.from==t.to&&t.from==r.head-1&&/^\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&t.insert.length==2&&(i=w.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:R.of([t.insert.toString().replace("."," ")])}):s.doc.lineAt(r.from).toDate.now()-50?t={from:r.from,to:r.to,insert:s.toText(n.inputState.insertingText)}:S.chrome&&t&&t.from==t.to&&t.from==r.head&&t.insert.toString()==` - `&&n.lineWrapping&&(i&&(i=w.single(i.main.anchor-1,i.main.head-1)),t={from:r.from,to:r.to,insert:R.of([" "])}),t)return yr(n,t,i,o);if(i&&!gn(i,r)){let l=!1,a="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(l=!0),a=n.inputState.lastSelectionOrigin,a=="select.pointer"&&(i=Wl(s.facet(vi).map(h=>h(n)),i))),n.dispatch({selection:i,scrollIntoView:l,userEvent:a}),!0}else return!1}function yr(n,e,t,i=-1){if(S.ios&&n.inputState.flushIOSKey(e))return!0;let s=n.state.selection.main;if(S.android&&(e.to==s.to&&(e.from==s.from||e.from==s.from-1&&n.state.sliceDoc(e.from,s.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&$t(n.contentDOM,"Enter",13)||(e.from==s.from-1&&e.to==s.to&&e.insert.length==0||i==8&&e.insert.lengths.head)&&$t(n.contentDOM,"Backspace",8)||e.from==s.from&&e.to==s.to+1&&e.insert.length==0&&$t(n.contentDOM,"Delete",46)))return!0;let r=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=Uf(n,e,t));return n.state.facet(Ml).some(a=>a(n,e.from,e.to,r,l))||n.dispatch(l()),!0}function Uf(n,e,t){let i,s=n.state,r=s.selection.main,o=-1;if(e.from==e.to&&e.fromr.to){let a=e.fromc(n)),h,a);e.from==f&&(o=f)}if(o>-1)i={changes:e,selection:w.cursor(e.from+e.insert.length,-1)};else if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let a=r.frome.to?s.sliceDoc(e.to,r.to):"";i=s.replaceSelection(n.state.toText(a+e.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let a=s.changes(e),h=t&&t.main.to<=a.newLength?t.main:void 0;if(s.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=r.to+10&&e.to>=r.to-10){let f=n.state.sliceDoc(e.from,e.to),c,u=t&&Fl(n,t.main.head);if(u){let p=e.insert.length-(e.to-e.from);c={from:u.from,to:u.to-p}}else c=n.state.doc.lineAt(r.head);let d=r.to-e.to;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:a,range:h||p.map(a)};let g=p.to-d,m=g-f.length;if(n.state.sliceDoc(m,g)!=f||g>=c.from&&m<=c.to)return{range:p};let b=s.changes({from:m,to:g,insert:e.insert}),C=p.to-r.to;return{changes:b,range:h?w.range(Math.max(0,h.anchor+C),Math.max(0,h.head+C)):p.map(b)}})}else i={changes:a,selection:h&&s.selection.replaceRange(h)}}let l="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=".compose",n.inputState.compositionFirstChange&&(l+=".start",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:l,scrollIntoView:!0})}function ql(n,e,t,i){let s=Math.min(n.length,e.length),r=0;for(;r0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,r-Math.min(o,l));t-=o+a-r}if(o=o?r-t:0;r-=a,l=r+(l-o),o=r}else if(l=l?r-t:0;r-=a,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}function _f(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return t&&(e.push(new pn(t,i)),(s!=t||r!=i)&&e.push(new pn(s,r))),e}function Gf(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?w.single(t+e,i+e):null}function gn(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}var $s=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,S.safari&&e.contentDOM.addEventListener("input",()=>null),S.gecko&&ac(e.contentDOM.ownerDocument)}handleEvent(e){!tc(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let s of i.observers)s(this.view,t);for(let s of i.handlers){if(t.defaultPrevented)break;if(s(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=Jf(e),i=this.handlers,s=this.view.contentDOM;for(let r in t)if(r!="scroll"){let o=!t[r].handlers.length,l=i[r];l&&o!=!l.handlers.length&&(s.removeEventListener(r,this.handleEvent),l=null),l||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!="scroll"&&!t[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&$l.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),S.android&&S.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return S.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&!e.shiftKey&&((t=Kl.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||Yf.indexOf(e.key)>-1&&e.ctrlKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:S.safari&&!S.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function qo(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(s){Me(t.state,s)}}}function Jf(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let l in r){let a=r[l];a&&t(l).handlers.push(qo(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(qo(i.value,a))}}for(let i in Oe)t(i).handlers.push(Oe[i]);for(let i in he)t(i).observers.push(he[i]);return e}var Kl=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],Yf="dthko",$l=[16,17,18,20,91,92,224,225],Ji=6;function Yi(n){return Math.max(0,n)*.7+8}function Xf(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}var js=class{constructor(e,t,i,s){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=ul(e.contentDOM),this.atoms=e.state.facet(vi).map(o=>o(e));let r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(j.allowMultipleSelections)&&Qf(e,t),this.dragging=ec(e,t)&&_l(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&Xf(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,s=0,r=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=Nl(this.view);e.clientX-a.left<=s+Ji?t=-Yi(s-e.clientX):e.clientX+a.right>=o-Ji&&(t=Yi(e.clientX-o)),e.clientY-a.top<=r+Ji?i=-Yi(r-e.clientY):e.clientY+a.bottom>=l-Ji&&(i=Yi(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=Wl(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function Qf(n,e){let t=n.state.facet(vl);return t.length?t[0](e):S.mac?e.metaKey:e.ctrlKey}function Zf(n,e){let t=n.state.facet(Sl);return t.length?t[0](e):S.mac?!e.altKey:!e.ctrlKey}function ec(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=xi(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function tc(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=_.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}var Oe=Object.create(null),he=Object.create(null),jl=S.ie&&S.ie_version<15||S.ios&&S.webkit_version<604;function ic(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Ul(n,t.value)},50)}function Cn(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Ul(n,e){e=Cn(n.state,dr,e);let{state:t}=n,i,s=1,r=t.toText(e),o=r.lines==t.selection.ranges.length;if(Us!=null&&t.selection.ranges.every(a=>a.empty)&&Us==r.toString()){let a=-1;i=t.changeByRange(h=>{let f=t.doc.lineAt(h.from);if(f.from==a)return{range:h};a=f.from;let c=t.toText((o?r.line(s++).text:e)+t.lineBreak);return{changes:{from:f.from,insert:c},range:w.cursor(h.from+c.length)}})}else o?i=t.changeByRange(a=>{let h=r.line(s++);return{changes:{from:a.from,to:a.to,insert:h.text},range:w.cursor(a.from+h.length)}}):i=t.replaceSelection(r);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}he.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};he.wheel=he.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};Oe.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);he.touchstart=(n,e)=>{let t=n.inputState,i=e.targetTouches[0];t.lastTouchTime=Date.now(),i&&(t.lastTouchX=i.clientX,t.lastTouchY=i.clientY),t.setSelectionOrigin("select.pointer")};he.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};Oe.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(Cl))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=sc(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new js(n,e,t,i)),i&&n.observer.ignore(()=>{dl(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(e),s.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function Ko(n,e,t,i){if(i==1)return w.cursor(e,t);if(i==2)return Wf(n.state,e,t);{let s=n.docView.lineAt(e,t),r=n.state.doc.lineAt(s?s.posAtEnd:e),o=s?s.posAtStart:r.from,l=s?s.posAtEnd:r.to;return lDate.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(jo+1)%3:1}function sc(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=_l(e),s=n.state.selection;return{update(r){r.docChanged&&(t.pos=r.changes.mapPos(t.pos),s=s.map(r.changes))},get(r,o,l){let a=n.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),h,f=Ko(n,a.pos,a.assoc,i);if(t.pos!=a.pos&&!o){let c=Ko(n,t.pos,t.assoc,i),u=Math.min(c.from,f.from),d=Math.max(c.to,f.to);f=u1&&(h=rc(s,a.pos))?h:l?s.addRange(f):w.create([f])}}}function rc(n,e){for(let t=0;t=e)return w.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}Oe.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let s=n.docView.tile.nearest(e.target);if(s&&s.isWidget()){let r=s.posAtStart,o=r+s.length;(r>=t.to||o<=t.from)&&(t=w.range(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",Cn(n.state,pr,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Oe.dragend=n=>(n.inputState.draggedContent=null,!1);function _o(n,e,t,i){if(t=Cn(n.state,dr,t),!t)return;let s=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&Zf(n,e)?{from:r.from,to:r.to}:null,l={from:s,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(s,-1),head:a.mapPos(s,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}Oe.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),s=0,r=()=>{++s==t.length&&_o(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),r()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return _o(n,e,i,!0),!0}return!1};Oe.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=jl?null:e.clipboardData;return t?(Ul(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(ic(n),!1)};function oc(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function lc(n){let e=[],t=[],i=!1;for(let s of n.selection.ranges)s.empty||(e.push(n.sliceDoc(s.from,s.to)),t.push(s));if(!e.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:Cn(n,pr,e.join(n.lineBreak)),ranges:t,linewise:i}}var Us=null;Oe.copy=Oe.cut=(n,e)=>{if(!fi(n.contentDOM,n.observer.selectionRange))return!1;let{text:t,ranges:i,linewise:s}=lc(n.state);if(!t&&!s)return!1;Us=s?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let r=jl?null:e.clipboardData;return r?(r.clearData(),r.setData("text/plain",t),!0):(oc(n,t),!1)};var Gl=me.define();function Jl(n,e){let t=[];for(let i of n.facet(Tl)){let s=i(n,e);s&&t.push(s)}return t.length?n.update({effects:t,annotations:Gl.of(!0)}):null}function Yl(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=Jl(n.state,e);t?n.dispatch(t):n.update([])}},10)}he.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),Yl(n)};he.blur=n=>{n.observer.clearSelectionRange(),Yl(n)};he.compositionstart=he.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};he.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,S.chrome&&S.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};he.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};Oe.beforeinput=(n,e)=>{var t,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&n.observer.editContext){let r=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(r&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return yr(n,{from:a,to:h,insert:n.state.toText(r)},null),!0}}let s;if(S.chrome&&S.android&&(s=Kl.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key=="Backspace"||s.key=="Delete")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return S.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),S.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>he.compositionend(n,e),20),!1};var Go=new Set;function ac(n){Go.has(n)||(Go.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}var Jo=["pre-wrap","normal","pre-line","break-spaces"],Jt=!1;function Yo(){Jt=!1}var _s=class{constructor(e){this.lineWrapping=e,this.doc=R.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return Jo.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=l||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=s,this.lineLength=r,a){this.heightSamples={};for(let h=0;h0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>nn&&(Jt=!0),this.height=e)}replace(e,t,i){return n.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,s){let r=this,o=i.doc;for(let l=s.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:f,toB:c}=s[l],u=r.lineAt(a,K.ByPosNoHeight,i.setDoc(t),0,0),d=u.to>=h?u:r.lineAt(h,K.ByPosNoHeight,i,0,0);for(c+=d.to-h,h=d.to;l>0&&u.from<=s[l-1].toA;)a=s[l-1].fromA,f=s[l-1].fromB,l--,ar*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,s-=l.size}else if(r>s*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,r-=l.size}else break;else if(s=r&&o(this.lineAt(0,K.ByPos,i,s,r))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more&&this.setMeasuredHeight(s),this.outdated=!1,this}toString(){return`block(${this.length})`}},be=class n extends yn{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new Ae(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let s=i[0];return i.length==1&&(s instanceof n||s instanceof tt&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof tt?s=new n(s.length,this.height,this.spaceAbove):s.height=this.height,this.outdated||(s.outdated=!1),s):ue.of(i)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more?this.setMeasuredHeight(s):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},tt=class n extends ue{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*r);o=a/r,this.length>r+1&&(l=(this.height-a)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:l}}blockAt(e,t,i,s){let{firstLine:r,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,s);if(t.lineWrapping){let h=s+(e0){let r=i[i.length-1];r instanceof n?i[i.length-1]=new n(r.length+s):i.push(null,new n(s-1))}if(e>0){let r=i[0];r instanceof n?i[0]=new n(e+r.length):i.unshift(new n(e-1),null)}return ue.of(i)}decomposeLeft(e,t){t.push(new n(e-1),null)}decomposeRight(e,t){t.push(null,new n(this.length-e-1))}updateHeight(e,t=0,i=!1,s){let r=t+this.length;if(s&&s.from<=t+this.length&&s.more){let o=[],l=Math.max(t,s.from),a=-1;for(s.from>t&&o.push(new n(s.from-t-1).updateHeight(e,t));l<=r&&s.more;){let f=e.doc.lineAt(l).length;o.length&&o.push(null);let c=s.heights[s.index++],u=0;c<0&&(u=-c,c=s.heights[s.index++]),a==-1?a=c:Math.abs(c-a)>=nn&&(a=-2);let d=new be(f,c,u);d.outdated=!1,o.push(d),l+=f+1}l<=r&&o.push(null,new n(r-l).updateHeight(e,l));let h=ue.of(o);return(a<0||Math.abs(h.height-this.height)>=nn||Math.abs(a-this.heightMetrics(e,t).perLine)>=nn)&&(Jt=!0),mn(this,h)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},Js=class extends ue{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,s){let r=i+this.left.height;return el))return h;let f=t==K.ByPosNoHeight?K.ByPosNoHeight:K.ByPos;return a?h.join(this.right.lineAt(l,f,i,o,l)):this.left.lineAt(l,f,i,s,r).join(h)}forEachLine(e,t,i,s,r,o){let l=s+this.left.height,a=r+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,l,a,o);else{let h=this.lineAt(a,K.ByPos,i,s,r);e=e&&h.from<=t&&o(h),t>h.to&&this.right.forEachLine(h.to+1,t,i,l,a,o)}}replace(e,t,i){let s=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-s,t-s,i));let r=[];e>0&&this.decomposeLeft(e,r);let o=r.length;for(let l of i)r.push(l);if(e>0&&Xo(r,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,s=i+this.break;if(e>=s)return this.right.decomposeRight(e-s,t);e2*t.size||t.size>2*e.size?ue.of(this.break?[e,null,t]:[e,t]):(this.left=mn(this.left,e),this.right=mn(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,s){let{left:r,right:o}=this,l=t+r.length+this.break,a=null;return s&&s.from<=t+r.length&&s.more?a=r=r.updateHeight(e,t,i,s):r.updateHeight(e,t,i),s&&s.from<=l+o.length&&s.more?a=o=o.updateHeight(e,l,i,s):o.updateHeight(e,l,i),a?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function Xo(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof tt&&(i=n[e+1])instanceof tt&&n.splice(e-1,3,new tt(t.length+1+i.length))}var fc=5,Ys=class n{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof be?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new be(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=fc)&&this.addLineDeco(s,r,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new be(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new tt(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof be)return e;let t=new be(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,e),s.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof be)&&!this.isCovered?this.nodes.push(new be(0,-1,0)):(this.writtenTof.clientHeight||f.scrollWidth>f.clientWidth)&&c.overflow!="visible"){let u=f.getBoundingClientRect();r=Math.max(r,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?s.innerHeight:a,u.bottom)}h=c.position=="absolute"||c.position=="fixed"?f.offsetParent:f.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:r-t.left,right:Math.max(r,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function dc(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function pc(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}var mi=class{constructor(e,t,i,s){this.from=e,this.to=t,this.size=i,this.displaySize=s}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof s!="function"&&s.class=="cm-lineWrapping");this.heightOracle=new _s(i),this.stateDeco=Zo(t),this.heightMap=ue.empty().applyChanges(this.stateDeco,R.empty,this.heightOracle.setDoc(t.doc),[new Te(0,0,0,t.doc.length)]);for(let s=0;s<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());s++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=z.set(this.lineGaps.map(s=>s.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let s=i?t.head:t.anchor;if(!e.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);e.push(new zt(r,o))}}return this.viewports=e.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?Qo:new Zs(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(hi(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=Zo(this.state);let s=e.changedRanges,r=Te.extendWithRanges(s,cc(i,this.stateDeco,e?e.changes:se.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);Yo(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||Jt)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(h||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(Ol)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,i=window.getComputedStyle(t),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?$.RTL:$.LTR;let o=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent==="refresh",l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,f=0;if(l.width&&l.height){let{scaleX:A,scaleY:v}=cl(t,l);(A>.005&&Math.abs(this.scaleX-A)>.005||v>.005&&Math.abs(this.scaleY-v)>.005)&&(this.scaleX=A,this.scaleY=v,h|=16,o=a=!0)}let c=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=c||this.paddingBottom!=u)&&(this.paddingTop=c,this.paddingBottom=u,h|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(s.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,h|=16);let d=ul(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=pl(this.scrollParent||e.win);let g=(this.printing?pc:uc)(t,this.paddingTop),m=g.top-this.pixelViewport.top,b=g.bottom-this.pixelViewport.bottom;this.pixelViewport=g;let C=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(C!=this.inView&&(this.inView=C,C&&(a=!0)),!this.inView&&!this.scrollTarget&&!dc(e.dom))return 0;let T=l.width;if((this.contentDOMWidth!=T||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,h|=16),a){let A=e.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(A)&&(o=!0),o||s.lineWrapping&&Math.abs(T-this.contentDOMWidth)>s.charWidth){let{lineHeight:v,charWidth:k,textHeight:I}=e.docView.measureTextSize();o=v>0&&s.refresh(r,v,k,I,Math.max(5,T/k),A),o&&(e.docView.minWidth=0,h|=16)}m>0&&b>0?f=Math.max(m,b):m<0&&b<0&&(f=Math.min(m,b)),Yo();for(let v of this.viewports){let k=v.from==this.viewport.from?A:e.docView.measureVisibleLineHeights(v);this.heightMap=(o?ue.empty().applyChanges(this.stateDeco,R.empty,this.heightOracle,[new Te(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new Gs(v.from,k))}Jt&&(h|=2)}let P=!this.viewportIsAppropriate(this.viewport,f)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return P&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(f,this.scrollTarget),h|=this.updateForViewport()),(h&2||P)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new zt(s.lineAt(o-i*1e3,K.ByHeight,r,0,0).from,s.lineAt(l+(1-i)*1e3,K.ByHeight,r,0,0).to);if(t){let{head:h}=t.range;if(ha.to){let f=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),c=s.lineAt(h,K.ByPos,r,0,0),u;t.y=="center"?u=(c.top+c.bottom)/2-f/2:t.y=="start"||t.y=="nearest"&&h=l+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r>1,o=s<<1;if(this.defaultTextDirection!=$.LTR&&!i)return[];let l=[],a=(f,c,u,d)=>{if(c-ff&&bb.from>=u.from&&b.to<=u.to&&Math.abs(b.from-f)b.fromC));if(!m){if(cT.from<=c&&T.to>=c)){let T=t.moveToLineBoundary(w.cursor(c),!1,!0).head;T>f&&(c=T)}let b=this.gapSize(u,f,c,d),C=i||b<2e6?b:2e6;m=new mi(f,c,b,C)}l.push(m)},h=f=>{if(f.length2e6)for(let v of e)v.from>=f.from&&v.fromf.from&&a(f.from,d,f,c),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];F.spans(t,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||hi(this.heightMap.lineAt(e,K.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||hi(this.heightMap.lineAt(this.scaler.fromDOM(e),K.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return hi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},zt=class{constructor(e,t){this.from=e,this.to=t}};function gc(n,e,t){let i=[],s=n,r=0;return F.spans(t,n,e,{span(){},point(o,l){o>s&&(i.push({from:s,to:o}),r+=o-s),s=l}},20),s=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let s=0;;s++){let{from:r,to:o}=e[s],l=o-r;if(i<=l)return r+i;i-=l}}function Qi(n,e){let t=0;for(let{from:i,to:s}of n.ranges){if(e<=s){t+=e-i;break}t+=s-i}return t/n.total}function mc(n,e){for(let t of n)if(e(t))return t}var Qo={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function Zo(n){let e=n.facet(Sn).filter(i=>typeof i!="function"),t=n.facet(mr).filter(i=>typeof i!="function");return t.length&&e.push(F.join(t)),e}var Zs=class n{constructor(e,t,i){let s=0,r=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=t.lineAt(l,K.ByPos,e,0,0).top,f=t.lineAt(a,K.ByPos,e,0,0).bottom;return s+=f-h,{from:l,to:a,top:h,bottom:f,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(t.height-s);for(let l of this.viewports)l.domTop=o+(l.top-r)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),r=l.bottom}toDOM(e){for(let t=0,i=0,s=0;;t++){let r=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}};function hi(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new Ae(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(s=>hi(s,e)):n._content)}var Zi=M.define({combine:n=>n.join(" ")}),er=M.define({combine:n=>n.indexOf(!0)>-1}),tr=ye.newName(),Xl=ye.newName(),Ql=ye.newName(),Zl={"&light":"."+Xl,"&dark":"."+Ql};function ir(n,e,t){return new ye(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,s=>{if(s=="&")return n;if(!t||!t[s])throw new RangeError(`Unsupported selector: ${s}`);return t[s]}):n+" "+i}})}var yc=ir("."+tr,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Zl),bc={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},ws=S.ie&&S.ie_version<=11,nr=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new Ms,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(S.ie&&S.ie_version<=11||S.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&S.android&&e.constructor.EDIT_CONTEXT!==!1&&!(S.chrome&&S.chrome_version<126)&&(this.editContext=new sr(e),e.state.facet(Je)&&(e.contentDOM.editContext=this.editContext.editContext)),ws&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(Je)?i.root.activeElement!=this.dom:!fi(this.dom,s))return;let r=s.anchorNode&&i.docView.tile.nearest(s.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(S.ie&&S.ie_version<=11||S.android&&S.chrome)&&!i.state.selection.main.empty&&s.focusNode&&ci(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=xi(e.root);if(!t)return!1;let i=S.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&wc(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let s=fi(this.dom,i);return s&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&$t(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,s=!1;for(let r of e){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:s}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),s=this.selectionChanged&&fi(this.dom,this.selectionRange);if(e<0&&!s)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new Ks(this.view,e,t,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,s=zl(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!gn(this.view.state.selection,t.newSel.main))&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let i=el(t,e.previousSibling||e.target.previousSibling,-1),s=el(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:s?t.posBefore(s):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(Je)!=e.state.facet(Je)&&(e.view.contentDOM.editContext=e.state.facet(Je)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function el(n,e,t){for(;e;){let i=_.get(e);if(i&&i.parent==n)return i;let s=e.parentNode;e=s!=n.dom?s:t>0?e.nextSibling:e.previousSibling}return null}function tl(n,e){let t=e.startContainer,i=e.startOffset,s=e.endContainer,r=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return ci(o.node,o.offset,s,r)&&([t,i,s,r]=[s,r,t,i]),{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}}function wc(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return tl(n,s)}let t=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?tl(n,t):null}var sr=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let s=e.state.selection.main,{anchor:r,head:o}=s,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h=a-l>i.text.length;l==this.from&&rthis.to&&(a=r);let f=ql(e.state.sliceDoc(l,a),i.text,(h?s.from:s.to)-l,h?"end":null);if(!f){let u=w.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));gn(u,s)||e.dispatch({selection:u,userEvent:"select"});return}let c={from:f.from+l,to:f.toA+l,insert:R.of(i.text.slice(f.from,f.toB).split(` -`))};if((S.mac||S.android)&&c.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(c={from:l,to:a,insert:R.of([i.text.replace("."," ")])}),this.pendingContextChange=c,!e.state.readOnly){let u=this.to-this.from+(c.to-c.from+c.insert.length);yr(e,c,w.single(this.toEditorPos(i.selectionStart,u),this.toEditorPos(i.selectionEnd,u)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),c.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,l=r.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(r.rangeStart),h=this.toEditorPos(r.rangeEnd);if(a{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let s=xi(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,s=this.pendingContextChange;return e.changes.iterChanges((r,o,l,a,h)=>{if(i)return;let f=h.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(h)){s=this.pendingContextChange=null,t+=f,this.to+=f;return}else s=null,this.revertPending(e.state);if(r+=t,o+=t,o<=this.from)this.from+=f,this.to+=f;else if(rthis.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),h.toString()),this.to+=f}t+=f}),s&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(s=>!s.isUserEvent("input.type")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),s=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},D=class n{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=e.root||df(e.parent)||document,this.viewState=new bn(this,e.state||j.create(e)),e.scrollTo&&e.scrollTo.is(Gi)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Vt).map(s=>new di(s));for(let s of this.plugins)s.update(this);this.observer=new nr(this),this.inputState=new $s(this),this.inputState.ensureHandlers(this.plugins),this.docView=new dn(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof X?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,s,r=this.state;for(let u of e){if(u.startState!=r)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");r=u.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,l=0,a=null;e.some(u=>u.annotation(Gl))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=Jl(r,o),a||(l=1));let h=this.observer.delayedAndroidKey,f=null;if(h?(this.observer.clearDelayedAndroidKey(),f=this.observer.readChange(),(f&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(f=null)):this.observer.clear(),r.facet(j.phrases)!=this.state.facet(j.phrases))return this.setState(r);s=cn.create(this,r,e),s.flags|=l;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let u of e){if(c&&(c=c.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection,{x:p,y:g}=this.state.facet(n.cursorScrollMargin);c=new ui(d.empty?d:w.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",g,p)}for(let d of u.effects)d.is(Gi)&&(c=d.value.clip(this.state))}this.viewState.update(s,c),this.bidiCache=wn.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),t=this.docView.update(s),this.state.facet(ai)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(u=>u.isUserEvent("select.pointer")))}finally{this.updateState=0}if(s.startState.facet(Zi)!=s.state.facet(Zi)&&(this.viewState.mustMeasureContent=!0),(t||i||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!s.empty)for(let u of this.state.facet(Bs))try{u(s)}catch(d){Me(this.state,d,"update listener")}(a||f)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),f&&!zl(this,f)&&h.force&&$t(this.contentDOM,h.key,h.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new bn(this,e),this.plugins=e.facet(Vt).map(i=>new di(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new dn(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Vt),i=e.state.facet(Vt);if(t!=i){let s=[];for(let r of i){let o=t.indexOf(r);if(o<0)s.push(new di(r));else{let l=this.plugins[o];l.mustUpdate=e,s.push(l)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=e;for(let s=0;s-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.viewState.scrollParent,s=this.viewState.getScrollOffset(),{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(pl(i||this.win))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure();if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let f=h.map(d=>{try{return d.read(this)}catch(p){return Me(this.state,p),il}}),c=cn.create(this,this.state,[]),u=!1;c.flags|=a,t?t.flags|=a:t=c,this.updateState=2,c.empty||(this.updatePlugins(c),this.inputState.update(c),this.updateAttrs(),u=this.docView.update(c),u&&this.docViewUpdate());for(let d=0;d1||p<-1)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){s=s+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(Bs))l(t)}get themeClasses(){return tr+" "+(this.state.facet(er)?Ql:Xl)+" "+this.state.facet(Zi)}updateAttrs(){let e=nl(this,Ll,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(Je)?"true":"false",class:"cm-content",style:`${S.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),nl(this,gr,t);let i=this.observer.ignore(()=>{let s=Io(this.contentDOM,this.contentAttrs,t),r=Io(this.dom,this.editorAttrs,e);return s||r});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let s of i.effects)if(s.is(n.announce)){t&&(this.announceDOM.textContent=""),t=!1;let r=this.announceDOM.appendChild(document.createElement("div"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(ai);let e=this.state.facet(n.cspNonce);ye.mount(this.root,this.styleModules.concat(yc).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return bs(this,e,zo(this,e,t,i))}moveByGroup(e,t){return bs(this,e,zo(this,e,t,i=>qf(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),s=this.textDirectionAt(e.from),r=i[t?i.length-1:0];return w.cursor(r.side(t,s)+e.from,r.forward(!t,s)?1:-1)}moveToLineBoundary(e,t,i=!0){return zf(this,e,t,i)}moveVertically(e,t,i){return bs(this,e,Kf(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=Vs(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),Vs(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(e),r=this.bidiSpans(s),o=r[xe.find(r,e-s.from,-1,t)];return fn(i,o.dir==$.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Dl)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>xc)return xl(e.length);let t=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||wl(r.isolates,i=Fo(this,e))))return r.order;i||(i=Fo(this,e));let s=kf(e.text,t,i);return this.bidiCache.push(new wn(e.from,e.to,t,i,!0,s)),s}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||S.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{dl(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var i,s,r,o;return Gi.of(new ui(typeof e=="number"?w.cursor(e):e,(i=t.y)!==null&&i!==void 0?i:"nearest",(s=t.x)!==null&&s!==void 0?s:"nearest",(r=t.yMargin)!==null&&r!==void 0?r:5,(o=t.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return Gi.of(new ui(w.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return De.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return De.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=ye.newName(),s=[Zi.of(i),ai.of(ir(`.${i}`,e))];return t&&t.dark&&s.push(er.of(!0)),s}static baseTheme(e){return Ht.lowest(ai.of(ir("."+tr,e,Zl)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),s=i&&_.get(i)||_.get(e);return((t=s?.root)===null||t===void 0?void 0:t.view)||null}};D.styleModule=ai;D.inputHandler=Ml;D.clipboardInputFilter=dr;D.clipboardOutputFilter=pr;D.scrollHandler=Bl;D.focusChangeEffect=Tl;D.perLineTextDirection=Dl;D.exceptionSink=Al;D.updateListener=Bs;D.editable=Je;D.mouseSelectionStyle=Cl;D.dragMovesSelection=Sl;D.clickAddsSelectionRange=vl;D.decorations=Sn;D.blockWrappers=Rl;D.outerDecorations=mr;D.atomicRanges=vi;D.bidiIsolatedRanges=Pl;D.cursorScrollMargin=M.define({combine:n=>{let e=5,t=5;for(let i of n)typeof i=="number"?e=t=i:{x:e,y:t}=i;return{x:e,y:t}}});D.scrollMargins=Il;D.darkTheme=er;D.cspNonce=M.define({combine:n=>n.length?n[0]:""});D.contentAttributes=gr;D.editorAttributes=Ll;D.lineWrapping=D.contentAttributes.of({class:"cm-lineWrapping"});D.announce=U.define();var xc=4096,il={},wn=class n{constructor(e,t,i,s,r,o){this.from=e,this.to=t,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(e,t){if(t.empty&&!e.some(r=>r.fresh))return e;let i=[],s=e.length?e[e.length-1].dir:$.LTR;for(let r=Math.max(0,e.length-10);r=0;s--){let r=i[s],o=typeof r=="function"?r(n):r;o&&fr(o,t)}return t}var kc=S.mac?"mac":S.windows?"win":S.linux?"linux":"key";function vc(n,e){let t=n.split(/-(?!$)/),i=t[t.length-1];i=="Space"&&(i=" ");let s,r,o,l;for(let a=0;ai.concat(s),[]))),t}var et=null,Ac=4e3;function Mc(n,e=kc){let t=Object.create(null),i=Object.create(null),s=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},r=(o,l,a,h,f)=>{var c,u;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(b=>vc(b,e));for(let b=1;b{let P=et={view:T,prefix:C,scope:o};return setTimeout(()=>{et==P&&(et=null)},Ac),!0}]})}let g=p.join(" ");s(g,!1);let m=d[g]||(d[g]={preventDefault:!1,stopPropagation:!1,run:((u=(c=d._any)===null||c===void 0?void 0:c.run)===null||u===void 0?void 0:u.slice())||[]});a&&m.run.push(a),h&&(m.preventDefault=!0),f&&(m.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let h of l){let f=t[h]||(t[h]=Object.create(null));f._any||(f._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:c}=o;for(let u in f)f[u].run.push(d=>c(d,rr))}let a=o[e]||o.key;if(a)for(let h of l)r(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(h,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}var rr=null;function Tc(n,e,t,i){rr=e;let s=Eo(e),r=go(s,0),o=mo(r)==s.length&&s!=" ",l="",a=!1,h=!1,f=!1;et&&et.view==t&&et.scope==i&&(l=et.prefix+" ",$l.indexOf(e.keyCode)<0&&(h=!0,et=null));let c=new Set,u=m=>{if(m){for(let b of m.run)if(!c.has(b)&&(c.add(b),b(t)))return m.stopPropagation&&(f=!0),!0;m.preventDefault&&(m.stopPropagation&&(f=!0),h=!0)}return!1},d=n[i],p,g;return d&&(u(d[l+en(s,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(S.windows&&e.ctrlKey&&e.altKey)&&!(S.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=Ge[e.keyCode])&&p!=s?(u(d[l+en(p,e,!0)])||e.shiftKey&&(g=Ft[e.keyCode])!=s&&g!=p&&u(d[l+en(g,e,!1)]))&&(a=!0):o&&e.shiftKey&&u(d[l+en(s,e,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&f&&e.stopPropagation(),rr=null,a}var xt=class n{constructor(e,t,i,s,r){this.className=e,this.left=t,this.top=i,this.width=s,this.height=r}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let s=e.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let r=ea(e);return[new n(t,s.left-r.left,s.top-r.top,null,s.bottom-s.top)]}else return Dc(e,t,i)}};function ea(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==$.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function rl(n,e,t,i){let s=n.coordsAtPos(e,t*2);if(!s)return i;let r=n.dom.getBoundingClientRect(),o=(s.top+s.bottom)/2,l=n.posAtCoords({x:r.left+1,y:o}),a=n.posAtCoords({x:r.right-1,y:o});return l==null||a==null?i:{from:Math.max(i.from,Math.min(l,a)),to:Math.min(i.to,Math.max(l,a))}}function Dc(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),s=Math.min(t.to,n.viewport.to),r=n.textDirection==$.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=ea(n),h=o.querySelector(".cm-line"),f=h&&window.getComputedStyle(h),c=l.left+(f?parseInt(f.paddingLeft)+Math.min(0,parseInt(f.textIndent)):0),u=l.right-(f?parseInt(f.paddingRight):0),d=Ws(n,i,1),p=Ws(n,s,-1),g=d.type==ee.Text?d:null,m=p.type==ee.Text?p:null;if(g&&(n.lineWrapping||d.widgetLineBreaks)&&(g=rl(n,i,1,g)),m&&(n.lineWrapping||p.widgetLineBreaks)&&(m=rl(n,s,-1,m)),g&&m&&g.from==m.from&&g.to==m.to)return C(T(t.from,t.to,g));{let A=g?T(t.from,null,g):P(d,!1),v=m?T(null,t.to,m):P(p,!0),k=[];return(g||d).to<(m||p).from-(g&&m?1:0)||d.widgetLineBreaks>1&&A.bottom+n.defaultLineHeight/2O&&N.from=ne)break;pe>q&&E(Math.max(Z,q),A==null&&Z<=O,Math.min(pe,ne),v==null&&pe>=H,He.dir)}if(q=fe.to+1,q>=ne)break}return W.length==0&&E(O,A==null,H,v==null,n.textDirection),{top:I,bottom:L,horizontal:W}}function P(A,v){let k=l.top+(v?A.top:A.bottom);return{top:k,bottom:k,horizontal:[]}}}function Oc(n,e){return n.constructor==e.constructor&&n.eq(e)}var or=class{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(sn)!=e.state.facet(sn)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(sn);for(;t!Oc(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let s of e)s.update&&t&&s.constructor&&this.drawn[i].constructor&&s.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(s.draw(),t);for(;t;){let s=t.nextSibling;t.remove(),t=s}this.drawn=e,S.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},sn=M.define();function ta(n){return[De.define(e=>new or(e,n)),sn.of(n)]}var Yt=M.define({combine(n){return mt(n,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function ia(n={}){return[Yt.of(n),Bc,Ec,Lc,Ol.of(!0)]}function na(n){return n.startState.facet(Yt)!=n.state.facet(Yt)}var Bc=ta({above:!0,markers(n){let{state:e}=n,t=e.facet(Yt),i=[];for(let s of e.selection.ranges){let r=s==e.selection.main;if(s.empty||t.drawRangeCursor&&!(r&&S.ios&&t.iosSelectionHandles)){let o=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=s.empty?s:w.cursor(s.head,s.assoc);for(let a of xt.forRange(n,o,l))i.push(a)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=na(n);return t&&ol(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){ol(e.state,n)},class:"cm-cursorLayer"});function ol(n,e){e.style.animationDuration=n.facet(Yt).cursorBlinkRate+"ms"}var Ec=ta({above:!1,markers(n){let e=[],{main:t,ranges:i}=n.state.selection;for(let s of i)if(!s.empty)for(let r of xt.forRange(n,"cm-selectionBackground",s))e.push(r);if(S.ios&&!t.empty&&n.state.facet(Yt).iosSelectionHandles){for(let s of xt.forRange(n,"cm-selectionHandle cm-selectionHandle-start",w.cursor(t.from,1)))e.push(s);for(let s of xt.forRange(n,"cm-selectionHandle cm-selectionHandle-end",w.cursor(t.to,1)))e.push(s)}return e},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||na(n)},class:"cm-selectionLayer"}),Lc=Ht.highest(D.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}}));var cp=/x/.unicode!=null?"gu":"g";function sa(){return Pc}var Rc=z.line({class:"cm-activeLine"}),Pc=De.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let s=n.lineBlockAt(i.head);s.from>e&&(t.push(Rc.range(s.from)),e=s.from)}return z.set(t)}},{decorations:n=>n.decorations});var up=D.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:`${7*2}px`,position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}});var Be=class extends We{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};Be.prototype.elementClass="";Be.prototype.toDOM=void 0;Be.prototype.mapMode=le.TrackBefore;Be.prototype.startSide=Be.prototype.endSide=-1;Be.prototype.point=!0;var rn=M.define(),Ic=M.define();var on=M.define();var lr=M.define({combine:n=>n.some(e=>e)});function Nc(n){let e=[Hc];return n&&n.fixed===!1&&e.push(lr.of(!0)),e}var Hc=De.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(on).map(e=>new xn(n,e)),this.fixed=!n.state.facet(lr);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(lr)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=F.iter(this.view.state.facet(rn),this.view.viewport.from),i=[],s=this.gutters.map(r=>new hr(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let o=!0;for(let l of r.type)if(l.type==ee.Text&&o){ar(t,i,l.from);for(let a of s)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of s)a.widget(this.view,l)}else if(r.type==ee.Text){ar(t,i,r.from);for(let o of s)o.line(this.view,r,i)}else if(r.widget)for(let o of s)o.widget(this.view,r);for(let r of s)r.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(on),t=n.state.facet(on),i=n.docChanged||n.heightChanged||n.viewportChanged||!F.eq(n.startState.facet(rn),n.state.facet(rn),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let s of this.gutters)s.update(n)&&(i=!0);else{i=!0;let s=[];for(let r of t){let o=e.indexOf(r);o<0?s.push(new xn(this.view,r)):(this.gutters[o].update(n),s.push(this.gutters[o]))}for(let r of this.gutters)r.dom.remove(),s.indexOf(r)<0&&r.destroy();for(let r of s)r.config.side=="after"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=s}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>D.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,s=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==$.LTR?{left:i,right:s}:{right:i,left:s}})});function ll(n){return Array.isArray(n)?n:[n]}function ar(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}var hr=class{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=F.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:s}=this,r=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==s.elements.length){let l=new kn(e,o,r,i);s.elements.push(l),s.dom.appendChild(l.dom)}else s.elements[this.i].update(e,o,r,i);this.height=t.bottom,this.i++}line(e,t,i){let s=[];ar(this.cursor,s,t.from),i.length&&(s=s.concat(i));let r=this.gutter.config.lineMarker(e,t,s);r&&s.unshift(r);let o=this.gutter;s.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,s)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),s=i?[i]:null;for(let r of e.state.facet(Ic)){let o=r(e,t.widget,t);o&&(s||(s=[])).push(o)}s&&this.addElement(e,t,s)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}},xn=class{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,s=>{let r=s.target,o;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let a=r.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=s.clientY;let l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,s)&&s.preventDefault()});this.markers=ll(t.markers(e)),t.initialSpacer&&(this.spacer=new kn(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=ll(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let s=this.config.updateSpacer(this.spacer.markers[0],e);s!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[s])}let i=e.view.viewport;return!F.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},kn=class{constructor(e,t,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,s)}update(e,t,i,s){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),Fc(this.markers,s)||this.setMarkers(e,s)}setMarkers(e,t){let i="cm-gutterElement",s=this.dom.firstChild;for(let r=0,o=0;;){let l=o,a=rr(l,a,h)||o(l,a,h):o}return i}})}}),yi=class extends Be{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function xs(n,e){return n.state.facet(qt).formatNumber(e,n.state)}var zc=on.compute([qt],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(Wc)},lineMarker(e,t,i){return i.some(s=>s.toDOM)?null:new yi(xs(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let s of e.state.facet(Vc)){let r=s(e,t,i);if(r)return r}return null},lineMarkerChange:e=>e.startState.facet(qt)!=e.state.facet(qt),initialSpacer(e){return new yi(xs(e,al(e.state.doc.lines)))},updateSpacer(e,t){let i=xs(t.view,al(t.view.state.doc.lines));return i==e.number?e:new yi(i)},domEventHandlers:n.facet(qt).domEventHandlers,side:"before"}));function ra(n={}){return[qt.of(n),Nc(),zc]}function al(n){let e=9;for(;e{let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.head).from;s>t&&(t=s,e.push(qc.range(s)))}return F.of(e)});function oa(){return Kc}var $c=0,Si=class{constructor(e,t){this.from=e,this.to=t}},B=class{constructor(e={}){this.id=$c++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=oe.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}};B.closedBy=new B({deserialize:n=>n.split(" ")});B.openedBy=new B({deserialize:n=>n.split(" ")});B.group=new B({deserialize:n=>n.split(" ")});B.isolate=new B({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});B.contextHash=new B({perNode:!0});B.lookAhead=new B({perNode:!0});B.mounted=new B({perNode:!0});var At=class{constructor(e,t,i,s=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=s}static get(e){return e&&e.props&&e.props[B.mounted.id]}},jc=Object.create(null),oe=class n{constructor(e,t,i,s=0){this.name=e,this.props=t,this.id=i,this.flags=s}static define(e){let t=e.props&&e.props.length?Object.create(null):jc,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),s=new n(e.name||"",t,e.id,i);if(e.props){for(let r of e.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[r[0].id]=r[1]}}return s}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(B.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let s of i.split(" "))t[s]=e[i];return i=>{for(let s=i.prop(B.group),r=-1;r<(s?s.length:0);r++){let o=t[r<0?i.name:s[r]];if(o)return o}}}};oe.none=new oe("",Object.create(null),0,8);var Dn=class n{constructor(e){this.types=e;for(let t=0;t0;for(let a=this.cursor(o|J.IncludeAnonymous);;){let h=!1;if(a.from<=r&&a.to>=s&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Cr(oe.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,s)=>new n(this.type,t,i,s,this.propValues),e.makeTree||((t,i,s)=>new n(oe.none,t,i,s)))}static build(e){return _c(e)}};G.empty=new G(oe.none,[],[],0);var br=class n{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new n(this.buffer,this.index)}},st=class n{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return oe.none}toString(){let e=[];for(let t=0;t0));a=o[a+3]);return l}slice(e,t,i){let s=this.buffer,r=new Uint16Array(t-e),o=0;for(let l=e,a=0;l=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function Ci(n,e,t,i){for(var s;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?l.length:-1;e!=h;e+=t){let f=l[e],c=a[e]+o.from,u;if(!(!(r&J.EnterBracketed&&f instanceof G&&(u=At.get(f))&&!u.overlay&&u.bracketed&&i>=c&&i<=c+f.length)&&!fa(s,i,c,c+f.length))){if(f instanceof st){if(r&J.ExcludeBuffers)continue;let d=f.findChild(0,f.buffer.length,t,i-c,s);if(d>-1)return new Ai(new xr(o,f,e,c),null,d)}else if(r&J.IncludeAnonymous||!f.type.isAnonymous||Sr(f)){let d;if(!(r&J.IgnoreMounts)&&(d=At.get(f))&&!d.overlay)return new n(d.tree,c,e,o);let p=new n(f,c,e,o);return r&J.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?f.children.length-1:0,t,i,s,r)}}}if(r&J.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let s;if(!(i&J.IgnoreOverlays)&&(s=At.get(this._tree))&&s.overlay){let r=e-this.from,o=i&J.EnterBracketed&&s.bracketed;for(let{from:l,to:a}of s.overlay)if((t>0||o?l<=r:l=r:a>r))return new n(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function aa(n,e,t,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(t!=null){for(let o=!1;!o;)if(o=s.type.is(t),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(e)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function wr(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}var xr=class{constructor(e,t,i,s){this.parent=e,this.buffer=t,this.index=i,this.start=s}},Ai=class n extends On{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.context.start,i);return r<0?null:new n(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&J.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return r<0?null:new n(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new n(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new n(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];e.push(i.slice(s,r,o)),t.push(0)}return new G(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function ca(n){if(!n.length)return null;let e=0,t=n[0];for(let r=1;rt.from||o.to=e){let l=new qe(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(Ci(l,e,t,!1))}}return s?ca(s):i}var Mi=class{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~J.EnterBracketed,e instanceof qe)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:s}=this.buffer;return this.type=t||s.set.types[s.buffer[e]],this.from=i+s.buffer[e+1],this.to=i+s.buffer[e+2],!0}yield(e){return e?e instanceof qe?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&J.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&J.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&J.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(t.findChild(s,this.index,-1,0,4))}else{let s=t.buffer[this.index+3];if(s<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:s}=this;if(s){if(e>0){if(this.index-1)for(let r=t+e,o=e<0?-1:i._tree.children.length;r!=o;r+=e){let l=i._tree.children[r];if(this.mode&J.IncludeAnonymous||l instanceof st||!l.type.isAnonymous||Sr(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==s){if(s==this.index)return o;t=o,i=r+1;break e}s=this.stack[--r]}for(let s=i;s=0;r--){if(r<0)return wr(this._tree,e,s);let o=i[t.buffer[this.stack[r]]];if(!o.isAnonymous){if(e[s]&&e[s]!=o.name)return!1;s--}}return!0}};function Sr(n){return n.children.some(e=>e instanceof st||!e.type.isAnonymous||Sr(e))}function _c(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:s=1024,reused:r=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new br(t,t.length):t,a=i.types,h=0,f=0;function c(A,v,k,I,L,W){let{id:E,start:O,end:H,size:N}=l,q=f,ne=h;if(N<0)if(l.next(),N==-1){let Ue=r[E];k.push(Ue),I.push(O-A);return}else if(N==-3){h=E;return}else if(N==-4){f=E;return}else throw new RangeError(`Unrecognized record size: ${N}`);let fe=a[E],He,Z,pe=O-A;if(H-O<=s&&(Z=m(l.pos-v,L))){let Ue=new Uint16Array(Z.size-Z.skip),ge=l.pos-Z.size,Fe=Ue.length;for(;l.pos>ge;)Fe=b(Z.start,Ue,Fe);He=new st(Ue,H-Z.start,i),pe=Z.start-A}else{let Ue=l.pos-N;l.next();let ge=[],Fe=[],ht=E>=o?E:-1,Et=0,Ni=H;for(;l.pos>Ue;)ht>=0&&l.id==ht&&l.size>=0?(l.end<=Ni-s&&(p(ge,Fe,O,Et,l.end,Ni,ht,q,ne),Et=ge.length,Ni=l.end),l.next()):W>2500?u(O,Ue,ge,Fe):c(O,Ue,ge,Fe,ht,W+1);if(ht>=0&&Et>0&&Et-1&&Et>0){let eo=d(fe,ne);He=Cr(fe,ge,Fe,0,ge.length,0,H-O,eo,eo)}else He=g(fe,ge,Fe,H-O,q-H,ne)}k.push(He),I.push(pe)}function u(A,v,k,I){let L=[],W=0,E=-1;for(;l.pos>v;){let{id:O,start:H,end:N,size:q}=l;if(q>4)l.next();else{if(E>-1&&H=0;N-=3)O[q++]=L[N],O[q++]=L[N+1]-H,O[q++]=L[N+2]-H,O[q++]=q;k.push(new st(O,L[2]-H,i)),I.push(H-A)}}function d(A,v){return(k,I,L)=>{let W=0,E=k.length-1,O,H;if(E>=0&&(O=k[E])instanceof G){if(!E&&O.type==A&&O.length==L)return O;(H=O.prop(B.lookAhead))&&(W=I[E]+O.length+H)}return g(A,k,I,L,W,v)}}function p(A,v,k,I,L,W,E,O,H){let N=[],q=[];for(;A.length>I;)N.push(A.pop()),q.push(v.pop()+k-L);A.push(g(i.types[E],N,q,W-L,O-W,H)),v.push(L-k)}function g(A,v,k,I,L,W,E){if(W){let O=[B.contextHash,W];E=E?[O].concat(E):[O]}if(L>25){let O=[B.lookAhead,L];E=E?[O].concat(E):[O]}return new G(A,v,k,I,E)}function m(A,v){let k=l.fork(),I=0,L=0,W=0,E=k.end-s,O={size:0,start:0,skip:0};e:for(let H=k.pos-A;k.pos>H;){let N=k.size;if(k.id==v&&N>=0){O.size=I,O.start=L,O.skip=W,W+=4,I+=4,k.next();continue}let q=k.pos-N;if(N<0||q=o?4:0,fe=k.start;for(k.next();k.pos>q;){if(k.size<0)if(k.size==-3||k.size==-4)ne+=4;else break e;else k.id>=o&&(ne+=4);k.next()}L=fe,I+=N,W+=ne}return(v<0||I==A)&&(O.size=I,O.start=L,O.skip=W),O.size>4?O:void 0}function b(A,v,k){let{id:I,start:L,end:W,size:E}=l;if(l.next(),E>=0&&I4){let H=l.pos-(E-4);for(;l.pos>H;)k=b(A,v,k)}v[--k]=O,v[--k]=W-A,v[--k]=L-A,v[--k]=I}else E==-3?h=I:E==-4&&(f=I);return k}let C=[],T=[];for(;l.pos>0;)c(n.start||0,n.bufferStart||0,C,T,-1,0);let P=(e=n.length)!==null&&e!==void 0?e:C.length?T[0]+C[0].length:0;return new G(a[n.topID],C.reverse(),T.reverse(),P)}var ha=new WeakMap;function Tn(n,e){if(!n.isAnonymous||e instanceof st||e.type!=n)return 1;let t=ha.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof G)){t=1;break}t+=Tn(n,i)}ha.set(e,t)}return t}function Cr(n,e,t,i,s,r,o,l,a){let h=0;for(let p=i;p=f)break;v+=k}if(T==P+1){if(v>f){let k=p[P];d(k.children,k.positions,0,k.children.length,g[P]+C);continue}c.push(p[P])}else{let k=g[T-1]+p[T-1].length-A;c.push(Cr(n,p,g,P,T,A,k,null,a))}u.push(A+C-r)}}return d(e,t,i,s,0),(l||a)(c,u,o)}var Mt=class n{constructor(e,t,i,s,r=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let s=[new n(0,e.length,e,0,!1,i)];for(let r of t)r.to>e.length&&s.push(r);return s}static applyChanges(e,t,i=128){if(!t.length)return e;let s=[],r=1,o=e.length?e[0]:null;for(let l=0,a=0,h=0;;l++){let f=l=i)for(;o&&o.from=u.from||c<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,c)-h;u=d>=p?null:new n(d,p,u.tree,u.offset+h,l>0,!!f)}if(u&&s.push(u),o.to>c)break;o=rnew Si(s.from,s.to)):[new Si(0,0)]:[new Si(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let s=this.startParse(e,t,i);for(;;){let r=s.advance();if(r)return r}}},vr=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}};var bp=new B({perNode:!0});var Gc=0,Ee=class n{constructor(e,t,i,s){this.name=e,this.set=t,this.base=i,this.modified=s,this.id=Gc++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof n&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let s=new n(i,[],null,[]);if(s.set.push(s),t)for(let r of t.set)s.set.push(r);return s}static defineModifier(e){let t=new Rn(e);return i=>i.modified.indexOf(t)>-1?i:Rn.get(i.base||i,i.modified.concat(t).sort((s,r)=>s.id-r.id))}},Jc=0,Rn=class n{constructor(e){this.name=e,this.instances=[],this.id=Jc++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&Yc(t,l.modified));if(i)return i;let s=[],r=new Ee(e.name,s,e,t);for(let l of t)l.instances.push(r);let o=Xc(t);for(let l of e.set)if(!l.modified.length)for(let a of o)s.push(n.get(l,a));return r}};function Yc(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function Xc(n){let e=[[]];for(let t=0;ti.length-t.length)}function pa(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let s of t.split(" "))if(s){let r=[],o=2,l=s;for(let c=0;;){if(l=="..."&&c>0&&c+3==s.length){o=1;break}let u=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!u)throw new RangeError("Invalid path: "+s);if(r.push(u[0]=="*"?"":u[0][0]=='"'?JSON.parse(u[0]):u[0]),c+=u[0].length,c==s.length)break;let d=s[c++];if(c==s.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+s);l=s.slice(c)}let a=r.length-1,h=r[a];if(!h)throw new RangeError("Invalid path: "+s);let f=new Dt(i,o,a>0?r.slice(0,a):null);e[h]=f.sort(e[h])}}return ga.add(e)}var ga=new B({combine(n,e){let t,i,s;for(;n||e;){if(!n||e&&n.depth>=e.depth?(s=e,e=e.next):(s=n,n=n.next),t&&t.mode==s.mode&&!s.context&&!t.context)continue;let r=new Dt(s.tags,s.mode,s.context);t?t.next=r:i=r,t=r}return i}}),Dt=class{constructor(e,t,i,s){this.tags=e,this.mode=t,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=s;for(let l of r)for(let a of l.set){let h=t[a.id];if(h){o=o?o+" "+h:h;break}}return o},scope:i}}function Qc(n,e){let t=null;for(let i of n){let s=i.style(e);s&&(t=t?t+" "+s:s)}return t}function ma(n,e,t,i=0,s=n.length){let r=new Mr(i,Array.isArray(e)?e:[e],t);r.highlightRange(n.cursor(),i,s,"",r.highlighters),r.flush(s)}var Mr=class{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,s,r){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=s,f=Zc(e)||Dt.empty,c=Qc(r,f.tags);if(c&&(h&&(h+=" "),h+=c,f.mode==1&&(s+=(s?" ":"")+c)),this.startSpan(Math.max(t,l),h),f.opaque)return;let u=e.tree&&e.tree.prop(B.mounted);if(u&&u.overlay){let d=e.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(m=>!m.scope||m.scope(u.tree.type)),g=e.firstChild();for(let m=0,b=l;;m++){let C=m=T||!e.nextSibling())););if(!C||T>i)break;b=C.to+l,b>t&&(this.highlightRange(d.cursor(),Math.max(t,C.from+l),Math.min(i,b),"",p),this.startSpan(Math.min(i,b),h))}g&&e.parent()}else if(e.firstChild()){u&&(s="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,s,r),this.startSpan(Math.min(i,e.to),h)}while(e.nextSibling());e.parent()}}};function Zc(n){let e=n.type.prop(ga);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}var x=Ee.define,Bn=x(),rt=x(),ua=x(rt),da=x(rt),ot=x(),En=x(ot),Ar=x(ot),je=x(),Tt=x(je),Ke=x(),$e=x(),Tr=x(),Di=x(Tr),Ln=x(),y={comment:Bn,lineComment:x(Bn),blockComment:x(Bn),docComment:x(Bn),name:rt,variableName:x(rt),typeName:ua,tagName:x(ua),propertyName:da,attributeName:x(da),className:x(rt),labelName:x(rt),namespace:x(rt),macroName:x(rt),literal:ot,string:En,docString:x(En),character:x(En),attributeValue:x(En),number:Ar,integer:x(Ar),float:x(Ar),bool:x(ot),regexp:x(ot),escape:x(ot),color:x(ot),url:x(ot),keyword:Ke,self:x(Ke),null:x(Ke),atom:x(Ke),unit:x(Ke),modifier:x(Ke),operatorKeyword:x(Ke),controlKeyword:x(Ke),definitionKeyword:x(Ke),moduleKeyword:x(Ke),operator:$e,derefOperator:x($e),arithmeticOperator:x($e),logicOperator:x($e),bitwiseOperator:x($e),compareOperator:x($e),updateOperator:x($e),definitionOperator:x($e),typeOperator:x($e),controlOperator:x($e),punctuation:Tr,separator:x(Tr),bracket:Di,angleBracket:x(Di),squareBracket:x(Di),paren:x(Di),brace:x(Di),content:je,heading:Tt,heading1:x(Tt),heading2:x(Tt),heading3:x(Tt),heading4:x(Tt),heading5:x(Tt),heading6:x(Tt),contentSeparator:x(je),list:x(je),quote:x(je),emphasis:x(je),strong:x(je),link:x(je),monospace:x(je),strikethrough:x(je),inserted:x(),deleted:x(),changed:x(),invalid:x(),meta:Ln,documentMeta:x(Ln),annotation:x(Ln),processingInstruction:x(Ln),definition:Ee.defineModifier("definition"),constant:Ee.defineModifier("constant"),function:Ee.defineModifier("function"),standard:Ee.defineModifier("standard"),local:Ee.defineModifier("local"),special:Ee.defineModifier("special")};for(let n in y){let e=y[n];e instanceof Ee&&(e.name=n)}var kp=Dr([{tag:y.link,class:"tok-link"},{tag:y.heading,class:"tok-heading"},{tag:y.emphasis,class:"tok-emphasis"},{tag:y.strong,class:"tok-strong"},{tag:y.keyword,class:"tok-keyword"},{tag:y.atom,class:"tok-atom"},{tag:y.bool,class:"tok-bool"},{tag:y.url,class:"tok-url"},{tag:y.labelName,class:"tok-labelName"},{tag:y.inserted,class:"tok-inserted"},{tag:y.deleted,class:"tok-deleted"},{tag:y.literal,class:"tok-literal"},{tag:y.string,class:"tok-string"},{tag:y.number,class:"tok-number"},{tag:[y.regexp,y.escape,y.special(y.string)],class:"tok-string2"},{tag:y.variableName,class:"tok-variableName"},{tag:y.local(y.variableName),class:"tok-variableName tok-local"},{tag:y.definition(y.variableName),class:"tok-variableName tok-definition"},{tag:y.special(y.variableName),class:"tok-variableName2"},{tag:y.definition(y.propertyName),class:"tok-propertyName tok-definition"},{tag:y.typeName,class:"tok-typeName"},{tag:y.namespace,class:"tok-namespace"},{tag:y.className,class:"tok-className"},{tag:y.macroName,class:"tok-macroName"},{tag:y.propertyName,class:"tok-propertyName"},{tag:y.operator,class:"tok-operator"},{tag:y.comment,class:"tok-comment"},{tag:y.meta,class:"tok-meta"},{tag:y.invalid,class:"tok-invalid"},{tag:y.punctuation,class:"tok-punctuation"}]);var Or,Xt=new B;function eu(n){return M.define({combine:n?e=>e.concat(n):void 0})}var tu=new B,de=class{constructor(e,t,i=[],s=""){this.data=e,this.name=s,j.prototype.hasOwnProperty("tree")||Object.defineProperty(j.prototype,"tree",{get(){return Re(this)}}),this.parser=t,this.extension=[Qt.of(this),j.languageData.of((r,o,l)=>{let a=ya(r,o,l),h=a.type.prop(Xt);if(!h)return[];let f=r.facet(h),c=a.type.prop(tu);if(c){let u=a.resolve(o-a.from,l);for(let d of c)if(d.test(u,r)){let p=r.facet(d.facet);return d.type=="replace"?p:p.concat(f)}}return f})].concat(i)}isActiveAt(e,t,i=-1){return ya(e,t,i).type.prop(Xt)==this.data}findRegions(e){let t=e.facet(Qt);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],s=(r,o)=>{if(r.prop(Xt)==this.data){i.push({from:o,to:o+r.length});return}let l=r.prop(B.mounted);if(l){if(l.tree.prop(Xt)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+r.length});return}else if(l.overlay){let a=i.length;if(s(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;a=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}},Oi=null,Bi=class n{constructor(e,t,i=[],s,r,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=s,this.treeLen=r,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new n(e,t,[],G.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Rr(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=G.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let s=Date.now()+e;e=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(Mt.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=Oi;Oi=this;try{return e()}finally{Oi=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=ba(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:s,treeLen:r,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((h,f,c,u)=>a.push({fromA:h,toA:f,fromB:c,toB:u})),i=Mt.applyChanges(i,a),s=G.empty,r=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let h of this.skipped){let f=e.mapPos(h.from,1),c=e.mapPos(h.to,-1);fe.from&&(this.fragments=ba(this.fragments,s,r),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends Ti{createParse(t,i,s){let r=s[0].from,o=s[s.length-1].to;return{parsedPos:r,advance(){let a=Oi;if(a){for(let h of s)a.tempSkipped.push(h);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new G(oe.none,[],[],o-r)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return Oi}};function ba(n,e,t){return Mt.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}var Ei=class n{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new n(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=Bi.create(e.facet(Qt).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new n(i)}};de.state=Ce.define({create:Ei.init,update(n,e){for(let t of e.effects)if(t.is(de.setState))return t.value;return e.startState.facet(Qt)!=e.state.facet(Qt)?Ei.init(e.state):n.apply(e)}});var Ca=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Ca=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});var Br=typeof navigator<"u"&&(!((Or=navigator.scheduling)===null||Or===void 0)&&Or.isInputPending)?()=>navigator.scheduling.isInputPending():null,iu=De.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(de.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(de.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Ca(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnds+1e3,a=r.context.work(()=>Br&&Br()||Date.now()>o,s+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:de.setState.of(new Ei(r.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>Me(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Qt=M.define({combine(n){return n.length?n[0]:null},enables:n=>[de.state,iu,D.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]});var nu=M.define(),ei=M.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function lt(n){let e=n.facet(ei);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function ti(n,e){let t="",i=n.tabSize,s=n.facet(ei)[0];if(s==" "){for(;e>=i;)t+=" ",e-=i;s=" "}for(let r=0;r=e?su(n,t,e):null}var Ot=class{constructor(e,t={}){this.state=e,this.options=t,this.unit=lt(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:s,simulateDoubleBreak:r}=this.options;return s!=null&&s>=i.from&&s<=i.to?r&&s==e?{text:"",from:e}:(t<0?s-1&&(r+=o-this.countColumn(i,i.search(/\S|$/))),r}countColumn(e,t=e.length){return yt(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:s}=this.lineAt(e,t),r=this.options.overrideIndentation;if(r){let o=r(s);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},Aa=new B;function su(n,e,t){let i=e.resolveStack(t),s=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(s!=i.node){let r=[];for(let o=s;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)r.push(o);for(let o=r.length-1;o>=0;o--)i={node:r[o],next:i}}return Ma(i,n,t)}function Ma(n,e,t){for(let i=n;i;i=i.next){let s=ou(i.node);if(s)return s(Pr.create(e,t,i))}return 0}function ru(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function ou(n){let e=n.type.prop(Aa);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(B.closedBy))){let s=n.lastChild,r=s&&i.indexOf(s.name)>-1;return o=>fu(o,!0,1,void 0,r&&!ru(o)?s.from:void 0)}return n.parent==null?lu:null}function lu(){return 0}var Pr=class n extends Ot{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new n(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(au(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return Ma(this.context.next,this.base,this.pos)}};function au(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function hu(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let s=n.options.simulateBreak,r=n.state.doc.lineAt(t.from),o=s==null||s<=r.from?r.to:Math.min(r.to,s);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let h=/^ */.exec(r.text.slice(t.to-r.from))[0].length;return{from:t.from,to:t.to+h}}l=a.to}}function fu(n,e,t,i,s){let r=n.textAfter,o=r.match(/^\s*/)[0].length,l=i&&r.slice(o,o+i.length)==i||s==n.pos+o,a=e?hu(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}var cu=200;function Ta(){return j.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,s=t.lineAt(i);if(i>s.from+cu)return n;let r=t.sliceString(s.from,i);if(!e.some(h=>h.test(r)))return n;let{state:o}=n,l=-1,a=[];for(let{head:h}of o.selection.ranges){let f=o.doc.lineAt(h);if(f.from==l)continue;l=f.from;let c=Nn(o,f.from);if(c==null)continue;let u=/^\s*/.exec(f.text)[0],d=ti(o,c);u!=d&&a.push({from:f.from,to:f.from+u.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}var Zt=class n{constructor(e,t){this.specs=e;let i;function s(l){let a=ye.newName();return(i||(i=Object.create(null)))["."+a]=l,a}let r=typeof t.all=="string"?t.all:t.all?s(t.all):void 0,o=t.scope;this.scope=o instanceof de?l=>l.prop(Xt)==o.data:o?l=>l==o:void 0,this.style=Dr(e.map(l=>({tag:l.tag,class:l.class||s(Object.assign({},l,{tag:null}))})),{all:r}).style,this.module=i?new ye(i):null,this.themeType=t.themeType}static define(e,t){return new n(e,t||{})}},Ir=M.define(),Da=M.define({combine(n){return n.length?[n[0]]:null}});function Er(n){let e=n.facet(Ir);return e.length?e:n.facet(Da)}function Hn(n,e){let t=[uu],i;return n instanceof Zt&&(n.module&&t.push(D.styleModule.of(n.module)),i=n.themeType),e?.fallback?t.push(Da.of(n)):i?t.push(Ir.computeN([D.darkTheme],s=>s.facet(D.darkTheme)==(i=="dark")?[n]:[])):t.push(Ir.of(n)),t}var Nr=class{constructor(e){this.markCache=Object.create(null),this.tree=Re(e.state),this.decorations=this.buildDeco(e,Er(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Re(e.state),i=Er(e.state),s=i!=Er(e.startState),{viewport:r}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=r.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||s)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=r.to)}buildDeco(e,t){if(!t||!this.tree.length)return z.none;let i=new gt;for(let{from:s,to:r}of e.visibleRanges)ma(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=z.mark({class:a})))},s,r);return i.finish()}},uu=Ht.high(De.fromClass(Nr,{decorations:n=>n.decorations})),Oa=Zt.define([{tag:y.meta,color:"#404740"},{tag:y.link,textDecoration:"underline"},{tag:y.heading,textDecoration:"underline",fontWeight:"bold"},{tag:y.emphasis,fontStyle:"italic"},{tag:y.strong,fontWeight:"bold"},{tag:y.strikethrough,textDecoration:"line-through"},{tag:y.keyword,color:"#708"},{tag:[y.atom,y.bool,y.url,y.contentSeparator,y.labelName],color:"#219"},{tag:[y.literal,y.inserted],color:"#164"},{tag:[y.string,y.deleted],color:"#a11"},{tag:[y.regexp,y.escape,y.special(y.string)],color:"#e40"},{tag:y.definition(y.variableName),color:"#00f"},{tag:y.local(y.variableName),color:"#30a"},{tag:[y.typeName,y.namespace],color:"#085"},{tag:y.className,color:"#167"},{tag:[y.special(y.variableName),y.macroName],color:"#256"},{tag:y.definition(y.propertyName),color:"#00c"},{tag:y.comment,color:"#940"},{tag:y.invalid,color:"#f00"}]),du=D.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Ba=1e4,Ea="()[]{}",La=M.define({combine(n){return mt(n,{afterCursor:!0,brackets:Ea,maxScanDistance:Ba,renderMatch:mu})}}),pu=z.mark({class:"cm-matchingBracket"}),gu=z.mark({class:"cm-nonmatchingBracket"});function mu(n){let e=[],t=n.matched?pu:gu;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}function wa(n){let e=[],t=n.facet(La);for(let i of n.selection.ranges){if(!i.empty)continue;let s=Le(n,i.head,-1,t)||i.head>0&&Le(n,i.head-1,1,t)||t.afterCursor&&(Le(n,i.head,1,t)||i.headn.decorations}),bu=[yu,du];function Ra(n={}){return[La.of(n),bu]}var wu=new B;function Hr(n,e,t){let i=n.prop(e<0?B.openedBy:B.closedBy);if(i)return i;if(n.name.length==1){let s=t.indexOf(n.name);if(s>-1&&s%2==(e<0?1:0))return[t[s+e]]}return null}function Fr(n){let e=n.type.prop(wu);return e?e(n.node):n}function Le(n,e,t,i={}){let s=i.maxScanDistance||Ba,r=i.brackets||Ea,o=Re(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let h=Hr(a.type,t,r);if(h&&a.from0?e>=f.from&&ef.from&&e<=f.to))return xu(n,e,t,a,f,h,r)}}return ku(n,e,t,o,l.type,s,r)}function xu(n,e,t,i,s,r,o){let l=i.parent,a={from:s.from,to:s.to},h=0,f=l?.cursor();if(f&&(t<0?f.childBefore(i.from):f.childAfter(i.to)))do if(t<0?f.to<=i.from:f.from>=i.to){if(h==0&&r.indexOf(f.type.name)>-1&&f.from0)return null;let h={from:t<0?e-1:e,to:t>0?e+1:e},f=n.doc.iterRange(e,t>0?n.doc.length:0),c=0;for(let u=0;!f.next().done&&u<=r;){let d=f.value;t<0&&(u+=d.length);let p=e+u*t;for(let g=t>0?0:d.length-1,m=t>0?d.length:-1;g!=m;g+=t){let b=o.indexOf(d[g]);if(!(b<0||i.resolveInner(p+g,1).type!=s))if(b%2==0==t>0)c++;else{if(c==1)return{start:h,end:{from:p+g,to:p+g+1},matched:b>>1==a>>1};c--}}t>0&&(u+=d.length)}return f.done?{start:h,matched:!1}:null}function xa(n,e,t,i=0,s=0){e==null&&(e=n.search(/[^\s\u00a0]/),e==-1&&(e=n.length));let r=s;for(let o=i;o=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.post}eatSpace(){let e=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}skipToEnd(){this.pos=this.string.length}skipTo(e){let t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0}backUp(e){this.pos-=e}column(){return this.lastColumnPosi?o.toLowerCase():o,r=this.string.substr(this.pos,e.length);return s(r)==s(e)?(t!==!1&&(this.pos+=e.length),!0):null}else{let s=this.string.slice(this.pos).match(e);return s&&s.index>0?null:(s&&t!==!1&&(this.pos+=s[0].length),s)}}current(){return this.string.slice(this.start,this.pos)}};function vu(n){return{name:n.name||"",token:n.token,blankLine:n.blankLine||(()=>{}),startState:n.startState||(()=>!0),copyState:n.copyState||Su,indent:n.indent||(()=>null),languageData:n.languageData||{},tokenTable:n.tokenTable||zr,mergeTokens:n.mergeTokens!==!1}}function Su(n){if(typeof n!="object")return n;let e={};for(let t in n){let i=n[t];e[t]=i instanceof Array?i.slice():i}return e}var ka=new WeakMap,Li=class n extends de{constructor(e){let t=eu(e.languageData),i=vu(e),s,r=new class extends Ti{createParse(o,l,a){return new Wr(s,o,l,a)}};super(t,r,[],e.name),this.topNode=Tu(t,this),s=this,this.streamParser=i,this.stateAfter=new B({perNode:!0}),this.tokenTable=e.tokenTable?new In(i.tokenTable):Mu}static define(e){return new n(e)}getIndent(e){let t,{overrideIndentation:i}=e.options;i&&(t=ka.get(e.state),t!=null&&t1e4)return null;for(;r=i&&t+e.length<=s&&e.prop(n.stateAfter);if(r)return{state:n.streamParser.copyState(r),pos:t+e.length};for(let o=e.children.length-1;o>=0;o--){let l=e.children[o],a=t+e.positions[o],h=l instanceof G&&a=e.length)return e;!s&&t==0&&e.type==n.topNode&&(s=!0);for(let r=e.children.length-1;r>=0;r--){let o=e.positions[r],l=e.children[r],a;if(ot&&Vr(n,r.tree,0-r.offset,t,l),h;if(a&&a.pos<=i&&(h=Pa(n,r.tree,t+r.offset,a.pos+r.offset,!1)))return{state:a.state,tree:h}}return{state:n.streamParser.startState(s?lt(s):4),tree:G.empty}}var Wr=class{constructor(e,t,i,s){this.lang=e,this.input=t,this.fragments=i,this.ranges=s,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=s[s.length-1].to;let r=Bi.get(),o=s[0].from,{state:l,tree:a}=Cu(e,i,o,this.to,r?.state);this.state=l,this.parsedPos=this.chunkStart=o+a.length;for(let h=0;hh.from<=r.viewport.from&&h.to>=r.viewport.from)&&(this.state=this.lang.streamParser.startState(lt(r.state)),r.skipUntilInView(this.parsedPos,r.viewport.from),this.parsedPos=r.viewport.from),this.moveRangeIndex()}advance(){let e=Bi.get(),t=this.stoppedAt==null?this.to:Math.min(this.to,this.stoppedAt),i=Math.min(t,this.chunkStart+512);for(e&&(i=Math.min(i,e.viewport.to));this.parsedPos=t?this.finish():e&&this.parsedPos>=e.viewport.to?(e.skipUntilInView(this.parsedPos,t),this.finish()):null}stopAt(e){this.stoppedAt=e}lineAfter(e){let t=this.input.chunk(e);if(this.input.lineChunks)t==` +var Yn=[],ao=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=ao[i])e=i+1;else return!0;if(e==t)return!1}}function ro(n){return n>=127462&&n<=127487}var oo=8205;function ho(n,e,t=!0,i=!0){return(t?fo:Yh)(n,e,i)}function fo(n,e,t){if(e==n.length)return e;e&&co(n.charCodeAt(e))&&uo(n.charCodeAt(e-1))&&e--;let i=Jn(n,e);for(e+=lo(i);e=0&&ro(Jn(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Yh(n,e,t){for(;e>0;){let i=fo(n,e-2,t);if(i=56320&&n<57344}function uo(n){return n>=55296&&n<56320}function lo(n){return n<65536?1:2}var R=class n{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=It(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),Rt.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=It(this,e,t);let i=[];return this.decompose(e,t,i,0),Rt.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new ut(this),r=new ut(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new ut(this,e)}iterRange(e,t=this.length){return new zi(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new qi(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?n.empty:e.length<=32?new ce(e):Rt.from(ce.split(e,[]))}},ce=class n extends R{constructor(e,t=Xh(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Qn(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new n(po(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=Wi(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new n(l,o.length+r.length));else{let a=l.length>>1;i.push(new n(l.slice(0,a)),new n(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof n))return super.replace(e,t,i);[e,t]=It(this,e,t);let s=Wi(this.text,Wi(i.text,po(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new n(s,r):Rt.from(n.split(s,[]),r)}sliceString(e,t=this.length,i=` +`){[e,t]=It(this,e,t);let s="";for(let r=0,o=0;r<=t&&oe&&o&&(s+=i),er&&(s+=l.slice(Math.max(0,e-r),t-r)),r=a+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new n(i,s)),i=[],s=-1);return s>-1&&t.push(new n(i,s)),t}},Rt=class n extends R{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,s);s=l+1,i=a+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r=o){let h=s&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!h?i.push(l):l.decompose(e-o,t-o,i,h)}o=a+1}}replace(e,t,i){if([e,t]=It(this,e,t),i.lines=r&&t<=l){let a=o.replace(e-r,t-r,i),h=this.lines-o.lines+a.lines;if(a.lines>4&&a.lines>h>>6){let f=this.children.slice();return f[s]=a,new n(f,this.length-(t-e)+i.length)}return super.replace(r,l,a)}r=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` +`){[e,t]=It(this,e,t);let s="";for(let r=0,o=0;re&&r&&(s+=i),eo&&(s+=l.sliceString(e-o,t-o,i)),o=a+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof n))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let a=this.children[s],h=e.children[r];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new ce(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,f=[];function c(d){let p;if(d.lines>r&&d instanceof n)for(let g of d.children)c(g);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof ce&&a&&(p=f[f.length-1])instanceof ce&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,f[f.length-1]=new ce(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,f.push(d))}function u(){a!=0&&(l.push(f.length==1?f[0]:n.from(f,h)),h=-1,a=f.length=0)}for(let d of e)c(d);return u(),l.length==1?l[0]:new n(l,t)}};R.empty=new ce([""],0);function Xh(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Wi(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r=t&&(a>i&&(l=l.slice(0,i-s)),s0?1:(e instanceof ce?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof ce?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(s instanceof ce){let a=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=s.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof ce?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},zi=class{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new ut(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},qi=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(R.prototype[Symbol.iterator]=function(){return this.iter()},ut.prototype[Symbol.iterator]=zi.prototype[Symbol.iterator]=qi.prototype[Symbol.iterator]=function(){return this});var Qn=class{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}};function It(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function Q(n,e,t=!0,i=!0){return ho(n,e,t,i)}function Qh(n){return n>=56320&&n<57344}function Zh(n){return n>=55296&&n<56320}function wo(n,e){let t=n.charCodeAt(e);if(!Zh(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return Qh(i)?(t-55296<<10)+(i-56320)+65536:t}function xo(n){return n<65536?1:2}var Zn=/\r\n?|\n/,le=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(le||(le={})),_e=class n{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return r+(e-s);r+=l}else{if(i!=le.Simple&&h>=e&&(i==le.TrackDel&&se||i==le.TrackBefore&&se))return null;if(h>e||h==e&&t<0&&!l)return e==s||t<0?r:r+a;r+=a}s=h}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i=0&&s<=t&&l>=e)return st?"cover":!0;s=l}return!1}toString(){let e="";for(let t=0;t=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new n(e)}static create(e){return new n(e)}},se=class n extends _e{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return es(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return ts(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s=0){t[s]=l,t[s+1]=o;let a=s>>1;for(;i.length0&&Ze(i,t,r.text),r.forward(f),l+=f}let h=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,l=null;function a(f=!1){if(!f&&!s.length)return;ou||c<0||u>t)throw new RangeError(`Invalid change range ${c} to ${u} (in doc of length ${t})`);let p=d?typeof d=="string"?R.of(d.split(i||Zn)):d:R.empty,g=p.length;if(c==u&&g==0)return;co&&te(s,c-o,-1),te(s,u-c,g),Ze(r,s,p),o=u}}return h(e),a(!l),l}static empty(e){return new n(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let s=0;sl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;i.length=0&&t<=0&&t==n[s+1]?n[s]+=e:s>=0&&e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function Ze(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(s,h,r,f,c),s=h,r=f}}}function ts(n,e,t,i=!1){let s=[],r=i?[]:null,o=new dt(n),l=new dt(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);te(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,f=o.len;for(;f;)if(l.ins==-1){let c=Math.min(f,l.len);h+=c,f-=c,l.forward(c)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}var dt=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?R.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?R.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},Lt=class n{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new n(i,s,this.flags)}extend(e,t=e,i=0){if(e<=this.anchor&&t>=this.anchor)return w.range(e,t,void 0,void 0,i);let s=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return w.range(this.anchor,s,void 0,void 0,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return w.range(e.anchor,e.head)}static create(e,t,i){return new n(e,t,i)}},w=class n{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:n.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new n(e.ranges.map(t=>Lt.fromJSON(t)),e.main)}static single(e,t=e){return new n([n.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;ss.from-r.from),t=e.indexOf(i);for(let s=1;sr.head?n.range(a,l):n.range(l,a))}}return new n(e,t)}};function vo(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}var cs=0,M=class n{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=cs++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new n(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:us),!!e.static,e.enables)}of(e){return new Pt([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Pt(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Pt(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}};function us(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}var Pt=class{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=cs++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,l=this.type==2,a=!1,h=!1,f=[];for(let c of this.dependencies)c=="doc"?a=!0:c=="selection"?h=!0:(((t=e[c.id])!==null&&t!==void 0?t:1)&1)==0&&f.push(e[c.id]);return{create(c){return c.values[o]=i(c),1},update(c,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||is(c,f)){let d=i(c);if(l?!go(d,c.values[o],s):!s(d,c.values[o]))return c.values[o]=d,1}return 0},reconfigure:(c,u)=>{let d,p=u.config.address[r];if(p!=null){let g=Ui(u,p);if(this.dependencies.every(m=>m instanceof M?u.facet(m)===c.facet(m):m instanceof Ce?u.field(m,!1)==c.field(m,!1):!0)||(l?go(d=i(c),g,s):s(d=i(c),g)))return c.values[o]=g,0}else d=i(c);return c.values[o]=d,1}}}};function go(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),s=t.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let f=0;fi===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(Hi).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>{let r=i.facet(Hi),o=s.facet(Hi),l;return(l=r.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,Hi.of({field:this,create:e})]}get extension(){return this}},ft={lowest:4,low:3,default:2,high:1,highest:0};function ni(n){return e=>new Ki(e,n)}var Ht={highest:ni(ft.highest),high:ni(ft.high),default:ni(ft.default),low:ni(ft.low),lowest:ni(ft.lowest)},Ki=class{constructor(e,t){this.inner=e,this.prec=t}},pt=class n{of(e){return new ri(this,e)}reconfigure(e){return n.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},ri=class{constructor(e,t){this.compartment=e,this.inner=t}},$i=class n{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let u of tf(e,t,o))u instanceof Ce?s.push(u):(r[u.facet.id]||(r[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of s)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let f=i?.config.facets;for(let u in r){let d=r[u],p=d[0].facet,g=f&&f[u]||[];if(d.every(m=>m.type==0))if(l[p.id]=a.length<<1|1,us(g,d))a.push(i.facet(p));else{let m=p.combine(d.map(b=>b.value));a.push(i&&p.compare(m,i.facet(p))?i.facet(p):m)}else{for(let m of d)m.type==0?(l[m.id]=a.length<<1|1,a.push(m.value)):(l[m.id]=h.length<<1,h.push(b=>m.dynamicSlot(b)));l[p.id]=h.length<<1,h.push(m=>ef(m,p,d))}}let c=h.map(u=>u(l));return new n(e,o,c,l,a,r)}};function tf(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof ri&&t.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof ri){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),r(h,l)}else if(o instanceof Ki)r(o.inner,o.prec);else if(o instanceof Ce)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof Pt)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,ft.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,ft.default),i.reduce((o,l)=>o.concat(l))}function si(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function Ui(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}var So=M.define(),ns=M.define({combine:n=>n.some(e=>e),static:!0}),Co=M.define({combine:n=>n.length?n[0]:void 0,static:!0}),Ao=M.define(),Mo=M.define(),To=M.define(),Do=M.define({combine:n=>n.length?n[0]:!1}),me=class{constructor(e,t){this.type=e,this.value=t}static define(){return new ss}},ss=class{of(e){return new me(this,e)}},rs=class{constructor(e){this.map=e}of(e){return new j(this,e)}},j=class n{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new n(this.type,t)}is(e){return this.type==e}static define(e={}){return new rs(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}};j.reconfigure=j.define();j.appendConfig=j.define();var X=class n{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&vo(i,t.newLength),r.some(l=>l.type==n.time)||(this.annotations=r.concat(n.time.of(Date.now())))}static create(e,t,i,s,r,o){return new n(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(n.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}};X.time=me.define();X.userEvent=me.define();X.addToHistory=me.define();X.remote=me.define();function nf(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof X?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof X?n=r[0]:n=Oo(e,Nt(r),!1)}return n}function rf(n){let e=n.startState,t=e.facet(To),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=Eo(i,os(e,r,n.changes.newLength),!0))}return i==n?n:X.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}var of=[];function Nt(n){return n==null?of:Array.isArray(n)?n:[n]}var Se=function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n}(Se||(Se={})),lf=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,ls;try{ls=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function af(n){if(ls)return ls.test(n);for(let e=0;e"\x80"&&(t.toUpperCase()!=t.toLowerCase()||lf.test(t)))return!0}return!1}function hf(n){return e=>{if(!/\S/.test(e))return Se.Space;if(af(e))return Se.Word;for(let t=0;t-1)return Se.Word;return Se.Other}}var U=class n{constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;ls.set(h,a)),t=null),s.set(l.value.compartment,l.value.extension)):l.is(j.reconfigure)?(t=null,i=l.value):l.is(j.appendConfig)&&(t=null,i=Nt(i).concat(l.value));let r;t?r=e.startState.values.slice():(t=$i.resolve(i,s,this),r=new n(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=e.startState.facet(ns)?e.newSelection:e.newSelection.asSingle();new n(t,e.newDoc,o,r,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:w.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=Nt(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return n.create({doc:e.doc,selection:w.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=$i.resolve(e.extensions||[],new Map),i=e.doc instanceof R?e.doc:R.of((e.doc||"").split(t.staticFacet(n.lineSeparator)||Zn)),s=e.selection?e.selection instanceof w?e.selection:w.single(e.selection.anchor,e.selection.head):w.single(0);return vo(s,i.length),t.staticFacet(ns)||(s=s.asSingle()),new n(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(n.tabSize)}get lineBreak(){return this.facet(n.lineSeparator)||` +`}get readOnly(){return this.facet(Do)}phrase(e,...t){for(let i of this.facet(n.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>t.length?i:t[r-1]})),e}languageDataAt(e,t,i=-1){let s=[];for(let r of this.facet(So))for(let o of r(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&s.push(o[e]);return s}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return hf(t.length?t[0]:"")}wordAt(e){let{text:t,from:i,length:s}=this.doc.lineAt(e),r=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=Q(t,o,!1);if(r(t.slice(a,o))!=Se.Word)break;o=a}for(;ln.length?n[0]:4});U.lineSeparator=Co;U.readOnly=Do;U.phrases=M.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(s=>n[s]==e[s])}});U.languageData=So;U.changeFilter=Ao;U.transactionFilter=Mo;U.transactionExtender=To;pt.reconfigure=j.define();function mt(n,e,t={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],l=i[r];if(l===void 0)i[r]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,r))i[r]=t[r](l,o);else throw new Error("Config merge conflict for field "+r)}for(let s in e)i[s]===void 0&&(i[s]=e[s]);return i}var Ve=class{eq(e){return this==e}range(e,t=e){return oi.create(e,t,this)}};Ve.prototype.startSide=Ve.prototype.endSide=0;Ve.prototype.point=!1;Ve.prototype.mapMode=le.TrackDel;function ds(n,e){return n==e||n.constructor==e.constructor&&n.eq(e)}var oi=class n{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new n(e,t,i)}};function as(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}var hs=class n{constructor(e,t,i,s){this.from=e,this.to=t,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,s=0){let r=i?this.to:this.from;for(let o=s,l=r.length;;){if(o==l)return o;let a=o+l>>1,h=r[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return h>=0?o:l;h>=0?l=a:o=a+1}}between(e,t,i,s){for(let r=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,r);rd||u==d&&h.startSide>0&&h.endSide<=0)continue;(d-u||h.endSide-h.startSide)<0||(o<0&&(o=u),h.point&&(l=Math.max(l,d-u)),i.push(h),s.push(u-o),r.push(d-o))}return{mapped:i.length?new n(s,r,i,l):null,pos:o}}},F=class n{constructor(e,t,i,s){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=s}static create(e,t,i,s){return new n(e,t,i,s)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(as)),this.isEmpty)return t.length?n.of(t):this;let l=new ji(this,null,-1).goto(0),a=0,h=[],f=new gt;for(;l.value||a=0){let c=t[a++];f.addInner(c.from,c.to,c.value)||h.push(c)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||rl.to||r=r&&e<=r+o.length&&o.between(r,e-r,t-r,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return li.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return li.from(e).goto(t)}static compare(e,t,i,s,r=-1){let o=e.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=r),l=t.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=r),a=mo(o,l,i),h=new ct(o,a,r),f=new ct(l,a,r);i.iterGaps((c,u,d)=>yo(h,c,f,u,d,s)),i.empty&&i.length==0&&yo(h,0,f,0,0,s)}static eq(e,t,i=0,s){s==null&&(s=999999999);let r=e.filter(f=>!f.isEmpty&&t.indexOf(f)<0),o=t.filter(f=>!f.isEmpty&&e.indexOf(f)<0);if(r.length!=o.length)return!1;if(!r.length)return!0;let l=mo(r,o),a=new ct(r,l,0).goto(i),h=new ct(o,l,0).goto(i);for(;;){if(a.to!=h.to||!fs(a.active,h.active)||a.point&&(!h.point||!ds(a.point,h.point)))return!1;if(a.to>s)return!0;a.next(),h.next()}}static spans(e,t,i,s,r=-1){let o=new ct(e,null,r).goto(t),l=t,a=o.openStart;for(;;){let h=Math.min(o.to,i);if(o.point){let f=o.activeForPoint(o.to),c=o.pointFroml&&(s.span(l,h,o.active,a),a=o.openEnd(h));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new gt;for(let s of e instanceof oi?[e]:t?ff(e):e)i.add(s.from,s.to,s.value);return i.finish()}static join(e){if(!e.length)return n.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let s=e[i];s!=n.empty;s=s.nextLayer)t=new n(s.chunkPos,s.chunk,t,Math.max(s.maxPoint,t.maxPoint));return t}};F.empty=new F([],[],null,-1);function ff(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(as);e=i}return n}F.empty.nextLayer=F.empty;var gt=class n{finishChunk(e){this.chunks.push(new hs(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new n)).add(e,t,i)}addInner(e,t,i){let s=e-this.lastTo||i.startSide-this.last.endSide;if(s<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(F.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=F.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}};function mo(n,e,t){let i=new Map;for(let r of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&s.push(new ji(o,t,i,r));return s.length==1?s[0]:new n(s)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)Xn(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)Xn(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Xn(this.heap,0)}}};function Xn(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let s=n[i];if(i+1=0&&(s=n[i+1],i++),t.compare(s)<0)break;n[i]=t,n[e]=s,e=i}}var ct=class{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=li.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Fi(this.active,e),Fi(this.activeTo,e),Fi(this.activeRank,e),this.minActive=bo(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:s,rank:r}=this.cursor;for(;t0;)t++;Vi(this.active,t,i),Vi(this.activeTo,t,s),Vi(this.activeRank,t,r),e&&Vi(e,t,this.cursor.from),this.minActive=bo(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>e){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&Fi(i,s)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[s]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}};function yo(n,e,t,i,s,r){n.goto(e),t.goto(i);let o=i+s,l=i,a=i-e,h=!!r.boundChange;for(let f=!1;;){let c=n.to+a-t.to,u=c||n.endSide-t.endSide,d=u<0?n.to+a:t.to,p=Math.min(d,o);if(n.point||t.point?(n.point&&t.point&&ds(n.point,t.point)&&fs(n.activeForPoint(n.to),t.activeForPoint(t.to))||r.comparePoint(l,p,n.point,t.point),f=!1):(f&&r.boundChange(l),p>l&&!fs(n.active,t.active)&&r.compareRange(l,p,n.active,t.active),h&&po)break;l=d,u<=0&&n.next(),u>=0&&t.next()}}function fs(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function bo(n,e){let t=-1,i=1e9;for(let s=0;s=e)return s;if(s==n.length)break;r+=n.charCodeAt(s)==9?t-r%t:1,s=Q(n,s)}return i===!0?-1:n.length}var ps="\u037C",Lo=typeof Symbol>"u"?"__"+ps:Symbol.for(ps),gs=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Ro=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},ye=class{constructor(e,t){this.rules=[];let{finish:i}=t||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,l,a,h){let f=[],c=/^@(\w+)\b/.exec(o[0]),u=c&&c[1]=="keyframes";if(c&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))r(d.split(/,\s*/).map(g=>o.map(m=>g.replace(/&/,m))).reduce((g,m)=>g.concat(m)),p,a);else if(p&&typeof p=="object"){if(!c)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,f,u)}else p!=null&&f.push(d.replace(/_.*/,"").replace(/[A-Z]/g,g=>"-"+g.toLowerCase())+": "+p+";")}(f.length||u)&&a.push((i&&!c&&!h?o.map(i):o).join(", ")+" {"+f.join(" ")+"}")}for(let o in e)r(s(o),e[o],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=Ro[Lo]||1;return Ro[Lo]=e+1,ps+e.toString(36)}static mount(e,t,i){let s=e[gs],r=i&&i.nonce;s?r&&s.setNonce(r):s=new ms(e,r),s.mount(Array.isArray(t)?t:[t],e)}},Po=new Map,ms=class{constructor(e,t){let i=e.ownerDocument||e,s=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&s.CSSStyleSheet){let r=Po.get(i);if(r)return e[gs]=r;this.sheet=new s.CSSStyleSheet,Po.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[gs]=this}mount(e,t){let i=this.sheet,s=0,r=0;for(let o=0;o-1&&(this.modules.splice(a,1),r--,a=-1),a==-1){if(this.modules.splice(r++,0,l),i)for(let h=0;h",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},cf=typeof navigator<"u"&&/Mac/.test(navigator.platform),uf=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(Y=0;Y<10;Y++)Ge[48+Y]=Ge[96+Y]=String(Y);var Y;for(Y=1;Y<=24;Y++)Ge[Y+111]="F"+Y;var Y;for(Y=65;Y<=90;Y++)Ge[Y]=String.fromCharCode(Y+32),Ft[Y]=String.fromCharCode(Y);var Y;for(_i in Ge)Ft.hasOwnProperty(_i)||(Ft[_i]=Ge[_i]);var _i;function No(n){var e=cf&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||uf&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?Ft:Ge)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}var re=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},Ss=typeof document<"u"?document:{documentElement:{style:{}}},Cs=/Edge\/(\d+)/.exec(re.userAgent),dl=/MSIE \d/.test(re.userAgent),As=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(re.userAgent),vn=!!(dl||As||Cs),Io=!vn&&/gecko\/(\d+)/i.test(re.userAgent),ys=!vn&&/Chrome\/(\d+)/.exec(re.userAgent),Ho="webkitFontSmoothing"in Ss.documentElement.style,Ms=!vn&&/Apple Computer/.test(re.vendor),Fo=Ms&&(/Mobile\/\w+/.test(re.userAgent)||re.maxTouchPoints>2),S={mac:Fo||/Mac/.test(re.platform),windows:/Win/.test(re.platform),linux:/Linux|X11/.test(re.platform),ie:vn,ie_version:dl?Ss.documentMode||6:As?+As[1]:Cs?+Cs[1]:0,gecko:Io,gecko_version:Io?+(/Firefox\/(\d+)/.exec(re.userAgent)||[0,0])[1]:0,chrome:!!ys,chrome_version:ys?+ys[1]:0,ios:Fo,android:/Android\b/.test(re.userAgent),webkit:Ho,webkit_version:Ho?+(/\bAppleWebKit\/(\d+)/.exec(re.userAgent)||[0,0])[1]:0,safari:Ms,safari_version:Ms?+(/\bVersion\/(\d+(\.\d+)?)/.exec(re.userAgent)||[0,0])[1]:0,tabSize:Ss.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function ur(n,e){for(let t in n)t=="class"&&e.class?e.class+=" "+n.class:t=="style"&&e.style?e.style+=";"+n.style:e[t]=n[t];return e}var ln=Object.create(null);function dr(n,e,t){if(n==e)return!0;n||(n=ln),e||(e=ln);let i=Object.keys(n),s=Object.keys(e);if(i.length-(t&&i.indexOf(t)>-1?1:0)!=s.length-(t&&s.indexOf(t)>-1?1:0))return!1;for(let r of i)if(r!=t&&(s.indexOf(r)==-1||n[r]!==e[r]))return!1;return!0}function df(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t=="style"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function Vo(n,e,t){let i=!1;if(e)for(let s in e)t&&s in t||(i=!0,s=="style"?n.style.cssText="":n.removeAttribute(s));if(t)for(let s in t)e&&e[s]==t[s]||(i=!0,s=="style"?n.style.cssText=t[s]:n.setAttribute(s,t[s]));return i}function pf(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new vt(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,s;if(e.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=pl(e,t);i=(r?t?-3e8:-1:5e8)-1,s=(o?t?2e8:1:-6e8)+1}return new vt(e,i,s,t,e.widget||null,!0)}static line(e){return new wi(e)}static set(e,t=!1){return F.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};z.none=F.empty;var bi=class n extends z{constructor(e){let{start:t,end:i}=pl(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?ur(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||ln}eq(e){return this==e||e instanceof n&&this.tagName==e.tagName&&dr(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}};bi.prototype.point=!1;var wi=class n extends z{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof n&&this.spec.class==e.spec.class&&dr(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}};wi.prototype.mapMode=le.TrackBefore;wi.prototype.point=!0;var vt=class n extends z{constructor(e,t,i,s,r,o){super(t,i,r,e),this.block=s,this.isReplace=o,this.mapMode=s?t<=0?le.TrackBefore:le.TrackAfter:le.TrackDel}get type(){return this.startSide!=this.endSide?ee.WidgetRange:this.startSide<=0?ee.WidgetBefore:ee.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof n&&gf(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}};vt.prototype.point=!0;function pl(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function gf(n,e){return n==e||!!(n&&e&&n.compare(e))}function Kt(n,e,t,i=0){let s=t.length-1;s>=0&&t[s]+i>=n?t[s]=Math.max(t[s],e):t.push(n,e)}var an=class n extends Ve{constructor(e,t){super(),this.tagName=e,this.attributes=t}eq(e){return e==this||e instanceof n&&this.tagName==e.tagName&&dr(this.attributes,e.attributes)}static create(e){return new n(e.tagName,e.attributes||ln)}static set(e,t=!1){return F.of(e,t)}};an.prototype.startSide=an.prototype.endSide=-1;function xi(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Ts(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function fi(n,e){if(!e.anchorNode)return!1;try{return Ts(n,e.anchorNode)}catch{return!1}}function tn(n){return n.nodeType==3?ki(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function ci(n,e,t,i){return t?Wo(n,e,t,i,-1)||Wo(n,e,t,i,1):!1}function it(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function hn(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function Wo(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:Xe(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=it(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=s<0?Xe(n):0}else return!1}}function Xe(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function fn(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function mf(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function gl(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function yf(n,e,t,i,s,r,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let f=n,c=!1;f&&!c;)if(f.nodeType==1){let u,d=f==a.body,p=1,g=1;if(d)u=mf(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(f).position)&&(c=!0),f.scrollHeight<=f.clientHeight&&f.scrollWidth<=f.clientWidth){f=f.assignedSlot||f.parentNode;continue}let C=f.getBoundingClientRect();({scaleX:p,scaleY:g}=gl(f,C)),u={left:C.left,right:C.left+f.clientWidth*p,top:C.top,bottom:C.top+f.clientHeight*g}}let m=0,b=0;if(s=="nearest")e.top0&&e.bottom>u.bottom+b&&(b=e.bottom-u.bottom+o)):e.bottom>u.bottom-o&&(b=e.bottom-u.bottom+o,t<0&&e.top-b0&&e.right>u.right+m&&(m=e.right-u.right+r)):e.right>u.right-r&&(m=e.right-u.right+r,t<0&&e.leftu.bottom||e.leftu.right)&&(e={left:Math.max(e.left,u.left),right:Math.min(e.right,u.right),top:Math.max(e.top,u.top),bottom:Math.min(e.bottom,u.bottom)}),f=f.assignedSlot||f.parentNode}else if(f.nodeType==11)f=f.host;else break}function ml(n,e=!0){let t=n.ownerDocument,i=null,s=null;for(let r=n.parentNode;r&&!(r==t.body||(!e||i)&&s);)if(r.nodeType==1)!s&&r.scrollHeight>r.clientHeight&&(s=r),e&&!i&&r.scrollWidth>r.clientWidth&&(i=r),r=r.assignedSlot||r.parentNode;else if(r.nodeType==11)r=r.host;else break;return{x:i,y:s}}var Ds=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?Xe(t):0),i,Math.min(e.focusOffset,i?Xe(i):0))}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}},bt=null;S.safari&&S.safari_version>=26&&(bt=!1);function yl(n){if(n.setActive)return n.setActive();if(bt)return n.focus(bt);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(bt==null?{get preventScroll(){return bt={preventScroll:!0},!0}}:void 0),!bt){bt=!1;for(let t=0;tMath.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function wl(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=Xe(t)}else if(t.parentNode&&!hn(t))i=it(t),t=t.parentNode;else return null}}function xl(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i=t){if(l.level==i)return o;(r<0||(s!=0?s<0?l.fromt:e[r].level>l.level))&&(r=o)}}if(r<0)throw new RangeError("Index out of range");return r}};function Sl(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;g-=3)if(We[g+1]==-d){let m=We[g+2],b=m&2?s:m&4?m&1?r:s:0;b&&(W[c]=W[We[g]]=b),l=g;break}}else{if(We.length==189)break;We[l++]=c,We[l++]=u,We[l++]=a}else if((p=W[c])==2||p==1){let g=p==s;a=g?0:1;for(let m=l-3;m>=0;m-=3){let b=We[m+2];if(b&2)break;if(g)We[m+2]|=2;else{if(b&4)break;We[m+2]|=4}}}}}function Af(n,e,t,i){for(let s=0,r=i;s<=t.length;s++){let o=s?t[s-1].to:n,l=sa;)p==m&&(p=t[--g].from,m=g?t[g-1].to:n),W[--p]=d;a=f}else r=h,a++}}}function Os(n,e,t,i,s,r,o){let l=i%2?2:1;if(i%2==s%2)for(let a=e,h=0;aa&&o.push(new xe(a,g.from,d));let m=g.direction==St!=!(d%2);Bs(n,m?i+1:i,s,g.inner,g.from,g.to,o),a=g.to}p=g.to}else{if(p==t||(f?W[p]!=l:W[p]==l))break;p++}u?Os(n,a,p,i+1,s,u,o):ae;){let f=!0,c=!1;if(!h||a>r[h-1].to){let g=W[a-1];g!=l&&(f=!1,c=g==16)}let u=!f&&l==1?[]:null,d=f?i:i+1,p=a;e:for(;;)if(h&&p==r[h-1].to){if(c)break e;let g=r[--h];if(!f)for(let m=g.from,b=h;;){if(m==e)break e;if(b&&r[b-1].to==m)m=r[--b].from;else{if(W[m-1]==l)break e;break}}if(u)u.push(g);else{g.toW.length;)W[W.length]=256;let i=[],s=e==St?0:1;return Bs(n,s,s,t,0,n.length,i),i}function Cl(n){return[new xe(0,n,0)]}var Al="";function Tf(n,e,t,i,s){var r;let o=i.head-n.from,l=xe.find(e,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),a=e[l],h=a.side(s,t);if(o==h){let u=l+=s?1:-1;if(u<0||u>=e.length)return null;a=e[l=u],o=a.side(!s,t),h=a.side(s,t)}let f=Q(n.text,o,a.forward(s,t));(fa.to)&&(f=h),Al=n.text.slice(Math.min(o,f),Math.max(o,f));let c=l==(s?e.length-1:0)?null:e[l+(s?1:-1)];return c&&f==h&&c.level+(s?0:1)n.some(e=>e)}),Rl=M.define({combine:n=>n.some(e=>e)}),Pl=M.define(),ui=class n{constructor(e,t,i,s,r,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(e){return e.empty?this:new n(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new n(w.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},Gi=j.define({map:(n,e)=>n.map(e)}),Nl=j.define();function Me(n,e,t){let i=n.facet(El);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}var Je=M.define({combine:n=>n.length?n[0]:!0}),Ef=0,Wt=M.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let a=[];return o&&a.push(Sn.of(h=>{let f=h.plugin(l);return f?o(f):z.none})),r&&a.push(r(l)),a})}static fromClass(e,t){return n.define((i,s)=>new e(i,s),t)}},di=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(Me(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){Me(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){Me(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},Il=M.define(),yr=M.define(),Sn=M.define(),Hl=M.define(),br=M.define(),vi=M.define(),Fl=M.define();function qo(n,e){let t=n.state.facet(Fl);if(!t.length)return t;let i=t.map(r=>r instanceof Function?r(n):r),s=[];return F.spans(i,e.from,e.to,{point(){},span(r,o,l,a){let h=r-e.from,f=o-e.from,c=s;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=Df(e.text,h,f)),a>0&&c.length&&(p=c[c.length-1]).to==h&&p.direction==d)p.to=f,c=p.inner;else{let g={from:h,to:f,direction:d,inner:[]};c.push(g),c=g.inner}}}}),s}var Vl=M.define();function Wl(n){let e=0,t=0,i=0,s=0;for(let r of n.state.facet(Vl)){let o=r(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:e,right:t,top:i,bottom:s}}var ai=M.define(),Te=class n{constructor(e,t,i,s){this.fromA=e,this.toA=t,this.fromB=i,this.toB=s}join(e){return new n(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let s=e[t-1];if(!(s.fromA>i.toA)){if(s.toAs.push(new Te(r,o,l,a))),this.changedRanges=s}static create(e,t,i){return new n(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},Of=[],_=class{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return Of}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&df(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let s of this.children){if(s==e)return i;i+=s.length+s.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t){return null}domPosFor(e,t){let i=it(this.dom),s=this.length?e>0:t>0;return new ze(this.parent.dom,i+(s?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof jt)return e;return null}static get(e){return e.cmTile}},Ut=class extends _{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,s,r=e?.node==t?e:null,o=0;for(let l of this.children){if(l.sync(e),o+=l.length+l.breakAfter,s=i?i.nextSibling:t.firstChild,r&&s!=l.dom&&(r.written=!0),l.dom.parentNode==t)for(;s&&s!=l.dom;)s=Ko(s);else t.insertBefore(l.dom,s);i=l.dom}for(s=i?i.nextSibling:t.firstChild,r&&s&&(r.written=!0);s;)s=Ko(s);this.length=o}};function Ko(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}var jt=class extends Ut{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=_.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,s=0,r=0;;)if(s==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&r++,s=t.pop()}else{let o=i.children[s++];if(o instanceof Ye)t.push(s),i=o,s=0;else{let l=r+o.length,a=e(o,r);if(a!==void 0)return a;r=l+o.breakAfter}}}resolveBlock(e,t){let i,s=-1,r,o=-1;if(this.blockTiles((l,a)=>{let h=a+l.length;if(e>=a&&e<=h){if(l.isWidget()&&t>=-1&&t<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(ae||e==a&&(t>1?l.length:l.covers(-1)))&&(!r||!l.isWidget()&&r.isWidget())&&(r=l,o=e-a)}}),!i&&!r)throw new Error("No tile at position "+e);return i&&t<0||!r?{tile:i,offset:s}:{tile:r,offset:o}}},Ye=class n extends Ut{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new n(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}},_t=class n extends Ut{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let s=new n(t||document.createElement("div"),e);return(!t||!i)&&(s.flags|=4),s}get domAttrs(){return this.attrs}resolveInline(e,t,i){let s=null,r=-1,o=null,l=-1;function a(f,c){for(let u=0,d=0;u=c&&(p.isComposite()?a(p,c-d):(!o||o.isHidden&&(t>0||i&&Lf(o,p)))&&(g>c||p.flags&32)?(o=p,l=c-d):(di&&(e=i);let s=e,r=e,o=0;e==0&&t<0||e==i&&t>=0?S.chrome||S.gecko||(e?(s--,o=1):r=0)?0:l.length-1];return S.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?fn(a,o<0):a||null}static of(e,t){let i=new n(t||document.createTextNode(e),e);return t||(i.flags|=2),i}},Ct=class n extends _{constructor(e,t,i,s){super(e,t,s),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let s=this.widget.coordsAt(this.dom,e,t);if(s)return s;if(i)return fn(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let r=this.dom.getClientRects(),o=null;if(!r.length)return null;let l=this.flags&16?!0:this.flags&32?!1:e>0;for(let a=l?r.length-1:0;o=r[a],!(e>0?a==0:a==r.length-1||o.top0;)if(s.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(r==s.children.length){if(!e&&!l.length)break;i&&i.leave(s),o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++}else{let a=s.children[r],h=a.breakAfter;(t>0?a.length<=e:a.length=0;l--){let a=t.marks[l],h=s.lastChild;if(h instanceof ae&&h.mark.eq(a.mark))h.dom!=a.dom&&h.setDOM(bs(a.dom)),s=h;else{if(this.cache.reused.get(a)){let c=_.get(a.dom);c&&c.setDOM(bs(a.dom))}let f=ae.of(a.mark,a.dom);s.append(f),s=f}this.cache.reused.set(a,2)}let r=_.get(e.text);r&&this.cache.reused.set(r,2);let o=new wt(e.text,e.text.nodeValue);o.flags|=8,s.append(o)}addInlineWidget(e,t,i){let s=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);s||this.flushBuffer();let r=this.ensureMarks(t,i);!s&&!(e.flags&16)&&r.append(this.getBuffer(1)),r.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=zl);let s=_t.start(e,t||((i=this.cache.find(_t))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=s)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let s=this.curLine;for(let r=e.length-1;r>=0;r--){let o=e[r],l;if(t>0&&(l=s.lastChild)&&l instanceof ae&&l.mark.eq(o))s=l,t--;else{let a=ae.of(o,(i=this.cache.find(ae,h=>h.mark.eq(o)))===null||i===void 0?void 0:i.dom);s.append(a),s=a,t=0}}return s}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!$o(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(S.ios&&$o(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(ws,0,32)||new Ct(ws.toDOM(),0,ws,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=new Ps(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-t.rank||this.wrappers[i-1].to-t.to)<0;)i--;this.wrappers.splice(i,0,t)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let s=t.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(r),t=r}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(Gt,void 0,1);return i&&(i.flags=t),i||new Gt(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},Is=class{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:s,lineBreak:r,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=s;let l=this.textOff=Math.min(e,s.length);return r?null:s.slice(0,l)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}},un=[Ct,_t,wt,ae,Gt,Ye,jt];for(let n=0;n[]),this.index=un.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let s=e.bucket,r=this.buckets[s],o=this.index[s];for(let l=r.length-1;l>=0;l--){let a=(l+o)%r.length,h=r[a];if((!t||t(h))&&!this.reused.has(h))return r.splice(a,1),a{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let s=0,r=0,o=0;;){let l=os){let h=a-s;this.preserve(h,!o,!l),s=a,r+=h}if(!l)break;t&&l.fromA<=t.range.fromA&&l.toA>=t.range.toA?(this.forward(l.fromA,t.range.fromA,t.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let h=a>0||l{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof ae&&s.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?s.length&&(s.length=r=0):o instanceof ae&&(s.shift(),r=Math.min(r,s.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,s=this.builder,r=0,o=F.spans(this.decorations,e,t,{point:(l,a,h,f,c,u)=>{if(h instanceof vt){if(this.disallowBlockEffectsFor[u]){if(h.block)throw new RangeError("Block decorations may not be specified via plugins");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(r=f.length,c>f.length)s.continueWidget(a-l);else{let d=h.widget||(h.block?nt.block:nt.inline),p=Rf(h),g=this.cache.findWidget(d,a-l,p)||Ct.of(d,this.view,a-l,p);h.block?(h.startSide>0&&s.addLineStartIfNotCovered(i),s.addBlockWidget(g)):(s.ensureLine(i),s.addInlineWidget(g,f,c))}i=null}else i=Pf(i,h);a>l&&this.text.skip(a-l)},span:(l,a,h,f)=>{for(let c=l;cr,this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let s=e.parentNode;;s=s.parentNode){let r=_.get(s);if(s==this.view.contentDOM)break;r instanceof ae?t.push(r):r?.isLine()?i=r:r instanceof Ye||(s.nodeName=="DIV"&&!i&&s!=this.view.contentDOM?i=new _t(s,zl):i||t.push(ae.of(new bi({tagName:s.nodeName.toLowerCase(),attributes:pf(s)}),s)))}return{line:i,marks:t}}};function $o(n,e){let t=i=>{for(let s of i.children)if((e?s.isText():s.length)||t(s))return!0;return!1};return t(n)}function Rf(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}var zl={class:"cm-line"};function Pf(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:"cm-line"}),t&&ur(t,n),i&&(n.class+=" "+i)),n}function Nf(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof ae&&e.push(i.mark)}return e}function bs(n){let e=_.get(n);return e&&e.setDOM(n.cloneNode()),n}var nt=class extends kt{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}};nt.inline=new nt("span");nt.block=new nt("div");var ws=new class extends kt{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}},dn=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=z.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new jt(e,e.contentDOM),this.updateInner([new Te(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:f,toA:c})=>cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?s=this.domChanged.newSel.head:!Kf(e.changes,this.hasComposition)&&!e.selectionSet&&(s=e.state.selection.main.head));let r=s>-1?Hf(this.view,e.changes,s):null;if(this.domChanged=null,this.hasComposition){let{from:f,to:c}=this.hasComposition;i=new Te(f,c,e.changes.mapPos(f,-1),e.changes.mapPos(c,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(S.ie||S.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=Wf(o,this.decorations,e.changes);a.length&&(i=Te.extendWithRanges(i,a));let h=zf(l,this.blockWrappers,e.changes);return h.length&&(i=Te.extendWithRanges(i,h)),r&&!i.some(f=>f.fromA<=r.range.fromA&&f.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,l=new Fs(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&_.get(t.text)&&l.cache.reused.set(_.get(t.text),2),this.tile=l.run(e,t),Vs(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let r=S.chrome||S.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let s=[];if(this.view.viewport.from||this.view.viewport.to-1)&&fi(i,this.view.observer.selectionRange)&&!(s&&i.contains(s));if(!(r||t||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,h,f;if(a.empty?f=h=this.inlineDOMNearPos(a.anchor,a.assoc||1):(f=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),h=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),S.gecko&&a.empty&&!this.hasComposition&&If(h)){let u=document.createTextNode("");this.view.observer.ignore(()=>h.node.insertBefore(u,h.node.childNodes[h.offset]||null)),h=f=new ze(u,0),l=!0}let c=this.view.observer.selectionRange;(l||!c.focusNode||(!ci(h.node,h.offset,c.anchorNode,c.anchorOffset)||!ci(f.node,f.offset,c.focusNode,c.focusOffset))&&!this.suppressWidgetCursorChange(c,a))&&(this.view.observer.ignore(()=>{S.android&&S.chrome&&i.contains(c.focusNode)&&qf(c.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let u=xi(this.view.root);if(u)if(a.empty){if(S.gecko){let d=Ff(h.node,h.offset);if(d&&d!=3){let p=(d==1?wl:xl)(h.node,h.offset);p&&(h=new ze(p.node,p.offset))}}u.collapse(h.node,h.offset),a.bidiLevel!=null&&u.caretBidiLevel!==void 0&&(u.caretBidiLevel=a.bidiLevel)}else if(u.extend){u.collapse(h.node,h.offset);try{u.extend(f.node,f.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([h,f]=[f,h]),d.setEnd(f.node,f.offset),d.setStart(h.node,h.offset),u.removeAllRanges(),u.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),s&&s.focus())}),this.view.observer.setSelectionRange(h,f)),this.impreciseAnchor=h.precise?null:new ze(c.anchorNode,c.anchorOffset),this.impreciseHead=f.precise?null:new ze(c.focusNode,c.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&ci(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=xi(e.root),{anchorNode:s,anchorOffset:r}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),h=this.coordsAt(t.head,1);if(!a||!h||a.bottom>h.top)return;let f=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(f.node,f.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let c=e.observer.selectionRange;e.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=t.from&&i.collapse(s,r)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let s=i.posAtStart;if(i.isComposite()){let r;if(e==i.dom)r=i.dom.childNodes[t];else{let o=Xe(e)==0?0:t==0?-1:1;for(;;){let l=e.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(e==l.firstChild?o=-1:o=1),e=l}o<0?r=e:r=e.nextSibling}if(r==i.dom.firstChild)return s;for(;r&&!_.get(r);)r=r.nextSibling;if(!r)return s+i.length;for(let o=0,l=s;;o++){let a=i.children[o];if(a.dom==r)return l;l+=a.length+a.breakAfter}}else return i.isText()?e==i.dom?s+t:s+(t?i.length:0):s}domAtPos(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(e,t):i.domIn(s,t)}inlineDOMNearPos(e,t){let i,s=-1,r=!1,o,l=-1,a=!1;return this.tile.blockTiles((h,f)=>{if(h.isWidget()){if(h.flags&32&&f>=e)return!0;h.flags&16&&(r=!0)}else{let c=f+h.length;if(f<=e&&(i=h,s=e-f,r=c=e&&!o&&(o=h,l=e-f,a=f>e),f>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(r&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(s,t):o.domIn(l,t))}coordsAt(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.widget instanceof pi?null:i.coordsInWidget(s,t,!0):i.coordsIn(s,t)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function s(r,o){if(r.isComposite())for(let l of r.children){if(l.length>=o){let a=s(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(r.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==$.LTR,h=0,f=(c,u,d)=>{for(let p=0;ps);p++){let g=c.children[p],m=u+g.length,b=g.dom.getBoundingClientRect(),{height:C}=b;if(d&&!p&&(h+=b.top-d.top),g instanceof Ye)m>i&&f(g,u,b);else if(u>=i&&(h>0&&t.push(-h),t.push(C+h),h=0,o)){let T=g.dom.lastChild,P=T?tn(T):[];if(P.length){let A=P[P.length-1],v=a?A.right-b.left:b.right-A.left;v>l&&(l=v,this.minWidth=r,this.minWidthFrom=u,this.minWidthTo=m)}}d&&p==c.children.length-1&&(h+=d.bottom-b.bottom),u=m+g.breakAfter}};return f(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?$.RTL:$.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let h of o.children){if(!h.isText()||/[^ -~]/.test(h.text))return;let f=tn(h.dom);if(f.length!=1)return;l+=f[0].width,a=f[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(e)return e;let t=document.createElement("div"),i,s,r;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=tn(t.firstChild)[0];i=t.getBoundingClientRect().height,s=o&&o.width?o.width/27:7,r=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:s,textHeight:r}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,s=0;;s++){let r=s==t.viewports.length?null:t.viewports[s],o=r?r.from-1:this.view.state.doc.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(z.replace({widget:new pi(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return z.set(e)}updateDeco(){let e=1,t=this.view.state.facet(Sn).map(r=>(this.dynamicDecorationMap[e++]=typeof r=="function")?r(this.view):r),i=!1,s=this.view.state.facet(br).map((r,o)=>{let l=typeof r=="function";return l&&(i=!0),l?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[e++]=i,t.push(F.join(s))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof r=="function"?r(this.view):r)}scrollIntoView(e){var t;if(e.isSnapshot){let f=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=f.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let f of this.view.state.facet(Pl))try{if(f(this.view,e.range,e))return!0}catch(c){Me(this.view.state,c,"scroll handler")}let{range:i}=e,s=this.coordsAt(i.head,(t=i.assoc)!==null&&t!==void 0?t:i.empty?0:i.head>i.anchor?-1:1),r;if(!s)return;!i.empty&&(r=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(s={left:Math.min(s.left,r.left),top:Math.min(s.top,r.top),right:Math.max(s.right,r.right),bottom:Math.max(s.bottom,r.bottom)});let o=Wl(this.view),l={left:s.left-o.left,top:s.top-o.top,right:s.right+o.right,bottom:s.bottom+o.bottom},{offsetWidth:a,offsetHeight:h}=this.view.scrollDOM;if(yf(this.view.scrollDOM,l,i.head1&&(s.top>window.pageYOffset+window.visualViewport.offsetTop+window.visualViewport.height||s.bottomi.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){Vs(this.tile)}};function Vs(n,e){let t=e?.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)Vs(i,e)}}function If(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function ql(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=wl(t.focusNode,t.focusOffset),s=xl(t.focusNode,t.focusOffset),r=i||s;if(s&&i&&s.node!=i.node){let l=_.get(s.node);if(!l||l.isText()&&l.text!=s.node.nodeValue)r=s;else if(n.docView.lastCompositionAfterCursor){let a=_.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(r=s)}}if(n.docView.lastCompositionAfterCursor=r!=i,!r)return null;let o=e-r.offset;return{from:o,to:o+r.node.nodeValue.length,node:r.node}}function Hf(n,e,t){let i=ql(n,t);if(!i)return null;let{node:s,from:r,to:o}=i,l=s.nodeValue;if(/[\n\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=e.invertedDesc;return{range:new Te(a.mapPos(r),a.mapPos(o),r,o),text:s}}function Ff(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(t=!0)}),t}var pi=class extends kt{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function $f(n,e,t=1){let i=n.charCategorizer(e),s=n.doc.lineAt(e),r=e-s.from;if(s.length==0)return w.cursor(e);r==0?t=1:r==s.length&&(t=-1);let o=r,l=r;t<0?o=Q(s.text,r,!1):l=Q(s.text,r);let a=i(s.text.slice(o,l));for(;o>0;){let h=Q(s.text,o,!1);if(i(s.text.slice(h,o))!=a)break;o=h}for(;ln.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((s-t.top-(n.defaultLineHeight-l)*.5)/l);r+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+Bo(o,r,n.state.tabSize)}function zs(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>e)break;if(!(r.toe)return r;(!s||r.type==ee.Text&&(s.type!=r.type||(t<0?r.frome)))&&(s=r)}}return s||i}return i}function jf(n,e,t,i){let s=zs(n,e.head,e.assoc||-1),r=!i||s.type!=ee.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head);if(r){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(s.from),a=n.posAtCoords({x:t==(l==$.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(a!=null)return w.cursor(a,t?-1:1)}return w.cursor(t?s.to:s.from,t?-1:1)}function Uo(n,e,t,i){let s=n.state.doc.lineAt(e.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let l=e,a=null;;){let h=Tf(s,r,o,l,t),f=Al;if(!h){if(s.number==(t?n.state.doc.lines:1))return l;f=` +`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),h=n.visualLineSide(s,!t)}if(a){if(!a(f))return l}else{if(!i)return h;a=i(f)}l=h}}function _f(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==Se.Space&&(s=o),s==o}}function Gf(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return w.cursor(s,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(s,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),f=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=r<0?h.top:h.bottom;else{let p=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(s-p.from))),l=(r<0?p.top:p.bottom)+f}let c=a.left+o,u=n.viewState.heightOracle.textHeight>>1,d=i??u;for(let p=0;;p+=u){let g=l+(d+p)*r,m=qs(n,{x:c,y:g},!1,r);if(t?g>a.bottom:gl:C{if(e>r&&es(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:w.cursor(i,in.viewState.docHeight)return new we(n.state.doc.length,-1);if(h=n.elementAtHeight(a),i==null)break;if(h.type==ee.Text){if(i<0?h.ton.viewport.to)break;let u=n.docView.coordsAt(i<0?h.from:h.to,i>0?-1:1);if(u&&(i<0?u.top<=a+r:u.bottom>=a+r))break}let c=n.viewState.heightOracle.textHeight/2;a=i>0?h.bottom+c:h.top-c}if(n.viewport.from>=h.to||n.viewport.to<=h.from){if(t)return null;if(h.type==ee.Text){let c=Uf(n,s,h,o,l);return new we(c,c==h.from?1:-1)}}if(h.type!=ee.Text)return a<(h.top+h.bottom)/2?new we(h.from,1):new we(h.to,-1);let f=n.docView.lineAt(h.from,2);return(!f||f.length!=h.length)&&(f=n.docView.lineAt(h.from,-2)),new Ks(n,o,l,n.textDirectionAt(h.from)).scanTile(f,h.from)}var Ks=class{constructor(e,t,i,s){this.view=e,this.x=t,this.y=i,this.baseDir=s,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+s.from>1;t:if(r.has(p)){let m=i+Math.floor(Math.random()*d);for(let b=0;b1)){if(b.bottomthis.y)(!a||a.top>b.top)&&(a=b),C=-1;else{let T=b.left>this.x?this.x-b.left:b.right(d+d+p)/3)return this.y=l.bottom-1,this.scan(e,t);if(a&&a.top<(d+p+p)/3)return this.y=a.top+1,this.scan(e,t)}let u=(o?this.dirAt(e[h],1):this.baseDir)==$.LTR;return{i:h,after:this.x>(c.left+c.right)/2==u}}scanText(e,t){let i=[];for(let r=0;r{let o=i[r]-t,l=i[r+1]-t;return ki(e.dom,o,l).getClientRects()});return s.after?new we(i[s.i+1],-1):new we(i[s.i],1)}scanTile(e,t){if(!e.length)return new we(t,1);if(e.children.length==1){let l=e.children[0];if(l.isText())return this.scanText(l,t);if(l.isComposite())return this.scanTile(l,t)}let i=[t];for(let l=0,a=t;l{let a=e.children[l];return a.flags&48?null:(a.dom.nodeType==1?a.dom:ki(a.dom,0,a.length)).getClientRects()}),r=e.children[s.i],o=i[s.i];return r.isText()?this.scanText(r,o):r.isComposite()?this.scanTile(r,o):s.after?new we(i[s.i+1],-1):new we(o,1)}},Vt="\uFFFF",$s=class{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(U.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=Vt}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let s=e;;){this.findPointBefore(i,s);let r=this.text.length;this.readNode(s);let o=_.get(s),l=s.nextSibling;if(l==t){o?.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=_.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:hn(s))||hn(l)&&(s.nodeName!="BR"||o?.isWidget())&&this.text.length>r)&&!Yf(l,t)&&this.lineBreak(),s=l}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,s=this.lineSeparator?null:/\r\n?|\n/g;;){let r=-1,o=1,l;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=s.exec(t))&&(r=l.index,o=l[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=r+o}}readNode(e){let t=_.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(Jf(e,i.node,i.offset)?t:0))}};function Jf(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:r,impreciseAnchor:o}=e.docView,l=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=$l(e.docView.tile,t,i,0))){let a=r||o?[]:Qf(e),h=new $s(a,e);h.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=h.text,this.newSel=Zf(a,this.bounds.from)}else{let a=e.observer.selectionRange,h=r&&r.node==a.focusNode&&r.offset==a.focusOffset||!Ts(e.contentDOM,a.focusNode)?l.main.head:e.docView.posFromDOM(a.focusNode,a.focusOffset),f=o&&o.node==a.anchorNode&&o.offset==a.anchorOffset||!Ts(e.contentDOM,a.anchorNode)?l.main.anchor:e.docView.posFromDOM(a.anchorNode,a.anchorOffset),c=e.viewport;if((S.ios||S.chrome)&&l.main.empty&&h!=f&&(c.from>0||c.to-1&&l.ranges.length>1)this.newSel=l.replaceRange(w.range(f,h));else if(e.lineWrapping&&f==h&&!(l.main.empty&&l.main.head==h)&&e.inputState.lastTouchTime>Date.now()-100){let u=e.coordsAtPos(h,-1),d=0;u&&(d=e.inputState.lastTouchY<=u.bottom?-1:1),this.newSel=w.create([w.cursor(h,d)])}else this.newSel=w.single(f,h)}}};function $l(n,e,t,i){if(n.isComposite()){let s=-1,r=-1,o=-1,l=-1;for(let a=0,h=i,f=i;at)return $l(c,e,t,h);if(u>=e&&s==-1&&(s=a,r=h),h>t&&c.dom.parentNode==n.dom){o=a,l=f;break}f=u,h=u+c.breakAfter}return{from:r,to:l<0?i+n.length:l,startDOM:(s?n.children[s-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function Ul(n,e){let t,{newSel:i}=e,{state:s}=n,r=s.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:l,to:a}=e.bounds,h=r.from,f=null;(o===8||S.android&&e.text.length=l&&r.to<=a&&(e.typeOver||c!=e.text)&&c.slice(0,r.from-l)==e.text.slice(0,r.from-l)&&c.slice(r.to-l)==e.text.slice(u=e.text.length-(c.length-(r.to-l)))?t={from:r.from,to:r.to,insert:R.of(e.text.slice(r.from-l,u).split(Vt))}:(d=jl(c,e.text,h-l,f))&&(S.chrome&&o==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==Vt+Vt&&d.toB--,t={from:l+d.from,to:l+d.toA,insert:R.of(e.text.slice(d.from,d.toB).split(Vt))})}else i&&(!n.hasFocus&&s.facet(Je)||gn(i,r))&&(i=null);if(!t&&!i)return!1;if((S.mac||S.android)&&t&&t.from==t.to&&t.from==r.head-1&&/^\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&t.insert.length==2&&(i=w.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:R.of([t.insert.toString().replace("."," ")])}):s.doc.lineAt(r.from).toDate.now()-50?t={from:r.from,to:r.to,insert:s.toText(n.inputState.insertingText)}:S.chrome&&t&&t.from==t.to&&t.from==r.head&&t.insert.toString()==` + `&&n.lineWrapping&&(i&&(i=w.single(i.main.anchor-1,i.main.head-1)),t={from:r.from,to:r.to,insert:R.of([" "])}),t)return wr(n,t,i,o);if(i&&!gn(i,r)){let l=!1,a="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(l=!0),a=n.inputState.lastSelectionOrigin,a=="select.pointer"&&(i=Kl(s.facet(vi).map(h=>h(n)),i))),n.dispatch({selection:i,scrollIntoView:l,userEvent:a}),!0}else return!1}function wr(n,e,t,i=-1){if(S.ios&&n.inputState.flushIOSKey(e))return!0;let s=n.state.selection.main;if(S.android&&(e.to==s.to&&(e.from==s.from||e.from==s.from-1&&n.state.sliceDoc(e.from,s.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&$t(n.contentDOM,"Enter",13)||(e.from==s.from-1&&e.to==s.to&&e.insert.length==0||i==8&&e.insert.lengths.head)&&$t(n.contentDOM,"Backspace",8)||e.from==s.from&&e.to==s.to+1&&e.insert.length==0&&$t(n.contentDOM,"Delete",46)))return!0;let r=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=Xf(n,e,t));return n.state.facet(Ol).some(a=>a(n,e.from,e.to,r,l))||n.dispatch(l()),!0}function Xf(n,e,t){let i,s=n.state,r=s.selection.main,o=-1;if(e.from==e.to&&e.fromr.to){let a=e.fromc(n)),h,a);e.from==f&&(o=f)}if(o>-1)i={changes:e,selection:w.cursor(e.from+e.insert.length,-1)};else if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let a=r.frome.to?s.sliceDoc(e.to,r.to):"";i=s.replaceSelection(n.state.toText(a+e.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let a=s.changes(e),h=t&&t.main.to<=a.newLength?t.main:void 0;if(s.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=r.to+10&&e.to>=r.to-10){let f=n.state.sliceDoc(e.from,e.to),c,u=t&&ql(n,t.main.head);if(u){let p=e.insert.length-(e.to-e.from);c={from:u.from,to:u.to-p}}else c=n.state.doc.lineAt(r.head);let d=r.to-e.to;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:a,range:h||p.map(a)};let g=p.to-d,m=g-f.length;if(n.state.sliceDoc(m,g)!=f||g>=c.from&&m<=c.to)return{range:p};let b=s.changes({from:m,to:g,insert:e.insert}),C=p.to-r.to;return{changes:b,range:h?w.range(Math.max(0,h.anchor+C),Math.max(0,h.head+C)):p.map(b)}})}else i={changes:a,selection:h&&s.selection.replaceRange(h)}}let l="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=".compose",n.inputState.compositionFirstChange&&(l+=".start",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:l,scrollIntoView:!0})}function jl(n,e,t,i){let s=Math.min(n.length,e.length),r=0;for(;r0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,r-Math.min(o,l));t-=o+a-r}if(o=o?r-t:0;r-=a,l=r+(l-o),o=r}else if(l=l?r-t:0;r-=a,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}function Qf(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return t&&(e.push(new pn(t,i)),(s!=t||r!=i)&&e.push(new pn(s,r))),e}function Zf(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?w.single(t+e,i+e):null}function gn(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}var js=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,S.safari&&e.contentDOM.addEventListener("input",()=>null),S.gecko&&dc(e.contentDOM.ownerDocument)}handleEvent(e){!oc(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let s of i.observers)s(this.view,t);for(let s of i.handlers){if(t.defaultPrevented)break;if(s(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=ec(e),i=this.handlers,s=this.view.contentDOM;for(let r in t)if(r!="scroll"){let o=!t[r].handlers.length,l=i[r];l&&o!=!l.handlers.length&&(s.removeEventListener(r,this.handleEvent),l=null),l||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!="scroll"&&!t[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Gl.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),S.android&&S.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return S.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&!e.shiftKey&&((t=_l.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||tc.indexOf(e.key)>-1&&e.ctrlKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:S.safari&&!S.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function jo(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(s){Me(t.state,s)}}}function ec(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let l in r){let a=r[l];a&&t(l).handlers.push(jo(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(jo(i.value,a))}}for(let i in Ee)t(i).handlers.push(Ee[i]);for(let i in he)t(i).observers.push(he[i]);return e}var _l=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],tc="dthko",Gl=[16,17,18,20,91,92,224,225],Ji=6;function Yi(n){return Math.max(0,n)*.7+8}function ic(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}var _s=class{constructor(e,t,i,s){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=ml(e.contentDOM),this.atoms=e.state.facet(vi).map(o=>o(e));let r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(U.allowMultipleSelections)&&nc(e,t),this.dragging=rc(e,t)&&Xl(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&ic(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,s=0,r=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=Wl(this.view);e.clientX-a.left<=s+Ji?t=-Yi(s-e.clientX):e.clientX+a.right>=o-Ji&&(t=Yi(e.clientX-o)),e.clientY-a.top<=r+Ji?i=-Yi(r-e.clientY):e.clientY+a.bottom>=l-Ji&&(i=Yi(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=Kl(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function nc(n,e){let t=n.state.facet(Ml);return t.length?t[0](e):S.mac?e.metaKey:e.ctrlKey}function sc(n,e){let t=n.state.facet(Tl);return t.length?t[0](e):S.mac?!e.altKey:!e.ctrlKey}function rc(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=xi(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function oc(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=_.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}var Ee=Object.create(null),he=Object.create(null),Jl=S.ie&&S.ie_version<15||S.ios&&S.webkit_version<604;function lc(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Yl(n,t.value)},50)}function Cn(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Yl(n,e){e=Cn(n.state,gr,e);let{state:t}=n,i,s=1,r=t.toText(e),o=r.lines==t.selection.ranges.length;if(Gs!=null&&t.selection.ranges.every(a=>a.empty)&&Gs==r.toString()){let a=-1;i=t.changeByRange(h=>{let f=t.doc.lineAt(h.from);if(f.from==a)return{range:h};a=f.from;let c=t.toText((o?r.line(s++).text:e)+t.lineBreak);return{changes:{from:f.from,insert:c},range:w.cursor(h.from+c.length)}})}else o?i=t.changeByRange(a=>{let h=r.line(s++);return{changes:{from:a.from,to:a.to,insert:h.text},range:w.cursor(a.from+h.length)}}):i=t.replaceSelection(r);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}he.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};he.wheel=he.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};Ee.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);he.touchstart=(n,e)=>{let t=n.inputState,i=e.targetTouches[0];t.lastTouchTime=Date.now(),i&&(t.lastTouchX=i.clientX,t.lastTouchY=i.clientY),t.setSelectionOrigin("select.pointer")};he.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};Ee.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(Dl))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=hc(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new _s(n,e,t,i)),i&&n.observer.ignore(()=>{yl(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(e),s.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function _o(n,e,t,i){if(i==1)return w.cursor(e,t);if(i==2)return $f(n.state,e,t);{let s=n.docView.lineAt(e,t),r=n.state.doc.lineAt(s?s.posAtEnd:e),o=s?s.posAtStart:r.from,l=s?s.posAtEnd:r.to;return lDate.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(Jo+1)%3:1}function hc(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=Xl(e),s=n.state.selection;return{update(r){r.docChanged&&(t.pos=r.changes.mapPos(t.pos),s=s.map(r.changes))},get(r,o,l){let a=n.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),h,f=_o(n,a.pos,a.assoc,i);if(t.pos!=a.pos&&!o){let c=_o(n,t.pos,t.assoc,i),u=Math.min(c.from,f.from),d=Math.max(c.to,f.to);f=u1&&(h=fc(s,a.pos))?h:l?s.addRange(f):w.create([f])}}}function fc(n,e){for(let t=0;t=e)return w.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}Ee.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let s=n.docView.tile.nearest(e.target);if(s&&s.isWidget()){let r=s.posAtStart,o=r+s.length;(r>=t.to||o<=t.from)&&(t=w.range(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",Cn(n.state,mr,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Ee.dragend=n=>(n.inputState.draggedContent=null,!1);function Xo(n,e,t,i){if(t=Cn(n.state,gr,t),!t)return;let s=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&sc(n,e)?{from:r.from,to:r.to}:null,l={from:s,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(s,-1),head:a.mapPos(s,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}Ee.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),s=0,r=()=>{++s==t.length&&Xo(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),r()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return Xo(n,e,i,!0),!0}return!1};Ee.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=Jl?null:e.clipboardData;return t?(Yl(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(lc(n),!1)};function cc(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function uc(n){let e=[],t=[],i=!1;for(let s of n.selection.ranges)s.empty||(e.push(n.sliceDoc(s.from,s.to)),t.push(s));if(!e.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:Cn(n,mr,e.join(n.lineBreak)),ranges:t,linewise:i}}var Gs=null;Ee.copy=Ee.cut=(n,e)=>{if(!fi(n.contentDOM,n.observer.selectionRange))return!1;let{text:t,ranges:i,linewise:s}=uc(n.state);if(!t&&!s)return!1;Gs=s?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let r=Jl?null:e.clipboardData;return r?(r.clearData(),r.setData("text/plain",t),!0):(cc(n,t),!1)};var Ql=me.define();function Zl(n,e){let t=[];for(let i of n.facet(Bl)){let s=i(n,e);s&&t.push(s)}return t.length?n.update({effects:t,annotations:Ql.of(!0)}):null}function ea(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=Zl(n.state,e);t?n.dispatch(t):n.update([])}},10)}he.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),ea(n)};he.blur=n=>{n.observer.clearSelectionRange(),ea(n)};he.compositionstart=he.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};he.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,S.chrome&&S.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};he.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};Ee.beforeinput=(n,e)=>{var t,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&n.observer.editContext){let r=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(r&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return wr(n,{from:a,to:h,insert:n.state.toText(r)},null),!0}}let s;if(S.chrome&&S.android&&(s=_l.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key=="Backspace"||s.key=="Delete")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return S.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),S.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>he.compositionend(n,e),20),!1};var Qo=new Set;function dc(n){Qo.has(n)||(Qo.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}var Zo=["pre-wrap","normal","pre-line","break-spaces"],Jt=!1;function el(){Jt=!1}var Js=class{constructor(e){this.lineWrapping=e,this.doc=R.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return Zo.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=l||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=s,this.lineLength=r,a){this.heightSamples={};for(let h=0;h0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>nn&&(Jt=!0),this.height=e)}replace(e,t,i){return n.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,s){let r=this,o=i.doc;for(let l=s.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:f,toB:c}=s[l],u=r.lineAt(a,K.ByPosNoHeight,i.setDoc(t),0,0),d=u.to>=h?u:r.lineAt(h,K.ByPosNoHeight,i,0,0);for(c+=d.to-h,h=d.to;l>0&&u.from<=s[l-1].toA;)a=s[l-1].fromA,f=s[l-1].fromB,l--,ar*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,s-=l.size}else if(r>s*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,r-=l.size}else break;else if(s=r&&o(this.lineAt(0,K.ByPos,i,s,r))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more&&this.setMeasuredHeight(s),this.outdated=!1,this}toString(){return`block(${this.length})`}},be=class n extends yn{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new Ae(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let s=i[0];return i.length==1&&(s instanceof n||s instanceof tt&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof tt?s=new n(s.length,this.height,this.spaceAbove):s.height=this.height,this.outdated||(s.outdated=!1),s):ue.of(i)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more?this.setMeasuredHeight(s):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},tt=class n extends ue{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*r);o=a/r,this.length>r+1&&(l=(this.height-a)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:l}}blockAt(e,t,i,s){let{firstLine:r,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,s);if(t.lineWrapping){let h=s+(e0){let r=i[i.length-1];r instanceof n?i[i.length-1]=new n(r.length+s):i.push(null,new n(s-1))}if(e>0){let r=i[0];r instanceof n?i[0]=new n(e+r.length):i.unshift(new n(e-1),null)}return ue.of(i)}decomposeLeft(e,t){t.push(new n(e-1),null)}decomposeRight(e,t){t.push(null,new n(this.length-e-1))}updateHeight(e,t=0,i=!1,s){let r=t+this.length;if(s&&s.from<=t+this.length&&s.more){let o=[],l=Math.max(t,s.from),a=-1;for(s.from>t&&o.push(new n(s.from-t-1).updateHeight(e,t));l<=r&&s.more;){let f=e.doc.lineAt(l).length;o.length&&o.push(null);let c=s.heights[s.index++],u=0;c<0&&(u=-c,c=s.heights[s.index++]),a==-1?a=c:Math.abs(c-a)>=nn&&(a=-2);let d=new be(f,c,u);d.outdated=!1,o.push(d),l+=f+1}l<=r&&o.push(null,new n(r-l).updateHeight(e,l));let h=ue.of(o);return(a<0||Math.abs(h.height-this.height)>=nn||Math.abs(a-this.heightMetrics(e,t).perLine)>=nn)&&(Jt=!0),mn(this,h)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},Xs=class extends ue{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,s){let r=i+this.left.height;return el))return h;let f=t==K.ByPosNoHeight?K.ByPosNoHeight:K.ByPos;return a?h.join(this.right.lineAt(l,f,i,o,l)):this.left.lineAt(l,f,i,s,r).join(h)}forEachLine(e,t,i,s,r,o){let l=s+this.left.height,a=r+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,l,a,o);else{let h=this.lineAt(a,K.ByPos,i,s,r);e=e&&h.from<=t&&o(h),t>h.to&&this.right.forEachLine(h.to+1,t,i,l,a,o)}}replace(e,t,i){let s=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-s,t-s,i));let r=[];e>0&&this.decomposeLeft(e,r);let o=r.length;for(let l of i)r.push(l);if(e>0&&tl(r,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,s=i+this.break;if(e>=s)return this.right.decomposeRight(e-s,t);e2*t.size||t.size>2*e.size?ue.of(this.break?[e,null,t]:[e,t]):(this.left=mn(this.left,e),this.right=mn(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,s){let{left:r,right:o}=this,l=t+r.length+this.break,a=null;return s&&s.from<=t+r.length&&s.more?a=r=r.updateHeight(e,t,i,s):r.updateHeight(e,t,i),s&&s.from<=l+o.length&&s.more?a=o=o.updateHeight(e,l,i,s):o.updateHeight(e,l,i),a?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function tl(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof tt&&(i=n[e+1])instanceof tt&&n.splice(e-1,3,new tt(t.length+1+i.length))}var gc=5,Qs=class n{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof be?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new be(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=gc)&&this.addLineDeco(s,r,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new be(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new tt(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof be)return e;let t=new be(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,e),s.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof be)&&!this.isCovered?this.nodes.push(new be(0,-1,0)):(this.writtenTof.clientHeight||f.scrollWidth>f.clientWidth)&&c.overflow!="visible"){let u=f.getBoundingClientRect();r=Math.max(r,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?s.innerHeight:a,u.bottom)}h=c.position=="absolute"||c.position=="fixed"?f.offsetParent:f.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:r-t.left,right:Math.max(r,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function bc(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function wc(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}var mi=class{constructor(e,t,i,s){this.from=e,this.to=t,this.size=i,this.displaySize=s}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof s!="function"&&s.class=="cm-lineWrapping");this.heightOracle=new Js(i),this.stateDeco=nl(t),this.heightMap=ue.empty().applyChanges(this.stateDeco,R.empty,this.heightOracle.setDoc(t.doc),[new Te(0,0,0,t.doc.length)]);for(let s=0;s<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());s++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=z.set(this.lineGaps.map(s=>s.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let s=i?t.head:t.anchor;if(!e.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);e.push(new zt(r,o))}}return this.viewports=e.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?il:new tr(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(hi(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=nl(this.state);let s=e.changedRanges,r=Te.extendWithRanges(s,mc(i,this.stateDeco,e?e.changes:se.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);el(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||Jt)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(h||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(Rl)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,i=window.getComputedStyle(t),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?$.RTL:$.LTR;let o=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent==="refresh",l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,f=0;if(l.width&&l.height){let{scaleX:A,scaleY:v}=gl(t,l);(A>.005&&Math.abs(this.scaleX-A)>.005||v>.005&&Math.abs(this.scaleY-v)>.005)&&(this.scaleX=A,this.scaleY=v,h|=16,o=a=!0)}let c=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=c||this.paddingBottom!=u)&&(this.paddingTop=c,this.paddingBottom=u,h|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(s.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,h|=16);let d=ml(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=bl(this.scrollParent||e.win);let g=(this.printing?wc:yc)(t,this.paddingTop),m=g.top-this.pixelViewport.top,b=g.bottom-this.pixelViewport.bottom;this.pixelViewport=g;let C=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(C!=this.inView&&(this.inView=C,C&&(a=!0)),!this.inView&&!this.scrollTarget&&!bc(e.dom))return 0;let T=l.width;if((this.contentDOMWidth!=T||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,h|=16),a){let A=e.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(A)&&(o=!0),o||s.lineWrapping&&Math.abs(T-this.contentDOMWidth)>s.charWidth){let{lineHeight:v,charWidth:k,textHeight:N}=e.docView.measureTextSize();o=v>0&&s.refresh(r,v,k,N,Math.max(5,T/k),A),o&&(e.docView.minWidth=0,h|=16)}m>0&&b>0?f=Math.max(m,b):m<0&&b<0&&(f=Math.min(m,b)),el();for(let v of this.viewports){let k=v.from==this.viewport.from?A:e.docView.measureVisibleLineHeights(v);this.heightMap=(o?ue.empty().applyChanges(this.stateDeco,R.empty,this.heightOracle,[new Te(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new Ys(v.from,k))}Jt&&(h|=2)}let P=!this.viewportIsAppropriate(this.viewport,f)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return P&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(f,this.scrollTarget),h|=this.updateForViewport()),(h&2||P)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new zt(s.lineAt(o-i*1e3,K.ByHeight,r,0,0).from,s.lineAt(l+(1-i)*1e3,K.ByHeight,r,0,0).to);if(t){let{head:h}=t.range;if(ha.to){let f=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),c=s.lineAt(h,K.ByPos,r,0,0),u;t.y=="center"?u=(c.top+c.bottom)/2-f/2:t.y=="start"||t.y=="nearest"&&h=l+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r>1,o=s<<1;if(this.defaultTextDirection!=$.LTR&&!i)return[];let l=[],a=(f,c,u,d)=>{if(c-ff&&bb.from>=u.from&&b.to<=u.to&&Math.abs(b.from-f)b.fromC));if(!m){if(cT.from<=c&&T.to>=c)){let T=t.moveToLineBoundary(w.cursor(c),!1,!0).head;T>f&&(c=T)}let b=this.gapSize(u,f,c,d),C=i||b<2e6?b:2e6;m=new mi(f,c,b,C)}l.push(m)},h=f=>{if(f.length2e6)for(let v of e)v.from>=f.from&&v.fromf.from&&a(f.from,d,f,c),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];F.spans(t,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||hi(this.heightMap.lineAt(e,K.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||hi(this.heightMap.lineAt(this.scaler.fromDOM(e),K.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return hi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},zt=class{constructor(e,t){this.from=e,this.to=t}};function xc(n,e,t){let i=[],s=n,r=0;return F.spans(t,n,e,{span(){},point(o,l){o>s&&(i.push({from:s,to:o}),r+=o-s),s=l}},20),s=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let s=0;;s++){let{from:r,to:o}=e[s],l=o-r;if(i<=l)return r+i;i-=l}}function Qi(n,e){let t=0;for(let{from:i,to:s}of n.ranges){if(e<=s){t+=e-i;break}t+=s-i}return t/n.total}function kc(n,e){for(let t of n)if(e(t))return t}var il={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function nl(n){let e=n.facet(Sn).filter(i=>typeof i!="function"),t=n.facet(br).filter(i=>typeof i!="function");return t.length&&e.push(F.join(t)),e}var tr=class n{constructor(e,t,i){let s=0,r=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=t.lineAt(l,K.ByPos,e,0,0).top,f=t.lineAt(a,K.ByPos,e,0,0).bottom;return s+=f-h,{from:l,to:a,top:h,bottom:f,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(t.height-s);for(let l of this.viewports)l.domTop=o+(l.top-r)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),r=l.bottom}toDOM(e){for(let t=0,i=0,s=0;;t++){let r=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}};function hi(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new Ae(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(s=>hi(s,e)):n._content)}var Zi=M.define({combine:n=>n.join(" ")}),ir=M.define({combine:n=>n.indexOf(!0)>-1}),nr=ye.newName(),ta=ye.newName(),ia=ye.newName(),na={"&light":"."+ta,"&dark":"."+ia};function sr(n,e,t){return new ye(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,s=>{if(s=="&")return n;if(!t||!t[s])throw new RangeError(`Unsupported selector: ${s}`);return t[s]}):n+" "+i}})}var vc=sr("."+nr,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},na),Sc={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},ks=S.ie&&S.ie_version<=11,rr=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new Ds,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(S.ie&&S.ie_version<=11||S.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&S.android&&e.constructor.EDIT_CONTEXT!==!1&&!(S.chrome&&S.chrome_version<126)&&(this.editContext=new or(e),e.state.facet(Je)&&(e.contentDOM.editContext=this.editContext.editContext)),ks&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(Je)?i.root.activeElement!=this.dom:!fi(this.dom,s))return;let r=s.anchorNode&&i.docView.tile.nearest(s.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(S.ie&&S.ie_version<=11||S.android&&S.chrome)&&!i.state.selection.main.empty&&s.focusNode&&ci(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=xi(e.root);if(!t)return!1;let i=S.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&Cc(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let s=fi(this.dom,i);return s&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&$t(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,s=!1;for(let r of e){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:s}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),s=this.selectionChanged&&fi(this.dom,this.selectionRange);if(e<0&&!s)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new Us(this.view,e,t,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,s=Ul(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!gn(this.view.state.selection,t.newSel.main))&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let i=sl(t,e.previousSibling||e.target.previousSibling,-1),s=sl(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:s?t.posBefore(s):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(Je)!=e.state.facet(Je)&&(e.view.contentDOM.editContext=e.state.facet(Je)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function sl(n,e,t){for(;e;){let i=_.get(e);if(i&&i.parent==n)return i;let s=e.parentNode;e=s!=n.dom?s:t>0?e.nextSibling:e.previousSibling}return null}function rl(n,e){let t=e.startContainer,i=e.startOffset,s=e.endContainer,r=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return ci(o.node,o.offset,s,r)&&([t,i,s,r]=[s,r,t,i]),{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}}function Cc(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return rl(n,s)}let t=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?rl(n,t):null}var or=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let s=e.state.selection.main,{anchor:r,head:o}=s,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h=a-l>i.text.length;l==this.from&&rthis.to&&(a=r);let f=jl(e.state.sliceDoc(l,a),i.text,(h?s.from:s.to)-l,h?"end":null);if(!f){let u=w.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));gn(u,s)||e.dispatch({selection:u,userEvent:"select"});return}let c={from:f.from+l,to:f.toA+l,insert:R.of(i.text.slice(f.from,f.toB).split(` +`))};if((S.mac||S.android)&&c.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(c={from:l,to:a,insert:R.of([i.text.replace("."," ")])}),this.pendingContextChange=c,!e.state.readOnly){let u=this.to-this.from+(c.to-c.from+c.insert.length);wr(e,c,w.single(this.toEditorPos(i.selectionStart,u),this.toEditorPos(i.selectionEnd,u)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),c.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,l=r.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(r.rangeStart),h=this.toEditorPos(r.rangeEnd);if(a{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let s=xi(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,s=this.pendingContextChange;return e.changes.iterChanges((r,o,l,a,h)=>{if(i)return;let f=h.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(h)){s=this.pendingContextChange=null,t+=f,this.to+=f;return}else s=null,this.revertPending(e.state);if(r+=t,o+=t,o<=this.from)this.from+=f,this.to+=f;else if(rthis.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),h.toString()),this.to+=f}t+=f}),s&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(s=>!s.isUserEvent("input.type")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),s=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},D=class n{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=e.root||bf(e.parent)||document,this.viewState=new bn(this,e.state||U.create(e)),e.scrollTo&&e.scrollTo.is(Gi)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Wt).map(s=>new di(s));for(let s of this.plugins)s.update(this);this.observer=new rr(this),this.inputState=new js(this),this.inputState.ensureHandlers(this.plugins),this.docView=new dn(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof X?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,s,r=this.state;for(let u of e){if(u.startState!=r)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");r=u.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,l=0,a=null;e.some(u=>u.annotation(Ql))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=Zl(r,o),a||(l=1));let h=this.observer.delayedAndroidKey,f=null;if(h?(this.observer.clearDelayedAndroidKey(),f=this.observer.readChange(),(f&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(f=null)):this.observer.clear(),r.facet(U.phrases)!=this.state.facet(U.phrases))return this.setState(r);s=cn.create(this,r,e),s.flags|=l;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let u of e){if(c&&(c=c.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection,{x:p,y:g}=this.state.facet(n.cursorScrollMargin);c=new ui(d.empty?d:w.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",g,p)}for(let d of u.effects)d.is(Gi)&&(c=d.value.clip(this.state))}this.viewState.update(s,c),this.bidiCache=wn.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),t=this.docView.update(s),this.state.facet(ai)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(u=>u.isUserEvent("select.pointer")))}finally{this.updateState=0}if(s.startState.facet(Zi)!=s.state.facet(Zi)&&(this.viewState.mustMeasureContent=!0),(t||i||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!s.empty)for(let u of this.state.facet(Ls))try{u(s)}catch(d){Me(this.state,d,"update listener")}(a||f)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),f&&!Ul(this,f)&&h.force&&$t(this.contentDOM,h.key,h.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new bn(this,e),this.plugins=e.facet(Wt).map(i=>new di(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new dn(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Wt),i=e.state.facet(Wt);if(t!=i){let s=[];for(let r of i){let o=t.indexOf(r);if(o<0)s.push(new di(r));else{let l=this.plugins[o];l.mustUpdate=e,s.push(l)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=e;for(let s=0;s-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.viewState.scrollParent,s=this.viewState.getScrollOffset(),{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(bl(i||this.win))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure();if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let f=h.map(d=>{try{return d.read(this)}catch(p){return Me(this.state,p),ol}}),c=cn.create(this,this.state,[]),u=!1;c.flags|=a,t?t.flags|=a:t=c,this.updateState=2,c.empty||(this.updatePlugins(c),this.inputState.update(c),this.updateAttrs(),u=this.docView.update(c),u&&this.docViewUpdate());for(let d=0;d1||p<-1)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){s=s+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(Ls))l(t)}get themeClasses(){return nr+" "+(this.state.facet(ir)?ia:ta)+" "+this.state.facet(Zi)}updateAttrs(){let e=ll(this,Il,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(Je)?"true":"false",class:"cm-content",style:`${S.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),ll(this,yr,t);let i=this.observer.ignore(()=>{let s=Vo(this.contentDOM,this.contentAttrs,t),r=Vo(this.dom,this.editorAttrs,e);return s||r});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let s of i.effects)if(s.is(n.announce)){t&&(this.announceDOM.textContent=""),t=!1;let r=this.announceDOM.appendChild(document.createElement("div"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(ai);let e=this.state.facet(n.cspNonce);ye.mount(this.root,this.styleModules.concat(vc).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return xs(this,e,Uo(this,e,t,i))}moveByGroup(e,t){return xs(this,e,Uo(this,e,t,i=>_f(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),s=this.textDirectionAt(e.from),r=i[t?i.length-1:0];return w.cursor(r.side(t,s)+e.from,r.forward(!t,s)?1:-1)}moveToLineBoundary(e,t,i=!0){return jf(this,e,t,i)}moveVertically(e,t,i){return xs(this,e,Gf(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=qs(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),qs(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(e),r=this.bidiSpans(s),o=r[xe.find(r,e-s.from,-1,t)];return fn(i,o.dir==$.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Ll)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>Ac)return Cl(e.length);let t=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||Sl(r.isolates,i=qo(this,e))))return r.order;i||(i=qo(this,e));let s=Mf(e.text,t,i);return this.bidiCache.push(new wn(e.from,e.to,t,i,!0,s)),s}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||S.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{yl(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var i,s,r,o;return Gi.of(new ui(typeof e=="number"?w.cursor(e):e,(i=t.y)!==null&&i!==void 0?i:"nearest",(s=t.x)!==null&&s!==void 0?s:"nearest",(r=t.yMargin)!==null&&r!==void 0?r:5,(o=t.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return Gi.of(new ui(w.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return De.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return De.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=ye.newName(),s=[Zi.of(i),ai.of(sr(`.${i}`,e))];return t&&t.dark&&s.push(ir.of(!0)),s}static baseTheme(e){return Ht.lowest(ai.of(sr("."+nr,e,na)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),s=i&&_.get(i)||_.get(e);return((t=s?.root)===null||t===void 0?void 0:t.view)||null}};D.styleModule=ai;D.inputHandler=Ol;D.clipboardInputFilter=gr;D.clipboardOutputFilter=mr;D.scrollHandler=Pl;D.focusChangeEffect=Bl;D.perLineTextDirection=Ll;D.exceptionSink=El;D.updateListener=Ls;D.editable=Je;D.mouseSelectionStyle=Dl;D.dragMovesSelection=Tl;D.clickAddsSelectionRange=Ml;D.decorations=Sn;D.blockWrappers=Hl;D.outerDecorations=br;D.atomicRanges=vi;D.bidiIsolatedRanges=Fl;D.cursorScrollMargin=M.define({combine:n=>{let e=5,t=5;for(let i of n)typeof i=="number"?e=t=i:{x:e,y:t}=i;return{x:e,y:t}}});D.scrollMargins=Vl;D.darkTheme=ir;D.cspNonce=M.define({combine:n=>n.length?n[0]:""});D.contentAttributes=yr;D.editorAttributes=Il;D.lineWrapping=D.contentAttributes.of({class:"cm-lineWrapping"});D.announce=j.define();var Ac=4096,ol={},wn=class n{constructor(e,t,i,s,r,o){this.from=e,this.to=t,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(e,t){if(t.empty&&!e.some(r=>r.fresh))return e;let i=[],s=e.length?e[e.length-1].dir:$.LTR;for(let r=Math.max(0,e.length-10);r=0;s--){let r=i[s],o=typeof r=="function"?r(n):r;o&&ur(o,t)}return t}var Mc=S.mac?"mac":S.windows?"win":S.linux?"linux":"key";function Tc(n,e){let t=n.split(/-(?!$)/),i=t[t.length-1];i=="Space"&&(i=" ");let s,r,o,l;for(let a=0;ai.concat(s),[]))),t}var et=null,Oc=4e3;function Bc(n,e=Mc){let t=Object.create(null),i=Object.create(null),s=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},r=(o,l,a,h,f)=>{var c,u;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(b=>Tc(b,e));for(let b=1;b{let P=et={view:T,prefix:C,scope:o};return setTimeout(()=>{et==P&&(et=null)},Oc),!0}]})}let g=p.join(" ");s(g,!1);let m=d[g]||(d[g]={preventDefault:!1,stopPropagation:!1,run:((u=(c=d._any)===null||c===void 0?void 0:c.run)===null||u===void 0?void 0:u.slice())||[]});a&&m.run.push(a),h&&(m.preventDefault=!0),f&&(m.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let h of l){let f=t[h]||(t[h]=Object.create(null));f._any||(f._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:c}=o;for(let u in f)f[u].run.push(d=>c(d,lr))}let a=o[e]||o.key;if(a)for(let h of l)r(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(h,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}var lr=null;function Lc(n,e,t,i){lr=e;let s=No(e),r=wo(s,0),o=xo(r)==s.length&&s!=" ",l="",a=!1,h=!1,f=!1;et&&et.view==t&&et.scope==i&&(l=et.prefix+" ",Gl.indexOf(e.keyCode)<0&&(h=!0,et=null));let c=new Set,u=m=>{if(m){for(let b of m.run)if(!c.has(b)&&(c.add(b),b(t)))return m.stopPropagation&&(f=!0),!0;m.preventDefault&&(m.stopPropagation&&(f=!0),h=!0)}return!1},d=n[i],p,g;return d&&(u(d[l+en(s,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(S.windows&&e.ctrlKey&&e.altKey)&&!(S.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=Ge[e.keyCode])&&p!=s?(u(d[l+en(p,e,!0)])||e.shiftKey&&(g=Ft[e.keyCode])!=s&&g!=p&&u(d[l+en(g,e,!1)]))&&(a=!0):o&&e.shiftKey&&u(d[l+en(s,e,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&f&&e.stopPropagation(),lr=null,a}var xt=class n{constructor(e,t,i,s,r){this.className=e,this.left=t,this.top=i,this.width=s,this.height=r}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let s=e.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let r=sa(e);return[new n(t,s.left-r.left,s.top-r.top,null,s.bottom-s.top)]}else return Rc(e,t,i)}};function sa(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==$.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function hl(n,e,t,i){let s=n.coordsAtPos(e,t*2);if(!s)return i;let r=n.dom.getBoundingClientRect(),o=(s.top+s.bottom)/2,l=n.posAtCoords({x:r.left+1,y:o}),a=n.posAtCoords({x:r.right-1,y:o});return l==null||a==null?i:{from:Math.max(i.from,Math.min(l,a)),to:Math.min(i.to,Math.max(l,a))}}function Rc(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),s=Math.min(t.to,n.viewport.to),r=n.textDirection==$.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=sa(n),h=o.querySelector(".cm-line"),f=h&&window.getComputedStyle(h),c=l.left+(f?parseInt(f.paddingLeft)+Math.min(0,parseInt(f.textIndent)):0),u=l.right-(f?parseInt(f.paddingRight):0),d=zs(n,i,1),p=zs(n,s,-1),g=d.type==ee.Text?d:null,m=p.type==ee.Text?p:null;if(g&&(n.lineWrapping||d.widgetLineBreaks)&&(g=hl(n,i,1,g)),m&&(n.lineWrapping||p.widgetLineBreaks)&&(m=hl(n,s,-1,m)),g&&m&&g.from==m.from&&g.to==m.to)return C(T(t.from,t.to,g));{let A=g?T(t.from,null,g):P(d,!1),v=m?T(null,t.to,m):P(p,!0),k=[];return(g||d).to<(m||p).from-(g&&m?1:0)||d.widgetLineBreaks>1&&A.bottom+n.defaultLineHeight/2E&&I.from=ne)break;pe>q&&B(Math.max(Z,q),A==null&&Z<=E,Math.min(pe,ne),v==null&&pe>=H,He.dir)}if(q=fe.to+1,q>=ne)break}return V.length==0&&B(E,A==null,H,v==null,n.textDirection),{top:N,bottom:L,horizontal:V}}function P(A,v){let k=l.top+(v?A.top:A.bottom);return{top:k,bottom:k,horizontal:[]}}}function Pc(n,e){return n.constructor==e.constructor&&n.eq(e)}var ar=class{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(sn)!=e.state.facet(sn)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(sn);for(;t!Pc(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let s of e)s.update&&t&&s.constructor&&this.drawn[i].constructor&&s.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(s.draw(),t);for(;t;){let s=t.nextSibling;t.remove(),t=s}this.drawn=e,S.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},sn=M.define();function ra(n){return[De.define(e=>new ar(e,n)),sn.of(n)]}var Yt=M.define({combine(n){return mt(n,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function oa(n={}){return[Yt.of(n),Nc,Ic,Hc,Rl.of(!0)]}function la(n){return n.startState.facet(Yt)!=n.state.facet(Yt)}var Nc=ra({above:!0,markers(n){let{state:e}=n,t=e.facet(Yt),i=[];for(let s of e.selection.ranges){let r=s==e.selection.main;if(s.empty||t.drawRangeCursor&&!(r&&S.ios&&t.iosSelectionHandles)){let o=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=s.empty?s:w.cursor(s.head,s.assoc);for(let a of xt.forRange(n,o,l))i.push(a)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=la(n);return t&&fl(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){fl(e.state,n)},class:"cm-cursorLayer"});function fl(n,e){e.style.animationDuration=n.facet(Yt).cursorBlinkRate+"ms"}var Ic=ra({above:!1,markers(n){let e=[],{main:t,ranges:i}=n.state.selection;for(let s of i)if(!s.empty)for(let r of xt.forRange(n,"cm-selectionBackground",s))e.push(r);if(S.ios&&!t.empty&&n.state.facet(Yt).iosSelectionHandles){for(let s of xt.forRange(n,"cm-selectionHandle cm-selectionHandle-start",w.cursor(t.from,1)))e.push(s);for(let s of xt.forRange(n,"cm-selectionHandle cm-selectionHandle-end",w.cursor(t.to,1)))e.push(s)}return e},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||la(n)},class:"cm-selectionLayer"}),Hc=Ht.highest(D.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}}));var gp=/x/.unicode!=null?"gu":"g";function aa(){return Vc}var Fc=z.line({class:"cm-activeLine"}),Vc=De.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let s=n.lineBlockAt(i.head);s.from>e&&(t.push(Fc.range(s.from)),e=s.from)}return z.set(t)}},{decorations:n=>n.decorations});var mp=D.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:`${7*2}px`,position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}});var Oe=class extends Ve{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};Oe.prototype.elementClass="";Oe.prototype.toDOM=void 0;Oe.prototype.mapMode=le.TrackBefore;Oe.prototype.startSide=Oe.prototype.endSide=-1;Oe.prototype.point=!0;var rn=M.define(),Wc=M.define();var on=M.define();var hr=M.define({combine:n=>n.some(e=>e)});function zc(n){let e=[qc];return n&&n.fixed===!1&&e.push(hr.of(!0)),e}var qc=De.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(on).map(e=>new xn(n,e)),this.fixed=!n.state.facet(hr);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(hr)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=F.iter(this.view.state.facet(rn),this.view.viewport.from),i=[],s=this.gutters.map(r=>new cr(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let o=!0;for(let l of r.type)if(l.type==ee.Text&&o){fr(t,i,l.from);for(let a of s)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of s)a.widget(this.view,l)}else if(r.type==ee.Text){fr(t,i,r.from);for(let o of s)o.line(this.view,r,i)}else if(r.widget)for(let o of s)o.widget(this.view,r);for(let r of s)r.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(on),t=n.state.facet(on),i=n.docChanged||n.heightChanged||n.viewportChanged||!F.eq(n.startState.facet(rn),n.state.facet(rn),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let s of this.gutters)s.update(n)&&(i=!0);else{i=!0;let s=[];for(let r of t){let o=e.indexOf(r);o<0?s.push(new xn(this.view,r)):(this.gutters[o].update(n),s.push(this.gutters[o]))}for(let r of this.gutters)r.dom.remove(),s.indexOf(r)<0&&r.destroy();for(let r of s)r.config.side=="after"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=s}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>D.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,s=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==$.LTR?{left:i,right:s}:{right:i,left:s}})});function cl(n){return Array.isArray(n)?n:[n]}function fr(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}var cr=class{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=F.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:s}=this,r=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==s.elements.length){let l=new kn(e,o,r,i);s.elements.push(l),s.dom.appendChild(l.dom)}else s.elements[this.i].update(e,o,r,i);this.height=t.bottom,this.i++}line(e,t,i){let s=[];fr(this.cursor,s,t.from),i.length&&(s=s.concat(i));let r=this.gutter.config.lineMarker(e,t,s);r&&s.unshift(r);let o=this.gutter;s.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,s)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),s=i?[i]:null;for(let r of e.state.facet(Wc)){let o=r(e,t.widget,t);o&&(s||(s=[])).push(o)}s&&this.addElement(e,t,s)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}},xn=class{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,s=>{let r=s.target,o;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let a=r.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=s.clientY;let l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,s)&&s.preventDefault()});this.markers=cl(t.markers(e)),t.initialSpacer&&(this.spacer=new kn(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=cl(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let s=this.config.updateSpacer(this.spacer.markers[0],e);s!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[s])}let i=e.view.viewport;return!F.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},kn=class{constructor(e,t,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,s)}update(e,t,i,s){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),Kc(this.markers,s)||this.setMarkers(e,s)}setMarkers(e,t){let i="cm-gutterElement",s=this.dom.firstChild;for(let r=0,o=0;;){let l=o,a=rr(l,a,h)||o(l,a,h):o}return i}})}}),yi=class extends Oe{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function vs(n,e){return n.state.facet(qt).formatNumber(e,n.state)}var jc=on.compute([qt],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet($c)},lineMarker(e,t,i){return i.some(s=>s.toDOM)?null:new yi(vs(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let s of e.state.facet(Uc)){let r=s(e,t,i);if(r)return r}return null},lineMarkerChange:e=>e.startState.facet(qt)!=e.state.facet(qt),initialSpacer(e){return new yi(vs(e,ul(e.state.doc.lines)))},updateSpacer(e,t){let i=vs(t.view,ul(t.view.state.doc.lines));return i==e.number?e:new yi(i)},domEventHandlers:n.facet(qt).domEventHandlers,side:"before"}));function ha(n={}){return[qt.of(n),zc(),jc]}function ul(n){let e=9;for(;e{let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.head).from;s>t&&(t=s,e.push(_c.range(s)))}return F.of(e)});function fa(){return Gc}var Jc=0,Si=class{constructor(e,t){this.from=e,this.to=t}},O=class{constructor(e={}){this.id=Jc++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=oe.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}};O.closedBy=new O({deserialize:n=>n.split(" ")});O.openedBy=new O({deserialize:n=>n.split(" ")});O.group=new O({deserialize:n=>n.split(" ")});O.isolate=new O({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});O.contextHash=new O({perNode:!0});O.lookAhead=new O({perNode:!0});O.mounted=new O({perNode:!0});var At=class{constructor(e,t,i,s=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=s}static get(e){return e&&e.props&&e.props[O.mounted.id]}},Yc=Object.create(null),oe=class n{constructor(e,t,i,s=0){this.name=e,this.props=t,this.id=i,this.flags=s}static define(e){let t=e.props&&e.props.length?Object.create(null):Yc,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),s=new n(e.name||"",t,e.id,i);if(e.props){for(let r of e.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[r[0].id]=r[1]}}return s}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(O.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let s of i.split(" "))t[s]=e[i];return i=>{for(let s=i.prop(O.group),r=-1;r<(s?s.length:0);r++){let o=t[r<0?i.name:s[r]];if(o)return o}}}};oe.none=new oe("",Object.create(null),0,8);var Dn=class n{constructor(e){this.types=e;for(let t=0;t0;for(let a=this.cursor(o|J.IncludeAnonymous);;){let h=!1;if(a.from<=r&&a.to>=s&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Mr(oe.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,s)=>new n(this.type,t,i,s,this.propValues),e.makeTree||((t,i,s)=>new n(oe.none,t,i,s)))}static build(e){return Qc(e)}};G.empty=new G(oe.none,[],[],0);var xr=class n{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new n(this.buffer,this.index)}},st=class n{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return oe.none}toString(){let e=[];for(let t=0;t0));a=o[a+3]);return l}slice(e,t,i){let s=this.buffer,r=new Uint16Array(t-e),o=0;for(let l=e,a=0;l=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function Ci(n,e,t,i){for(var s;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?l.length:-1;e!=h;e+=t){let f=l[e],c=a[e]+o.from,u;if(!(!(r&J.EnterBracketed&&f instanceof G&&(u=At.get(f))&&!u.overlay&&u.bracketed&&i>=c&&i<=c+f.length)&&!pa(s,i,c,c+f.length))){if(f instanceof st){if(r&J.ExcludeBuffers)continue;let d=f.findChild(0,f.buffer.length,t,i-c,s);if(d>-1)return new Ai(new vr(o,f,e,c),null,d)}else if(r&J.IncludeAnonymous||!f.type.isAnonymous||Ar(f)){let d;if(!(r&J.IgnoreMounts)&&(d=At.get(f))&&!d.overlay)return new n(d.tree,c,e,o);let p=new n(f,c,e,o);return r&J.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?f.children.length-1:0,t,i,s,r)}}}if(r&J.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let s;if(!(i&J.IgnoreOverlays)&&(s=At.get(this._tree))&&s.overlay){let r=e-this.from,o=i&J.EnterBracketed&&s.bracketed;for(let{from:l,to:a}of s.overlay)if((t>0||o?l<=r:l=r:a>r))return new n(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function ua(n,e,t,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(t!=null){for(let o=!1;!o;)if(o=s.type.is(t),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(e)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function kr(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}var vr=class{constructor(e,t,i,s){this.parent=e,this.buffer=t,this.index=i,this.start=s}},Ai=class n extends En{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.context.start,i);return r<0?null:new n(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&J.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return r<0?null:new n(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new n(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new n(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];e.push(i.slice(s,r,o)),t.push(0)}return new G(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function ga(n){if(!n.length)return null;let e=0,t=n[0];for(let r=1;rt.from||o.to=e){let l=new qe(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(Ci(l,e,t,!1))}}return s?ga(s):i}var Mi=class{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~J.EnterBracketed,e instanceof qe)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:s}=this.buffer;return this.type=t||s.set.types[s.buffer[e]],this.from=i+s.buffer[e+1],this.to=i+s.buffer[e+2],!0}yield(e){return e?e instanceof qe?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&J.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&J.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&J.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(t.findChild(s,this.index,-1,0,4))}else{let s=t.buffer[this.index+3];if(s<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:s}=this;if(s){if(e>0){if(this.index-1)for(let r=t+e,o=e<0?-1:i._tree.children.length;r!=o;r+=e){let l=i._tree.children[r];if(this.mode&J.IncludeAnonymous||l instanceof st||!l.type.isAnonymous||Ar(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==s){if(s==this.index)return o;t=o,i=r+1;break e}s=this.stack[--r]}for(let s=i;s=0;r--){if(r<0)return kr(this._tree,e,s);let o=i[t.buffer[this.stack[r]]];if(!o.isAnonymous){if(e[s]&&e[s]!=o.name)return!1;s--}}return!0}};function Ar(n){return n.children.some(e=>e instanceof st||!e.type.isAnonymous||Ar(e))}function Qc(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:s=1024,reused:r=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new xr(t,t.length):t,a=i.types,h=0,f=0;function c(A,v,k,N,L,V){let{id:B,start:E,end:H,size:I}=l,q=f,ne=h;if(I<0)if(l.next(),I==-1){let je=r[B];k.push(je),N.push(E-A);return}else if(I==-3){h=B;return}else if(I==-4){f=B;return}else throw new RangeError(`Unrecognized record size: ${I}`);let fe=a[B],He,Z,pe=E-A;if(H-E<=s&&(Z=m(l.pos-v,L))){let je=new Uint16Array(Z.size-Z.skip),ge=l.pos-Z.size,Fe=je.length;for(;l.pos>ge;)Fe=b(Z.start,je,Fe);He=new st(je,H-Z.start,i),pe=Z.start-A}else{let je=l.pos-I;l.next();let ge=[],Fe=[],ht=B>=o?B:-1,Bt=0,Ii=H;for(;l.pos>je;)ht>=0&&l.id==ht&&l.size>=0?(l.end<=Ii-s&&(p(ge,Fe,E,Bt,l.end,Ii,ht,q,ne),Bt=ge.length,Ii=l.end),l.next()):V>2500?u(E,je,ge,Fe):c(E,je,ge,Fe,ht,V+1);if(ht>=0&&Bt>0&&Bt-1&&Bt>0){let so=d(fe,ne);He=Mr(fe,ge,Fe,0,ge.length,0,H-E,so,so)}else He=g(fe,ge,Fe,H-E,q-H,ne)}k.push(He),N.push(pe)}function u(A,v,k,N){let L=[],V=0,B=-1;for(;l.pos>v;){let{id:E,start:H,end:I,size:q}=l;if(q>4)l.next();else{if(B>-1&&H=0;I-=3)E[q++]=L[I],E[q++]=L[I+1]-H,E[q++]=L[I+2]-H,E[q++]=q;k.push(new st(E,L[2]-H,i)),N.push(H-A)}}function d(A,v){return(k,N,L)=>{let V=0,B=k.length-1,E,H;if(B>=0&&(E=k[B])instanceof G){if(!B&&E.type==A&&E.length==L)return E;(H=E.prop(O.lookAhead))&&(V=N[B]+E.length+H)}return g(A,k,N,L,V,v)}}function p(A,v,k,N,L,V,B,E,H){let I=[],q=[];for(;A.length>N;)I.push(A.pop()),q.push(v.pop()+k-L);A.push(g(i.types[B],I,q,V-L,E-V,H)),v.push(L-k)}function g(A,v,k,N,L,V,B){if(V){let E=[O.contextHash,V];B=B?[E].concat(B):[E]}if(L>25){let E=[O.lookAhead,L];B=B?[E].concat(B):[E]}return new G(A,v,k,N,B)}function m(A,v){let k=l.fork(),N=0,L=0,V=0,B=k.end-s,E={size:0,start:0,skip:0};e:for(let H=k.pos-A;k.pos>H;){let I=k.size;if(k.id==v&&I>=0){E.size=N,E.start=L,E.skip=V,V+=4,N+=4,k.next();continue}let q=k.pos-I;if(I<0||q=o?4:0,fe=k.start;for(k.next();k.pos>q;){if(k.size<0)if(k.size==-3||k.size==-4)ne+=4;else break e;else k.id>=o&&(ne+=4);k.next()}L=fe,N+=I,V+=ne}return(v<0||N==A)&&(E.size=N,E.start=L,E.skip=V),E.size>4?E:void 0}function b(A,v,k){let{id:N,start:L,end:V,size:B}=l;if(l.next(),B>=0&&N4){let H=l.pos-(B-4);for(;l.pos>H;)k=b(A,v,k)}v[--k]=E,v[--k]=V-A,v[--k]=L-A,v[--k]=N}else B==-3?h=N:B==-4&&(f=N);return k}let C=[],T=[];for(;l.pos>0;)c(n.start||0,n.bufferStart||0,C,T,-1,0);let P=(e=n.length)!==null&&e!==void 0?e:C.length?T[0]+C[0].length:0;return new G(a[n.topID],C.reverse(),T.reverse(),P)}var da=new WeakMap;function Tn(n,e){if(!n.isAnonymous||e instanceof st||e.type!=n)return 1;let t=da.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof G)){t=1;break}t+=Tn(n,i)}da.set(e,t)}return t}function Mr(n,e,t,i,s,r,o,l,a){let h=0;for(let p=i;p=f)break;v+=k}if(T==P+1){if(v>f){let k=p[P];d(k.children,k.positions,0,k.children.length,g[P]+C);continue}c.push(p[P])}else{let k=g[T-1]+p[T-1].length-A;c.push(Mr(n,p,g,P,T,A,k,null,a))}u.push(A+C-r)}}return d(e,t,i,s,0),(l||a)(c,u,o)}var Mt=class n{constructor(e,t,i,s,r=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let s=[new n(0,e.length,e,0,!1,i)];for(let r of t)r.to>e.length&&s.push(r);return s}static applyChanges(e,t,i=128){if(!t.length)return e;let s=[],r=1,o=e.length?e[0]:null;for(let l=0,a=0,h=0;;l++){let f=l=i)for(;o&&o.from=u.from||c<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,c)-h;u=d>=p?null:new n(d,p,u.tree,u.offset+h,l>0,!!f)}if(u&&s.push(u),o.to>c)break;o=rnew Si(s.from,s.to)):[new Si(0,0)]:[new Si(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let s=this.startParse(e,t,i);for(;;){let r=s.advance();if(r)return r}}},Cr=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}};var vp=new O({perNode:!0});var Zc=0,Be=class n{constructor(e,t,i,s){this.name=e,this.set=t,this.base=i,this.modified=s,this.id=Zc++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof n&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let s=new n(i,[],null,[]);if(s.set.push(s),t)for(let r of t.set)s.set.push(r);return s}static defineModifier(e){let t=new Rn(e);return i=>i.modified.indexOf(t)>-1?i:Rn.get(i.base||i,i.modified.concat(t).sort((s,r)=>s.id-r.id))}},eu=0,Rn=class n{constructor(e){this.name=e,this.instances=[],this.id=eu++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&tu(t,l.modified));if(i)return i;let s=[],r=new Be(e.name,s,e,t);for(let l of t)l.instances.push(r);let o=iu(t);for(let l of e.set)if(!l.modified.length)for(let a of o)s.push(n.get(l,a));return r}};function tu(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function iu(n){let e=[[]];for(let t=0;ti.length-t.length)}function ba(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let s of t.split(" "))if(s){let r=[],o=2,l=s;for(let c=0;;){if(l=="..."&&c>0&&c+3==s.length){o=1;break}let u=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!u)throw new RangeError("Invalid path: "+s);if(r.push(u[0]=="*"?"":u[0][0]=='"'?JSON.parse(u[0]):u[0]),c+=u[0].length,c==s.length)break;let d=s[c++];if(c==s.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+s);l=s.slice(c)}let a=r.length-1,h=r[a];if(!h)throw new RangeError("Invalid path: "+s);let f=new Dt(i,o,a>0?r.slice(0,a):null);e[h]=f.sort(e[h])}}return wa.add(e)}var wa=new O({combine(n,e){let t,i,s;for(;n||e;){if(!n||e&&n.depth>=e.depth?(s=e,e=e.next):(s=n,n=n.next),t&&t.mode==s.mode&&!s.context&&!t.context)continue;let r=new Dt(s.tags,s.mode,s.context);t?t.next=r:i=r,t=r}return i}}),Dt=class{constructor(e,t,i,s){this.tags=e,this.mode=t,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=s;for(let l of r)for(let a of l.set){let h=t[a.id];if(h){o=o?o+" "+h:h;break}}return o},scope:i}}function nu(n,e){let t=null;for(let i of n){let s=i.style(e);s&&(t=t?t+" "+s:s)}return t}function xa(n,e,t,i=0,s=n.length){let r=new Dr(i,Array.isArray(e)?e:[e],t);r.highlightRange(n.cursor(),i,s,"",r.highlighters),r.flush(s)}var Dr=class{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,s,r){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=s,f=su(e)||Dt.empty,c=nu(r,f.tags);if(c&&(h&&(h+=" "),h+=c,f.mode==1&&(s+=(s?" ":"")+c)),this.startSpan(Math.max(t,l),h),f.opaque)return;let u=e.tree&&e.tree.prop(O.mounted);if(u&&u.overlay){let d=e.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(m=>!m.scope||m.scope(u.tree.type)),g=e.firstChild();for(let m=0,b=l;;m++){let C=m=T||!e.nextSibling())););if(!C||T>i)break;b=C.to+l,b>t&&(this.highlightRange(d.cursor(),Math.max(t,C.from+l),Math.min(i,b),"",p),this.startSpan(Math.min(i,b),h))}g&&e.parent()}else if(e.firstChild()){u&&(s="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,s,r),this.startSpan(Math.min(i,e.to),h)}while(e.nextSibling());e.parent()}}};function su(n){let e=n.type.prop(wa);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}var x=Be.define,On=x(),rt=x(),ma=x(rt),ya=x(rt),ot=x(),Bn=x(ot),Tr=x(ot),Ue=x(),Tt=x(Ue),Ke=x(),$e=x(),Er=x(),Di=x(Er),Ln=x(),y={comment:On,lineComment:x(On),blockComment:x(On),docComment:x(On),name:rt,variableName:x(rt),typeName:ma,tagName:x(ma),propertyName:ya,attributeName:x(ya),className:x(rt),labelName:x(rt),namespace:x(rt),macroName:x(rt),literal:ot,string:Bn,docString:x(Bn),character:x(Bn),attributeValue:x(Bn),number:Tr,integer:x(Tr),float:x(Tr),bool:x(ot),regexp:x(ot),escape:x(ot),color:x(ot),url:x(ot),keyword:Ke,self:x(Ke),null:x(Ke),atom:x(Ke),unit:x(Ke),modifier:x(Ke),operatorKeyword:x(Ke),controlKeyword:x(Ke),definitionKeyword:x(Ke),moduleKeyword:x(Ke),operator:$e,derefOperator:x($e),arithmeticOperator:x($e),logicOperator:x($e),bitwiseOperator:x($e),compareOperator:x($e),updateOperator:x($e),definitionOperator:x($e),typeOperator:x($e),controlOperator:x($e),punctuation:Er,separator:x(Er),bracket:Di,angleBracket:x(Di),squareBracket:x(Di),paren:x(Di),brace:x(Di),content:Ue,heading:Tt,heading1:x(Tt),heading2:x(Tt),heading3:x(Tt),heading4:x(Tt),heading5:x(Tt),heading6:x(Tt),contentSeparator:x(Ue),list:x(Ue),quote:x(Ue),emphasis:x(Ue),strong:x(Ue),link:x(Ue),monospace:x(Ue),strikethrough:x(Ue),inserted:x(),deleted:x(),changed:x(),invalid:x(),meta:Ln,documentMeta:x(Ln),annotation:x(Ln),processingInstruction:x(Ln),definition:Be.defineModifier("definition"),constant:Be.defineModifier("constant"),function:Be.defineModifier("function"),standard:Be.defineModifier("standard"),local:Be.defineModifier("local"),special:Be.defineModifier("special")};for(let n in y){let e=y[n];e instanceof Be&&(e.name=n)}var Ap=Or([{tag:y.link,class:"tok-link"},{tag:y.heading,class:"tok-heading"},{tag:y.emphasis,class:"tok-emphasis"},{tag:y.strong,class:"tok-strong"},{tag:y.keyword,class:"tok-keyword"},{tag:y.atom,class:"tok-atom"},{tag:y.bool,class:"tok-bool"},{tag:y.url,class:"tok-url"},{tag:y.labelName,class:"tok-labelName"},{tag:y.inserted,class:"tok-inserted"},{tag:y.deleted,class:"tok-deleted"},{tag:y.literal,class:"tok-literal"},{tag:y.string,class:"tok-string"},{tag:y.number,class:"tok-number"},{tag:[y.regexp,y.escape,y.special(y.string)],class:"tok-string2"},{tag:y.variableName,class:"tok-variableName"},{tag:y.local(y.variableName),class:"tok-variableName tok-local"},{tag:y.definition(y.variableName),class:"tok-variableName tok-definition"},{tag:y.special(y.variableName),class:"tok-variableName2"},{tag:y.definition(y.propertyName),class:"tok-propertyName tok-definition"},{tag:y.typeName,class:"tok-typeName"},{tag:y.namespace,class:"tok-namespace"},{tag:y.className,class:"tok-className"},{tag:y.macroName,class:"tok-macroName"},{tag:y.propertyName,class:"tok-propertyName"},{tag:y.operator,class:"tok-operator"},{tag:y.comment,class:"tok-comment"},{tag:y.meta,class:"tok-meta"},{tag:y.invalid,class:"tok-invalid"},{tag:y.punctuation,class:"tok-punctuation"}]);var Br,Xt=new O;function ru(n){return M.define({combine:n?e=>e.concat(n):void 0})}var ou=new O,de=class{constructor(e,t,i=[],s=""){this.data=e,this.name=s,U.prototype.hasOwnProperty("tree")||Object.defineProperty(U.prototype,"tree",{get(){return Re(this)}}),this.parser=t,this.extension=[Qt.of(this),U.languageData.of((r,o,l)=>{let a=ka(r,o,l),h=a.type.prop(Xt);if(!h)return[];let f=r.facet(h),c=a.type.prop(ou);if(c){let u=a.resolve(o-a.from,l);for(let d of c)if(d.test(u,r)){let p=r.facet(d.facet);return d.type=="replace"?p:p.concat(f)}}return f})].concat(i)}isActiveAt(e,t,i=-1){return ka(e,t,i).type.prop(Xt)==this.data}findRegions(e){let t=e.facet(Qt);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],s=(r,o)=>{if(r.prop(Xt)==this.data){i.push({from:o,to:o+r.length});return}let l=r.prop(O.mounted);if(l){if(l.tree.prop(Xt)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+r.length});return}else if(l.overlay){let a=i.length;if(s(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;a=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}},Ei=null,Oi=class n{constructor(e,t,i=[],s,r,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=s,this.treeLen=r,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new n(e,t,[],G.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Nr(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=G.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let s=Date.now()+e;e=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(Mt.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=Ei;Ei=this;try{return e()}finally{Ei=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=va(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:s,treeLen:r,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((h,f,c,u)=>a.push({fromA:h,toA:f,fromB:c,toB:u})),i=Mt.applyChanges(i,a),s=G.empty,r=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let h of this.skipped){let f=e.mapPos(h.from,1),c=e.mapPos(h.to,-1);fe.from&&(this.fragments=va(this.fragments,s,r),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends Ti{createParse(t,i,s){let r=s[0].from,o=s[s.length-1].to;return{parsedPos:r,advance(){let a=Ei;if(a){for(let h of s)a.tempSkipped.push(h);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new G(oe.none,[],[],o-r)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return Ei}};function va(n,e,t){return Mt.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}var Bi=class n{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new n(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=Oi.create(e.facet(Qt).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new n(i)}};de.state=Ce.define({create:Bi.init,update(n,e){for(let t of e.effects)if(t.is(de.setState))return t.value;return e.startState.facet(Qt)!=e.state.facet(Qt)?Bi.init(e.state):n.apply(e)}});var Da=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Da=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});var Lr=typeof navigator<"u"&&(!((Br=navigator.scheduling)===null||Br===void 0)&&Br.isInputPending)?()=>navigator.scheduling.isInputPending():null,lu=De.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(de.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(de.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Da(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnds+1e3,a=r.context.work(()=>Lr&&Lr()||Date.now()>o,s+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:de.setState.of(new Bi(r.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>Me(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Qt=M.define({combine(n){return n.length?n[0]:null},enables:n=>[de.state,lu,D.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]});var au=M.define(),ei=M.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function lt(n){let e=n.facet(ei);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function ti(n,e){let t="",i=n.tabSize,s=n.facet(ei)[0];if(s==" "){for(;e>=i;)t+=" ",e-=i;s=" "}for(let r=0;r=e?hu(n,t,e):null}var Et=class{constructor(e,t={}){this.state=e,this.options=t,this.unit=lt(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:s,simulateDoubleBreak:r}=this.options;return s!=null&&s>=i.from&&s<=i.to?r&&s==e?{text:"",from:e}:(t<0?s-1&&(r+=o-this.countColumn(i,i.search(/\S|$/))),r}countColumn(e,t=e.length){return yt(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:s}=this.lineAt(e,t),r=this.options.overrideIndentation;if(r){let o=r(s);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},Ea=new O;function hu(n,e,t){let i=e.resolveStack(t),s=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(s!=i.node){let r=[];for(let o=s;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)r.push(o);for(let o=r.length-1;o>=0;o--)i={node:r[o],next:i}}return Oa(i,n,t)}function Oa(n,e,t){for(let i=n;i;i=i.next){let s=cu(i.node);if(s)return s(Ir.create(e,t,i))}return 0}function fu(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function cu(n){let e=n.type.prop(Ea);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(O.closedBy))){let s=n.lastChild,r=s&&i.indexOf(s.name)>-1;return o=>gu(o,!0,1,void 0,r&&!fu(o)?s.from:void 0)}return n.parent==null?uu:null}function uu(){return 0}var Ir=class n extends Et{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new n(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(du(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return Oa(this.context.next,this.base,this.pos)}};function du(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function pu(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let s=n.options.simulateBreak,r=n.state.doc.lineAt(t.from),o=s==null||s<=r.from?r.to:Math.min(r.to,s);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let h=/^ */.exec(r.text.slice(t.to-r.from))[0].length;return{from:t.from,to:t.to+h}}l=a.to}}function gu(n,e,t,i,s){let r=n.textAfter,o=r.match(/^\s*/)[0].length,l=i&&r.slice(o,o+i.length)==i||s==n.pos+o,a=e?pu(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}var mu=200;function Ba(){return U.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,s=t.lineAt(i);if(i>s.from+mu)return n;let r=t.sliceString(s.from,i);if(!e.some(h=>h.test(r)))return n;let{state:o}=n,l=-1,a=[];for(let{head:h}of o.selection.ranges){let f=o.doc.lineAt(h);if(f.from==l)continue;l=f.from;let c=In(o,f.from);if(c==null)continue;let u=/^\s*/.exec(f.text)[0],d=ti(o,c);u!=d&&a.push({from:f.from,to:f.from+u.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}var Zt=class n{constructor(e,t){this.specs=e;let i;function s(l){let a=ye.newName();return(i||(i=Object.create(null)))["."+a]=l,a}let r=typeof t.all=="string"?t.all:t.all?s(t.all):void 0,o=t.scope;this.scope=o instanceof de?l=>l.prop(Xt)==o.data:o?l=>l==o:void 0,this.style=Or(e.map(l=>({tag:l.tag,class:l.class||s(Object.assign({},l,{tag:null}))})),{all:r}).style,this.module=i?new ye(i):null,this.themeType=t.themeType}static define(e,t){return new n(e,t||{})}},Hr=M.define(),La=M.define({combine(n){return n.length?[n[0]]:null}});function Rr(n){let e=n.facet(Hr);return e.length?e:n.facet(La)}function Hn(n,e){let t=[yu],i;return n instanceof Zt&&(n.module&&t.push(D.styleModule.of(n.module)),i=n.themeType),e?.fallback?t.push(La.of(n)):i?t.push(Hr.computeN([D.darkTheme],s=>s.facet(D.darkTheme)==(i=="dark")?[n]:[])):t.push(Hr.of(n)),t}var Fr=class{constructor(e){this.markCache=Object.create(null),this.tree=Re(e.state),this.decorations=this.buildDeco(e,Rr(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Re(e.state),i=Rr(e.state),s=i!=Rr(e.startState),{viewport:r}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=r.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||s)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=r.to)}buildDeco(e,t){if(!t||!this.tree.length)return z.none;let i=new gt;for(let{from:s,to:r}of e.visibleRanges)xa(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=z.mark({class:a})))},s,r);return i.finish()}},yu=Ht.high(De.fromClass(Fr,{decorations:n=>n.decorations})),Ra=Zt.define([{tag:y.meta,color:"#404740"},{tag:y.link,textDecoration:"underline"},{tag:y.heading,textDecoration:"underline",fontWeight:"bold"},{tag:y.emphasis,fontStyle:"italic"},{tag:y.strong,fontWeight:"bold"},{tag:y.strikethrough,textDecoration:"line-through"},{tag:y.keyword,color:"#708"},{tag:[y.atom,y.bool,y.url,y.contentSeparator,y.labelName],color:"#219"},{tag:[y.literal,y.inserted],color:"#164"},{tag:[y.string,y.deleted],color:"#a11"},{tag:[y.regexp,y.escape,y.special(y.string)],color:"#e40"},{tag:y.definition(y.variableName),color:"#00f"},{tag:y.local(y.variableName),color:"#30a"},{tag:[y.typeName,y.namespace],color:"#085"},{tag:y.className,color:"#167"},{tag:[y.special(y.variableName),y.macroName],color:"#256"},{tag:y.definition(y.propertyName),color:"#00c"},{tag:y.comment,color:"#940"},{tag:y.invalid,color:"#f00"}]),bu=D.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Pa=1e4,Na="()[]{}",Ia=M.define({combine(n){return mt(n,{afterCursor:!0,brackets:Na,maxScanDistance:Pa,renderMatch:ku})}}),wu=z.mark({class:"cm-matchingBracket"}),xu=z.mark({class:"cm-nonmatchingBracket"});function ku(n){let e=[],t=n.matched?wu:xu;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}function Sa(n){let e=[],t=n.facet(Ia);for(let i of n.selection.ranges){if(!i.empty)continue;let s=Le(n,i.head,-1,t)||i.head>0&&Le(n,i.head-1,1,t)||t.afterCursor&&(Le(n,i.head,1,t)||i.headn.decorations}),Su=[vu,bu];function Ha(n={}){return[Ia.of(n),Su]}var Cu=new O;function Vr(n,e,t){let i=n.prop(e<0?O.openedBy:O.closedBy);if(i)return i;if(n.name.length==1){let s=t.indexOf(n.name);if(s>-1&&s%2==(e<0?1:0))return[t[s+e]]}return null}function Wr(n){let e=n.type.prop(Cu);return e?e(n.node):n}function Le(n,e,t,i={}){let s=i.maxScanDistance||Pa,r=i.brackets||Na,o=Re(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let h=Vr(a.type,t,r);if(h&&a.from0?e>=f.from&&ef.from&&e<=f.to))return Au(n,e,t,a,f,h,r)}}return Mu(n,e,t,o,l.type,s,r)}function Au(n,e,t,i,s,r,o){let l=i.parent,a={from:s.from,to:s.to},h=0,f=l?.cursor();if(f&&(t<0?f.childBefore(i.from):f.childAfter(i.to)))do if(t<0?f.to<=i.from:f.from>=i.to){if(h==0&&r.indexOf(f.type.name)>-1&&f.from0)return null;let h={from:t<0?e-1:e,to:t>0?e+1:e},f=n.doc.iterRange(e,t>0?n.doc.length:0),c=0;for(let u=0;!f.next().done&&u<=r;){let d=f.value;t<0&&(u+=d.length);let p=e+u*t;for(let g=t>0?0:d.length-1,m=t>0?d.length:-1;g!=m;g+=t){let b=o.indexOf(d[g]);if(!(b<0||i.resolveInner(p+g,1).type!=s))if(b%2==0==t>0)c++;else{if(c==1)return{start:h,end:{from:p+g,to:p+g+1},matched:b>>1==a>>1};c--}}t>0&&(u+=d.length)}return f.done?{start:h,matched:!1}:null}function Ca(n,e,t,i=0,s=0){e==null&&(e=n.search(/[^\s\u00a0]/),e==-1&&(e=n.length));let r=s;for(let o=i;o=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.post}eatSpace(){let e=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}skipToEnd(){this.pos=this.string.length}skipTo(e){let t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0}backUp(e){this.pos-=e}column(){return this.lastColumnPosi?o.toLowerCase():o,r=this.string.substr(this.pos,e.length);return s(r)==s(e)?(t!==!1&&(this.pos+=e.length),!0):null}else{let s=this.string.slice(this.pos).match(e);return s&&s.index>0?null:(s&&t!==!1&&(this.pos+=s[0].length),s)}}current(){return this.string.slice(this.start,this.pos)}};function Tu(n){return{name:n.name||"",token:n.token,blankLine:n.blankLine||(()=>{}),startState:n.startState||(()=>!0),copyState:n.copyState||Du,indent:n.indent||(()=>null),languageData:n.languageData||{},tokenTable:n.tokenTable||Kr,mergeTokens:n.mergeTokens!==!1}}function Du(n){if(typeof n!="object")return n;let e={};for(let t in n){let i=n[t];e[t]=i instanceof Array?i.slice():i}return e}var Aa=new WeakMap,Li=class n extends de{constructor(e){let t=ru(e.languageData),i=Tu(e),s,r=new class extends Ti{createParse(o,l,a){return new zr(s,o,l,a)}};super(t,r,[],e.name),this.topNode=Lu(t,this),s=this,this.streamParser=i,this.stateAfter=new O({perNode:!0}),this.tokenTable=e.tokenTable?new Nn(i.tokenTable):Bu}static define(e){return new n(e)}getIndent(e){let t,{overrideIndentation:i}=e.options;i&&(t=Aa.get(e.state),t!=null&&t1e4)return null;for(;r=i&&t+e.length<=s&&e.prop(n.stateAfter);if(r)return{state:n.streamParser.copyState(r),pos:t+e.length};for(let o=e.children.length-1;o>=0;o--){let l=e.children[o],a=t+e.positions[o],h=l instanceof G&&a=e.length)return e;!s&&t==0&&e.type==n.topNode&&(s=!0);for(let r=e.children.length-1;r>=0;r--){let o=e.positions[r],l=e.children[r],a;if(ot&&qr(n,r.tree,0-r.offset,t,l),h;if(a&&a.pos<=i&&(h=Fa(n,r.tree,t+r.offset,a.pos+r.offset,!1)))return{state:a.state,tree:h}}return{state:n.streamParser.startState(s?lt(s):4),tree:G.empty}}var zr=class{constructor(e,t,i,s){this.lang=e,this.input=t,this.fragments=i,this.ranges=s,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=s[s.length-1].to;let r=Oi.get(),o=s[0].from,{state:l,tree:a}=Eu(e,i,o,this.to,r?.state);this.state=l,this.parsedPos=this.chunkStart=o+a.length;for(let h=0;hh.from<=r.viewport.from&&h.to>=r.viewport.from)&&(this.state=this.lang.streamParser.startState(lt(r.state)),r.skipUntilInView(this.parsedPos,r.viewport.from),this.parsedPos=r.viewport.from),this.moveRangeIndex()}advance(){let e=Oi.get(),t=this.stoppedAt==null?this.to:Math.min(this.to,this.stoppedAt),i=Math.min(t,this.chunkStart+512);for(e&&(i=Math.min(i,e.viewport.to));this.parsedPos=t?this.finish():e&&this.parsedPos>=e.viewport.to?(e.skipUntilInView(this.parsedPos,t),this.finish()):null}stopAt(e){this.stoppedAt=e}lineAfter(e){let t=this.input.chunk(e);if(this.input.lineChunks)t==` `&&(t="");else{let i=t.indexOf(` -`);i>-1&&(t=t.slice(0,i))}return e+t.length<=this.to?t:t.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,t=this.lineAfter(e),i=e+t.length;for(let s=this.rangeIndex;;){let r=this.ranges[s].to;if(r>=i||(t=t.slice(0,r-(i-t.length)),s++,s==this.ranges.length))break;let o=this.ranges[s].from,l=this.lineAfter(o);t+=l,i=o+l.length}return{line:t,end:i}}skipGapsTo(e,t,i){for(;;){let s=this.ranges[this.rangeIndex].to,r=e+t;if(i>0?s>r:s>=r)break;let o=this.ranges[++this.rangeIndex].from;t+=o-s}return t}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){s=this.skipGapsTo(t,s,1),t+=s;let l=this.chunk.length;s=this.skipGapsTo(i,s,-1),i+=s,r+=this.chunk.length-l}let o=this.chunk.length-4;return this.lang.streamParser.mergeTokens&&r==4&&o>=0&&this.chunk[o]==e&&this.chunk[o+2]==t?this.chunk[o+2]=i:this.chunk.push(e,t,i,r),s}parseLine(e){let{line:t,end:i}=this.nextLine(),s=0,{streamParser:r}=this.lang,o=new Pn(t,e?e.state.tabSize:4,e?lt(e.state):2);if(o.eol())r.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let l=Ia(r.token,o,this.state);if(l&&(s=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+o.start,this.parsedPos+o.pos,s)),o.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPose.start)return s}throw new Error("Stream parser failed to advance stream.")}var zr=Object.create(null),Ri=[oe.none],Au=new Dn(Ri),va=[],Sa=Object.create(null),Na=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Na[n]=Ha(zr,e);var In=class{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),Na)}resolve(e){return e?this.table[e]||(this.table[e]=Ha(this.extra,e)):0}},Mu=new In(zr);function Lr(n,e){va.indexOf(n)>-1||(va.push(n),console.warn(e))}function Ha(n,e){let t=[];for(let l of e.split(" ")){let a=[];for(let h of l.split(".")){let f=n[h]||y[h];f?typeof f=="function"?a.length?a=a.map(f):Lr(h,`Modifier ${h} used at start of tag`):a.length?Lr(h,`Tag ${h} used as modifier`):a=Array.isArray(f)?f:[f]:Lr(h,`Unknown highlighting tag ${h}`)}for(let h of a)t.push(h)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),s=i+" "+t.map(l=>l.id),r=Sa[s];if(r)return r.id;let o=Sa[s]=oe.define({id:Ri.length,name:i,props:[pa({[i]:t})]});return Ri.push(o),o.id}function Tu(n,e){let t=oe.define({id:Ri.length,name:"Document",props:[Xt.add(()=>n),Aa.add(()=>i=>e.getIndent(i))],top:!0});return Ri.push(t),t}var Bp={rtl:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:$.RTL}),ltr:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:$.LTR}),auto:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var Du=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=Gr(n.state,t.from);return i.line?Ou(n):i.block?Eu(n):!1};function _r(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let s=n(e,t);return s?(i(t.update(s)),!0):!1}}var Ou=_r(Pu,0);var Bu=_r(Ua,0);var Eu=_r((n,e)=>Ua(n,e,Ru(e)),0);function Gr(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}var Pi=50;function Lu(n,{open:e,close:t},i,s){let r=n.sliceDoc(i-Pi,i),o=n.sliceDoc(s,s+Pi),l=/\s*$/.exec(r)[0].length,a=/^\s*/.exec(o)[0].length,h=r.length-l;if(r.slice(h-e.length,h)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:s+a,margin:a&&1}};let f,c;s-i<=2*Pi?f=c=n.sliceDoc(i,s):(f=n.sliceDoc(i,i+Pi),c=n.sliceDoc(s-Pi,s));let u=/^\s*/.exec(f)[0].length,d=/\s*$/.exec(c)[0].length,p=c.length-d-t.length;return f.slice(u,u+e.length)==e&&c.slice(p,p+t.length)==t?{open:{pos:i+u+e.length,margin:/\s/.test(f.charAt(u+e.length))?1:0},close:{pos:s-d-t.length,margin:/\s/.test(c.charAt(p-1))?1:0}}:null}function Ru(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),s=t.to<=i.to?i:n.doc.lineAt(t.to);s.from>i.from&&s.from==t.to&&(s=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=s.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:s.to})}return e}function Ua(n,e,t=e.selection.ranges){let i=t.map(r=>Gr(e,r.from).block);if(!i.every(r=>r))return null;let s=t.map((r,o)=>Lu(e,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:e.changes(t.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;os&&(r==o||o>c.from)){s=c.from;let u=/^\s*/.exec(c.text)[0].length,d=u==c.length,p=c.text.slice(u,u+h.length)==h?u:-1;ur.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:l,token:a,indent:h,empty:f,single:c}of i)(c||!f)&&r.push({from:l.from+h,insert:a+" "});let o=e.changes(r);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,f=h+a.length;o.text[f-o.from]==" "&&f++,r.push({from:h,to:f})}return{changes:r}}return null}var Kr=me.define(),Iu=me.define(),Nu=M.define(),_a=M.define({combine(n){return mt(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,s)=>e(i,s)||t(i,s)})}}),Ga=Ce.define({create(){return Bt.empty},update(n,e){let t=e.state.facet(_a),i=e.annotation(Kr);if(i){let a=Pe.fromTransaction(e,i.selection),h=i.side,f=h==0?n.undone:n.done;return a?f=Wn(f,f.length,t.minDepth,a):f=Qa(f,e.startState.selection),new Bt(h==0?i.rest:f,h==0?f:i.rest)}let s=e.annotation(Iu);if((s=="full"||s=="before")&&(n=n.isolate()),e.annotation(X.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let r=Pe.fromTransaction(e),o=e.annotation(X.time),l=e.annotation(X.userEvent);return r?n=n.addChanges(r,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(s=="full"||s=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new Bt(n.done.map(Pe.fromJSON),n.undone.map(Pe.fromJSON))}});function Ja(n={}){return[Ga,_a.of(n),D.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?Ya:e.inputType=="historyRedo"?$r:null;return i?(e.preventDefault(),i(t)):!1}})]}function Vn(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let s=t.field(Ga,!1);if(!s)return!1;let r=s.pop(n,t,e);return r?(i(r),!0):!1}}var Ya=Vn(0,!1),$r=Vn(1,!1),Hu=Vn(0,!0),Fu=Vn(1,!0);var Pe=class n{constructor(e,t,i,s,r){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(e){return new n(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(e){return new n(e.changes&&se.fromJSON(e.changes),[],e.mapped&&_e.fromJSON(e.mapped),e.startSelection&&w.fromJSON(e.startSelection),e.selectionsAfter.map(w.fromJSON))}static fromTransaction(e,t){let i=ke;for(let s of e.startState.facet(Nu)){let r=s(e);r.length&&(i=i.concat(r))}return!i.length&&e.changes.empty?null:new n(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,ke)}static selection(e){return new n(void 0,ke,void 0,void 0,e)}};function Wn(n,e,t,i){let s=e+1>t+20?e-t-1:0,r=n.slice(s,e);return r.push(i),r}function Wu(n,e){let t=[],i=!1;return n.iterChangedRanges((s,r)=>t.push(s,r)),e.iterChangedRanges((s,r,o,l)=>{for(let a=0;a=h&&o<=f&&(i=!0)}}),i}function Vu(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function Xa(n,e){return n.length?e.length?n.concat(e):n:e}var ke=[],zu=200;function Qa(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-zu));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),Wn(n,n.length-1,1e9,t.setSelAfter(i)))}else return[Pe.selection([e])]}function qu(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function qr(n,e){if(!n.length)return n;let t=n.length,i=ke;for(;t;){let s=Ku(n[t-1],e,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,t);return r[t-1]=s,r}else e=s.mapped,t--,i=s.selectionsAfter}return i.length?[Pe.selection(i)]:ke}function Ku(n,e,t){let i=Xa(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):ke,t);if(!n.changes)return Pe.selection(i);let s=n.changes.map(e),r=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new Pe(s,U.mapEffects(n.effects,e),o,n.startSelection.map(r),i)}var $u=/^(input\.type|delete)($|\.)/,Bt=class n{constructor(e,t,i=0,s=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new n(this.done,this.undone):this}addChanges(e,t,i,s,r){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||$u.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):zn(t,e))}function ie(n){return n.textDirectionAt(n.state.selection.main.head)==$.LTR}var th=n=>eh(n,!ie(n)),ih=n=>eh(n,ie(n));function nh(n,e){return Ne(n,t=>t.empty?n.moveByGroup(t,e):zn(t,e))}var ju=n=>nh(n,!ie(n)),Uu=n=>nh(n,ie(n));var Wp=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function _u(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function qn(n,e,t){let i=Re(n).resolveInner(e.head),s=t?B.closedBy:B.openedBy;for(let a=e.head;;){let h=t?i.childAfter(a):i.childBefore(a);if(!h)break;_u(n,h,s)?i=h:a=t?h.to:h.from}let r=i.type.prop(s),o,l;return r&&(o=t?Le(n,i.from,1):Le(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,w.cursor(l,t?-1:1)}var Gu=n=>Ne(n,e=>qn(n.state,e,!ie(n))),Ju=n=>Ne(n,e=>qn(n.state,e,ie(n)));function sh(n,e){return Ne(n,t=>{if(!t.empty)return zn(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}var rh=n=>sh(n,!1),oh=n=>sh(n,!0);function lh(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):zn(o,e));if(s.eq(i.selection))return!1;let r;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,h=l.bottom-t.marginBottom;o&&o.top>a&&o.bottomah(n,!1),jr=n=>ah(n,!0);function at(n,e,t){let i=n.lineBlockAt(e.head),s=n.moveToLineBoundary(e,t);if(s.head==e.head&&s.head!=(t?i.to:i.from)&&(s=n.moveToLineBoundary(e,t,!1)),!t&&s.head==i.from&&i.length){let r=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&e.head!=i.from+r&&(s=w.cursor(i.from+r))}return s}var Yu=n=>Ne(n,e=>at(n,e,!0)),Xu=n=>Ne(n,e=>at(n,e,!1)),Qu=n=>Ne(n,e=>at(n,e,!ie(n))),Zu=n=>Ne(n,e=>at(n,e,ie(n))),ed=n=>Ne(n,e=>w.cursor(n.lineBlockAt(e.head).from,1)),td=n=>Ne(n,e=>w.cursor(n.lineBlockAt(e.head).to,-1));function id(n,e,t){let i=!1,s=ii(n.selection,r=>{let o=Le(n,r.head,-1)||Le(n,r.head,1)||r.head>0&&Le(n,r.head-1,1)||r.headid(n,e,!1);function ve(n,e){let t=ii(n.state.selection,i=>{let s=e(i);return w.range(i.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return t.eq(n.state.selection)?!1:(n.dispatch(Ie(n.state,t)),!0)}function hh(n,e){return ve(n,t=>n.moveByChar(t,e))}var fh=n=>hh(n,!ie(n)),ch=n=>hh(n,ie(n));function uh(n,e){return ve(n,t=>n.moveByGroup(t,e))}var sd=n=>uh(n,!ie(n)),rd=n=>uh(n,ie(n));var od=n=>ve(n,e=>qn(n.state,e,!ie(n))),ld=n=>ve(n,e=>qn(n.state,e,ie(n)));function dh(n,e){return ve(n,t=>n.moveVertically(t,e))}var ph=n=>dh(n,!1),gh=n=>dh(n,!0);function mh(n,e){return ve(n,t=>n.moveVertically(t,e,lh(n).height))}var Wa=n=>mh(n,!1),Va=n=>mh(n,!0),ad=n=>ve(n,e=>at(n,e,!0)),hd=n=>ve(n,e=>at(n,e,!1)),fd=n=>ve(n,e=>at(n,e,!ie(n))),cd=n=>ve(n,e=>at(n,e,ie(n))),ud=n=>ve(n,e=>w.cursor(n.lineBlockAt(e.head).from)),dd=n=>ve(n,e=>w.cursor(n.lineBlockAt(e.head).to)),za=({state:n,dispatch:e})=>(e(Ie(n,{anchor:0})),!0),qa=({state:n,dispatch:e})=>(e(Ie(n,{anchor:n.doc.length})),!0),Ka=({state:n,dispatch:e})=>(e(Ie(n,{anchor:n.selection.main.anchor,head:0})),!0),$a=({state:n,dispatch:e})=>(e(Ie(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),pd=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),gd=({state:n,dispatch:e})=>{let t=Kn(n).map(({from:i,to:s})=>w.range(i,Math.min(s+1,n.doc.length)));return e(n.update({selection:w.create(t),userEvent:"select"})),!0},md=({state:n,dispatch:e})=>{let t=ii(n.selection,i=>{let s=Re(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return w.range(l.to,l.from)}return i});return t.eq(n.selection)?!1:(e(Ie(n,t)),!0)};function yh(n,e){let{state:t}=n,i=t.selection,s=t.selection.ranges.slice();for(let r of t.selection.ranges){let o=t.doc.lineAt(r.head);if(e?o.to0)for(let l=r;;){let a=n.moveVertically(l,e);if(a.heado.to){s.some(h=>h.head==a.head)||s.push(a);break}else{if(a.head==l.head)break;l=a}}}return s.length==i.ranges.length?!1:(n.dispatch(Ie(t,w.create(s,s.length-1))),!0)}var yd=n=>yh(n,!1),bd=n=>yh(n,!0),wd=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=w.create([t.main]):t.main.empty||(i=w.create([w.cursor(t.main.head)])),i?(e(Ie(n,i)),!0):!1};function Ii(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:l}=r;if(o==l){let a=e(r);ao&&(t="delete.forward",a=Fn(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=Fn(n,o,!1),l=Fn(n,l,!0);return o==l?{range:r}:{changes:{from:o,to:l},range:w.cursor(o,os(n)))i.between(e,e,(s,r)=>{se&&(e=t?r:s)});return e}var bh=(n,e,t)=>Ii(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),l,a;if(t&&!e&&s>o.from&&sbh(n,!1,!0);var wh=n=>bh(n,!0,!1),xh=(n,e)=>Ii(n,t=>{let i=t.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let l=null;;){if(i==(e?r.to:r.from)){i==t.head&&r.number!=(e?s.doc.lines:1)&&(i+=e?1:-1);break}let a=Q(r.text,i-r.from,e)+r.from,h=r.text.slice(Math.min(i,a)-r.from,Math.max(i,a)-r.from),f=o(h);if(l!=null&&f!=l)break;(h!=" "||i!=t.head)&&(l=f),i=a}return i}),kh=n=>xh(n,!1),xd=n=>xh(n,!0);var kd=n=>Ii(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headIi(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),Sd=n=>Ii(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:R.of(["",""])},range:w.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},Ad=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:Q(r.text,s-r.from,!1)+r.from,l=s==r.to?s+1:Q(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:l,insert:n.doc.slice(s,l).append(n.doc.slice(o,s))},range:w.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function Kn(n){let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),t>=s.number){let o=e[e.length-1];o.to=r.to,o.ranges.push(i)}else e.push({from:s.from,to:r.to,ranges:[i]});t=r.number+1}return e}function vh(n,e,t){if(n.readOnly)return!1;let i=[],s=[];for(let r of Kn(n)){if(t?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(t?r.to+1:r.from-1),l=o.length+1;if(t){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let a of r.ranges)s.push(w.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let a of r.ranges)s.push(w.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:w.create(s,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}var Md=({state:n,dispatch:e})=>vh(n,e,!1),Td=({state:n,dispatch:e})=>vh(n,e,!0);function Sh(n,e,t){if(n.readOnly)return!1;let i=[];for(let r of Kn(n))t?i.push({from:r.from,insert:n.doc.slice(r.from,r.to)+n.lineBreak}):i.push({from:r.to,insert:n.lineBreak+n.doc.slice(r.from,r.to)});let s=n.changes(i);return e(n.update({changes:s,selection:n.selection.map(s,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var Dd=({state:n,dispatch:e})=>Sh(n,e,!1),Od=({state:n,dispatch:e})=>Sh(n,e,!0),Bd=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(Kn(e).map(({from:s,to:r})=>(s>0?s--:r{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),l=n.coordsAtPos(s.head,s.assoc||1);l&&(r=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function Ed(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Re(n).resolveInner(e),i=t.childBefore(e),s=t.childAfter(e),r;return i&&s&&i.to<=e&&s.from>=e&&(r=i.type.prop(B.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}var ja=Ch(!1),Ld=Ch(!0);function Ch(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(s=>{let{from:r,to:o}=s,l=e.doc.lineAt(r),a=!n&&r==o&&Ed(e,r);n&&(r=o=(o<=l.to?l:e.doc.lineAt(o)).to);let h=new Ot(e,{simulateBreak:r,simulateDoubleBreak:!!a}),f=Nn(h,r);for(f==null&&(f=yt(/^\s*/.exec(e.doc.lineAt(r).text)[0],e.tabSize));ol.from&&r{let s=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,s,i),t=l.number),o=l.to+1}let r=n.changes(s);return{changes:s,range:w.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}var Rd=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new Ot(n,{overrideIndentation:r=>{let o=t[r];return o??-1}}),s=Jr(n,(r,o,l)=>{let a=Nn(i,r.from);if(a==null)return;/\S/.test(r.text)||(a=0);let h=/^\s*/.exec(r.text)[0],f=ti(n,a);(h!=f||l.fromn.readOnly?!1:(e(n.update(Jr(n,(t,i)=>{i.push({from:t.from,insert:n.facet(ei)})}),{userEvent:"input.indent"})),!0),Mh=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(Jr(n,(t,i)=>{let s=/^\s*/.exec(t.text)[0];if(!s)return;let r=yt(s,n.tabSize),o=0,l=ti(n,Math.max(0,r-lt(n)));for(;o(n.setTabFocusMode(),!0);var Id=[{key:"Ctrl-b",run:th,shift:fh,preventDefault:!0},{key:"Ctrl-f",run:ih,shift:ch},{key:"Ctrl-p",run:rh,shift:ph},{key:"Ctrl-n",run:oh,shift:gh},{key:"Ctrl-a",run:ed,shift:ud},{key:"Ctrl-e",run:td,shift:dd},{key:"Ctrl-d",run:wh},{key:"Ctrl-h",run:Ur},{key:"Ctrl-k",run:kd},{key:"Ctrl-Alt-h",run:kh},{key:"Ctrl-o",run:Cd},{key:"Ctrl-t",run:Ad},{key:"Ctrl-v",run:jr}],Nd=[{key:"ArrowLeft",run:th,shift:fh,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:ju,shift:sd,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:Qu,shift:fd,preventDefault:!0},{key:"ArrowRight",run:ih,shift:ch,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:Uu,shift:rd,preventDefault:!0},{mac:"Cmd-ArrowRight",run:Zu,shift:cd,preventDefault:!0},{key:"ArrowUp",run:rh,shift:ph,preventDefault:!0},{mac:"Cmd-ArrowUp",run:za,shift:Ka},{mac:"Ctrl-ArrowUp",run:Fa,shift:Wa},{key:"ArrowDown",run:oh,shift:gh,preventDefault:!0},{mac:"Cmd-ArrowDown",run:qa,shift:$a},{mac:"Ctrl-ArrowDown",run:jr,shift:Va},{key:"PageUp",run:Fa,shift:Wa},{key:"PageDown",run:jr,shift:Va},{key:"Home",run:Xu,shift:hd,preventDefault:!0},{key:"Mod-Home",run:za,shift:Ka},{key:"End",run:Yu,shift:ad,preventDefault:!0},{key:"Mod-End",run:qa,shift:$a},{key:"Enter",run:ja,shift:ja},{key:"Mod-a",run:pd},{key:"Backspace",run:Ur,shift:Ur,preventDefault:!0},{key:"Delete",run:wh,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:kh,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:xd,preventDefault:!0},{mac:"Mod-Backspace",run:vd,preventDefault:!0},{mac:"Mod-Delete",run:Sd,preventDefault:!0}].concat(Id.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),Th=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:Gu,shift:od},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:Ju,shift:ld},{key:"Alt-ArrowUp",run:Md},{key:"Shift-Alt-ArrowUp",run:Dd},{key:"Alt-ArrowDown",run:Td},{key:"Shift-Alt-ArrowDown",run:Od},{key:"Mod-Alt-ArrowUp",run:yd},{key:"Mod-Alt-ArrowDown",run:bd},{key:"Escape",run:wd},{key:"Mod-Enter",run:Ld},{key:"Alt-l",mac:"Ctrl-l",run:gd},{key:"Mod-i",run:md,preventDefault:!0},{key:"Mod-[",run:Mh},{key:"Mod-]",run:Ah},{key:"Mod-Alt-\\",run:Rd},{key:"Shift-Mod-k",run:Bd},{key:"Shift-Mod-\\",run:nd},{key:"Mod-/",run:Du},{key:"Alt-A",run:Bu},{key:"Ctrl-m",mac:"Shift-Alt-m",run:Pd}].concat(Nd),Dh={key:"Tab",run:Ah,shift:Mh};var Hd={break:!0,case:!0,chan:!0,const:!0,continue:!0,default:!0,defer:!0,else:!0,fallthrough:!0,for:!0,func:!0,go:!0,goto:!0,if:!0,import:!0,interface:!0,map:!0,package:!0,range:!0,return:!0,select:!0,struct:!0,switch:!0,type:!0,var:!0,bool:!0,byte:!0,complex64:!0,complex128:!0,float32:!0,float64:!0,int8:!0,int16:!0,int32:!0,int64:!0,string:!0,uint8:!0,uint16:!0,uint32:!0,uint64:!0,int:!0,uint:!0,uintptr:!0,error:!0,rune:!0,any:!0,comparable:!0},Fd={true:!0,false:!0,iota:!0,nil:!0,append:!0,cap:!0,close:!0,complex:!0,copy:!0,delete:!0,imag:!0,len:!0,make:!0,new:!0,panic:!0,print:!0,println:!0,real:!0,recover:!0},Oh=/[+\-*&^%:=<>!|\/]/,Qe;function $n(n,e){var t=n.next();if(t=='"'||t=="'"||t=="`")return e.tokenize=Wd(t),e.tokenize(n,e);if(/[\d\.]/.test(t))return t=="."?n.match(/^[0-9]+([eE][\-+]?[0-9]+)?/):t=="0"?n.match(/^[xX][0-9a-fA-F]+/)||n.match(/^0[0-7]+/):n.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/),"number";if(/[\[\]{}\(\),;\:\.]/.test(t))return Qe=t,null;if(t=="/"){if(n.eat("*"))return e.tokenize=Bh,Bh(n,e);if(n.eat("/"))return n.skipToEnd(),"comment"}if(Oh.test(t))return n.eatWhile(Oh),"operator";n.eatWhile(/[\w\$_\xa1-\uffff]/);var i=n.current();return Hd.propertyIsEnumerable(i)?((i=="case"||i=="default")&&(Qe="case"),"keyword"):Fd.propertyIsEnumerable(i)?"atom":"variable"}function Wd(n){return function(e,t){for(var i=!1,s,r=!1;(s=e.next())!=null;){if(s==n&&!i){r=!0;break}i=!i&&n!="`"&&s=="\\"}return(r||!(i||n=="`"))&&(t.tokenize=$n),"string"}}function Bh(n,e){for(var t=!1,i;i=n.next();){if(i=="/"&&t){e.tokenize=$n;break}t=i=="*"}return"comment"}function Lh(n,e,t,i,s){this.indented=n,this.column=e,this.type=t,this.align=i,this.prev=s}function Yr(n,e,t){return n.context=new Lh(n.indented,e,t,null,n.context)}function Eh(n){if(n.context.prev){var e=n.context.type;return(e==")"||e=="]"||e=="}")&&(n.indented=n.context.indented),n.context=n.context.prev}}var Rh={name:"go",startState:function(n){return{tokenize:null,context:new Lh(-n,0,"top",!1),indented:0,startOfLine:!0}},token:function(n,e){var t=e.context;if(n.sol()&&(t.align==null&&(t.align=!1),e.indented=n.indentation(),e.startOfLine=!0,t.type=="case"&&(t.type="}")),n.eatSpace())return null;Qe=null;var i=(e.tokenize||$n)(n,e);return i=="comment"||(t.align==null&&(t.align=!0),Qe=="{"?Yr(e,n.column(),"}"):Qe=="["?Yr(e,n.column(),"]"):Qe=="("?Yr(e,n.column(),")"):Qe=="case"?t.type="case":(Qe=="}"&&t.type=="}"||Qe==t.type)&&Eh(e),e.startOfLine=!1),i},indent:function(n,e,t){if(n.tokenize!=$n&&n.tokenize!=null)return null;var i=n.context,s=e&&e.charAt(0);if(i.type=="case"&&/^(?:case|default)\b/.test(e))return i.indented;var r=s==i.type;return i.align?i.column+(r?0:1):i.indented+(r?0:t.unit)},languageData:{indentOnInput:/^\s([{}]|case |default\s*:)$/,commentTokens:{line:"//",block:{open:"/*",close:"*/"}}}};var Ph={name:"toml",startState:function(){return{inString:!1,stringType:"",lhs:!0,inArray:0}},token:function(n,e){let t;if(!e.inString&&(t=n.match(/^('''|"""|'|")/))&&(e.stringType=t[0],e.inString=!0),n.sol()&&!e.inString&&e.inArray===0&&(e.lhs=!0),e.inString){for(;e.inString;)if(n.match(e.stringType))e.inString=!1;else if(n.peek()==="\\")n.next(),n.next();else{if(n.eol())break;n.match(/^.[^\\\"\']*/)}return e.lhs?"property":"string"}else{if(e.inArray&&n.peek()==="]")return n.next(),e.inArray--,"bracket";if(e.lhs&&n.peek()==="["&&n.skipTo("]"))return n.next(),n.peek()==="]"&&n.next(),"atom";if(n.peek()==="#")return n.skipToEnd(),"comment";if(n.eatSpace())return null;if(e.lhs&&n.eatWhile(function(i){return i!="="&&i!=" "}))return"property";if(e.lhs&&n.peek()==="=")return n.next(),e.lhs=!1,null;if(!e.lhs&&n.match(/^\d\d\d\d[\d\-\:\.T]*Z/))return"atom";if(!e.lhs&&(n.match("true")||n.match("false")))return"atom";if(!e.lhs&&n.peek()==="[")return e.inArray++,n.next(),"bracket";if(!e.lhs&&n.match(/^\-?\d+(?:\.\d+)?/))return"number";n.eatSpace()||n.next()}return null},languageData:{commentTokens:{line:"#"}}};var Vd="#e5c07b",Ih="#e06c75",zd="#56b6c2",qd="#ffffff",jn="#abb2bf",Qr="#7d8799",Kd="#61afef",$d="#98c379",Nh="#d19a66",jd="#c678dd",Ud="#21252b",Hh="#2c313a",Fh="#282c34",Xr="#353a42",_d="#3E4451",Wh="#528bff";var Gd=D.theme({"&":{color:jn,backgroundColor:Fh},".cm-content":{caretColor:Wh},".cm-cursor, .cm-dropCursor":{borderLeftColor:Wh},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:_d},".cm-panels":{backgroundColor:Ud,color:jn},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:Fh,color:Qr,border:"none"},".cm-activeLineGutter":{backgroundColor:Hh},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Xr},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Xr,borderBottomColor:Xr},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:Hh,color:jn}}},{dark:!0}),Jd=Zt.define([{tag:y.keyword,color:jd},{tag:[y.name,y.deleted,y.character,y.propertyName,y.macroName],color:Ih},{tag:[y.function(y.variableName),y.labelName],color:Kd},{tag:[y.color,y.constant(y.name),y.standard(y.name)],color:Nh},{tag:[y.definition(y.name),y.separator],color:jn},{tag:[y.typeName,y.className,y.number,y.changed,y.annotation,y.modifier,y.self,y.namespace],color:Vd},{tag:[y.operator,y.operatorKeyword,y.url,y.escape,y.regexp,y.link,y.special(y.string)],color:zd},{tag:[y.meta,y.comment],color:Qr},{tag:y.strong,fontWeight:"bold"},{tag:y.emphasis,fontStyle:"italic"},{tag:y.strikethrough,textDecoration:"line-through"},{tag:y.link,color:Qr,textDecoration:"underline"},{tag:y.heading,fontWeight:"bold",color:Ih},{tag:[y.atom,y.bool,y.special(y.variableName)],color:Nh},{tag:[y.processingInstruction,y.string,y.inserted],color:$d},{tag:y.invalid,color:qd}]),Vh=[Gd,Hn(Jd)];var Yd=Li.define(Rh),Xd=Li.define(Ph);function zh(n){return n.endsWith(".toml")?Xd:Yd}function qh(n){return n?Vh:Hn(Oa,{fallback:!0})}function Zr(){return document.documentElement.getAttribute("data-theme")==="dark"}var Un=class{view;langCompartment=new pt;themeCompartment=new pt;constructor(e){let t=[ra(),sa(),oa(),ia(),Ja(),Ta(),ei.of(" "),Ra(),this.langCompartment.of(zh(e.fileName)),this.themeCompartment.of(qh(e.isDarkMode))];if(e.onRun){let i=e.onRun;t.push(An.of([{key:"Mod-Enter",preventDefault:!0,run:()=>(i(),!0)}]))}t.push(An.of([Dh,...Za,...Th])),this.view=new D({parent:e.parent,state:j.create({doc:e.content,extensions:t})})}getCode(){return this.view.state.doc.toString()}setCode(e){this.view.dispatch({changes:{from:0,to:this.view.state.doc.length,insert:e}})}setLanguage(e){this.view.dispatch({effects:this.langCompartment.reconfigure(zh(e))})}changeTheme(e){this.view.dispatch({effects:this.themeCompartment.reconfigure(qh(e))})}focus(){this.view.focus()}};import{BaseController as Qd}from"./controller.js";var Kh=class extends Qd{connect(){this.pkgPath=this.getValue("pkg-path"),this.pkgAlias=this.getValue("pkg-alias")||"pkg",this.remote=this.getValue("remote"),this.chainId=this.getValue("chain-id"),this.editorEl=this.getTarget("editor"),this.keyEl=this.getTarget("key"),this.gasWantedEl=this.getTarget("gasWanted"),this.gasFeeEl=this.getTarget("gasFee"),this.sendEl=this.getTarget("send"),this.dryRunCmdEl=this.getTarget("dryRunCmd"),this.executeCmdEl=this.getTarget("executeCmd"),!(!this.editorEl||!this.dryRunCmdEl||!this.executeCmdEl)&&(this.editor=new Un({parent:this.editorEl,content:this._buildTemplate(),fileName:"script.gno",isDarkMode:Zr()}),this.on("theme:changed",()=>{this.editor.changeTheme(Zr())}),this._setupInputListeners(),this._updateCommands())}_buildTemplate(){return`package main +`);i>-1&&(t=t.slice(0,i))}return e+t.length<=this.to?t:t.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,t=this.lineAfter(e),i=e+t.length;for(let s=this.rangeIndex;;){let r=this.ranges[s].to;if(r>=i||(t=t.slice(0,r-(i-t.length)),s++,s==this.ranges.length))break;let o=this.ranges[s].from,l=this.lineAfter(o);t+=l,i=o+l.length}return{line:t,end:i}}skipGapsTo(e,t,i){for(;;){let s=this.ranges[this.rangeIndex].to,r=e+t;if(i>0?s>r:s>=r)break;let o=this.ranges[++this.rangeIndex].from;t+=o-s}return t}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){s=this.skipGapsTo(t,s,1),t+=s;let l=this.chunk.length;s=this.skipGapsTo(i,s,-1),i+=s,r+=this.chunk.length-l}let o=this.chunk.length-4;return this.lang.streamParser.mergeTokens&&r==4&&o>=0&&this.chunk[o]==e&&this.chunk[o+2]==t?this.chunk[o+2]=i:this.chunk.push(e,t,i,r),s}parseLine(e){let{line:t,end:i}=this.nextLine(),s=0,{streamParser:r}=this.lang,o=new Pn(t,e?e.state.tabSize:4,e?lt(e.state):2);if(o.eol())r.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let l=Va(r.token,o,this.state);if(l&&(s=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+o.start,this.parsedPos+o.pos,s)),o.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPose.start)return s}throw new Error("Stream parser failed to advance stream.")}var Kr=Object.create(null),Ri=[oe.none],Ou=new Dn(Ri),Ma=[],Ta=Object.create(null),Wa=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Wa[n]=za(Kr,e);var Nn=class{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),Wa)}resolve(e){return e?this.table[e]||(this.table[e]=za(this.extra,e)):0}},Bu=new Nn(Kr);function Pr(n,e){Ma.indexOf(n)>-1||(Ma.push(n),console.warn(e))}function za(n,e){let t=[];for(let l of e.split(" ")){let a=[];for(let h of l.split(".")){let f=n[h]||y[h];f?typeof f=="function"?a.length?a=a.map(f):Pr(h,`Modifier ${h} used at start of tag`):a.length?Pr(h,`Tag ${h} used as modifier`):a=Array.isArray(f)?f:[f]:Pr(h,`Unknown highlighting tag ${h}`)}for(let h of a)t.push(h)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),s=i+" "+t.map(l=>l.id),r=Ta[s];if(r)return r.id;let o=Ta[s]=oe.define({id:Ri.length,name:i,props:[ba({[i]:t})]});return Ri.push(o),o.id}function Lu(n,e){let t=oe.define({id:Ri.length,name:"Document",props:[Xt.add(()=>n),Ea.add(()=>i=>e.getIndent(i))],top:!0});return Ri.push(t),t}var Pp={rtl:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:$.RTL}),ltr:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:$.LTR}),auto:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var Ru=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=Yr(n.state,t.from);return i.line?Pu(n):i.block?Iu(n):!1};function Jr(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let s=n(e,t);return s?(i(t.update(s)),!0):!1}}var Pu=Jr(Vu,0);var Nu=Jr(Ya,0);var Iu=Jr((n,e)=>Ya(n,e,Fu(e)),0);function Yr(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}var Pi=50;function Hu(n,{open:e,close:t},i,s){let r=n.sliceDoc(i-Pi,i),o=n.sliceDoc(s,s+Pi),l=/\s*$/.exec(r)[0].length,a=/^\s*/.exec(o)[0].length,h=r.length-l;if(r.slice(h-e.length,h)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:s+a,margin:a&&1}};let f,c;s-i<=2*Pi?f=c=n.sliceDoc(i,s):(f=n.sliceDoc(i,i+Pi),c=n.sliceDoc(s-Pi,s));let u=/^\s*/.exec(f)[0].length,d=/\s*$/.exec(c)[0].length,p=c.length-d-t.length;return f.slice(u,u+e.length)==e&&c.slice(p,p+t.length)==t?{open:{pos:i+u+e.length,margin:/\s/.test(f.charAt(u+e.length))?1:0},close:{pos:s-d-t.length,margin:/\s/.test(c.charAt(p-1))?1:0}}:null}function Fu(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),s=t.to<=i.to?i:n.doc.lineAt(t.to);s.from>i.from&&s.from==t.to&&(s=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=s.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:s.to})}return e}function Ya(n,e,t=e.selection.ranges){let i=t.map(r=>Yr(e,r.from).block);if(!i.every(r=>r))return null;let s=t.map((r,o)=>Hu(e,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:e.changes(t.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;os&&(r==o||o>c.from)){s=c.from;let u=/^\s*/.exec(c.text)[0].length,d=u==c.length,p=c.text.slice(u,u+h.length)==h?u:-1;ur.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:l,token:a,indent:h,empty:f,single:c}of i)(c||!f)&&r.push({from:l.from+h,insert:a+" "});let o=e.changes(r);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,f=h+a.length;o.text[f-o.from]==" "&&f++,r.push({from:h,to:f})}return{changes:r}}return null}var Ur=me.define(),Wu=me.define(),zu=M.define(),Xa=M.define({combine(n){return mt(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,s)=>e(i,s)||t(i,s)})}}),Qa=Ce.define({create(){return Ot.empty},update(n,e){let t=e.state.facet(Xa),i=e.annotation(Ur);if(i){let a=Pe.fromTransaction(e,i.selection),h=i.side,f=h==0?n.undone:n.done;return a?f=Vn(f,f.length,t.minDepth,a):f=ih(f,e.startState.selection),new Ot(h==0?i.rest:f,h==0?f:i.rest)}let s=e.annotation(Wu);if((s=="full"||s=="before")&&(n=n.isolate()),e.annotation(X.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let r=Pe.fromTransaction(e),o=e.annotation(X.time),l=e.annotation(X.userEvent);return r?n=n.addChanges(r,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(s=="full"||s=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new Ot(n.done.map(Pe.fromJSON),n.undone.map(Pe.fromJSON))}});function Za(n={}){return[Qa,Xa.of(n),D.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?eh:e.inputType=="historyRedo"?jr:null;return i?(e.preventDefault(),i(t)):!1}})]}function Wn(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let s=t.field(Qa,!1);if(!s)return!1;let r=s.pop(n,t,e);return r?(i(r),!0):!1}}var eh=Wn(0,!1),jr=Wn(1,!1),qu=Wn(0,!0),Ku=Wn(1,!0);var Pe=class n{constructor(e,t,i,s,r){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(e){return new n(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(e){return new n(e.changes&&se.fromJSON(e.changes),[],e.mapped&&_e.fromJSON(e.mapped),e.startSelection&&w.fromJSON(e.startSelection),e.selectionsAfter.map(w.fromJSON))}static fromTransaction(e,t){let i=ke;for(let s of e.startState.facet(zu)){let r=s(e);r.length&&(i=i.concat(r))}return!i.length&&e.changes.empty?null:new n(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,ke)}static selection(e){return new n(void 0,ke,void 0,void 0,e)}};function Vn(n,e,t,i){let s=e+1>t+20?e-t-1:0,r=n.slice(s,e);return r.push(i),r}function $u(n,e){let t=[],i=!1;return n.iterChangedRanges((s,r)=>t.push(s,r)),e.iterChangedRanges((s,r,o,l)=>{for(let a=0;a=h&&o<=f&&(i=!0)}}),i}function Uu(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function th(n,e){return n.length?e.length?n.concat(e):n:e}var ke=[],ju=200;function ih(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-ju));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),Vn(n,n.length-1,1e9,t.setSelAfter(i)))}else return[Pe.selection([e])]}function _u(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function $r(n,e){if(!n.length)return n;let t=n.length,i=ke;for(;t;){let s=Gu(n[t-1],e,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,t);return r[t-1]=s,r}else e=s.mapped,t--,i=s.selectionsAfter}return i.length?[Pe.selection(i)]:ke}function Gu(n,e,t){let i=th(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):ke,t);if(!n.changes)return Pe.selection(i);let s=n.changes.map(e),r=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new Pe(s,j.mapEffects(n.effects,e),o,n.startSelection.map(r),i)}var Ju=/^(input\.type|delete)($|\.)/,Ot=class n{constructor(e,t,i=0,s=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new n(this.done,this.undone):this}addChanges(e,t,i,s,r){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||Ju.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):zn(t,e))}function ie(n){return n.textDirectionAt(n.state.selection.main.head)==$.LTR}var rh=n=>sh(n,!ie(n)),oh=n=>sh(n,ie(n));function lh(n,e){return Ie(n,t=>t.empty?n.moveByGroup(t,e):zn(t,e))}var Yu=n=>lh(n,!ie(n)),Xu=n=>lh(n,ie(n));var Kp=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function Qu(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function qn(n,e,t){let i=Re(n).resolveInner(e.head),s=t?O.closedBy:O.openedBy;for(let a=e.head;;){let h=t?i.childAfter(a):i.childBefore(a);if(!h)break;Qu(n,h,s)?i=h:a=t?h.to:h.from}let r=i.type.prop(s),o,l;return r&&(o=t?Le(n,i.from,1):Le(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,w.cursor(l,t?-1:1)}var Zu=n=>Ie(n,e=>qn(n.state,e,!ie(n))),ed=n=>Ie(n,e=>qn(n.state,e,ie(n)));function ah(n,e){return Ie(n,t=>{if(!t.empty)return zn(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}var hh=n=>ah(n,!1),fh=n=>ah(n,!0);function ch(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):zn(o,e));if(s.eq(i.selection))return!1;let r;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,h=l.bottom-t.marginBottom;o&&o.top>a&&o.bottomuh(n,!1),_r=n=>uh(n,!0);function at(n,e,t){let i=n.lineBlockAt(e.head),s=n.moveToLineBoundary(e,t);if(s.head==e.head&&s.head!=(t?i.to:i.from)&&(s=n.moveToLineBoundary(e,t,!1)),!t&&s.head==i.from&&i.length){let r=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&e.head!=i.from+r&&(s=w.cursor(i.from+r))}return s}var td=n=>Ie(n,e=>at(n,e,!0)),id=n=>Ie(n,e=>at(n,e,!1)),nd=n=>Ie(n,e=>at(n,e,!ie(n))),sd=n=>Ie(n,e=>at(n,e,ie(n))),rd=n=>Ie(n,e=>w.cursor(n.lineBlockAt(e.head).from,1)),od=n=>Ie(n,e=>w.cursor(n.lineBlockAt(e.head).to,-1));function ld(n,e,t){let i=!1,s=ii(n.selection,r=>{let o=Le(n,r.head,-1)||Le(n,r.head,1)||r.head>0&&Le(n,r.head-1,1)||r.headld(n,e,!1);function ve(n,e){let t=ii(n.state.selection,i=>{let s=e(i);return w.range(i.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return t.eq(n.state.selection)?!1:(n.dispatch(Ne(n.state,t)),!0)}function dh(n,e){return ve(n,t=>n.moveByChar(t,e))}var ph=n=>dh(n,!ie(n)),gh=n=>dh(n,ie(n));function mh(n,e){return ve(n,t=>n.moveByGroup(t,e))}var hd=n=>mh(n,!ie(n)),fd=n=>mh(n,ie(n));var cd=n=>ve(n,e=>qn(n.state,e,!ie(n))),ud=n=>ve(n,e=>qn(n.state,e,ie(n)));function yh(n,e){return ve(n,t=>n.moveVertically(t,e))}var bh=n=>yh(n,!1),wh=n=>yh(n,!0);function xh(n,e){return ve(n,t=>n.moveVertically(t,e,ch(n).height))}var Ka=n=>xh(n,!1),$a=n=>xh(n,!0),dd=n=>ve(n,e=>at(n,e,!0)),pd=n=>ve(n,e=>at(n,e,!1)),gd=n=>ve(n,e=>at(n,e,!ie(n))),md=n=>ve(n,e=>at(n,e,ie(n))),yd=n=>ve(n,e=>w.cursor(n.lineBlockAt(e.head).from)),bd=n=>ve(n,e=>w.cursor(n.lineBlockAt(e.head).to)),Ua=({state:n,dispatch:e})=>(e(Ne(n,{anchor:0})),!0),ja=({state:n,dispatch:e})=>(e(Ne(n,{anchor:n.doc.length})),!0),_a=({state:n,dispatch:e})=>(e(Ne(n,{anchor:n.selection.main.anchor,head:0})),!0),Ga=({state:n,dispatch:e})=>(e(Ne(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),wd=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),xd=({state:n,dispatch:e})=>{let t=Kn(n).map(({from:i,to:s})=>w.range(i,Math.min(s+1,n.doc.length)));return e(n.update({selection:w.create(t),userEvent:"select"})),!0},kd=({state:n,dispatch:e})=>{let t=ii(n.selection,i=>{let s=Re(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return w.range(l.to,l.from)}return i});return t.eq(n.selection)?!1:(e(Ne(n,t)),!0)};function kh(n,e){let{state:t}=n,i=t.selection,s=t.selection.ranges.slice();for(let r of t.selection.ranges){let o=t.doc.lineAt(r.head);if(e?o.to0)for(let l=r;;){let a=n.moveVertically(l,e);if(a.heado.to){s.some(h=>h.head==a.head)||s.push(a);break}else{if(a.head==l.head)break;l=a}}}return s.length==i.ranges.length?!1:(n.dispatch(Ne(t,w.create(s,s.length-1))),!0)}var vd=n=>kh(n,!1),Sd=n=>kh(n,!0),Cd=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=w.create([t.main]):t.main.empty||(i=w.create([w.cursor(t.main.head)])),i?(e(Ne(n,i)),!0):!1};function Ni(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:l}=r;if(o==l){let a=e(r);ao&&(t="delete.forward",a=Fn(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=Fn(n,o,!1),l=Fn(n,l,!0);return o==l?{range:r}:{changes:{from:o,to:l},range:w.cursor(o,os(n)))i.between(e,e,(s,r)=>{se&&(e=t?r:s)});return e}var vh=(n,e,t)=>Ni(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),l,a;if(t&&!e&&s>o.from&&svh(n,!1,!0);var Sh=n=>vh(n,!0,!1),Ch=(n,e)=>Ni(n,t=>{let i=t.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let l=null;;){if(i==(e?r.to:r.from)){i==t.head&&r.number!=(e?s.doc.lines:1)&&(i+=e?1:-1);break}let a=Q(r.text,i-r.from,e)+r.from,h=r.text.slice(Math.min(i,a)-r.from,Math.max(i,a)-r.from),f=o(h);if(l!=null&&f!=l)break;(h!=" "||i!=t.head)&&(l=f),i=a}return i}),Ah=n=>Ch(n,!1),Ad=n=>Ch(n,!0);var Md=n=>Ni(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headNi(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),Dd=n=>Ni(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:R.of(["",""])},range:w.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},Od=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:Q(r.text,s-r.from,!1)+r.from,l=s==r.to?s+1:Q(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:l,insert:n.doc.slice(s,l).append(n.doc.slice(o,s))},range:w.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function Kn(n){let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),t>=s.number){let o=e[e.length-1];o.to=r.to,o.ranges.push(i)}else e.push({from:s.from,to:r.to,ranges:[i]});t=r.number+1}return e}function Mh(n,e,t){if(n.readOnly)return!1;let i=[],s=[];for(let r of Kn(n)){if(t?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(t?r.to+1:r.from-1),l=o.length+1;if(t){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let a of r.ranges)s.push(w.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let a of r.ranges)s.push(w.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:w.create(s,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}var Bd=({state:n,dispatch:e})=>Mh(n,e,!1),Ld=({state:n,dispatch:e})=>Mh(n,e,!0);function Th(n,e,t){if(n.readOnly)return!1;let i=[];for(let r of Kn(n))t?i.push({from:r.from,insert:n.doc.slice(r.from,r.to)+n.lineBreak}):i.push({from:r.to,insert:n.lineBreak+n.doc.slice(r.from,r.to)});let s=n.changes(i);return e(n.update({changes:s,selection:n.selection.map(s,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var Rd=({state:n,dispatch:e})=>Th(n,e,!1),Pd=({state:n,dispatch:e})=>Th(n,e,!0),Nd=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(Kn(e).map(({from:s,to:r})=>(s>0?s--:r{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),l=n.coordsAtPos(s.head,s.assoc||1);l&&(r=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function Id(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Re(n).resolveInner(e),i=t.childBefore(e),s=t.childAfter(e),r;return i&&s&&i.to<=e&&s.from>=e&&(r=i.type.prop(O.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}var Ja=Dh(!1),Hd=Dh(!0);function Dh(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(s=>{let{from:r,to:o}=s,l=e.doc.lineAt(r),a=!n&&r==o&&Id(e,r);n&&(r=o=(o<=l.to?l:e.doc.lineAt(o)).to);let h=new Et(e,{simulateBreak:r,simulateDoubleBreak:!!a}),f=In(h,r);for(f==null&&(f=yt(/^\s*/.exec(e.doc.lineAt(r).text)[0],e.tabSize));ol.from&&r{let s=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,s,i),t=l.number),o=l.to+1}let r=n.changes(s);return{changes:s,range:w.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}var Fd=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new Et(n,{overrideIndentation:r=>{let o=t[r];return o??-1}}),s=Xr(n,(r,o,l)=>{let a=In(i,r.from);if(a==null)return;/\S/.test(r.text)||(a=0);let h=/^\s*/.exec(r.text)[0],f=ti(n,a);(h!=f||l.fromn.readOnly?!1:(e(n.update(Xr(n,(t,i)=>{i.push({from:t.from,insert:n.facet(ei)})}),{userEvent:"input.indent"})),!0),Oh=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(Xr(n,(t,i)=>{let s=/^\s*/.exec(t.text)[0];if(!s)return;let r=yt(s,n.tabSize),o=0,l=ti(n,Math.max(0,r-lt(n)));for(;o(n.setTabFocusMode(),!0);var Wd=[{key:"Ctrl-b",run:rh,shift:ph,preventDefault:!0},{key:"Ctrl-f",run:oh,shift:gh},{key:"Ctrl-p",run:hh,shift:bh},{key:"Ctrl-n",run:fh,shift:wh},{key:"Ctrl-a",run:rd,shift:yd},{key:"Ctrl-e",run:od,shift:bd},{key:"Ctrl-d",run:Sh},{key:"Ctrl-h",run:Gr},{key:"Ctrl-k",run:Md},{key:"Ctrl-Alt-h",run:Ah},{key:"Ctrl-o",run:Ed},{key:"Ctrl-t",run:Od},{key:"Ctrl-v",run:_r}],zd=[{key:"ArrowLeft",run:rh,shift:ph,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:Yu,shift:hd,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:nd,shift:gd,preventDefault:!0},{key:"ArrowRight",run:oh,shift:gh,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:Xu,shift:fd,preventDefault:!0},{mac:"Cmd-ArrowRight",run:sd,shift:md,preventDefault:!0},{key:"ArrowUp",run:hh,shift:bh,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Ua,shift:_a},{mac:"Ctrl-ArrowUp",run:qa,shift:Ka},{key:"ArrowDown",run:fh,shift:wh,preventDefault:!0},{mac:"Cmd-ArrowDown",run:ja,shift:Ga},{mac:"Ctrl-ArrowDown",run:_r,shift:$a},{key:"PageUp",run:qa,shift:Ka},{key:"PageDown",run:_r,shift:$a},{key:"Home",run:id,shift:pd,preventDefault:!0},{key:"Mod-Home",run:Ua,shift:_a},{key:"End",run:td,shift:dd,preventDefault:!0},{key:"Mod-End",run:ja,shift:Ga},{key:"Enter",run:Ja,shift:Ja},{key:"Mod-a",run:wd},{key:"Backspace",run:Gr,shift:Gr,preventDefault:!0},{key:"Delete",run:Sh,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Ah,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:Ad,preventDefault:!0},{mac:"Mod-Backspace",run:Td,preventDefault:!0},{mac:"Mod-Delete",run:Dd,preventDefault:!0}].concat(Wd.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),Bh=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:Zu,shift:cd},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:ed,shift:ud},{key:"Alt-ArrowUp",run:Bd},{key:"Shift-Alt-ArrowUp",run:Rd},{key:"Alt-ArrowDown",run:Ld},{key:"Shift-Alt-ArrowDown",run:Pd},{key:"Mod-Alt-ArrowUp",run:vd},{key:"Mod-Alt-ArrowDown",run:Sd},{key:"Escape",run:Cd},{key:"Mod-Enter",run:Hd},{key:"Alt-l",mac:"Ctrl-l",run:xd},{key:"Mod-i",run:kd,preventDefault:!0},{key:"Mod-[",run:Oh},{key:"Mod-]",run:Eh},{key:"Mod-Alt-\\",run:Fd},{key:"Shift-Mod-k",run:Nd},{key:"Shift-Mod-\\",run:ad},{key:"Mod-/",run:Ru},{key:"Alt-A",run:Nu},{key:"Ctrl-m",mac:"Shift-Alt-m",run:Vd}].concat(zd),Lh={key:"Tab",run:Eh,shift:Oh};var qd={break:!0,case:!0,chan:!0,const:!0,continue:!0,default:!0,defer:!0,else:!0,fallthrough:!0,for:!0,func:!0,go:!0,goto:!0,if:!0,import:!0,interface:!0,map:!0,package:!0,range:!0,return:!0,select:!0,struct:!0,switch:!0,type:!0,var:!0,bool:!0,byte:!0,complex64:!0,complex128:!0,float32:!0,float64:!0,int8:!0,int16:!0,int32:!0,int64:!0,string:!0,uint8:!0,uint16:!0,uint32:!0,uint64:!0,int:!0,uint:!0,uintptr:!0,error:!0,rune:!0,any:!0,comparable:!0},Kd={true:!0,false:!0,iota:!0,nil:!0,append:!0,cap:!0,close:!0,complex:!0,copy:!0,delete:!0,imag:!0,len:!0,make:!0,new:!0,panic:!0,print:!0,println:!0,real:!0,recover:!0},Rh=/[+\-*&^%:=<>!|\/]/,Qe;function $n(n,e){var t=n.next();if(t=='"'||t=="'"||t=="`")return e.tokenize=$d(t),e.tokenize(n,e);if(/[\d\.]/.test(t))return t=="."?n.match(/^[0-9]+([eE][\-+]?[0-9]+)?/):t=="0"?n.match(/^[xX][0-9a-fA-F]+/)||n.match(/^0[0-7]+/):n.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/),"number";if(/[\[\]{}\(\),;\:\.]/.test(t))return Qe=t,null;if(t=="/"){if(n.eat("*"))return e.tokenize=Ph,Ph(n,e);if(n.eat("/"))return n.skipToEnd(),"comment"}if(Rh.test(t))return n.eatWhile(Rh),"operator";n.eatWhile(/[\w\$_\xa1-\uffff]/);var i=n.current();return qd.propertyIsEnumerable(i)?((i=="case"||i=="default")&&(Qe="case"),"keyword"):Kd.propertyIsEnumerable(i)?"atom":"variable"}function $d(n){return function(e,t){for(var i=!1,s,r=!1;(s=e.next())!=null;){if(s==n&&!i){r=!0;break}i=!i&&n!="`"&&s=="\\"}return(r||!(i||n=="`"))&&(t.tokenize=$n),"string"}}function Ph(n,e){for(var t=!1,i;i=n.next();){if(i=="/"&&t){e.tokenize=$n;break}t=i=="*"}return"comment"}function Ih(n,e,t,i,s){this.indented=n,this.column=e,this.type=t,this.align=i,this.prev=s}function Qr(n,e,t){return n.context=new Ih(n.indented,e,t,null,n.context)}function Nh(n){if(n.context.prev){var e=n.context.type;return(e==")"||e=="]"||e=="}")&&(n.indented=n.context.indented),n.context=n.context.prev}}var Hh={name:"go",startState:function(n){return{tokenize:null,context:new Ih(-n,0,"top",!1),indented:0,startOfLine:!0}},token:function(n,e){var t=e.context;if(n.sol()&&(t.align==null&&(t.align=!1),e.indented=n.indentation(),e.startOfLine=!0,t.type=="case"&&(t.type="}")),n.eatSpace())return null;Qe=null;var i=(e.tokenize||$n)(n,e);return i=="comment"||(t.align==null&&(t.align=!0),Qe=="{"?Qr(e,n.column(),"}"):Qe=="["?Qr(e,n.column(),"]"):Qe=="("?Qr(e,n.column(),")"):Qe=="case"?t.type="case":(Qe=="}"&&t.type=="}"||Qe==t.type)&&Nh(e),e.startOfLine=!1),i},indent:function(n,e,t){if(n.tokenize!=$n&&n.tokenize!=null)return null;var i=n.context,s=e&&e.charAt(0);if(i.type=="case"&&/^(?:case|default)\b/.test(e))return i.indented;var r=s==i.type;return i.align?i.column+(r?0:1):i.indented+(r?0:t.unit)},languageData:{indentOnInput:/^\s([{}]|case |default\s*:)$/,commentTokens:{line:"//",block:{open:"/*",close:"*/"}}}};var Fh={name:"toml",startState:function(){return{inString:!1,stringType:"",lhs:!0,inArray:0}},token:function(n,e){let t;if(!e.inString&&(t=n.match(/^('''|"""|'|")/))&&(e.stringType=t[0],e.inString=!0),n.sol()&&!e.inString&&e.inArray===0&&(e.lhs=!0),e.inString){for(;e.inString;)if(n.match(e.stringType))e.inString=!1;else if(n.peek()==="\\")n.next(),n.next();else{if(n.eol())break;n.match(/^.[^\\\"\']*/)}return e.lhs?"property":"string"}else{if(e.inArray&&n.peek()==="]")return n.next(),e.inArray--,"bracket";if(e.lhs&&n.peek()==="["&&n.skipTo("]"))return n.next(),n.peek()==="]"&&n.next(),"atom";if(n.peek()==="#")return n.skipToEnd(),"comment";if(n.eatSpace())return null;if(e.lhs&&n.eatWhile(function(i){return i!="="&&i!=" "}))return"property";if(e.lhs&&n.peek()==="=")return n.next(),e.lhs=!1,null;if(!e.lhs&&n.match(/^\d\d\d\d[\d\-\:\.T]*Z/))return"atom";if(!e.lhs&&(n.match("true")||n.match("false")))return"atom";if(!e.lhs&&n.peek()==="[")return e.inArray++,n.next(),"bracket";if(!e.lhs&&n.match(/^\-?\d+(?:\.\d+)?/))return"number";n.eatSpace()||n.next()}return null},languageData:{commentTokens:{line:"#"}}};var Ud="#e5c07b",Vh="#e06c75",jd="#56b6c2",_d="#ffffff",Un="#abb2bf",eo="#7d8799",Gd="#61afef",Jd="#98c379",Wh="#d19a66",Yd="#c678dd",Xd="#21252b",zh="#2c313a",qh="#282c34",Zr="#353a42",Qd="#3E4451",Kh="#528bff";var Zd=D.theme({"&":{color:Un,backgroundColor:qh},".cm-content":{caretColor:Kh},".cm-cursor, .cm-dropCursor":{borderLeftColor:Kh},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:Qd},".cm-panels":{backgroundColor:Xd,color:Un},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:qh,color:eo,border:"none"},".cm-activeLineGutter":{backgroundColor:zh},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Zr},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Zr,borderBottomColor:Zr},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:zh,color:Un}}},{dark:!0}),ep=Zt.define([{tag:y.keyword,color:Yd},{tag:[y.name,y.deleted,y.character,y.propertyName,y.macroName],color:Vh},{tag:[y.function(y.variableName),y.labelName],color:Gd},{tag:[y.color,y.constant(y.name),y.standard(y.name)],color:Wh},{tag:[y.definition(y.name),y.separator],color:Un},{tag:[y.typeName,y.className,y.number,y.changed,y.annotation,y.modifier,y.self,y.namespace],color:Ud},{tag:[y.operator,y.operatorKeyword,y.url,y.escape,y.regexp,y.link,y.special(y.string)],color:jd},{tag:[y.meta,y.comment],color:eo},{tag:y.strong,fontWeight:"bold"},{tag:y.emphasis,fontStyle:"italic"},{tag:y.strikethrough,textDecoration:"line-through"},{tag:y.link,color:eo,textDecoration:"underline"},{tag:y.heading,fontWeight:"bold",color:Vh},{tag:[y.atom,y.bool,y.special(y.variableName)],color:Wh},{tag:[y.processingInstruction,y.string,y.inserted],color:Jd},{tag:y.invalid,color:_d}]),$h=[Zd,Hn(ep)];var tp=Li.define(Hh),ip=Li.define(Fh);function Uh(n){return n.endsWith(".toml")?ip:tp}function jh(n){return n?$h:Hn(Ra,{fallback:!0})}function to(){return document.documentElement.getAttribute("data-theme")==="dark"}var jn=class{view;langCompartment=new pt;themeCompartment=new pt;constructor(e){let t=[ha(),aa(),fa(),oa(),Za(),Ba(),ei.of(" "),Ha(),this.langCompartment.of(Uh(e.fileName)),this.themeCompartment.of(jh(e.isDarkMode))];if(e.onRun){let i=e.onRun;t.push(An.of([{key:"Mod-Enter",preventDefault:!0,run:()=>(i(),!0)}]))}t.push(An.of([Lh,...nh,...Bh])),this.view=new D({parent:e.parent,state:U.create({doc:e.content,extensions:t})})}getCode(){return this.view.state.doc.toString()}setCode(e){this.view.dispatch({changes:{from:0,to:this.view.state.doc.length,insert:e}})}setLanguage(e){this.view.dispatch({effects:this.langCompartment.reconfigure(Uh(e))})}changeTheme(e){this.view.dispatch({effects:this.themeCompartment.reconfigure(jh(e))})}focus(){this.view.focus()}};function _h(n){return n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function io(n){return n=n.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()),n.charAt(0).toLowerCase()+n.slice(1)}function _n(n,e){return n.matches(e)?n:n.querySelector(e)}function no(n,e){let t=[];return n.matches(e)&&t.push(n),t.push(...Array.from(n.querySelectorAll(e))),t}var Gn=class{element;initialized=!1;DOM={};controllerName;controllerKebabName;constructor(e){this.element=e,this.controllerName=io(this.getControllerName()),this.controllerKebabName=_h(this.controllerName),this.init()}init(){this.initialized||(this.connect(),this.setupActions(),this.initialized=!0)}initializeDOM(e){return this.DOM={el:this.element,...e},e}getDOMElement(e){return Array.isArray(this.DOM[e])?this.DOM[e][0]:this.DOM[e]}getDOMArray(e){let t=this.DOM[e];return t?Array.isArray(t)?t:[t]:[]}getTarget(e,t){let i=t||this.element,s=`[data-${this.controllerKebabName}-target="${e}"]`;return _n(i,s)}getTargets(e,t){let i=t||this.element;return no(i,`[data-${this.controllerKebabName}-target="${e}"]`)}getGlobalTarget(e){return document.querySelector(`[data-${this.controllerKebabName}-target="${e}"]`)}setupActions(){no(this.element,"[data-action]").forEach(t=>{let i=t.getAttribute("data-action");if(i){let[s,r]=i.split("->"),[o,l]=r.split("#");if(o===this.controllerKebabName){let a=this[l];typeof a=="function"&&t.addEventListener(s,h=>{let f=this.extractActionParams(t);h.params=f,a.call(this,h)})}}})}extractActionParams(e){let t={};for(let[i,s]of Object.entries(e.dataset))if(i.startsWith(this.controllerName)&&i.endsWith("Param")){let r=io(i.slice(this.controllerName.length,-5));t[r]=this.parseParamValue(s)}return t}parseParamValue(e){if(e==null||e.trim()==="")return"";let t=e.trim();if(/^(true|false)$/i.test(t))return t.toLowerCase()==="true";if(/^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(t)){let i=Number(t);if(!Number.isNaN(i)&&Number.isFinite(i))return i}if(/^(null|undefined)$/i.test(t))return t.toLowerCase()==="null"?null:void 0;if(/^[{[]/.test(t)||/^".*"$/.test(t))try{return JSON.parse(t)}catch{}return e}getValue(e,t){let i=`data-${this.controllerKebabName}-${e}-value`,s=t||this.element,r=_n(s,`[${i}]`);return r&&r.getAttribute(i)||""}setValue(e,t,i){let s=`data-${this.controllerKebabName}-${e}-value`;(i||this.element).setAttribute(s,t)}hasValue(e,t){let i=`data-${this.controllerKebabName}-${e}-value`,s=t||this.element;return _n(s,`[${i}]`)!==null}on(e,t){document.addEventListener(e,t)}dispatch(e,t={}){let i=new CustomEvent(e,{detail:t,bubbles:!0});document.dispatchEvent(i)}getControllerName(){let e=this.element.getAttribute("data-controller");return e||this.constructor.name.replace(/^_/,"").replace(/Controller$/,"")}};var Gh=class extends Gn{connect(){this.pkgPath=this.getValue("pkg-path"),this.pkgAlias=this.getValue("pkg-alias")||"pkg",this.remote=this.getValue("remote"),this.chainId=this.getValue("chain-id"),this.editorEl=this.getTarget("editor"),this.keyEl=this.getTarget("key"),this.gasWantedEl=this.getTarget("gasWanted"),this.gasFeeEl=this.getTarget("gasFee"),this.sendEl=this.getTarget("send"),this.dryRunCmdEl=this.getTarget("dryRunCmd"),this.executeCmdEl=this.getTarget("executeCmd"),!(!this.editorEl||!this.dryRunCmdEl||!this.executeCmdEl)&&(this.editor=new jn({parent:this.editorEl,content:this._buildTemplate(),fileName:"script.gno",isDarkMode:to()}),this.on("theme:changed",()=>{this.editor.changeTheme(to())}),this._setupInputListeners(),this._updateCommands())}_buildTemplate(){return`package main import "${this.pkgPath}" @@ -18,4 +18,4 @@ func main() { // ${this.pkgAlias}.Render("") } `}_setupInputListeners(){let e=()=>this._updateCommands();this.keyEl.addEventListener("input",e),this.gasWantedEl.addEventListener("input",e),this.gasFeeEl.addEventListener("input",e),this.sendEl.addEventListener("input",e)}_buildCmd(e){let t=this.keyEl.value.trim()||"",i=this.gasWantedEl.value.trim()||"2000000",s=this.gasFeeEl.value.trim()||"1000000ugnot",r=this.sendEl.value.trim(),o=["gnokey maketx run",` -gas-wanted ${i}`,` -gas-fee ${s}`];return r&&r!=="0ugnot"&&o.push(` -send "${r}"`),o.push(" -broadcast"),e&&o.push(" -simulate only"),this.chainId&&o.push(` -chainid ${this.chainId}`),this.remote&&o.push(` -remote "${this.remote}"`),o.push(` ${t} script.gno`),o.join(` \\ -`)}_updateCommands(){this.dryRunCmdEl.textContent=this._buildCmd(!0),this.executeCmdEl.textContent=this._buildCmd(!1)}resetCode(){this.editor.setCode(this._buildTemplate())}downloadCode(){let e=new Blob([this.editor.getCode()],{type:"text/plain"}),t=URL.createObjectURL(e),i=document.createElement("a");i.href=t,i.download="script.gno",i.click(),URL.revokeObjectURL(t)}};export{Kh as RunController}; +`)}_updateCommands(){this.dryRunCmdEl.textContent=this._buildCmd(!0),this.executeCmdEl.textContent=this._buildCmd(!1)}resetCode(){this.editor.setCode(this._buildTemplate())}downloadCode(){let e=new Blob([this.editor.getCode()],{type:"text/plain"}),t=URL.createObjectURL(e),i=document.createElement("a");i.href=t,i.download="script.gno",i.click(),URL.revokeObjectURL(t)}};export{Gh as RunController}; diff --git a/gno.land/pkg/gnoweb/public/main.css b/gno.land/pkg/gnoweb/public/main.css index bcf2835c863..955812bf9fb 100644 --- a/gno.land/pkg/gnoweb/public/main.css +++ b/gno.land/pkg/gnoweb/public/main.css @@ -3,4 +3,4 @@ li[data-list-type-value=realm]{display:flex}.b-packages:has(input[value=realms]:checked) article[data-list-type-value=realm]{display:flex}.b-packages:has(input[value=pures]:checked) li[data-list-type-value=pure]{display:flex}.b-packages:has(input[value=pures]:checked) - article[data-list-type-value=pure]{display:flex}.b-packages label:has(input:checked){color:var(--s-color-text-tertiary)}.b-packages label:has(input:checked):after{background-color:var(--s-color-bg-brand-default);border-top-left-radius:var(--s-rounded-sm);border-top-right-radius:var(--s-rounded-sm);bottom:calc(var(--g-space-1)*-2);content:"";height:var(--g-space-1);left:0;position:absolute;width:100%}.b-packages:has(input[value=realms]:checked) .range:not(:has(>[data-list-type-value=realm])):before{display:block}.b-packages:has(input[value=realms]:checked) .range:not(:has(>[data-list-type-value=realm])):after{display:block}.b-packages:has(input[value=realms]:checked) .range:not(:has(>[data-list-type-value=realm])):before{content:"No realms found"}.b-packages:has(input[value=realms]:checked) .range:not(:has(>[data-list-type-value=realm])):after{content:"Add a realm to your namespace to get started"}.b-packages:has(input[value=pures]:checked) .range:not(:has(>[data-list-type-value=pure])):before{display:block}.b-packages:has(input[value=pures]:checked) .range:not(:has(>[data-list-type-value=pure])):after{display:block}.b-packages:has(input[value=pures]:checked) .range:not(:has(>[data-list-type-value=pure])):before{content:"No pures found"}.b-packages:has(input[value=pures]:checked) .range:not(:has(>[data-list-type-value=pure])):after{content:"Add a pure to your namespace to get started"}@media (min-width:calc(640 / 16 * 1rem)){.b-packages:has(input[value=display-grid]:checked) .range{gap:var(--g-space-3);grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:calc(1020 / 16 * 1rem)){.b-packages:has(input[value=display-grid]:checked) .range{grid-template-columns:repeat(4,minmax(0,1fr))}}.b-packages:has(input[value=display-grid]:checked) .range article .article-content p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.b-packages:has(input[value=display-list]:checked) .range article .article-content{display:flex;flex:none;flex-direction:row;gap:var(--g-space-2)}@media (min-width:calc(820 / 16 * 1rem)){.b-packages:has(input[value=display-list]:checked) .range article .article-content{flex:5;min-width:0}}.b-packages:has(input[value=display-list]:checked) .range article .article-content .title{margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:33.33333%}.b-packages:has(input[value=display-list]:checked) .range article .article-content p{white-space:nowrap}.b-packages:has(input[value=display-list]:checked) .range article footer{display:none;justify-content:center;min-width:0;padding-bottom:0;padding-left:0}@media (min-width:calc(640 / 16 * 1rem)){.b-packages:has(input[value=display-list]:checked) .range article footer{flex:1}}@media (min-width:calc(820 / 16 * 1rem)){.b-packages:has(input[value=display-list]:checked) .range article footer{display:flex}}.b-packages:has(input[value=display-list]:checked) .range article footer .size{display:none;min-width:0}@media (min-width:calc(1020 / 16 * 1rem)){.b-packages:has(input[value=display-list]:checked) .range article footer .size{display:block;flex:2}}.b-packages:has(input[value=display-list]:checked) .range article footer time{min-width:0}@media (min-width:calc(1020 / 16 * 1rem)){.b-packages:has(input[value=display-list]:checked) .range article footer time{flex:5}}.b-icon-action{flex-shrink:0;height:var(--g-space-5);width:var(--g-space-5)}.b-popup-bg,.b-popup-dialog{opacity:0;right:0;top:0;visibility:hidden;z-index:var(--g-z-max)}.b-popup-bg{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0}.b-popup-dialog{position:absolute}.b-popup-dialog>.inner{background-color:var(--s-color-bg-base);border:var(--s-border-secondary);border-radius:var(--s-rounded);padding:var(--g-space-2-5) var(--g-space-4);position:absolute;transform:translateX(-100%);z-index:var(--g-z-max)}.b-popup-dialog>.inner>*+*{margin-top:var(--g-space-2-5)}.b-popup-dialog header{align-items:center;color:var(--s-color-text-secondary);display:flex;justify-content:space-between;width:100%}.b-popup-dialog header>svg{color:var(--s-color-text-tertiary);cursor:pointer;position:absolute;right:var(--g-space-3)}.b-popup-dialog header>svg>svg:hover{color:var(--s-color-text-primary)}.b-popup:checked+.b-popup-bg,.b-popup:checked~.b-popup-dialog{opacity:1;visibility:visible}.b-tag,.b-tag--secondary{align-items:center;border:var(--s-border);border-radius:var(--s-rounded-full);color:var(--s-color-text-secondary);display:flex;font-family:var(--g-font-family-mono);font-size:var(--g-font-size-50);gap:var(--g-space-2);padding:var(--g-space-px) var(--g-space-2)}.b-tag--secondary{background-color:var(--s-color-bg-surface-primary);border-color:transparent;color:var(--s-color-text-primary)}.c-readme-view .gno-columns,.c-realm-view .gno-columns{display:flex;flex-wrap:wrap;gap:var(--g-space-10)}@media (min-width:calc(1366 / 16 * 1rem)){.c-readme-view .gno-columns,.c-realm-view .gno-columns{gap:var(--g-space-12)}}.c-readme-view .gno-columns>*,.c-realm-view .gno-columns>*{flex-basis:var(--g-space-52);flex-grow:1;flex-shrink:1}@media (min-width:calc(820 / 16 * 1rem)){.c-readme-view .gno-columns>*,.c-realm-view .gno-columns>*{flex-basis:var(--g-space-44)}}.c-readme-view .tooltip,.c-realm-view .tooltip{--tooltip-left:0;--tooltip-right:initial;align-items:center;border:var(--s-border);border-radius:var(--s-rounded-full);color:var(--s-color-text-tertiary);display:inline-flex;height:var(--g-space-4);justify-content:center;margin-bottom:var(--g-space-px);position:relative;width:var(--g-space-4)}.c-readme-view .tooltip>svg,.c-realm-view .tooltip>svg{height:var(--g-space-3);width:var(--g-space-3)}.c-readme-view .tooltip:after,.c-realm-view .tooltip:after{background-color:var(--s-color-bg-base);border:var(--s-border-secondary);border-radius:var(--s-rounded);color:var(--s-color-text-secondary);content:attr(data-tooltip);font-size:var(--g-font-size-100);font-weight:var(--g-font-normal);left:var(--tooltip-left);max-width:var(--g-space-48);min-width:var(--g-space-32);opacity:0;padding:var(--g-space-1) var(--g-space-2);position:absolute;right:var(--tooltip-right);scale:0;text-align:center;top:100%;visibility:hidden;width:-moz-fit-content;width:fit-content;z-index:var(--g-z-max)}.c-readme-view .tooltip:hover:after,.c-realm-view .tooltip:hover:after{opacity:1;scale:1;transition-delay:var(--g-transition-fast);visibility:visible}.c-readme-view .tooltip:only-of-type,.c-realm-view .tooltip:only-of-type{margin-left:.3em;margin-right:.3em}.c-realm-view .tooltip:has(+span){margin-left:.3em}.c-readme-view .tooltip:has(+span){margin-left:.3em}.c-readme-view .link-external,.c-realm-view .link-external{font-size:.67em}.c-readme-view .link-internal,.c-realm-view .link-internal{font-size:.75em;font-weight:400}.c-readme-view .link-tx,.c-readme-view .link-user,.c-realm-view .link-tx,.c-realm-view .link-user{font-size:.75em}.c-realm-view ul:has(li>input[type=checkbox]:first-child){list-style:none;padding-left:0}.c-readme-view ul:has(li>input[type=checkbox]:first-child){list-style:none;padding-left:0}.c-realm-view li:has(>input[type=checkbox]:first-child){align-items:center;display:flex;gap:var(--g-space-2)}.c-readme-view li:has(>input[type=checkbox]:first-child){align-items:center;display:flex;gap:var(--g-space-2)}.c-readme-view li>input[type=checkbox]:first-child,.c-realm-view li>input[type=checkbox]:first-child{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:var(--s-border-secondary);border-radius:var(--s-rounded-sm);flex-shrink:0;height:var(--g-space-5);padding:0;position:relative;width:var(--g-space-5)}.c-readme-view li>input[type=checkbox]:first-child:disabled,.c-realm-view li>input[type=checkbox]:first-child:disabled{background-color:var(--s-color-bg-surface-primary);border-color:var(--s-color-border-tertiary);cursor:not-allowed}.c-readme-view li>input[type=checkbox]:first-child:disabled:after,.c-realm-view li>input[type=checkbox]:first-child:disabled:after{background-color:var(--s-color-bg-brand-default)}.c-readme-view li>input[type=checkbox]:first-child:checked:after,.c-realm-view li>input[type=checkbox]:first-child:checked:after{opacity:1}.c-readme-view li>input[type=checkbox]:first-child:after,.c-realm-view li>input[type=checkbox]:first-child:after{background-color:var(--s-color-bg-base);clip-path:polygon(25% 36%,43% 54%,76% 18%,89% 29%,44% 78%,13% 49%);content:"";height:var(--g-space-3);left:50%;margin:auto;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--g-space-3)}.c-readme-view .footnote-backref,.c-realm-view .footnote-backref{vertical-align:middle}.c-readme-view li[id^="fn:"],.c-realm-view li[id^="fn:"]{position:relative;z-index:var(--g-z-1)}.c-readme-view li[id^="fn:"]:before,.c-realm-view li[id^="fn:"]:before{background-color:var(--s-color-bg-brand-weak);border-radius:var(--s-rounded-sm);bottom:0;content:"";display:block;left:calc(var(--g-space-0-5)*-1);opacity:0;position:absolute;right:calc(var(--g-space-0-5)*-1);top:calc(var(--g-space-0-5)*-1);z-index:var(--g-z-min)}.c-readme-view li[id^="fn:"]:target:before,.c-realm-view li[id^="fn:"]:target:before{opacity:1;transition-delay:var(--g-duration-150);transition-duration:var(--g-duration-75)}.c-readme-view .gno-form,.c-realm-view .gno-form{border:var(--s-border-secondary);border-radius:var(--s-rounded);display:block;margin-bottom:var(--g-space-6);margin-top:var(--g-space-6)}.c-readme-view .gno-form input[type=submit],.c-realm-view .gno-form input[type=submit]{background-color:var(--s-color-bg-brand-default);border-color:var(--s-color-border-brand-default);border-radius:var(--s-rounded-sm);color:var(--s-color-text-base);cursor:pointer;margin-bottom:var(--g-space-2);margin-top:var(--g-space-4);width:100%}.c-readme-view .gno-form input[type=submit]:hover,.c-realm-view .gno-form input[type=submit]:hover{opacity:.9}.c-readme-view .gno-form .command,.c-realm-view .gno-form .command{background-color:var(--s-color-bg-base-dev);margin-top:var(--g-space-6);padding:var(--g-space-4)}.c-readme-view .gno-form .command .title,.c-realm-view .gno-form .command .title{font-size:var(--g-font-size-200);font-weight:var(--g-font-semibold);white-space:nowrap}.c-readme-view .gno-form .command>.b-code,.c-realm-view .gno-form .command>.b-code{background-color:var(--s-color-bg-base-dev)}.c-readme-view .gno-form .command>.b-code>pre,.c-realm-view .gno-form .command>.b-code>pre{background-color:var(--s-color-bg-base);margin-bottom:0}.c-readme-view .gno-form .command .c-between,.c-readme-view .gno-form .command .c-inline,.c-realm-view .gno-form .command .c-between,.c-realm-view .gno-form .command .c-inline{align-items:flex-start;flex-direction:column;gap:var(--g-space-2)}@media (min-width:calc(640 / 16 * 1rem)){.c-readme-view .gno-form .command .c-between,.c-readme-view .gno-form .command .c-inline,.c-realm-view .gno-form .command .c-between,.c-realm-view .gno-form .command .c-inline{align-items:center;flex-direction:row}}.c-readme-view .gno-form .command .c-between>*,.c-readme-view .gno-form .command .c-inline>*,.c-realm-view .gno-form .command .c-between>*,.c-realm-view .gno-form .command .c-inline>*{width:100%}@media (min-width:calc(640 / 16 * 1rem)){.c-readme-view .gno-form .command .c-between>*,.c-readme-view .gno-form .command .c-inline>*,.c-realm-view .gno-form .command .c-between>*,.c-realm-view .gno-form .command .c-inline>*{width:auto}}.c-readme-view .gno-form_header,.c-realm-view .gno-form_header{color:var(--s-color-text-tertiary);display:flex;font-size:var(--g-font-size-50);justify-content:space-between;margin-bottom:var(--g-space-6);padding:var(--g-space-2) var(--g-space-4) 0}.c-readme-view .gno-form_input,.c-readme-view .gno-form_select,.c-realm-view .gno-form_input,.c-realm-view .gno-form_select{padding-left:var(--g-space-4);padding-right:var(--g-space-4);position:relative}.c-readme-view .gno-form_input label,.c-readme-view .gno-form_select label,.c-realm-view .gno-form_input label,.c-realm-view .gno-form_select label{background-color:var(--s-color-bg-input);color:var(--s-color-text-tertiary);display:none;font-size:var(--g-font-size-50);left:var(--g-space-5);padding-left:var(--g-space-1);padding-right:var(--g-space-1);position:absolute;top:0;transform:translateY(-50%)}.c-readme-view .gno-form_input svg,.c-readme-view .gno-form_select svg,.c-realm-view .gno-form_input svg,.c-realm-view .gno-form_select svg{height:var(--g-space-4);pointer-events:none;position:absolute;right:var(--g-space-6);top:50%;transform:translateY(-50%);width:var(--g-space-4)}.c-realm-view .gno-form_input:has(input:focus) label{display:block}.c-readme-view .gno-form_input:has(input:focus) label{display:block}.c-realm-view .gno-form_input:has(input:not(:-moz-placeholder)) label{display:block}.c-realm-view .gno-form_input:has(input:not(:placeholder-shown)) label{display:block}.c-readme-view .gno-form_input:has(input:not(:-moz-placeholder)) label{display:block}.c-readme-view .gno-form_input:has(input:not(:placeholder-shown)) label{display:block}.c-realm-view .gno-form_input:has(textarea:not(:-moz-placeholder)) label{display:block}.c-realm-view .gno-form_input:has(textarea:not(:placeholder-shown)) label{display:block}.c-readme-view .gno-form_input:has(textarea:not(:-moz-placeholder)) label{display:block}.c-readme-view .gno-form_input:has(textarea:not(:placeholder-shown)) label{display:block}.c-realm-view .gno-form_input:has(textarea:focus) label{display:block}.c-readme-view .gno-form_input:has(textarea:focus) label{display:block}.c-realm-view .gno-form_select:has(select:focus) label{display:block}.c-readme-view .gno-form_select:has(select:focus) label{display:block}.c-realm-view .gno-form_select:has(select option:not([value=""]):checked) label{display:block}.c-readme-view .gno-form_select:has(select option:not([value=""]):checked) label{display:block}.c-readme-view .gno-form_input input,.c-readme-view .gno-form_input textarea,.c-readme-view .gno-form_select select,.c-realm-view .gno-form_input input,.c-realm-view .gno-form_input textarea,.c-realm-view .gno-form_select select{background-color:var(--s-color-bg-input);border:var(--g-space-px) solid var(--s-color-border-input);border-radius:var(--s-rounded-sm);color:var(--s-color-text-primary);display:block;margin-bottom:var(--g-space-4);margin-top:var(--g-space-4);outline:none;padding:var(--g-space-2);width:100%}.c-readme-view .gno-form_input input:focus,.c-readme-view .gno-form_input input:hover,.c-readme-view .gno-form_input textarea:focus,.c-readme-view .gno-form_input textarea:hover,.c-readme-view .gno-form_select select:focus,.c-readme-view .gno-form_select select:hover,.c-realm-view .gno-form_input input:focus,.c-realm-view .gno-form_input input:hover,.c-realm-view .gno-form_input textarea:focus,.c-realm-view .gno-form_input textarea:hover,.c-realm-view .gno-form_select select:focus,.c-realm-view .gno-form_select select:hover{border-color:var(--s-color-border-tertiary)}.c-realm-view .gno-form_input input::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-realm-view .gno-form_input input::placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_input input::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_input input::placeholder{color:var(--s-color-text-tertiary)}.c-realm-view .gno-form_input textarea::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-realm-view .gno-form_input textarea::placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_input textarea::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_input textarea::placeholder{color:var(--s-color-text-tertiary)}.c-realm-view .gno-form_select select::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-realm-view .gno-form_select select::placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_select select::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_select select::placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_input input:disabled,.c-readme-view .gno-form_input input[readonly],.c-readme-view .gno-form_input textarea:disabled,.c-readme-view .gno-form_input textarea[readonly],.c-readme-view .gno-form_select select:disabled,.c-readme-view .gno-form_select select[readonly],.c-realm-view .gno-form_input input:disabled,.c-realm-view .gno-form_input input[readonly],.c-realm-view .gno-form_input textarea:disabled,.c-realm-view .gno-form_input textarea[readonly],.c-realm-view .gno-form_select select:disabled,.c-realm-view .gno-form_select select[readonly]{background-color:var(--s-color-bg-secondary);color:var(--s-color-text-tertiary);cursor:not-allowed}.c-readme-view .gno-form_input input:disabled:focus,.c-readme-view .gno-form_input input:disabled:hover,.c-readme-view .gno-form_input input[readonly]:focus,.c-readme-view .gno-form_input input[readonly]:hover,.c-readme-view .gno-form_input textarea:disabled:focus,.c-readme-view .gno-form_input textarea:disabled:hover,.c-readme-view .gno-form_input textarea[readonly]:focus,.c-readme-view .gno-form_input textarea[readonly]:hover,.c-readme-view .gno-form_select select:disabled:focus,.c-readme-view .gno-form_select select:disabled:hover,.c-readme-view .gno-form_select select[readonly]:focus,.c-readme-view .gno-form_select select[readonly]:hover,.c-realm-view .gno-form_input input:disabled:focus,.c-realm-view .gno-form_input input:disabled:hover,.c-realm-view .gno-form_input input[readonly]:focus,.c-realm-view .gno-form_input input[readonly]:hover,.c-realm-view .gno-form_input textarea:disabled:focus,.c-realm-view .gno-form_input textarea:disabled:hover,.c-realm-view .gno-form_input textarea[readonly]:focus,.c-realm-view .gno-form_input textarea[readonly]:hover,.c-realm-view .gno-form_select select:disabled:focus,.c-realm-view .gno-form_select select:disabled:hover,.c-realm-view .gno-form_select select[readonly]:focus,.c-realm-view .gno-form_select select[readonly]:hover{border-color:var(--s-color-border-secondary)}.c-realm-view .gno-form_input input:user-invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input input:user-invalid{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input textarea:user-invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input textarea:user-invalid{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_select select:user-invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_select select:user-invalid{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input input:user-invalid:focus{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input input:user-invalid:focus{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input textarea:user-invalid:focus{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input textarea:user-invalid:focus{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_select select:user-invalid:focus{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_select select:user-invalid:focus{border-color:var(--s-color-border-error)}@supports not selector(:user-invalid){.c-realm-view .gno-form_input input:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input input:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input input:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input input:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input textarea:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input textarea:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input textarea:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input textarea:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}.c-realm-view .gno-form_select select:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-realm-view .gno-form_select select:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_select select:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_select select:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}}.c-realm-view .gno-form_input input:focus::-moz-placeholder{opacity:0}.c-realm-view .gno-form_input input:focus::placeholder{opacity:0}.c-readme-view .gno-form_input input:focus::-moz-placeholder{opacity:0}.c-readme-view .gno-form_input input:focus::placeholder{opacity:0}.c-realm-view .gno-form_input textarea:focus::-moz-placeholder{opacity:0}.c-realm-view .gno-form_input textarea:focus::placeholder{opacity:0}.c-readme-view .gno-form_input textarea:focus::-moz-placeholder{opacity:0}.c-readme-view .gno-form_input textarea:focus::placeholder{opacity:0}.c-readme-view .gno-form textarea,.c-realm-view .gno-form textarea{resize:none}.c-realm-view .gno-form_select select:has(option[value=""]:checked){color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_select select:has(option[value=""]:checked){color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_description,.c-realm-view .gno-form_description{color:var(--s-color-text-secondary);font-weight:var(--g-font-semibold);margin-bottom:var(--g-space-2);margin-top:var(--g-space-5);padding-left:var(--g-space-4)}.c-readme-view .gno-form_info-badge,.c-realm-view .gno-form_info-badge{color:var(--s-color-text-tertiary);font-size:var(--g-font-size-50);font-weight:var(--g-font-normal);margin-left:var(--g-space-1)}.c-readme-view .gno-form_selectable,.c-realm-view .gno-form_selectable{-moz-column-gap:var(--g-space-2);column-gap:var(--g-space-2);display:flex;margin-bottom:var(--g-space-1);padding-left:var(--g-space-4);padding-right:var(--g-space-4)}.c-readme-view .gno-form_selectable input,.c-realm-view .gno-form_selectable input{width:auto}.c-readme-view .gno-form_selectable input[type=checkbox],.c-readme-view .gno-form_selectable input[type=radio],.c-realm-view .gno-form_selectable input[type=checkbox],.c-realm-view .gno-form_selectable input[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:var(--s-border);border-radius:var(--s-rounded-full);flex-shrink:0;height:var(--g-space-5);padding:0;position:relative;width:var(--g-space-5)}.c-readme-view .gno-form_selectable input[type=checkbox]:checked,.c-readme-view .gno-form_selectable input[type=radio]:checked,.c-realm-view .gno-form_selectable input[type=checkbox]:checked,.c-realm-view .gno-form_selectable input[type=radio]:checked{background-color:var(--s-color-bg-brand-default);border-color:transparent}.c-readme-view .gno-form_selectable input[type=checkbox]:checked:after,.c-readme-view .gno-form_selectable input[type=radio]:checked:after,.c-realm-view .gno-form_selectable input[type=checkbox]:checked:after,.c-realm-view .gno-form_selectable input[type=radio]:checked:after{opacity:1}.c-readme-view .gno-form_selectable input[type=checkbox]:focus,.c-readme-view .gno-form_selectable input[type=radio]:focus,.c-realm-view .gno-form_selectable input[type=checkbox]:focus,.c-realm-view .gno-form_selectable input[type=radio]:focus{outline:none}.c-readme-view .gno-form_selectable input[type=checkbox]:focus,.c-readme-view .gno-form_selectable input[type=checkbox]:hover,.c-readme-view .gno-form_selectable input[type=radio]:focus,.c-readme-view .gno-form_selectable input[type=radio]:hover,.c-realm-view .gno-form_selectable input[type=checkbox]:focus,.c-realm-view .gno-form_selectable input[type=checkbox]:hover,.c-realm-view .gno-form_selectable input[type=radio]:focus,.c-realm-view .gno-form_selectable input[type=radio]:hover{border-color:var(--s-color-border-tertiary);color:var(--s-color-text-brand-default)}.c-readme-view .gno-form_selectable input[type=checkbox]:focus+label,.c-readme-view .gno-form_selectable input[type=checkbox]:hover+label,.c-readme-view .gno-form_selectable input[type=radio]:focus+label,.c-readme-view .gno-form_selectable input[type=radio]:hover+label,.c-realm-view .gno-form_selectable input[type=checkbox]:focus+label,.c-realm-view .gno-form_selectable input[type=checkbox]:hover+label,.c-realm-view .gno-form_selectable input[type=radio]:focus+label,.c-realm-view .gno-form_selectable input[type=radio]:hover+label{color:var(--s-color-text-brand-default);-webkit-text-decoration:underline;text-decoration:underline}.c-readme-view .gno-form_selectable input[type=checkbox]:disabled,.c-readme-view .gno-form_selectable input[type=radio]:disabled,.c-realm-view .gno-form_selectable input[type=checkbox]:disabled,.c-realm-view .gno-form_selectable input[type=radio]:disabled{cursor:not-allowed;opacity:var(--g-opacity-50);-webkit-text-decoration:line-through;text-decoration:line-through}.c-readme-view .gno-form_selectable input[type=checkbox]:disabled+label,.c-readme-view .gno-form_selectable input[type=radio]:disabled+label,.c-realm-view .gno-form_selectable input[type=checkbox]:disabled+label,.c-realm-view .gno-form_selectable input[type=radio]:disabled+label{cursor:not-allowed;opacity:var(--g-opacity-50);-webkit-text-decoration:none;text-decoration:none}.c-realm-view .gno-form_selectable input[type=radio]:user-invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_selectable input[type=radio]:user-invalid{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_selectable input[type=checkbox]:user-invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_selectable input[type=checkbox]:user-invalid{border-color:var(--s-color-border-error)}@supports not selector(:user-invalid){.c-realm-view .gno-form_selectable input[type=radio]:invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_selectable input[type=radio]:invalid{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_selectable input[type=checkbox]:invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_selectable input[type=checkbox]:invalid{border-color:var(--s-color-border-error)}}.c-readme-view .gno-form_selectable input[type=radio]:after,.c-realm-view .gno-form_selectable input[type=radio]:after{background-color:var(--s-color-bg-brand-default);border:var(--s-border-secondary);border-radius:var(--s-rounded-full);border-width:calc(var(--g-space-px)*2);content:"";height:var(--g-space-4);left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--g-space-4)}.c-readme-view .gno-form_selectable input[type=checkbox],.c-realm-view .gno-form_selectable input[type=checkbox]{border-radius:var(--s-rounded-sm)}.c-readme-view .gno-form_selectable input[type=checkbox]:after,.c-realm-view .gno-form_selectable input[type=checkbox]:after{background-color:var(--s-color-bg-base);clip-path:polygon(25% 36%,43% 54%,76% 18%,89% 29%,44% 78%,13% 49%);content:"";height:var(--g-space-3);left:50%;margin:auto;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--g-space-3)}.c-readme-view .gno-form_selectable label,.c-realm-view .gno-form_selectable label{color:var(--s-color-text-secondary);cursor:pointer;display:block;position:relative}.c-readme-view .gno-form_selectable label:first-letter,.c-realm-view .gno-form_selectable label:first-letter{text-transform:capitalize}.c-readme-view .gno-alert,.c-realm-view .gno-alert{border-left:var(--g-space-1) solid var(--s-color-border-tertiary);border-radius:var(--s-rounded);color:var(--s-color-text-secondary);margin-bottom:var(--g-space-10);margin-top:var(--g-space-5);padding:var(--g-space-3) var(--g-space-4)}.c-readme-view .gno-alert>div>:first-child,.c-realm-view .gno-alert>div>:first-child{margin-top:var(--g-space-2)}.c-readme-view .gno-alert>div>:last-child,.c-realm-view .gno-alert>div>:last-child{margin-bottom:0}.c-readme-view .gno-alert>summary,.c-realm-view .gno-alert>summary{align-items:center;display:flex;font-weight:var(--g-font-bold);gap:var(--g-space-2);list-style:none;margin-bottom:var(--g-space-1);margin-top:var(--g-space-1)}.c-readme-view .gno-alert>summary svg,.c-realm-view .gno-alert>summary svg{height:var(--g-space-6);width:var(--g-space-6)}.c-readme-view .gno-alert>summary svg:last-of-type,.c-realm-view .gno-alert>summary svg:last-of-type{height:var(--g-space-4);margin-left:auto;transform:rotate(-90deg);width:var(--g-space-4)}.c-readme-view .gno-alert>summary a,.c-readme-view .gno-alert>summary svg,.c-realm-view .gno-alert>summary a,.c-realm-view .gno-alert>summary svg{color:inherit}.c-realm-view .gno-alert>summary::marker{display:none}.c-readme-view .gno-alert>summary::marker{display:none}.c-readme-view .gno-alert>summary::-webkit-details-marker,.c-realm-view .gno-alert>summary::-webkit-details-marker{display:none}.c-readme-view .gno-alert[open]>summary svg:last-of-type,.c-realm-view .gno-alert[open]>summary svg:last-of-type{transform:rotate(0)}.c-readme-view .gno-alert.gno-alert-info,.c-realm-view .gno-alert.gno-alert-info{background-color:color-mix(in srgb,var(--s-color-bg-info-default) 10%,transparent);border-left-color:var(--s-color-border-info);color:var(--s-color-text-info)}.c-readme-view .gno-alert.gno-alert-note,.c-realm-view .gno-alert.gno-alert-note{background-color:color-mix(in srgb,var(--s-color-bg-note-default) 10%,transparent);border-left-color:var(--s-color-border-note);color:var(--s-color-text-note)}.c-readme-view .gno-alert.gno-alert-success,.c-realm-view .gno-alert.gno-alert-success{background-color:color-mix(in srgb,var(--s-color-bg-success-default) 10%,transparent);border-left-color:var(--s-color-border-success);color:var(--s-color-text-success)}.c-readme-view .gno-alert.gno-alert-warning,.c-realm-view .gno-alert.gno-alert-warning{background-color:color-mix(in srgb,var(--s-color-bg-warning-default) 10%,transparent);border-left-color:var(--s-color-border-warning);color:var(--s-color-text-warning)}.c-readme-view .gno-alert.gno-alert-caution,.c-realm-view .gno-alert.gno-alert-caution{background-color:color-mix(in srgb,var(--s-color-bg-caution-default) 10%,transparent);border-left-color:var(--s-color-border-error);color:var(--s-color-text-caution)}.c-readme-view .gno-alert.gno-alert-tip,.c-realm-view .gno-alert.gno-alert-tip{background-color:color-mix(in srgb,var(--s-color-bg-tip-default) 10%,transparent);border-left-color:var(--s-color-border-tip);color:var(--s-color-text-tip)}.b-playground{display:flex;flex-direction:column;grid-column:1/-1;min-height:70vh;padding-bottom:var(--g-space-24)}.b-playground-toolbar-left{align-items:center;display:flex;gap:var(--g-space-2)}.b-playground-toolbar-right{align-items:center;display:flex;gap:var(--g-space-1)}.b-playground-editor-area{border:1px solid var(--s-color-border-default);border-radius:var(--g-radius-2);display:flex;flex-direction:column;margin-bottom:var(--g-space-8);overflow:hidden}.b-playground-tabs-wrap{align-items:center;border-bottom:1px solid var(--s-color-border-default);display:flex;gap:0;padding-left:var(--g-space-1-5)}.b-playground-tabs{align-items:center;display:flex;flex:0 1 auto;gap:0;min-width:0;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}.b-playground-tabs::-webkit-scrollbar{display:none}.b-playground-tabs-actions{gap:0;margin-left:var(--g-space-1);padding-bottom:var(--g-space-2)}.b-playground-tabs-actions,.b-playground-tabs-nav{align-items:center;display:inline-flex;flex:0 0 auto}.b-playground-tabs-nav{background:none;border:none;color:var(--s-color-text-tertiary);cursor:pointer;height:var(--g-space-6);justify-content:center;padding:0;transition:color var(--g-transition-fast);width:var(--g-space-6)}.b-playground-tabs-nav:hover:not(:disabled){color:var(--s-color-text-secondary)}.b-playground-tabs-nav:disabled{cursor:default;opacity:.3}.b-playground-tabs-nav .c-icon{height:var(--g-space-3);width:var(--g-space-3)}.b-playground-tabs-nav--prev .c-icon{transform:rotate(90deg)}.b-playground-tabs-nav--next .c-icon{transform:rotate(-90deg)}.b-playground-tab{background:none;border:none;color:var(--s-color-text-tertiary);cursor:pointer;font-family:var(--g-font-mono);font-size:var(--g-font-size-100);font-weight:var(--g-font-semibold);margin-right:var(--g-space-1);padding:var(--g-space-1) var(--g-space-2) var(--g-space-3);position:relative;transition:color var(--g-transition-fast);white-space:nowrap}.b-playground-tab:after{background-color:var(--s-color-bg-brand-default);border-radius:var(--s-rounded) var(--s-rounded) 0 0;bottom:0;content:"";height:var(--g-space-1);left:0;position:absolute;transition:width var(--g-transition-fast);width:0}.b-playground-tab:hover{color:var(--s-color-text-tertiary-hover)}.b-playground-tab--active{color:var(--s-color-text-secondary)}.b-playground-tab--active:after{width:100%}.b-playground-tab-add{align-items:center;background:none;border:none;color:var(--s-color-text-muted);cursor:pointer;display:inline-flex;flex:0 0 auto;font-size:var(--g-font-size-200);height:var(--g-space-6);justify-content:center;line-height:1;padding:0;transition:color var(--g-transition-fast);width:var(--g-space-6)}.b-playground-tab-add:hover{color:var(--s-color-text-secondary)}.b-playground-editor{display:flex;height:60vh;min-height:300px;overflow:hidden;resize:vertical}.b-playground-output{background-color:var(--s-color-bg-surface-secondary);border:1px solid var(--s-color-border-default);border-radius:var(--g-radius-2);overflow:hidden;padding:var(--g-space-4)}.b-playground-output-header{align-items:center;background-color:var(--s-color-bg-muted);border-bottom:1px solid var(--s-color-border-default);display:flex;justify-content:space-between;padding:var(--g-space-1) 0}.b-playground-output-title{font-size:var(--g-font-size-50);font-weight:var(--g-font-semibold);letter-spacing:.05em;margin-bottom:var(--g-space-1);text-transform:uppercase}.b-playground-output-clear{background:none;border:none;color:var(--s-color-text-tertiary);cursor:pointer;font-size:var(--g-font-size-100)}.b-playground-output-clear:hover{color:var(--s-color-text-tertiary-hover)}.b-playground-output-content{background-color:var(--s-color-bg-base);display:flex;flex-direction:column;font-family:var(--g-font-mono);font-size:var(--g-font-size-75);gap:0;line-height:1.6;margin:0;max-height:300px;min-height:80px;overflow-y:auto;padding:var(--g-space-2)}.b-playground-output-item{align-items:flex-start;display:flex;gap:var(--g-space-2)}.b-playground-output-item-text{color:inherit;flex:1;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;white-space:pre-wrap;word-break:break-word}.b-playground-output-copy-btn{align-items:center;background:none;border:none;border-radius:var(--g-radius-1);color:var(--s-color-fg-muted);cursor:pointer;display:flex;flex-shrink:0;padding:var(--g-space-1);transition:color .15s,background-color .15s}.b-playground-output-copy-btn:hover{background-color:var(--s-color-bg-surface-secondary);color:var(--s-color-fg-default)}.b-run{display:flex;flex-direction:column;grid-column:1/-1;min-height:70vh;padding-bottom:var(--g-space-24)}.b-run-commands,.b-run-settings{background-color:var(--s-color-bg-surface-secondary);border-radius:var(--s-rounded);padding:var(--g-space-4)}.b-run-commands{display:flex;flex-direction:column;gap:var(--g-space-3)}.b-run-commands h3{font-size:var(--g-font-size-400)}.b-run-settings-grid{align-items:stretch;display:flex;flex-direction:column;gap:var(--g-space-1);margin-top:var(--g-space-4);width:100%}.b-run-settings-grid label{background-color:var(--s-color-bg-surface-primary)}.b-run-settings-grid .b-input:has(input:focus) label{background-color:var(--s-color-bg-surface-secondary)}.b-run-settings-grid .b-input:has(input:hover) label{background-color:var(--s-color-bg-surface-secondary)}.b-run-command-header{align-items:center;display:flex;font-size:var(--g-font-size-100);gap:var(--g-space-2);margin-bottom:var(--g-space-2)}.b-run-command-label{color:var(--s-color-text-primary);font-weight:var(--g-font-semibold)}.doc-example{background:var(--s-color-bg-surface-primary);border:var(--s-border);border-radius:var(--s-rounded-sm);margin-bottom:var(--g-space-3);margin-top:var(--g-space-3);overflow:hidden}.doc-example>summary{color:var(--s-color-text-secondary);cursor:pointer;font-size:var(--g-font-size-100);font-weight:var(--g-font-semibold);padding:var(--g-space-2) var(--g-space-3);-webkit-user-select:none;-moz-user-select:none;user-select:none}.doc-example>summary:hover{background:var(--s-color-bg-surface-secondary)}.doc-example>pre{border-radius:0;border-top:var(--s-border-secondary);font-size:var(--g-font-size-100);margin-bottom:0;margin-top:0;overflow-x:auto;padding:var(--g-space-3)}.u-hidden{display:none}.u-inline{display:inline}.u-sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.u-color-valid{color:var(--s-color-bg-brand-default)}.u-color-danger{color:var(--s-color-text-caution)}.u-text-stroke{-webkit-text-stroke:currentColor;-webkit-text-stroke-width:.6px}.u-font-mono{font-family:var(--g-font-family-mono)}.u-capitalize{text-transform:capitalize}.u-text-center{text-align:center}.u-no-scrollbar::-webkit-scrollbar{display:none}.u-no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.u-is-loading{opacity:0}.u-icon-static{height:var(--g-space-4);width:var(--g-space-4)}.u-gap-0{gap:0}.u-mt-4{margin-top:var(--g-space-4)}.u-mb-0{margin-bottom:0}.u-mb-2{margin-bottom:var(--g-space-2)}@media (min-width:calc(820 / 16 * 1rem)){.u-lg-mb-4{margin-bottom:var(--g-space-4)}}.u-grid-full{grid-column:1/-1} \ No newline at end of file + article[data-list-type-value=pure]{display:flex}.b-packages label:has(input:checked){color:var(--s-color-text-tertiary)}.b-packages label:has(input:checked):after{background-color:var(--s-color-bg-brand-default);border-top-left-radius:var(--s-rounded-sm);border-top-right-radius:var(--s-rounded-sm);bottom:calc(var(--g-space-1)*-2);content:"";height:var(--g-space-1);left:0;position:absolute;width:100%}.b-packages:has(input[value=realms]:checked) .range:not(:has(>[data-list-type-value=realm])):before{display:block}.b-packages:has(input[value=realms]:checked) .range:not(:has(>[data-list-type-value=realm])):after{display:block}.b-packages:has(input[value=realms]:checked) .range:not(:has(>[data-list-type-value=realm])):before{content:"No realms found"}.b-packages:has(input[value=realms]:checked) .range:not(:has(>[data-list-type-value=realm])):after{content:"Add a realm to your namespace to get started"}.b-packages:has(input[value=pures]:checked) .range:not(:has(>[data-list-type-value=pure])):before{display:block}.b-packages:has(input[value=pures]:checked) .range:not(:has(>[data-list-type-value=pure])):after{display:block}.b-packages:has(input[value=pures]:checked) .range:not(:has(>[data-list-type-value=pure])):before{content:"No pures found"}.b-packages:has(input[value=pures]:checked) .range:not(:has(>[data-list-type-value=pure])):after{content:"Add a pure to your namespace to get started"}@media (min-width:calc(640 / 16 * 1rem)){.b-packages:has(input[value=display-grid]:checked) .range{gap:var(--g-space-3);grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:calc(1020 / 16 * 1rem)){.b-packages:has(input[value=display-grid]:checked) .range{grid-template-columns:repeat(4,minmax(0,1fr))}}.b-packages:has(input[value=display-grid]:checked) .range article .article-content p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.b-packages:has(input[value=display-list]:checked) .range article .article-content{display:flex;flex:none;flex-direction:row;gap:var(--g-space-2)}@media (min-width:calc(820 / 16 * 1rem)){.b-packages:has(input[value=display-list]:checked) .range article .article-content{flex:5;min-width:0}}.b-packages:has(input[value=display-list]:checked) .range article .article-content .title{margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:33.33333%}.b-packages:has(input[value=display-list]:checked) .range article .article-content p{white-space:nowrap}.b-packages:has(input[value=display-list]:checked) .range article footer{display:none;justify-content:center;min-width:0;padding-bottom:0;padding-left:0}@media (min-width:calc(640 / 16 * 1rem)){.b-packages:has(input[value=display-list]:checked) .range article footer{flex:1}}@media (min-width:calc(820 / 16 * 1rem)){.b-packages:has(input[value=display-list]:checked) .range article footer{display:flex}}.b-packages:has(input[value=display-list]:checked) .range article footer .size{display:none;min-width:0}@media (min-width:calc(1020 / 16 * 1rem)){.b-packages:has(input[value=display-list]:checked) .range article footer .size{display:block;flex:2}}.b-packages:has(input[value=display-list]:checked) .range article footer time{min-width:0}@media (min-width:calc(1020 / 16 * 1rem)){.b-packages:has(input[value=display-list]:checked) .range article footer time{flex:5}}.b-icon-action{flex-shrink:0;height:var(--g-space-5);width:var(--g-space-5)}.b-popup-bg,.b-popup-dialog{opacity:0;right:0;top:0;visibility:hidden;z-index:var(--g-z-max)}.b-popup-bg{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0}.b-popup-dialog{position:absolute}.b-popup-dialog>.inner{background-color:var(--s-color-bg-base);border:var(--s-border-secondary);border-radius:var(--s-rounded);padding:var(--g-space-2-5) var(--g-space-4);position:absolute;transform:translateX(-100%);z-index:var(--g-z-max)}.b-popup-dialog>.inner>*+*{margin-top:var(--g-space-2-5)}.b-popup-dialog header{align-items:center;color:var(--s-color-text-secondary);display:flex;justify-content:space-between;width:100%}.b-popup-dialog header>svg{color:var(--s-color-text-tertiary);cursor:pointer;position:absolute;right:var(--g-space-3)}.b-popup-dialog header>svg>svg:hover{color:var(--s-color-text-primary)}.b-popup:checked+.b-popup-bg,.b-popup:checked~.b-popup-dialog{opacity:1;visibility:visible}.b-tag,.b-tag--secondary{align-items:center;border:var(--s-border);border-radius:var(--s-rounded-full);color:var(--s-color-text-secondary);display:flex;font-family:var(--g-font-family-mono);font-size:var(--g-font-size-50);gap:var(--g-space-2);padding:var(--g-space-px) var(--g-space-2)}.b-tag--secondary{background-color:var(--s-color-bg-surface-primary);border-color:transparent;color:var(--s-color-text-primary)}.c-readme-view .gno-columns,.c-realm-view .gno-columns{display:flex;flex-wrap:wrap;gap:var(--g-space-10)}@media (min-width:calc(1366 / 16 * 1rem)){.c-readme-view .gno-columns,.c-realm-view .gno-columns{gap:var(--g-space-12)}}.c-readme-view .gno-columns>*,.c-realm-view .gno-columns>*{flex-basis:var(--g-space-52);flex-grow:1;flex-shrink:1}@media (min-width:calc(820 / 16 * 1rem)){.c-readme-view .gno-columns>*,.c-realm-view .gno-columns>*{flex-basis:var(--g-space-44)}}.c-readme-view .tooltip,.c-realm-view .tooltip{--tooltip-left:0;--tooltip-right:initial;align-items:center;border:var(--s-border);border-radius:var(--s-rounded-full);color:var(--s-color-text-tertiary);display:inline-flex;height:var(--g-space-4);justify-content:center;margin-bottom:var(--g-space-px);position:relative;width:var(--g-space-4)}.c-readme-view .tooltip>svg,.c-realm-view .tooltip>svg{height:var(--g-space-3);width:var(--g-space-3)}.c-readme-view .tooltip:after,.c-realm-view .tooltip:after{background-color:var(--s-color-bg-base);border:var(--s-border-secondary);border-radius:var(--s-rounded);color:var(--s-color-text-secondary);content:attr(data-tooltip);font-size:var(--g-font-size-100);font-weight:var(--g-font-normal);left:var(--tooltip-left);max-width:var(--g-space-48);min-width:var(--g-space-32);opacity:0;padding:var(--g-space-1) var(--g-space-2);position:absolute;right:var(--tooltip-right);scale:0;text-align:center;top:100%;visibility:hidden;width:-moz-fit-content;width:fit-content;z-index:var(--g-z-max)}.c-readme-view .tooltip:hover:after,.c-realm-view .tooltip:hover:after{opacity:1;scale:1;transition-delay:var(--g-transition-fast);visibility:visible}.c-readme-view .tooltip:only-of-type,.c-realm-view .tooltip:only-of-type{margin-left:.3em;margin-right:.3em}.c-realm-view .tooltip:has(+span){margin-left:.3em}.c-readme-view .tooltip:has(+span){margin-left:.3em}.c-readme-view .link-external,.c-realm-view .link-external{font-size:.67em}.c-readme-view .link-internal,.c-realm-view .link-internal{font-size:.75em;font-weight:400}.c-readme-view .link-tx,.c-readme-view .link-user,.c-realm-view .link-tx,.c-realm-view .link-user{font-size:.75em}.c-realm-view ul:has(li>input[type=checkbox]:first-child){list-style:none;padding-left:0}.c-readme-view ul:has(li>input[type=checkbox]:first-child){list-style:none;padding-left:0}.c-realm-view li:has(>input[type=checkbox]:first-child){align-items:center;display:flex;gap:var(--g-space-2)}.c-readme-view li:has(>input[type=checkbox]:first-child){align-items:center;display:flex;gap:var(--g-space-2)}.c-readme-view li>input[type=checkbox]:first-child,.c-realm-view li>input[type=checkbox]:first-child{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:var(--s-border-secondary);border-radius:var(--s-rounded-sm);flex-shrink:0;height:var(--g-space-5);padding:0;position:relative;width:var(--g-space-5)}.c-readme-view li>input[type=checkbox]:first-child:disabled,.c-realm-view li>input[type=checkbox]:first-child:disabled{background-color:var(--s-color-bg-surface-primary);border-color:var(--s-color-border-tertiary);cursor:not-allowed}.c-readme-view li>input[type=checkbox]:first-child:disabled:after,.c-realm-view li>input[type=checkbox]:first-child:disabled:after{background-color:var(--s-color-bg-brand-default)}.c-readme-view li>input[type=checkbox]:first-child:checked:after,.c-realm-view li>input[type=checkbox]:first-child:checked:after{opacity:1}.c-readme-view li>input[type=checkbox]:first-child:after,.c-realm-view li>input[type=checkbox]:first-child:after{background-color:var(--s-color-bg-base);clip-path:polygon(25% 36%,43% 54%,76% 18%,89% 29%,44% 78%,13% 49%);content:"";height:var(--g-space-3);left:50%;margin:auto;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--g-space-3)}.c-readme-view .footnote-backref,.c-realm-view .footnote-backref{vertical-align:middle}.c-readme-view li[id^="fn:"],.c-realm-view li[id^="fn:"]{position:relative;z-index:var(--g-z-1)}.c-readme-view li[id^="fn:"]:before,.c-realm-view li[id^="fn:"]:before{background-color:var(--s-color-bg-brand-weak);border-radius:var(--s-rounded-sm);bottom:0;content:"";display:block;left:calc(var(--g-space-0-5)*-1);opacity:0;position:absolute;right:calc(var(--g-space-0-5)*-1);top:calc(var(--g-space-0-5)*-1);z-index:var(--g-z-min)}.c-readme-view li[id^="fn:"]:target:before,.c-realm-view li[id^="fn:"]:target:before{opacity:1;transition-delay:var(--g-duration-150);transition-duration:var(--g-duration-75)}.c-readme-view .gno-form,.c-realm-view .gno-form{border:var(--s-border-secondary);border-radius:var(--s-rounded);display:block;margin-bottom:var(--g-space-6);margin-top:var(--g-space-6)}.c-readme-view .gno-form input[type=submit],.c-realm-view .gno-form input[type=submit]{background-color:var(--s-color-bg-brand-default);border-color:var(--s-color-border-brand-default);border-radius:var(--s-rounded-sm);color:var(--s-color-text-base);cursor:pointer;margin-bottom:var(--g-space-2);margin-top:var(--g-space-4);width:100%}.c-readme-view .gno-form input[type=submit]:hover,.c-realm-view .gno-form input[type=submit]:hover{opacity:.9}.c-readme-view .gno-form .command,.c-realm-view .gno-form .command{background-color:var(--s-color-bg-base-dev);margin-top:var(--g-space-6);padding:var(--g-space-4)}.c-readme-view .gno-form .command .title,.c-realm-view .gno-form .command .title{font-size:var(--g-font-size-200);font-weight:var(--g-font-semibold);white-space:nowrap}.c-readme-view .gno-form .command>.b-code,.c-realm-view .gno-form .command>.b-code{background-color:var(--s-color-bg-base-dev)}.c-readme-view .gno-form .command>.b-code>pre,.c-realm-view .gno-form .command>.b-code>pre{background-color:var(--s-color-bg-base);margin-bottom:0}.c-readme-view .gno-form .command .c-between,.c-readme-view .gno-form .command .c-inline,.c-realm-view .gno-form .command .c-between,.c-realm-view .gno-form .command .c-inline{align-items:flex-start;flex-direction:column;gap:var(--g-space-2)}@media (min-width:calc(640 / 16 * 1rem)){.c-readme-view .gno-form .command .c-between,.c-readme-view .gno-form .command .c-inline,.c-realm-view .gno-form .command .c-between,.c-realm-view .gno-form .command .c-inline{align-items:center;flex-direction:row}}.c-readme-view .gno-form .command .c-between>*,.c-readme-view .gno-form .command .c-inline>*,.c-realm-view .gno-form .command .c-between>*,.c-realm-view .gno-form .command .c-inline>*{width:100%}@media (min-width:calc(640 / 16 * 1rem)){.c-readme-view .gno-form .command .c-between>*,.c-readme-view .gno-form .command .c-inline>*,.c-realm-view .gno-form .command .c-between>*,.c-realm-view .gno-form .command .c-inline>*{width:auto}}.c-readme-view .gno-form_header,.c-realm-view .gno-form_header{color:var(--s-color-text-tertiary);display:flex;font-size:var(--g-font-size-50);justify-content:space-between;margin-bottom:var(--g-space-6);padding:var(--g-space-2) var(--g-space-4) 0}.c-readme-view .gno-form_input,.c-readme-view .gno-form_select,.c-realm-view .gno-form_input,.c-realm-view .gno-form_select{padding-left:var(--g-space-4);padding-right:var(--g-space-4);position:relative}.c-readme-view .gno-form_input label,.c-readme-view .gno-form_select label,.c-realm-view .gno-form_input label,.c-realm-view .gno-form_select label{background-color:var(--s-color-bg-input);color:var(--s-color-text-tertiary);display:none;font-size:var(--g-font-size-50);left:var(--g-space-5);padding-left:var(--g-space-1);padding-right:var(--g-space-1);position:absolute;top:0;transform:translateY(-50%)}.c-readme-view .gno-form_input svg,.c-readme-view .gno-form_select svg,.c-realm-view .gno-form_input svg,.c-realm-view .gno-form_select svg{height:var(--g-space-4);pointer-events:none;position:absolute;right:var(--g-space-6);top:50%;transform:translateY(-50%);width:var(--g-space-4)}.c-realm-view .gno-form_input:has(input:focus) label{display:block}.c-readme-view .gno-form_input:has(input:focus) label{display:block}.c-realm-view .gno-form_input:has(input:not(:-moz-placeholder)) label{display:block}.c-realm-view .gno-form_input:has(input:not(:placeholder-shown)) label{display:block}.c-readme-view .gno-form_input:has(input:not(:-moz-placeholder)) label{display:block}.c-readme-view .gno-form_input:has(input:not(:placeholder-shown)) label{display:block}.c-realm-view .gno-form_input:has(textarea:not(:-moz-placeholder)) label{display:block}.c-realm-view .gno-form_input:has(textarea:not(:placeholder-shown)) label{display:block}.c-readme-view .gno-form_input:has(textarea:not(:-moz-placeholder)) label{display:block}.c-readme-view .gno-form_input:has(textarea:not(:placeholder-shown)) label{display:block}.c-realm-view .gno-form_input:has(textarea:focus) label{display:block}.c-readme-view .gno-form_input:has(textarea:focus) label{display:block}.c-realm-view .gno-form_select:has(select:focus) label{display:block}.c-readme-view .gno-form_select:has(select:focus) label{display:block}.c-realm-view .gno-form_select:has(select option:not([value=""]):checked) label{display:block}.c-readme-view .gno-form_select:has(select option:not([value=""]):checked) label{display:block}.c-readme-view .gno-form_input input,.c-readme-view .gno-form_input textarea,.c-readme-view .gno-form_select select,.c-realm-view .gno-form_input input,.c-realm-view .gno-form_input textarea,.c-realm-view .gno-form_select select{background-color:var(--s-color-bg-input);border:var(--g-space-px) solid var(--s-color-border-input);border-radius:var(--s-rounded-sm);color:var(--s-color-text-primary);display:block;margin-bottom:var(--g-space-4);margin-top:var(--g-space-4);outline:none;padding:var(--g-space-2);width:100%}.c-readme-view .gno-form_input input:focus,.c-readme-view .gno-form_input input:hover,.c-readme-view .gno-form_input textarea:focus,.c-readme-view .gno-form_input textarea:hover,.c-readme-view .gno-form_select select:focus,.c-readme-view .gno-form_select select:hover,.c-realm-view .gno-form_input input:focus,.c-realm-view .gno-form_input input:hover,.c-realm-view .gno-form_input textarea:focus,.c-realm-view .gno-form_input textarea:hover,.c-realm-view .gno-form_select select:focus,.c-realm-view .gno-form_select select:hover{border-color:var(--s-color-border-tertiary)}.c-realm-view .gno-form_input input::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-realm-view .gno-form_input input::placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_input input::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_input input::placeholder{color:var(--s-color-text-tertiary)}.c-realm-view .gno-form_input textarea::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-realm-view .gno-form_input textarea::placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_input textarea::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_input textarea::placeholder{color:var(--s-color-text-tertiary)}.c-realm-view .gno-form_select select::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-realm-view .gno-form_select select::placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_select select::-moz-placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_select select::placeholder{color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_input input:disabled,.c-readme-view .gno-form_input input[readonly],.c-readme-view .gno-form_input textarea:disabled,.c-readme-view .gno-form_input textarea[readonly],.c-readme-view .gno-form_select select:disabled,.c-readme-view .gno-form_select select[readonly],.c-realm-view .gno-form_input input:disabled,.c-realm-view .gno-form_input input[readonly],.c-realm-view .gno-form_input textarea:disabled,.c-realm-view .gno-form_input textarea[readonly],.c-realm-view .gno-form_select select:disabled,.c-realm-view .gno-form_select select[readonly]{background-color:var(--s-color-bg-secondary);color:var(--s-color-text-tertiary);cursor:not-allowed}.c-readme-view .gno-form_input input:disabled:focus,.c-readme-view .gno-form_input input:disabled:hover,.c-readme-view .gno-form_input input[readonly]:focus,.c-readme-view .gno-form_input input[readonly]:hover,.c-readme-view .gno-form_input textarea:disabled:focus,.c-readme-view .gno-form_input textarea:disabled:hover,.c-readme-view .gno-form_input textarea[readonly]:focus,.c-readme-view .gno-form_input textarea[readonly]:hover,.c-readme-view .gno-form_select select:disabled:focus,.c-readme-view .gno-form_select select:disabled:hover,.c-readme-view .gno-form_select select[readonly]:focus,.c-readme-view .gno-form_select select[readonly]:hover,.c-realm-view .gno-form_input input:disabled:focus,.c-realm-view .gno-form_input input:disabled:hover,.c-realm-view .gno-form_input input[readonly]:focus,.c-realm-view .gno-form_input input[readonly]:hover,.c-realm-view .gno-form_input textarea:disabled:focus,.c-realm-view .gno-form_input textarea:disabled:hover,.c-realm-view .gno-form_input textarea[readonly]:focus,.c-realm-view .gno-form_input textarea[readonly]:hover,.c-realm-view .gno-form_select select:disabled:focus,.c-realm-view .gno-form_select select:disabled:hover,.c-realm-view .gno-form_select select[readonly]:focus,.c-realm-view .gno-form_select select[readonly]:hover{border-color:var(--s-color-border-secondary)}.c-realm-view .gno-form_input input:user-invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input input:user-invalid{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input textarea:user-invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input textarea:user-invalid{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_select select:user-invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_select select:user-invalid{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input input:user-invalid:focus{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input input:user-invalid:focus{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input textarea:user-invalid:focus{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input textarea:user-invalid:focus{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_select select:user-invalid:focus{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_select select:user-invalid:focus{border-color:var(--s-color-border-error)}@supports not selector(:user-invalid){.c-realm-view .gno-form_input input:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input input:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input input:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input input:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input textarea:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-realm-view .gno-form_input textarea:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input textarea:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_input textarea:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}.c-realm-view .gno-form_select select:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-realm-view .gno-form_select select:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_select select:invalid:not(:-moz-placeholder):not(:focus){border-color:var(--s-color-border-error)}.c-readme-view .gno-form_select select:invalid:not(:placeholder-shown):not(:focus){border-color:var(--s-color-border-error)}}.c-realm-view .gno-form_input input:focus::-moz-placeholder{opacity:0}.c-realm-view .gno-form_input input:focus::placeholder{opacity:0}.c-readme-view .gno-form_input input:focus::-moz-placeholder{opacity:0}.c-readme-view .gno-form_input input:focus::placeholder{opacity:0}.c-realm-view .gno-form_input textarea:focus::-moz-placeholder{opacity:0}.c-realm-view .gno-form_input textarea:focus::placeholder{opacity:0}.c-readme-view .gno-form_input textarea:focus::-moz-placeholder{opacity:0}.c-readme-view .gno-form_input textarea:focus::placeholder{opacity:0}.c-readme-view .gno-form textarea,.c-realm-view .gno-form textarea{resize:none}.c-realm-view .gno-form_select select:has(option[value=""]:checked){color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_select select:has(option[value=""]:checked){color:var(--s-color-text-tertiary)}.c-readme-view .gno-form_description,.c-realm-view .gno-form_description{color:var(--s-color-text-secondary);font-weight:var(--g-font-semibold);margin-bottom:var(--g-space-2);margin-top:var(--g-space-5);padding-left:var(--g-space-4)}.c-readme-view .gno-form_info-badge,.c-realm-view .gno-form_info-badge{color:var(--s-color-text-tertiary);font-size:var(--g-font-size-50);font-weight:var(--g-font-normal);margin-left:var(--g-space-1)}.c-readme-view .gno-form_selectable,.c-realm-view .gno-form_selectable{-moz-column-gap:var(--g-space-2);column-gap:var(--g-space-2);display:flex;margin-bottom:var(--g-space-1);padding-left:var(--g-space-4);padding-right:var(--g-space-4)}.c-readme-view .gno-form_selectable input,.c-realm-view .gno-form_selectable input{width:auto}.c-readme-view .gno-form_selectable input[type=checkbox],.c-readme-view .gno-form_selectable input[type=radio],.c-realm-view .gno-form_selectable input[type=checkbox],.c-realm-view .gno-form_selectable input[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:var(--s-border);border-radius:var(--s-rounded-full);flex-shrink:0;height:var(--g-space-5);padding:0;position:relative;width:var(--g-space-5)}.c-readme-view .gno-form_selectable input[type=checkbox]:checked,.c-readme-view .gno-form_selectable input[type=radio]:checked,.c-realm-view .gno-form_selectable input[type=checkbox]:checked,.c-realm-view .gno-form_selectable input[type=radio]:checked{background-color:var(--s-color-bg-brand-default);border-color:transparent}.c-readme-view .gno-form_selectable input[type=checkbox]:checked:after,.c-readme-view .gno-form_selectable input[type=radio]:checked:after,.c-realm-view .gno-form_selectable input[type=checkbox]:checked:after,.c-realm-view .gno-form_selectable input[type=radio]:checked:after{opacity:1}.c-readme-view .gno-form_selectable input[type=checkbox]:focus,.c-readme-view .gno-form_selectable input[type=radio]:focus,.c-realm-view .gno-form_selectable input[type=checkbox]:focus,.c-realm-view .gno-form_selectable input[type=radio]:focus{outline:none}.c-readme-view .gno-form_selectable input[type=checkbox]:focus,.c-readme-view .gno-form_selectable input[type=checkbox]:hover,.c-readme-view .gno-form_selectable input[type=radio]:focus,.c-readme-view .gno-form_selectable input[type=radio]:hover,.c-realm-view .gno-form_selectable input[type=checkbox]:focus,.c-realm-view .gno-form_selectable input[type=checkbox]:hover,.c-realm-view .gno-form_selectable input[type=radio]:focus,.c-realm-view .gno-form_selectable input[type=radio]:hover{border-color:var(--s-color-border-tertiary);color:var(--s-color-text-brand-default)}.c-readme-view .gno-form_selectable input[type=checkbox]:focus+label,.c-readme-view .gno-form_selectable input[type=checkbox]:hover+label,.c-readme-view .gno-form_selectable input[type=radio]:focus+label,.c-readme-view .gno-form_selectable input[type=radio]:hover+label,.c-realm-view .gno-form_selectable input[type=checkbox]:focus+label,.c-realm-view .gno-form_selectable input[type=checkbox]:hover+label,.c-realm-view .gno-form_selectable input[type=radio]:focus+label,.c-realm-view .gno-form_selectable input[type=radio]:hover+label{color:var(--s-color-text-brand-default);-webkit-text-decoration:underline;text-decoration:underline}.c-readme-view .gno-form_selectable input[type=checkbox]:disabled,.c-readme-view .gno-form_selectable input[type=radio]:disabled,.c-realm-view .gno-form_selectable input[type=checkbox]:disabled,.c-realm-view .gno-form_selectable input[type=radio]:disabled{cursor:not-allowed;opacity:var(--g-opacity-50);-webkit-text-decoration:line-through;text-decoration:line-through}.c-readme-view .gno-form_selectable input[type=checkbox]:disabled+label,.c-readme-view .gno-form_selectable input[type=radio]:disabled+label,.c-realm-view .gno-form_selectable input[type=checkbox]:disabled+label,.c-realm-view .gno-form_selectable input[type=radio]:disabled+label{cursor:not-allowed;opacity:var(--g-opacity-50);-webkit-text-decoration:none;text-decoration:none}.c-realm-view .gno-form_selectable input[type=radio]:user-invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_selectable input[type=radio]:user-invalid{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_selectable input[type=checkbox]:user-invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_selectable input[type=checkbox]:user-invalid{border-color:var(--s-color-border-error)}@supports not selector(:user-invalid){.c-realm-view .gno-form_selectable input[type=radio]:invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_selectable input[type=radio]:invalid{border-color:var(--s-color-border-error)}.c-realm-view .gno-form_selectable input[type=checkbox]:invalid{border-color:var(--s-color-border-error)}.c-readme-view .gno-form_selectable input[type=checkbox]:invalid{border-color:var(--s-color-border-error)}}.c-readme-view .gno-form_selectable input[type=radio]:after,.c-realm-view .gno-form_selectable input[type=radio]:after{background-color:var(--s-color-bg-brand-default);border:var(--s-border-secondary);border-radius:var(--s-rounded-full);border-width:calc(var(--g-space-px)*2);content:"";height:var(--g-space-4);left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--g-space-4)}.c-readme-view .gno-form_selectable input[type=checkbox],.c-realm-view .gno-form_selectable input[type=checkbox]{border-radius:var(--s-rounded-sm)}.c-readme-view .gno-form_selectable input[type=checkbox]:after,.c-realm-view .gno-form_selectable input[type=checkbox]:after{background-color:var(--s-color-bg-base);clip-path:polygon(25% 36%,43% 54%,76% 18%,89% 29%,44% 78%,13% 49%);content:"";height:var(--g-space-3);left:50%;margin:auto;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--g-space-3)}.c-readme-view .gno-form_selectable label,.c-realm-view .gno-form_selectable label{color:var(--s-color-text-secondary);cursor:pointer;display:block;position:relative}.c-readme-view .gno-form_selectable label:first-letter,.c-realm-view .gno-form_selectable label:first-letter{text-transform:capitalize}.c-readme-view .gno-alert,.c-realm-view .gno-alert{border-left:var(--g-space-1) solid var(--s-color-border-tertiary);border-radius:var(--s-rounded);color:var(--s-color-text-secondary);margin-bottom:var(--g-space-10);margin-top:var(--g-space-5);padding:var(--g-space-3) var(--g-space-4)}.c-readme-view .gno-alert>div>:first-child,.c-realm-view .gno-alert>div>:first-child{margin-top:var(--g-space-2)}.c-readme-view .gno-alert>div>:last-child,.c-realm-view .gno-alert>div>:last-child{margin-bottom:0}.c-readme-view .gno-alert>summary,.c-realm-view .gno-alert>summary{align-items:center;display:flex;font-weight:var(--g-font-bold);gap:var(--g-space-2);list-style:none;margin-bottom:var(--g-space-1);margin-top:var(--g-space-1)}.c-readme-view .gno-alert>summary svg,.c-realm-view .gno-alert>summary svg{height:var(--g-space-6);width:var(--g-space-6)}.c-readme-view .gno-alert>summary svg:last-of-type,.c-realm-view .gno-alert>summary svg:last-of-type{height:var(--g-space-4);margin-left:auto;transform:rotate(-90deg);width:var(--g-space-4)}.c-readme-view .gno-alert>summary a,.c-readme-view .gno-alert>summary svg,.c-realm-view .gno-alert>summary a,.c-realm-view .gno-alert>summary svg{color:inherit}.c-realm-view .gno-alert>summary::marker{display:none}.c-readme-view .gno-alert>summary::marker{display:none}.c-readme-view .gno-alert>summary::-webkit-details-marker,.c-realm-view .gno-alert>summary::-webkit-details-marker{display:none}.c-readme-view .gno-alert[open]>summary svg:last-of-type,.c-realm-view .gno-alert[open]>summary svg:last-of-type{transform:rotate(0)}.c-readme-view .gno-alert.gno-alert-info,.c-realm-view .gno-alert.gno-alert-info{background-color:color-mix(in srgb,var(--s-color-bg-info-default) 10%,transparent);border-left-color:var(--s-color-border-info);color:var(--s-color-text-info)}.c-readme-view .gno-alert.gno-alert-note,.c-realm-view .gno-alert.gno-alert-note{background-color:color-mix(in srgb,var(--s-color-bg-note-default) 10%,transparent);border-left-color:var(--s-color-border-note);color:var(--s-color-text-note)}.c-readme-view .gno-alert.gno-alert-success,.c-realm-view .gno-alert.gno-alert-success{background-color:color-mix(in srgb,var(--s-color-bg-success-default) 10%,transparent);border-left-color:var(--s-color-border-success);color:var(--s-color-text-success)}.c-readme-view .gno-alert.gno-alert-warning,.c-realm-view .gno-alert.gno-alert-warning{background-color:color-mix(in srgb,var(--s-color-bg-warning-default) 10%,transparent);border-left-color:var(--s-color-border-warning);color:var(--s-color-text-warning)}.c-readme-view .gno-alert.gno-alert-caution,.c-realm-view .gno-alert.gno-alert-caution{background-color:color-mix(in srgb,var(--s-color-bg-caution-default) 10%,transparent);border-left-color:var(--s-color-border-error);color:var(--s-color-text-caution)}.c-readme-view .gno-alert.gno-alert-tip,.c-realm-view .gno-alert.gno-alert-tip{background-color:color-mix(in srgb,var(--s-color-bg-tip-default) 10%,transparent);border-left-color:var(--s-color-border-tip);color:var(--s-color-text-tip)}.b-code-editor-area{border:1px solid var(--s-color-border-default);border-radius:var(--g-radius-2);display:flex;flex-direction:column;margin-bottom:var(--g-space-8);overflow:hidden}.b-code-editor{display:flex;height:60vh;min-height:300px;overflow:hidden;resize:vertical}.doc-example{background:var(--s-color-bg-surface-primary);border:var(--s-border);border-radius:var(--s-rounded-sm);margin-bottom:var(--g-space-3);margin-top:var(--g-space-3);overflow:hidden}.doc-example>summary{color:var(--s-color-text-secondary);cursor:pointer;font-size:var(--g-font-size-100);font-weight:var(--g-font-semibold);padding:var(--g-space-2) var(--g-space-3);-webkit-user-select:none;-moz-user-select:none;user-select:none}.doc-example>summary:hover{background:var(--s-color-bg-surface-secondary)}.doc-example>pre{border-radius:0;border-top:var(--s-border-secondary);font-size:var(--g-font-size-100);margin-bottom:0;margin-top:0;overflow-x:auto;padding:var(--g-space-3)}.b-playground{display:flex;flex-direction:column;grid-column:1/-1;min-height:70vh;padding-bottom:var(--g-space-24)}.b-playground-toolbar-left{align-items:center;display:flex;gap:var(--g-space-2)}.b-playground-toolbar-right{align-items:center;display:flex;gap:var(--g-space-1)}.b-playground-tabs-wrap{align-items:center;border-bottom:1px solid var(--s-color-border-default);display:flex;gap:0;padding-left:var(--g-space-1-5)}.b-playground-tabs{align-items:center;display:flex;flex:0 1 auto;gap:0;min-width:0;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}.b-playground-tabs::-webkit-scrollbar{display:none}.b-playground-tabs-actions{gap:0;margin-left:var(--g-space-1);padding-bottom:var(--g-space-2)}.b-playground-tabs-actions,.b-playground-tabs-nav{align-items:center;display:inline-flex;flex:0 0 auto}.b-playground-tabs-nav{background:none;border:none;color:var(--s-color-text-tertiary);cursor:pointer;height:var(--g-space-6);justify-content:center;padding:0;transition:color var(--g-transition-fast);width:var(--g-space-6)}.b-playground-tabs-nav:hover:not(:disabled){color:var(--s-color-text-secondary)}.b-playground-tabs-nav:disabled{cursor:default;opacity:.3}.b-playground-tabs-nav .c-icon{height:var(--g-space-3);width:var(--g-space-3)}.b-playground-tabs-nav--prev .c-icon{transform:rotate(90deg)}.b-playground-tabs-nav--next .c-icon{transform:rotate(-90deg)}.b-playground-tab{background:none;border:none;color:var(--s-color-text-tertiary);cursor:pointer;font-family:var(--g-font-mono);font-size:var(--g-font-size-100);font-weight:var(--g-font-semibold);margin-right:var(--g-space-1);padding:var(--g-space-1) var(--g-space-2) var(--g-space-3);position:relative;transition:color var(--g-transition-fast);white-space:nowrap}.b-playground-tab:after{background-color:var(--s-color-bg-brand-default);border-radius:var(--s-rounded) var(--s-rounded) 0 0;bottom:0;content:"";height:var(--g-space-1);left:0;position:absolute;transition:width var(--g-transition-fast);width:0}.b-playground-tab:hover{color:var(--s-color-text-tertiary-hover)}.b-playground-tab--active{color:var(--s-color-text-secondary)}.b-playground-tab--active:after{width:100%}.b-playground-tab-add{align-items:center;background:none;border:none;color:var(--s-color-text-muted);cursor:pointer;display:inline-flex;flex:0 0 auto;font-size:var(--g-font-size-200);height:var(--g-space-6);justify-content:center;line-height:1;padding:0;transition:color var(--g-transition-fast);width:var(--g-space-6)}.b-playground-tab-add:hover{color:var(--s-color-text-secondary)}.b-playground-output{background-color:var(--s-color-bg-surface-secondary);border:1px solid var(--s-color-border-default);border-radius:var(--g-radius-2);overflow:hidden;padding:var(--g-space-4)}.b-playground-output-header{align-items:center;background-color:var(--s-color-bg-muted);border-bottom:1px solid var(--s-color-border-default);display:flex;justify-content:space-between;padding:var(--g-space-1) 0}.b-playground-output-title{font-size:var(--g-font-size-50);font-weight:var(--g-font-semibold);letter-spacing:.05em;margin-bottom:var(--g-space-1);text-transform:uppercase}.b-playground-output-clear{background:none;border:none;color:var(--s-color-text-tertiary);cursor:pointer;font-size:var(--g-font-size-100)}.b-playground-output-clear:hover{color:var(--s-color-text-tertiary-hover)}.b-playground-output-content{background-color:var(--s-color-bg-base);display:flex;flex-direction:column;font-family:var(--g-font-mono);font-size:var(--g-font-size-75);gap:0;line-height:1.6;margin:0;max-height:300px;min-height:80px;overflow-y:auto;padding:var(--g-space-2)}.b-run{display:flex;flex-direction:column;grid-column:1/-1;min-height:70vh;padding-bottom:var(--g-space-24)}.b-run-commands,.b-run-settings{background-color:var(--s-color-bg-surface-secondary);border-radius:var(--s-rounded);padding:var(--g-space-4)}.b-run-commands{display:flex;flex-direction:column;gap:var(--g-space-3)}.b-run-commands h3{font-size:var(--g-font-size-400)}.b-run-settings-grid{align-items:stretch;display:flex;flex-direction:column;gap:var(--g-space-1);margin-top:var(--g-space-4);width:100%}.b-run-settings-grid label{background-color:var(--s-color-bg-surface-primary)}.b-run-settings-grid .b-input:has(input:focus) label{background-color:var(--s-color-bg-surface-secondary)}.b-run-settings-grid .b-input:has(input:hover) label{background-color:var(--s-color-bg-surface-secondary)}.b-run-command-header{align-items:center;display:flex;font-size:var(--g-font-size-100);gap:var(--g-space-2);margin-bottom:var(--g-space-2)}.b-run-command-label{color:var(--s-color-text-primary);font-weight:var(--g-font-semibold)}.u-hidden{display:none}.u-inline{display:inline}.u-sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.u-color-valid{color:var(--s-color-bg-brand-default)}.u-color-danger{color:var(--s-color-text-caution)}.u-text-stroke{-webkit-text-stroke:currentColor;-webkit-text-stroke-width:.6px}.u-font-mono{font-family:var(--g-font-family-mono)}.u-capitalize{text-transform:capitalize}.u-text-center{text-align:center}.u-no-scrollbar::-webkit-scrollbar{display:none}.u-no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.u-is-loading{opacity:0}.u-icon-static{height:var(--g-space-4);width:var(--g-space-4)}.u-gap-0{gap:0}.u-mt-4{margin-top:var(--g-space-4)}.u-mb-0{margin-bottom:0}.u-mb-2{margin-bottom:var(--g-space-2)}@media (min-width:calc(820 / 16 * 1rem)){.u-lg-mb-4{margin-bottom:var(--g-space-4)}}.u-grid-full{grid-column:1/-1} \ No newline at end of file diff --git a/gno.land/pkg/gnoweb/weburl/url.go b/gno.land/pkg/gnoweb/weburl/url.go index 4a347dd1fa9..b01a5379483 100644 --- a/gno.land/pkg/gnoweb/weburl/url.go +++ b/gno.land/pkg/gnoweb/weburl/url.go @@ -171,11 +171,6 @@ func (gnoURL GnoURL) IsPlayground() bool { return gnoURL.Path == "/_/play" } -// IsPackageFork checks if the URL represents a package fork. -func (gnoURL GnoURL) IsPackageFork() bool { - return gnoURL.WebQuery.Has("fork") -} - // rePkgPath matches and validates a path. var rePkgPath = regexp.MustCompile(`^/[a-z0-9_/]*$`) From 75baeb3f4ad7dde7622cccb61df1004eabb8ca0d Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Thu, 4 Jun 2026 14:38:07 +0200 Subject: [PATCH 02/13] feat: change run feature to use component's copy button template --- gno.land/pkg/gnoweb/components/template.go | 5 +++++ gno.land/pkg/gnoweb/feature/run/template.go | 7 +++++++ gno.land/pkg/gnoweb/feature/run/templates/page.html | 10 ++-------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/gno.land/pkg/gnoweb/components/template.go b/gno.land/pkg/gnoweb/components/template.go index 4ebe808e3c7..7c0b1456876 100644 --- a/gno.land/pkg/gnoweb/components/template.go +++ b/gno.land/pkg/gnoweb/components/template.go @@ -5,6 +5,7 @@ import ( "embed" "fmt" "html/template" + "io/fs" "net/url" "strings" ) @@ -12,6 +13,10 @@ import ( //go:embed ui/*.html views/*.html layouts/*.html var html embed.FS +// TemplatesFS exposes the embedded gnoweb component templates so features in +// sub-packages can reuse shared partials (e.g. the "ui/copy" button icon). +func TemplatesFS() fs.FS { return html } + var funcMap = template.FuncMap{} var tmpl = template.New("web") diff --git a/gno.land/pkg/gnoweb/feature/run/template.go b/gno.land/pkg/gnoweb/feature/run/template.go index 2c73dea1dff..64c1091f8d5 100644 --- a/gno.land/pkg/gnoweb/feature/run/template.go +++ b/gno.land/pkg/gnoweb/feature/run/template.go @@ -3,6 +3,8 @@ package run import ( "embed" "html/template" + + "github.com/gnolang/gno/gno.land/pkg/gnoweb/components" ) //go:embed templates/*.html @@ -17,5 +19,10 @@ func mustParse(name string, paths ...string) *template.Template { if err != nil { panic("run: parse " + paths[0] + ": " + err.Error()) } + + // Reuse component UI partials + if t, err = t.ParseFS(components.TemplatesFS(), "ui/btn_copy.html"); err != nil { + panic("run: parse shared partials: " + err.Error()) + } return t } diff --git a/gno.land/pkg/gnoweb/feature/run/templates/page.html b/gno.land/pkg/gnoweb/feature/run/templates/page.html index 626aad79223..f9994205d3a 100644 --- a/gno.land/pkg/gnoweb/feature/run/templates/page.html +++ b/gno.land/pkg/gnoweb/feature/run/templates/page.html @@ -79,10 +79,7 @@

Dry Run

@@ -98,10 +95,7 @@

Execute

From 9f3070347b80177cd8b6c7c6f329faf7ada7e09f Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Thu, 4 Jun 2026 14:38:40 +0200 Subject: [PATCH 03/13] chore: fix docs --- .../pkg/gnoweb/feature/playground/feature.go | 22 ++++++++----------- .../pkg/gnoweb/feature/playground/handler.go | 10 +++++---- .../pkg/gnoweb/feature/playground/view.go | 4 ++-- gno.land/pkg/gnoweb/feature/run/feature.go | 6 ++--- 4 files changed, 19 insertions(+), 23 deletions(-) diff --git a/gno.land/pkg/gnoweb/feature/playground/feature.go b/gno.land/pkg/gnoweb/feature/playground/feature.go index be390a734a0..bbb40170f15 100644 --- a/gno.land/pkg/gnoweb/feature/playground/feature.go +++ b/gno.land/pkg/gnoweb/feature/playground/feature.go @@ -10,39 +10,35 @@ import ( // ClientAdapter is the subset of the gnoweb chain-client interface that // the playground feature consumes. Declared locally so feature/playground // does not import the gnoweb package. The signatures match the -// corresponding methods on gnoweb.ClientAdapter so a *gnoweb.MockClient -// or *gnoweb.rpcClient satisfies this contract through a thin adapter -// wired in at construction time. +// corresponding methods on gnoweb.ClientAdapter. type ClientAdapter interface { - // ListFiles is used by the fork view to enumerate package sources. + // ListFiles lists all source files available in a specified package path. ListFiles(ctx context.Context, path string) ([]string, error) - // File is used by the fork view to read each source file. + // File fetche the source file from a given package path and filename. File(ctx context.Context, path, filename string) ([]byte, error) - // Doc is used by the funcs API to enumerate exported functions. + // Doc retrieves the JSON doc suitable for printing from a + // specified package path. Doc(ctx context.Context, path string) (*doc.JSONDocumentation, error) - // Eval is used by the eval API to run an expression against a - // realm via vm/qeval. + // Eval evaluates a Gno expression via vm/qeval query. + // The data string should be in the format "gno.land/r/pkg.Expression(args)". Eval(ctx context.Context, data string) ([]byte, error) } // Deps gathers the dependencies the playground Handler needs. type Deps struct { Client ClientAdapter - - // Logger falls back to slog.Default(). Logger *slog.Logger // Domain is the chain domain (e.g. "gno.land"). Domain string - // Remote is the RPC endpoint surfaced to the playground UI so it - // can show the user which node it is talking to. + // Remote is the RPC endpoint. Remote string - // ChainId is the active chain id surfaced to the playground UI. + // ChainId is the active chain ID. ChainId string } diff --git a/gno.land/pkg/gnoweb/feature/playground/handler.go b/gno.land/pkg/gnoweb/feature/playground/handler.go index 080812d9c76..9aa26504f80 100644 --- a/gno.land/pkg/gnoweb/feature/playground/handler.go +++ b/gno.land/pkg/gnoweb/feature/playground/handler.go @@ -25,9 +25,11 @@ func Render(path string) string { ` func (h *Handler) GetPlaygroundView(u *weburl.GnoURL) (int, *components.View) { + // If available, read initial source code from a query argument initial := u.Query.Get("code") if initial != "" { if decoded, err := base64.StdEncoding.DecodeString(initial); err == nil { + // Decompress code when given as DEFLATE compressed data format (RFC 1951) if u.Query.Has("z") { zr := flate.NewReader(bytes.NewReader(decoded)) if plain, err := io.ReadAll(zr); err == nil { @@ -54,12 +56,12 @@ func (h *Handler) GetPlaygroundView(u *weburl.GnoURL) (int, *components.View) { func (h *Handler) GetForkView(ctx context.Context, u *weburl.GnoURL) (int, *components.View) { pkgPath := u.Path - files, err := h.deps.Client.ListFiles(ctx, pkgPath) if err != nil { h.deps.Logger.Warn("unable to list files for fork", "path", pkgPath, "error", err) - // Render the playground with default code rather than a hard - // error — the user can still write code from scratch. + + // Render the playground with default code rather than a hard error, + // so user can still write code from scratch. return http.StatusOK, NewPageView(PlaygroundData{ InitialCode: defaultCode, ForkFrom: path.Join(h.deps.Domain, pkgPath), @@ -234,5 +236,5 @@ func (h *Handler) serveFuncs(w http.ResponseWriter, r *http.Request) { func writeJSON(w http.ResponseWriter, status int, v any) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) - json.NewEncoder(w).Encode(v) //nolint:errcheck + _ = json.NewEncoder(w).Encode(v) } diff --git a/gno.land/pkg/gnoweb/feature/playground/view.go b/gno.land/pkg/gnoweb/feature/playground/view.go index 0e895749d15..1e19c8b5105 100644 --- a/gno.land/pkg/gnoweb/feature/playground/view.go +++ b/gno.land/pkg/gnoweb/feature/playground/view.go @@ -9,10 +9,10 @@ type PlaygroundData struct { // is rendered as a fork. Empty for a fresh playground. ForkFrom string - // Remote is the RPC endpoint surfaced to the UI. + // Remote is the RPC endpoint. Remote string - // ChainId is the current chain ID surfaced to the UI. + // ChainId is the current chain ID. ChainId string // Domain is the chain domain. diff --git a/gno.land/pkg/gnoweb/feature/run/feature.go b/gno.land/pkg/gnoweb/feature/run/feature.go index ad4bda509cd..27f79b8d27c 100644 --- a/gno.land/pkg/gnoweb/feature/run/feature.go +++ b/gno.land/pkg/gnoweb/feature/run/feature.go @@ -4,18 +4,16 @@ import "log/slog" // Deps gathers the dependencies the run Handler needs. type Deps struct { - // Logger falls back to slog.Default(). Logger *slog.Logger // Domain is the chain domain (e.g. "gno.land"), used to build the // fully-qualified package import path stamped on the rendered page. Domain string - // Remote is the RPC endpoint surfaced to the run UI so the CLI - // command builder can default it. + // Remote is the RPC endpoint. Remote string - // ChainId is the active chain id surfaced to the run UI. + // ChainId is the active chain ID. ChainId string } From ca89afce6582d76144f65c4532f085080ad1d166 Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Fri, 5 Jun 2026 11:15:08 +0200 Subject: [PATCH 04/13] chore: rename playground's feature client adapter --- gno.land/pkg/gnoweb/handler_http.go | 50 +++++++++++++++-------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/gno.land/pkg/gnoweb/handler_http.go b/gno.land/pkg/gnoweb/handler_http.go index c479030ff2f..e7db1fe8b24 100644 --- a/gno.land/pkg/gnoweb/handler_http.go +++ b/gno.land/pkg/gnoweb/handler_http.go @@ -99,7 +99,7 @@ func NewHTTPHandler(logger *slog.Logger, cfg *HTTPHandlerConfig) (*HTTPHandler, Aliases: cfg.Aliases, Logger: logger, Playground: playground.New(playground.Deps{ - Client: &featureClientAdapter{cfg.ClientAdapter}, + Client: &playgroundClientAdapter{cfg.ClientAdapter}, Logger: logger, Domain: cfg.Meta.Domain, Remote: cfg.Meta.RemoteHelp, @@ -114,29 +114,6 @@ func NewHTTPHandler(logger *slog.Logger, cfg *HTTPHandlerConfig) (*HTTPHandler, }, nil } -// featureClientAdapter adapts ClientAdapter for custom features by removing -// the FileMeta type dependency to break circular dependencies with gnoweb. -type featureClientAdapter struct { - client ClientAdapter -} - -func (a *featureClientAdapter) ListFiles(ctx context.Context, p string) ([]string, error) { - return a.client.ListFiles(ctx, p) -} - -func (a *featureClientAdapter) File(ctx context.Context, p, filename string) ([]byte, error) { - body, _, err := a.client.File(ctx, p, filename) - return body, err -} - -func (a *featureClientAdapter) Doc(ctx context.Context, p string) (*doc.JSONDocumentation, error) { - return a.client.Doc(ctx, p) -} - -func (a *featureClientAdapter) Eval(ctx context.Context, data string) ([]byte, error) { - return a.client.Eval(ctx, data) -} - // ServeHTTP handles HTTP requests and only allows GET requests. func (h *HTTPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { h.Logger.Debug("receiving request", "method", r.Method, "path", r.URL.Path) @@ -873,3 +850,28 @@ func generateBreadcrumbPaths(url *weburl.GnoURL) components.BreadcrumbData { return data } + +var _ playground.ClientAdapter = (*playgroundClientAdapter)(nil) + +// playgroundClientAdapter adapts ClientAdapter for the playground feature by +// removing the FileMeta type dependency to break circular dependencies with gnoweb. +type playgroundClientAdapter struct { + client ClientAdapter +} + +func (a *playgroundClientAdapter) ListFiles(ctx context.Context, p string) ([]string, error) { + return a.client.ListFiles(ctx, p) +} + +func (a *playgroundClientAdapter) File(ctx context.Context, p, filename string) ([]byte, error) { + body, _, err := a.client.File(ctx, p, filename) + return body, err +} + +func (a *playgroundClientAdapter) Doc(ctx context.Context, p string) (*doc.JSONDocumentation, error) { + return a.client.Doc(ctx, p) +} + +func (a *playgroundClientAdapter) Eval(ctx context.Context, data string) ([]byte, error) { + return a.client.Eval(ctx, data) +} From 223d59b7762b33ca71ed64abb51489b7f42d9324 Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Fri, 5 Jun 2026 11:29:58 +0200 Subject: [PATCH 05/13] chore: fix typos --- gno.land/pkg/gnoweb/components/template.go | 2 +- gno.land/pkg/gnoweb/feature/playground/feature.go | 2 +- .../gnoweb/feature/playground/frontend/controller-playground.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gno.land/pkg/gnoweb/components/template.go b/gno.land/pkg/gnoweb/components/template.go index 7c0b1456876..b35d11c0fb3 100644 --- a/gno.land/pkg/gnoweb/components/template.go +++ b/gno.land/pkg/gnoweb/components/template.go @@ -68,6 +68,6 @@ func init() { var err error tmpl, err = tmpl.ParseFS(html, "layouts/*.html", "ui/*.html", "views/*.html") if err != nil { - panic("unable to parse embed tempalates: " + err.Error()) + panic("unable to parse embed templates: " + err.Error()) } } diff --git a/gno.land/pkg/gnoweb/feature/playground/feature.go b/gno.land/pkg/gnoweb/feature/playground/feature.go index bbb40170f15..013125db5f7 100644 --- a/gno.land/pkg/gnoweb/feature/playground/feature.go +++ b/gno.land/pkg/gnoweb/feature/playground/feature.go @@ -15,7 +15,7 @@ type ClientAdapter interface { // ListFiles lists all source files available in a specified package path. ListFiles(ctx context.Context, path string) ([]string, error) - // File fetche the source file from a given package path and filename. + // File fetches the source file from a given package path and filename. File(ctx context.Context, path, filename string) ([]byte, error) // Doc retrieves the JSON doc suitable for printing from a diff --git a/gno.land/pkg/gnoweb/feature/playground/frontend/controller-playground.ts b/gno.land/pkg/gnoweb/feature/playground/frontend/controller-playground.ts index 0fb856312e3..a95b981fb83 100644 --- a/gno.land/pkg/gnoweb/feature/playground/frontend/controller-playground.ts +++ b/gno.land/pkg/gnoweb/feature/playground/frontend/controller-playground.ts @@ -291,7 +291,7 @@ export class PlaygroundController extends BaseController { } } catch { this._resetOutput( - `Note: Server-side execution not available for scratch pad code.\n\nPackage: ${pkgName}\nFiles: ${this.files.map((f) => f.name).join(", ")}\n\nTo deploy and test:\n`, + `Note: Server-side execution not available for scratchpad code.\n\nPackage: ${pkgName}\nFiles: ${this.files.map((f) => f.name).join(", ")}\n\nTo deploy and test:\n`, ); this._setOutput( ` gnokey maketx addpkg -pkgpath "${domain}/r/yourname/pkg" ...`, From 38a9c786fba05d14eaf32d88d6eb1a275f05c056 Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Fri, 5 Jun 2026 16:18:53 +0200 Subject: [PATCH 06/13] feat: check playground feat dependency values --- gno.land/pkg/gnoweb/client_mock.go | 2 + .../pkg/gnoweb/feature/playground/feature.go | 15 ++++ .../gnoweb/feature/playground/feature_test.go | 88 +++++++++++++++++++ .../gnoweb/feature/playground/handler_test.go | 18 ++-- gno.land/pkg/gnoweb/handler_http_test.go | 14 ++- 5 files changed, 124 insertions(+), 13 deletions(-) create mode 100644 gno.land/pkg/gnoweb/feature/playground/feature_test.go diff --git a/gno.land/pkg/gnoweb/client_mock.go b/gno.land/pkg/gnoweb/client_mock.go index 2849282bfbf..c81160084a6 100644 --- a/gno.land/pkg/gnoweb/client_mock.go +++ b/gno.land/pkg/gnoweb/client_mock.go @@ -14,6 +14,8 @@ import ( type MockPackage struct { Path string Domain string + Remote string + ChainId string Files map[string]string // filename -> body Functions []*doc.JSONFunc } diff --git a/gno.land/pkg/gnoweb/feature/playground/feature.go b/gno.land/pkg/gnoweb/feature/playground/feature.go index 013125db5f7..32a23b983ed 100644 --- a/gno.land/pkg/gnoweb/feature/playground/feature.go +++ b/gno.land/pkg/gnoweb/feature/playground/feature.go @@ -49,15 +49,30 @@ type Handler struct { } // New validates required deps and returns a Handler. +// If empty Domain defaults to "gno.land" and Logger defaults the +// standard Go library's logger. +// It panics if Client, Remote or ChainId are not specified. func New(deps Deps) *Handler { if deps.Client == nil { panic("playground.New: Client is required") } + if deps.Remote == "" { + panic("playground.New: Remote RPC endpoint is required") + } + + if deps.ChainId == "" { + panic("playground.New: Chain ID is required") + } + if deps.Logger == nil { deps.Logger = slog.Default() } + if deps.Domain == "" { + deps.Domain = "gno.land" + } + return &Handler{ deps: deps, limiter: newRateLimiter(evalBurstSize, evalRefillInterval), diff --git a/gno.land/pkg/gnoweb/feature/playground/feature_test.go b/gno.land/pkg/gnoweb/feature/playground/feature_test.go new file mode 100644 index 00000000000..9e61b84e212 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/playground/feature_test.go @@ -0,0 +1,88 @@ +package playground + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func validDeps() Deps { + return Deps{ + Client: &stubClient{}, + Logger: discardLogger(), + Domain: "gno.land", + Remote: "http://localhost:26657", + ChainId: "test", + } +} + +func TestNewPanics(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + setup func(*Deps) + wantMsg string + }{ + { + name: "nil client", + setup: func(deps *Deps) { deps.Client = nil }, + wantMsg: "playground.New: Client is required", + }, + { + name: "empty remote", + setup: func(deps *Deps) { deps.Remote = "" }, + wantMsg: "playground.New: Remote RPC endpoint is required", + }, + { + name: "empty chain id", + setup: func(deps *Deps) { deps.ChainId = "" }, + wantMsg: "playground.New: Chain ID is required", + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + deps := validDeps() + tc.setup(&deps) + + assert.PanicsWithValue(t, tc.wantMsg, func() { + New(deps) + }) + }) + } +} + +func TestNewDefaults(t *testing.T) { + t.Parallel() + + t.Run("defaults domain and logger", func(t *testing.T) { + t.Parallel() + + deps := validDeps() + deps.Domain = "" + deps.Logger = nil + + h := New(deps) + require.NotNil(t, h) + assert.Equal(t, "gno.land", h.deps.Domain) + assert.NotNil(t, h.deps.Logger) + assert.NotNil(t, h.limiter) + }) + + t.Run("preserves explicit domain and logger", func(t *testing.T) { + t.Parallel() + logger := discardLogger() + deps := validDeps() + deps.Domain = "example.com" + deps.Logger = logger + + h := New(deps) + require.NotNil(t, h) + assert.Equal(t, "example.com", h.deps.Domain) + assert.Same(t, logger, h.deps.Logger) + }) +} diff --git a/gno.land/pkg/gnoweb/feature/playground/handler_test.go b/gno.land/pkg/gnoweb/feature/playground/handler_test.go index bd28a28a04a..61c3c4715db 100644 --- a/gno.land/pkg/gnoweb/feature/playground/handler_test.go +++ b/gno.land/pkg/gnoweb/feature/playground/handler_test.go @@ -138,18 +138,16 @@ func TestHandlerPlaygroundEval(t *testing.T) { func TestHandlerPlaygroundFuncs(t *testing.T) { t.Parallel() - h := New(Deps{ - Client: &stubClient{ - docResult: &doc.JSONDocumentation{ - Funcs: []*doc.JSONFunc{ - {Name: "Hello", Signature: "Hello() string"}, - {Name: "method", Type: "MyType", Signature: "method()"}, - }, + deps := validDeps() + deps.Client = &stubClient{ + docResult: &doc.JSONDocumentation{ + Funcs: []*doc.JSONFunc{ + {Name: "Hello", Signature: "Hello() string"}, + {Name: "method", Type: "MyType", Signature: "method()"}, }, }, - Logger: discardLogger(), - Domain: "gno.land", - }) + } + h := New(deps) cases := []struct { name string diff --git a/gno.land/pkg/gnoweb/handler_http_test.go b/gno.land/pkg/gnoweb/handler_http_test.go index fd1036059a2..c7a04471b10 100644 --- a/gno.land/pkg/gnoweb/handler_http_test.go +++ b/gno.land/pkg/gnoweb/handler_http_test.go @@ -103,8 +103,12 @@ func newTestHandlerConfig(t *testing.T, client gnoweb.ClientAdapter) *gnoweb.HTT return &gnoweb.HTTPHandlerConfig{ ClientAdapter: client, - Renderer: &rawRenderer{}, - Aliases: map[string]gnoweb.AliasTarget{}, + Meta: gnoweb.StaticMetadata{ + RemoteHelp: "http://localhost:26657", + ChainId: "test", + }, + Renderer: &rawRenderer{}, + Aliases: map[string]gnoweb.AliasTarget{}, } } @@ -1316,7 +1320,11 @@ func newRealRendererHelpHandler(t *testing.T, jdoc *doc.JSONDocumentation) *gnow ClientAdapter: client, Renderer: renderer, Aliases: map[string]gnoweb.AliasTarget{}, - Meta: gnoweb.StaticMetadata{Domain: "gno.land"}, + Meta: gnoweb.StaticMetadata{ + Domain: "gno.land", + RemoteHelp: "http://localhost:26657", + ChainId: "test", + }, }, ) require.NoError(t, err) From d99869d877cb2f42fb105b1fc19ce76c14fccfa5 Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Fri, 5 Jun 2026 16:26:27 +0200 Subject: [PATCH 07/13] feat: check run feat dependency values --- gno.land/pkg/gnoweb/feature/run/feature.go | 16 ++++ .../pkg/gnoweb/feature/run/feature_test.go | 87 +++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 gno.land/pkg/gnoweb/feature/run/feature_test.go diff --git a/gno.land/pkg/gnoweb/feature/run/feature.go b/gno.land/pkg/gnoweb/feature/run/feature.go index 27f79b8d27c..ba38eaa2084 100644 --- a/gno.land/pkg/gnoweb/feature/run/feature.go +++ b/gno.land/pkg/gnoweb/feature/run/feature.go @@ -23,9 +23,25 @@ type Handler struct { } // New returns a Run handler. +// If empty Domain defaults to "gno.land" and Logger defaults the +// standard Go library's logger. +// It panics if Remote or ChainId are not specified. func New(deps Deps) *Handler { + if deps.Remote == "" { + panic("run.New: Remote RPC endpoint is required") + } + + if deps.ChainId == "" { + panic("run.New: Chain ID is required") + } + if deps.Logger == nil { deps.Logger = slog.Default() } + + if deps.Domain == "" { + deps.Domain = "gno.land" + } + return &Handler{deps: deps} } diff --git a/gno.land/pkg/gnoweb/feature/run/feature_test.go b/gno.land/pkg/gnoweb/feature/run/feature_test.go new file mode 100644 index 00000000000..1790c1e0e73 --- /dev/null +++ b/gno.land/pkg/gnoweb/feature/run/feature_test.go @@ -0,0 +1,87 @@ +package run + +import ( + "io" + "log/slog" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func discardLogger() *slog.Logger { + return slog.New(slog.NewTextHandler(io.Discard, nil)) +} + +func validDeps() Deps { + return Deps{ + Logger: discardLogger(), + Domain: "gno.land", + Remote: "http://localhost:26657", + ChainId: "test", + } +} + +func TestNewPanics(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + setup func(*Deps) + wantMsg string + }{ + { + name: "empty remote", + setup: func(deps *Deps) { deps.Remote = "" }, + wantMsg: "run.New: Remote RPC endpoint is required", + }, + { + name: "empty chain id", + setup: func(deps *Deps) { deps.ChainId = "" }, + wantMsg: "run.New: Chain ID is required", + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + deps := validDeps() + tc.setup(&deps) + + assert.PanicsWithValue(t, tc.wantMsg, func() { + New(deps) + }) + }) + } +} + +func TestNewDefaults(t *testing.T) { + t.Parallel() + + t.Run("defaults domain and logger", func(t *testing.T) { + t.Parallel() + + deps := validDeps() + deps.Domain = "" + deps.Logger = nil + + h := New(deps) + require.NotNil(t, h) + assert.Equal(t, "gno.land", h.deps.Domain) + assert.NotNil(t, h.deps.Logger) + }) + + t.Run("preserves explicit domain and logger", func(t *testing.T) { + t.Parallel() + logger := discardLogger() + deps := validDeps() + deps.Domain = "example.com" + deps.Logger = logger + + h := New(deps) + require.NotNil(t, h) + assert.Equal(t, "example.com", h.deps.Domain) + assert.Same(t, logger, h.deps.Logger) + }) +} From 53f6185e5663e268b4a9c960a68a8f879e043ac3 Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Fri, 5 Jun 2026 17:05:11 +0200 Subject: [PATCH 08/13] feat: fix decompression bomb attack vector in playground feature --- .../pkg/gnoweb/feature/playground/handler.go | 25 +++- .../gnoweb/feature/playground/handler_test.go | 117 ++++++++++++++++++ 2 files changed, 138 insertions(+), 4 deletions(-) diff --git a/gno.land/pkg/gnoweb/feature/playground/handler.go b/gno.land/pkg/gnoweb/feature/playground/handler.go index 9aa26504f80..995e8a62bcc 100644 --- a/gno.land/pkg/gnoweb/feature/playground/handler.go +++ b/gno.land/pkg/gnoweb/feature/playground/handler.go @@ -17,6 +17,10 @@ import ( "github.com/gnolang/gno/gno.land/pkg/gnoweb/weburl" ) +// maxDecompressedCodeSize caps DEFLATE-decompressed shared code to guard +// against decompression bombs when ?code=...&z are present in query path. +const maxDecompressedCodeSize = 1 << 20 // 1 MiB + const defaultCode = `package main func Render(path string) string { @@ -31,11 +35,10 @@ func (h *Handler) GetPlaygroundView(u *weburl.GnoURL) (int, *components.View) { if decoded, err := base64.StdEncoding.DecodeString(initial); err == nil { // Decompress code when given as DEFLATE compressed data format (RFC 1951) if u.Query.Has("z") { - zr := flate.NewReader(bytes.NewReader(decoded)) - if plain, err := io.ReadAll(zr); err == nil { - initial = string(plain) + initial = "" // uses default code if decompress fails + if plain, ok := decodeCompressedCode(decoded); ok { + initial = plain } - zr.Close() } else { initial = string(decoded) } @@ -238,3 +241,17 @@ func writeJSON(w http.ResponseWriter, status int, v any) { w.WriteHeader(status) _ = json.NewEncoder(w).Encode(v) } + +// decodeCompressedCode decompresses DEFLATE data. +func decodeCompressedCode(data []byte) (string, bool) { + zr := flate.NewReader(bytes.NewReader(data)) + defer zr.Close() + + // Read one byte past the ceiling so an over-limit payload is detectable + // rather than silently truncated. Over-limit is validated after by length. + plain, err := io.ReadAll(io.LimitReader(zr, maxDecompressedCodeSize+1)) + if err != nil || len(plain) > maxDecompressedCodeSize { + return "", false + } + return string(plain), true +} diff --git a/gno.land/pkg/gnoweb/feature/playground/handler_test.go b/gno.land/pkg/gnoweb/feature/playground/handler_test.go index 61c3c4715db..b05b07063eb 100644 --- a/gno.land/pkg/gnoweb/feature/playground/handler_test.go +++ b/gno.land/pkg/gnoweb/feature/playground/handler_test.go @@ -2,16 +2,21 @@ package playground import ( "bytes" + "compress/flate" "context" + "encoding/base64" "encoding/json" "errors" "io" "log/slog" "net/http" "net/http/httptest" + "net/url" "testing" "time" + "github.com/gnolang/gno/gno.land/pkg/gnoweb/components" + "github.com/gnolang/gno/gno.land/pkg/gnoweb/weburl" "github.com/gnolang/gno/gnovm/pkg/doc" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -53,6 +58,30 @@ func discardLogger() *slog.Logger { return slog.New(slog.NewTextHandler(io.Discard, nil)) } +// deflate compresses bytes with DEFLATE (RFC 1951) and returns the base64 of it. +func deflateBase64(t *testing.T, b []byte) string { + t.Helper() + + var buf bytes.Buffer + zw, err := flate.NewWriter(&buf, flate.BestCompression) + require.NoError(t, err) + _, err = zw.Write(b) + require.NoError(t, err) + require.NoError(t, zw.Close()) + return base64.StdEncoding.EncodeToString(buf.Bytes()) +} + +// extractPlaygroundViewData extracts data from a playground view. +func extractPlaygroundViewData(t *testing.T, v *components.View) PlaygroundData { + t.Helper() + + c, ok := v.Component.(*playgroundComponent) + require.True(t, ok, "unexpected component type %T", v.Component) + data, ok := c.data.(PlaygroundData) + require.True(t, ok, "unexpected data type %T", c.data) + return data +} + // TestHandlerPlaygroundEval tests the POST /_/api/eval handler directly. func TestHandlerPlaygroundEval(t *testing.T) { t.Parallel() @@ -208,6 +237,94 @@ func TestHandlerPlaygroundFuncs(t *testing.T) { } } +// TestGetPlaygroundViewCode covers the "code" shared-snippet paths. +func TestGetPlaygroundViewCode(t *testing.T) { + t.Parallel() + + h := New(validDeps()) + + t.Run("default when no code", func(t *testing.T) { + t.Parallel() + + status, v := h.GetPlaygroundView(&weburl.GnoURL{Query: url.Values{}}) + assert.Equal(t, http.StatusOK, status) + assert.Equal(t, defaultCode, extractPlaygroundViewData(t, v).InitialCode) + }) + + t.Run("plain base64", func(t *testing.T) { + t.Parallel() + + code := "package main // hello" + q := url.Values{"code": {base64.StdEncoding.EncodeToString([]byte(code))}} + status, v := h.GetPlaygroundView(&weburl.GnoURL{Query: q}) + assert.Equal(t, http.StatusOK, status) + assert.Equal(t, code, extractPlaygroundViewData(t, v).InitialCode) + }) + + t.Run("compressed round-trip", func(t *testing.T) { + t.Parallel() + + code := "package main\n\nfunc Render(path string) string { return \"hi\" }\n" + q := url.Values{"code": {deflateBase64(t, []byte(code))}, "z": {""}} + status, v := h.GetPlaygroundView(&weburl.GnoURL{Query: q}) + assert.Equal(t, http.StatusOK, status) + assert.Equal(t, code, extractPlaygroundViewData(t, v).InitialCode) + }) + + t.Run("decompression bomb is rejected", func(t *testing.T) { + t.Parallel() + + // ~8 MiB of zeros compresses to a few KB; well over the 1 MiB ceiling. + bomb := deflateBase64(t, bytes.Repeat([]byte{0}, 8<<20)) + q := url.Values{"code": {bomb}, "z": {""}} + status, v := h.GetPlaygroundView(&weburl.GnoURL{Query: q}) + assert.Equal(t, http.StatusOK, status) + + // The over-limit payload must not be adopted as InitialCode, + // the guard sets the default code instead. + got := extractPlaygroundViewData(t, v).InitialCode + assert.Equal(t, got, defaultCode, "view must use default code") + }) +} + +// TestDecodeCompressedCode unit-tests the bounded DEFLATE decoder directly. +func TestDecodeCompressedCode(t *testing.T) { + t.Parallel() + + t.Run("valid small payload", func(t *testing.T) { + t.Parallel() + + want := "some gno source" + var buf bytes.Buffer + zw, _ := flate.NewWriter(&buf, flate.BestCompression) + _, _ = zw.Write([]byte(want)) + require.NoError(t, zw.Close()) + + got, ok := decodeCompressedCode(buf.Bytes()) + require.True(t, ok) + assert.Equal(t, want, got) + }) + + t.Run("over-limit payload rejected", func(t *testing.T) { + t.Parallel() + + var buf bytes.Buffer + zw, _ := flate.NewWriter(&buf, flate.BestCompression) + _, _ = zw.Write(bytes.Repeat([]byte{0}, maxDecompressedCodeSize+1)) + require.NoError(t, zw.Close()) + + _, ok := decodeCompressedCode(buf.Bytes()) + assert.False(t, ok, "payload exceeding the ceiling must be rejected") + }) + + t.Run("invalid deflate data rejected", func(t *testing.T) { + t.Parallel() + + _, ok := decodeCompressedCode([]byte("not deflate data")) + assert.False(t, ok) + }) +} + // TestRateLimiter tests that the per-IP rate limiter enforces burst // limits. Uses a custom (burst=2, refill=10s) bucket so the test does // not race the production +1/3s refill rate. From 56dbb30eac956428efbf5271c3387d5aff413a7f Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Fri, 5 Jun 2026 17:28:50 +0200 Subject: [PATCH 09/13] ci: make egnerate --- gno.land/pkg/gnoweb/public/js/controller-playground.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gno.land/pkg/gnoweb/public/js/controller-playground.js b/gno.land/pkg/gnoweb/public/js/controller-playground.js index b13df15c541..0eb981d08d5 100644 --- a/gno.land/pkg/gnoweb/public/js/controller-playground.js +++ b/gno.land/pkg/gnoweb/public/js/controller-playground.js @@ -11,7 +11,7 @@ var Yn=[],ho=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2, `&&(e="");else{let i=e.indexOf(` `);i>-1&&(e=e.slice(0,i))}return t+e.length<=this.to?e:e.slice(0,this.to-t)}nextLine(){let t=this.parsedPos,e=this.lineAfter(t),i=t+e.length;for(let s=this.rangeIndex;;){let r=this.ranges[s].to;if(r>=i||(e=e.slice(0,r-(i-e.length)),s++,s==this.ranges.length))break;let o=this.ranges[s].from,l=this.lineAfter(o);e+=l,i=o+l.length}return{line:e,end:i}}skipGapsTo(t,e,i){for(;;){let s=this.ranges[this.rangeIndex].to,r=t+e;if(i>0?s>r:s>=r)break;let o=this.ranges[++this.rangeIndex].from;e+=o-s}return e}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){s=this.skipGapsTo(e,s,1),e+=s;let l=this.chunk.length;s=this.skipGapsTo(i,s,-1),i+=s,r+=this.chunk.length-l}let o=this.chunk.length-4;return this.lang.streamParser.mergeTokens&&r==4&&o>=0&&this.chunk[o]==t&&this.chunk[o+2]==e?this.chunk[o+2]=i:this.chunk.push(t,e,i,r),s}parseLine(t){let{line:e,end:i}=this.nextLine(),s=0,{streamParser:r}=this.lang,o=new Pn(e,t?t.state.tabSize:4,t?le(t.state):2);if(o.eol())r.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let l=Wa(r.token,o,this.state);if(l&&(s=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+o.start,this.parsedPos+o.pos,s)),o.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPost.start)return s}throw new Error("Stream parser failed to advance stream.")}var qr=Object.create(null),Ri=[ot.none],Ru=new En(Ri),Ta=[],Ea=Object.create(null),za=Object.create(null);for(let[n,t]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])za[n]=_a(qr,t);var Nn=class{constructor(t){this.extra=t,this.table=Object.assign(Object.create(null),za)}resolve(t){return t?this.table[t]||(this.table[t]=_a(this.extra,t)):0}},Pu=new Nn(qr);function Pr(n,t){Ta.indexOf(n)>-1||(Ta.push(n),console.warn(t))}function _a(n,t){let e=[];for(let l of t.split(" ")){let a=[];for(let h of l.split(".")){let f=n[h]||b[h];f?typeof f=="function"?a.length?a=a.map(f):Pr(h,`Modifier ${h} used at start of tag`):a.length?Pr(h,`Tag ${h} used as modifier`):a=Array.isArray(f)?f:[f]:Pr(h,`Unknown highlighting tag ${h}`)}for(let h of a)e.push(h)}if(!e.length)return 0;let i=t.replace(/ /g,"_"),s=i+" "+e.map(l=>l.id),r=Ea[s];if(r)return r.id;let o=Ea[s]=ot.define({id:Ri.length,name:i,props:[wa({[i]:e})]});return Ri.push(o),o.id}function Nu(n,t){let e=ot.define({id:Ri.length,name:"Document",props:[Xe.add(()=>n),Oa.add(()=>i=>t.getIndent(i))],top:!0});return Ri.push(e),e}var Wp={rtl:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:$.RTL}),ltr:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:$.LTR}),auto:z.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var Iu=n=>{let{state:t}=n,e=t.doc.lineAt(t.selection.main.from),i=Yr(n.state,e.from);return i.line?Hu(n):i.block?Vu(n):!1};function Jr(n,t){return({state:e,dispatch:i})=>{if(e.readOnly)return!1;let s=n(t,e);return s?(i(e.update(s)),!0):!1}}var Hu=Jr(_u,0);var Fu=Jr(Xa,0);var Vu=Jr((n,t)=>Xa(n,t,zu(t)),0);function Yr(n,t){let e=n.languageDataAt("commentTokens",t,1);return e.length?e[0]:{}}var Pi=50;function Wu(n,{open:t,close:e},i,s){let r=n.sliceDoc(i-Pi,i),o=n.sliceDoc(s,s+Pi),l=/\s*$/.exec(r)[0].length,a=/^\s*/.exec(o)[0].length,h=r.length-l;if(r.slice(h-t.length,h)==t&&o.slice(a,a+e.length)==e)return{open:{pos:i-l,margin:l&&1},close:{pos:s+a,margin:a&&1}};let f,c;s-i<=2*Pi?f=c=n.sliceDoc(i,s):(f=n.sliceDoc(i,i+Pi),c=n.sliceDoc(s-Pi,s));let u=/^\s*/.exec(f)[0].length,d=/\s*$/.exec(c)[0].length,p=c.length-d-e.length;return f.slice(u,u+t.length)==t&&c.slice(p,p+e.length)==e?{open:{pos:i+u+t.length,margin:/\s/.test(f.charAt(u+t.length))?1:0},close:{pos:s-d-e.length,margin:/\s/.test(c.charAt(p-1))?1:0}}:null}function zu(n){let t=[];for(let e of n.selection.ranges){let i=n.doc.lineAt(e.from),s=e.to<=i.to?i:n.doc.lineAt(e.to);s.from>i.from&&s.from==e.to&&(s=e.to==i.to+1?i:n.doc.lineAt(e.to-1));let r=t.length-1;r>=0&&t[r].to>i.from?t[r].to=s.to:t.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:s.to})}return t}function Xa(n,t,e=t.selection.ranges){let i=e.map(r=>Yr(t,r.from).block);if(!i.every(r=>r))return null;let s=e.map((r,o)=>Wu(t,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:t.changes(e.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;os&&(r==o||o>c.from)){s=c.from;let u=/^\s*/.exec(c.text)[0].length,d=u==c.length,p=c.text.slice(u,u+h.length)==h?u:-1;ur.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:l,token:a,indent:h,empty:f,single:c}of i)(c||!f)&&r.push({from:l.from+h,insert:a+" "});let o=t.changes(r);return{changes:o,selection:t.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,f=h+a.length;o.text[f-o.from]==" "&&f++,r.push({from:h,to:f})}return{changes:r}}return null}var Kr=mt.define(),qu=mt.define(),$u=M.define(),Qa=M.define({combine(n){return me(n,{minDepth:100,newGroupDelay:500,joinToEvent:(t,e)=>e},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(t,e)=>(i,s)=>t(i,s)||e(i,s)})}}),Za=Ct.define({create(){return Oe.empty},update(n,t){let e=t.state.facet(Qa),i=t.annotation(Kr);if(i){let a=Pt.fromTransaction(t,i.selection),h=i.side,f=h==0?n.undone:n.done;return a?f=Vn(f,f.length,e.minDepth,a):f=nh(f,t.startState.selection),new Oe(h==0?i.rest:f,h==0?f:i.rest)}let s=t.annotation(qu);if((s=="full"||s=="before")&&(n=n.isolate()),t.annotation(X.addToHistory)===!1)return t.changes.empty?n:n.addMapping(t.changes.desc);let r=Pt.fromTransaction(t),o=t.annotation(X.time),l=t.annotation(X.userEvent);return r?n=n.addChanges(r,o,l,e,t):t.selection&&(n=n.addSelection(t.startState.selection,o,l,e.newGroupDelay)),(s=="full"||s=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(t=>t.toJSON()),undone:n.undone.map(t=>t.toJSON())}},fromJSON(n){return new Oe(n.done.map(Pt.fromJSON),n.undone.map(Pt.fromJSON))}});function th(n={}){return[Za,Qa.of(n),E.domEventHandlers({beforeinput(t,e){let i=t.inputType=="historyUndo"?eh:t.inputType=="historyRedo"?Ur:null;return i?(t.preventDefault(),i(e)):!1}})]}function Wn(n,t){return function({state:e,dispatch:i}){if(!t&&e.readOnly)return!1;let s=e.field(Za,!1);if(!s)return!1;let r=s.pop(n,e,t);return r?(i(r),!0):!1}}var eh=Wn(0,!1),Ur=Wn(1,!1),Ku=Wn(0,!0),Uu=Wn(1,!0);var Pt=class n{constructor(t,e,i,s,r){this.changes=t,this.effects=e,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(t){return new n(this.changes,this.effects,this.mapped,this.startSelection,t)}toJSON(){var t,e,i;return{changes:(t=this.changes)===null||t===void 0?void 0:t.toJSON(),mapped:(e=this.mapped)===null||e===void 0?void 0:e.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(t){return new n(t.changes&&st.fromJSON(t.changes),[],t.mapped&&jt.fromJSON(t.mapped),t.startSelection&&w.fromJSON(t.startSelection),t.selectionsAfter.map(w.fromJSON))}static fromTransaction(t,e){let i=vt;for(let s of t.startState.facet($u)){let r=s(t);r.length&&(i=i.concat(r))}return!i.length&&t.changes.empty?null:new n(t.changes.invert(t.startState.doc),i,void 0,e||t.startState.selection,vt)}static selection(t){return new n(void 0,vt,void 0,void 0,t)}};function Vn(n,t,e,i){let s=t+1>e+20?t-e-1:0,r=n.slice(s,t);return r.push(i),r}function ju(n,t){let e=[],i=!1;return n.iterChangedRanges((s,r)=>e.push(s,r)),t.iterChangedRanges((s,r,o,l)=>{for(let a=0;a=h&&o<=f&&(i=!0)}}),i}function Gu(n,t){return n.ranges.length==t.ranges.length&&n.ranges.filter((e,i)=>e.empty!=t.ranges[i].empty).length===0}function ih(n,t){return n.length?t.length?n.concat(t):n:t}var vt=[],Ju=200;function nh(n,t){if(n.length){let e=n[n.length-1],i=e.selectionsAfter.slice(Math.max(0,e.selectionsAfter.length-Ju));return i.length&&i[i.length-1].eq(t)?n:(i.push(t),Vn(n,n.length-1,1e9,e.setSelAfter(i)))}else return[Pt.selection([t])]}function Yu(n){let t=n[n.length-1],e=n.slice();return e[n.length-1]=t.setSelAfter(t.selectionsAfter.slice(0,t.selectionsAfter.length-1)),e}function $r(n,t){if(!n.length)return n;let e=n.length,i=vt;for(;e;){let s=Xu(n[e-1],t,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,e);return r[e-1]=s,r}else t=s.mapped,e--,i=s.selectionsAfter}return i.length?[Pt.selection(i)]:vt}function Xu(n,t,e){let i=ih(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(t)):vt,e);if(!n.changes)return Pt.selection(i);let s=n.changes.map(t),r=t.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new Pt(s,U.mapEffects(n.effects,t),o,n.startSelection.map(r),i)}var Qu=/^(input\.type|delete)($|\.)/,Oe=class n{constructor(t,e,i=0,s=void 0){this.done=t,this.undone=e,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new n(this.done,this.undone):this}addChanges(t,e,i,s,r){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&t.changes&&(!i||Qu.test(i))&&(!l.selectionsAfter.length&&e-this.prevTime0&&e-this.prevTimee.empty?n.moveByChar(e,t):zn(e,t))}function it(n){return n.textDirectionAt(n.state.selection.main.head)==$.LTR}var oh=n=>rh(n,!it(n)),lh=n=>rh(n,it(n));function ah(n,t){return It(n,e=>e.empty?n.moveByGroup(e,t):zn(e,t))}var Zu=n=>ah(n,!it(n)),td=n=>ah(n,it(n));var Jp=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function ed(n,t,e){if(t.type.prop(e))return!0;let i=t.to-t.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(t.from,t.to)))||t.firstChild}function _n(n,t,e){let i=Rt(n).resolveInner(t.head),s=e?O.closedBy:O.openedBy;for(let a=t.head;;){let h=e?i.childAfter(a):i.childBefore(a);if(!h)break;ed(n,h,s)?i=h:a=e?h.to:h.from}let r=i.type.prop(s),o,l;return r&&(o=e?Lt(n,i.from,1):Lt(n,i.to,-1))&&o.matched?l=e?o.end.to:o.end.from:l=e?i.to:i.from,w.cursor(l,e?-1:1)}var id=n=>It(n,t=>_n(n.state,t,!it(n))),nd=n=>It(n,t=>_n(n.state,t,it(n)));function hh(n,t){return It(n,e=>{if(!e.empty)return zn(e,t);let i=n.moveVertically(e,t);return i.head!=e.head?i:n.moveToLineBoundary(e,t)})}var fh=n=>hh(n,!1),ch=n=>hh(n,!0);function uh(n){let t=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,t,e.height):zn(o,t));if(s.eq(i.selection))return!1;let r;if(e.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+e.marginTop,h=l.bottom-e.marginBottom;o&&o.top>a&&o.bottomdh(n,!1),jr=n=>dh(n,!0);function ae(n,t,e){let i=n.lineBlockAt(t.head),s=n.moveToLineBoundary(t,e);if(s.head==t.head&&s.head!=(e?i.to:i.from)&&(s=n.moveToLineBoundary(t,e,!1)),!e&&s.head==i.from&&i.length){let r=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&t.head!=i.from+r&&(s=w.cursor(i.from+r))}return s}var sd=n=>It(n,t=>ae(n,t,!0)),rd=n=>It(n,t=>ae(n,t,!1)),od=n=>It(n,t=>ae(n,t,!it(n))),ld=n=>It(n,t=>ae(n,t,it(n))),ad=n=>It(n,t=>w.cursor(n.lineBlockAt(t.head).from,1)),hd=n=>It(n,t=>w.cursor(n.lineBlockAt(t.head).to,-1));function fd(n,t,e){let i=!1,s=ii(n.selection,r=>{let o=Lt(n,r.head,-1)||Lt(n,r.head,1)||r.head>0&&Lt(n,r.head-1,1)||r.headfd(n,t,!1);function kt(n,t){let e=ii(n.state.selection,i=>{let s=t(i);return w.range(i.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return e.eq(n.state.selection)?!1:(n.dispatch(Nt(n.state,e)),!0)}function ph(n,t){return kt(n,e=>n.moveByChar(e,t))}var gh=n=>ph(n,!it(n)),mh=n=>ph(n,it(n));function bh(n,t){return kt(n,e=>n.moveByGroup(e,t))}var ud=n=>bh(n,!it(n)),dd=n=>bh(n,it(n));var pd=n=>kt(n,t=>_n(n.state,t,!it(n))),gd=n=>kt(n,t=>_n(n.state,t,it(n)));function yh(n,t){return kt(n,e=>n.moveVertically(e,t))}var wh=n=>yh(n,!1),xh=n=>yh(n,!0);function vh(n,t){return kt(n,e=>n.moveVertically(e,t,uh(n).height))}var $a=n=>vh(n,!1),Ka=n=>vh(n,!0),md=n=>kt(n,t=>ae(n,t,!0)),bd=n=>kt(n,t=>ae(n,t,!1)),yd=n=>kt(n,t=>ae(n,t,!it(n))),wd=n=>kt(n,t=>ae(n,t,it(n))),xd=n=>kt(n,t=>w.cursor(n.lineBlockAt(t.head).from)),vd=n=>kt(n,t=>w.cursor(n.lineBlockAt(t.head).to)),Ua=({state:n,dispatch:t})=>(t(Nt(n,{anchor:0})),!0),ja=({state:n,dispatch:t})=>(t(Nt(n,{anchor:n.doc.length})),!0),Ga=({state:n,dispatch:t})=>(t(Nt(n,{anchor:n.selection.main.anchor,head:0})),!0),Ja=({state:n,dispatch:t})=>(t(Nt(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),kd=({state:n,dispatch:t})=>(t(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),Sd=({state:n,dispatch:t})=>{let e=qn(n).map(({from:i,to:s})=>w.range(i,Math.min(s+1,n.doc.length)));return t(n.update({selection:w.create(e),userEvent:"select"})),!0},Cd=({state:n,dispatch:t})=>{let e=ii(n.selection,i=>{let s=Rt(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return w.range(l.to,l.from)}return i});return e.eq(n.selection)?!1:(t(Nt(n,e)),!0)};function kh(n,t){let{state:e}=n,i=e.selection,s=e.selection.ranges.slice();for(let r of e.selection.ranges){let o=e.doc.lineAt(r.head);if(t?o.to0)for(let l=r;;){let a=n.moveVertically(l,t);if(a.heado.to){s.some(h=>h.head==a.head)||s.push(a);break}else{if(a.head==l.head)break;l=a}}}return s.length==i.ranges.length?!1:(n.dispatch(Nt(e,w.create(s,s.length-1))),!0)}var Ad=n=>kh(n,!1),Md=n=>kh(n,!0),Td=({state:n,dispatch:t})=>{let e=n.selection,i=null;return e.ranges.length>1?i=w.create([e.main]):e.main.empty||(i=w.create([w.cursor(e.main.head)])),i?(t(Nt(n,i)),!0):!1};function Ni(n,t){if(n.state.readOnly)return!1;let e="delete.selection",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:l}=r;if(o==l){let a=t(r);ao&&(e="delete.forward",a=Fn(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=Fn(n,o,!1),l=Fn(n,l,!0);return o==l?{range:r}:{changes:{from:o,to:l},range:w.cursor(o,os(n)))i.between(t,t,(s,r)=>{st&&(t=e?r:s)});return t}var Sh=(n,t,e)=>Ni(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),l,a;if(e&&!t&&s>o.from&&sSh(n,!1,!0);var Ch=n=>Sh(n,!0,!1),Ah=(n,t)=>Ni(n,e=>{let i=e.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let l=null;;){if(i==(t?r.to:r.from)){i==e.head&&r.number!=(t?s.doc.lines:1)&&(i+=t?1:-1);break}let a=Q(r.text,i-r.from,t)+r.from,h=r.text.slice(Math.min(i,a)-r.from,Math.max(i,a)-r.from),f=o(h);if(l!=null&&f!=l)break;(h!=" "||i!=e.head)&&(l=f),i=a}return i}),Mh=n=>Ah(n,!1),Ed=n=>Ah(n,!0);var Dd=n=>Ni(n,t=>{let e=n.lineBlockAt(t.head).to;return t.headNi(n,t=>{let e=n.moveToLineBoundary(t,!1).head;return t.head>e?e:Math.max(0,t.head-1)}),Bd=n=>Ni(n,t=>{let e=n.moveToLineBoundary(t,!0).head;return t.head{if(n.readOnly)return!1;let e=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:R.of(["",""])},range:w.cursor(i.from)}));return t(n.update(e,{scrollIntoView:!0,userEvent:"input"})),!0},Rd=({state:n,dispatch:t})=>{if(n.readOnly)return!1;let e=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:Q(r.text,s-r.from,!1)+r.from,l=s==r.to?s+1:Q(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:l,insert:n.doc.slice(s,l).append(n.doc.slice(o,s))},range:w.cursor(l)}});return e.changes.empty?!1:(t(n.update(e,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function qn(n){let t=[],e=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),e>=s.number){let o=t[t.length-1];o.to=r.to,o.ranges.push(i)}else t.push({from:s.from,to:r.to,ranges:[i]});e=r.number+1}return t}function Th(n,t,e){if(n.readOnly)return!1;let i=[],s=[];for(let r of qn(n)){if(e?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(e?r.to+1:r.from-1),l=o.length+1;if(e){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let a of r.ranges)s.push(w.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let a of r.ranges)s.push(w.range(a.anchor-l,a.head-l))}}return i.length?(t(n.update({changes:i,scrollIntoView:!0,selection:w.create(s,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}var Pd=({state:n,dispatch:t})=>Th(n,t,!1),Nd=({state:n,dispatch:t})=>Th(n,t,!0);function Eh(n,t,e){if(n.readOnly)return!1;let i=[];for(let r of qn(n))e?i.push({from:r.from,insert:n.doc.slice(r.from,r.to)+n.lineBreak}):i.push({from:r.to,insert:n.lineBreak+n.doc.slice(r.from,r.to)});let s=n.changes(i);return t(n.update({changes:s,selection:n.selection.map(s,e?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var Id=({state:n,dispatch:t})=>Eh(n,t,!1),Hd=({state:n,dispatch:t})=>Eh(n,t,!0),Fd=n=>{if(n.state.readOnly)return!1;let{state:t}=n,e=t.changes(qn(t).map(({from:s,to:r})=>(s>0?s--:r{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),l=n.coordsAtPos(s.head,s.assoc||1);l&&(r=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(e);return n.dispatch({changes:e,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function Vd(n,t){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(t-1,t+1)))return{from:t,to:t};let e=Rt(n).resolveInner(t),i=e.childBefore(t),s=e.childAfter(t),r;return i&&s&&i.to<=t&&s.from>=t&&(r=i.type.prop(O.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}var Ya=Dh(!1),Wd=Dh(!0);function Dh(n){return({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=t.changeByRange(s=>{let{from:r,to:o}=s,l=t.doc.lineAt(r),a=!n&&r==o&&Vd(t,r);n&&(r=o=(o<=l.to?l:t.doc.lineAt(o)).to);let h=new De(t,{simulateBreak:r,simulateDoubleBreak:!!a}),f=In(h,r);for(f==null&&(f=be(/^\s*/.exec(t.doc.lineAt(r).text)[0],t.tabSize));ol.from&&r{let s=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>e&&(i.empty||i.to>l.from)&&(t(l,s,i),e=l.number),o=l.to+1}let r=n.changes(s);return{changes:s,range:w.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}var zd=({state:n,dispatch:t})=>{if(n.readOnly)return!1;let e=Object.create(null),i=new De(n,{overrideIndentation:r=>{let o=e[r];return o??-1}}),s=Xr(n,(r,o,l)=>{let a=In(i,r.from);if(a==null)return;/\S/.test(r.text)||(a=0);let h=/^\s*/.exec(r.text)[0],f=ei(n,a);(h!=f||l.fromn.readOnly?!1:(t(n.update(Xr(n,(e,i)=>{i.push({from:e.from,insert:n.facet(ti)})}),{userEvent:"input.indent"})),!0),Bh=({state:n,dispatch:t})=>n.readOnly?!1:(t(n.update(Xr(n,(e,i)=>{let s=/^\s*/.exec(e.text)[0];if(!s)return;let r=be(s,n.tabSize),o=0,l=ei(n,Math.max(0,r-le(n)));for(;o(n.setTabFocusMode(),!0);var qd=[{key:"Ctrl-b",run:oh,shift:gh,preventDefault:!0},{key:"Ctrl-f",run:lh,shift:mh},{key:"Ctrl-p",run:fh,shift:wh},{key:"Ctrl-n",run:ch,shift:xh},{key:"Ctrl-a",run:ad,shift:xd},{key:"Ctrl-e",run:hd,shift:vd},{key:"Ctrl-d",run:Ch},{key:"Ctrl-h",run:Gr},{key:"Ctrl-k",run:Dd},{key:"Ctrl-Alt-h",run:Mh},{key:"Ctrl-o",run:Ld},{key:"Ctrl-t",run:Rd},{key:"Ctrl-v",run:jr}],$d=[{key:"ArrowLeft",run:oh,shift:gh,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:Zu,shift:ud,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:od,shift:yd,preventDefault:!0},{key:"ArrowRight",run:lh,shift:mh,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:td,shift:dd,preventDefault:!0},{mac:"Cmd-ArrowRight",run:ld,shift:wd,preventDefault:!0},{key:"ArrowUp",run:fh,shift:wh,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Ua,shift:Ga},{mac:"Ctrl-ArrowUp",run:qa,shift:$a},{key:"ArrowDown",run:ch,shift:xh,preventDefault:!0},{mac:"Cmd-ArrowDown",run:ja,shift:Ja},{mac:"Ctrl-ArrowDown",run:jr,shift:Ka},{key:"PageUp",run:qa,shift:$a},{key:"PageDown",run:jr,shift:Ka},{key:"Home",run:rd,shift:bd,preventDefault:!0},{key:"Mod-Home",run:Ua,shift:Ga},{key:"End",run:sd,shift:md,preventDefault:!0},{key:"Mod-End",run:ja,shift:Ja},{key:"Enter",run:Ya,shift:Ya},{key:"Mod-a",run:kd},{key:"Backspace",run:Gr,shift:Gr,preventDefault:!0},{key:"Delete",run:Ch,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Mh,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:Ed,preventDefault:!0},{mac:"Mod-Backspace",run:Od,preventDefault:!0},{mac:"Mod-Delete",run:Bd,preventDefault:!0}].concat(qd.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),Lh=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:id,shift:pd},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:nd,shift:gd},{key:"Alt-ArrowUp",run:Pd},{key:"Shift-Alt-ArrowUp",run:Id},{key:"Alt-ArrowDown",run:Nd},{key:"Shift-Alt-ArrowDown",run:Hd},{key:"Mod-Alt-ArrowUp",run:Ad},{key:"Mod-Alt-ArrowDown",run:Md},{key:"Escape",run:Td},{key:"Mod-Enter",run:Wd},{key:"Alt-l",mac:"Ctrl-l",run:Sd},{key:"Mod-i",run:Cd,preventDefault:!0},{key:"Mod-[",run:Bh},{key:"Mod-]",run:Oh},{key:"Mod-Alt-\\",run:zd},{key:"Shift-Mod-k",run:Fd},{key:"Shift-Mod-\\",run:cd},{key:"Mod-/",run:Iu},{key:"Alt-A",run:Fu},{key:"Ctrl-m",mac:"Shift-Alt-m",run:_d}].concat($d),Rh={key:"Tab",run:Oh,shift:Bh};var Kd={break:!0,case:!0,chan:!0,const:!0,continue:!0,default:!0,defer:!0,else:!0,fallthrough:!0,for:!0,func:!0,go:!0,goto:!0,if:!0,import:!0,interface:!0,map:!0,package:!0,range:!0,return:!0,select:!0,struct:!0,switch:!0,type:!0,var:!0,bool:!0,byte:!0,complex64:!0,complex128:!0,float32:!0,float64:!0,int8:!0,int16:!0,int32:!0,int64:!0,string:!0,uint8:!0,uint16:!0,uint32:!0,uint64:!0,int:!0,uint:!0,uintptr:!0,error:!0,rune:!0,any:!0,comparable:!0},Ud={true:!0,false:!0,iota:!0,nil:!0,append:!0,cap:!0,close:!0,complex:!0,copy:!0,delete:!0,imag:!0,len:!0,make:!0,new:!0,panic:!0,print:!0,println:!0,real:!0,recover:!0},Ph=/[+\-*&^%:=<>!|\/]/,Qt;function $n(n,t){var e=n.next();if(e=='"'||e=="'"||e=="`")return t.tokenize=jd(e),t.tokenize(n,t);if(/[\d\.]/.test(e))return e=="."?n.match(/^[0-9]+([eE][\-+]?[0-9]+)?/):e=="0"?n.match(/^[xX][0-9a-fA-F]+/)||n.match(/^0[0-7]+/):n.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/),"number";if(/[\[\]{}\(\),;\:\.]/.test(e))return Qt=e,null;if(e=="/"){if(n.eat("*"))return t.tokenize=Nh,Nh(n,t);if(n.eat("/"))return n.skipToEnd(),"comment"}if(Ph.test(e))return n.eatWhile(Ph),"operator";n.eatWhile(/[\w\$_\xa1-\uffff]/);var i=n.current();return Kd.propertyIsEnumerable(i)?((i=="case"||i=="default")&&(Qt="case"),"keyword"):Ud.propertyIsEnumerable(i)?"atom":"variable"}function jd(n){return function(t,e){for(var i=!1,s,r=!1;(s=t.next())!=null;){if(s==n&&!i){r=!0;break}i=!i&&n!="`"&&s=="\\"}return(r||!(i||n=="`"))&&(e.tokenize=$n),"string"}}function Nh(n,t){for(var e=!1,i;i=n.next();){if(i=="/"&&e){t.tokenize=$n;break}e=i=="*"}return"comment"}function Hh(n,t,e,i,s){this.indented=n,this.column=t,this.type=e,this.align=i,this.prev=s}function Qr(n,t,e){return n.context=new Hh(n.indented,t,e,null,n.context)}function Ih(n){if(n.context.prev){var t=n.context.type;return(t==")"||t=="]"||t=="}")&&(n.indented=n.context.indented),n.context=n.context.prev}}var Fh={name:"go",startState:function(n){return{tokenize:null,context:new Hh(-n,0,"top",!1),indented:0,startOfLine:!0}},token:function(n,t){var e=t.context;if(n.sol()&&(e.align==null&&(e.align=!1),t.indented=n.indentation(),t.startOfLine=!0,e.type=="case"&&(e.type="}")),n.eatSpace())return null;Qt=null;var i=(t.tokenize||$n)(n,t);return i=="comment"||(e.align==null&&(e.align=!0),Qt=="{"?Qr(t,n.column(),"}"):Qt=="["?Qr(t,n.column(),"]"):Qt=="("?Qr(t,n.column(),")"):Qt=="case"?e.type="case":(Qt=="}"&&e.type=="}"||Qt==e.type)&&Ih(t),t.startOfLine=!1),i},indent:function(n,t,e){if(n.tokenize!=$n&&n.tokenize!=null)return null;var i=n.context,s=t&&t.charAt(0);if(i.type=="case"&&/^(?:case|default)\b/.test(t))return i.indented;var r=s==i.type;return i.align?i.column+(r?0:1):i.indented+(r?0:e.unit)},languageData:{indentOnInput:/^\s([{}]|case |default\s*:)$/,commentTokens:{line:"//",block:{open:"/*",close:"*/"}}}};var Vh={name:"toml",startState:function(){return{inString:!1,stringType:"",lhs:!0,inArray:0}},token:function(n,t){let e;if(!t.inString&&(e=n.match(/^('''|"""|'|")/))&&(t.stringType=e[0],t.inString=!0),n.sol()&&!t.inString&&t.inArray===0&&(t.lhs=!0),t.inString){for(;t.inString;)if(n.match(t.stringType))t.inString=!1;else if(n.peek()==="\\")n.next(),n.next();else{if(n.eol())break;n.match(/^.[^\\\"\']*/)}return t.lhs?"property":"string"}else{if(t.inArray&&n.peek()==="]")return n.next(),t.inArray--,"bracket";if(t.lhs&&n.peek()==="["&&n.skipTo("]"))return n.next(),n.peek()==="]"&&n.next(),"atom";if(n.peek()==="#")return n.skipToEnd(),"comment";if(n.eatSpace())return null;if(t.lhs&&n.eatWhile(function(i){return i!="="&&i!=" "}))return"property";if(t.lhs&&n.peek()==="=")return n.next(),t.lhs=!1,null;if(!t.lhs&&n.match(/^\d\d\d\d[\d\-\:\.T]*Z/))return"atom";if(!t.lhs&&(n.match("true")||n.match("false")))return"atom";if(!t.lhs&&n.peek()==="[")return t.inArray++,n.next(),"bracket";if(!t.lhs&&n.match(/^\-?\d+(?:\.\d+)?/))return"number";n.eatSpace()||n.next()}return null},languageData:{commentTokens:{line:"#"}}};var Gd="#e5c07b",Wh="#e06c75",Jd="#56b6c2",Yd="#ffffff",Kn="#abb2bf",to="#7d8799",Xd="#61afef",Qd="#98c379",zh="#d19a66",Zd="#c678dd",tp="#21252b",_h="#2c313a",qh="#282c34",Zr="#353a42",ep="#3E4451",$h="#528bff";var ip=E.theme({"&":{color:Kn,backgroundColor:qh},".cm-content":{caretColor:$h},".cm-cursor, .cm-dropCursor":{borderLeftColor:$h},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:ep},".cm-panels":{backgroundColor:tp,color:Kn},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:qh,color:to,border:"none"},".cm-activeLineGutter":{backgroundColor:_h},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Zr},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Zr,borderBottomColor:Zr},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:_h,color:Kn}}},{dark:!0}),np=Ze.define([{tag:b.keyword,color:Zd},{tag:[b.name,b.deleted,b.character,b.propertyName,b.macroName],color:Wh},{tag:[b.function(b.variableName),b.labelName],color:Xd},{tag:[b.color,b.constant(b.name),b.standard(b.name)],color:zh},{tag:[b.definition(b.name),b.separator],color:Kn},{tag:[b.typeName,b.className,b.number,b.changed,b.annotation,b.modifier,b.self,b.namespace],color:Gd},{tag:[b.operator,b.operatorKeyword,b.url,b.escape,b.regexp,b.link,b.special(b.string)],color:Jd},{tag:[b.meta,b.comment],color:to},{tag:b.strong,fontWeight:"bold"},{tag:b.emphasis,fontStyle:"italic"},{tag:b.strikethrough,textDecoration:"line-through"},{tag:b.link,color:to,textDecoration:"underline"},{tag:b.heading,fontWeight:"bold",color:Wh},{tag:[b.atom,b.bool,b.special(b.variableName)],color:zh},{tag:[b.processingInstruction,b.string,b.inserted],color:Qd},{tag:b.invalid,color:Yd}]),Kh=[ip,Hn(np)];var sp=Li.define(Fh),rp=Li.define(Vh);function Uh(n){return n.endsWith(".toml")?rp:sp}function jh(n){return n?Kh:Hn(Pa,{fallback:!0})}function eo(){return document.documentElement.getAttribute("data-theme")==="dark"}var Un=class{view;langCompartment=new pe;themeCompartment=new pe;constructor(t){let e=[fa(),ha(),ca(),la(),th(),La(),ti.of(" "),Fa(),this.langCompartment.of(Uh(t.fileName)),this.themeCompartment.of(jh(t.isDarkMode))];if(t.onRun){let i=t.onRun;e.push(An.of([{key:"Mod-Enter",preventDefault:!0,run:()=>(i(),!0)}]))}e.push(An.of([Rh,...sh,...Lh])),this.view=new E({parent:t.parent,state:K.create({doc:t.content,extensions:e})})}getCode(){return this.view.state.doc.toString()}setCode(t){this.view.dispatch({changes:{from:0,to:this.view.state.doc.length,insert:t}})}setLanguage(t){this.view.dispatch({effects:this.langCompartment.reconfigure(Uh(t))})}changeTheme(t){this.view.dispatch({effects:this.themeCompartment.reconfigure(jh(t))})}focus(){this.view.focus()}};function Gh(n){return n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function io(n){return n=n.replace(/-([a-z])/g,(t,e)=>e.toUpperCase()),n.charAt(0).toLowerCase()+n.slice(1)}function jn(n,t){return n.matches(t)?n:n.querySelector(t)}function no(n,t){let e=[];return n.matches(t)&&e.push(n),e.push(...Array.from(n.querySelectorAll(t))),e}function Jh(n){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.classList.add("c-icon");let e=document.createElementNS("http://www.w3.org/2000/svg","use");return e.setAttribute("href",`#ico-${n}`),t.appendChild(e),t}function so(){let n=Jh("copy");n.querySelector("use")?.setAttribute("data-copy-target","icon");let t=document.createElementNS("http://www.w3.org/2000/svg","use");return t.setAttribute("href","#ico-check"),t.setAttribute("data-copy-target","icon"),t.classList.add("u-hidden","u-color-valid"),n.appendChild(t),n}var Gn=class{element;initialized=!1;DOM={};controllerName;controllerKebabName;constructor(t){this.element=t,this.controllerName=io(this.getControllerName()),this.controllerKebabName=Gh(this.controllerName),this.init()}init(){this.initialized||(this.connect(),this.setupActions(),this.initialized=!0)}initializeDOM(t){return this.DOM={el:this.element,...t},t}getDOMElement(t){return Array.isArray(this.DOM[t])?this.DOM[t][0]:this.DOM[t]}getDOMArray(t){let e=this.DOM[t];return e?Array.isArray(e)?e:[e]:[]}getTarget(t,e){let i=e||this.element,s=`[data-${this.controllerKebabName}-target="${t}"]`;return jn(i,s)}getTargets(t,e){let i=e||this.element;return no(i,`[data-${this.controllerKebabName}-target="${t}"]`)}getGlobalTarget(t){return document.querySelector(`[data-${this.controllerKebabName}-target="${t}"]`)}setupActions(){no(this.element,"[data-action]").forEach(e=>{let i=e.getAttribute("data-action");if(i){let[s,r]=i.split("->"),[o,l]=r.split("#");if(o===this.controllerKebabName){let a=this[l];typeof a=="function"&&e.addEventListener(s,h=>{let f=this.extractActionParams(e);h.params=f,a.call(this,h)})}}})}extractActionParams(t){let e={};for(let[i,s]of Object.entries(t.dataset))if(i.startsWith(this.controllerName)&&i.endsWith("Param")){let r=io(i.slice(this.controllerName.length,-5));e[r]=this.parseParamValue(s)}return e}parseParamValue(t){if(t==null||t.trim()==="")return"";let e=t.trim();if(/^(true|false)$/i.test(e))return e.toLowerCase()==="true";if(/^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(e)){let i=Number(e);if(!Number.isNaN(i)&&Number.isFinite(i))return i}if(/^(null|undefined)$/i.test(e))return e.toLowerCase()==="null"?null:void 0;if(/^[{[]/.test(e)||/^".*"$/.test(e))try{return JSON.parse(e)}catch{}return t}getValue(t,e){let i=`data-${this.controllerKebabName}-${t}-value`,s=e||this.element,r=jn(s,`[${i}]`);return r&&r.getAttribute(i)||""}setValue(t,e,i){let s=`data-${this.controllerKebabName}-${t}-value`;(i||this.element).setAttribute(s,e)}hasValue(t,e){let i=`data-${this.controllerKebabName}-${t}-value`,s=e||this.element;return jn(s,`[${i}]`)!==null}on(t,e){document.addEventListener(t,e)}dispatch(t,e={}){let i=new CustomEvent(t,{detail:e,bubbles:!0});document.dispatchEvent(i)}getControllerName(){let t=this.element.getAttribute("data-controller");return t||this.constructor.name.replace(/^_/,"").replace(/Controller$/,"")}};var Yh="gnomod.toml",op=`package main `,lp=8e3,Xh=class extends Gn{connect(){let t=this.getTarget("initial-code");this.files=[],this.activeFile=0,this.editorEl=this.getTarget("editor"),this.outputEl=this.getTarget("output"),this.tabsEl=this.getTarget("tabs"),this.tabsWrapEl=this.getTarget("tabs-wrap"),this.prevBtnEl=this.getTarget("prev-button"),this.nextBtnEl=this.getTarget("next-button"),!(!this.editorEl||!this.outputEl||!this.tabsEl||!t)&&(this.editorEl.addEventListener("focusin",()=>this._scrollActiveTabIntoView()),this._parseInitialCode(t.value),this.editor=new Un({parent:this.editorEl,content:this.files[0].content,fileName:this.files[0].name,isDarkMode:eo(),onRun:()=>this.runCode()}),this.on("theme:changed",()=>{this.editor.changeTheme(eo())}),this._switchToDefaultFile(),this._setupTabsScroll(),this.renderTabs(),this.clearOutput())}_setupTabsScroll(){if(!this.tabsWrapEl||!this.prevBtnEl||!this.nextBtnEl)return;this.tabsEl.addEventListener("scroll",()=>this._updateNavButtons(),{passive:!0});let t=new ResizeObserver(()=>this._updateNavButtons());t.observe(this.tabsWrapEl),t.observe(this.tabsEl)}_updateNavButtons(){if(!this.tabsWrapEl||!this.prevBtnEl||!this.nextBtnEl)return;let t=this.tabsEl.scrollWidth>this.tabsWrapEl.clientWidth+1;if(this.prevBtnEl.hidden=!t,this.nextBtnEl.hidden=!t,!t)return;let{scrollLeft:e,scrollWidth:i,clientWidth:s}=this.tabsEl;this.prevBtnEl.disabled=e<=0,this.nextBtnEl.disabled=e+s>=i-1}_scrollByPage(t){let e=Math.max(this.tabsEl.clientWidth*.7,80);this.tabsEl.scrollBy({left:t*e,behavior:"smooth"})}_scrollActiveTabIntoView(){let t=this.tabsEl.querySelector(".b-playground-tab--active");t&&t.scrollIntoView({inline:"nearest",block:"nearest"})}scrollTabsPrev(){this._scrollByPage(-1)}scrollTabsNext(){this._scrollByPage(1)}_isValidFileName(t){return t.endsWith(".gno")||t===Yh}_parseInitialCode(t){if(t.includes("// --- ")&&t.includes(" ---")){let e=t.split(/^\/\/ --- (.+?) ---$/m);for(let i=1;icopy#copy"),o.setAttribute("data-copy-text-value",t),o.appendChild(so()),s.appendChild(o)}this.outputEl.appendChild(s),this.outputEl.scrollIntoView({behavior:"smooth",block:"nearest"})}_setErrorOutput(t){this._resetOutput(t,!1,!0)}_switchToFile(t){this.files[this.activeFile].content=this.editor.getCode();let e=this.files.findIndex(i=>i.name===t);return e>=0&&(this.activeFile=e,this.editor.setCode(this.files[e].content),this.editor.setLanguage(this.files[e].name),this.renderTabs()),e>=0}renderTabs(){for(;this.tabsEl.firstChild;)this.tabsEl.removeChild(this.tabsEl.firstChild);this.files.forEach((t,e)=>{let i=document.createElement("button");i.className=`b-playground-tab${e===this.activeFile?" b-playground-tab--active":""}`,i.textContent=t.name,i.addEventListener("click",()=>this._switchToFile(t.name)),this.tabsEl.appendChild(i)}),this._updateNavButtons(),this._scrollActiveTabIntoView()}switchTab(t){let e=t.params?.file;e&&this._switchToFile(e)}addFile(){let t=prompt("File name (e.g. main.gno or gnomod.toml):");if(t==null||this._switchToFile(t))return;if(!this._isValidFileName(t)){console.error(`PlaygroundController: invalid name, file not added: ${t}`);return}let e=op;t===Yh&&(e=`module = "${this.getValue("domain")||"gno.land"}/r/yourname/pkg" -gno = "0.9"`),this.files[this.activeFile].content=this.editor.getCode(),this.files.push({name:t,content:e}),this.activeFile=this.files.length-1,this.editor.setCode(this.files[this.activeFile].content),this.editor.setLanguage(this.files[this.activeFile].name),this.renderTabs()}async runCode(){this.files[this.activeFile].content=this.editor.getCode(),this._resetOutput("Running...");let t=this.editor.getCode(),e=t.match(/^package\s+(\w+)/m),i=e?e[1]:"main",s=this.getValue("domain")||"gno.land";if(t.includes("func Render("))try{let o=await(await fetch("/_/api/eval",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pkg_path:`${s}/r/playground_preview`,expression:'Render("")'})})).json();o.error?this._setErrorOutput(`Error: ${o.error}`):this._resetOutput(o.result)}catch{this._resetOutput(`Note: Server-side execution not available for scratch pad code. +gno = "0.9"`),this.files[this.activeFile].content=this.editor.getCode(),this.files.push({name:t,content:e}),this.activeFile=this.files.length-1,this.editor.setCode(this.files[this.activeFile].content),this.editor.setLanguage(this.files[this.activeFile].name),this.renderTabs()}async runCode(){this.files[this.activeFile].content=this.editor.getCode(),this._resetOutput("Running...");let t=this.editor.getCode(),e=t.match(/^package\s+(\w+)/m),i=e?e[1]:"main",s=this.getValue("domain")||"gno.land";if(t.includes("func Render("))try{let o=await(await fetch("/_/api/eval",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pkg_path:`${s}/r/playground_preview`,expression:'Render("")'})})).json();o.error?this._setErrorOutput(`Error: ${o.error}`):this._resetOutput(o.result)}catch{this._resetOutput(`Note: Server-side execution not available for scratchpad code. Package: ${i} Files: ${this.files.map(r=>r.name).join(", ")} From 870cc7ae41c58d4d56f9175b0d3db5983389312a Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Fri, 5 Jun 2026 19:15:06 +0200 Subject: [PATCH 10/13] feat: change fork view to return error page on files read failure --- .../pkg/gnoweb/feature/playground/handler.go | 15 +-- .../gnoweb/feature/playground/handler_test.go | 100 +++++++++++++++++- 2 files changed, 102 insertions(+), 13 deletions(-) diff --git a/gno.land/pkg/gnoweb/feature/playground/handler.go b/gno.land/pkg/gnoweb/feature/playground/handler.go index 995e8a62bcc..75873d0c1b2 100644 --- a/gno.land/pkg/gnoweb/feature/playground/handler.go +++ b/gno.land/pkg/gnoweb/feature/playground/handler.go @@ -61,18 +61,9 @@ func (h *Handler) GetForkView(ctx context.Context, u *weburl.GnoURL) (int, *comp pkgPath := u.Path files, err := h.deps.Client.ListFiles(ctx, pkgPath) if err != nil { - h.deps.Logger.Warn("unable to list files for fork", "path", pkgPath, "error", err) - - // Render the playground with default code rather than a hard error, - // so user can still write code from scratch. - return http.StatusOK, NewPageView(PlaygroundData{ - InitialCode: defaultCode, - ForkFrom: path.Join(h.deps.Domain, pkgPath), - Remote: h.deps.Remote, - ChainId: h.deps.ChainId, - Domain: h.deps.Domain, - DefaultFile: u.Query.Get("file"), - }) + msg := "unable to list files for fork" + h.deps.Logger.Warn(msg, "path", pkgPath, "error", err) + return http.StatusBadRequest, components.StatusErrorComponent(msg) } var allCode strings.Builder diff --git a/gno.land/pkg/gnoweb/feature/playground/handler_test.go b/gno.land/pkg/gnoweb/feature/playground/handler_test.go index b05b07063eb..cee40f1ee69 100644 --- a/gno.land/pkg/gnoweb/feature/playground/handler_test.go +++ b/gno.land/pkg/gnoweb/feature/playground/handler_test.go @@ -12,6 +12,8 @@ import ( "net/http" "net/http/httptest" "net/url" + "path" + "strings" "testing" "time" @@ -31,11 +33,12 @@ type stubClient struct { docResult *doc.JSONDocumentation docErr error files []string + filesErr error fileBodies map[string][]byte } func (s *stubClient) ListFiles(context.Context, string) ([]string, error) { - return s.files, nil + return s.files, s.filesErr } func (s *stubClient) File(_ context.Context, _, filename string) ([]byte, error) { @@ -287,6 +290,101 @@ func TestGetPlaygroundViewCode(t *testing.T) { }) } +func TestGetForkView(t *testing.T) { + t.Parallel() + + t.Run("multiple files concatenated with headers", func(t *testing.T) { + t.Parallel() + + deps := validDeps() + deps.Client = &stubClient{ + files: []string{"a.gno", "gnomod.toml"}, + fileBodies: map[string][]byte{ + "a.gno": []byte("package main\n"), + "gnomod.toml": []byte("module = \"main\"\n"), + }, + } + h := New(deps) + + status, v := h.GetForkView(context.Background(), &weburl.GnoURL{Path: "/r/demo/foo"}) + require.Equal(t, http.StatusOK, status) + + code := extractPlaygroundViewData(t, v).InitialCode + + // First header has no leading newline; the second one does + assert.True(t, strings.HasPrefix(code, "// --- a.gno ---\n\n"), "first header should not have a leading newline") + assert.Contains(t, code, "\n// --- gnomod.toml ---\n\n") + assert.Contains(t, code, "package main\n") + assert.Contains(t, code, "module = \"main\"\n") + + // a.gno appears before gnomod.toml (list order preserved) + assert.Less(t, strings.Index(code, "a.gno"), strings.Index(code, "gnomod.toml")) + }) + + t.Run("non-source files are filtered out", func(t *testing.T) { + t.Parallel() + + deps := validDeps() + deps.Client = &stubClient{ + files: []string{"a.gno", "image.png", "README.md", "gnomod.toml"}, + fileBodies: map[string][]byte{ + "a.gno": []byte("package main\n"), + "image.png": []byte("binary"), + "README.md": []byte("# readme"), + "gnomod.toml": []byte("module = \"main\"\n"), + }, + } + h := New(deps) + + status, v := h.GetForkView(context.Background(), &weburl.GnoURL{Path: "/r/demo/foo"}) + require.Equal(t, http.StatusOK, status) + + code := extractPlaygroundViewData(t, v).InitialCode + assert.Contains(t, code, "// --- a.gno ---") + assert.Contains(t, code, "// --- gnomod.toml ---") + assert.NotContains(t, code, "image.png") + assert.NotContains(t, code, "README.md") + }) + + t.Run("fail listing package files", func(t *testing.T) { + t.Parallel() + + deps := validDeps() + deps.Client = &stubClient{filesErr: errors.New("boom")} + h := New(deps) + + status, v := h.GetForkView(context.Background(), &weburl.GnoURL{Path: "/r/demo/foo"}) + assert.Equal(t, http.StatusBadRequest, status) + + // The error path returns a status error component, not a playground view + _, ok := v.Component.(*playgroundComponent) + assert.False(t, ok, "error path must not return a playground component") + }) + + t.Run("playground data fields are populated", func(t *testing.T) { + t.Parallel() + + deps := validDeps() + deps.Client = &stubClient{ + files: []string{"a.gno"}, + fileBodies: map[string][]byte{"a.gno": []byte("package main\n")}, + } + h := New(deps) + + pkgPath := "/r/demo/foo" + q := url.Values{"file": {"a.gno"}} + status, v := h.GetForkView(context.Background(), &weburl.GnoURL{Path: pkgPath, Query: q}) + require.Equal(t, http.StatusOK, status) + + data := extractPlaygroundViewData(t, v) + assert.Equal(t, path.Join(deps.Domain, pkgPath), data.ForkFrom) + assert.Equal(t, "a.gno", data.DefaultFile) + assert.Equal(t, deps.Remote, data.Remote) + assert.Equal(t, deps.ChainId, data.ChainId) + assert.Equal(t, deps.Domain, data.Domain) + }) +} + // TestDecodeCompressedCode unit-tests the bounded DEFLATE decoder directly. func TestDecodeCompressedCode(t *testing.T) { t.Parallel() From 167d64c26e1ac86272b1e4e4d31bbcfa0582023e Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Mon, 8 Jun 2026 11:25:23 +0200 Subject: [PATCH 11/13] feat: change fork view to fetch files async and limit size It limits the files fetched asynchronically, limits the total size of the compressed playground code and forked package size, to avoid memory exhaustion. --- .../pkg/gnoweb/feature/playground/handler.go | 98 ++++++++++++++++--- .../gnoweb/feature/playground/handler_test.go | 23 +++++ 2 files changed, 106 insertions(+), 15 deletions(-) diff --git a/gno.land/pkg/gnoweb/feature/playground/handler.go b/gno.land/pkg/gnoweb/feature/playground/handler.go index 75873d0c1b2..3e4e09386ee 100644 --- a/gno.land/pkg/gnoweb/feature/playground/handler.go +++ b/gno.land/pkg/gnoweb/feature/playground/handler.go @@ -6,27 +6,40 @@ import ( "context" "encoding/base64" "encoding/json" + "errors" "fmt" "io" "net/http" "path" "strings" + "sync/atomic" "time" "github.com/gnolang/gno/gno.land/pkg/gnoweb/components" "github.com/gnolang/gno/gno.land/pkg/gnoweb/weburl" + "golang.org/x/sync/errgroup" ) -// maxDecompressedCodeSize caps DEFLATE-decompressed shared code to guard -// against decompression bombs when ?code=...&z are present in query path. -const maxDecompressedCodeSize = 1 << 20 // 1 MiB +const ( + // maxDecompressedCodeSize caps DEFLATE-decompressed shared code to guard + // against decompression bombs when ?code=...&z are present in query path. + maxDecompressedCodeSize = 1 << 20 // 1 MiB -const defaultCode = `package main + // maxParallelFileFetches caps the number of client source files fetch requests. + maxParallelFileFetches = 8 + + // maxForkCodeSize caps the total fetched source bytes for a fork to guard + // against memory exhaustion from large or numerous on-chain package files. + maxForkCodeSize = 1 << 20 // 1 MiB + + // defaultCode defines the default code displayed in the code editor. + defaultCode = `package main func Render(path string) string { return "Hello, Playground!" } ` +) func (h *Handler) GetPlaygroundView(u *weburl.GnoURL) (int, *components.View) { // If available, read initial source code from a query argument @@ -57,6 +70,10 @@ func (h *Handler) GetPlaygroundView(u *weburl.GnoURL) (int, *components.View) { }) } +// errForkCodeTooLarge signals that the cumulative fetched fork source exceeded +// maxForkCodeSize and the fetch was aborted. +var errForkCodeTooLarge = errors.New("package source is too large to fork") + func (h *Handler) GetForkView(ctx context.Context, u *weburl.GnoURL) (int, *components.View) { pkgPath := u.Path files, err := h.deps.Client.ListFiles(ctx, pkgPath) @@ -66,27 +83,73 @@ func (h *Handler) GetForkView(ctx context.Context, u *weburl.GnoURL) (int, *comp return http.StatusBadRequest, components.StatusErrorComponent(msg) } - var allCode strings.Builder - for _, fileName := range files { - if !strings.HasSuffix(fileName, ".gno") && fileName != "gnomod.toml" { + // Fetch the source files in parallel, writing each into its own slot so + // the final order matches the order returned by ListFiles. + g, ctx := errgroup.WithContext(ctx) + g.SetLimit(maxParallelFileFetches) + + // Total bounds the cumulative fetched bytes, crossing maxForkCodeSize aborts + // the group, which cancels the remaining in-flight and queued fetches. + // Contents is initialized to the number of files. It can contain nils if some + // files are not source files. Done to keep file order during content concatenation. + var total atomic.Int64 + contents := make([][]byte, len(files)) + for i, fileanme := range files { + if !isSource(fileanme) { continue } - body, err := h.deps.Client.File(ctx, pkgPath, fileName) - if err != nil { + g.Go(func() error { + body, err := h.deps.Client.File(ctx, pkgPath, fileanme) + if err != nil { + return err + } + + if total.Add(int64(len(body))) > maxForkCodeSize { + return errForkCodeTooLarge + } + + contents[i] = body + return nil + }) + } + + if err := g.Wait(); err != nil { + if errors.Is(err, errForkCodeTooLarge) { + msg := err.Error() + h.deps.Logger.Warn(msg, "path", pkgPath, "limit", maxForkCodeSize) + return http.StatusRequestEntityTooLarge, components.StatusErrorComponent(msg) + } + + msg := "unable to fetch files for fork" + h.deps.Logger.Error(msg, "path", pkgPath, "error", err) + return http.StatusInternalServerError, components.StatusErrorComponent(msg) + } + + // Pre-size the builder so concatenation allocates a single buffer + // instead of growing per file. + var code strings.Builder + headerOverhead := len("\n// --- ") + len(" ---\n\n") + code.Grow(int(total.Load()) + len(files)*headerOverhead) + + // Concatenate the fetched files in the original ListFiles order + for i, fileanme := range files { + if !isSource(fileanme) { continue } - if allCode.Len() > 0 { - allCode.WriteString("\n// --- " + fileName + " ---\n\n") - } else { - allCode.WriteString("// --- " + fileName + " ---\n\n") + // First content line has no newline + if code.Len() > 0 { + code.WriteString("\n") } - allCode.Write(body) + + code.WriteString("// --- " + fileanme + " ---\n\n") + code.Write(contents[i]) + contents[i] = nil // release the body so it can be collected as we go } return http.StatusOK, NewPageView(PlaygroundData{ - InitialCode: allCode.String(), + InitialCode: code.String(), ForkFrom: path.Join(h.deps.Domain, pkgPath), Remote: h.deps.Remote, ChainId: h.deps.ChainId, @@ -227,6 +290,11 @@ func (h *Handler) serveFuncs(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, resp) } +// isSource reports whether a file is source code that can be displayed in the code editor. +func isSource(filename string) bool { + return strings.HasSuffix(filename, ".gno") || filename == "gnomod.toml" +} + func writeJSON(w http.ResponseWriter, status int, v any) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) diff --git a/gno.land/pkg/gnoweb/feature/playground/handler_test.go b/gno.land/pkg/gnoweb/feature/playground/handler_test.go index cee40f1ee69..48409bba882 100644 --- a/gno.land/pkg/gnoweb/feature/playground/handler_test.go +++ b/gno.land/pkg/gnoweb/feature/playground/handler_test.go @@ -346,6 +346,29 @@ func TestGetForkView(t *testing.T) { assert.NotContains(t, code, "README.md") }) + t.Run("oversized source is rejected", func(t *testing.T) { + t.Parallel() + + // Two files whose combined size exceeds maxForkCodeSize. + big := bytes.Repeat([]byte("x"), maxForkCodeSize) + deps := validDeps() + deps.Client = &stubClient{ + files: []string{"a.gno", "b.gno"}, + fileBodies: map[string][]byte{ + "a.gno": big, + "b.gno": []byte("package main\n"), + }, + } + h := New(deps) + + status, v := h.GetForkView(context.Background(), &weburl.GnoURL{Path: "/r/demo/foo"}) + assert.Equal(t, http.StatusRequestEntityTooLarge, status) + + // The error path returns a status error component, not a playground view + _, ok := v.Component.(*playgroundComponent) + assert.False(t, ok, "oversized path must not return a playground component") + }) + t.Run("fail listing package files", func(t *testing.T) { t.Parallel() From 96820086a8499615465b0fa7b6f8fcca9256192e Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Mon, 8 Jun 2026 12:34:23 +0200 Subject: [PATCH 12/13] chore: remove template name when parsing --- gno.land/pkg/gnoweb/feature/playground/template.go | 6 +++--- gno.land/pkg/gnoweb/feature/run/template.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gno.land/pkg/gnoweb/feature/playground/template.go b/gno.land/pkg/gnoweb/feature/playground/template.go index ce380ce3313..44327519cfb 100644 --- a/gno.land/pkg/gnoweb/feature/playground/template.go +++ b/gno.land/pkg/gnoweb/feature/playground/template.go @@ -11,10 +11,10 @@ var templateFS embed.FS // PageTemplate is the standalone playground page. Pre-parsed at init // so a misconfigured template surfaces immediately, not on the first // request. -var PageTemplate = mustParse("renderPage", "templates/page.html") +var PageTemplate = mustParse("templates/page.html") -func mustParse(name string, paths ...string) *template.Template { - t, err := template.New(name).ParseFS(templateFS, paths...) +func mustParse(paths ...string) *template.Template { + t, err := template.New("").ParseFS(templateFS, paths...) if err != nil { panic("playground: parse " + paths[0] + ": " + err.Error()) } diff --git a/gno.land/pkg/gnoweb/feature/run/template.go b/gno.land/pkg/gnoweb/feature/run/template.go index 64c1091f8d5..185ea2291dd 100644 --- a/gno.land/pkg/gnoweb/feature/run/template.go +++ b/gno.land/pkg/gnoweb/feature/run/template.go @@ -12,10 +12,10 @@ var templateFS embed.FS // PageTemplate is the run scratchpad page. Pre-parsed at init so a // misconfigured template surfaces immediately, not on the first request. -var PageTemplate = mustParse("renderPage", "templates/page.html") +var PageTemplate = mustParse("templates/page.html") -func mustParse(name string, paths ...string) *template.Template { - t, err := template.New(name).ParseFS(templateFS, paths...) +func mustParse(paths ...string) *template.Template { + t, err := template.New("").ParseFS(templateFS, paths...) if err != nil { panic("run: parse " + paths[0] + ": " + err.Error()) } From 7466039eedc16196e1497de9929a52d845e263bd Mon Sep 17 00:00:00 2001 From: jeronimoalbi <894299+jeronimoalbi@users.noreply.github.com> Date: Mon, 8 Jun 2026 13:59:15 +0200 Subject: [PATCH 13/13] feat: add `@gnoweb/js` alias for TS feature imports This alias replaces the "../../.." imports within the features. It also adds a minimal `tsconfig.json` to avoid issues with IDEs, otherwise imports will show an error. --- gno.land/pkg/gnoweb/Makefile | 12 +++++++++--- .../playground/frontend/controller-playground.ts | 4 ++-- .../gnoweb/feature/run/frontend/controller-run.ts | 4 ++-- gno.land/pkg/gnoweb/tsconfig.json | 12 ++++++++++++ 4 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 gno.land/pkg/gnoweb/tsconfig.json diff --git a/gno.land/pkg/gnoweb/Makefile b/gno.land/pkg/gnoweb/Makefile index bc6d77810d2..f0867342124 100644 --- a/gno.land/pkg/gnoweb/Makefile +++ b/gno.land/pkg/gnoweb/Makefile @@ -57,6 +57,12 @@ output_js := $(addprefix $(out_dir_js)/,$(patsubst %.ts,%.js,$(notdir $(input_js # resolves both legacy and feature-local controllers. vpath %.ts $(src_dir_js) $(shell find feature -path 'feature/*/frontend' -type d 2>/dev/null) +# Alias so controllers outside frontend/js/ (per-feature controllers under +# feature//frontend/) can import shared modules as @gnoweb/js/... instead +# of brittle ../../../frontend/js/ relative paths. Resolved relative to esbuild's +# working directory (this Makefile's dir). +esbuild_alias := --alias:@gnoweb/js=./frontend/js + # cache cache_dir := .cache @@ -106,13 +112,13 @@ node_path := $(node_modules) ts: $(esbuild) $(output_js) # Build shared chunk first (always loaded) $(out_dir_js)/controller.js: $(shared_js) $(esbuild) - NODE_ENV=production NODE_PATH=$(node_path) $(esbuild) $< --log-level=error --bundle --outfile=$@ --format=esm --minify + NODE_ENV=production NODE_PATH=$(node_path) $(esbuild) $< --log-level=error --bundle --outfile=$@ --format=esm --minify $(esbuild_alias) # Build controller files with shared chunk reference. The bare %.ts # prerequisite lets `vpath` resolve sources from frontend/js/ OR from # feature//frontend/ (set above). $< is the path Make found. $(out_dir_js)/%.js: %.ts $(out_dir_js)/controller.js - NODE_ENV=production NODE_PATH=$(node_path) $(esbuild) $< --log-level=error --bundle --outdir=$(out_dir_js) --format=esm --define:process.env.NODE_ENV="\"production\"" --minify --external:./controller.js + NODE_ENV=production NODE_PATH=$(node_path) $(esbuild) $< --log-level=error --bundle --outdir=$(out_dir_js) --format=esm --define:process.env.NODE_ENV="\"production\"" --minify --external:./controller.js $(esbuild_alias) # Rule to copy static files while preserving directory structure static: $(output_static) @@ -146,7 +152,7 @@ dev.maincss: generate | $(PUBLIC_DIR) # TS in development mode dev.ts: $(esbuild) generate | $(PUBLIC_DIR) - NODE_ENV=development NODE_PATH=$(node_path) $(esbuild) $(input_js) --bundle --outdir=$(out_dir_js) --sourcemap --format=esm --watch \ + NODE_ENV=development NODE_PATH=$(node_path) $(esbuild) $(input_js) --bundle --outdir=$(out_dir_js) --sourcemap --format=esm --watch $(esbuild_alias) \ 2>&1 | $(logname) esbuild # Install node modules deps located in ./tools diff --git a/gno.land/pkg/gnoweb/feature/playground/frontend/controller-playground.ts b/gno.land/pkg/gnoweb/feature/playground/frontend/controller-playground.ts index a95b981fb83..cd28ab4811d 100644 --- a/gno.land/pkg/gnoweb/feature/playground/frontend/controller-playground.ts +++ b/gno.land/pkg/gnoweb/feature/playground/frontend/controller-playground.ts @@ -1,5 +1,5 @@ -import { CodeEditor, isDarkMode } from "../../../frontend/js/code-editor.js"; -import { BaseController, makeCopyIcon } from "../../../frontend/js/controller.js"; +import { CodeEditor, isDarkMode } from "@gnoweb/js/code-editor.js"; +import { BaseController, makeCopyIcon } from "@gnoweb/js/controller.js"; interface PlaygroundFile { name: string; diff --git a/gno.land/pkg/gnoweb/feature/run/frontend/controller-run.ts b/gno.land/pkg/gnoweb/feature/run/frontend/controller-run.ts index 8564ee0ced1..bfd1128e431 100644 --- a/gno.land/pkg/gnoweb/feature/run/frontend/controller-run.ts +++ b/gno.land/pkg/gnoweb/feature/run/frontend/controller-run.ts @@ -1,5 +1,5 @@ -import { CodeEditor, isDarkMode } from "../../../frontend/js/code-editor.js"; -import { BaseController } from "../../../frontend/js/controller.js"; +import { CodeEditor, isDarkMode } from "@gnoweb/js/code-editor.js"; +import { BaseController } from "@gnoweb/js/controller.js"; export class RunController extends BaseController { private declare pkgPath: string; diff --git a/gno.land/pkg/gnoweb/tsconfig.json b/gno.land/pkg/gnoweb/tsconfig.json new file mode 100644 index 00000000000..f7fd188deab --- /dev/null +++ b/gno.land/pkg/gnoweb/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "bundler", + "lib": ["esnext", "dom", "dom.iterable"], + "baseUrl": ".", + "paths": { + "@gnoweb/js/*": ["frontend/js/*"] + } + } +}