From c4c0e28171d6c5f8e1c9efa449be991475365537 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=90=BD=E7=BE=BD=E8=A1=8C=E6=AD=8C?= <2481036245@qq.com>
Date: Thu, 1 Jan 2026 00:33:34 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E5=85=83=E6=97=A6=E5=BF=AB=E4=B9=90?=
=?UTF-8?q?=E7=89=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
整体简化,改了几个命名,写了个失败的小鹤方案,写了几个小工具
---
.github/workflows/deploy.yml | 4 +-
.vscode/settings.json | 12 +
Cargo.lock | 199 +++--
Cargo.toml | 25 +-
README.md | 8 +-
dist/index.html | 147 ++++
dist/style-30a24b8734e4af3b.css | 333 ++++++++
dist/typewriter-f48c7fe5720da575.js | 977 +++++++++++++++++++++++
dist/typewriter-f48c7fe5720da575_bg.wasm | Bin 0 -> 16388517 bytes
src/.vscode/settings.json | 9 +
src/action.rs | 18 +-
src/app.rs | 371 ++++-----
src/definition.rs | 150 ++--
src/drill/alphabet.rs | 30 +-
src/drill/ancient_chinese.rs | 94 ++-
src/drill/cantonese.rs | 40 +-
src/drill/combo_pinyin.rs | 161 ++--
src/drill/double_pinyin_fly.rs | 79 ++
src/drill/mod.rs | 55 +-
src/engine.rs | 393 +++++----
src/gear/assignment.rs | 322 ++++----
src/gear/caption.rs | 245 +++---
src/gear/chord.rs | 148 ++--
src/gear/input.rs | 50 +-
src/gear/key_press.rs | 132 ++-
src/gear/layout.rs | 340 ++++----
src/gear/mode.rs | 117 ++-
src/gear/theory.rs | 112 ++-
src/key_code.rs | 248 +++---
src/main.rs | 24 +-
src/rime2_api.rs | 64 ++
src/rime2_api_deprecated.rs | 0
src/spelling_algebra.rs | 97 ++-
src/theory/alphabet.rs | 125 ++-
src/theory/cantonese.rs | 338 ++++----
src/theory/combo_jyutping.rs | 367 +++++----
src/theory/combo_pinyin.rs | 444 +++++-----
src/theory/double_pinyin_fly.rs | 223 ++++++
src/theory/early_middle_chinese.rs | 253 +++---
src/theory/late_middle_chinese.rs | 253 +++---
src/theory/mod.rs | 1 +
src/theory/modern_chinese.rs | 215 +++--
src/theory/old_chinese.rs | 295 ++++---
src/theory/old_mandarin.rs | 195 +++--
src/view/caption.rs | 8 +-
src/view/exercise_menu.rs | 40 +-
src/view/input_code.rs | 80 +-
src/view/keyboard.rs | 152 ++--
src/view/layout_menu.rs | 39 +-
src/view/status_bar.rs | 38 +-
src/view/theory_menu.rs | 38 +-
tool/custom_attribute_macro/Cargo.toml | 21 +
tool/custom_attribute_macro/src/lib.rs | 88 ++
tool/parse_cargo_toml/Cargo.toml | 14 +
tool/parse_cargo_toml/src/lib.rs | 55 ++
55 files changed, 5176 insertions(+), 3110 deletions(-)
create mode 100644 .vscode/settings.json
create mode 100644 dist/index.html
create mode 100644 dist/style-30a24b8734e4af3b.css
create mode 100644 dist/typewriter-f48c7fe5720da575.js
create mode 100644 dist/typewriter-f48c7fe5720da575_bg.wasm
create mode 100644 src/.vscode/settings.json
create mode 100644 src/drill/double_pinyin_fly.rs
create mode 100644 src/rime2_api.rs
create mode 100644 src/rime2_api_deprecated.rs
create mode 100644 src/theory/double_pinyin_fly.rs
create mode 100644 tool/custom_attribute_macro/Cargo.toml
create mode 100644 tool/custom_attribute_macro/src/lib.rs
create mode 100644 tool/parse_cargo_toml/Cargo.toml
create mode 100644 tool/parse_cargo_toml/src/lib.rs
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 68bfe0c..88a2b70 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -51,13 +51,13 @@ jobs:
run: cargo clippy -- -D warnings && cargo fmt -- --check
# 6. 構建 (Build)
- # --dist dist/typewriter: 將產物放在子目錄,為了適配 rime.io/typewriter/ 結構
+ # --dist dist/typewriter: 将產物放在子目錄,為了適配 rime.io/typewriter/ 結構
# --public-url "/typewriter/": 確保資源引用路徑正確
- name: Build with Trunk
run: ./trunk build --release --dist dist/typewriter --public-url "/typewriter/"
# 7. 配置 Cloudflare 重定向
- # 讓訪問 rime.io (根路徑) 的用戶自動跳轉到 rime.io/typewriter/
+ # 讓訪問 rime.io (根路徑) 的用戶自動跳转到 rime.io/typewriter/
- name: Create _redirects for Cloudflare
run: echo "/ /typewriter 301" > dist/_redirects
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..fba7cfe
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,12 @@
+{
+ "files.encoding": "utf8",
+ "files.eol": "\n",
+ "editor.rulers": [
+ 40,
+ 80,
+ 120
+ ],
+ "cSpell.words": [
+ "chrono"
+ ]
+}
\ No newline at end of file
diff --git a/Cargo.lock b/Cargo.lock
index fc295fc..a4b48ee 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -39,9 +39,9 @@ checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
[[package]]
name = "async-lock"
-version = "3.4.1"
+version = "3.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc"
+checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311"
dependencies = [
"event-listener",
"event-listener-strategy",
@@ -136,15 +136,15 @@ checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
[[package]]
name = "bytes"
-version = "1.10.1"
+version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
+checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3"
[[package]]
name = "camino"
-version = "1.2.1"
+version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609"
+checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48"
[[package]]
name = "cc"
@@ -177,9 +177,9 @@ dependencies = [
[[package]]
name = "codee"
-version = "0.3.3"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "774365d8238a8dbd57c3047f865187fe6417e765d9955ba8e99e794678a41a0e"
+checksum = "a9dbbdc4b4d349732bc6690de10a9de952bd39ba6a065c586e26600b6b0b91f5"
dependencies = [
"serde",
"serde_json",
@@ -203,9 +203,9 @@ dependencies = [
[[package]]
name = "config"
-version = "0.15.18"
+version = "0.15.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "180e549344080374f9b32ed41bf3b6b57885ff6a289367b3dbc10eea8acc1918"
+checksum = "b30fa8254caad766fc03cb0ccae691e14bf3bd72bfff27f72802ce729551b3d6"
dependencies = [
"convert_case 0.6.0",
"pathdiff",
@@ -226,9 +226,9 @@ dependencies = [
[[package]]
name = "const-str"
-version = "0.6.4"
+version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "451d0640545a0553814b4c646eb549343561618838e9b42495f466131fe3ad49"
+checksum = "b0664d2867b4a32697dfe655557f5c3b187e9b605b38612a748e5ec99811d160"
[[package]]
name = "const_format"
@@ -308,14 +308,26 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crypto-common"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
dependencies = [
"generic-array",
"typenum",
]
+[[package]]
+name = "custom_attribute_macro"
+version = "0.0.1"
+dependencies = [
+ "chrono",
+ "parse_cargo_toml",
+ "proc-macro2",
+ "quote",
+ "semver",
+ "syn",
+]
+
[[package]]
name = "darling"
version = "0.20.11"
@@ -586,9 +598,9 @@ dependencies = [
[[package]]
name = "generic-array"
-version = "0.14.9"
+version = "0.14.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
@@ -695,12 +707,11 @@ dependencies = [
[[package]]
name = "http"
-version = "1.3.1"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
+checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
dependencies = [
"bytes",
- "fnv",
"itoa",
]
@@ -790,9 +801,9 @@ checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
[[package]]
name = "icu_properties"
-version = "2.1.1"
+version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
+checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec"
dependencies = [
"icu_collections",
"icu_locale_core",
@@ -804,9 +815,9 @@ dependencies = [
[[package]]
name = "icu_properties_data"
-version = "2.1.1"
+version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
+checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af"
[[package]]
name = "icu_provider"
@@ -877,15 +888,15 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.15"
+version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
[[package]]
name = "js-sys"
-version = "0.3.82"
+version = "0.3.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
+checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8"
dependencies = [
"once_cell",
"wasm-bindgen",
@@ -922,9 +933,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "leptos"
-version = "0.8.12"
+version = "0.8.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b78b04cc52d6f6372e546afcd8ed98ee29ea1a9221b19befb8f9961e47b8307c"
+checksum = "87c98f6d751e524ff425ad9d63d53e120ed68311ffbc22bbd9c0b3c4005a421e"
dependencies = [
"any_spawner",
"cfg-if",
@@ -952,8 +963,8 @@ dependencies = [
"tachys",
"thiserror 2.0.17",
"throw_error",
- "typed-builder",
- "typed-builder-macro",
+ "typed-builder 0.22.0",
+ "typed-builder-macro 0.22.0",
"wasm-bindgen",
"wasm-bindgen-futures",
"wasm_split_helpers",
@@ -962,9 +973,9 @@ dependencies = [
[[package]]
name = "leptos-use"
-version = "0.16.3"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce2162c453100c7d6bc0b6f188ef1df582e35c2458caf6cb69fcddc87619c0db"
+checksum = "3a59caa13dbc0f4d71bf3d610884953273c52a0bbe995b35d36cdb1c8f91142f"
dependencies = [
"cfg-if",
"chrono",
@@ -987,15 +998,15 @@ dependencies = [
[[package]]
name = "leptos_config"
-version = "0.8.7"
+version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "240b4cb96284256a44872563cf029f24d6fe14bc341dcf0f4164e077cb5a1471"
+checksum = "071fc40aeb9fcab885965bad1887990477253ad51f926cd19068f45a44c59e89"
dependencies = [
"config",
"regex",
"serde",
"thiserror 2.0.17",
- "typed-builder",
+ "typed-builder 0.21.2",
]
[[package]]
@@ -1033,9 +1044,9 @@ dependencies = [
[[package]]
name = "leptos_macro"
-version = "0.8.11"
+version = "0.8.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2009e2cc8ac3aa3e417c51d2a2b951c34dfea51f25935717b564c347fb20cb3f"
+checksum = "9d199fafe14b7925fd392764fdd851215909604955acfda7c0263b8722d57c23"
dependencies = [
"attribute-derive",
"cfg-if",
@@ -1056,9 +1067,9 @@ dependencies = [
[[package]]
name = "leptos_server"
-version = "0.8.5"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38acbf32649a4b127c8d4ccaed8fb388e19a746430a0ea8f8160e51e28c36e2d"
+checksum = "dbf1045af93050bf3388d1c138426393fc131f6d9e46a65519da884c033ed730"
dependencies = [
"any_spawner",
"base64",
@@ -1224,6 +1235,15 @@ dependencies = [
"windows-link",
]
+[[package]]
+name = "parse_cargo_toml"
+version = "0.0.1"
+dependencies = [
+ "chrono",
+ "semver",
+ "toml",
+]
+
[[package]]
name = "paste"
version = "1.0.15"
@@ -1393,9 +1413,9 @@ checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
name = "reactive_graph"
-version = "0.2.9"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77cbe7c61b939523104883fd00d431f6c681c7005fd350f01a9ff2fc96509399"
+checksum = "4043190442021086719fb9183daacb050f44d4ed8d3a1c8534e366d45dd95c29"
dependencies = [
"any_spawner",
"async-lock",
@@ -1404,6 +1424,7 @@ dependencies = [
"hydration_context",
"indexmap",
"or_poisoned",
+ "paste",
"pin-project-lite",
"rustc-hash",
"rustc_version",
@@ -1518,12 +1539,6 @@ version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
-[[package]]
-name = "ryu"
-version = "1.0.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
-
[[package]]
name = "same-file"
version = "1.0.6"
@@ -1586,15 +1601,15 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.145"
+version = "1.0.148"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
+checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da"
dependencies = [
"itoa",
"memchr",
- "ryu",
"serde",
"serde_core",
+ "zmij",
]
[[package]]
@@ -1619,9 +1634,9 @@ dependencies = [
[[package]]
name = "server_fn"
-version = "0.8.8"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdc30228718f62d80a376964baf990edbcb5e97688fdc71183a8ef3d44cb6c89"
+checksum = "353d02fa2886cd8dae0b8da0965289fa8f2ecc7df633d1ce965f62fdf9644d29"
dependencies = [
"base64",
"bytes",
@@ -1700,9 +1715,9 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
[[package]]
name = "slotmap"
-version = "1.0.7"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a"
+checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038"
dependencies = [
"version_check",
]
@@ -1782,9 +1797,9 @@ dependencies = [
[[package]]
name = "tachys"
-version = "0.2.10"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f88be37609c1891b748ed1feb9b08b0e772156a80d586b38726253f80859134d"
+checksum = "f2b2db11e455f7e84e2cc3e76f8a3f3843f7956096265d5ecff781eabe235077"
dependencies = [
"any_spawner",
"async-trait",
@@ -1911,10 +1926,12 @@ version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8"
dependencies = [
+ "indexmap",
"serde_core",
"serde_spanned",
"toml_datetime",
"toml_parser",
+ "toml_writer",
"winnow",
]
@@ -1936,13 +1953,28 @@ dependencies = [
"winnow",
]
+[[package]]
+name = "toml_writer"
+version = "1.0.6+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607"
+
[[package]]
name = "typed-builder"
version = "0.21.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fef81aec2ca29576f9f6ae8755108640d0a86dd3161b2e8bca6cfa554e98f77d"
dependencies = [
- "typed-builder-macro",
+ "typed-builder-macro 0.21.2",
+]
+
+[[package]]
+name = "typed-builder"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "398a3a3c918c96de527dc11e6e846cd549d4508030b8a33e1da12789c856b81a"
+dependencies = [
+ "typed-builder-macro 0.22.0",
]
[[package]]
@@ -1956,6 +1988,17 @@ dependencies = [
"syn",
]
+[[package]]
+name = "typed-builder-macro"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e48cea23f68d1f78eb7bc092881b6bb88d3d6b5b7e6234f6f9c911da1ffb221"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
[[package]]
name = "typenum"
version = "1.19.0"
@@ -1967,11 +2010,13 @@ name = "typewriter"
version = "0.1.0"
dependencies = [
"console_error_panic_hook",
+ "custom_attribute_macro",
"lazy-regex",
"lazy_static",
"leptos",
"leptos-use",
"maybe-owned",
+ "parse_cargo_toml",
"strum",
]
@@ -2025,9 +2070,9 @@ dependencies = [
[[package]]
name = "utf8-width"
-version = "0.1.7"
+version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3"
+checksum = "1292c0d970b54115d14f2492fe0170adf21d68a1de108eebc51c1df4f346a091"
[[package]]
name = "utf8_iter"
@@ -2037,9 +2082,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
[[package]]
name = "uuid"
-version = "1.18.1"
+version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2"
+checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a"
dependencies = [
"getrandom",
"js-sys",
@@ -2073,9 +2118,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen"
-version = "0.2.105"
+version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
+checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd"
dependencies = [
"cfg-if",
"once_cell",
@@ -2086,9 +2131,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.55"
+version = "0.4.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
+checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c"
dependencies = [
"cfg-if",
"js-sys",
@@ -2099,9 +2144,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.105"
+version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
+checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -2109,9 +2154,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.105"
+version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
+checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -2122,9 +2167,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.105"
+version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
+checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4"
dependencies = [
"unicode-ident",
]
@@ -2166,9 +2211,9 @@ dependencies = [
[[package]]
name = "web-sys"
-version = "0.3.82"
+version = "0.3.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
+checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -2361,3 +2406,9 @@ dependencies = [
"quote",
"syn",
]
+
+[[package]]
+name = "zmij"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3280a1b827474fcd5dbef4b35a674deb52ba5c312363aef9135317df179d81b"
diff --git a/Cargo.toml b/Cargo.toml
index 2c806ed..e4a21a6 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,18 +1,27 @@
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
[package]
name = "typewriter"
-version = "0.1.0"
edition = "2021"
+version = "0.1.0"
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+[package.metadata]
+update_date = "2025-12-31"
+
+[workspace]
+members = ["tool/*"]
[dependencies]
-console_error_panic_hook = "0.1.7"
-lazy-regex = "3.4.1"
-lazy_static = "1.5.0"
+custom_attribute_macro = { path = "tool/custom_attribute_macro" }
+parse_cargo_toml = { path = "tool/parse_cargo_toml" }
+
+console_error_panic_hook = "0.1"
+lazy-regex = "3.4"
+lazy_static = "1.5"
leptos = { version = "0.8", features = ["csr", "nightly"] }
-leptos-use = "0.16"
-maybe-owned = "0.3.4"
-strum = { version = "0.27.1", features = ["derive"] }
+leptos-use = "0.17"
+maybe-owned = "0.3"
+strum = { version = "0.27", features = ["derive"] }
[profile.release]
codegen-units = 1
diff --git a/README.md b/README.md
index 05ceb06..24bfe9a 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
-# RIME 打字機
+# RIME 打字机
-宮保拼音打字練習
+宫保拼音打字练习
-內置開發版 Rime 輸入法微觀引擎
+内置开发版 Rime 输入法微观引擎
## 用法
-``` sh
+```sh
trunk serve --open
```
diff --git a/dist/index.html b/dist/index.html
new file mode 100644
index 0000000..c0fc617
--- /dev/null
+++ b/dist/index.html
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
diff --git a/dist/style-30a24b8734e4af3b.css b/dist/style-30a24b8734e4af3b.css
new file mode 100644
index 0000000..26e0998
--- /dev/null
+++ b/dist/style-30a24b8734e4af3b.css
@@ -0,0 +1,333 @@
+:root {
+ color-scheme: light dark;
+ --u: min(80px, 6.5vw, 12vh);
+ --gap: calc(var(--u) * 0.2);
+}
+@media (prefers-color-scheme: light) {
+ :root {
+ --primary-fg-color: black;
+ --primary-bg-color: white;
+ --inverted-fg-color: white;
+ --inverted-bg-color: black;
+ --secondary-fg-color: gray;
+ --accent-color-active: purple;
+ --accent-color-done: teal;
+ --accent-color-hint: green;
+ --secondary-label-opacity: 33%;
+ --function-key-opacity: 15%;
+ --function-key-opacity-keydown: 33%;
+ --function-key-opacity-hint: 50%;
+ --insignificant-key-opacity: 33%;
+ --color-mix-percentage-done: 15%;
+ --color-mix-percentage-hint: 10%;
+ --color-mix-percentage-active: 25%;
+ }
+}
+@media (prefers-color-scheme: dark) {
+ :root {
+ --primary-fg-color: #CCC;
+ --primary-bg-color: #111;
+ --inverted-fg-color: black;
+ --inverted-bg-color: white;
+ --secondary-fg-color: gray;
+ --accent-color-active: violet;
+ --accent-color-done: cyan;
+ --accent-color-hint: lightgreen;
+ --secondary-label-opacity: 50%;
+ --function-key-opacity: 33%;
+ --function-key-opacity-keydown: 50%;
+ --insignificant-key-opacity: 33%;
+ --color-mix-percentage-done: 33%;
+ --color-mix-percentage-hint: 20%;
+ --color-mix-percentage-active: 40%;
+ }
+}
+body {
+ color: var(--primary-fg-color);
+ background-color: var(--primary-bg-color);
+ padding-bottom: calc(var(--u) * 0.8);
+ box-sizing: border-box;
+ min-height: 100vh;
+}
+kbd {
+ font-family: LXGW WenKai, Maple Mono CN, Maple Mono, Inter, sans-serif;
+}
+.text-box {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 18vh;
+ margin: 2vh 24px;
+}
+.caption {
+ //border: 1px dotted;
+ //border-radius: 32px;
+ color: var(--secondary-fg-color);
+ font-family: LXGW WenKai, Maple Mono CN, Maple Mono, Inter, sans-serif;
+ font-size: max(24px, calc(var(--u) * 0.7));
+ line-height: 1.4;
+ padding: 16px 32px;
+ text-align: center;
+ width: fit-content;
+}
+.caption .accepted {
+ color: var(--accent-color-done);
+}
+.caption .highlight {
+ color: var(--accent-color-active);
+}
+.caption .cursor {
+ text-decoration: underline;
+}
+.echo-bar {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ gap: var(--gap);
+ margin: calc(var(--u) * 0.2) 0;
+ height: var(--u);
+}
+.input-code {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ gap: 24px;
+ width: calc(var(--u) * 4.8);
+ height: var(--u);
+ margin: 2px;
+ border: 1px dotted;
+ border-radius: 24px;
+ font-size: calc(var(--u) * 0.4);
+ overflow: hidden;
+}
+.input-code.freeplay {
+ border-color: var(--accent-color-active);
+ color: var(--accent-color-active);
+}
+.input-code.target {
+ border-color: var(--accent-color-hint);
+ color: var(--accent-color-hint);
+}
+.input-code.success {
+ background-color: color-mix(in srgb, var(--accent-color-done) var(--color-mix-percentage-done), transparent);
+ border-color: var(--accent-color-done);
+ color: var(--accent-color-done);
+}
+.translated-input, .lookup-code, .exercises, .theories, .layouts {
+ font-family: LXGW WenKai, Maple Mono CN, Maple Mono, Inter, sans-serif;
+ font-size: calc(var(--u) * 0.4);
+}
+.input-code .single-column {
+ flex: 1;
+ text-align: center;
+ padding: 8px;
+}
+.input-code .left-column {
+ flex: 1;
+ text-align: right;
+}
+.input-code .right-column {
+ flex: 1;
+ overflow: visible;
+ overflow-wrap: break-word;
+ white-space: nowrap;
+}
+.lookup-code, .exercises, .theories, .layouts {
+ border: 1px dotted var(--accent-color-hint);
+ border-radius: 10px;
+ margin: auto 18px;
+ width: 100%;
+}
+.board {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+
+ gap: var(--gap);
+ font-size: calc(var(--u) * 0.4);
+ padding: 10px;
+ box-sizing: border-box;
+}
+.board .row:last-child .key {
+ width: calc(var(--u) * 4.6);
+ height: var(--u);
+ border-radius: 10% / 30%;
+}
+.board.ortholinear.split .row:last-child .key {
+ width: calc(var(--u) * 2.2);
+ height: var(--u);
+ border-radius: 20% / 40%;
+}
+.board.staggered .row:last-child .key {
+ width: calc(var(--u) * 5.8);
+ height: var(--u);
+ border-radius: 5% / 30%;
+}
+.board.ortholinear.split .row:nth-child(-n+4) .key:nth-child(6),
+.board.ortholinear.split .row:last-child .key:last-child {
+ margin-left: var(--u);
+}
+.board.size-30.staggered .row:nth-child(3) .key:first-child,
+.board.size-30.staggered .row:nth-child(4) .key:first-child {
+ margin-left: calc(var(--u) * 0.6375);
+}
+.board.size-60.staggered .row:nth-child(3) .key:first-child {
+ margin-left: calc(var(--u) * 0.6375);
+}
+.board.size-60.staggered .row:nth-child(4) .key:first-child {
+ margin-left: calc(var(--u) * -0.6375);
+}
+.row {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ gap: var(--gap);
+}
+.key {
+ border: 3px solid;
+ border-radius: 40% 40% 20% 20% / 50% 50% 30% 30%;
+ width: var(--u);
+ height: var(--u);
+ box-sizing: border-box;
+}
+.board .row:nth-child(3) .key:nth-child(4) kbd.label.primary,
+.board .row:nth-child(3) .key:nth-child(7) kbd.label.primary {
+ text-decoration: underline;
+ text-decoration-color: color-mix(in srgb, var(--secondary-fg-color) 66%, transparent);
+ text-underline-offset: 16px;
+}
+.function.key, .function.key.pressed {
+ color: var(--inverted-fg-color);
+ background-color: var(--inverted-bg-color);
+ opacity: var(--function-key-opacity);
+}
+.function.key.keydown {
+ color: var(--inverted-fg-color);
+ background-color: var(--inverted-bg-color);
+ opacity: var(--function-key-opacity-keydown);
+}
+.key.hint {
+ color: var(--accent-color-hint);
+ background-color: color-mix(in srgb, var(--accent-color-hint) var(--color-mix-percentage-hint), transparent);
+}
+.key.pressed {
+ color: var(--accent-color-active);
+ background-color: color-mix(in srgb, var(--accent-color-active) var(--color-mix-percentage-hint), transparent);
+}
+.key.hint.pressed {
+ color: var(--accent-color-done);
+ background-color: color-mix(in srgb, var(--accent-color-done) var(--color-mix-percentage-active), transparent);
+}
+.key.keydown, .key.hint.keydown {
+ color: var(--accent-color-active);
+ background-color: color-mix(in srgb, var(--accent-color-active) var(--color-mix-percentage-active), transparent);
+}
+.function.key.hint {
+ color: var(--inverted-fg-color);
+ background-color: var(--accent-color-hint);
+ opacity: var(--function-key-opacity-hint);
+}
+.function.key.hint.pressed {
+ color: var(--inverted-fg-color);
+ background-color: var(--accent-color-done);
+ opacity: var(--function-key-opacity-hint);
+}
+.key.fallback, .key.empty {
+ opacity: var(--insignificant-key-opacity);
+}
+.key.hidden {
+ visibility: hidden;
+}
+.key .label {
+ font-size: 1em;
+ margin: auto;
+ vertical-align: middle;
+ text-align: center;
+ line-height: 1;
+ flex: 1;
+}
+.key .label.secondary {
+ font-size: 0.6em;
+ opacity: var(--secondary-label-opacity);
+}
+.function.key .label {
+ font-size: calc(var(--u) * 0.24);
+ line-height: 1;
+}
+.function.key .label.secondary {
+ font-size: calc(var(--u) * 0.16);
+}
+.vertical-box, .horizontal-box {
+ display: flex;
+ justify-content: center;
+}
+.vertical-box {
+ flex-direction: column;
+}
+.horizontal-box {
+ flex-direction: row;
+}
+.vertical-box:first-child > .label.secondary {
+ margin-bottom: auto;
+}
+.vertical-box:last-child > .label.secondary {
+ margin-top: auto;
+}
+.horizontal-box:first-child > .label.secondary {
+ margin-right: auto;
+}
+.horizontal-box:last-child > .label.secondary {
+ margin-left: auto;
+}
+
+.status-bar {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: max(32px, calc(var(--u) * 0.5));
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: calc(var(--u) * 0.4);
+ background-color: transparent;
+ font-family: LXGW WenKai, Maple Mono CN, Maple Mono, Inter, sans-serif;
+ font-size: max(12px, calc(var(--u) * 0.2));
+ opacity: 0.3;
+ transition: opacity 0.2s ease-in-out;
+ user-select: none;
+ pointer-events: none;
+ z-index: 100;
+}
+
+.status-bar:hover {
+ opacity: 1.0;
+ pointer-events: auto;
+}
+
+.status-item {
+ cursor: pointer;
+ display: flex;
+ gap: calc(var(--u) * 0.1);
+ align-items: center;
+ pointer-events: auto;
+ transition: color 0.15s;
+}
+
+.status-item:hover {
+ color: var(--accent-color-active);
+}
+
+.status-label {
+ color: var(--secondary-fg-color);
+ font-size: max(11px, calc(var(--u) * 0.18));
+}
+
+.status-value {
+ font-weight: bold;
+ color: var(--primary-fg-color);
+ text-decoration: underline;
+ text-decoration-style: dotted;
+ text-decoration-thickness: 1px;
+ text-underline-offset: 0.2em;
+}
diff --git a/dist/typewriter-f48c7fe5720da575.js b/dist/typewriter-f48c7fe5720da575.js
new file mode 100644
index 0000000..4d71791
--- /dev/null
+++ b/dist/typewriter-f48c7fe5720da575.js
@@ -0,0 +1,977 @@
+let wasm;
+
+function addToExternrefTable0(obj) {
+ const idx = wasm.__externref_table_alloc();
+ wasm.__wbindgen_externrefs.set(idx, obj);
+ return idx;
+}
+
+const CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(state => state.dtor(state.a, state.b));
+
+function debugString(val) {
+ // primitive types
+ const type = typeof val;
+ if (type == 'number' || type == 'boolean' || val == null) {
+ return `${val}`;
+ }
+ if (type == 'string') {
+ return `"${val}"`;
+ }
+ if (type == 'symbol') {
+ const description = val.description;
+ if (description == null) {
+ return 'Symbol';
+ } else {
+ return `Symbol(${description})`;
+ }
+ }
+ if (type == 'function') {
+ const name = val.name;
+ if (typeof name == 'string' && name.length > 0) {
+ return `Function(${name})`;
+ } else {
+ return 'Function';
+ }
+ }
+ // objects
+ if (Array.isArray(val)) {
+ const length = val.length;
+ let debug = '[';
+ if (length > 0) {
+ debug += debugString(val[0]);
+ }
+ for(let i = 1; i < length; i++) {
+ debug += ', ' + debugString(val[i]);
+ }
+ debug += ']';
+ return debug;
+ }
+ // Test for built-in
+ const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
+ let className;
+ if (builtInMatches && builtInMatches.length > 1) {
+ className = builtInMatches[1];
+ } else {
+ // Failed to match the standard '[object ClassName]'
+ return toString.call(val);
+ }
+ if (className == 'Object') {
+ // we're a user defined class or Object
+ // JSON.stringify avoids problems with cycles, and is generally much
+ // easier than looping through ownProperties of `val`.
+ try {
+ return 'Object(' + JSON.stringify(val) + ')';
+ } catch (_) {
+ return 'Object';
+ }
+ }
+ // errors
+ if (val instanceof Error) {
+ return `${val.name}: ${val.message}\n${val.stack}`;
+ }
+ // TODO we could test for more things here, like `Set`s and `Map`s.
+ return className;
+}
+
+function getArrayU8FromWasm0(ptr, len) {
+ ptr = ptr >>> 0;
+ return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
+}
+
+let cachedDataViewMemory0 = null;
+function getDataViewMemory0() {
+ if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
+ cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
+ }
+ return cachedDataViewMemory0;
+}
+
+function getStringFromWasm0(ptr, len) {
+ ptr = ptr >>> 0;
+ return decodeText(ptr, len);
+}
+
+let cachedUint8ArrayMemory0 = null;
+function getUint8ArrayMemory0() {
+ if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
+ cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
+ }
+ return cachedUint8ArrayMemory0;
+}
+
+function handleError(f, args) {
+ try {
+ return f.apply(this, args);
+ } catch (e) {
+ const idx = addToExternrefTable0(e);
+ wasm.__wbindgen_exn_store(idx);
+ }
+}
+
+function isLikeNone(x) {
+ return x === undefined || x === null;
+}
+
+function makeMutClosure(arg0, arg1, dtor, f) {
+ const state = { a: arg0, b: arg1, cnt: 1, dtor };
+ const real = (...args) => {
+
+ // First up with a closure we increment the internal reference
+ // count. This ensures that the Rust closure environment won't
+ // be deallocated while we're invoking it.
+ state.cnt++;
+ const a = state.a;
+ state.a = 0;
+ try {
+ return f(a, state.b, ...args);
+ } finally {
+ state.a = a;
+ real._wbg_cb_unref();
+ }
+ };
+ real._wbg_cb_unref = () => {
+ if (--state.cnt === 0) {
+ state.dtor(state.a, state.b);
+ state.a = 0;
+ CLOSURE_DTORS.unregister(state);
+ }
+ };
+ CLOSURE_DTORS.register(real, state, state);
+ return real;
+}
+
+function passStringToWasm0(arg, malloc, realloc) {
+ if (realloc === undefined) {
+ const buf = cachedTextEncoder.encode(arg);
+ const ptr = malloc(buf.length, 1) >>> 0;
+ getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
+ WASM_VECTOR_LEN = buf.length;
+ return ptr;
+ }
+
+ let len = arg.length;
+ let ptr = malloc(len, 1) >>> 0;
+
+ const mem = getUint8ArrayMemory0();
+
+ let offset = 0;
+
+ for (; offset < len; offset++) {
+ const code = arg.charCodeAt(offset);
+ if (code > 0x7F) break;
+ mem[ptr + offset] = code;
+ }
+ if (offset !== len) {
+ if (offset !== 0) {
+ arg = arg.slice(offset);
+ }
+ ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
+ const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
+ const ret = cachedTextEncoder.encodeInto(arg, view);
+
+ offset += ret.written;
+ ptr = realloc(ptr, len, offset, 1) >>> 0;
+ }
+
+ WASM_VECTOR_LEN = offset;
+ return ptr;
+}
+
+let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
+cachedTextDecoder.decode();
+const MAX_SAFARI_DECODE_BYTES = 2146435072;
+let numBytesDecoded = 0;
+function decodeText(ptr, len) {
+ numBytesDecoded += len;
+ if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
+ cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
+ cachedTextDecoder.decode();
+ numBytesDecoded = len;
+ }
+ return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
+}
+
+const cachedTextEncoder = new TextEncoder();
+
+if (!('encodeInto' in cachedTextEncoder)) {
+ cachedTextEncoder.encodeInto = function (arg, view) {
+ const buf = cachedTextEncoder.encode(arg);
+ view.set(buf);
+ return {
+ read: arg.length,
+ written: buf.length
+ };
+ }
+}
+
+let WASM_VECTOR_LEN = 0;
+
+function wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___wasm_bindgen_16a93e90c32c8123___JsValue_____(arg0, arg1, arg2) {
+ wasm.wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___wasm_bindgen_16a93e90c32c8123___JsValue_____(arg0, arg1, arg2);
+}
+
+function wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_MouseEvent__MouseEvent_____(arg0, arg1, arg2) {
+ wasm.wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_MouseEvent__MouseEvent_____(arg0, arg1, arg2);
+}
+
+function wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_Event__Event_____(arg0, arg1, arg2) {
+ wasm.wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_Event__Event_____(arg0, arg1, arg2);
+}
+
+function wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_PointerEvent__PointerEvent_____(arg0, arg1, arg2) {
+ wasm.wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_PointerEvent__PointerEvent_____(arg0, arg1, arg2);
+}
+
+function wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_FocusEvent__FocusEvent_____(arg0, arg1, arg2) {
+ wasm.wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_FocusEvent__FocusEvent_____(arg0, arg1, arg2);
+}
+
+function wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke______(arg0, arg1) {
+ wasm.wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke______(arg0, arg1);
+}
+
+function wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___bool_(arg0, arg1) {
+ const ret = wasm.wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___bool_(arg0, arg1);
+ return ret !== 0;
+}
+
+function wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___js_sys_cdbef17fffc22cb3___Function__js_sys_cdbef17fffc22cb3___Function_____(arg0, arg1, arg2, arg3) {
+ wasm.wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___js_sys_cdbef17fffc22cb3___Function__js_sys_cdbef17fffc22cb3___Function_____(arg0, arg1, arg2, arg3);
+}
+
+const __wbindgen_enum_ReadableStreamType = ["bytes"];
+
+const IntoUnderlyingByteSourceFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingbytesource_free(ptr >>> 0, 1));
+
+const IntoUnderlyingSinkFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingsink_free(ptr >>> 0, 1));
+
+const IntoUnderlyingSourceFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingsource_free(ptr >>> 0, 1));
+
+export class IntoUnderlyingByteSource {
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ IntoUnderlyingByteSourceFinalization.unregister(this);
+ return ptr;
+ }
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_intounderlyingbytesource_free(ptr, 0);
+ }
+ /**
+ * @returns {number}
+ */
+ get autoAllocateChunkSize() {
+ const ret = wasm.intounderlyingbytesource_autoAllocateChunkSize(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ /**
+ * @param {ReadableByteStreamController} controller
+ * @returns {Promise}
+ */
+ pull(controller) {
+ const ret = wasm.intounderlyingbytesource_pull(this.__wbg_ptr, controller);
+ return ret;
+ }
+ /**
+ * @param {ReadableByteStreamController} controller
+ */
+ start(controller) {
+ wasm.intounderlyingbytesource_start(this.__wbg_ptr, controller);
+ }
+ /**
+ * @returns {ReadableStreamType}
+ */
+ get type() {
+ const ret = wasm.intounderlyingbytesource_type(this.__wbg_ptr);
+ return __wbindgen_enum_ReadableStreamType[ret];
+ }
+ cancel() {
+ const ptr = this.__destroy_into_raw();
+ wasm.intounderlyingbytesource_cancel(ptr);
+ }
+}
+if (Symbol.dispose) IntoUnderlyingByteSource.prototype[Symbol.dispose] = IntoUnderlyingByteSource.prototype.free;
+
+export class IntoUnderlyingSink {
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ IntoUnderlyingSinkFinalization.unregister(this);
+ return ptr;
+ }
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_intounderlyingsink_free(ptr, 0);
+ }
+ /**
+ * @param {any} reason
+ * @returns {Promise}
+ */
+ abort(reason) {
+ const ptr = this.__destroy_into_raw();
+ const ret = wasm.intounderlyingsink_abort(ptr, reason);
+ return ret;
+ }
+ /**
+ * @returns {Promise}
+ */
+ close() {
+ const ptr = this.__destroy_into_raw();
+ const ret = wasm.intounderlyingsink_close(ptr);
+ return ret;
+ }
+ /**
+ * @param {any} chunk
+ * @returns {Promise}
+ */
+ write(chunk) {
+ const ret = wasm.intounderlyingsink_write(this.__wbg_ptr, chunk);
+ return ret;
+ }
+}
+if (Symbol.dispose) IntoUnderlyingSink.prototype[Symbol.dispose] = IntoUnderlyingSink.prototype.free;
+
+export class IntoUnderlyingSource {
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ IntoUnderlyingSourceFinalization.unregister(this);
+ return ptr;
+ }
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_intounderlyingsource_free(ptr, 0);
+ }
+ /**
+ * @param {ReadableStreamDefaultController} controller
+ * @returns {Promise}
+ */
+ pull(controller) {
+ const ret = wasm.intounderlyingsource_pull(this.__wbg_ptr, controller);
+ return ret;
+ }
+ cancel() {
+ const ptr = this.__destroy_into_raw();
+ wasm.intounderlyingsource_cancel(ptr);
+ }
+}
+if (Symbol.dispose) IntoUnderlyingSource.prototype[Symbol.dispose] = IntoUnderlyingSource.prototype.free;
+
+const EXPECTED_RESPONSE_TYPES = new Set(['basic', 'cors', 'default']);
+
+async function __wbg_load(module, imports) {
+ if (typeof Response === 'function' && module instanceof Response) {
+ if (typeof WebAssembly.instantiateStreaming === 'function') {
+ try {
+ return await WebAssembly.instantiateStreaming(module, imports);
+ } catch (e) {
+ const validResponse = module.ok && EXPECTED_RESPONSE_TYPES.has(module.type);
+
+ if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {
+ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
+
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ const bytes = await module.arrayBuffer();
+ return await WebAssembly.instantiate(bytes, imports);
+ } else {
+ const instance = await WebAssembly.instantiate(module, imports);
+
+ if (instance instanceof WebAssembly.Instance) {
+ return { instance, module };
+ } else {
+ return instance;
+ }
+ }
+}
+
+function __wbg_get_imports() {
+ const imports = {};
+ imports.wbg = {};
+ imports.wbg.__wbg___wbindgen_debug_string_adfb662ae34724b6 = function(arg0, arg1) {
+ const ret = debugString(arg1);
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len1 = WASM_VECTOR_LEN;
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+ };
+ imports.wbg.__wbg___wbindgen_is_falsy_7b9692021c137978 = function(arg0) {
+ const ret = !arg0;
+ return ret;
+ };
+ imports.wbg.__wbg___wbindgen_is_function_8d400b8b1af978cd = function(arg0) {
+ const ret = typeof(arg0) === 'function';
+ return ret;
+ };
+ imports.wbg.__wbg___wbindgen_is_null_dfda7d66506c95b5 = function(arg0) {
+ const ret = arg0 === null;
+ return ret;
+ };
+ imports.wbg.__wbg___wbindgen_is_undefined_f6b95eab589e0269 = function(arg0) {
+ const ret = arg0 === undefined;
+ return ret;
+ };
+ imports.wbg.__wbg___wbindgen_throw_dd24417ed36fc46e = function(arg0, arg1) {
+ throw new Error(getStringFromWasm0(arg0, arg1));
+ };
+ imports.wbg.__wbg__wbg_cb_unref_87dfb5aaa0cbcea7 = function(arg0) {
+ arg0._wbg_cb_unref();
+ };
+ imports.wbg.__wbg_activeElement_b3e6b135325e4d5f = function(arg0) {
+ const ret = arg0.activeElement;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_addEventListener_6a82629b3d430a48 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
+ arg0.addEventListener(getStringFromWasm0(arg1, arg2), arg3);
+ }, arguments) };
+ imports.wbg.__wbg_addEventListener_82cddc614107eb45 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
+ arg0.addEventListener(getStringFromWasm0(arg1, arg2), arg3, arg4);
+ }, arguments) };
+ imports.wbg.__wbg_add_a928536d6ee293f3 = function() { return handleError(function (arg0, arg1, arg2) {
+ arg0.add(getStringFromWasm0(arg1, arg2));
+ }, arguments) };
+ imports.wbg.__wbg_altKey_56d1d642f3a28c92 = function(arg0) {
+ const ret = arg0.altKey;
+ return ret;
+ };
+ imports.wbg.__wbg_body_544738f8b03aef13 = function(arg0) {
+ const ret = arg0.body;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_buffer_6cb2fecb1f253d71 = function(arg0) {
+ const ret = arg0.buffer;
+ return ret;
+ };
+ imports.wbg.__wbg_byobRequest_f8e3517f5f8ad284 = function(arg0) {
+ const ret = arg0.byobRequest;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_byteLength_faa9938885bdeee6 = function(arg0) {
+ const ret = arg0.byteLength;
+ return ret;
+ };
+ imports.wbg.__wbg_byteOffset_3868b6a19ba01dea = function(arg0) {
+ const ret = arg0.byteOffset;
+ return ret;
+ };
+ imports.wbg.__wbg_call_3020136f7a2d6e44 = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = arg0.call(arg1, arg2);
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_call_abb4ff46ce38be40 = function() { return handleError(function (arg0, arg1) {
+ const ret = arg0.call(arg1);
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_cancelBubble_3ab876913f65579a = function(arg0) {
+ const ret = arg0.cancelBubble;
+ return ret;
+ };
+ imports.wbg.__wbg_children_48b5b3988e9afbf9 = function(arg0) {
+ const ret = arg0.children;
+ return ret;
+ };
+ imports.wbg.__wbg_classList_d75bc19322d1b8f4 = function(arg0) {
+ const ret = arg0.classList;
+ return ret;
+ };
+ imports.wbg.__wbg_clearTimeout_1ca823b279705d35 = function(arg0, arg1) {
+ arg0.clearTimeout(arg1);
+ };
+ imports.wbg.__wbg_cloneNode_34a31a9eb445b6ad = function() { return handleError(function (arg0, arg1) {
+ const ret = arg0.cloneNode(arg1 !== 0);
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_cloneNode_c9c45b24b171a776 = function() { return handleError(function (arg0) {
+ const ret = arg0.cloneNode();
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_close_0af5661bf3d335f2 = function() { return handleError(function (arg0) {
+ arg0.close();
+ }, arguments) };
+ imports.wbg.__wbg_close_3ec111e7b23d94d8 = function() { return handleError(function (arg0) {
+ arg0.close();
+ }, arguments) };
+ imports.wbg.__wbg_code_b3ddfa90f724c486 = function(arg0, arg1) {
+ const ret = arg1.code;
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len1 = WASM_VECTOR_LEN;
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+ };
+ imports.wbg.__wbg_composedPath_c6de3259e6ae48ad = function(arg0) {
+ const ret = arg0.composedPath();
+ return ret;
+ };
+ imports.wbg.__wbg_contains_457d2fc195838bfa = function(arg0, arg1) {
+ const ret = arg0.contains(arg1);
+ return ret;
+ };
+ imports.wbg.__wbg_content_ad90fa08b8c037c5 = function(arg0) {
+ const ret = arg0.content;
+ return ret;
+ };
+ imports.wbg.__wbg_createComment_89db599aa930ef8a = function(arg0, arg1, arg2) {
+ const ret = arg0.createComment(getStringFromWasm0(arg1, arg2));
+ return ret;
+ };
+ imports.wbg.__wbg_createElementNS_e7c12bbd579529e2 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
+ const ret = arg0.createElementNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_createElement_da4ed2b219560fc6 = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = arg0.createElement(getStringFromWasm0(arg1, arg2));
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_createTask_432d6d38dc688bee = function() { return handleError(function (arg0, arg1) {
+ const ret = console.createTask(getStringFromWasm0(arg0, arg1));
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_createTextNode_0cf8168f7646a5d2 = function(arg0, arg1, arg2) {
+ const ret = arg0.createTextNode(getStringFromWasm0(arg1, arg2));
+ return ret;
+ };
+ imports.wbg.__wbg_ctrlKey_487597b9069da036 = function(arg0) {
+ const ret = arg0.ctrlKey;
+ return ret;
+ };
+ imports.wbg.__wbg_deleteProperty_da180bf2624d16d6 = function() { return handleError(function (arg0, arg1) {
+ const ret = Reflect.deleteProperty(arg0, arg1);
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_detail_aa84d8e76d76494b = function(arg0) {
+ const ret = arg0.detail;
+ return ret;
+ };
+ imports.wbg.__wbg_document_5b745e82ba551ca5 = function(arg0) {
+ const ret = arg0.document;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_enqueue_a7e6b1ee87963aad = function() { return handleError(function (arg0, arg1) {
+ arg0.enqueue(arg1);
+ }, arguments) };
+ imports.wbg.__wbg_error_7534b8e9a36f1ab4 = function(arg0, arg1) {
+ let deferred0_0;
+ let deferred0_1;
+ try {
+ deferred0_0 = arg0;
+ deferred0_1 = arg1;
+ console.error(getStringFromWasm0(arg0, arg1));
+ } finally {
+ wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
+ }
+ };
+ imports.wbg.__wbg_firstElementChild_e207b33aaa4a86df = function(arg0) {
+ const ret = arg0.firstElementChild;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_focus_220a53e22147dc0f = function() { return handleError(function (arg0) {
+ arg0.focus();
+ }, arguments) };
+ imports.wbg.__wbg_get_6b7bd52aca3f9671 = function(arg0, arg1) {
+ const ret = arg0[arg1 >>> 0];
+ return ret;
+ };
+ imports.wbg.__wbg_get_af9dab7e9603ea93 = function() { return handleError(function (arg0, arg1) {
+ const ret = Reflect.get(arg0, arg1);
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_get_with_index_02edcfc1dc5cd213 = function(arg0, arg1) {
+ const ret = arg0[arg1 >>> 0];
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_hasFocus_7d4687baa7939850 = function() { return handleError(function (arg0) {
+ const ret = arg0.hasFocus();
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_host_3f3d16f21f257e93 = function(arg0) {
+ const ret = arg0.host;
+ return ret;
+ };
+ imports.wbg.__wbg_includes_cd7103de1f6ce823 = function(arg0, arg1, arg2) {
+ const ret = arg0.includes(arg1, arg2);
+ return ret;
+ };
+ imports.wbg.__wbg_insertBefore_93e77c32aeae9657 = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = arg0.insertBefore(arg1, arg2);
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_instanceof_Element_6f7ba982258cfc0f = function(arg0) {
+ let result;
+ try {
+ result = arg0 instanceof Element;
+ } catch (_) {
+ result = false;
+ }
+ const ret = result;
+ return ret;
+ };
+ imports.wbg.__wbg_instanceof_ShadowRoot_acbbcc2231ef8a7b = function(arg0) {
+ let result;
+ try {
+ result = arg0 instanceof ShadowRoot;
+ } catch (_) {
+ result = false;
+ }
+ const ret = result;
+ return ret;
+ };
+ imports.wbg.__wbg_instanceof_Window_b5cf7783caa68180 = function(arg0) {
+ let result;
+ try {
+ result = arg0 instanceof Window;
+ } catch (_) {
+ result = false;
+ }
+ const ret = result;
+ return ret;
+ };
+ imports.wbg.__wbg_is_928aa29d71e75457 = function(arg0, arg1) {
+ const ret = Object.is(arg0, arg1);
+ return ret;
+ };
+ imports.wbg.__wbg_key_505d33c50799526a = function(arg0, arg1) {
+ const ret = arg1.key;
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len1 = WASM_VECTOR_LEN;
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+ };
+ imports.wbg.__wbg_length_149bfa5fd618b65f = function(arg0) {
+ const ret = arg0.length;
+ return ret;
+ };
+ imports.wbg.__wbg_length_22ac23eaec9d8053 = function(arg0) {
+ const ret = arg0.length;
+ return ret;
+ };
+ imports.wbg.__wbg_log_1d990106d99dacb7 = function(arg0) {
+ console.log(arg0);
+ };
+ imports.wbg.__wbg_metaKey_0572b1cbcb5b272b = function(arg0) {
+ const ret = arg0.metaKey;
+ return ret;
+ };
+ imports.wbg.__wbg_navigator_b49edef831236138 = function(arg0) {
+ const ret = arg0.navigator;
+ return ret;
+ };
+ imports.wbg.__wbg_new_1ba21ce319a06297 = function() {
+ const ret = new Object();
+ return ret;
+ };
+ imports.wbg.__wbg_new_8a6f238a6ece86ea = function() {
+ const ret = new Error();
+ return ret;
+ };
+ imports.wbg.__wbg_new_df1173567d5ff028 = function(arg0, arg1) {
+ const ret = new Error(getStringFromWasm0(arg0, arg1));
+ return ret;
+ };
+ imports.wbg.__wbg_new_ff12d2b041fb48f1 = function(arg0, arg1) {
+ try {
+ var state0 = {a: arg0, b: arg1};
+ var cb0 = (arg0, arg1) => {
+ const a = state0.a;
+ state0.a = 0;
+ try {
+ return wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___js_sys_cdbef17fffc22cb3___Function__js_sys_cdbef17fffc22cb3___Function_____(a, state0.b, arg0, arg1);
+ } finally {
+ state0.a = a;
+ }
+ };
+ const ret = new Promise(cb0);
+ return ret;
+ } finally {
+ state0.a = state0.b = 0;
+ }
+ };
+ imports.wbg.__wbg_new_no_args_cb138f77cf6151ee = function(arg0, arg1) {
+ const ret = new Function(getStringFromWasm0(arg0, arg1));
+ return ret;
+ };
+ imports.wbg.__wbg_new_with_byte_offset_and_length_d85c3da1fd8df149 = function(arg0, arg1, arg2) {
+ const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0);
+ return ret;
+ };
+ imports.wbg.__wbg_now_69d776cd24f5215b = function() {
+ const ret = Date.now();
+ return ret;
+ };
+ imports.wbg.__wbg_parentNode_6caea653ea9f3e23 = function(arg0) {
+ const ret = arg0.parentNode;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_preventDefault_e97663aeeb9709d3 = function(arg0) {
+ arg0.preventDefault();
+ };
+ imports.wbg.__wbg_queueMicrotask_9b549dfce8865860 = function(arg0) {
+ const ret = arg0.queueMicrotask;
+ return ret;
+ };
+ imports.wbg.__wbg_queueMicrotask_fca69f5bfad613a5 = function(arg0) {
+ queueMicrotask(arg0);
+ };
+ imports.wbg.__wbg_removeAttribute_96e791ceeb22d591 = function() { return handleError(function (arg0, arg1, arg2) {
+ arg0.removeAttribute(getStringFromWasm0(arg1, arg2));
+ }, arguments) };
+ imports.wbg.__wbg_removeEventListener_565e273024b68b75 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
+ arg0.removeEventListener(getStringFromWasm0(arg1, arg2), arg3);
+ }, arguments) };
+ imports.wbg.__wbg_removeEventListener_785ecd57b01ee9a5 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
+ arg0.removeEventListener(getStringFromWasm0(arg1, arg2), arg3, arg4);
+ }, arguments) };
+ imports.wbg.__wbg_remove_32f69ffabcbc4072 = function(arg0) {
+ arg0.remove();
+ };
+ imports.wbg.__wbg_remove_c705a65e04542a70 = function() { return handleError(function (arg0, arg1, arg2) {
+ arg0.remove(getStringFromWasm0(arg1, arg2));
+ }, arguments) };
+ imports.wbg.__wbg_remove_e0441e385f51d1e9 = function(arg0) {
+ arg0.remove();
+ };
+ imports.wbg.__wbg_resolve_fd5bfbaa4ce36e1e = function(arg0) {
+ const ret = Promise.resolve(arg0);
+ return ret;
+ };
+ imports.wbg.__wbg_respond_9f7fc54636c4a3af = function() { return handleError(function (arg0, arg1) {
+ arg0.respond(arg1 >>> 0);
+ }, arguments) };
+ imports.wbg.__wbg_run_51bf644e39739ca6 = function(arg0, arg1, arg2) {
+ try {
+ var state0 = {a: arg1, b: arg2};
+ var cb0 = () => {
+ const a = state0.a;
+ state0.a = 0;
+ try {
+ return wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___bool_(a, state0.b, );
+ } finally {
+ state0.a = a;
+ }
+ };
+ const ret = arg0.run(cb0);
+ return ret;
+ } finally {
+ state0.a = state0.b = 0;
+ }
+ };
+ imports.wbg.__wbg_select_56941531301e3075 = function(arg0) {
+ arg0.select();
+ };
+ imports.wbg.__wbg_setAttribute_34747dd193f45828 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
+ arg0.setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
+ }, arguments) };
+ imports.wbg.__wbg_setTimeout_06477c23d31efef1 = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = arg0.setTimeout(arg1, arg2);
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_set_169e13b608078b7b = function(arg0, arg1, arg2) {
+ arg0.set(getArrayU8FromWasm0(arg1, arg2));
+ };
+ imports.wbg.__wbg_set_781438a03c0c3c81 = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = Reflect.set(arg0, arg1, arg2);
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_set_capture_0bafa9ad80668352 = function(arg0, arg1) {
+ arg0.capture = arg1 !== 0;
+ };
+ imports.wbg.__wbg_set_innerHTML_f1d03f780518a596 = function(arg0, arg1, arg2) {
+ arg0.innerHTML = getStringFromWasm0(arg1, arg2);
+ };
+ imports.wbg.__wbg_set_nodeValue_997d7696f2c5d4bd = function(arg0, arg1, arg2) {
+ arg0.nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2);
+ };
+ imports.wbg.__wbg_set_once_cb88c6a887803dfa = function(arg0, arg1) {
+ arg0.once = arg1 !== 0;
+ };
+ imports.wbg.__wbg_set_passive_a3aa35eb7292414e = function(arg0, arg1) {
+ arg0.passive = arg1 !== 0;
+ };
+ imports.wbg.__wbg_set_selectedIndex_f800494cfeff89ba = function(arg0, arg1) {
+ arg0.selectedIndex = arg1;
+ };
+ imports.wbg.__wbg_shiftKey_d2640abcfa98acec = function(arg0) {
+ const ret = arg0.shiftKey;
+ return ret;
+ };
+ imports.wbg.__wbg_stack_0ed75d68575b0f3c = function(arg0, arg1) {
+ const ret = arg1.stack;
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len1 = WASM_VECTOR_LEN;
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+ };
+ imports.wbg.__wbg_static_accessor_GLOBAL_769e6b65d6557335 = function() {
+ const ret = typeof global === 'undefined' ? null : global;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_static_accessor_GLOBAL_THIS_60cf02db4de8e1c1 = function() {
+ const ret = typeof globalThis === 'undefined' ? null : globalThis;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_static_accessor_SELF_08f5a74c69739274 = function() {
+ const ret = typeof self === 'undefined' ? null : self;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_static_accessor_WINDOW_a8924b26aa92d024 = function() {
+ const ret = typeof window === 'undefined' ? null : window;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_tagName_e36b1c5d14a00d3f = function(arg0, arg1) {
+ const ret = arg1.tagName;
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len1 = WASM_VECTOR_LEN;
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+ };
+ imports.wbg.__wbg_target_0e3e05a6263c37a0 = function(arg0) {
+ const ret = arg0.target;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_then_4f95312d68691235 = function(arg0, arg1) {
+ const ret = arg0.then(arg1);
+ return ret;
+ };
+ imports.wbg.__wbg_userAgent_e18bc0cc9ad38ec1 = function() { return handleError(function (arg0, arg1) {
+ const ret = arg1.userAgent;
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len1 = WASM_VECTOR_LEN;
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+ }, arguments) };
+ imports.wbg.__wbg_value_2c75ca481407d038 = function(arg0, arg1) {
+ const ret = arg1.value;
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len1 = WASM_VECTOR_LEN;
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
+ };
+ imports.wbg.__wbg_view_788aaf149deefd2f = function(arg0) {
+ const ret = arg0.view;
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
+ };
+ imports.wbg.__wbg_warn_6e567d0d926ff881 = function(arg0) {
+ console.warn(arg0);
+ };
+ imports.wbg.__wbg_warn_989bed09a6035762 = function(arg0, arg1, arg2) {
+ console.warn(arg0, arg1, arg2);
+ };
+ imports.wbg.__wbindgen_cast_1b3a339611bb8eb8 = function(arg0, arg1) {
+ // Cast intrinsic for `Closure(Closure { dtor_idx: 1792, function: Function { arguments: [NamedExternref("FocusEvent")], shim_idx: 1794, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
+ const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen_16a93e90c32c8123___closure__destroy___dyn_core_3cd24c61823388c3___ops__function__FnMut__web_sys_5ad68df57c684497___features__gen_FocusEvent__FocusEvent____Output_______, wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_FocusEvent__FocusEvent_____);
+ return ret;
+ };
+ imports.wbg.__wbindgen_cast_1db74cccd6b07c34 = function(arg0, arg1) {
+ // Cast intrinsic for `Closure(Closure { dtor_idx: 1793, function: Function { arguments: [NamedExternref("MouseEvent")], shim_idx: 1795, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
+ const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen_16a93e90c32c8123___closure__destroy___dyn_core_3cd24c61823388c3___ops__function__FnMut__web_sys_5ad68df57c684497___features__gen_MouseEvent__MouseEvent____Output_______, wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_MouseEvent__MouseEvent_____);
+ return ret;
+ };
+ imports.wbg.__wbindgen_cast_2241b6af4c4b2941 = function(arg0, arg1) {
+ // Cast intrinsic for `Ref(String) -> Externref`.
+ const ret = getStringFromWasm0(arg0, arg1);
+ return ret;
+ };
+ imports.wbg.__wbindgen_cast_5f1fbb48bf39bf16 = function(arg0, arg1) {
+ // Cast intrinsic for `Closure(Closure { dtor_idx: 699, function: Function { arguments: [NamedExternref("PointerEvent")], shim_idx: 1016, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
+ const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen_16a93e90c32c8123___closure__destroy___dyn_core_3cd24c61823388c3___ops__function__FnMut__web_sys_5ad68df57c684497___features__gen_PointerEvent__PointerEvent____Output_______, wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_PointerEvent__PointerEvent_____);
+ return ret;
+ };
+ imports.wbg.__wbindgen_cast_644e70bddc126b82 = function(arg0, arg1) {
+ // Cast intrinsic for `Closure(Closure { dtor_idx: 2736, function: Function { arguments: [Externref], shim_idx: 2737, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
+ const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen_16a93e90c32c8123___closure__destroy___dyn_core_3cd24c61823388c3___ops__function__FnMut__wasm_bindgen_16a93e90c32c8123___JsValue____Output_______, wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___wasm_bindgen_16a93e90c32c8123___JsValue_____);
+ return ret;
+ };
+ imports.wbg.__wbindgen_cast_76b822376c01e969 = function(arg0, arg1) {
+ // Cast intrinsic for `Closure(Closure { dtor_idx: 2646, function: Function { arguments: [NamedExternref("Event")], shim_idx: 2647, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
+ const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen_16a93e90c32c8123___closure__destroy___dyn_core_3cd24c61823388c3___ops__function__FnMut__web_sys_5ad68df57c684497___features__gen_Event__Event____Output_______, wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke___web_sys_5ad68df57c684497___features__gen_Event__Event_____);
+ return ret;
+ };
+ imports.wbg.__wbindgen_cast_c296bbfbad5c8665 = function(arg0, arg1) {
+ // Cast intrinsic for `Closure(Closure { dtor_idx: 1950, function: Function { arguments: [], shim_idx: 1951, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
+ const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen_16a93e90c32c8123___closure__destroy___dyn_core_3cd24c61823388c3___ops__function__FnMut_____Output_______, wasm_bindgen_16a93e90c32c8123___convert__closures_____invoke______);
+ return ret;
+ };
+ imports.wbg.__wbindgen_init_externref_table = function() {
+ const table = wasm.__wbindgen_externrefs;
+ const offset = table.grow(4);
+ table.set(0, undefined);
+ table.set(offset + 0, undefined);
+ table.set(offset + 1, null);
+ table.set(offset + 2, true);
+ table.set(offset + 3, false);
+ };
+
+ return imports;
+}
+
+function __wbg_finalize_init(instance, module) {
+ wasm = instance.exports;
+ __wbg_init.__wbindgen_wasm_module = module;
+ cachedDataViewMemory0 = null;
+ cachedUint8ArrayMemory0 = null;
+
+
+ wasm.__wbindgen_start();
+ return wasm;
+}
+
+function initSync(module) {
+ if (wasm !== undefined) return wasm;
+
+
+ if (typeof module !== 'undefined') {
+ if (Object.getPrototypeOf(module) === Object.prototype) {
+ ({module} = module)
+ } else {
+ console.warn('using deprecated parameters for `initSync()`; pass a single object instead')
+ }
+ }
+
+ const imports = __wbg_get_imports();
+ if (!(module instanceof WebAssembly.Module)) {
+ module = new WebAssembly.Module(module);
+ }
+ const instance = new WebAssembly.Instance(module, imports);
+ return __wbg_finalize_init(instance, module);
+}
+
+async function __wbg_init(module_or_path) {
+ if (wasm !== undefined) return wasm;
+
+
+ if (typeof module_or_path !== 'undefined') {
+ if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
+ ({module_or_path} = module_or_path)
+ } else {
+ console.warn('using deprecated parameters for the initialization function; pass a single object instead')
+ }
+ }
+
+ if (typeof module_or_path === 'undefined') {
+ module_or_path = new URL('typewriter_bg.wasm', import.meta.url);
+ }
+ const imports = __wbg_get_imports();
+
+ if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {
+ module_or_path = fetch(module_or_path);
+ }
+
+ const { instance, module } = await __wbg_load(await module_or_path, imports);
+
+ return __wbg_finalize_init(instance, module);
+}
+
+export { initSync };
+export default __wbg_init;
diff --git a/dist/typewriter-f48c7fe5720da575_bg.wasm b/dist/typewriter-f48c7fe5720da575_bg.wasm
new file mode 100644
index 0000000000000000000000000000000000000000..b0213e61a14d1967188297a062e8b74a61078a71
GIT binary patch
literal 16388517
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