diff --git a/lib/phoenix/react.ex b/lib/phoenix/react.ex
index f5fc048..13ad2d5 100644
--- a/lib/phoenix/react.ex
+++ b/lib/phoenix/react.ex
@@ -153,6 +153,7 @@ defmodule Phoenix.React do
def init(_init_arg) do
children = [
{Phoenix.React.Cache, []},
+ {Phoenix.React.Runtime, []},
{Phoenix.React.Server, []}
]
diff --git a/lib/phoenix/react/runtime.ex b/lib/phoenix/react/runtime.ex
index 20ddddd..ef9eeca 100644
--- a/lib/phoenix/react/runtime.ex
+++ b/lib/phoenix/react/runtime.ex
@@ -4,11 +4,32 @@ defmodule Phoenix.React.Runtime do
"""
- defstruct [:component_base, :port, render_timeout: 300_000]
+ use DynamicSupervisor
+
+ def start_link(init_arg) do
+ DynamicSupervisor.start_link(__MODULE__, init_arg, name: __MODULE__)
+ end
+
+ def init(_init_arg) do
+ DynamicSupervisor.init(strategy: :one_for_one)
+ end
+
+ def start_runtime(runtime, args) do
+ spec = {runtime, args}
+ DynamicSupervisor.start_child(__MODULE__, spec)
+ end
+
+ def start_file_watcher(args) do
+ spec = {Phoenix.React.Runtime.FileWatcher, args}
+ DynamicSupervisor.start_child(__MODULE__, spec)
+ end
+
+ defstruct [:component_base, :port, :server_js, render_timeout: 300_000]
@type t :: %__MODULE__{
render_timeout: integer(),
component_base: path(),
+ server_js: path(),
port: port()
}
@@ -20,6 +41,8 @@ defmodule Phoenix.React.Runtime do
@callback start([{:component_base, path()}, {:render_timeout, integer()}]) :: port()
+ @callback start_file_watcher(path()) :: :ok
+
@callback config() :: list()
@callback render_to_string(component(), map(), GenServer.from(), t()) ::
diff --git a/lib/phoenix/react/runtime/bun.ex b/lib/phoenix/react/runtime/bun.ex
index a0192c3..6e7b0b8 100644
--- a/lib/phoenix/react/runtime/bun.ex
+++ b/lib/phoenix/react/runtime/bun.ex
@@ -21,25 +21,36 @@ defmodule Phoenix.React.Runtime.Bun do
use Phoenix.React.Runtime
def start_link(init_arg) do
+ IO.inspect(init_arg)
GenServer.start_link(__MODULE__, init_arg, name: __MODULE__)
end
@impl true
def init(component_base: component_base, render_timeout: render_timeout) do
- {:ok, %Runtime{component_base: component_base, render_timeout: render_timeout},
- {:continue, :start_port}}
+ {:ok,
+ %Runtime{
+ component_base: component_base,
+ render_timeout: render_timeout,
+ server_js: config()[:server_js]
+ }, {:continue, :start_port}}
end
@impl true
@spec handle_continue(:start_port, Phoenix.React.Runtime.t()) ::
{:noreply, Phoenix.React.Runtime.t()}
def handle_continue(:start_port, %Runtime{component_base: component_base} = state) do
+ if config()[:env] == :dev do
+ start_file_watcher(component_base)
+ end
+
port = start(component_base: component_base)
Logger.debug(
"Bun.Server started on port: #{inspect(port)} and OS pid: #{get_port_os_pid(port)}"
)
+ Phoenix.React.Server.set_runtime_process(self())
+
{:noreply, %Runtime{state | port: port}}
end
@@ -64,8 +75,12 @@ defmodule Phoenix.React.Runtime.Bun do
def start(component_base: component_base) do
cd = config()[:cd]
cmd = config()[:cmd]
- args = ["--port", Integer.to_string(config()[:port]), config()[:server_js]]
- bun_env = if(config()[:env] == :dev, do: "development", else: "production")
+ bun_port = Integer.to_string(config()[:port])
+ args = ["--port", bun_port, config()[:server_js]]
+
+ is_dev = config()[:env] == :dev
+
+ bun_env = if(is_dev, do: "development", else: "production")
args =
if config()[:env] == :dev do
@@ -75,6 +90,9 @@ defmodule Phoenix.React.Runtime.Bun do
end
env = [
+ {~c"no_proxy", ~c"10.*,127.*,192.168.*,172.16.0.0/12,localhost,127.0.0.1,::1"},
+ {~c"PORT", ~c"#{bun_port}"},
+ {~c"BUN_PORT", ~c"#{bun_port}"},
{~c"BUN_ENV", ~c"#{bun_env}"},
{~c"COMPONENT_BASE", ~c"#{component_base}"}
]
@@ -96,6 +114,36 @@ defmodule Phoenix.React.Runtime.Bun do
end
@impl true
+ def start_file_watcher(component_base) do
+ Logger.debug("Building server.js bundle")
+
+ Mix.Task.run("phx.react.bun.bundle", [
+ "--component-base",
+ component_base,
+ "--output",
+ config()[:server_js]
+ ])
+
+ Logger.debug("Starting file watcher")
+ Runtime.start_file_watcher(ref: self(), path: component_base)
+ end
+
+ @impl true
+ def handle_info({:component_base_changed, path}, state) do
+ Logger.debug("component_base changed: #{path}")
+
+ Task.async(fn ->
+ Mix.Task.run("phx.react.bun.bundle", [
+ "--component-base",
+ state.component_base,
+ "--output",
+ config()[:server_js]
+ ])
+ end)
+
+ {:noreply, state}
+ end
+
def handle_info({_port, {:data, msg}}, state) do
Logger.debug(msg)
{:noreply, state}
diff --git a/lib/phoenix/react/runtime/file_watcher.ex b/lib/phoenix/react/runtime/file_watcher.ex
new file mode 100644
index 0000000..65cafed
--- /dev/null
+++ b/lib/phoenix/react/runtime/file_watcher.ex
@@ -0,0 +1,44 @@
+defmodule Phoenix.React.Runtime.FileWatcher do
+ use GenServer
+
+ def start_link(args) do
+ GenServer.start_link(__MODULE__, args, name: __MODULE__)
+ end
+
+ def init(args) do
+ path = Keyword.fetch!(args, :path)
+ {:ok, watcher_pid} = FileSystem.start_link(dirs: [path])
+ FileSystem.subscribe(watcher_pid)
+ IO.puts("Watching #{path} for changes...")
+
+ {:ok,
+ args
+ |> Keyword.put(:watcher_pid, watcher_pid)
+ |> Keyword.put(:update_time, System.os_time(:second))}
+ end
+
+ def handle_info({:file_event, _watcher_pid, {path, [:modified, :closed]}}, state) do
+ IO.puts("File changed: #{path} - Events: [:modified, :closed]")
+ send(self(), {:throttle_update, path})
+ {:noreply, state}
+ end
+
+ def handle_info({:file_event, _watcher_pid, {_path, _events}}, state) do
+ # ref = Keyword.fetch!(state, :ref)
+ # IO.puts("File changed: #{path} - Events: #{inspect(events)}")
+ # send(self(), {:throttle_update, path, events})
+ {:noreply, state}
+ end
+
+ def handle_info({:throttle_update, path}, state) do
+ update_time = Keyword.fetch!(state, :update_time)
+ now = System.os_time(:second)
+
+ if now > update_time do
+ Process.send_after(state[:ref], {:component_base_changed, path}, 3_000)
+ {:noreply, state |> Keyword.put(:update_time, now + 3)}
+ else
+ {:noreply, state}
+ end
+ end
+end
diff --git a/lib/phoenix/react/server.ex b/lib/phoenix/react/server.ex
index e7ad378..92b8709 100644
--- a/lib/phoenix/react/server.ex
+++ b/lib/phoenix/react/server.ex
@@ -8,12 +8,17 @@ defmodule Phoenix.React.Server do
require Logger
alias Phoenix.React.Cache
+ alias Phoenix.React.Runtime
use GenServer
@type second() :: integer()
@type millisecond() :: integer()
+ def set_runtime_process(pid) do
+ GenServer.cast(__MODULE__, {:set_runtime_process, pid})
+ end
+
@doc """
Return the configuration of the React Render Server from `Application.get_env(:phoenix_react_server, Phoenix.React)`
"""
@@ -46,14 +51,21 @@ defmodule Phoenix.React.Server do
runtime = cfg[:runtime]
component_base = cfg[:component_base]
render_timeout = cfg[:render_timeout]
+ args = [component_base: component_base, render_timeout: render_timeout]
- {:ok, runtiem_process} =
- GenServer.start_link(runtime,
- component_base: component_base,
- render_timeout: render_timeout
- )
+ Runtime.start_runtime(runtime, args)
- {:ok, %{runtiem_process: runtiem_process}}
+ {:ok,
+ %{
+ runtime: runtime,
+ component_base: component_base,
+ render_timeout: render_timeout
+ }}
+ end
+
+ @impl true
+ def handle_cast({:set_runtime_process, pid}, state) do
+ {:noreply, Map.put(state, :runtiem_process, pid)}
end
@impl true
diff --git a/mix.exs b/mix.exs
index c9f51aa..db53021 100644
--- a/mix.exs
+++ b/mix.exs
@@ -2,7 +2,7 @@ defmodule Phoenix.React.Mixfile do
use Mix.Project
@source_url "https://github.com/gsmlg-dev/phoenix-react.git"
- @version "0.3.0"
+ @version "0.4.0"
def project do
[
@@ -47,7 +47,8 @@ defmodule Phoenix.React.Mixfile do
{:httpoison, "~> 2.0"},
{:phoenix_html, "~> 4.1"},
{:phoenix_live_view, "~> 1.0"},
- {:ex_doc, ">= 0.0.0", only: :prod, runtime: false}
+ {:file_system, "~> 1.0"},
+ {:ex_doc, ">= 0.0.0", only: :doc, runtime: false}
]
end
diff --git a/react_demo/assets/component/live_form.js b/react_demo/assets/component/live_form.js
new file mode 100644
index 0000000..229f319
--- /dev/null
+++ b/react_demo/assets/component/live_form.js
@@ -0,0 +1,29 @@
+import React from "react";
+import MDEditor from '@uiw/react-md-editor';
+import "@uiw/react-md-editor/markdown-editor.css";
+import "@uiw/react-markdown-preview/markdown.css";
+
+export function Component({ data = "", setData }) {
+ const { content } = data;
+
+ return (
+
diff --git a/react_demo/lib/react_demo_web/components/react_components.ex b/react_demo/lib/react_demo_web/components/react_components.ex
index d36ced9..462a14b 100644
--- a/react_demo/lib/react_demo_web/components/react_components.ex
+++ b/react_demo/lib/react_demo_web/components/react_components.ex
@@ -53,4 +53,15 @@ defmodule ReactDemoWeb.ReactComponents do
static: static
})
end
+
+
+ def react_live_form(assigns) do
+ {static, props} = Map.pop(assigns, :static, nil)
+
+ react_component(%{
+ component: "live_form",
+ props: props,
+ static: static
+ })
+ end
end
diff --git a/react_demo/lib/react_demo_web/live/form_live/index.ex b/react_demo/lib/react_demo_web/live/form_live/index.ex
new file mode 100644
index 0000000..1f50edb
--- /dev/null
+++ b/react_demo/lib/react_demo_web/live/form_live/index.ex
@@ -0,0 +1,39 @@
+defmodule ReactDemoWeb.FormLive.Index do
+ use ReactDemoWeb, :live_view
+
+ @impl true
+ def mount(_params, _session, socket) do
+ {:ok, socket}
+ end
+
+ @impl true
+ def handle_params(params, _url, socket) do
+ {:noreply, apply_action(socket, socket.assigns.live_action, params)}
+ end
+
+ defp apply_action(socket, :index, _params) do
+ socket
+ |> assign(:page_title, "Live Form")
+ |> assign(:form_data, FormProcess.get_form_data())
+ end
+
+ @impl true
+ def handle_event("form:init", %{}, socket) do
+ form_data = socket.assigns.form_data
+ {:reply, form_data, socket}
+ end
+
+ @impl true
+ def handle_event("form:input", data, socket) do
+ form_data = socket.assigns.form_data
+ |> Map.merge(data)
+
+ FormProcess.set_form_data(form_data)
+
+ socket = socket
+ |> assign(:form_data, form_data)
+ |> push_event("form:update", form_data)
+
+ {:noreply, socket}
+ end
+end
diff --git a/react_demo/lib/react_demo_web/live/form_live/index.html.heex b/react_demo/lib/react_demo_web/live/form_live/index.html.heex
new file mode 100644
index 0000000..acae6ec
--- /dev/null
+++ b/react_demo/lib/react_demo_web/live/form_live/index.html.heex
@@ -0,0 +1,22 @@
+
+
+
+
+ This Form is rendered with react-dom/server
+
+
+ Form is hydrate on client side after live view socket connected with event form:init.
+ Input in markdown editor will send form:input to server
+ Server will send form:update to client to update the form data.
+
+
<.react_live_form
+ data={@form_data}
+ />
+
+
+
diff --git a/react_demo/lib/react_demo_web/router.ex b/react_demo/lib/react_demo_web/router.ex
index efdf9a8..3405cbe 100644
--- a/react_demo/lib/react_demo_web/router.ex
+++ b/react_demo/lib/react_demo_web/router.ex
@@ -15,6 +15,8 @@ defmodule ReactDemoWeb.Router do
get "/", PageController, :home
get "/stats", PageController, :stats
+
+ live "/form", FormLive.Index, :index
end
end
diff --git a/react_demo/package.json b/react_demo/package.json
index f646d41..3998aa9 100644
--- a/react_demo/package.json
+++ b/react_demo/package.json
@@ -12,6 +12,8 @@
"@mui/x-charts": "^7.26.0",
"@nivo/line": "^0.88.0",
"@tailwindcss/typography": "^0.5.16",
+ "@uiw/react-markdown-preview": "^5.1.3",
+ "@uiw/react-md-editor": "^4.0.5",
"@visx/xychart": "^3.12.0",
"d3": "^7.9.0",
"daisyui": "^4.12.23",
diff --git a/react_demo/priv/react/dev/server.css b/react_demo/priv/react/dev/server.css
new file mode 100644
index 0000000..2bddf78
--- /dev/null
+++ b/react_demo/priv/react/dev/server.css
@@ -0,0 +1,3043 @@
+/* node_modules/@uiw/react-markdown-preview/esm/styles/markdown.css */
+@media (prefers-color-scheme: dark) {
+ .wmde-markdown, .wmde-markdown-var {
+ color-scheme: dark;
+ --color-prettylights-syntax-comment: #8b949e;
+ --color-prettylights-syntax-constant: #79c0ff;
+ --color-prettylights-syntax-entity: #d2a8ff;
+ --color-prettylights-syntax-storage-modifier-import: #c9d1d9;
+ --color-prettylights-syntax-entity-tag: #7ee787;
+ --color-prettylights-syntax-keyword: #ff7b72;
+ --color-prettylights-syntax-string: #a5d6ff;
+ --color-prettylights-syntax-variable: #ffa657;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
+ --color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
+ --color-prettylights-syntax-invalid-illegal-bg: #8e1519;
+ --color-prettylights-syntax-carriage-return-text: #f0f6fc;
+ --color-prettylights-syntax-carriage-return-bg: #b62324;
+ --color-prettylights-syntax-string-regexp: #7ee787;
+ --color-prettylights-syntax-markup-list: #f2cc60;
+ --color-prettylights-syntax-markup-heading: #1f6feb;
+ --color-prettylights-syntax-markup-italic: #c9d1d9;
+ --color-prettylights-syntax-markup-bold: #c9d1d9;
+ --color-prettylights-syntax-markup-deleted-text: #ffdcd7;
+ --color-prettylights-syntax-markup-deleted-bg: #67060c;
+ --color-prettylights-syntax-markup-inserted-text: #aff5b4;
+ --color-prettylights-syntax-markup-inserted-bg: #033a16;
+ --color-prettylights-syntax-markup-changed-text: #ffdfb6;
+ --color-prettylights-syntax-markup-changed-bg: #5a1e02;
+ --color-prettylights-syntax-markup-ignored-text: #c9d1d9;
+ --color-prettylights-syntax-markup-ignored-bg: #1158c7;
+ --color-prettylights-syntax-meta-diff-range: #d2a8ff;
+ --color-prettylights-syntax-brackethighlighter-angle: #8b949e;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;
+ --color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
+ --color-fg-default: #c9d1d9;
+ --color-fg-muted: #8b949e;
+ --color-fg-subtle: #484f58;
+ --color-canvas-default: #0d1117;
+ --color-canvas-subtle: #161b22;
+ --color-border-default: #30363d;
+ --color-border-muted: #21262d;
+ --color-neutral-muted: #6e768166;
+ --color-accent-fg: #58a6ff;
+ --color-accent-emphasis: #1f6feb;
+ --color-attention-subtle: #bb800926;
+ --color-danger-fg: #f85149;
+ --color-danger-emphasis: #da3633;
+ --color-attention-fg: #d29922;
+ --color-attention-emphasis: #9e6a03;
+ --color-done-fg: #a371f7;
+ --color-done-emphasis: #8957e5;
+ --color-success-fg: #3fb950;
+ --color-success-emphasis: #238636;
+ --color-copied-active-bg: #2e9b33;
+ }
+}
+
+@media (prefers-color-scheme: light) {
+ .wmde-markdown, .wmde-markdown-var {
+ color-scheme: light;
+ --color-prettylights-syntax-comment: #6e7781;
+ --color-prettylights-syntax-constant: #0550ae;
+ --color-prettylights-syntax-entity: #8250df;
+ --color-prettylights-syntax-storage-modifier-import: #24292f;
+ --color-prettylights-syntax-entity-tag: #116329;
+ --color-prettylights-syntax-keyword: #cf222e;
+ --color-prettylights-syntax-string: #0a3069;
+ --color-prettylights-syntax-variable: #953800;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
+ --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
+ --color-prettylights-syntax-invalid-illegal-bg: #82071e;
+ --color-prettylights-syntax-carriage-return-text: #f6f8fa;
+ --color-prettylights-syntax-carriage-return-bg: #cf222e;
+ --color-prettylights-syntax-string-regexp: #116329;
+ --color-prettylights-syntax-markup-list: #3b2300;
+ --color-prettylights-syntax-markup-heading: #0550ae;
+ --color-prettylights-syntax-markup-italic: #24292f;
+ --color-prettylights-syntax-markup-bold: #24292f;
+ --color-prettylights-syntax-markup-deleted-text: #82071e;
+ --color-prettylights-syntax-markup-deleted-bg: #ffebe9;
+ --color-prettylights-syntax-markup-inserted-text: #116329;
+ --color-prettylights-syntax-markup-inserted-bg: #dafbe1;
+ --color-prettylights-syntax-markup-changed-text: #953800;
+ --color-prettylights-syntax-markup-changed-bg: #ffd8b5;
+ --color-prettylights-syntax-markup-ignored-text: #eaeef2;
+ --color-prettylights-syntax-markup-ignored-bg: #0550ae;
+ --color-prettylights-syntax-meta-diff-range: #8250df;
+ --color-prettylights-syntax-brackethighlighter-angle: #57606a;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;
+ --color-prettylights-syntax-constant-other-reference-link: #0a3069;
+ --color-fg-default: #24292f;
+ --color-fg-muted: #57606a;
+ --color-fg-subtle: #6e7781;
+ --color-canvas-default: #fff;
+ --color-canvas-subtle: #f6f8fa;
+ --color-border-default: #d0d7de;
+ --color-border-muted: #d8dee4;
+ --color-neutral-muted: #afb8c133;
+ --color-accent-fg: #0969da;
+ --color-accent-emphasis: #0969da;
+ --color-attention-subtle: #fff8c5;
+ --color-danger-fg: #d1242f;
+ --color-danger-emphasis: #cf222e;
+ --color-attention-fg: #9a6700;
+ --color-attention-emphasis: #9a6700;
+ --color-done-fg: #8250df;
+ --color-done-emphasis: #8250df;
+ --color-success-fg: #1a7f37;
+ --color-success-emphasis: #1f883d;
+ --color-copied-active-bg: #2e9b33;
+ }
+}
+
+[data-color-mode*="dark"] .wmde-markdown, [data-color-mode*="dark"] .wmde-markdown-var, .wmde-markdown-var[data-color-mode*="dark"], .wmde-markdown[data-color-mode*="dark"], body[data-color-mode*="dark"] {
+ color-scheme: dark;
+ --color-prettylights-syntax-comment: #8b949e;
+ --color-prettylights-syntax-constant: #79c0ff;
+ --color-prettylights-syntax-entity: #d2a8ff;
+ --color-prettylights-syntax-storage-modifier-import: #c9d1d9;
+ --color-prettylights-syntax-entity-tag: #7ee787;
+ --color-prettylights-syntax-keyword: #ff7b72;
+ --color-prettylights-syntax-string: #a5d6ff;
+ --color-prettylights-syntax-variable: #ffa657;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
+ --color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
+ --color-prettylights-syntax-invalid-illegal-bg: #8e1519;
+ --color-prettylights-syntax-carriage-return-text: #f0f6fc;
+ --color-prettylights-syntax-carriage-return-bg: #b62324;
+ --color-prettylights-syntax-string-regexp: #7ee787;
+ --color-prettylights-syntax-markup-list: #f2cc60;
+ --color-prettylights-syntax-markup-heading: #1f6feb;
+ --color-prettylights-syntax-markup-italic: #c9d1d9;
+ --color-prettylights-syntax-markup-bold: #c9d1d9;
+ --color-prettylights-syntax-markup-deleted-text: #ffdcd7;
+ --color-prettylights-syntax-markup-deleted-bg: #67060c;
+ --color-prettylights-syntax-markup-inserted-text: #aff5b4;
+ --color-prettylights-syntax-markup-inserted-bg: #033a16;
+ --color-prettylights-syntax-markup-changed-text: #ffdfb6;
+ --color-prettylights-syntax-markup-changed-bg: #5a1e02;
+ --color-prettylights-syntax-markup-ignored-text: #c9d1d9;
+ --color-prettylights-syntax-markup-ignored-bg: #1158c7;
+ --color-prettylights-syntax-meta-diff-range: #d2a8ff;
+ --color-prettylights-syntax-brackethighlighter-angle: #8b949e;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;
+ --color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
+ --color-fg-default: #c9d1d9;
+ --color-fg-muted: #8b949e;
+ --color-fg-subtle: #484f58;
+ --color-canvas-default: #0d1117;
+ --color-canvas-subtle: #161b22;
+ --color-border-default: #30363d;
+ --color-border-muted: #21262d;
+ --color-neutral-muted: #6e768166;
+ --color-accent-fg: #58a6ff;
+ --color-accent-emphasis: #1f6feb;
+ --color-attention-subtle: #bb800926;
+ --color-danger-fg: #f85149;
+}
+
+[data-color-mode*="light"] .wmde-markdown, [data-color-mode*="light"] .wmde-markdown-var, .wmde-markdown-var[data-color-mode*="light"], .wmde-markdown[data-color-mode*="light"], body[data-color-mode*="light"] {
+ color-scheme: light;
+ --color-prettylights-syntax-comment: #6e7781;
+ --color-prettylights-syntax-constant: #0550ae;
+ --color-prettylights-syntax-entity: #8250df;
+ --color-prettylights-syntax-storage-modifier-import: #24292f;
+ --color-prettylights-syntax-entity-tag: #116329;
+ --color-prettylights-syntax-keyword: #cf222e;
+ --color-prettylights-syntax-string: #0a3069;
+ --color-prettylights-syntax-variable: #953800;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
+ --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
+ --color-prettylights-syntax-invalid-illegal-bg: #82071e;
+ --color-prettylights-syntax-carriage-return-text: #f6f8fa;
+ --color-prettylights-syntax-carriage-return-bg: #cf222e;
+ --color-prettylights-syntax-string-regexp: #116329;
+ --color-prettylights-syntax-markup-list: #3b2300;
+ --color-prettylights-syntax-markup-heading: #0550ae;
+ --color-prettylights-syntax-markup-italic: #24292f;
+ --color-prettylights-syntax-markup-bold: #24292f;
+ --color-prettylights-syntax-markup-deleted-text: #82071e;
+ --color-prettylights-syntax-markup-deleted-bg: #ffebe9;
+ --color-prettylights-syntax-markup-inserted-text: #116329;
+ --color-prettylights-syntax-markup-inserted-bg: #dafbe1;
+ --color-prettylights-syntax-markup-changed-text: #953800;
+ --color-prettylights-syntax-markup-changed-bg: #ffd8b5;
+ --color-prettylights-syntax-markup-ignored-text: #eaeef2;
+ --color-prettylights-syntax-markup-ignored-bg: #0550ae;
+ --color-prettylights-syntax-meta-diff-range: #8250df;
+ --color-prettylights-syntax-brackethighlighter-angle: #57606a;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;
+ --color-prettylights-syntax-constant-other-reference-link: #0a3069;
+ --color-fg-default: #24292f;
+ --color-fg-muted: #57606a;
+ --color-fg-subtle: #6e7781;
+ --color-canvas-default: #fff;
+ --color-canvas-subtle: #f6f8fa;
+ --color-border-default: #d0d7de;
+ --color-border-muted: #d8dee4;
+ --color-neutral-muted: #afb8c133;
+ --color-accent-fg: #0969da;
+ --color-accent-emphasis: #0969da;
+ --color-attention-subtle: #fff8c5;
+ --color-danger-fg: #cf222e;
+}
+
+.wmde-markdown {
+ -webkit-text-size-adjust: 100%;
+ word-wrap: break-word;
+ color: var(--color-fg-default);
+ background-color: var(--color-canvas-default);
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Noto Sans, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;
+ font-size: 16px;
+ line-height: 1.5;
+}
+
+.wmde-markdown details, .wmde-markdown figcaption, .wmde-markdown figure {
+ display: block;
+}
+
+.wmde-markdown summary {
+ display: list-item;
+}
+
+.wmde-markdown [hidden] {
+ display: none !important;
+}
+
+.wmde-markdown a {
+ color: var(--color-accent-fg);
+ text-decoration: none;
+ background-color: #0000;
+}
+
+.wmde-markdown a:active, .wmde-markdown a:hover {
+ outline-width: 0;
+}
+
+.wmde-markdown abbr[title] {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+ border-bottom: none;
+}
+
+.wmde-markdown b, .wmde-markdown strong {
+ font-weight: 600;
+}
+
+.wmde-markdown dfn {
+ font-style: italic;
+}
+
+.wmde-markdown h1 {
+ border-bottom: 1px solid var(--color-border-muted);
+ margin: .67em 0;
+ padding-bottom: .3em;
+ font-size: 2em;
+ font-weight: 600;
+}
+
+.wmde-markdown mark {
+ background-color: var(--color-attention-subtle);
+ color: var(--color-text-primary);
+}
+
+.wmde-markdown small {
+ font-size: 90%;
+}
+
+.wmde-markdown sub, .wmde-markdown sup {
+ position: relative;
+ vertical-align: baseline;
+ font-size: 75%;
+ line-height: 0;
+}
+
+.wmde-markdown sub {
+ bottom: -.25em;
+}
+
+.wmde-markdown sup {
+ top: -.5em;
+}
+
+.wmde-markdown img {
+ display: inline-block;
+ box-sizing: content-box;
+ background-color: var(--color-canvas-default);
+ border-style: none;
+ max-width: 100%;
+}
+
+.wmde-markdown code, .wmde-markdown kbd, .wmde-markdown pre, .wmde-markdown samp {
+ font-family: monospace;
+ font-size: 1em;
+}
+
+.wmde-markdown figure {
+ margin: 1em 40px;
+}
+
+.wmde-markdown hr {
+ box-sizing: content-box;
+ overflow: hidden;
+ border: 0;
+ border-bottom: 1px solid var(--color-border-muted);
+ background: none;
+ background-color: var(--color-border-default);
+ height: .25em;
+ margin: 24px 0;
+ padding: 0;
+}
+
+.wmde-markdown input {
+ font: inherit;
+ overflow: visible;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ margin: 0;
+}
+
+.wmde-markdown [type="button"], .wmde-markdown [type="reset"], .wmde-markdown [type="submit"] {
+ -webkit-appearance: button;
+}
+
+.wmde-markdown [type="button"]::-moz-focus-inner, .wmde-markdown [type="reset"]::-moz-focus-inner, .wmde-markdown [type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+.wmde-markdown [type="button"]:-moz-focusring, .wmde-markdown [type="reset"]:-moz-focusring, .wmde-markdown [type="submit"]:-moz-focusring {
+ outline: 1px dotted buttontext;
+}
+
+.wmde-markdown [type="checkbox"], .wmde-markdown [type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+.wmde-markdown [type="number"]::-webkit-inner-spin-button, .wmde-markdown [type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+.wmde-markdown [type="search"] {
+ -webkit-appearance: textfield;
+ outline-offset: -2px;
+}
+
+.wmde-markdown [type="search"]::-webkit-search-cancel-button, .wmde-markdown [type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+.wmde-markdown ::-webkit-input-placeholder {
+ color: inherit;
+ opacity: .54;
+}
+
+.wmde-markdown ::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ font: inherit;
+}
+
+.wmde-markdown a:hover {
+ text-decoration: underline;
+}
+
+.wmde-markdown hr:before {
+ display: table;
+ content: "";
+}
+
+.wmde-markdown hr:after {
+ display: table;
+ clear: both;
+ content: "";
+}
+
+.wmde-markdown table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ display: block;
+ width: max-content;
+ max-width: 100%;
+}
+
+.wmde-markdown td, .wmde-markdown th {
+ padding: 0;
+}
+
+.wmde-markdown details summary {
+ cursor: pointer;
+}
+
+.wmde-markdown details:not([open]) > :not(summary) {
+ display: none !important;
+}
+
+.wmde-markdown kbd {
+ display: inline-block;
+ color: var(--color-fg-default);
+ vertical-align: middle;
+ background-color: var(--color-canvas-subtle);
+ border: solid 1px var(--color-neutral-muted);
+ border-bottom-color: var(--color-neutral-muted);
+ box-shadow: inset 0 -1px 0 var(--color-neutral-muted);
+ border-radius: 6px;
+ padding: 3px 5px;
+ font: 11px / 10px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
+}
+
+.wmde-markdown h1, .wmde-markdown h2, .wmde-markdown h3, .wmde-markdown h4, .wmde-markdown h5, .wmde-markdown h6 {
+ margin-top: 24px;
+ margin-bottom: 16px;
+ font-weight: 600;
+ line-height: 1.25;
+}
+
+.wmde-markdown td, .wmde-markdown th {
+ padding: 0;
+}
+
+.wmde-markdown details summary {
+ cursor: pointer;
+}
+
+.wmde-markdown details:not([open]) > :not(summary) {
+ display: none !important;
+}
+
+.wmde-markdown kbd {
+ display: inline-block;
+ color: var(--color-fg-default);
+ vertical-align: middle;
+ background-color: var(--color-canvas-subtle);
+ border: solid 1px var(--color-neutral-muted);
+ border-bottom-color: var(--color-neutral-muted);
+ box-shadow: inset 0 -1px 0 var(--color-neutral-muted);
+ border-radius: 6px;
+ padding: 3px 5px;
+ font: 11px / 10px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
+}
+
+.wmde-markdown h1, .wmde-markdown h2, .wmde-markdown h3, .wmde-markdown h4, .wmde-markdown h5, .wmde-markdown h6 {
+ margin-top: 24px;
+ margin-bottom: 16px;
+ font-weight: 600;
+ line-height: 1.25;
+}
+
+.wmde-markdown h2 {
+ border-bottom: 1px solid var(--color-border-muted);
+ padding-bottom: .3em;
+ font-size: 1.5em;
+ font-weight: 600;
+}
+
+.wmde-markdown h3 {
+ font-size: 1.25em;
+ font-weight: 600;
+}
+
+.wmde-markdown h4 {
+ font-size: 1em;
+ font-weight: 600;
+}
+
+.wmde-markdown h5 {
+ font-size: .875em;
+ font-weight: 600;
+}
+
+.wmde-markdown h6 {
+ color: var(--color-fg-muted);
+ font-size: .85em;
+ font-weight: 600;
+}
+
+.wmde-markdown p {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+.wmde-markdown blockquote {
+ color: var(--color-fg-muted);
+ border-left: .25em solid var(--color-border-default);
+ margin: 0;
+ padding: 0 1em;
+}
+
+.wmde-markdown ul, .wmde-markdown ol {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 2em;
+}
+
+.wmde-markdown ol ol, .wmde-markdown ul ol {
+ list-style-type: lower-roman;
+}
+
+.wmde-markdown ul ul ol, .wmde-markdown ul ol ol, .wmde-markdown ol ul ol, .wmde-markdown ol ol ol {
+ list-style-type: lower-alpha;
+}
+
+.wmde-markdown dd {
+ margin-left: 0;
+}
+
+.wmde-markdown tt, .wmde-markdown code {
+ font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
+ font-size: 12px;
+}
+
+.wmde-markdown pre {
+ word-wrap: normal;
+ margin-top: 0;
+ margin-bottom: 0;
+ font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
+ font-size: 12px;
+}
+
+.wmde-markdown .octicon {
+ display: inline-block;
+ vertical-align: text-bottom;
+ fill: currentColor;
+ overflow: visible !important;
+}
+
+.wmde-markdown ::placeholder {
+ color: var(--color-fg-subtle);
+ opacity: 1;
+}
+
+.wmde-markdown input::-webkit-outer-spin-button, .wmde-markdown input::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ appearance: none;
+ margin: 0;
+}
+
+.wmde-markdown [data-catalyst] {
+ display: block;
+}
+
+.wmde-markdown:before {
+ display: table;
+ content: "";
+}
+
+.wmde-markdown:after {
+ display: table;
+ clear: both;
+ content: "";
+}
+
+.wmde-markdown > :first-child {
+ margin-top: 0 !important;
+}
+
+.wmde-markdown > :last-child {
+ margin-bottom: 0 !important;
+}
+
+.wmde-markdown a:not([href]) {
+ color: inherit;
+ text-decoration: none;
+}
+
+.wmde-markdown .absent {
+ color: var(--color-danger-fg);
+}
+
+.wmde-markdown a.anchor {
+ float: left;
+ margin-left: -20px;
+ padding-right: 4px;
+ line-height: 1;
+}
+
+.wmde-markdown .anchor:focus {
+ outline: none;
+}
+
+.wmde-markdown p, .wmde-markdown blockquote, .wmde-markdown ul, .wmde-markdown ol, .wmde-markdown dl, .wmde-markdown table, .wmde-markdown pre, .wmde-markdown details {
+ margin-top: 0;
+ margin-bottom: 16px;
+}
+
+.wmde-markdown blockquote > :first-child {
+ margin-top: 0;
+}
+
+.wmde-markdown blockquote > :last-child {
+ margin-bottom: 0;
+}
+
+.wmde-markdown sup > a:before {
+ content: "[";
+}
+
+.wmde-markdown sup > a:after {
+ content: "]";
+}
+
+.wmde-markdown h1 .octicon-link, .wmde-markdown h2 .octicon-link, .wmde-markdown h3 .octicon-link, .wmde-markdown h4 .octicon-link, .wmde-markdown h5 .octicon-link, .wmde-markdown h6 .octicon-link {
+ color: var(--color-fg-default);
+ vertical-align: middle;
+ visibility: hidden;
+}
+
+.wmde-markdown h1:hover .anchor, .wmde-markdown h2:hover .anchor, .wmde-markdown h3:hover .anchor, .wmde-markdown h4:hover .anchor, .wmde-markdown h5:hover .anchor, .wmde-markdown h6:hover .anchor {
+ text-decoration: none;
+}
+
+.wmde-markdown h1:hover .anchor .octicon-link, .wmde-markdown h2:hover .anchor .octicon-link, .wmde-markdown h3:hover .anchor .octicon-link, .wmde-markdown h4:hover .anchor .octicon-link, .wmde-markdown h5:hover .anchor .octicon-link, .wmde-markdown h6:hover .anchor .octicon-link {
+ visibility: visible;
+}
+
+.wmde-markdown h1 tt, .wmde-markdown h1 code, .wmde-markdown h2 tt, .wmde-markdown h2 code, .wmde-markdown h3 tt, .wmde-markdown h3 code, .wmde-markdown h4 tt, .wmde-markdown h4 code, .wmde-markdown h5 tt, .wmde-markdown h5 code, .wmde-markdown h6 tt, .wmde-markdown h6 code {
+ font-size: inherit;
+ padding: 0 .2em;
+}
+
+.wmde-markdown ul.no-list, .wmde-markdown ol.no-list {
+ list-style-type: none;
+ padding: 0;
+}
+
+.wmde-markdown ol[type="1"] {
+ list-style-type: decimal;
+}
+
+.wmde-markdown ol[type="a"] {
+ list-style-type: lower-alpha;
+}
+
+.wmde-markdown ol[type="i"] {
+ list-style-type: lower-roman;
+}
+
+.wmde-markdown div > ol:not([type]) {
+ list-style-type: decimal;
+}
+
+.wmde-markdown ul ul, .wmde-markdown ul ol, .wmde-markdown ol ol, .wmde-markdown ol ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.wmde-markdown li > p {
+ margin-top: 16px;
+}
+
+.wmde-markdown li + li {
+ margin-top: .25em;
+}
+
+.wmde-markdown dl {
+ padding: 0;
+}
+
+.wmde-markdown dl dt {
+ margin-top: 16px;
+ padding: 0;
+ font-size: 1em;
+ font-style: italic;
+ font-weight: 600;
+}
+
+.wmde-markdown dl dd {
+ margin-bottom: 16px;
+ padding: 0 16px;
+}
+
+.wmde-markdown table th {
+ font-weight: 600;
+}
+
+.wmde-markdown table th, .wmde-markdown table td {
+ border: 1px solid var(--color-border-default);
+ padding: 6px 13px;
+}
+
+.wmde-markdown table tr {
+ background-color: var(--color-canvas-default);
+ border-top: 1px solid var(--color-border-muted);
+}
+
+.wmde-markdown table tr:nth-child(2n) {
+ background-color: var(--color-canvas-subtle);
+}
+
+.wmde-markdown table img {
+ background-color: #0000;
+}
+
+.wmde-markdown img[align="right"] {
+ padding-left: 20px;
+}
+
+.wmde-markdown img[align="left"] {
+ padding-right: 20px;
+}
+
+.wmde-markdown .emoji {
+ vertical-align: text-top;
+ background-color: #0000;
+ max-width: none;
+}
+
+.wmde-markdown span.frame {
+ display: block;
+ overflow: hidden;
+}
+
+.wmde-markdown span.frame > span {
+ display: block;
+ float: left;
+ overflow: hidden;
+ border: 1px solid var(--color-border-default);
+ width: auto;
+ margin: 13px 0 0;
+ padding: 7px;
+}
+
+.wmde-markdown span.frame span img {
+ display: block;
+ float: left;
+}
+
+.wmde-markdown span.frame span span {
+ display: block;
+ clear: both;
+ color: var(--color-fg-default);
+ padding: 5px 0 0;
+}
+
+.wmde-markdown span.align-center {
+ display: block;
+ overflow: hidden;
+ clear: both;
+}
+
+.wmde-markdown span.align-center > span {
+ display: block;
+ overflow: hidden;
+ text-align: center;
+ margin: 13px auto 0;
+}
+
+.wmde-markdown span.align-center span img {
+ text-align: center;
+ margin: 0 auto;
+}
+
+.wmde-markdown span.align-right {
+ display: block;
+ overflow: hidden;
+ clear: both;
+}
+
+.wmde-markdown span.align-right > span {
+ display: block;
+ overflow: hidden;
+ text-align: right;
+ margin: 13px 0 0;
+}
+
+.wmde-markdown span.align-right span img {
+ text-align: right;
+ margin: 0;
+}
+
+.wmde-markdown span.float-left {
+ display: block;
+ float: left;
+ overflow: hidden;
+ margin-right: 13px;
+}
+
+.wmde-markdown span.float-left span {
+ margin: 13px 0 0;
+}
+
+.wmde-markdown span.float-right {
+ display: block;
+ float: right;
+ overflow: hidden;
+ margin-left: 13px;
+}
+
+.wmde-markdown span.float-right > span {
+ display: block;
+ overflow: hidden;
+ text-align: right;
+ margin: 13px auto 0;
+}
+
+.wmde-markdown code, .wmde-markdown tt {
+ background-color: var(--color-neutral-muted);
+ border-radius: 6px;
+ margin: 0;
+ padding: .2em .4em;
+ font-size: 85%;
+}
+
+.wmde-markdown code br, .wmde-markdown tt br {
+ display: none;
+}
+
+.wmde-markdown del code {
+ text-decoration: inherit;
+}
+
+.wmde-markdown pre code {
+ font-size: 100%;
+}
+
+.wmde-markdown pre > code {
+ word-break: normal;
+ white-space: pre;
+ background: none;
+ border: 0;
+ margin: 0;
+ padding: 0;
+}
+
+.wmde-markdown pre {
+ background-color: var(--color-canvas-subtle);
+ border-radius: 6px;
+ font-size: 85%;
+ line-height: 1.45;
+}
+
+.wmde-markdown pre code, .wmde-markdown pre tt {
+ display: inline;
+ max-width: auto;
+ overflow: visible;
+ line-height: inherit;
+ word-wrap: normal;
+ background-color: #0000;
+ border: 0;
+ margin: 0;
+ padding: 0;
+}
+
+.wmde-markdown pre > code {
+ overflow: auto;
+ display: block;
+ padding: 16px;
+}
+
+.wmde-markdown pre > code::-webkit-scrollbar {
+ background: none;
+ width: 8px;
+ height: 8px;
+}
+
+.wmde-markdown pre > code::-webkit-scrollbar-thumb {
+ background: var(--color-fg-muted);
+ border-radius: 10px;
+}
+
+.wmde-markdown .csv-data td, .wmde-markdown .csv-data th {
+ overflow: hidden;
+ text-align: left;
+ white-space: nowrap;
+ padding: 5px;
+ font-size: 12px;
+ line-height: 1;
+}
+
+.wmde-markdown .csv-data .blob-num {
+ text-align: right;
+ background: var(--color-canvas-default);
+ border: 0;
+ padding: 10px 8px 9px;
+}
+
+.wmde-markdown .csv-data tr {
+ border-top: 0;
+}
+
+.wmde-markdown .csv-data th {
+ background: var(--color-canvas-subtle);
+ border-top: 0;
+ font-weight: 600;
+}
+
+.wmde-markdown .footnotes {
+ color: var(--color-fg-muted);
+ border-top: 1px solid var(--color-border-default);
+ font-size: 12px;
+}
+
+.wmde-markdown .footnotes ol {
+ padding-left: 16px;
+}
+
+.wmde-markdown .footnotes li {
+ position: relative;
+}
+
+.wmde-markdown .footnotes li:target:before {
+ position: absolute;
+ pointer-events: none;
+ content: "";
+ border: 2px solid var(--color-accent-emphasis);
+ border-radius: 6px;
+ inset: -8px -8px -8px -24px;
+}
+
+.wmde-markdown .footnotes li:target {
+ color: var(--color-fg-default);
+}
+
+.wmde-markdown .footnotes .data-footnote-backref g-emoji {
+ font-family: monospace;
+}
+
+.wmde-markdown .task-list-item {
+ list-style-type: none;
+}
+
+.wmde-markdown .task-list-item label {
+ font-weight: 400;
+}
+
+.wmde-markdown .task-list-item.enabled label {
+ cursor: pointer;
+}
+
+.wmde-markdown .task-list-item + .wmde-markdown .task-list-item {
+ margin-top: 3px;
+}
+
+.wmde-markdown .task-list-item .handle {
+ display: none;
+}
+
+.wmde-markdown .task-list-item-checkbox, .wmde-markdown .contains-task-list input[type="checkbox"] {
+ vertical-align: middle;
+ margin: 0 .2em .25em -1.6em;
+}
+
+.wmde-markdown .contains-task-list:dir(rtl) .task-list-item-checkbox, .wmde-markdown .contains-task-list:dir(rtl) input[type="checkbox"] {
+ margin: 0 -1.6em .25em .2em;
+}
+
+.wmde-markdown ::-webkit-calendar-picker-indicator {
+ filter: invert(50%);
+}
+
+.wmde-markdown pre {
+ position: relative;
+}
+
+.wmde-markdown pre .copied {
+ visibility: hidden;
+ display: flex;
+ position: absolute;
+ cursor: pointer;
+ color: var(--color-fg-default);
+ background: var(--color-border-default);
+ transition: all .3s;
+ border-radius: 5px;
+ padding: 6px;
+ font-size: 12px;
+ top: 6px;
+ right: 6px;
+}
+
+.wmde-markdown pre .copied .octicon-copy {
+ display: block;
+}
+
+.wmde-markdown pre .copied .octicon-check {
+ display: none;
+}
+
+.wmde-markdown pre:hover .copied {
+ visibility: visible;
+}
+
+.wmde-markdown pre:hover .copied:hover {
+ background: var(--color-prettylights-syntax-entity-tag);
+ color: var(--color-canvas-default);
+}
+
+.wmde-markdown pre:hover .copied:active, .wmde-markdown pre .copied.active {
+ background: var(--color-copied-active-bg);
+ color: var(--color-canvas-default);
+}
+
+.wmde-markdown pre .active .octicon-copy {
+ display: none;
+}
+
+.wmde-markdown pre .active .octicon-check {
+ display: block;
+}
+
+.wmde-markdown .markdown-alert {
+ color: inherit;
+ border-left: .25em solid var(--borderColor-default, var(--color-border-default));
+ margin-bottom: 16px;
+ padding: .5rem 1em;
+}
+
+.wmde-markdown .markdown-alert > :last-child {
+ margin-bottom: 0 !important;
+}
+
+.wmde-markdown .markdown-alert .markdown-alert-title {
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 1;
+}
+
+.wmde-markdown .markdown-alert .markdown-alert-title svg.octicon {
+ margin-right: var(--base-size-8, 8px) !important;
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-note {
+ border-left-color: var(--borderColor-accent-emphasis, var(--color-accent-emphasis));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-note .markdown-alert-title {
+ color: var(--fgColor-accent, var(--color-accent-fg));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-tip {
+ border-left-color: var(--borderColor-success-emphasis, var(--color-success-emphasis));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-tip .markdown-alert-title {
+ color: var(--fgColor-success, var(--color-success-fg));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-important {
+ border-left-color: var(--borderColor-done-emphasis, var(--color-done-emphasis));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-important .markdown-alert-title {
+ color: var(--fgColor-done, var(--color-done-fg));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-warning {
+ border-left-color: var(--borderColor-attention-emphasis, var(--color-attention-emphasis));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-warning .markdown-alert-title {
+ color: var(--fgColor-attention, var(--color-attention-fg));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-caution {
+ border-left-color: var(--borderColor-danger-emphasis, var(--color-danger-emphasis));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-caution .markdown-alert-title {
+ color: var(--fgColor-danger, var(--color-danger-fg));
+}
+
+.wmde-markdown .highlight-line {
+ background-color: var(--color-neutral-muted);
+}
+
+.wmde-markdown .code-line.line-number:before {
+ display: inline-block;
+ text-align: right;
+ color: var(--color-fg-subtle);
+ content: attr(line);
+ white-space: nowrap;
+ width: 1rem;
+ margin-right: 16px;
+}
+
+.wmde-markdown .token.comment, .wmde-markdown .token.prolog, .wmde-markdown .token.doctype, .wmde-markdown .token.cdata {
+ color: var(--color-prettylights-syntax-comment);
+}
+
+.wmde-markdown .token.namespace {
+ opacity: .7;
+}
+
+.wmde-markdown .token.property, .wmde-markdown .token.tag, .wmde-markdown .token.selector, .wmde-markdown .token.constant, .wmde-markdown .token.symbol, .wmde-markdown .token.deleted {
+ color: var(--color-prettylights-syntax-entity-tag);
+}
+
+.wmde-markdown .token.maybe-class-name {
+ color: var(--color-prettylights-syntax-variable);
+}
+
+.wmde-markdown .token.property-access, .wmde-markdown .token.operator, .wmde-markdown .token.boolean, .wmde-markdown .token.number, .wmde-markdown .token.selector .token.class, .wmde-markdown .token.attr-name, .wmde-markdown .token.string, .wmde-markdown .token.char, .wmde-markdown .token.builtin {
+ color: var(--color-prettylights-syntax-constant);
+}
+
+.wmde-markdown .token.deleted {
+ color: var(--color-prettylights-syntax-markup-deleted-text);
+}
+
+.wmde-markdown .code-line .token.deleted {
+ background-color: var(--color-prettylights-syntax-markup-deleted-bg);
+}
+
+.wmde-markdown .token.inserted {
+ color: var(--color-prettylights-syntax-markup-inserted-text);
+}
+
+.wmde-markdown .code-line .token.inserted {
+ background-color: var(--color-prettylights-syntax-markup-inserted-bg);
+}
+
+.wmde-markdown .token.variable {
+ color: var(--color-prettylights-syntax-constant);
+}
+
+.wmde-markdown .token.entity, .wmde-markdown .token.url, .wmde-markdown .language-css .token.string, .wmde-markdown .style .token.string, .wmde-markdown .token.color, .wmde-markdown .token.atrule, .wmde-markdown .token.attr-value, .wmde-markdown .token.function, .wmde-markdown .token.class-name {
+ color: var(--color-prettylights-syntax-string);
+}
+
+.wmde-markdown .token.rule, .wmde-markdown .token.regex, .wmde-markdown .token.important, .wmde-markdown .token.keyword {
+ color: var(--color-prettylights-syntax-keyword);
+}
+
+.wmde-markdown .token.coord {
+ color: var(--color-prettylights-syntax-meta-diff-range);
+}
+
+.wmde-markdown .token.important, .wmde-markdown .token.bold {
+ font-weight: bold;
+}
+
+.wmde-markdown .token.italic {
+ font-style: italic;
+}
+
+.wmde-markdown .token.entity {
+ cursor: help;
+}
+
+/* node_modules/@uiw/react-md-editor/esm/components/TextArea/index.css */
+.w-md-editor-area {
+ overflow: auto;
+ border-radius: 5px;
+}
+
+.w-md-editor-text {
+ position: relative;
+ text-align: left;
+ white-space: pre-wrap;
+ word-break: keep-all;
+ overflow-wrap: break-word;
+ box-sizing: border-box;
+ font-variant-ligatures: common-ligatures;
+ min-height: 100%;
+ margin: 0;
+ padding: 10px;
+ font-size: 14px !important;
+ line-height: 18px !important;
+}
+
+.w-md-editor-text-pre, .w-md-editor-text-input, .w-md-editor-text > .w-md-editor-text-pre {
+ box-sizing: inherit;
+ display: inherit;
+ font-family: inherit;
+ font-size: inherit;
+ font-style: inherit;
+ font-variant-ligatures: inherit;
+ font-weight: inherit;
+ letter-spacing: inherit;
+ line-height: inherit;
+ tab-size: inherit;
+ text-indent: inherit;
+ text-rendering: inherit;
+ text-transform: inherit;
+ white-space: inherit;
+ overflow-wrap: inherit;
+ word-break: inherit;
+ word-break: normal;
+ background: none;
+ border: 0;
+ margin: 0;
+ padding: 0;
+ font-family: var(--md-editor-font-family) !important;
+}
+
+.w-md-editor-text-pre {
+ position: relative;
+ pointer-events: none;
+ background-color: #0000 !important;
+ margin: 0 !important;
+}
+
+.w-md-editor-text-pre > code {
+ font-family: var(--md-editor-font-family) !important;
+ padding: 0 !important;
+ font-size: 14px !important;
+ line-height: 18px !important;
+}
+
+.w-md-editor-text-input {
+ position: absolute;
+ resize: none;
+ color: inherit;
+ overflow: hidden;
+ outline: 0;
+ padding: inherit;
+ -webkit-font-smoothing: antialiased;
+ -webkit-text-fill-color: transparent;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+}
+
+.w-md-editor-text-input:empty {
+ -webkit-text-fill-color: inherit !important;
+}
+
+.w-md-editor-text-pre, .w-md-editor-text-input {
+ word-wrap: pre;
+ word-break: break-word;
+ white-space: pre-wrap;
+}
+
+@media (-ms-high-contrast: none), (-ms-high-contrast: active) {
+ .w-md-editor-text-input {
+ color: #0000 !important;
+ }
+
+ .w-md-editor-text-input::selection {
+ color: #0000 !important;
+ background-color: #accef7 !important;
+ }
+}
+
+.w-md-editor-text-pre .punctuation {
+ color: var(--color-prettylights-syntax-comment, #8b949e) !important;
+}
+
+.w-md-editor-text-pre .token.url, .w-md-editor-text-pre .token.content {
+ color: var(--color-prettylights-syntax-constant, #0550ae) !important;
+}
+
+.w-md-editor-text-pre .token.title.important {
+ color: var(--color-prettylights-syntax-markup-bold, #24292f);
+}
+
+.w-md-editor-text-pre .token.code-block .function {
+ color: var(--color-prettylights-syntax-entity, #8250df);
+}
+
+.w-md-editor-text-pre .token.bold {
+ font-weight: unset !important;
+}
+
+.w-md-editor-text-pre .token.title {
+ line-height: unset !important;
+ font-size: unset !important;
+ font-weight: unset !important;
+}
+
+.w-md-editor-text-pre .token.code.keyword {
+ color: var(--color-prettylights-syntax-constant, #0550ae) !important;
+}
+
+.w-md-editor-text-pre .token.strike, .w-md-editor-text-pre .token.strike .content {
+ color: var(--color-prettylights-syntax-markup-deleted-text, #82071e) !important;
+}
+
+/* node_modules/@uiw/react-md-editor/esm/components/Toolbar/Child.css */
+.w-md-editor-toolbar-child {
+ position: absolute;
+ box-shadow: 0 0 0 1px var(--md-editor-box-shadow-color), 0 0 0 var(--md-editor-box-shadow-color), 0 1px 1px var(--md-editor-box-shadow-color);
+ background-color: var(--md-editor-background-color);
+ z-index: 1;
+ display: none;
+ border-radius: 3px;
+}
+
+.w-md-editor-toolbar-child.active {
+ display: block;
+}
+
+.w-md-editor-toolbar-child .w-md-editor-toolbar {
+ border-bottom: 0;
+ border-radius: 3px;
+ padding: 3px;
+}
+
+.w-md-editor-toolbar-child .w-md-editor-toolbar ul > li {
+ display: block;
+}
+
+.w-md-editor-toolbar-child .w-md-editor-toolbar ul > li button {
+ height: initial;
+ box-sizing: border-box;
+ width: -webkit-fill-available;
+ margin: 0;
+ padding: 3px 4px 2px;
+}
+
+/* node_modules/@uiw/react-md-editor/esm/components/Toolbar/index.css */
+.w-md-editor-toolbar {
+ border-bottom: 1px solid var(--md-editor-box-shadow-color);
+ background-color: var(--md-editor-background-color);
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ -webkit-user-select: none;
+ user-select: none;
+ flex-wrap: wrap;
+ border-radius: 3px 3px 0 0;
+ padding: 3px;
+}
+
+.w-md-editor-toolbar.bottom {
+ border-bottom: 0;
+ border-top: 1px solid var(--md-editor-box-shadow-color);
+ border-radius: 0 0 3px 3px;
+}
+
+.w-md-editor-toolbar ul, .w-md-editor-toolbar li {
+ list-style: none;
+ line-height: initial;
+ margin: 0;
+ padding: 0;
+}
+
+.w-md-editor-toolbar li {
+ display: inline-block;
+ font-size: 14px;
+}
+
+.w-md-editor-toolbar li + li {
+ margin: 0;
+}
+
+.w-md-editor-toolbar li > button {
+ text-transform: none;
+ overflow: visible;
+ outline: none;
+ cursor: pointer;
+ transition: all .3s;
+ white-space: nowrap;
+ color: var(--color-fg-default);
+ background: none;
+ border: none;
+ border-radius: 2px;
+ height: 20px;
+ margin: 0 1px;
+ padding: 4px;
+ font-weight: normal;
+ line-height: 14px;
+}
+
+.w-md-editor-toolbar li > button:hover, .w-md-editor-toolbar li > button:focus {
+ background-color: var(--color-neutral-muted);
+ color: var(--color-accent-fg);
+}
+
+.w-md-editor-toolbar li > button:active {
+ background-color: var(--color-neutral-muted);
+ color: var(--color-danger-fg);
+}
+
+.w-md-editor-toolbar li > button:disabled {
+ color: var(--md-editor-box-shadow-color);
+ cursor: not-allowed;
+}
+
+.w-md-editor-toolbar li > button:disabled:hover {
+ color: var(--md-editor-box-shadow-color);
+ background-color: #0000;
+}
+
+.w-md-editor-toolbar li.active > button {
+ color: var(--color-accent-fg);
+ background-color: var(--color-neutral-muted);
+}
+
+.w-md-editor-toolbar-divider {
+ vertical-align: middle;
+ background-color: var(--md-editor-box-shadow-color);
+ width: 1px;
+ height: 14px;
+ margin: -3px 3px 0 !important;
+}
+
+/* node_modules/@uiw/react-md-editor/esm/components/DragBar/index.css */
+.w-md-editor-bar {
+ position: absolute;
+ cursor: s-resize;
+ z-index: 3;
+ -webkit-user-select: none;
+ user-select: none;
+ border-radius: 0 0 3px;
+ width: 14px;
+ height: 10px;
+ margin-top: -11px;
+ margin-right: 0;
+ bottom: 0;
+ right: 0;
+}
+
+.w-md-editor-bar svg {
+ display: block;
+ margin: 0 auto;
+}
+
+/* node_modules/@uiw/react-md-editor/esm/index.css */
+.w-md-editor {
+ text-align: left;
+ position: relative;
+ color: var(--color-fg-default);
+ --md-editor-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ --md-editor-background-color: var(--color-canvas-default, #fff);
+ --md-editor-box-shadow-color: var(--color-border-default, #d0d7de);
+ box-shadow: 0 0 0 1px var(--md-editor-box-shadow-color), 0 0 0 var(--md-editor-box-shadow-color), 0 1px 1px var(--md-editor-box-shadow-color);
+ background-color: var(--md-editor-background-color);
+ display: flex;
+ flex-direction: column;
+ border-radius: 3px;
+ padding-bottom: 1px;
+ font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
+}
+
+.w-md-editor.w-md-editor-rtl {
+ direction: rtl !important;
+ text-align: right !important;
+}
+
+.w-md-editor.w-md-editor-rtl .w-md-editor-preview {
+ box-shadow: inset -1px 0 0 0 var(--md-editor-box-shadow-color);
+ left: 0;
+ right: unset !important;
+ text-align: right !important;
+}
+
+.w-md-editor.w-md-editor-rtl .w-md-editor-text {
+ text-align: right !important;
+}
+
+.w-md-editor-toolbar {
+ height: fit-content;
+}
+
+.w-md-editor-content {
+ overflow: auto;
+ position: relative;
+ border-radius: 0 0 3px;
+ height: 100%;
+}
+
+.w-md-editor .copied {
+ display: none !important;
+}
+
+.w-md-editor-input {
+ width: 50%;
+ height: 100%;
+}
+
+.w-md-editor-text-pre > code {
+ word-break: break-word !important;
+ white-space: pre-wrap !important;
+}
+
+.w-md-editor-preview {
+ box-sizing: border-box;
+ box-shadow: inset 1px 0 0 0 var(--md-editor-box-shadow-color);
+ position: absolute;
+ overflow: auto;
+ display: flex;
+ flex-direction: column;
+ border-radius: 0 0 5px;
+ width: 50%;
+ padding: 10px 20px;
+ top: 0;
+ bottom: 0;
+ right: 0;
+}
+
+.w-md-editor-preview .anchor {
+ display: none;
+}
+
+.w-md-editor-preview .contains-task-list li.task-list-item {
+ list-style: none;
+}
+
+.w-md-editor-show-preview .w-md-editor-input {
+ overflow: hidden;
+ background-color: var(--md-editor-background-color);
+ width: 0%;
+}
+
+.w-md-editor-show-preview .w-md-editor-preview {
+ box-shadow: inset 0 0;
+ width: 100%;
+}
+
+.w-md-editor-show-edit .w-md-editor-input {
+ width: 100%;
+}
+
+.w-md-editor-show-edit .w-md-editor-preview {
+ width: 0%;
+ padding: 0;
+}
+
+.w-md-editor-fullscreen {
+ overflow: hidden;
+ position: fixed;
+ z-index: 99999;
+ inset: 0;
+ height: 100% !important;
+}
+
+.w-md-editor-fullscreen .w-md-editor-content {
+ height: 100%;
+}
+
+/* node_modules/@uiw/react-md-editor/markdown-editor.css */
+.w-md-editor-bar {
+ position: absolute;
+ cursor: s-resize;
+ z-index: 3;
+ -webkit-user-select: none;
+ user-select: none;
+ border-radius: 0 0 3px;
+ width: 14px;
+ height: 10px;
+ margin-top: -11px;
+ margin-right: 0;
+ bottom: 0;
+ right: 0;
+}
+
+.w-md-editor-bar svg {
+ display: block;
+ margin: 0 auto;
+}
+
+.w-md-editor-area {
+ overflow: auto;
+ border-radius: 5px;
+}
+
+.w-md-editor-text {
+ position: relative;
+ text-align: left;
+ white-space: pre-wrap;
+ word-break: keep-all;
+ overflow-wrap: break-word;
+ box-sizing: border-box;
+ font-variant-ligatures: common-ligatures;
+ min-height: 100%;
+ margin: 0;
+ padding: 10px;
+ font-size: 14px !important;
+ line-height: 18px !important;
+}
+
+.w-md-editor-text-pre, .w-md-editor-text-input, .w-md-editor-text > .w-md-editor-text-pre {
+ box-sizing: inherit;
+ display: inherit;
+ font-family: inherit;
+ font-size: inherit;
+ font-style: inherit;
+ font-variant-ligatures: inherit;
+ font-weight: inherit;
+ letter-spacing: inherit;
+ line-height: inherit;
+ tab-size: inherit;
+ text-indent: inherit;
+ text-rendering: inherit;
+ text-transform: inherit;
+ white-space: inherit;
+ overflow-wrap: inherit;
+ word-break: inherit;
+ word-break: normal;
+ background: none;
+ border: 0;
+ margin: 0;
+ padding: 0;
+ font-family: var(--md-editor-font-family) !important;
+}
+
+.w-md-editor-text-pre {
+ position: relative;
+ pointer-events: none;
+ background-color: #0000 !important;
+ margin: 0 !important;
+}
+
+.w-md-editor-text-pre > code {
+ font-family: var(--md-editor-font-family) !important;
+ padding: 0 !important;
+ font-size: 14px !important;
+ line-height: 18px !important;
+}
+
+.w-md-editor-text-input {
+ position: absolute;
+ resize: none;
+ color: inherit;
+ overflow: hidden;
+ outline: 0;
+ padding: inherit;
+ -webkit-font-smoothing: antialiased;
+ -webkit-text-fill-color: transparent;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+}
+
+.w-md-editor-text-input:empty {
+ -webkit-text-fill-color: inherit !important;
+}
+
+.w-md-editor-text-pre, .w-md-editor-text-input {
+ word-wrap: pre;
+ word-break: break-word;
+ white-space: pre-wrap;
+}
+
+@media (-ms-high-contrast: none), (-ms-high-contrast: active) {
+ .w-md-editor-text-input {
+ color: #0000 !important;
+ }
+
+ .w-md-editor-text-input::selection {
+ color: #0000 !important;
+ background-color: #accef7 !important;
+ }
+}
+
+.w-md-editor-text-pre .punctuation {
+ color: var(--color-prettylights-syntax-comment, #8b949e) !important;
+}
+
+.w-md-editor-text-pre .token.url, .w-md-editor-text-pre .token.content {
+ color: var(--color-prettylights-syntax-constant, #0550ae) !important;
+}
+
+.w-md-editor-text-pre .token.title.important {
+ color: var(--color-prettylights-syntax-markup-bold, #24292f);
+}
+
+.w-md-editor-text-pre .token.code-block .function {
+ color: var(--color-prettylights-syntax-entity, #8250df);
+}
+
+.w-md-editor-text-pre .token.bold {
+ font-weight: unset !important;
+}
+
+.w-md-editor-text-pre .token.title {
+ line-height: unset !important;
+ font-size: unset !important;
+ font-weight: unset !important;
+}
+
+.w-md-editor-text-pre .token.code.keyword {
+ color: var(--color-prettylights-syntax-constant, #0550ae) !important;
+}
+
+.w-md-editor-text-pre .token.strike, .w-md-editor-text-pre .token.strike .content {
+ color: var(--color-prettylights-syntax-markup-deleted-text, #82071e) !important;
+}
+
+.w-md-editor-toolbar-child {
+ position: absolute;
+ box-shadow: 0 0 0 1px var(--md-editor-box-shadow-color), 0 0 0 var(--md-editor-box-shadow-color), 0 1px 1px var(--md-editor-box-shadow-color);
+ background-color: var(--md-editor-background-color);
+ z-index: 1;
+ display: none;
+ border-radius: 3px;
+}
+
+.w-md-editor-toolbar-child.active {
+ display: block;
+}
+
+.w-md-editor-toolbar-child .w-md-editor-toolbar {
+ border-bottom: 0;
+ border-radius: 3px;
+ padding: 3px;
+}
+
+.w-md-editor-toolbar-child .w-md-editor-toolbar ul > li {
+ display: block;
+}
+
+.w-md-editor-toolbar-child .w-md-editor-toolbar ul > li button {
+ height: initial;
+ box-sizing: border-box;
+ width: -webkit-fill-available;
+ margin: 0;
+ padding: 3px 4px 2px;
+}
+
+.w-md-editor-toolbar {
+ border-bottom: 1px solid var(--md-editor-box-shadow-color);
+ background-color: var(--md-editor-background-color);
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ -webkit-user-select: none;
+ user-select: none;
+ flex-wrap: wrap;
+ border-radius: 3px 3px 0 0;
+ padding: 3px;
+}
+
+.w-md-editor-toolbar.bottom {
+ border-bottom: 0;
+ border-top: 1px solid var(--md-editor-box-shadow-color);
+ border-radius: 0 0 3px 3px;
+}
+
+.w-md-editor-toolbar ul, .w-md-editor-toolbar li {
+ list-style: none;
+ line-height: initial;
+ margin: 0;
+ padding: 0;
+}
+
+.w-md-editor-toolbar li {
+ display: inline-block;
+ font-size: 14px;
+}
+
+.w-md-editor-toolbar li + li {
+ margin: 0;
+}
+
+.w-md-editor-toolbar li > button {
+ text-transform: none;
+ overflow: visible;
+ outline: none;
+ cursor: pointer;
+ transition: all .3s;
+ white-space: nowrap;
+ color: var(--color-fg-default);
+ background: none;
+ border: none;
+ border-radius: 2px;
+ height: 20px;
+ margin: 0 1px;
+ padding: 4px;
+ font-weight: normal;
+ line-height: 14px;
+}
+
+.w-md-editor-toolbar li > button:hover, .w-md-editor-toolbar li > button:focus {
+ background-color: var(--color-neutral-muted);
+ color: var(--color-accent-fg);
+}
+
+.w-md-editor-toolbar li > button:active {
+ background-color: var(--color-neutral-muted);
+ color: var(--color-danger-fg);
+}
+
+.w-md-editor-toolbar li > button:disabled {
+ color: var(--md-editor-box-shadow-color);
+ cursor: not-allowed;
+}
+
+.w-md-editor-toolbar li > button:disabled:hover {
+ color: var(--md-editor-box-shadow-color);
+ background-color: #0000;
+}
+
+.w-md-editor-toolbar li.active > button {
+ color: var(--color-accent-fg);
+ background-color: var(--color-neutral-muted);
+}
+
+.w-md-editor-toolbar-divider {
+ vertical-align: middle;
+ background-color: var(--md-editor-box-shadow-color);
+ width: 1px;
+ height: 14px;
+ margin: -3px 3px 0 !important;
+}
+
+.w-md-editor {
+ text-align: left;
+ position: relative;
+ color: var(--color-fg-default);
+ --md-editor-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ --md-editor-background-color: var(--color-canvas-default, #fff);
+ --md-editor-box-shadow-color: var(--color-border-default, #d0d7de);
+ box-shadow: 0 0 0 1px var(--md-editor-box-shadow-color), 0 0 0 var(--md-editor-box-shadow-color), 0 1px 1px var(--md-editor-box-shadow-color);
+ background-color: var(--md-editor-background-color);
+ display: flex;
+ flex-direction: column;
+ border-radius: 3px;
+ padding-bottom: 1px;
+ font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
+}
+
+.w-md-editor.w-md-editor-rtl {
+ direction: rtl !important;
+ text-align: right !important;
+}
+
+.w-md-editor.w-md-editor-rtl .w-md-editor-preview {
+ box-shadow: inset -1px 0 0 0 var(--md-editor-box-shadow-color);
+ left: 0;
+ right: unset !important;
+ text-align: right !important;
+}
+
+.w-md-editor.w-md-editor-rtl .w-md-editor-text {
+ text-align: right !important;
+}
+
+.w-md-editor-toolbar {
+ height: fit-content;
+}
+
+.w-md-editor-content {
+ overflow: auto;
+ position: relative;
+ border-radius: 0 0 3px;
+ height: 100%;
+}
+
+.w-md-editor .copied {
+ display: none !important;
+}
+
+.w-md-editor-input {
+ width: 50%;
+ height: 100%;
+}
+
+.w-md-editor-text-pre > code {
+ word-break: break-word !important;
+ white-space: pre-wrap !important;
+}
+
+.w-md-editor-preview {
+ box-sizing: border-box;
+ box-shadow: inset 1px 0 0 0 var(--md-editor-box-shadow-color);
+ position: absolute;
+ overflow: auto;
+ display: flex;
+ flex-direction: column;
+ border-radius: 0 0 5px;
+ width: 50%;
+ padding: 10px 20px;
+ top: 0;
+ bottom: 0;
+ right: 0;
+}
+
+.w-md-editor-preview .anchor {
+ display: none;
+}
+
+.w-md-editor-preview .contains-task-list li.task-list-item {
+ list-style: none;
+}
+
+.w-md-editor-show-preview .w-md-editor-input {
+ overflow: hidden;
+ background-color: var(--md-editor-background-color);
+ width: 0%;
+}
+
+.w-md-editor-show-preview .w-md-editor-preview {
+ box-shadow: inset 0 0;
+ width: 100%;
+}
+
+.w-md-editor-show-edit .w-md-editor-input {
+ width: 100%;
+}
+
+.w-md-editor-show-edit .w-md-editor-preview {
+ width: 0%;
+ padding: 0;
+}
+
+.w-md-editor-fullscreen {
+ overflow: hidden;
+ position: fixed;
+ z-index: 99999;
+ inset: 0;
+ height: 100% !important;
+}
+
+.w-md-editor-fullscreen .w-md-editor-content {
+ height: 100%;
+}
+
+/* node_modules/@uiw/react-markdown-preview/markdown.css */
+@media (prefers-color-scheme: dark) {
+ .wmde-markdown, .wmde-markdown-var {
+ color-scheme: dark;
+ --color-prettylights-syntax-comment: #8b949e;
+ --color-prettylights-syntax-constant: #79c0ff;
+ --color-prettylights-syntax-entity: #d2a8ff;
+ --color-prettylights-syntax-storage-modifier-import: #c9d1d9;
+ --color-prettylights-syntax-entity-tag: #7ee787;
+ --color-prettylights-syntax-keyword: #ff7b72;
+ --color-prettylights-syntax-string: #a5d6ff;
+ --color-prettylights-syntax-variable: #ffa657;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
+ --color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
+ --color-prettylights-syntax-invalid-illegal-bg: #8e1519;
+ --color-prettylights-syntax-carriage-return-text: #f0f6fc;
+ --color-prettylights-syntax-carriage-return-bg: #b62324;
+ --color-prettylights-syntax-string-regexp: #7ee787;
+ --color-prettylights-syntax-markup-list: #f2cc60;
+ --color-prettylights-syntax-markup-heading: #1f6feb;
+ --color-prettylights-syntax-markup-italic: #c9d1d9;
+ --color-prettylights-syntax-markup-bold: #c9d1d9;
+ --color-prettylights-syntax-markup-deleted-text: #ffdcd7;
+ --color-prettylights-syntax-markup-deleted-bg: #67060c;
+ --color-prettylights-syntax-markup-inserted-text: #aff5b4;
+ --color-prettylights-syntax-markup-inserted-bg: #033a16;
+ --color-prettylights-syntax-markup-changed-text: #ffdfb6;
+ --color-prettylights-syntax-markup-changed-bg: #5a1e02;
+ --color-prettylights-syntax-markup-ignored-text: #c9d1d9;
+ --color-prettylights-syntax-markup-ignored-bg: #1158c7;
+ --color-prettylights-syntax-meta-diff-range: #d2a8ff;
+ --color-prettylights-syntax-brackethighlighter-angle: #8b949e;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;
+ --color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
+ --color-fg-default: #c9d1d9;
+ --color-fg-muted: #8b949e;
+ --color-fg-subtle: #484f58;
+ --color-canvas-default: #0d1117;
+ --color-canvas-subtle: #161b22;
+ --color-border-default: #30363d;
+ --color-border-muted: #21262d;
+ --color-neutral-muted: #6e768166;
+ --color-accent-fg: #58a6ff;
+ --color-accent-emphasis: #1f6feb;
+ --color-attention-subtle: #bb800926;
+ --color-danger-fg: #f85149;
+ --color-danger-emphasis: #da3633;
+ --color-attention-fg: #d29922;
+ --color-attention-emphasis: #9e6a03;
+ --color-done-fg: #a371f7;
+ --color-done-emphasis: #8957e5;
+ --color-success-fg: #3fb950;
+ --color-success-emphasis: #238636;
+ --color-copied-active-bg: #2e9b33;
+ }
+}
+
+@media (prefers-color-scheme: light) {
+ .wmde-markdown, .wmde-markdown-var {
+ color-scheme: light;
+ --color-prettylights-syntax-comment: #6e7781;
+ --color-prettylights-syntax-constant: #0550ae;
+ --color-prettylights-syntax-entity: #8250df;
+ --color-prettylights-syntax-storage-modifier-import: #24292f;
+ --color-prettylights-syntax-entity-tag: #116329;
+ --color-prettylights-syntax-keyword: #cf222e;
+ --color-prettylights-syntax-string: #0a3069;
+ --color-prettylights-syntax-variable: #953800;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
+ --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
+ --color-prettylights-syntax-invalid-illegal-bg: #82071e;
+ --color-prettylights-syntax-carriage-return-text: #f6f8fa;
+ --color-prettylights-syntax-carriage-return-bg: #cf222e;
+ --color-prettylights-syntax-string-regexp: #116329;
+ --color-prettylights-syntax-markup-list: #3b2300;
+ --color-prettylights-syntax-markup-heading: #0550ae;
+ --color-prettylights-syntax-markup-italic: #24292f;
+ --color-prettylights-syntax-markup-bold: #24292f;
+ --color-prettylights-syntax-markup-deleted-text: #82071e;
+ --color-prettylights-syntax-markup-deleted-bg: #ffebe9;
+ --color-prettylights-syntax-markup-inserted-text: #116329;
+ --color-prettylights-syntax-markup-inserted-bg: #dafbe1;
+ --color-prettylights-syntax-markup-changed-text: #953800;
+ --color-prettylights-syntax-markup-changed-bg: #ffd8b5;
+ --color-prettylights-syntax-markup-ignored-text: #eaeef2;
+ --color-prettylights-syntax-markup-ignored-bg: #0550ae;
+ --color-prettylights-syntax-meta-diff-range: #8250df;
+ --color-prettylights-syntax-brackethighlighter-angle: #57606a;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;
+ --color-prettylights-syntax-constant-other-reference-link: #0a3069;
+ --color-fg-default: #24292f;
+ --color-fg-muted: #57606a;
+ --color-fg-subtle: #6e7781;
+ --color-canvas-default: #fff;
+ --color-canvas-subtle: #f6f8fa;
+ --color-border-default: #d0d7de;
+ --color-border-muted: #d8dee4;
+ --color-neutral-muted: #afb8c133;
+ --color-accent-fg: #0969da;
+ --color-accent-emphasis: #0969da;
+ --color-attention-subtle: #fff8c5;
+ --color-danger-fg: #d1242f;
+ --color-danger-emphasis: #cf222e;
+ --color-attention-fg: #9a6700;
+ --color-attention-emphasis: #9a6700;
+ --color-done-fg: #8250df;
+ --color-done-emphasis: #8250df;
+ --color-success-fg: #1a7f37;
+ --color-success-emphasis: #1f883d;
+ --color-copied-active-bg: #2e9b33;
+ }
+}
+
+[data-color-mode*="dark"] .wmde-markdown, [data-color-mode*="dark"] .wmde-markdown-var, .wmde-markdown-var[data-color-mode*="dark"], .wmde-markdown[data-color-mode*="dark"], body[data-color-mode*="dark"] {
+ color-scheme: dark;
+ --color-prettylights-syntax-comment: #8b949e;
+ --color-prettylights-syntax-constant: #79c0ff;
+ --color-prettylights-syntax-entity: #d2a8ff;
+ --color-prettylights-syntax-storage-modifier-import: #c9d1d9;
+ --color-prettylights-syntax-entity-tag: #7ee787;
+ --color-prettylights-syntax-keyword: #ff7b72;
+ --color-prettylights-syntax-string: #a5d6ff;
+ --color-prettylights-syntax-variable: #ffa657;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
+ --color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
+ --color-prettylights-syntax-invalid-illegal-bg: #8e1519;
+ --color-prettylights-syntax-carriage-return-text: #f0f6fc;
+ --color-prettylights-syntax-carriage-return-bg: #b62324;
+ --color-prettylights-syntax-string-regexp: #7ee787;
+ --color-prettylights-syntax-markup-list: #f2cc60;
+ --color-prettylights-syntax-markup-heading: #1f6feb;
+ --color-prettylights-syntax-markup-italic: #c9d1d9;
+ --color-prettylights-syntax-markup-bold: #c9d1d9;
+ --color-prettylights-syntax-markup-deleted-text: #ffdcd7;
+ --color-prettylights-syntax-markup-deleted-bg: #67060c;
+ --color-prettylights-syntax-markup-inserted-text: #aff5b4;
+ --color-prettylights-syntax-markup-inserted-bg: #033a16;
+ --color-prettylights-syntax-markup-changed-text: #ffdfb6;
+ --color-prettylights-syntax-markup-changed-bg: #5a1e02;
+ --color-prettylights-syntax-markup-ignored-text: #c9d1d9;
+ --color-prettylights-syntax-markup-ignored-bg: #1158c7;
+ --color-prettylights-syntax-meta-diff-range: #d2a8ff;
+ --color-prettylights-syntax-brackethighlighter-angle: #8b949e;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;
+ --color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
+ --color-fg-default: #c9d1d9;
+ --color-fg-muted: #8b949e;
+ --color-fg-subtle: #484f58;
+ --color-canvas-default: #0d1117;
+ --color-canvas-subtle: #161b22;
+ --color-border-default: #30363d;
+ --color-border-muted: #21262d;
+ --color-neutral-muted: #6e768166;
+ --color-accent-fg: #58a6ff;
+ --color-accent-emphasis: #1f6feb;
+ --color-attention-subtle: #bb800926;
+ --color-danger-fg: #f85149;
+}
+
+[data-color-mode*="light"] .wmde-markdown, [data-color-mode*="light"] .wmde-markdown-var, .wmde-markdown-var[data-color-mode*="light"], .wmde-markdown[data-color-mode*="light"], body[data-color-mode*="light"] {
+ color-scheme: light;
+ --color-prettylights-syntax-comment: #6e7781;
+ --color-prettylights-syntax-constant: #0550ae;
+ --color-prettylights-syntax-entity: #8250df;
+ --color-prettylights-syntax-storage-modifier-import: #24292f;
+ --color-prettylights-syntax-entity-tag: #116329;
+ --color-prettylights-syntax-keyword: #cf222e;
+ --color-prettylights-syntax-string: #0a3069;
+ --color-prettylights-syntax-variable: #953800;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
+ --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
+ --color-prettylights-syntax-invalid-illegal-bg: #82071e;
+ --color-prettylights-syntax-carriage-return-text: #f6f8fa;
+ --color-prettylights-syntax-carriage-return-bg: #cf222e;
+ --color-prettylights-syntax-string-regexp: #116329;
+ --color-prettylights-syntax-markup-list: #3b2300;
+ --color-prettylights-syntax-markup-heading: #0550ae;
+ --color-prettylights-syntax-markup-italic: #24292f;
+ --color-prettylights-syntax-markup-bold: #24292f;
+ --color-prettylights-syntax-markup-deleted-text: #82071e;
+ --color-prettylights-syntax-markup-deleted-bg: #ffebe9;
+ --color-prettylights-syntax-markup-inserted-text: #116329;
+ --color-prettylights-syntax-markup-inserted-bg: #dafbe1;
+ --color-prettylights-syntax-markup-changed-text: #953800;
+ --color-prettylights-syntax-markup-changed-bg: #ffd8b5;
+ --color-prettylights-syntax-markup-ignored-text: #eaeef2;
+ --color-prettylights-syntax-markup-ignored-bg: #0550ae;
+ --color-prettylights-syntax-meta-diff-range: #8250df;
+ --color-prettylights-syntax-brackethighlighter-angle: #57606a;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;
+ --color-prettylights-syntax-constant-other-reference-link: #0a3069;
+ --color-fg-default: #24292f;
+ --color-fg-muted: #57606a;
+ --color-fg-subtle: #6e7781;
+ --color-canvas-default: #fff;
+ --color-canvas-subtle: #f6f8fa;
+ --color-border-default: #d0d7de;
+ --color-border-muted: #d8dee4;
+ --color-neutral-muted: #afb8c133;
+ --color-accent-fg: #0969da;
+ --color-accent-emphasis: #0969da;
+ --color-attention-subtle: #fff8c5;
+ --color-danger-fg: #cf222e;
+}
+
+.wmde-markdown {
+ -webkit-text-size-adjust: 100%;
+ word-wrap: break-word;
+ color: var(--color-fg-default);
+ background-color: var(--color-canvas-default);
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Noto Sans, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;
+ font-size: 16px;
+ line-height: 1.5;
+}
+
+.wmde-markdown details, .wmde-markdown figcaption, .wmde-markdown figure {
+ display: block;
+}
+
+.wmde-markdown summary {
+ display: list-item;
+}
+
+.wmde-markdown [hidden] {
+ display: none !important;
+}
+
+.wmde-markdown a {
+ color: var(--color-accent-fg);
+ text-decoration: none;
+ background-color: #0000;
+}
+
+.wmde-markdown a:active, .wmde-markdown a:hover {
+ outline-width: 0;
+}
+
+.wmde-markdown abbr[title] {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+ border-bottom: none;
+}
+
+.wmde-markdown b, .wmde-markdown strong {
+ font-weight: 600;
+}
+
+.wmde-markdown dfn {
+ font-style: italic;
+}
+
+.wmde-markdown h1 {
+ border-bottom: 1px solid var(--color-border-muted);
+ margin: .67em 0;
+ padding-bottom: .3em;
+ font-size: 2em;
+ font-weight: 600;
+}
+
+.wmde-markdown mark {
+ background-color: var(--color-attention-subtle);
+ color: var(--color-text-primary);
+}
+
+.wmde-markdown small {
+ font-size: 90%;
+}
+
+.wmde-markdown sub, .wmde-markdown sup {
+ position: relative;
+ vertical-align: baseline;
+ font-size: 75%;
+ line-height: 0;
+}
+
+.wmde-markdown sub {
+ bottom: -.25em;
+}
+
+.wmde-markdown sup {
+ top: -.5em;
+}
+
+.wmde-markdown img {
+ display: inline-block;
+ box-sizing: content-box;
+ background-color: var(--color-canvas-default);
+ border-style: none;
+ max-width: 100%;
+}
+
+.wmde-markdown code, .wmde-markdown kbd, .wmde-markdown pre, .wmde-markdown samp {
+ font-family: monospace;
+ font-size: 1em;
+}
+
+.wmde-markdown figure {
+ margin: 1em 40px;
+}
+
+.wmde-markdown hr {
+ box-sizing: content-box;
+ overflow: hidden;
+ border: 0;
+ border-bottom: 1px solid var(--color-border-muted);
+ background: none;
+ background-color: var(--color-border-default);
+ height: .25em;
+ margin: 24px 0;
+ padding: 0;
+}
+
+.wmde-markdown input {
+ font: inherit;
+ overflow: visible;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ margin: 0;
+}
+
+.wmde-markdown [type="button"], .wmde-markdown [type="reset"], .wmde-markdown [type="submit"] {
+ -webkit-appearance: button;
+}
+
+.wmde-markdown [type="button"]::-moz-focus-inner, .wmde-markdown [type="reset"]::-moz-focus-inner, .wmde-markdown [type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+.wmde-markdown [type="button"]:-moz-focusring, .wmde-markdown [type="reset"]:-moz-focusring, .wmde-markdown [type="submit"]:-moz-focusring {
+ outline: 1px dotted buttontext;
+}
+
+.wmde-markdown [type="checkbox"], .wmde-markdown [type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+.wmde-markdown [type="number"]::-webkit-inner-spin-button, .wmde-markdown [type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+.wmde-markdown [type="search"] {
+ -webkit-appearance: textfield;
+ outline-offset: -2px;
+}
+
+.wmde-markdown [type="search"]::-webkit-search-cancel-button, .wmde-markdown [type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+.wmde-markdown ::-webkit-input-placeholder {
+ color: inherit;
+ opacity: .54;
+}
+
+.wmde-markdown ::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ font: inherit;
+}
+
+.wmde-markdown a:hover {
+ text-decoration: underline;
+}
+
+.wmde-markdown hr:before {
+ display: table;
+ content: "";
+}
+
+.wmde-markdown hr:after {
+ display: table;
+ clear: both;
+ content: "";
+}
+
+.wmde-markdown table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ display: block;
+ width: max-content;
+ max-width: 100%;
+}
+
+.wmde-markdown td, .wmde-markdown th {
+ padding: 0;
+}
+
+.wmde-markdown details summary {
+ cursor: pointer;
+}
+
+.wmde-markdown details:not([open]) > :not(summary) {
+ display: none !important;
+}
+
+.wmde-markdown kbd {
+ display: inline-block;
+ color: var(--color-fg-default);
+ vertical-align: middle;
+ background-color: var(--color-canvas-subtle);
+ border: solid 1px var(--color-neutral-muted);
+ border-bottom-color: var(--color-neutral-muted);
+ box-shadow: inset 0 -1px 0 var(--color-neutral-muted);
+ border-radius: 6px;
+ padding: 3px 5px;
+ font: 11px / 10px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
+}
+
+.wmde-markdown h1, .wmde-markdown h2, .wmde-markdown h3, .wmde-markdown h4, .wmde-markdown h5, .wmde-markdown h6 {
+ margin-top: 24px;
+ margin-bottom: 16px;
+ font-weight: 600;
+ line-height: 1.25;
+}
+
+.wmde-markdown td, .wmde-markdown th {
+ padding: 0;
+}
+
+.wmde-markdown details summary {
+ cursor: pointer;
+}
+
+.wmde-markdown details:not([open]) > :not(summary) {
+ display: none !important;
+}
+
+.wmde-markdown kbd {
+ display: inline-block;
+ color: var(--color-fg-default);
+ vertical-align: middle;
+ background-color: var(--color-canvas-subtle);
+ border: solid 1px var(--color-neutral-muted);
+ border-bottom-color: var(--color-neutral-muted);
+ box-shadow: inset 0 -1px 0 var(--color-neutral-muted);
+ border-radius: 6px;
+ padding: 3px 5px;
+ font: 11px / 10px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
+}
+
+.wmde-markdown h1, .wmde-markdown h2, .wmde-markdown h3, .wmde-markdown h4, .wmde-markdown h5, .wmde-markdown h6 {
+ margin-top: 24px;
+ margin-bottom: 16px;
+ font-weight: 600;
+ line-height: 1.25;
+}
+
+.wmde-markdown h2 {
+ border-bottom: 1px solid var(--color-border-muted);
+ padding-bottom: .3em;
+ font-size: 1.5em;
+ font-weight: 600;
+}
+
+.wmde-markdown h3 {
+ font-size: 1.25em;
+ font-weight: 600;
+}
+
+.wmde-markdown h4 {
+ font-size: 1em;
+ font-weight: 600;
+}
+
+.wmde-markdown h5 {
+ font-size: .875em;
+ font-weight: 600;
+}
+
+.wmde-markdown h6 {
+ color: var(--color-fg-muted);
+ font-size: .85em;
+ font-weight: 600;
+}
+
+.wmde-markdown p {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+.wmde-markdown blockquote {
+ color: var(--color-fg-muted);
+ border-left: .25em solid var(--color-border-default);
+ margin: 0;
+ padding: 0 1em;
+}
+
+.wmde-markdown ul, .wmde-markdown ol {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 2em;
+}
+
+.wmde-markdown ol ol, .wmde-markdown ul ol {
+ list-style-type: lower-roman;
+}
+
+.wmde-markdown ul ul ol, .wmde-markdown ul ol ol, .wmde-markdown ol ul ol, .wmde-markdown ol ol ol {
+ list-style-type: lower-alpha;
+}
+
+.wmde-markdown dd {
+ margin-left: 0;
+}
+
+.wmde-markdown tt, .wmde-markdown code {
+ font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
+ font-size: 12px;
+}
+
+.wmde-markdown pre {
+ word-wrap: normal;
+ margin-top: 0;
+ margin-bottom: 0;
+ font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
+ font-size: 12px;
+}
+
+.wmde-markdown .octicon {
+ display: inline-block;
+ vertical-align: text-bottom;
+ fill: currentColor;
+ overflow: visible !important;
+}
+
+.wmde-markdown ::placeholder {
+ color: var(--color-fg-subtle);
+ opacity: 1;
+}
+
+.wmde-markdown input::-webkit-outer-spin-button, .wmde-markdown input::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ appearance: none;
+ margin: 0;
+}
+
+.wmde-markdown [data-catalyst] {
+ display: block;
+}
+
+.wmde-markdown:before {
+ display: table;
+ content: "";
+}
+
+.wmde-markdown:after {
+ display: table;
+ clear: both;
+ content: "";
+}
+
+.wmde-markdown > :first-child {
+ margin-top: 0 !important;
+}
+
+.wmde-markdown > :last-child {
+ margin-bottom: 0 !important;
+}
+
+.wmde-markdown a:not([href]) {
+ color: inherit;
+ text-decoration: none;
+}
+
+.wmde-markdown .absent {
+ color: var(--color-danger-fg);
+}
+
+.wmde-markdown a.anchor {
+ float: left;
+ margin-left: -20px;
+ padding-right: 4px;
+ line-height: 1;
+}
+
+.wmde-markdown .anchor:focus {
+ outline: none;
+}
+
+.wmde-markdown p, .wmde-markdown blockquote, .wmde-markdown ul, .wmde-markdown ol, .wmde-markdown dl, .wmde-markdown table, .wmde-markdown pre, .wmde-markdown details {
+ margin-top: 0;
+ margin-bottom: 16px;
+}
+
+.wmde-markdown blockquote > :first-child {
+ margin-top: 0;
+}
+
+.wmde-markdown blockquote > :last-child {
+ margin-bottom: 0;
+}
+
+.wmde-markdown sup > a:before {
+ content: "[";
+}
+
+.wmde-markdown sup > a:after {
+ content: "]";
+}
+
+.wmde-markdown h1 .octicon-link, .wmde-markdown h2 .octicon-link, .wmde-markdown h3 .octicon-link, .wmde-markdown h4 .octicon-link, .wmde-markdown h5 .octicon-link, .wmde-markdown h6 .octicon-link {
+ color: var(--color-fg-default);
+ vertical-align: middle;
+ visibility: hidden;
+}
+
+.wmde-markdown h1:hover .anchor, .wmde-markdown h2:hover .anchor, .wmde-markdown h3:hover .anchor, .wmde-markdown h4:hover .anchor, .wmde-markdown h5:hover .anchor, .wmde-markdown h6:hover .anchor {
+ text-decoration: none;
+}
+
+.wmde-markdown h1:hover .anchor .octicon-link, .wmde-markdown h2:hover .anchor .octicon-link, .wmde-markdown h3:hover .anchor .octicon-link, .wmde-markdown h4:hover .anchor .octicon-link, .wmde-markdown h5:hover .anchor .octicon-link, .wmde-markdown h6:hover .anchor .octicon-link {
+ visibility: visible;
+}
+
+.wmde-markdown h1 tt, .wmde-markdown h1 code, .wmde-markdown h2 tt, .wmde-markdown h2 code, .wmde-markdown h3 tt, .wmde-markdown h3 code, .wmde-markdown h4 tt, .wmde-markdown h4 code, .wmde-markdown h5 tt, .wmde-markdown h5 code, .wmde-markdown h6 tt, .wmde-markdown h6 code {
+ font-size: inherit;
+ padding: 0 .2em;
+}
+
+.wmde-markdown ul.no-list, .wmde-markdown ol.no-list {
+ list-style-type: none;
+ padding: 0;
+}
+
+.wmde-markdown ol[type="1"] {
+ list-style-type: decimal;
+}
+
+.wmde-markdown ol[type="a"] {
+ list-style-type: lower-alpha;
+}
+
+.wmde-markdown ol[type="i"] {
+ list-style-type: lower-roman;
+}
+
+.wmde-markdown div > ol:not([type]) {
+ list-style-type: decimal;
+}
+
+.wmde-markdown ul ul, .wmde-markdown ul ol, .wmde-markdown ol ol, .wmde-markdown ol ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.wmde-markdown li > p {
+ margin-top: 16px;
+}
+
+.wmde-markdown li + li {
+ margin-top: .25em;
+}
+
+.wmde-markdown dl {
+ padding: 0;
+}
+
+.wmde-markdown dl dt {
+ margin-top: 16px;
+ padding: 0;
+ font-size: 1em;
+ font-style: italic;
+ font-weight: 600;
+}
+
+.wmde-markdown dl dd {
+ margin-bottom: 16px;
+ padding: 0 16px;
+}
+
+.wmde-markdown table th {
+ font-weight: 600;
+}
+
+.wmde-markdown table th, .wmde-markdown table td {
+ border: 1px solid var(--color-border-default);
+ padding: 6px 13px;
+}
+
+.wmde-markdown table tr {
+ background-color: var(--color-canvas-default);
+ border-top: 1px solid var(--color-border-muted);
+}
+
+.wmde-markdown table tr:nth-child(2n) {
+ background-color: var(--color-canvas-subtle);
+}
+
+.wmde-markdown table img {
+ background-color: #0000;
+}
+
+.wmde-markdown img[align="right"] {
+ padding-left: 20px;
+}
+
+.wmde-markdown img[align="left"] {
+ padding-right: 20px;
+}
+
+.wmde-markdown .emoji {
+ vertical-align: text-top;
+ background-color: #0000;
+ max-width: none;
+}
+
+.wmde-markdown span.frame {
+ display: block;
+ overflow: hidden;
+}
+
+.wmde-markdown span.frame > span {
+ display: block;
+ float: left;
+ overflow: hidden;
+ border: 1px solid var(--color-border-default);
+ width: auto;
+ margin: 13px 0 0;
+ padding: 7px;
+}
+
+.wmde-markdown span.frame span img {
+ display: block;
+ float: left;
+}
+
+.wmde-markdown span.frame span span {
+ display: block;
+ clear: both;
+ color: var(--color-fg-default);
+ padding: 5px 0 0;
+}
+
+.wmde-markdown span.align-center {
+ display: block;
+ overflow: hidden;
+ clear: both;
+}
+
+.wmde-markdown span.align-center > span {
+ display: block;
+ overflow: hidden;
+ text-align: center;
+ margin: 13px auto 0;
+}
+
+.wmde-markdown span.align-center span img {
+ text-align: center;
+ margin: 0 auto;
+}
+
+.wmde-markdown span.align-right {
+ display: block;
+ overflow: hidden;
+ clear: both;
+}
+
+.wmde-markdown span.align-right > span {
+ display: block;
+ overflow: hidden;
+ text-align: right;
+ margin: 13px 0 0;
+}
+
+.wmde-markdown span.align-right span img {
+ text-align: right;
+ margin: 0;
+}
+
+.wmde-markdown span.float-left {
+ display: block;
+ float: left;
+ overflow: hidden;
+ margin-right: 13px;
+}
+
+.wmde-markdown span.float-left span {
+ margin: 13px 0 0;
+}
+
+.wmde-markdown span.float-right {
+ display: block;
+ float: right;
+ overflow: hidden;
+ margin-left: 13px;
+}
+
+.wmde-markdown span.float-right > span {
+ display: block;
+ overflow: hidden;
+ text-align: right;
+ margin: 13px auto 0;
+}
+
+.wmde-markdown code, .wmde-markdown tt {
+ background-color: var(--color-neutral-muted);
+ border-radius: 6px;
+ margin: 0;
+ padding: .2em .4em;
+ font-size: 85%;
+}
+
+.wmde-markdown code br, .wmde-markdown tt br {
+ display: none;
+}
+
+.wmde-markdown del code {
+ text-decoration: inherit;
+}
+
+.wmde-markdown pre code {
+ font-size: 100%;
+}
+
+.wmde-markdown pre > code {
+ word-break: normal;
+ white-space: pre;
+ background: none;
+ border: 0;
+ margin: 0;
+ padding: 0;
+}
+
+.wmde-markdown pre {
+ background-color: var(--color-canvas-subtle);
+ border-radius: 6px;
+ font-size: 85%;
+ line-height: 1.45;
+}
+
+.wmde-markdown pre code, .wmde-markdown pre tt {
+ display: inline;
+ max-width: auto;
+ overflow: visible;
+ line-height: inherit;
+ word-wrap: normal;
+ background-color: #0000;
+ border: 0;
+ margin: 0;
+ padding: 0;
+}
+
+.wmde-markdown pre > code {
+ overflow: auto;
+ display: block;
+ padding: 16px;
+}
+
+.wmde-markdown pre > code::-webkit-scrollbar {
+ background: none;
+ width: 8px;
+ height: 8px;
+}
+
+.wmde-markdown pre > code::-webkit-scrollbar-thumb {
+ background: var(--color-fg-muted);
+ border-radius: 10px;
+}
+
+.wmde-markdown .csv-data td, .wmde-markdown .csv-data th {
+ overflow: hidden;
+ text-align: left;
+ white-space: nowrap;
+ padding: 5px;
+ font-size: 12px;
+ line-height: 1;
+}
+
+.wmde-markdown .csv-data .blob-num {
+ text-align: right;
+ background: var(--color-canvas-default);
+ border: 0;
+ padding: 10px 8px 9px;
+}
+
+.wmde-markdown .csv-data tr {
+ border-top: 0;
+}
+
+.wmde-markdown .csv-data th {
+ background: var(--color-canvas-subtle);
+ border-top: 0;
+ font-weight: 600;
+}
+
+.wmde-markdown .footnotes {
+ color: var(--color-fg-muted);
+ border-top: 1px solid var(--color-border-default);
+ font-size: 12px;
+}
+
+.wmde-markdown .footnotes ol {
+ padding-left: 16px;
+}
+
+.wmde-markdown .footnotes li {
+ position: relative;
+}
+
+.wmde-markdown .footnotes li:target:before {
+ position: absolute;
+ pointer-events: none;
+ content: "";
+ border: 2px solid var(--color-accent-emphasis);
+ border-radius: 6px;
+ inset: -8px -8px -8px -24px;
+}
+
+.wmde-markdown .footnotes li:target {
+ color: var(--color-fg-default);
+}
+
+.wmde-markdown .footnotes .data-footnote-backref g-emoji {
+ font-family: monospace;
+}
+
+.wmde-markdown .task-list-item {
+ list-style-type: none;
+}
+
+.wmde-markdown .task-list-item label {
+ font-weight: 400;
+}
+
+.wmde-markdown .task-list-item.enabled label {
+ cursor: pointer;
+}
+
+.wmde-markdown .task-list-item + .wmde-markdown .task-list-item {
+ margin-top: 3px;
+}
+
+.wmde-markdown .task-list-item .handle {
+ display: none;
+}
+
+.wmde-markdown .task-list-item-checkbox, .wmde-markdown .contains-task-list input[type="checkbox"] {
+ vertical-align: middle;
+ margin: 0 .2em .25em -1.6em;
+}
+
+.wmde-markdown .contains-task-list:dir(rtl) .task-list-item-checkbox, .wmde-markdown .contains-task-list:dir(rtl) input[type="checkbox"] {
+ margin: 0 -1.6em .25em .2em;
+}
+
+.wmde-markdown ::-webkit-calendar-picker-indicator {
+ filter: invert(50%);
+}
+
+.wmde-markdown pre {
+ position: relative;
+}
+
+.wmde-markdown pre .copied {
+ visibility: hidden;
+ display: flex;
+ position: absolute;
+ cursor: pointer;
+ color: var(--color-fg-default);
+ background: var(--color-border-default);
+ transition: all .3s;
+ border-radius: 5px;
+ padding: 6px;
+ font-size: 12px;
+ top: 6px;
+ right: 6px;
+}
+
+.wmde-markdown pre .copied .octicon-copy {
+ display: block;
+}
+
+.wmde-markdown pre .copied .octicon-check {
+ display: none;
+}
+
+.wmde-markdown pre:hover .copied {
+ visibility: visible;
+}
+
+.wmde-markdown pre:hover .copied:hover {
+ background: var(--color-prettylights-syntax-entity-tag);
+ color: var(--color-canvas-default);
+}
+
+.wmde-markdown pre:hover .copied:active, .wmde-markdown pre .copied.active {
+ background: var(--color-copied-active-bg);
+ color: var(--color-canvas-default);
+}
+
+.wmde-markdown pre .active .octicon-copy {
+ display: none;
+}
+
+.wmde-markdown pre .active .octicon-check {
+ display: block;
+}
+
+.wmde-markdown .markdown-alert {
+ color: inherit;
+ border-left: .25em solid var(--borderColor-default, var(--color-border-default));
+ margin-bottom: 16px;
+ padding: .5rem 1em;
+}
+
+.wmde-markdown .markdown-alert > :last-child {
+ margin-bottom: 0 !important;
+}
+
+.wmde-markdown .markdown-alert .markdown-alert-title {
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 1;
+}
+
+.wmde-markdown .markdown-alert .markdown-alert-title svg.octicon {
+ margin-right: var(--base-size-8, 8px) !important;
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-note {
+ border-left-color: var(--borderColor-accent-emphasis, var(--color-accent-emphasis));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-note .markdown-alert-title {
+ color: var(--fgColor-accent, var(--color-accent-fg));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-tip {
+ border-left-color: var(--borderColor-success-emphasis, var(--color-success-emphasis));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-tip .markdown-alert-title {
+ color: var(--fgColor-success, var(--color-success-fg));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-important {
+ border-left-color: var(--borderColor-done-emphasis, var(--color-done-emphasis));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-important .markdown-alert-title {
+ color: var(--fgColor-done, var(--color-done-fg));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-warning {
+ border-left-color: var(--borderColor-attention-emphasis, var(--color-attention-emphasis));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-warning .markdown-alert-title {
+ color: var(--fgColor-attention, var(--color-attention-fg));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-caution {
+ border-left-color: var(--borderColor-danger-emphasis, var(--color-danger-emphasis));
+}
+
+.wmde-markdown .markdown-alert.markdown-alert-caution .markdown-alert-title {
+ color: var(--fgColor-danger, var(--color-danger-fg));
+}
+
+.wmde-markdown .highlight-line {
+ background-color: var(--color-neutral-muted);
+}
+
+.wmde-markdown .code-line.line-number:before {
+ display: inline-block;
+ text-align: right;
+ color: var(--color-fg-subtle);
+ content: attr(line);
+ white-space: nowrap;
+ width: 1rem;
+ margin-right: 16px;
+}
+
+.wmde-markdown .token.comment, .wmde-markdown .token.prolog, .wmde-markdown .token.doctype, .wmde-markdown .token.cdata {
+ color: var(--color-prettylights-syntax-comment);
+}
+
+.wmde-markdown .token.namespace {
+ opacity: .7;
+}
+
+.wmde-markdown .token.property, .wmde-markdown .token.tag, .wmde-markdown .token.selector, .wmde-markdown .token.constant, .wmde-markdown .token.symbol, .wmde-markdown .token.deleted {
+ color: var(--color-prettylights-syntax-entity-tag);
+}
+
+.wmde-markdown .token.maybe-class-name {
+ color: var(--color-prettylights-syntax-variable);
+}
+
+.wmde-markdown .token.property-access, .wmde-markdown .token.operator, .wmde-markdown .token.boolean, .wmde-markdown .token.number, .wmde-markdown .token.selector .token.class, .wmde-markdown .token.attr-name, .wmde-markdown .token.string, .wmde-markdown .token.char, .wmde-markdown .token.builtin {
+ color: var(--color-prettylights-syntax-constant);
+}
+
+.wmde-markdown .token.deleted {
+ color: var(--color-prettylights-syntax-markup-deleted-text);
+}
+
+.wmde-markdown .code-line .token.deleted {
+ background-color: var(--color-prettylights-syntax-markup-deleted-bg);
+}
+
+.wmde-markdown .token.inserted {
+ color: var(--color-prettylights-syntax-markup-inserted-text);
+}
+
+.wmde-markdown .code-line .token.inserted {
+ background-color: var(--color-prettylights-syntax-markup-inserted-bg);
+}
+
+.wmde-markdown .token.variable {
+ color: var(--color-prettylights-syntax-constant);
+}
+
+.wmde-markdown .token.entity, .wmde-markdown .token.url, .wmde-markdown .language-css .token.string, .wmde-markdown .style .token.string, .wmde-markdown .token.color, .wmde-markdown .token.atrule, .wmde-markdown .token.attr-value, .wmde-markdown .token.function, .wmde-markdown .token.class-name {
+ color: var(--color-prettylights-syntax-string);
+}
+
+.wmde-markdown .token.rule, .wmde-markdown .token.regex, .wmde-markdown .token.important, .wmde-markdown .token.keyword {
+ color: var(--color-prettylights-syntax-keyword);
+}
+
+.wmde-markdown .token.coord {
+ color: var(--color-prettylights-syntax-meta-diff-range);
+}
+
+.wmde-markdown .token.important, .wmde-markdown .token.bold {
+ font-weight: bold;
+}
+
+.wmde-markdown .token.italic {
+ font-style: italic;
+}
+
+.wmde-markdown .token.entity {
+ cursor: help;
+}
diff --git a/react_demo/priv/react/dev/server.js b/react_demo/priv/react/dev/server.js
new file mode 100644
index 0000000..92e580b
--- /dev/null
+++ b/react_demo/priv/react/dev/server.js
@@ -0,0 +1,86451 @@
+// @bun
+var __create = Object.create;
+var __getProtoOf = Object.getPrototypeOf;
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __toESM = (mod, isNodeMode, target) => {
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
+ for (let key of __getOwnPropNames(mod))
+ if (!__hasOwnProp.call(to, key))
+ __defProp(to, key, {
+ get: () => mod[key],
+ enumerable: true
+ });
+ return to;
+};
+var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, {
+ get: all[name],
+ enumerable: true,
+ configurable: true,
+ set: (newValue) => all[name] = () => newValue
+ });
+};
+var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
+var __require = import.meta.require;
+
+// node_modules/react/cjs/react.development.js
+var require_react_development = __commonJS((exports, module) => {
+ (function() {
+ function defineDeprecationWarning(methodName, info) {
+ Object.defineProperty(Component.prototype, methodName, {
+ get: function() {
+ console.warn("%s(...) is deprecated in plain JavaScript React classes. %s", info[0], info[1]);
+ }
+ });
+ }
+ function getIteratorFn(maybeIterable) {
+ if (maybeIterable === null || typeof maybeIterable !== "object")
+ return null;
+ maybeIterable = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable["@@iterator"];
+ return typeof maybeIterable === "function" ? maybeIterable : null;
+ }
+ function warnNoop(publicInstance, callerName) {
+ publicInstance = (publicInstance = publicInstance.constructor) && (publicInstance.displayName || publicInstance.name) || "ReactClass";
+ var warningKey = publicInstance + "." + callerName;
+ didWarnStateUpdateForUnmountedComponent[warningKey] || (console.error("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.", callerName, publicInstance), didWarnStateUpdateForUnmountedComponent[warningKey] = true);
+ }
+ function Component(props, context, updater) {
+ this.props = props;
+ this.context = context;
+ this.refs = emptyObject;
+ this.updater = updater || ReactNoopUpdateQueue;
+ }
+ function ComponentDummy() {
+ }
+ function PureComponent(props, context, updater) {
+ this.props = props;
+ this.context = context;
+ this.refs = emptyObject;
+ this.updater = updater || ReactNoopUpdateQueue;
+ }
+ function testStringCoercion(value) {
+ return "" + value;
+ }
+ function checkKeyStringCoercion(value) {
+ try {
+ testStringCoercion(value);
+ var JSCompiler_inline_result = false;
+ } catch (e) {
+ JSCompiler_inline_result = true;
+ }
+ if (JSCompiler_inline_result) {
+ JSCompiler_inline_result = console;
+ var JSCompiler_temp_const = JSCompiler_inline_result.error;
+ var JSCompiler_inline_result$jscomp$0 = typeof Symbol === "function" && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
+ JSCompiler_temp_const.call(JSCompiler_inline_result, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", JSCompiler_inline_result$jscomp$0);
+ return testStringCoercion(value);
+ }
+ }
+ function getComponentNameFromType(type) {
+ if (type == null)
+ return null;
+ if (typeof type === "function")
+ return type.$$typeof === REACT_CLIENT_REFERENCE$2 ? null : type.displayName || type.name || null;
+ if (typeof type === "string")
+ return type;
+ switch (type) {
+ case REACT_FRAGMENT_TYPE:
+ return "Fragment";
+ case REACT_PORTAL_TYPE:
+ return "Portal";
+ case REACT_PROFILER_TYPE:
+ return "Profiler";
+ case REACT_STRICT_MODE_TYPE:
+ return "StrictMode";
+ case REACT_SUSPENSE_TYPE:
+ return "Suspense";
+ case REACT_SUSPENSE_LIST_TYPE:
+ return "SuspenseList";
+ }
+ if (typeof type === "object")
+ switch (typeof type.tag === "number" && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof) {
+ case REACT_CONTEXT_TYPE:
+ return (type.displayName || "Context") + ".Provider";
+ case REACT_CONSUMER_TYPE:
+ return (type._context.displayName || "Context") + ".Consumer";
+ case REACT_FORWARD_REF_TYPE:
+ var innerType = type.render;
+ type = type.displayName;
+ type || (type = innerType.displayName || innerType.name || "", type = type !== "" ? "ForwardRef(" + type + ")" : "ForwardRef");
+ return type;
+ case REACT_MEMO_TYPE:
+ return innerType = type.displayName || null, innerType !== null ? innerType : getComponentNameFromType(type.type) || "Memo";
+ case REACT_LAZY_TYPE:
+ innerType = type._payload;
+ type = type._init;
+ try {
+ return getComponentNameFromType(type(innerType));
+ } catch (x) {
+ }
+ }
+ return null;
+ }
+ function isValidElementType(type) {
+ return typeof type === "string" || typeof type === "function" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE || typeof type === "object" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) ? true : false;
+ }
+ function disabledLog() {
+ }
+ function disableLogs() {
+ if (disabledDepth === 0) {
+ prevLog = console.log;
+ prevInfo = console.info;
+ prevWarn = console.warn;
+ prevError = console.error;
+ prevGroup = console.group;
+ prevGroupCollapsed = console.groupCollapsed;
+ prevGroupEnd = console.groupEnd;
+ var props = {
+ configurable: true,
+ enumerable: true,
+ value: disabledLog,
+ writable: true
+ };
+ Object.defineProperties(console, {
+ info: props,
+ log: props,
+ warn: props,
+ error: props,
+ group: props,
+ groupCollapsed: props,
+ groupEnd: props
+ });
+ }
+ disabledDepth++;
+ }
+ function reenableLogs() {
+ disabledDepth--;
+ if (disabledDepth === 0) {
+ var props = { configurable: true, enumerable: true, writable: true };
+ Object.defineProperties(console, {
+ log: assign({}, props, { value: prevLog }),
+ info: assign({}, props, { value: prevInfo }),
+ warn: assign({}, props, { value: prevWarn }),
+ error: assign({}, props, { value: prevError }),
+ group: assign({}, props, { value: prevGroup }),
+ groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
+ groupEnd: assign({}, props, { value: prevGroupEnd })
+ });
+ }
+ 0 > disabledDepth && console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue.");
+ }
+ function describeBuiltInComponentFrame(name) {
+ if (prefix === undefined)
+ try {
+ throw Error();
+ } catch (x) {
+ var match = x.stack.trim().match(/\n( *(at )?)/);
+ prefix = match && match[1] || "";
+ suffix = -1 < x.stack.indexOf(`
+ at`) ? " (
)" : -1 < x.stack.indexOf("@") ? "@unknown:0:0" : "";
+ }
+ return `
+` + prefix + name + suffix;
+ }
+ function describeNativeComponentFrame(fn, construct) {
+ if (!fn || reentry)
+ return "";
+ var frame = componentFrameCache.get(fn);
+ if (frame !== undefined)
+ return frame;
+ reentry = true;
+ frame = Error.prepareStackTrace;
+ Error.prepareStackTrace = undefined;
+ var previousDispatcher = null;
+ previousDispatcher = ReactSharedInternals.H;
+ ReactSharedInternals.H = null;
+ disableLogs();
+ try {
+ var RunInRootFrame = {
+ DetermineComponentFrameRoot: function() {
+ try {
+ if (construct) {
+ var Fake = function() {
+ throw Error();
+ };
+ Object.defineProperty(Fake.prototype, "props", {
+ set: function() {
+ throw Error();
+ }
+ });
+ if (typeof Reflect === "object" && Reflect.construct) {
+ try {
+ Reflect.construct(Fake, []);
+ } catch (x) {
+ var control = x;
+ }
+ Reflect.construct(fn, [], Fake);
+ } else {
+ try {
+ Fake.call();
+ } catch (x$0) {
+ control = x$0;
+ }
+ fn.call(Fake.prototype);
+ }
+ } else {
+ try {
+ throw Error();
+ } catch (x$1) {
+ control = x$1;
+ }
+ (Fake = fn()) && typeof Fake.catch === "function" && Fake.catch(function() {
+ });
+ }
+ } catch (sample) {
+ if (sample && control && typeof sample.stack === "string")
+ return [sample.stack, control.stack];
+ }
+ return [null, null];
+ }
+ };
+ RunInRootFrame.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot";
+ var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, "name");
+ namePropDescriptor && namePropDescriptor.configurable && Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, "name", { value: "DetermineComponentFrameRoot" });
+ var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), sampleStack = _RunInRootFrame$Deter[0], controlStack = _RunInRootFrame$Deter[1];
+ if (sampleStack && controlStack) {
+ var sampleLines = sampleStack.split(`
+`), controlLines = controlStack.split(`
+`);
+ for (_RunInRootFrame$Deter = namePropDescriptor = 0;namePropDescriptor < sampleLines.length && !sampleLines[namePropDescriptor].includes("DetermineComponentFrameRoot"); )
+ namePropDescriptor++;
+ for (;_RunInRootFrame$Deter < controlLines.length && !controlLines[_RunInRootFrame$Deter].includes("DetermineComponentFrameRoot"); )
+ _RunInRootFrame$Deter++;
+ if (namePropDescriptor === sampleLines.length || _RunInRootFrame$Deter === controlLines.length)
+ for (namePropDescriptor = sampleLines.length - 1, _RunInRootFrame$Deter = controlLines.length - 1;1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter && sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]; )
+ _RunInRootFrame$Deter--;
+ for (;1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter; namePropDescriptor--, _RunInRootFrame$Deter--)
+ if (sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
+ if (namePropDescriptor !== 1 || _RunInRootFrame$Deter !== 1) {
+ do
+ if (namePropDescriptor--, _RunInRootFrame$Deter--, 0 > _RunInRootFrame$Deter || sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
+ var _frame = `
+` + sampleLines[namePropDescriptor].replace(" at new ", " at ");
+ fn.displayName && _frame.includes("") && (_frame = _frame.replace("", fn.displayName));
+ typeof fn === "function" && componentFrameCache.set(fn, _frame);
+ return _frame;
+ }
+ while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
+ }
+ break;
+ }
+ }
+ } finally {
+ reentry = false, ReactSharedInternals.H = previousDispatcher, reenableLogs(), Error.prepareStackTrace = frame;
+ }
+ sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "") ? describeBuiltInComponentFrame(sampleLines) : "";
+ typeof fn === "function" && componentFrameCache.set(fn, sampleLines);
+ return sampleLines;
+ }
+ function describeUnknownElementTypeFrameInDEV(type) {
+ if (type == null)
+ return "";
+ if (typeof type === "function") {
+ var prototype = type.prototype;
+ return describeNativeComponentFrame(type, !(!prototype || !prototype.isReactComponent));
+ }
+ if (typeof type === "string")
+ return describeBuiltInComponentFrame(type);
+ switch (type) {
+ case REACT_SUSPENSE_TYPE:
+ return describeBuiltInComponentFrame("Suspense");
+ case REACT_SUSPENSE_LIST_TYPE:
+ return describeBuiltInComponentFrame("SuspenseList");
+ }
+ if (typeof type === "object")
+ switch (type.$$typeof) {
+ case REACT_FORWARD_REF_TYPE:
+ return type = describeNativeComponentFrame(type.render, false), type;
+ case REACT_MEMO_TYPE:
+ return describeUnknownElementTypeFrameInDEV(type.type);
+ case REACT_LAZY_TYPE:
+ prototype = type._payload;
+ type = type._init;
+ try {
+ return describeUnknownElementTypeFrameInDEV(type(prototype));
+ } catch (x) {
+ }
+ }
+ return "";
+ }
+ function getOwner() {
+ var dispatcher = ReactSharedInternals.A;
+ return dispatcher === null ? null : dispatcher.getOwner();
+ }
+ function hasValidKey(config) {
+ if (hasOwnProperty.call(config, "key")) {
+ var getter = Object.getOwnPropertyDescriptor(config, "key").get;
+ if (getter && getter.isReactWarning)
+ return false;
+ }
+ return config.key !== undefined;
+ }
+ function defineKeyPropWarningGetter(props, displayName) {
+ function warnAboutAccessingKey() {
+ specialPropKeyWarningShown || (specialPropKeyWarningShown = true, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", displayName));
+ }
+ warnAboutAccessingKey.isReactWarning = true;
+ Object.defineProperty(props, "key", {
+ get: warnAboutAccessingKey,
+ configurable: true
+ });
+ }
+ function elementRefGetterWithDeprecationWarning() {
+ var componentName = getComponentNameFromType(this.type);
+ didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = true, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."));
+ componentName = this.props.ref;
+ return componentName !== undefined ? componentName : null;
+ }
+ function ReactElement(type, key, self2, source, owner, props) {
+ self2 = props.ref;
+ type = {
+ $$typeof: REACT_ELEMENT_TYPE,
+ type,
+ key,
+ props,
+ _owner: owner
+ };
+ (self2 !== undefined ? self2 : null) !== null ? Object.defineProperty(type, "ref", {
+ enumerable: false,
+ get: elementRefGetterWithDeprecationWarning
+ }) : Object.defineProperty(type, "ref", { enumerable: false, value: null });
+ type._store = {};
+ Object.defineProperty(type._store, "validated", {
+ configurable: false,
+ enumerable: false,
+ writable: true,
+ value: 0
+ });
+ Object.defineProperty(type, "_debugInfo", {
+ configurable: false,
+ enumerable: false,
+ writable: true,
+ value: null
+ });
+ Object.freeze && (Object.freeze(type.props), Object.freeze(type));
+ return type;
+ }
+ function cloneAndReplaceKey(oldElement, newKey) {
+ newKey = ReactElement(oldElement.type, newKey, undefined, undefined, oldElement._owner, oldElement.props);
+ newKey._store.validated = oldElement._store.validated;
+ return newKey;
+ }
+ function validateChildKeys(node, parentType) {
+ if (typeof node === "object" && node && node.$$typeof !== REACT_CLIENT_REFERENCE) {
+ if (isArrayImpl(node))
+ for (var i = 0;i < node.length; i++) {
+ var child = node[i];
+ isValidElement(child) && validateExplicitKey(child, parentType);
+ }
+ else if (isValidElement(node))
+ node._store && (node._store.validated = 1);
+ else if (i = getIteratorFn(node), typeof i === "function" && i !== node.entries && (i = i.call(node), i !== node))
+ for (;!(node = i.next()).done; )
+ isValidElement(node.value) && validateExplicitKey(node.value, parentType);
+ }
+ }
+ function isValidElement(object) {
+ return typeof object === "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
+ }
+ function validateExplicitKey(element, parentType) {
+ if (element._store && !element._store.validated && element.key == null && (element._store.validated = 1, parentType = getCurrentComponentErrorInfo(parentType), !ownerHasKeyUseWarning[parentType])) {
+ ownerHasKeyUseWarning[parentType] = true;
+ var childOwner = "";
+ element && element._owner != null && element._owner !== getOwner() && (childOwner = null, typeof element._owner.tag === "number" ? childOwner = getComponentNameFromType(element._owner.type) : typeof element._owner.name === "string" && (childOwner = element._owner.name), childOwner = " It was passed a child from " + childOwner + ".");
+ var prevGetCurrentStack = ReactSharedInternals.getCurrentStack;
+ ReactSharedInternals.getCurrentStack = function() {
+ var stack = describeUnknownElementTypeFrameInDEV(element.type);
+ prevGetCurrentStack && (stack += prevGetCurrentStack() || "");
+ return stack;
+ };
+ console.error('Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.', parentType, childOwner);
+ ReactSharedInternals.getCurrentStack = prevGetCurrentStack;
+ }
+ }
+ function getCurrentComponentErrorInfo(parentType) {
+ var info = "", owner = getOwner();
+ owner && (owner = getComponentNameFromType(owner.type)) && (info = `
+
+Check the render method of \`` + owner + "`.");
+ info || (parentType = getComponentNameFromType(parentType)) && (info = `
+
+Check the top-level render call using <` + parentType + ">.");
+ return info;
+ }
+ function escape(key) {
+ var escaperLookup = { "=": "=0", ":": "=2" };
+ return "$" + key.replace(/[=:]/g, function(match) {
+ return escaperLookup[match];
+ });
+ }
+ function getElementKey(element, index) {
+ return typeof element === "object" && element !== null && element.key != null ? (checkKeyStringCoercion(element.key), escape("" + element.key)) : index.toString(36);
+ }
+ function noop$1() {
+ }
+ function resolveThenable(thenable) {
+ switch (thenable.status) {
+ case "fulfilled":
+ return thenable.value;
+ case "rejected":
+ throw thenable.reason;
+ default:
+ switch (typeof thenable.status === "string" ? thenable.then(noop$1, noop$1) : (thenable.status = "pending", thenable.then(function(fulfilledValue) {
+ thenable.status === "pending" && (thenable.status = "fulfilled", thenable.value = fulfilledValue);
+ }, function(error) {
+ thenable.status === "pending" && (thenable.status = "rejected", thenable.reason = error);
+ })), thenable.status) {
+ case "fulfilled":
+ return thenable.value;
+ case "rejected":
+ throw thenable.reason;
+ }
+ }
+ throw thenable;
+ }
+ function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
+ var type = typeof children;
+ if (type === "undefined" || type === "boolean")
+ children = null;
+ var invokeCallback = false;
+ if (children === null)
+ invokeCallback = true;
+ else
+ switch (type) {
+ case "bigint":
+ case "string":
+ case "number":
+ invokeCallback = true;
+ break;
+ case "object":
+ switch (children.$$typeof) {
+ case REACT_ELEMENT_TYPE:
+ case REACT_PORTAL_TYPE:
+ invokeCallback = true;
+ break;
+ case REACT_LAZY_TYPE:
+ return invokeCallback = children._init, mapIntoArray(invokeCallback(children._payload), array, escapedPrefix, nameSoFar, callback);
+ }
+ }
+ if (invokeCallback) {
+ invokeCallback = children;
+ callback = callback(invokeCallback);
+ var childKey = nameSoFar === "" ? "." + getElementKey(invokeCallback, 0) : nameSoFar;
+ isArrayImpl(callback) ? (escapedPrefix = "", childKey != null && (escapedPrefix = childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), mapIntoArray(callback, array, escapedPrefix, "", function(c) {
+ return c;
+ })) : callback != null && (isValidElement(callback) && (callback.key != null && (invokeCallback && invokeCallback.key === callback.key || checkKeyStringCoercion(callback.key)), escapedPrefix = cloneAndReplaceKey(callback, escapedPrefix + (callback.key == null || invokeCallback && invokeCallback.key === callback.key ? "" : ("" + callback.key).replace(userProvidedKeyEscapeRegex, "$&/") + "/") + childKey), nameSoFar !== "" && invokeCallback != null && isValidElement(invokeCallback) && invokeCallback.key == null && invokeCallback._store && !invokeCallback._store.validated && (escapedPrefix._store.validated = 2), callback = escapedPrefix), array.push(callback));
+ return 1;
+ }
+ invokeCallback = 0;
+ childKey = nameSoFar === "" ? "." : nameSoFar + ":";
+ if (isArrayImpl(children))
+ for (var i = 0;i < children.length; i++)
+ nameSoFar = children[i], type = childKey + getElementKey(nameSoFar, i), invokeCallback += mapIntoArray(nameSoFar, array, escapedPrefix, type, callback);
+ else if (i = getIteratorFn(children), typeof i === "function")
+ for (i === children.entries && (didWarnAboutMaps || console.warn("Using Maps as children is not supported. Use an array of keyed ReactElements instead."), didWarnAboutMaps = true), children = i.call(children), i = 0;!(nameSoFar = children.next()).done; )
+ nameSoFar = nameSoFar.value, type = childKey + getElementKey(nameSoFar, i++), invokeCallback += mapIntoArray(nameSoFar, array, escapedPrefix, type, callback);
+ else if (type === "object") {
+ if (typeof children.then === "function")
+ return mapIntoArray(resolveThenable(children), array, escapedPrefix, nameSoFar, callback);
+ array = String(children);
+ throw Error("Objects are not valid as a React child (found: " + (array === "[object Object]" ? "object with keys {" + Object.keys(children).join(", ") + "}" : array) + "). If you meant to render a collection of children, use an array instead.");
+ }
+ return invokeCallback;
+ }
+ function mapChildren(children, func, context) {
+ if (children == null)
+ return children;
+ var result = [], count = 0;
+ mapIntoArray(children, result, "", "", function(child) {
+ return func.call(context, child, count++);
+ });
+ return result;
+ }
+ function lazyInitializer(payload) {
+ if (payload._status === -1) {
+ var ctor = payload._result;
+ ctor = ctor();
+ ctor.then(function(moduleObject) {
+ if (payload._status === 0 || payload._status === -1)
+ payload._status = 1, payload._result = moduleObject;
+ }, function(error) {
+ if (payload._status === 0 || payload._status === -1)
+ payload._status = 2, payload._result = error;
+ });
+ payload._status === -1 && (payload._status = 0, payload._result = ctor);
+ }
+ if (payload._status === 1)
+ return ctor = payload._result, ctor === undefined && console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s
+
+Your code should look like:
+ const MyComponent = lazy(() => import('./MyComponent'))
+
+Did you accidentally put curly braces around the import?`, ctor), "default" in ctor || console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s
+
+Your code should look like:
+ const MyComponent = lazy(() => import('./MyComponent'))`, ctor), ctor.default;
+ throw payload._result;
+ }
+ function resolveDispatcher() {
+ var dispatcher = ReactSharedInternals.H;
+ dispatcher === null && console.error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
+1. You might have mismatching versions of React and the renderer (such as React DOM)
+2. You might be breaking the Rules of Hooks
+3. You might have more than one copy of React in the same app
+See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`);
+ return dispatcher;
+ }
+ function noop() {
+ }
+ function enqueueTask(task) {
+ if (enqueueTaskImpl === null)
+ try {
+ var requireString = ("require" + Math.random()).slice(0, 7);
+ enqueueTaskImpl = (module && module[requireString]).call(module, "timers").setImmediate;
+ } catch (_err) {
+ enqueueTaskImpl = function(callback) {
+ didWarnAboutMessageChannel === false && (didWarnAboutMessageChannel = true, typeof MessageChannel === "undefined" && console.error("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));
+ var channel = new MessageChannel;
+ channel.port1.onmessage = callback;
+ channel.port2.postMessage(undefined);
+ };
+ }
+ return enqueueTaskImpl(task);
+ }
+ function aggregateErrors(errors) {
+ return 1 < errors.length && typeof AggregateError === "function" ? new AggregateError(errors) : errors[0];
+ }
+ function popActScope(prevActQueue, prevActScopeDepth) {
+ prevActScopeDepth !== actScopeDepth - 1 && console.error("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. ");
+ actScopeDepth = prevActScopeDepth;
+ }
+ function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {
+ var queue = ReactSharedInternals.actQueue;
+ if (queue !== null)
+ if (queue.length !== 0)
+ try {
+ flushActQueue(queue);
+ enqueueTask(function() {
+ return recursivelyFlushAsyncActWork(returnValue, resolve, reject);
+ });
+ return;
+ } catch (error) {
+ ReactSharedInternals.thrownErrors.push(error);
+ }
+ else
+ ReactSharedInternals.actQueue = null;
+ 0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve(returnValue);
+ }
+ function flushActQueue(queue) {
+ if (!isFlushing) {
+ isFlushing = true;
+ var i = 0;
+ try {
+ for (;i < queue.length; i++) {
+ var callback = queue[i];
+ do {
+ ReactSharedInternals.didUsePromise = false;
+ var continuation = callback(false);
+ if (continuation !== null) {
+ if (ReactSharedInternals.didUsePromise) {
+ queue[i] = callback;
+ queue.splice(0, i);
+ return;
+ }
+ callback = continuation;
+ } else
+ break;
+ } while (1);
+ }
+ queue.length = 0;
+ } catch (error) {
+ queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);
+ } finally {
+ isFlushing = false;
+ }
+ }
+ }
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== "undefined" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart === "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+ var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler");
+ Symbol.for("react.provider");
+ var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen"), MAYBE_ITERATOR_SYMBOL = Symbol.iterator, didWarnStateUpdateForUnmountedComponent = {}, ReactNoopUpdateQueue = {
+ isMounted: function() {
+ return false;
+ },
+ enqueueForceUpdate: function(publicInstance) {
+ warnNoop(publicInstance, "forceUpdate");
+ },
+ enqueueReplaceState: function(publicInstance) {
+ warnNoop(publicInstance, "replaceState");
+ },
+ enqueueSetState: function(publicInstance) {
+ warnNoop(publicInstance, "setState");
+ }
+ }, assign = Object.assign, emptyObject = {};
+ Object.freeze(emptyObject);
+ Component.prototype.isReactComponent = {};
+ Component.prototype.setState = function(partialState, callback) {
+ if (typeof partialState !== "object" && typeof partialState !== "function" && partialState != null)
+ throw Error("takes an object of state variables to update or a function which returns an object of state variables.");
+ this.updater.enqueueSetState(this, partialState, callback, "setState");
+ };
+ Component.prototype.forceUpdate = function(callback) {
+ this.updater.enqueueForceUpdate(this, callback, "forceUpdate");
+ };
+ var deprecatedAPIs = {
+ isMounted: [
+ "isMounted",
+ "Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."
+ ],
+ replaceState: [
+ "replaceState",
+ "Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."
+ ]
+ }, fnName;
+ for (fnName in deprecatedAPIs)
+ deprecatedAPIs.hasOwnProperty(fnName) && defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
+ ComponentDummy.prototype = Component.prototype;
+ deprecatedAPIs = PureComponent.prototype = new ComponentDummy;
+ deprecatedAPIs.constructor = PureComponent;
+ assign(deprecatedAPIs, Component.prototype);
+ deprecatedAPIs.isPureReactComponent = true;
+ var isArrayImpl = Array.isArray, REACT_CLIENT_REFERENCE$2 = Symbol.for("react.client.reference"), ReactSharedInternals = {
+ H: null,
+ A: null,
+ T: null,
+ S: null,
+ actQueue: null,
+ isBatchingLegacy: false,
+ didScheduleLegacyUpdate: false,
+ didUsePromise: false,
+ thrownErrors: [],
+ getCurrentStack: null
+ }, hasOwnProperty = Object.prototype.hasOwnProperty, REACT_CLIENT_REFERENCE$1 = Symbol.for("react.client.reference"), disabledDepth = 0, prevLog, prevInfo, prevWarn, prevError, prevGroup, prevGroupCollapsed, prevGroupEnd;
+ disabledLog.__reactDisabledLog = true;
+ var prefix, suffix, reentry = false;
+ var componentFrameCache = new (typeof WeakMap === "function" ? WeakMap : Map);
+ var REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), specialPropKeyWarningShown, didWarnAboutOldJSXRuntime;
+ var didWarnAboutElementRef = {};
+ var ownerHasKeyUseWarning = {}, didWarnAboutMaps = false, userProvidedKeyEscapeRegex = /\/+/g, reportGlobalError = typeof reportError === "function" ? reportError : function(error) {
+ if (typeof window === "object" && typeof window.ErrorEvent === "function") {
+ var event = new window.ErrorEvent("error", {
+ bubbles: true,
+ cancelable: true,
+ message: typeof error === "object" && error !== null && typeof error.message === "string" ? String(error.message) : String(error),
+ error
+ });
+ if (!window.dispatchEvent(event))
+ return;
+ } else if (typeof process === "object" && typeof process.emit === "function") {
+ process.emit("uncaughtException", error);
+ return;
+ }
+ console.error(error);
+ }, didWarnAboutMessageChannel = false, enqueueTaskImpl = null, actScopeDepth = 0, didWarnNoAwaitAct = false, isFlushing = false, queueSeveralMicrotasks = typeof queueMicrotask === "function" ? function(callback) {
+ queueMicrotask(function() {
+ return queueMicrotask(callback);
+ });
+ } : enqueueTask;
+ exports.Children = {
+ map: mapChildren,
+ forEach: function(children, forEachFunc, forEachContext) {
+ mapChildren(children, function() {
+ forEachFunc.apply(this, arguments);
+ }, forEachContext);
+ },
+ count: function(children) {
+ var n = 0;
+ mapChildren(children, function() {
+ n++;
+ });
+ return n;
+ },
+ toArray: function(children) {
+ return mapChildren(children, function(child) {
+ return child;
+ }) || [];
+ },
+ only: function(children) {
+ if (!isValidElement(children))
+ throw Error("React.Children.only expected to receive a single React element child.");
+ return children;
+ }
+ };
+ exports.Component = Component;
+ exports.Fragment = REACT_FRAGMENT_TYPE;
+ exports.Profiler = REACT_PROFILER_TYPE;
+ exports.PureComponent = PureComponent;
+ exports.StrictMode = REACT_STRICT_MODE_TYPE;
+ exports.Suspense = REACT_SUSPENSE_TYPE;
+ exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = ReactSharedInternals;
+ exports.act = function(callback) {
+ var prevActQueue = ReactSharedInternals.actQueue, prevActScopeDepth = actScopeDepth;
+ actScopeDepth++;
+ var queue = ReactSharedInternals.actQueue = prevActQueue !== null ? prevActQueue : [], didAwaitActCall = false;
+ try {
+ var result = callback();
+ } catch (error) {
+ ReactSharedInternals.thrownErrors.push(error);
+ }
+ if (0 < ReactSharedInternals.thrownErrors.length)
+ throw popActScope(prevActQueue, prevActScopeDepth), callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback;
+ if (result !== null && typeof result === "object" && typeof result.then === "function") {
+ var thenable = result;
+ queueSeveralMicrotasks(function() {
+ didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"));
+ });
+ return {
+ then: function(resolve, reject) {
+ didAwaitActCall = true;
+ thenable.then(function(returnValue) {
+ popActScope(prevActQueue, prevActScopeDepth);
+ if (prevActScopeDepth === 0) {
+ try {
+ flushActQueue(queue), enqueueTask(function() {
+ return recursivelyFlushAsyncActWork(returnValue, resolve, reject);
+ });
+ } catch (error$2) {
+ ReactSharedInternals.thrownErrors.push(error$2);
+ }
+ if (0 < ReactSharedInternals.thrownErrors.length) {
+ var _thrownError = aggregateErrors(ReactSharedInternals.thrownErrors);
+ ReactSharedInternals.thrownErrors.length = 0;
+ reject(_thrownError);
+ }
+ } else
+ resolve(returnValue);
+ }, function(error) {
+ popActScope(prevActQueue, prevActScopeDepth);
+ 0 < ReactSharedInternals.thrownErrors.length ? (error = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(error)) : reject(error);
+ });
+ }
+ };
+ }
+ var returnValue$jscomp$0 = result;
+ popActScope(prevActQueue, prevActScopeDepth);
+ prevActScopeDepth === 0 && (flushActQueue(queue), queue.length !== 0 && queueSeveralMicrotasks(function() {
+ didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error("A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)"));
+ }), ReactSharedInternals.actQueue = null);
+ if (0 < ReactSharedInternals.thrownErrors.length)
+ throw callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback;
+ return {
+ then: function(resolve, reject) {
+ didAwaitActCall = true;
+ prevActScopeDepth === 0 ? (ReactSharedInternals.actQueue = queue, enqueueTask(function() {
+ return recursivelyFlushAsyncActWork(returnValue$jscomp$0, resolve, reject);
+ })) : resolve(returnValue$jscomp$0);
+ }
+ };
+ };
+ exports.cache = function(fn) {
+ return function() {
+ return fn.apply(null, arguments);
+ };
+ };
+ exports.cloneElement = function(element, config, children) {
+ if (element === null || element === undefined)
+ throw Error("The argument must be a React element, but you passed " + element + ".");
+ var props = assign({}, element.props), key = element.key, owner = element._owner;
+ if (config != null) {
+ var JSCompiler_inline_result;
+ a: {
+ if (hasOwnProperty.call(config, "ref") && (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(config, "ref").get) && JSCompiler_inline_result.isReactWarning) {
+ JSCompiler_inline_result = false;
+ break a;
+ }
+ JSCompiler_inline_result = config.ref !== undefined;
+ }
+ JSCompiler_inline_result && (owner = getOwner());
+ hasValidKey(config) && (checkKeyStringCoercion(config.key), key = "" + config.key);
+ for (propName in config)
+ !hasOwnProperty.call(config, propName) || propName === "key" || propName === "__self" || propName === "__source" || propName === "ref" && config.ref === undefined || (props[propName] = config[propName]);
+ }
+ var propName = arguments.length - 2;
+ if (propName === 1)
+ props.children = children;
+ else if (1 < propName) {
+ JSCompiler_inline_result = Array(propName);
+ for (var i = 0;i < propName; i++)
+ JSCompiler_inline_result[i] = arguments[i + 2];
+ props.children = JSCompiler_inline_result;
+ }
+ props = ReactElement(element.type, key, undefined, undefined, owner, props);
+ for (key = 2;key < arguments.length; key++)
+ validateChildKeys(arguments[key], props.type);
+ return props;
+ };
+ exports.createContext = function(defaultValue) {
+ defaultValue = {
+ $$typeof: REACT_CONTEXT_TYPE,
+ _currentValue: defaultValue,
+ _currentValue2: defaultValue,
+ _threadCount: 0,
+ Provider: null,
+ Consumer: null
+ };
+ defaultValue.Provider = defaultValue;
+ defaultValue.Consumer = {
+ $$typeof: REACT_CONSUMER_TYPE,
+ _context: defaultValue
+ };
+ defaultValue._currentRenderer = null;
+ defaultValue._currentRenderer2 = null;
+ return defaultValue;
+ };
+ exports.createElement = function(type, config, children) {
+ if (isValidElementType(type))
+ for (var i = 2;i < arguments.length; i++)
+ validateChildKeys(arguments[i], type);
+ else {
+ i = "";
+ if (type === undefined || typeof type === "object" && type !== null && Object.keys(type).length === 0)
+ i += " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
+ if (type === null)
+ var typeString = "null";
+ else
+ isArrayImpl(type) ? typeString = "array" : type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE ? (typeString = "<" + (getComponentNameFromType(type.type) || "Unknown") + " />", i = " Did you accidentally export a JSX literal instead of a component?") : typeString = typeof type;
+ console.error("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s", typeString, i);
+ }
+ var propName;
+ i = {};
+ typeString = null;
+ if (config != null)
+ for (propName in didWarnAboutOldJSXRuntime || !("__self" in config) || "key" in config || (didWarnAboutOldJSXRuntime = true, console.warn("Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform")), hasValidKey(config) && (checkKeyStringCoercion(config.key), typeString = "" + config.key), config)
+ hasOwnProperty.call(config, propName) && propName !== "key" && propName !== "__self" && propName !== "__source" && (i[propName] = config[propName]);
+ var childrenLength = arguments.length - 2;
+ if (childrenLength === 1)
+ i.children = children;
+ else if (1 < childrenLength) {
+ for (var childArray = Array(childrenLength), _i = 0;_i < childrenLength; _i++)
+ childArray[_i] = arguments[_i + 2];
+ Object.freeze && Object.freeze(childArray);
+ i.children = childArray;
+ }
+ if (type && type.defaultProps)
+ for (propName in childrenLength = type.defaultProps, childrenLength)
+ i[propName] === undefined && (i[propName] = childrenLength[propName]);
+ typeString && defineKeyPropWarningGetter(i, typeof type === "function" ? type.displayName || type.name || "Unknown" : type);
+ return ReactElement(type, typeString, undefined, undefined, getOwner(), i);
+ };
+ exports.createRef = function() {
+ var refObject = { current: null };
+ Object.seal(refObject);
+ return refObject;
+ };
+ exports.forwardRef = function(render) {
+ render != null && render.$$typeof === REACT_MEMO_TYPE ? console.error("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).") : typeof render !== "function" ? console.error("forwardRef requires a render function but was given %s.", render === null ? "null" : typeof render) : render.length !== 0 && render.length !== 2 && console.error("forwardRef render functions accept exactly two parameters: props and ref. %s", render.length === 1 ? "Did you forget to use the ref parameter?" : "Any additional parameter will be undefined.");
+ render != null && render.defaultProps != null && console.error("forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?");
+ var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render }, ownName;
+ Object.defineProperty(elementType, "displayName", {
+ enumerable: false,
+ configurable: true,
+ get: function() {
+ return ownName;
+ },
+ set: function(name) {
+ ownName = name;
+ render.name || render.displayName || (Object.defineProperty(render, "name", { value: name }), render.displayName = name);
+ }
+ });
+ return elementType;
+ };
+ exports.isValidElement = isValidElement;
+ exports.lazy = function(ctor) {
+ return {
+ $$typeof: REACT_LAZY_TYPE,
+ _payload: { _status: -1, _result: ctor },
+ _init: lazyInitializer
+ };
+ };
+ exports.memo = function(type, compare) {
+ isValidElementType(type) || console.error("memo: The first argument must be a component. Instead received: %s", type === null ? "null" : typeof type);
+ compare = {
+ $$typeof: REACT_MEMO_TYPE,
+ type,
+ compare: compare === undefined ? null : compare
+ };
+ var ownName;
+ Object.defineProperty(compare, "displayName", {
+ enumerable: false,
+ configurable: true,
+ get: function() {
+ return ownName;
+ },
+ set: function(name) {
+ ownName = name;
+ type.name || type.displayName || (Object.defineProperty(type, "name", { value: name }), type.displayName = name);
+ }
+ });
+ return compare;
+ };
+ exports.startTransition = function(scope) {
+ var prevTransition = ReactSharedInternals.T, currentTransition = {};
+ ReactSharedInternals.T = currentTransition;
+ currentTransition._updatedFibers = new Set;
+ try {
+ var returnValue = scope(), onStartTransitionFinish = ReactSharedInternals.S;
+ onStartTransitionFinish !== null && onStartTransitionFinish(currentTransition, returnValue);
+ typeof returnValue === "object" && returnValue !== null && typeof returnValue.then === "function" && returnValue.then(noop, reportGlobalError);
+ } catch (error) {
+ reportGlobalError(error);
+ } finally {
+ prevTransition === null && currentTransition._updatedFibers && (scope = currentTransition._updatedFibers.size, currentTransition._updatedFibers.clear(), 10 < scope && console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.")), ReactSharedInternals.T = prevTransition;
+ }
+ };
+ exports.unstable_useCacheRefresh = function() {
+ return resolveDispatcher().useCacheRefresh();
+ };
+ exports.use = function(usable) {
+ return resolveDispatcher().use(usable);
+ };
+ exports.useActionState = function(action, initialState, permalink) {
+ return resolveDispatcher().useActionState(action, initialState, permalink);
+ };
+ exports.useCallback = function(callback, deps) {
+ return resolveDispatcher().useCallback(callback, deps);
+ };
+ exports.useContext = function(Context) {
+ var dispatcher = resolveDispatcher();
+ Context.$$typeof === REACT_CONSUMER_TYPE && console.error("Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?");
+ return dispatcher.useContext(Context);
+ };
+ exports.useDebugValue = function(value, formatterFn) {
+ return resolveDispatcher().useDebugValue(value, formatterFn);
+ };
+ exports.useDeferredValue = function(value, initialValue) {
+ return resolveDispatcher().useDeferredValue(value, initialValue);
+ };
+ exports.useEffect = function(create, deps) {
+ return resolveDispatcher().useEffect(create, deps);
+ };
+ exports.useId = function() {
+ return resolveDispatcher().useId();
+ };
+ exports.useImperativeHandle = function(ref, create, deps) {
+ return resolveDispatcher().useImperativeHandle(ref, create, deps);
+ };
+ exports.useInsertionEffect = function(create, deps) {
+ return resolveDispatcher().useInsertionEffect(create, deps);
+ };
+ exports.useLayoutEffect = function(create, deps) {
+ return resolveDispatcher().useLayoutEffect(create, deps);
+ };
+ exports.useMemo = function(create, deps) {
+ return resolveDispatcher().useMemo(create, deps);
+ };
+ exports.useOptimistic = function(passthrough, reducer) {
+ return resolveDispatcher().useOptimistic(passthrough, reducer);
+ };
+ exports.useReducer = function(reducer, initialArg, init) {
+ return resolveDispatcher().useReducer(reducer, initialArg, init);
+ };
+ exports.useRef = function(initialValue) {
+ return resolveDispatcher().useRef(initialValue);
+ };
+ exports.useState = function(initialState) {
+ return resolveDispatcher().useState(initialState);
+ };
+ exports.useSyncExternalStore = function(subscribe, getSnapshot, getServerSnapshot) {
+ return resolveDispatcher().useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
+ };
+ exports.useTransition = function() {
+ return resolveDispatcher().useTransition();
+ };
+ exports.version = "19.0.0";
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== "undefined" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop === "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+ })();
+});
+
+// node_modules/react/index.js
+var require_react = __commonJS((exports, module) => {
+ var react_development = __toESM(require_react_development(), 1);
+ if (false) {
+ } else {
+ module.exports = react_development;
+ }
+});
+
+// node_modules/react-dom/cjs/react-dom.development.js
+var require_react_dom_development = __commonJS((exports) => {
+ var React = __toESM(require_react(), 1);
+ (function() {
+ function noop() {
+ }
+ function testStringCoercion(value) {
+ return "" + value;
+ }
+ function createPortal$1(children, containerInfo, implementation) {
+ var key = 3 < arguments.length && arguments[3] !== undefined ? arguments[3] : null;
+ try {
+ testStringCoercion(key);
+ var JSCompiler_inline_result = false;
+ } catch (e) {
+ JSCompiler_inline_result = true;
+ }
+ JSCompiler_inline_result && (console.error("The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", typeof Symbol === "function" && Symbol.toStringTag && key[Symbol.toStringTag] || key.constructor.name || "Object"), testStringCoercion(key));
+ return {
+ $$typeof: REACT_PORTAL_TYPE,
+ key: key == null ? null : "" + key,
+ children,
+ containerInfo,
+ implementation
+ };
+ }
+ function getCrossOriginStringAs(as, input) {
+ if (as === "font")
+ return "";
+ if (typeof input === "string")
+ return input === "use-credentials" ? input : "";
+ }
+ function getValueDescriptorExpectingObjectForWarning(thing) {
+ return thing === null ? "`null`" : thing === undefined ? "`undefined`" : thing === "" ? "an empty string" : 'something with type "' + typeof thing + '"';
+ }
+ function getValueDescriptorExpectingEnumForWarning(thing) {
+ return thing === null ? "`null`" : thing === undefined ? "`undefined`" : thing === "" ? "an empty string" : typeof thing === "string" ? JSON.stringify(thing) : typeof thing === "number" ? "`" + thing + "`" : 'something with type "' + typeof thing + '"';
+ }
+ function resolveDispatcher() {
+ var dispatcher = ReactSharedInternals.H;
+ dispatcher === null && console.error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
+1. You might have mismatching versions of React and the renderer (such as React DOM)
+2. You might be breaking the Rules of Hooks
+3. You might have more than one copy of React in the same app
+See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`);
+ return dispatcher;
+ }
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== "undefined" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart === "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+ var Internals = {
+ d: {
+ f: noop,
+ r: function() {
+ throw Error("Invalid form element. requestFormReset must be passed a form that was rendered by React.");
+ },
+ D: noop,
+ C: noop,
+ L: noop,
+ m: noop,
+ X: noop,
+ S: noop,
+ M: noop
+ },
+ p: 0,
+ findDOMNode: null
+ }, REACT_PORTAL_TYPE = Symbol.for("react.portal"), ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
+ typeof Map === "function" && Map.prototype != null && typeof Map.prototype.forEach === "function" && typeof Set === "function" && Set.prototype != null && typeof Set.prototype.clear === "function" && typeof Set.prototype.forEach === "function" || console.error("React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills");
+ exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = Internals;
+ exports.createPortal = function(children, container) {
+ var key = 2 < arguments.length && arguments[2] !== undefined ? arguments[2] : null;
+ if (!container || container.nodeType !== 1 && container.nodeType !== 9 && container.nodeType !== 11)
+ throw Error("Target container is not a DOM element.");
+ return createPortal$1(children, container, null, key);
+ };
+ exports.flushSync = function(fn) {
+ var previousTransition = ReactSharedInternals.T, previousUpdatePriority = Internals.p;
+ try {
+ if (ReactSharedInternals.T = null, Internals.p = 2, fn)
+ return fn();
+ } finally {
+ ReactSharedInternals.T = previousTransition, Internals.p = previousUpdatePriority, Internals.d.f() && console.error("flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.");
+ }
+ };
+ exports.preconnect = function(href, options) {
+ typeof href === "string" && href ? options != null && typeof options !== "object" ? console.error("ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.", getValueDescriptorExpectingEnumForWarning(options)) : options != null && typeof options.crossOrigin !== "string" && console.error("ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.", getValueDescriptorExpectingObjectForWarning(options.crossOrigin)) : console.error("ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", getValueDescriptorExpectingObjectForWarning(href));
+ typeof href === "string" && (options ? (options = options.crossOrigin, options = typeof options === "string" ? options === "use-credentials" ? options : "" : undefined) : options = null, Internals.d.C(href, options));
+ };
+ exports.prefetchDNS = function(href) {
+ if (typeof href !== "string" || !href)
+ console.error("ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", getValueDescriptorExpectingObjectForWarning(href));
+ else if (1 < arguments.length) {
+ var options = arguments[1];
+ typeof options === "object" && options.hasOwnProperty("crossOrigin") ? console.error("ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.", getValueDescriptorExpectingEnumForWarning(options)) : console.error("ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.", getValueDescriptorExpectingEnumForWarning(options));
+ }
+ typeof href === "string" && Internals.d.D(href);
+ };
+ exports.preinit = function(href, options) {
+ typeof href === "string" && href ? options == null || typeof options !== "object" ? console.error("ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.", getValueDescriptorExpectingEnumForWarning(options)) : options.as !== "style" && options.as !== "script" && console.error('ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are "style" and "script".', getValueDescriptorExpectingEnumForWarning(options.as)) : console.error("ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", getValueDescriptorExpectingObjectForWarning(href));
+ if (typeof href === "string" && options && typeof options.as === "string") {
+ var as = options.as, crossOrigin = getCrossOriginStringAs(as, options.crossOrigin), integrity = typeof options.integrity === "string" ? options.integrity : undefined, fetchPriority = typeof options.fetchPriority === "string" ? options.fetchPriority : undefined;
+ as === "style" ? Internals.d.S(href, typeof options.precedence === "string" ? options.precedence : undefined, {
+ crossOrigin,
+ integrity,
+ fetchPriority
+ }) : as === "script" && Internals.d.X(href, {
+ crossOrigin,
+ integrity,
+ fetchPriority,
+ nonce: typeof options.nonce === "string" ? options.nonce : undefined
+ });
+ }
+ };
+ exports.preinitModule = function(href, options) {
+ var encountered = "";
+ typeof href === "string" && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + ".");
+ options !== undefined && typeof options !== "object" ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : options && ("as" in options) && options.as !== "script" && (encountered += " The `as` option encountered was " + getValueDescriptorExpectingEnumForWarning(options.as) + ".");
+ if (encountered)
+ console.error("ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s", encountered);
+ else
+ switch (encountered = options && typeof options.as === "string" ? options.as : "script", encountered) {
+ case "script":
+ break;
+ default:
+ encountered = getValueDescriptorExpectingEnumForWarning(encountered), console.error('ReactDOM.preinitModule(): Currently the only supported "as" type for this function is "script" but received "%s" instead. This warning was generated for `href` "%s". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)', encountered, href);
+ }
+ if (typeof href === "string")
+ if (typeof options === "object" && options !== null) {
+ if (options.as == null || options.as === "script")
+ encountered = getCrossOriginStringAs(options.as, options.crossOrigin), Internals.d.M(href, {
+ crossOrigin: encountered,
+ integrity: typeof options.integrity === "string" ? options.integrity : undefined,
+ nonce: typeof options.nonce === "string" ? options.nonce : undefined
+ });
+ } else
+ options == null && Internals.d.M(href);
+ };
+ exports.preload = function(href, options) {
+ var encountered = "";
+ typeof href === "string" && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + ".");
+ options == null || typeof options !== "object" ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : typeof options.as === "string" && options.as || (encountered += " The `as` option encountered was " + getValueDescriptorExpectingObjectForWarning(options.as) + ".");
+ encountered && console.error('ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a ` ` tag.%s', encountered);
+ if (typeof href === "string" && typeof options === "object" && options !== null && typeof options.as === "string") {
+ encountered = options.as;
+ var crossOrigin = getCrossOriginStringAs(encountered, options.crossOrigin);
+ Internals.d.L(href, encountered, {
+ crossOrigin,
+ integrity: typeof options.integrity === "string" ? options.integrity : undefined,
+ nonce: typeof options.nonce === "string" ? options.nonce : undefined,
+ type: typeof options.type === "string" ? options.type : undefined,
+ fetchPriority: typeof options.fetchPriority === "string" ? options.fetchPriority : undefined,
+ referrerPolicy: typeof options.referrerPolicy === "string" ? options.referrerPolicy : undefined,
+ imageSrcSet: typeof options.imageSrcSet === "string" ? options.imageSrcSet : undefined,
+ imageSizes: typeof options.imageSizes === "string" ? options.imageSizes : undefined,
+ media: typeof options.media === "string" ? options.media : undefined
+ });
+ }
+ };
+ exports.preloadModule = function(href, options) {
+ var encountered = "";
+ typeof href === "string" && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + ".");
+ options !== undefined && typeof options !== "object" ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : options && ("as" in options) && typeof options.as !== "string" && (encountered += " The `as` option encountered was " + getValueDescriptorExpectingObjectForWarning(options.as) + ".");
+ encountered && console.error('ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a ` ` tag.%s', encountered);
+ typeof href === "string" && (options ? (encountered = getCrossOriginStringAs(options.as, options.crossOrigin), Internals.d.m(href, {
+ as: typeof options.as === "string" && options.as !== "script" ? options.as : undefined,
+ crossOrigin: encountered,
+ integrity: typeof options.integrity === "string" ? options.integrity : undefined
+ })) : Internals.d.m(href));
+ };
+ exports.requestFormReset = function(form) {
+ Internals.d.r(form);
+ };
+ exports.unstable_batchedUpdates = function(fn, a) {
+ return fn(a);
+ };
+ exports.useFormState = function(action, initialState, permalink) {
+ return resolveDispatcher().useFormState(action, initialState, permalink);
+ };
+ exports.useFormStatus = function() {
+ return resolveDispatcher().useHostTransitionStatus();
+ };
+ exports.version = "19.0.0";
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== "undefined" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop === "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+ })();
+});
+
+// node_modules/react-dom/index.js
+var require_react_dom = __commonJS((exports, module) => {
+ var react_dom_development = __toESM(require_react_dom_development(), 1);
+ if (false) {
+ } else {
+ module.exports = react_dom_development;
+ }
+});
+
+// node_modules/react-dom/cjs/react-dom-server.bun.development.js
+var exports_react_dom_server_bun_development = {};
+__export(exports_react_dom_server_bun_development, {
+ version: () => $version,
+ renderToReadableStream: () => $renderToReadableStream
+});
+function objectName(object) {
+ return Object.prototype.toString.call(object).replace(/^\[object (.*)\]$/, function(m, p0) {
+ return p0;
+ });
+}
+function describeKeyForErrorMessage(key) {
+ var encodedKey = JSON.stringify(key);
+ return '"' + key + '"' === encodedKey ? key : encodedKey;
+}
+function describeValueForErrorMessage(value) {
+ switch (typeof value) {
+ case "string":
+ return JSON.stringify(10 >= value.length ? value : value.slice(0, 10) + "...");
+ case "object":
+ if (isArrayImpl(value))
+ return "[...]";
+ if (value !== null && value.$$typeof === CLIENT_REFERENCE_TAG)
+ return "client";
+ value = objectName(value);
+ return value === "Object" ? "{...}" : value;
+ case "function":
+ return value.$$typeof === CLIENT_REFERENCE_TAG ? "client" : (value = value.displayName || value.name) ? "function " + value : "function";
+ default:
+ return String(value);
+ }
+}
+function describeElementType(type) {
+ if (typeof type === "string")
+ return type;
+ switch (type) {
+ case REACT_SUSPENSE_TYPE:
+ return "Suspense";
+ case REACT_SUSPENSE_LIST_TYPE:
+ return "SuspenseList";
+ }
+ if (typeof type === "object")
+ switch (type.$$typeof) {
+ case REACT_FORWARD_REF_TYPE:
+ return describeElementType(type.render);
+ case REACT_MEMO_TYPE:
+ return describeElementType(type.type);
+ case REACT_LAZY_TYPE:
+ var payload = type._payload;
+ type = type._init;
+ try {
+ return describeElementType(type(payload));
+ } catch (x) {
+ }
+ }
+ return "";
+}
+function describeObjectForErrorMessage(objectOrArray, expandedName) {
+ var objKind = objectName(objectOrArray);
+ if (objKind !== "Object" && objKind !== "Array")
+ return objKind;
+ var start = -1, length = 0;
+ if (isArrayImpl(objectOrArray))
+ if (jsxChildrenParents.has(objectOrArray)) {
+ var type = jsxChildrenParents.get(objectOrArray);
+ objKind = "<" + describeElementType(type) + ">";
+ for (var i = 0;i < objectOrArray.length; i++) {
+ var value = objectOrArray[i];
+ value = typeof value === "string" ? value : typeof value === "object" && value !== null ? "{" + describeObjectForErrorMessage(value) + "}" : "{" + describeValueForErrorMessage(value) + "}";
+ "" + i === expandedName ? (start = objKind.length, length = value.length, objKind += value) : objKind = 15 > value.length && 40 > objKind.length + value.length ? objKind + value : objKind + "{...}";
+ }
+ objKind += "" + describeElementType(type) + ">";
+ } else {
+ objKind = "[";
+ for (type = 0;type < objectOrArray.length; type++)
+ 0 < type && (objKind += ", "), i = objectOrArray[type], i = typeof i === "object" && i !== null ? describeObjectForErrorMessage(i) : describeValueForErrorMessage(i), "" + type === expandedName ? (start = objKind.length, length = i.length, objKind += i) : objKind = 10 > i.length && 40 > objKind.length + i.length ? objKind + i : objKind + "...";
+ objKind += "]";
+ }
+ else if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE)
+ objKind = "<" + describeElementType(objectOrArray.type) + "/>";
+ else {
+ if (objectOrArray.$$typeof === CLIENT_REFERENCE_TAG)
+ return "client";
+ if (jsxPropsParents.has(objectOrArray)) {
+ objKind = jsxPropsParents.get(objectOrArray);
+ objKind = "<" + (describeElementType(objKind) || "...");
+ type = Object.keys(objectOrArray);
+ for (i = 0;i < type.length; i++) {
+ objKind += " ";
+ value = type[i];
+ objKind += describeKeyForErrorMessage(value) + "=";
+ var _value2 = objectOrArray[value];
+ var _substr2 = value === expandedName && typeof _value2 === "object" && _value2 !== null ? describeObjectForErrorMessage(_value2) : describeValueForErrorMessage(_value2);
+ typeof _value2 !== "string" && (_substr2 = "{" + _substr2 + "}");
+ value === expandedName ? (start = objKind.length, length = _substr2.length, objKind += _substr2) : objKind = 10 > _substr2.length && 40 > objKind.length + _substr2.length ? objKind + _substr2 : objKind + "...";
+ }
+ objKind += ">";
+ } else {
+ objKind = "{";
+ type = Object.keys(objectOrArray);
+ for (i = 0;i < type.length; i++)
+ 0 < i && (objKind += ", "), value = type[i], objKind += describeKeyForErrorMessage(value) + ": ", _value2 = objectOrArray[value], _value2 = typeof _value2 === "object" && _value2 !== null ? describeObjectForErrorMessage(_value2) : describeValueForErrorMessage(_value2), value === expandedName ? (start = objKind.length, length = _value2.length, objKind += _value2) : objKind = 10 > _value2.length && 40 > objKind.length + _value2.length ? objKind + _value2 : objKind + "...";
+ objKind += "}";
+ }
+ }
+ return expandedName === undefined ? objKind : -1 < start && 0 < length ? (objectOrArray = " ".repeat(start) + "^".repeat(length), `
+ ` + objKind + `
+ ` + objectOrArray) : `
+ ` + objKind;
+}
+function flushBuffered(destination) {
+ typeof destination.flush === "function" && destination.flush();
+}
+function writeChunk(destination, chunk) {
+ chunk.length !== 0 && destination.write(chunk);
+}
+function closeWithError(destination, error) {
+ typeof destination.error === "function" ? destination.error(error) : destination.close();
+}
+function typeName(value) {
+ return typeof Symbol === "function" && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
+}
+function willCoercionThrow(value) {
+ try {
+ return testStringCoercion(value), false;
+ } catch (e) {
+ return true;
+ }
+}
+function testStringCoercion(value) {
+ return "" + value;
+}
+function checkAttributeStringCoercion(value, attributeName) {
+ if (willCoercionThrow(value))
+ return console.error("The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.", attributeName, typeName(value)), testStringCoercion(value);
+}
+function checkCSSPropertyStringCoercion(value, propName) {
+ if (willCoercionThrow(value))
+ return console.error("The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.", propName, typeName(value)), testStringCoercion(value);
+}
+function checkHtmlStringCoercion(value) {
+ if (willCoercionThrow(value))
+ return console.error("The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.", typeName(value)), testStringCoercion(value);
+}
+function isAttributeNameSafe(attributeName) {
+ if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+ return true;
+ if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))
+ return false;
+ if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+ return validatedAttributeNameCache[attributeName] = true;
+ illegalAttributeNameCache[attributeName] = true;
+ console.error("Invalid attribute name: `%s`", attributeName);
+ return false;
+}
+function checkControlledValueProps(tagName, props) {
+ hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null || (tagName === "select" ? console.error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`.") : console.error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."));
+ props.onChange || props.readOnly || props.disabled || props.checked == null || console.error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.");
+}
+function validateProperty$1(tagName, name) {
+ if (hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name])
+ return true;
+ if (rARIACamel$1.test(name)) {
+ tagName = "aria-" + name.slice(4).toLowerCase();
+ tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+ if (tagName == null)
+ return console.error("Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.", name), warnedProperties$1[name] = true;
+ if (name !== tagName)
+ return console.error("Invalid ARIA attribute `%s`. Did you mean `%s`?", name, tagName), warnedProperties$1[name] = true;
+ }
+ if (rARIA$1.test(name)) {
+ tagName = name.toLowerCase();
+ tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+ if (tagName == null)
+ return warnedProperties$1[name] = true, false;
+ name !== tagName && (console.error("Unknown ARIA attribute `%s`. Did you mean `%s`?", name, tagName), warnedProperties$1[name] = true);
+ }
+ return true;
+}
+function validateProperties$2(type, props) {
+ var invalidProps = [], key;
+ for (key in props)
+ validateProperty$1(type, key) || invalidProps.push(key);
+ props = invalidProps.map(function(prop) {
+ return "`" + prop + "`";
+ }).join(", ");
+ invalidProps.length === 1 ? console.error("Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props", props, type) : 1 < invalidProps.length && console.error("Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props", props, type);
+}
+function validateProperty(tagName, name, value, eventRegistry) {
+ if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])
+ return true;
+ var lowerCasedName = name.toLowerCase();
+ if (lowerCasedName === "onfocusin" || lowerCasedName === "onfocusout")
+ return console.error("React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React."), warnedProperties[name] = true;
+ if (typeof value === "function" && (tagName === "form" && name === "action" || tagName === "input" && name === "formAction" || tagName === "button" && name === "formAction"))
+ return true;
+ if (eventRegistry != null) {
+ tagName = eventRegistry.possibleRegistrationNames;
+ if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))
+ return true;
+ eventRegistry = tagName.hasOwnProperty(lowerCasedName) ? tagName[lowerCasedName] : null;
+ if (eventRegistry != null)
+ return console.error("Invalid event handler property `%s`. Did you mean `%s`?", name, eventRegistry), warnedProperties[name] = true;
+ if (EVENT_NAME_REGEX.test(name))
+ return console.error("Unknown event handler property `%s`. It will be ignored.", name), warnedProperties[name] = true;
+ } else if (EVENT_NAME_REGEX.test(name))
+ return INVALID_EVENT_NAME_REGEX.test(name) && console.error("Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.", name), warnedProperties[name] = true;
+ if (rARIA.test(name) || rARIACamel.test(name))
+ return true;
+ if (lowerCasedName === "innerhtml")
+ return console.error("Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."), warnedProperties[name] = true;
+ if (lowerCasedName === "aria")
+ return console.error("The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead."), warnedProperties[name] = true;
+ if (lowerCasedName === "is" && value !== null && value !== undefined && typeof value !== "string")
+ return console.error("Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.", typeof value), warnedProperties[name] = true;
+ if (typeof value === "number" && isNaN(value))
+ return console.error("Received NaN for the `%s` attribute. If this is expected, cast the value to a string.", name), warnedProperties[name] = true;
+ if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
+ if (lowerCasedName = possibleStandardNames[lowerCasedName], lowerCasedName !== name)
+ return console.error("Invalid DOM property `%s`. Did you mean `%s`?", name, lowerCasedName), warnedProperties[name] = true;
+ } else if (name !== lowerCasedName)
+ return console.error("React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.", name, lowerCasedName), warnedProperties[name] = true;
+ switch (name) {
+ case "dangerouslySetInnerHTML":
+ case "children":
+ case "style":
+ case "suppressContentEditableWarning":
+ case "suppressHydrationWarning":
+ case "defaultValue":
+ case "defaultChecked":
+ case "innerHTML":
+ case "ref":
+ return true;
+ case "innerText":
+ case "textContent":
+ return true;
+ }
+ switch (typeof value) {
+ case "boolean":
+ switch (name) {
+ case "autoFocus":
+ case "checked":
+ case "multiple":
+ case "muted":
+ case "selected":
+ case "contentEditable":
+ case "spellCheck":
+ case "draggable":
+ case "value":
+ case "autoReverse":
+ case "externalResourcesRequired":
+ case "focusable":
+ case "preserveAlpha":
+ case "allowFullScreen":
+ case "async":
+ case "autoPlay":
+ case "controls":
+ case "default":
+ case "defer":
+ case "disabled":
+ case "disablePictureInPicture":
+ case "disableRemotePlayback":
+ case "formNoValidate":
+ case "hidden":
+ case "loop":
+ case "noModule":
+ case "noValidate":
+ case "open":
+ case "playsInline":
+ case "readOnly":
+ case "required":
+ case "reversed":
+ case "scoped":
+ case "seamless":
+ case "itemScope":
+ case "capture":
+ case "download":
+ case "inert":
+ return true;
+ default:
+ lowerCasedName = name.toLowerCase().slice(0, 5);
+ if (lowerCasedName === "data-" || lowerCasedName === "aria-")
+ return true;
+ value ? console.error('Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.', value, name, name, value, name) : console.error('Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);
+ return warnedProperties[name] = true;
+ }
+ case "function":
+ case "symbol":
+ return warnedProperties[name] = true, false;
+ case "string":
+ if (value === "false" || value === "true") {
+ switch (name) {
+ case "checked":
+ case "selected":
+ case "multiple":
+ case "muted":
+ case "allowFullScreen":
+ case "async":
+ case "autoPlay":
+ case "controls":
+ case "default":
+ case "defer":
+ case "disabled":
+ case "disablePictureInPicture":
+ case "disableRemotePlayback":
+ case "formNoValidate":
+ case "hidden":
+ case "loop":
+ case "noModule":
+ case "noValidate":
+ case "open":
+ case "playsInline":
+ case "readOnly":
+ case "required":
+ case "reversed":
+ case "scoped":
+ case "seamless":
+ case "itemScope":
+ case "inert":
+ break;
+ default:
+ return true;
+ }
+ console.error("Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?", value, name, value === "false" ? "The browser will interpret it as a truthy value." : 'Although this works, it will not work as expected if you pass the string "false".', name, value);
+ warnedProperties[name] = true;
+ }
+ }
+ return true;
+}
+function warnUnknownProperties(type, props, eventRegistry) {
+ var unknownProps = [], key;
+ for (key in props)
+ validateProperty(type, key, props[key], eventRegistry) || unknownProps.push(key);
+ props = unknownProps.map(function(prop) {
+ return "`" + prop + "`";
+ }).join(", ");
+ unknownProps.length === 1 ? console.error("Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior ", props, type) : 1 < unknownProps.length && console.error("Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior ", props, type);
+}
+function camelize(string) {
+ return string.replace(hyphenPattern, function(_, character) {
+ return character.toUpperCase();
+ });
+}
+function escapeTextForBrowser(text) {
+ if (typeof text === "boolean" || typeof text === "number" || typeof text === "bigint")
+ return "" + text;
+ checkHtmlStringCoercion(text);
+ text = "" + text;
+ var match = matchHtmlRegExp.exec(text);
+ if (match) {
+ var html = "", index, lastIndex = 0;
+ for (index = match.index;index < text.length; index++) {
+ switch (text.charCodeAt(index)) {
+ case 34:
+ match = """;
+ break;
+ case 38:
+ match = "&";
+ break;
+ case 39:
+ match = "'";
+ break;
+ case 60:
+ match = "<";
+ break;
+ case 62:
+ match = ">";
+ break;
+ default:
+ continue;
+ }
+ lastIndex !== index && (html += text.slice(lastIndex, index));
+ lastIndex = index + 1;
+ html += match;
+ }
+ text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+ }
+ return text;
+}
+function sanitizeURL(url) {
+ return isJavaScriptProtocol.test("" + url) ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" : url;
+}
+function escapeEntireInlineScriptContent(scriptText) {
+ checkHtmlStringCoercion(scriptText);
+ return ("" + scriptText).replace(scriptRegex, scriptReplacer);
+}
+function scriptReplacer(match, prefix, s, suffix) {
+ return "" + prefix + (s === "s" ? "\\u0073" : "\\u0053") + suffix;
+}
+function createRenderState(resumableState, nonce, externalRuntimeConfig, importMap, onHeaders, maxHeadersLength) {
+ var inlineScriptWithNonce = nonce === undefined ? "");
+ bootstrapScriptContent = [];
+ importMap !== undefined && (bootstrapScriptContent.push('"));
+ onHeaders && typeof maxHeadersLength === "number" && 0 >= maxHeadersLength && console.error("React expected a positive non-zero `maxHeadersLength` option but found %s instead. When using the `onHeaders` option you may supply an optional `maxHeadersLength` option as well however, when setting this value to zero or less no headers will be captured.", maxHeadersLength === 0 ? "zero" : maxHeadersLength);
+ importMap = {
+ placeholderPrefix: idPrefix + "P:",
+ segmentPrefix: idPrefix + "S:",
+ boundaryPrefix: idPrefix + "B:",
+ startInlineScript: inlineScriptWithNonce,
+ htmlChunks: null,
+ headChunks: null,
+ externalRuntimeScript: null,
+ bootstrapChunks: externalRuntimeConfig,
+ importMapChunks: bootstrapScriptContent,
+ onHeaders,
+ headers: onHeaders ? {
+ preconnects: "",
+ fontPreloads: "",
+ highImagePreloads: "",
+ remainingCapacity: 2 + (typeof maxHeadersLength === "number" ? maxHeadersLength : 2000)
+ } : null,
+ resets: {
+ font: {},
+ dns: {},
+ connect: { default: {}, anonymous: {}, credentials: {} },
+ image: {},
+ style: {}
+ },
+ charsetChunks: [],
+ viewportChunks: [],
+ hoistableChunks: [],
+ preconnects: new Set,
+ fontPreloads: new Set,
+ highImagePreloads: new Set,
+ styles: new Map,
+ bootstrapScripts: new Set,
+ scripts: new Set,
+ bulkPreloads: new Set,
+ preloads: {
+ images: new Map,
+ stylesheets: new Map,
+ scripts: new Map,
+ moduleScripts: new Map
+ },
+ nonce,
+ hoistableState: null,
+ stylesToHoist: false
+ };
+ if (bootstrapScripts !== undefined)
+ for (onHeaders = 0;onHeaders < bootstrapScripts.length; onHeaders++) {
+ maxHeadersLength = bootstrapScripts[onHeaders];
+ bootstrapScriptContent = idPrefix = undefined;
+ var props = {
+ rel: "preload",
+ as: "script",
+ fetchPriority: "low",
+ nonce
+ };
+ typeof maxHeadersLength === "string" ? props.href = inlineScriptWithNonce = maxHeadersLength : (props.href = inlineScriptWithNonce = maxHeadersLength.src, props.integrity = bootstrapScriptContent = typeof maxHeadersLength.integrity === "string" ? maxHeadersLength.integrity : undefined, props.crossOrigin = idPrefix = typeof maxHeadersLength === "string" || maxHeadersLength.crossOrigin == null ? undefined : maxHeadersLength.crossOrigin === "use-credentials" ? "use-credentials" : "");
+ preloadBootstrapScriptOrModule(resumableState, importMap, inlineScriptWithNonce, props);
+ externalRuntimeConfig.push('');
+ }
+ if (bootstrapModules !== undefined)
+ for (bootstrapScripts = 0;bootstrapScripts < bootstrapModules.length; bootstrapScripts++)
+ onHeaders = bootstrapModules[bootstrapScripts], idPrefix = inlineScriptWithNonce = undefined, bootstrapScriptContent = {
+ rel: "modulepreload",
+ fetchPriority: "low",
+ nonce
+ }, typeof onHeaders === "string" ? bootstrapScriptContent.href = maxHeadersLength = onHeaders : (bootstrapScriptContent.href = maxHeadersLength = onHeaders.src, bootstrapScriptContent.integrity = idPrefix = typeof onHeaders.integrity === "string" ? onHeaders.integrity : undefined, bootstrapScriptContent.crossOrigin = inlineScriptWithNonce = typeof onHeaders === "string" || onHeaders.crossOrigin == null ? undefined : onHeaders.crossOrigin === "use-credentials" ? "use-credentials" : ""), preloadBootstrapScriptOrModule(resumableState, importMap, maxHeadersLength, bootstrapScriptContent), externalRuntimeConfig.push('');
+ return importMap;
+}
+function createResumableState(identifierPrefix, externalRuntimeConfig, bootstrapScriptContent, bootstrapScripts, bootstrapModules) {
+ return {
+ idPrefix: identifierPrefix === undefined ? "" : identifierPrefix,
+ nextFormID: 0,
+ streamingFormat: 0,
+ bootstrapScriptContent,
+ bootstrapScripts,
+ bootstrapModules,
+ instructions: NothingSent,
+ hasBody: false,
+ hasHtml: false,
+ unknownResources: {},
+ dnsResources: {},
+ connectResources: { default: {}, anonymous: {}, credentials: {} },
+ imageResources: {},
+ styleResources: {},
+ scriptResources: {},
+ moduleUnknownResources: {},
+ moduleScriptResources: {}
+ };
+}
+function createFormatContext(insertionMode, selectedValue, tagScope) {
+ return {
+ insertionMode,
+ selectedValue,
+ tagScope
+ };
+}
+function createRootFormatContext(namespaceURI) {
+ return createFormatContext(namespaceURI === "http://www.w3.org/2000/svg" ? SVG_MODE : namespaceURI === "http://www.w3.org/1998/Math/MathML" ? MATHML_MODE : ROOT_HTML_MODE, null, 0);
+}
+function getChildFormatContext(parentContext, type, props) {
+ switch (type) {
+ case "noscript":
+ return createFormatContext(HTML_MODE, null, parentContext.tagScope | 1);
+ case "select":
+ return createFormatContext(HTML_MODE, props.value != null ? props.value : props.defaultValue, parentContext.tagScope);
+ case "svg":
+ return createFormatContext(SVG_MODE, null, parentContext.tagScope);
+ case "picture":
+ return createFormatContext(HTML_MODE, null, parentContext.tagScope | 2);
+ case "math":
+ return createFormatContext(MATHML_MODE, null, parentContext.tagScope);
+ case "foreignObject":
+ return createFormatContext(HTML_MODE, null, parentContext.tagScope);
+ case "table":
+ return createFormatContext(HTML_TABLE_MODE, null, parentContext.tagScope);
+ case "thead":
+ case "tbody":
+ case "tfoot":
+ return createFormatContext(HTML_TABLE_BODY_MODE, null, parentContext.tagScope);
+ case "colgroup":
+ return createFormatContext(HTML_COLGROUP_MODE, null, parentContext.tagScope);
+ case "tr":
+ return createFormatContext(HTML_TABLE_ROW_MODE, null, parentContext.tagScope);
+ }
+ return parentContext.insertionMode >= HTML_TABLE_MODE ? createFormatContext(HTML_MODE, null, parentContext.tagScope) : parentContext.insertionMode === ROOT_HTML_MODE ? type === "html" ? createFormatContext(HTML_HTML_MODE, null, parentContext.tagScope) : createFormatContext(HTML_MODE, null, parentContext.tagScope) : parentContext.insertionMode === HTML_HTML_MODE ? createFormatContext(HTML_MODE, null, parentContext.tagScope) : parentContext;
+}
+function pushTextInstance(target, text, renderState, textEmbedded) {
+ if (text === "")
+ return textEmbedded;
+ textEmbedded && target.push("");
+ target.push(escapeTextForBrowser(text));
+ return true;
+}
+function pushStyleAttribute(target, style) {
+ if (typeof style !== "object")
+ throw Error("The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.");
+ var isFirst = true, styleName;
+ for (styleName in style)
+ if (hasOwnProperty.call(style, styleName)) {
+ var styleValue = style[styleName];
+ if (styleValue != null && typeof styleValue !== "boolean" && styleValue !== "") {
+ if (styleName.indexOf("--") === 0) {
+ var nameChunk = escapeTextForBrowser(styleName);
+ checkCSSPropertyStringCoercion(styleValue, styleName);
+ styleValue = escapeTextForBrowser(("" + styleValue).trim());
+ } else {
+ nameChunk = styleName;
+ var value = styleValue;
+ if (-1 < nameChunk.indexOf("-")) {
+ var name = nameChunk;
+ warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name] || (warnedStyleNames[name] = true, console.error("Unsupported style property %s. Did you mean %s?", name, camelize(name.replace(msPattern$1, "ms-"))));
+ } else if (badVendoredStyleNamePattern.test(nameChunk))
+ name = nameChunk, warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name] || (warnedStyleNames[name] = true, console.error("Unsupported vendor-prefixed style property %s. Did you mean %s?", name, name.charAt(0).toUpperCase() + name.slice(1)));
+ else if (badStyleValueWithSemicolonPattern.test(value)) {
+ name = nameChunk;
+ var value$jscomp$0 = value;
+ warnedStyleValues.hasOwnProperty(value$jscomp$0) && warnedStyleValues[value$jscomp$0] || (warnedStyleValues[value$jscomp$0] = true, console.error(`Style property values shouldn't contain a semicolon. Try "%s: %s" instead.`, name, value$jscomp$0.replace(badStyleValueWithSemicolonPattern, "")));
+ }
+ typeof value === "number" && (isNaN(value) ? warnedForNaNValue || (warnedForNaNValue = true, console.error("`NaN` is an invalid value for the `%s` css style property.", nameChunk)) : isFinite(value) || warnedForInfinityValue || (warnedForInfinityValue = true, console.error("`Infinity` is an invalid value for the `%s` css style property.", nameChunk)));
+ nameChunk = styleName;
+ value = styleNameCache.get(nameChunk);
+ value !== undefined ? nameChunk = value : (value = escapeTextForBrowser(nameChunk.replace(uppercasePattern, "-$1").toLowerCase().replace(msPattern, "-ms-")), styleNameCache.set(nameChunk, value), nameChunk = value);
+ typeof styleValue === "number" ? styleValue = styleValue === 0 || unitlessNumbers.has(styleName) ? "" + styleValue : styleValue + "px" : (checkCSSPropertyStringCoercion(styleValue, styleName), styleValue = escapeTextForBrowser(("" + styleValue).trim()));
+ }
+ isFirst ? (isFirst = false, target.push(styleAttributeStart, nameChunk, styleAssign, styleValue)) : target.push(styleSeparator, nameChunk, styleAssign, styleValue);
+ }
+ }
+ isFirst || target.push(attributeEnd);
+}
+function pushBooleanAttribute(target, name, value) {
+ value && typeof value !== "function" && typeof value !== "symbol" && target.push(attributeSeparator, name, attributeEmptyString);
+}
+function pushStringAttribute(target, name, value) {
+ typeof value !== "function" && typeof value !== "symbol" && typeof value !== "boolean" && target.push(attributeSeparator, name, attributeAssign, escapeTextForBrowser(value), attributeEnd);
+}
+function pushAdditionalFormField(value, key) {
+ this.push(' must be an array if `multiple` is true.", propName) : !props.multiple && value && console.error("The `%s` prop supplied to must be a scalar value if `multiple` is false.", propName));
+}
+function flattenOptionChildren(children) {
+ var content = "";
+ React.Children.forEach(children, function(child) {
+ child != null && (content += child, didWarnInvalidOptionChildren || typeof child === "string" || typeof child === "number" || typeof child === "bigint" || (didWarnInvalidOptionChildren = true, console.error("Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to .")));
+ });
+ return content;
+}
+function injectFormReplayingRuntime(resumableState, renderState) {
+ (resumableState.instructions & 16) === NothingSent && (resumableState.instructions |= 16, renderState.bootstrapChunks.unshift(renderState.startInlineScript, formReplayingRuntimeScript, ""));
+}
+function pushLinkImpl(target, props) {
+ target.push(startChunkForTag("link"));
+ for (var propKey in props)
+ if (hasOwnProperty.call(props, propKey)) {
+ var propValue = props[propKey];
+ if (propValue != null)
+ switch (propKey) {
+ case "children":
+ case "dangerouslySetInnerHTML":
+ throw Error("link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`.");
+ default:
+ pushAttribute(target, propKey, propValue);
+ }
+ }
+ target.push(endOfStartTagSelfClosing);
+ return null;
+}
+function escapeStyleTextContent(styleText) {
+ checkHtmlStringCoercion(styleText);
+ return ("" + styleText).replace(styleRegex, styleReplacer);
+}
+function styleReplacer(match, prefix, s, suffix) {
+ return "" + prefix + (s === "s" ? "\\73 " : "\\53 ") + suffix;
+}
+function pushSelfClosing(target, props, tag) {
+ target.push(startChunkForTag(tag));
+ for (var propKey in props)
+ if (hasOwnProperty.call(props, propKey)) {
+ var propValue = props[propKey];
+ if (propValue != null)
+ switch (propKey) {
+ case "children":
+ case "dangerouslySetInnerHTML":
+ throw Error(tag + " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`.");
+ default:
+ pushAttribute(target, propKey, propValue);
+ }
+ }
+ target.push(endOfStartTagSelfClosing);
+ return null;
+}
+function pushTitleImpl(target, props) {
+ target.push(startChunkForTag("title"));
+ var children = null, innerHTML = null, propKey;
+ for (propKey in props)
+ if (hasOwnProperty.call(props, propKey)) {
+ var propValue = props[propKey];
+ if (propValue != null)
+ switch (propKey) {
+ case "children":
+ children = propValue;
+ break;
+ case "dangerouslySetInnerHTML":
+ innerHTML = propValue;
+ break;
+ default:
+ pushAttribute(target, propKey, propValue);
+ }
+ }
+ target.push(endOfStartTag);
+ props = Array.isArray(children) ? 2 > children.length ? children[0] : null : children;
+ typeof props !== "function" && typeof props !== "symbol" && props !== null && props !== undefined && target.push(escapeTextForBrowser("" + props));
+ pushInnerHTML(target, innerHTML, children);
+ target.push(endChunkForTag("title"));
+ return null;
+}
+function pushScriptImpl(target, props) {
+ target.push(startChunkForTag("script"));
+ var children = null, innerHTML = null, propKey;
+ for (propKey in props)
+ if (hasOwnProperty.call(props, propKey)) {
+ var propValue = props[propKey];
+ if (propValue != null)
+ switch (propKey) {
+ case "children":
+ children = propValue;
+ break;
+ case "dangerouslySetInnerHTML":
+ innerHTML = propValue;
+ break;
+ default:
+ pushAttribute(target, propKey, propValue);
+ }
+ }
+ target.push(endOfStartTag);
+ children != null && typeof children !== "string" && (props = typeof children === "number" ? "a number for children" : Array.isArray(children) ? "an array for children" : "something unexpected for children", console.error("A script element was rendered with %s. If script element has children it must be a single string. Consider using dangerouslySetInnerHTML or passing a plain string as children.", props));
+ pushInnerHTML(target, innerHTML, children);
+ typeof children === "string" && target.push(escapeEntireInlineScriptContent(children));
+ target.push(endChunkForTag("script"));
+ return null;
+}
+function pushStartGenericElement(target, props, tag) {
+ target.push(startChunkForTag(tag));
+ var innerHTML = tag = null, propKey;
+ for (propKey in props)
+ if (hasOwnProperty.call(props, propKey)) {
+ var propValue = props[propKey];
+ if (propValue != null)
+ switch (propKey) {
+ case "children":
+ tag = propValue;
+ break;
+ case "dangerouslySetInnerHTML":
+ innerHTML = propValue;
+ break;
+ default:
+ pushAttribute(target, propKey, propValue);
+ }
+ }
+ target.push(endOfStartTag);
+ pushInnerHTML(target, innerHTML, tag);
+ return typeof tag === "string" ? (target.push(escapeTextForBrowser(tag)), null) : tag;
+}
+function startChunkForTag(tag) {
+ var tagStartChunk = validatedTagCache.get(tag);
+ if (tagStartChunk === undefined) {
+ if (!VALID_TAG_REGEX.test(tag))
+ throw Error("Invalid tag: " + tag);
+ tagStartChunk = "<" + tag;
+ validatedTagCache.set(tag, tagStartChunk);
+ }
+ return tagStartChunk;
+}
+function pushStartInstance(target$jscomp$0, type, props, resumableState, renderState, hoistableState, formatContext, textEmbedded, isFallback) {
+ validateProperties$2(type, props);
+ type !== "input" && type !== "textarea" && type !== "select" || props == null || props.value !== null || didWarnValueNull || (didWarnValueNull = true, type === "select" && props.multiple ? console.error("`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.", type) : console.error("`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.", type));
+ b:
+ if (type.indexOf("-") === -1)
+ var JSCompiler_inline_result = false;
+ else
+ switch (type) {
+ case "annotation-xml":
+ case "color-profile":
+ case "font-face":
+ case "font-face-src":
+ case "font-face-uri":
+ case "font-face-format":
+ case "font-face-name":
+ case "missing-glyph":
+ JSCompiler_inline_result = false;
+ break b;
+ default:
+ JSCompiler_inline_result = true;
+ }
+ JSCompiler_inline_result || typeof props.is === "string" || warnUnknownProperties(type, props, null);
+ !props.suppressContentEditableWarning && props.contentEditable && props.children != null && console.error("A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional.");
+ formatContext.insertionMode !== SVG_MODE && formatContext.insertionMode !== MATHML_MODE && type.indexOf("-") === -1 && type.toLowerCase() !== type && console.error("<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.", type);
+ switch (type) {
+ case "div":
+ case "span":
+ case "svg":
+ case "path":
+ break;
+ case "a":
+ target$jscomp$0.push(startChunkForTag("a"));
+ var children = null, innerHTML = null, propKey;
+ for (propKey in props)
+ if (hasOwnProperty.call(props, propKey)) {
+ var propValue = props[propKey];
+ if (propValue != null)
+ switch (propKey) {
+ case "children":
+ children = propValue;
+ break;
+ case "dangerouslySetInnerHTML":
+ innerHTML = propValue;
+ break;
+ case "href":
+ propValue === "" ? pushStringAttribute(target$jscomp$0, "href", "") : pushAttribute(target$jscomp$0, propKey, propValue);
+ break;
+ default:
+ pushAttribute(target$jscomp$0, propKey, propValue);
+ }
+ }
+ target$jscomp$0.push(endOfStartTag);
+ pushInnerHTML(target$jscomp$0, innerHTML, children);
+ if (typeof children === "string") {
+ target$jscomp$0.push(escapeTextForBrowser(children));
+ var JSCompiler_inline_result$jscomp$0 = null;
+ } else
+ JSCompiler_inline_result$jscomp$0 = children;
+ return JSCompiler_inline_result$jscomp$0;
+ case "g":
+ case "p":
+ case "li":
+ break;
+ case "select":
+ checkControlledValueProps("select", props);
+ checkSelectProp(props, "value");
+ checkSelectProp(props, "defaultValue");
+ props.value === undefined || props.defaultValue === undefined || didWarnDefaultSelectValue || (console.error("Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components"), didWarnDefaultSelectValue = true);
+ target$jscomp$0.push(startChunkForTag("select"));
+ var children$jscomp$0 = null, innerHTML$jscomp$0 = null, propKey$jscomp$0;
+ for (propKey$jscomp$0 in props)
+ if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+ var propValue$jscomp$0 = props[propKey$jscomp$0];
+ if (propValue$jscomp$0 != null)
+ switch (propKey$jscomp$0) {
+ case "children":
+ children$jscomp$0 = propValue$jscomp$0;
+ break;
+ case "dangerouslySetInnerHTML":
+ innerHTML$jscomp$0 = propValue$jscomp$0;
+ break;
+ case "defaultValue":
+ case "value":
+ break;
+ default:
+ pushAttribute(target$jscomp$0, propKey$jscomp$0, propValue$jscomp$0);
+ }
+ }
+ target$jscomp$0.push(endOfStartTag);
+ pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+ return children$jscomp$0;
+ case "option":
+ var selectedValue = formatContext.selectedValue;
+ target$jscomp$0.push(startChunkForTag("option"));
+ var children$jscomp$1 = null, value = null, selected = null, innerHTML$jscomp$1 = null, propKey$jscomp$1;
+ for (propKey$jscomp$1 in props)
+ if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+ var propValue$jscomp$1 = props[propKey$jscomp$1];
+ if (propValue$jscomp$1 != null)
+ switch (propKey$jscomp$1) {
+ case "children":
+ children$jscomp$1 = propValue$jscomp$1;
+ break;
+ case "selected":
+ selected = propValue$jscomp$1;
+ didWarnSelectedSetOnOption || (console.error("Use the `defaultValue` or `value` props on instead of setting `selected` on ."), didWarnSelectedSetOnOption = true);
+ break;
+ case "dangerouslySetInnerHTML":
+ innerHTML$jscomp$1 = propValue$jscomp$1;
+ break;
+ case "value":
+ value = propValue$jscomp$1;
+ default:
+ pushAttribute(target$jscomp$0, propKey$jscomp$1, propValue$jscomp$1);
+ }
+ }
+ if (selectedValue != null) {
+ if (value !== null) {
+ checkAttributeStringCoercion(value, "value");
+ var stringValue = "" + value;
+ } else
+ innerHTML$jscomp$1 === null || didWarnInvalidOptionInnerHTML || (didWarnInvalidOptionInnerHTML = true, console.error("Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected.")), stringValue = flattenOptionChildren(children$jscomp$1);
+ if (isArrayImpl(selectedValue))
+ for (var i = 0;i < selectedValue.length; i++) {
+ if (checkAttributeStringCoercion(selectedValue[i], "value"), "" + selectedValue[i] === stringValue) {
+ target$jscomp$0.push(' selected=""');
+ break;
+ }
+ }
+ else
+ checkAttributeStringCoercion(selectedValue, "select.value"), "" + selectedValue === stringValue && target$jscomp$0.push(' selected=""');
+ } else
+ selected && target$jscomp$0.push(' selected=""');
+ target$jscomp$0.push(endOfStartTag);
+ pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+ return children$jscomp$1;
+ case "textarea":
+ checkControlledValueProps("textarea", props);
+ props.value === undefined || props.defaultValue === undefined || didWarnDefaultTextareaValue || (console.error("Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components"), didWarnDefaultTextareaValue = true);
+ target$jscomp$0.push(startChunkForTag("textarea"));
+ var value$jscomp$0 = null, defaultValue = null, children$jscomp$2 = null, propKey$jscomp$2;
+ for (propKey$jscomp$2 in props)
+ if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+ var propValue$jscomp$2 = props[propKey$jscomp$2];
+ if (propValue$jscomp$2 != null)
+ switch (propKey$jscomp$2) {
+ case "children":
+ children$jscomp$2 = propValue$jscomp$2;
+ break;
+ case "value":
+ value$jscomp$0 = propValue$jscomp$2;
+ break;
+ case "defaultValue":
+ defaultValue = propValue$jscomp$2;
+ break;
+ case "dangerouslySetInnerHTML":
+ throw Error("`dangerouslySetInnerHTML` does not make sense on