Initial commit
This commit is contained in:
		
						commit
						6c5d621cc5
					
				| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
target/
 | 
			
		||||
*.bin
 | 
			
		||||
result
 | 
			
		||||
 | 
			
		||||
# Logs
 | 
			
		||||
log
 | 
			
		||||
logs
 | 
			
		||||
*.log
 | 
			
		||||
npm-debug.log*
 | 
			
		||||
yarn-debug.log*
 | 
			
		||||
yarn-error.log*
 | 
			
		||||
pnpm-debug.log*
 | 
			
		||||
lerna-debug.log*
 | 
			
		||||
 | 
			
		||||
node_modules
 | 
			
		||||
dist
 | 
			
		||||
dist-ssr
 | 
			
		||||
*.local
 | 
			
		||||
 | 
			
		||||
# Editor directories and files
 | 
			
		||||
.vscode/*
 | 
			
		||||
!.vscode/extensions.json
 | 
			
		||||
.idea
 | 
			
		||||
.DS_Store
 | 
			
		||||
*.suo
 | 
			
		||||
*.ntvs*
 | 
			
		||||
*.njsproj
 | 
			
		||||
*.sln
 | 
			
		||||
*.sw?
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,894 @@
 | 
			
		|||
# This file is automatically @generated by Cargo.
 | 
			
		||||
# It is not intended for manual editing.
 | 
			
		||||
version = 3
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "anyhow"
 | 
			
		||||
version = "1.0.86"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "autocfg"
 | 
			
		||||
version = "1.3.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "bitflags"
 | 
			
		||||
version = "1.3.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "bitflags"
 | 
			
		||||
version = "2.5.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "bumpalo"
 | 
			
		||||
version = "3.16.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "cc"
 | 
			
		||||
version = "1.0.103"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "2755ff20a1d93490d26ba33a6f092a38a508398a5320df5d4b3014fcccce9410"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "cfg-if"
 | 
			
		||||
version = "1.0.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "console_error_panic_hook"
 | 
			
		||||
version = "0.1.7"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "wasm-bindgen",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "dlib"
 | 
			
		||||
version = "0.5.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "libloading",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "downcast-rs"
 | 
			
		||||
version = "1.2.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "equivalent"
 | 
			
		||||
version = "1.0.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "errno"
 | 
			
		||||
version = "0.3.9"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
 "windows-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "fastrand"
 | 
			
		||||
version = "2.1.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures"
 | 
			
		||||
version = "0.3.30"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "futures-channel",
 | 
			
		||||
 "futures-core",
 | 
			
		||||
 "futures-executor",
 | 
			
		||||
 "futures-io",
 | 
			
		||||
 "futures-sink",
 | 
			
		||||
 "futures-task",
 | 
			
		||||
 "futures-util",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-channel"
 | 
			
		||||
version = "0.3.30"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "futures-core",
 | 
			
		||||
 "futures-sink",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-core"
 | 
			
		||||
version = "0.3.30"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-executor"
 | 
			
		||||
version = "0.3.30"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "futures-core",
 | 
			
		||||
 "futures-task",
 | 
			
		||||
 "futures-util",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-io"
 | 
			
		||||
version = "0.3.30"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-macro"
 | 
			
		||||
version = "0.3.30"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-sink"
 | 
			
		||||
version = "0.3.30"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-task"
 | 
			
		||||
version = "0.3.30"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-util"
 | 
			
		||||
version = "0.3.30"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "futures-channel",
 | 
			
		||||
 "futures-core",
 | 
			
		||||
 "futures-io",
 | 
			
		||||
 "futures-macro",
 | 
			
		||||
 "futures-sink",
 | 
			
		||||
 "futures-task",
 | 
			
		||||
 "memchr",
 | 
			
		||||
 "pin-project-lite",
 | 
			
		||||
 "pin-utils",
 | 
			
		||||
 "slab",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "george"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "console_error_panic_hook",
 | 
			
		||||
 "georgeemu",
 | 
			
		||||
 "minifb",
 | 
			
		||||
 "wasm-bindgen",
 | 
			
		||||
 "web-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "georgeemu"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
source = "git+https://git.augustkline.com/august/george-emu#952b79cf91542021e732d8fd5b0b46dbf0132a46"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anyhow",
 | 
			
		||||
 "console_error_panic_hook",
 | 
			
		||||
 "minifb",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "termion",
 | 
			
		||||
 "toml",
 | 
			
		||||
 "web-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "hashbrown"
 | 
			
		||||
version = "0.14.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "indexmap"
 | 
			
		||||
version = "2.5.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "equivalent",
 | 
			
		||||
 "hashbrown",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "instant"
 | 
			
		||||
version = "0.1.13"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "js-sys",
 | 
			
		||||
 "wasm-bindgen",
 | 
			
		||||
 "web-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "itoa"
 | 
			
		||||
version = "1.0.11"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "js-sys"
 | 
			
		||||
version = "0.3.70"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "wasm-bindgen",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "lazy_static"
 | 
			
		||||
version = "1.5.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "libc"
 | 
			
		||||
version = "0.2.155"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "libloading"
 | 
			
		||||
version = "0.8.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "windows-targets",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "libredox"
 | 
			
		||||
version = "0.0.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags 2.5.0",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "redox_syscall",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "linux-raw-sys"
 | 
			
		||||
version = "0.4.14"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "log"
 | 
			
		||||
version = "0.4.21"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "memchr"
 | 
			
		||||
version = "2.7.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "memoffset"
 | 
			
		||||
version = "0.6.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "autocfg",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "minifb"
 | 
			
		||||
version = "0.27.0"
 | 
			
		||||
source = "git+https://github.com/augustkline/rust_minifb#2e2fdcf1d692c8c3d827a221a66569d81c73f99a"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cc",
 | 
			
		||||
 "console_error_panic_hook",
 | 
			
		||||
 "dlib",
 | 
			
		||||
 "futures",
 | 
			
		||||
 "instant",
 | 
			
		||||
 "js-sys",
 | 
			
		||||
 "lazy_static",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "orbclient",
 | 
			
		||||
 "raw-window-handle",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_derive",
 | 
			
		||||
 "tempfile",
 | 
			
		||||
 "wasm-bindgen",
 | 
			
		||||
 "wasm-bindgen-futures",
 | 
			
		||||
 "wayland-client",
 | 
			
		||||
 "wayland-cursor",
 | 
			
		||||
 "wayland-protocols",
 | 
			
		||||
 "web-sys",
 | 
			
		||||
 "winapi",
 | 
			
		||||
 "x11-dl",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "nix"
 | 
			
		||||
version = "0.24.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags 1.3.2",
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "memoffset",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "numtoa"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "once_cell"
 | 
			
		||||
version = "1.19.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "orbclient"
 | 
			
		||||
version = "0.3.47"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
 "libredox",
 | 
			
		||||
 "sdl2",
 | 
			
		||||
 "sdl2-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "pin-project-lite"
 | 
			
		||||
version = "0.2.14"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "pin-utils"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "pkg-config"
 | 
			
		||||
version = "0.3.30"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "proc-macro2"
 | 
			
		||||
version = "1.0.86"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "unicode-ident",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "quote"
 | 
			
		||||
version = "1.0.36"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "raw-window-handle"
 | 
			
		||||
version = "0.6.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "redox_syscall"
 | 
			
		||||
version = "0.4.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags 1.3.2",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "redox_termios"
 | 
			
		||||
version = "0.1.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "20145670ba436b55d91fc92d25e71160fbfbdd57831631c8d7d36377a476f1cb"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rustix"
 | 
			
		||||
version = "0.38.34"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags 2.5.0",
 | 
			
		||||
 "errno",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "linux-raw-sys",
 | 
			
		||||
 "windows-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "ryu"
 | 
			
		||||
version = "1.0.18"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "scoped-tls"
 | 
			
		||||
version = "1.0.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "sdl2"
 | 
			
		||||
version = "0.35.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f7959277b623f1fb9e04aea73686c3ca52f01b2145f8ea16f4ff30d8b7623b1a"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags 1.3.2",
 | 
			
		||||
 "lazy_static",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "sdl2-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "sdl2-sys"
 | 
			
		||||
version = "0.35.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e3586be2cf6c0a8099a79a12b4084357aa9b3e0b0d7980e3b67aaf7a9d55f9f0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "version-compare",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde"
 | 
			
		||||
version = "1.0.203"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "serde_derive",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde_derive"
 | 
			
		||||
version = "1.0.203"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde_json"
 | 
			
		||||
version = "1.0.127"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "itoa",
 | 
			
		||||
 "memchr",
 | 
			
		||||
 "ryu",
 | 
			
		||||
 "serde",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde_spanned"
 | 
			
		||||
version = "0.6.7"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "serde",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "slab"
 | 
			
		||||
version = "0.4.9"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "autocfg",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "smallvec"
 | 
			
		||||
version = "1.13.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "syn"
 | 
			
		||||
version = "2.0.67"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "ff8655ed1d86f3af4ee3fd3263786bc14245ad17c4c7e85ba7187fb3ae028c90"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "unicode-ident",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "tempfile"
 | 
			
		||||
version = "3.10.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "fastrand",
 | 
			
		||||
 "rustix",
 | 
			
		||||
 "windows-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "termion"
 | 
			
		||||
version = "4.0.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "1ccce68e518d1173e80876edd54760b60b792750d0cab6444a79101c6ea03848"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
 "libredox",
 | 
			
		||||
 "numtoa",
 | 
			
		||||
 "redox_termios",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "toml"
 | 
			
		||||
version = "0.8.19"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_spanned",
 | 
			
		||||
 "toml_datetime",
 | 
			
		||||
 "toml_edit",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "toml_datetime"
 | 
			
		||||
version = "0.6.8"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "serde",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "toml_edit"
 | 
			
		||||
version = "0.22.20"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "indexmap",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_spanned",
 | 
			
		||||
 "toml_datetime",
 | 
			
		||||
 "winnow",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "unicode-ident"
 | 
			
		||||
version = "1.0.12"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "version-compare"
 | 
			
		||||
version = "0.1.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wasm-bindgen"
 | 
			
		||||
version = "0.2.93"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "once_cell",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
 "wasm-bindgen-macro",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wasm-bindgen-backend"
 | 
			
		||||
version = "0.2.93"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bumpalo",
 | 
			
		||||
 "log",
 | 
			
		||||
 "once_cell",
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
 "wasm-bindgen-shared",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wasm-bindgen-futures"
 | 
			
		||||
version = "0.4.42"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "js-sys",
 | 
			
		||||
 "wasm-bindgen",
 | 
			
		||||
 "web-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wasm-bindgen-macro"
 | 
			
		||||
version = "0.2.93"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "quote",
 | 
			
		||||
 "wasm-bindgen-macro-support",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wasm-bindgen-macro-support"
 | 
			
		||||
version = "0.2.93"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
 "wasm-bindgen-backend",
 | 
			
		||||
 "wasm-bindgen-shared",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wasm-bindgen-shared"
 | 
			
		||||
version = "0.2.93"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wayland-client"
 | 
			
		||||
version = "0.29.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags 1.3.2",
 | 
			
		||||
 "downcast-rs",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "nix",
 | 
			
		||||
 "scoped-tls",
 | 
			
		||||
 "wayland-commons",
 | 
			
		||||
 "wayland-scanner",
 | 
			
		||||
 "wayland-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wayland-commons"
 | 
			
		||||
version = "0.29.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "nix",
 | 
			
		||||
 "once_cell",
 | 
			
		||||
 "smallvec",
 | 
			
		||||
 "wayland-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wayland-cursor"
 | 
			
		||||
version = "0.29.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "nix",
 | 
			
		||||
 "wayland-client",
 | 
			
		||||
 "xcursor",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wayland-protocols"
 | 
			
		||||
version = "0.29.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags 1.3.2",
 | 
			
		||||
 "wayland-client",
 | 
			
		||||
 "wayland-commons",
 | 
			
		||||
 "wayland-scanner",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wayland-scanner"
 | 
			
		||||
version = "0.29.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "xml-rs",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "wayland-sys"
 | 
			
		||||
version = "0.29.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "dlib",
 | 
			
		||||
 "lazy_static",
 | 
			
		||||
 "pkg-config",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "web-sys"
 | 
			
		||||
version = "0.3.70"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "js-sys",
 | 
			
		||||
 "wasm-bindgen",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winapi"
 | 
			
		||||
version = "0.3.9"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "winapi-i686-pc-windows-gnu",
 | 
			
		||||
 "winapi-x86_64-pc-windows-gnu",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winapi-i686-pc-windows-gnu"
 | 
			
		||||
version = "0.4.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winapi-x86_64-pc-windows-gnu"
 | 
			
		||||
version = "0.4.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-sys"
 | 
			
		||||
version = "0.52.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows-targets",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-targets"
 | 
			
		||||
version = "0.52.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows_aarch64_gnullvm",
 | 
			
		||||
 "windows_aarch64_msvc",
 | 
			
		||||
 "windows_i686_gnu",
 | 
			
		||||
 "windows_i686_gnullvm",
 | 
			
		||||
 "windows_i686_msvc",
 | 
			
		||||
 "windows_x86_64_gnu",
 | 
			
		||||
 "windows_x86_64_gnullvm",
 | 
			
		||||
 "windows_x86_64_msvc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_aarch64_gnullvm"
 | 
			
		||||
version = "0.52.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_aarch64_msvc"
 | 
			
		||||
version = "0.52.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_i686_gnu"
 | 
			
		||||
version = "0.52.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_i686_gnullvm"
 | 
			
		||||
version = "0.52.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_i686_msvc"
 | 
			
		||||
version = "0.52.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_x86_64_gnu"
 | 
			
		||||
version = "0.52.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_x86_64_gnullvm"
 | 
			
		||||
version = "0.52.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_x86_64_msvc"
 | 
			
		||||
version = "0.52.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winnow"
 | 
			
		||||
version = "0.6.18"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "memchr",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "x11-dl"
 | 
			
		||||
version = "2.21.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
 "once_cell",
 | 
			
		||||
 "pkg-config",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "xcursor"
 | 
			
		||||
version = "0.3.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "xml-rs"
 | 
			
		||||
version = "0.8.20"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
[package]
 | 
			
		||||
name = "george"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
 | 
			
		||||
[lib]
 | 
			
		||||
crate-type = ["cdylib", "rlib"]
 | 
			
		||||
 | 
			
		||||
[features]
 | 
			
		||||
default = ["minifb/web"]
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
console_error_panic_hook = "0.1.7"
 | 
			
		||||
georgeemu = { git = "https://git.augustkline.com/august/george-emu" }
 | 
			
		||||
minifb = { git = "https://github.com/augustkline/rust_minifb" }
 | 
			
		||||
wasm-bindgen = "0.2.93"
 | 
			
		||||
 | 
			
		||||
[dependencies.web-sys]
 | 
			
		||||
version = "*"
 | 
			
		||||
features = ['Document', 'Element', 'HtmlElement', 'Node', 'Window']
 | 
			
		||||
 | 
			
		||||
[package.metadata.wasm-pack.profile.profiling]
 | 
			
		||||
wasm-opt = ['-O']
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
[toolchain]
 | 
			
		||||
channel = "stable"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,217 @@
 | 
			
		|||
; use `vasm6502_oldstyle -dotdir -wdc02 -ldots -Fbin` to assemble
 | 
			
		||||
; source is at http://www.compilers.de/vasm.html
 | 
			
		||||
 | 
			
		||||
    .include "./macro.inc"
 | 
			
		||||
    .org $8000
 | 
			
		||||
 | 
			
		||||
temp = $20 ; scratchpad page
 | 
			
		||||
 | 
			
		||||
cursor = $300
 | 
			
		||||
cursor_x = cursor
 | 
			
		||||
cursor_y = cursor + 1
 | 
			
		||||
 | 
			
		||||
rand_index = $200
 | 
			
		||||
 | 
			
		||||
reset:
 | 
			
		||||
    sei
 | 
			
		||||
    ldx #0; initialize data stack pointer
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
 | 
			
		||||
main:
 | 
			
		||||
    jsr rand_draw
 | 
			
		||||
    lda #0
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr delay
 | 
			
		||||
    jsr print
 | 
			
		||||
    jmp main
 | 
			
		||||
 | 
			
		||||
; prints string from cursor position, stopping at end of string or at 256 chars, whichever comes first
 | 
			
		||||
; $6000 + (64*Y) + X
 | 
			
		||||
; THIS WILL WRITE OUT OF BOUNDS IF THE CURSOR IS OUT OF BOUNDS/STRING IS TOO LONG
 | 
			
		||||
 | 
			
		||||
print: 
 | 
			
		||||
   jsr cursor_addr
 | 
			
		||||
   ldy #0
 | 
			
		||||
   .loop:
 | 
			
		||||
       jsr delay
 | 
			
		||||
       jsr delay
 | 
			
		||||
       jsr delay
 | 
			
		||||
       jsr delay
 | 
			
		||||
       jsr delay
 | 
			
		||||
       lda text, y
 | 
			
		||||
       beq .end
 | 
			
		||||
       sta (temp), y
 | 
			
		||||
       iny
 | 
			
		||||
       jmp .loop
 | 
			
		||||
   .end:
 | 
			
		||||
   rts
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; calculates real vram address from cursor (x, y)
 | 
			
		||||
 | 
			
		||||
cursor_addr:
 | 
			
		||||
    stz temp
 | 
			
		||||
    stz temp + 1
 | 
			
		||||
    lda cursor_y
 | 
			
		||||
    beq .add_x ; if y's zero just add x
 | 
			
		||||
    .y_mult:
 | 
			
		||||
        ; multiply by 64
 | 
			
		||||
        clc
 | 
			
		||||
        asl
 | 
			
		||||
        rol temp + 1 
 | 
			
		||||
        asl
 | 
			
		||||
        rol temp + 1 
 | 
			
		||||
        asl  
 | 
			
		||||
        rol temp + 1 
 | 
			
		||||
        asl  
 | 
			
		||||
        rol temp + 1 
 | 
			
		||||
        asl  
 | 
			
		||||
        rol temp + 1 
 | 
			
		||||
        asl  
 | 
			
		||||
        rol temp + 1 
 | 
			
		||||
        sta temp
 | 
			
		||||
    .add_x:
 | 
			
		||||
        clc
 | 
			
		||||
        lda cursor_x
 | 
			
		||||
        adc temp
 | 
			
		||||
        sta temp 
 | 
			
		||||
        lda #0
 | 
			
		||||
        adc temp + 1
 | 
			
		||||
        sta temp + 1
 | 
			
		||||
        clc
 | 
			
		||||
        lda #$60
 | 
			
		||||
        adc temp + 1
 | 
			
		||||
        sta temp + 1
 | 
			
		||||
    rts
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
rand_draw:
 | 
			
		||||
    ldx rand_index
 | 
			
		||||
    lda random_x, x
 | 
			
		||||
    sta cursor_x
 | 
			
		||||
    lda random_y, x
 | 
			
		||||
    sta cursor_y
 | 
			
		||||
    jsr cursor_addr
 | 
			
		||||
    inc rand_index
 | 
			
		||||
    rts
 | 
			
		||||
 | 
			
		||||
text:
 | 
			
		||||
    .asciiz 7," hi warp team ", 7
 | 
			
		||||
 | 
			
		||||
random_y: 
 | 
			
		||||
    .byte 25,12,0,20,4,25,5,13
 | 
			
		||||
    .byte 20, 1, 1, 22, 12, 19, 19, 19
 | 
			
		||||
    .byte 9, 0, 4, 18, 13, 14, 4, 16
 | 
			
		||||
    .byte 8, 17, 21, 14, 23, 21, 9, 0
 | 
			
		||||
    .byte 14, 10, 14, 2, 26, 18, 15, 23
 | 
			
		||||
    .byte 12, 2, 5, 4, 25, 20, 27, 4
 | 
			
		||||
    .byte 28, 21, 3, 22, 11, 25, 2, 25
 | 
			
		||||
    .byte 13, 17, 17, 24, 8, 8, 20, 21
 | 
			
		||||
    .byte 11, 24, 27, 25, 8, 12, 7, 0
 | 
			
		||||
    .byte 27, 12, 19, 27, 10, 3, 19, 2
 | 
			
		||||
    .byte 2, 23, 22, 5, 26, 28, 4, 16
 | 
			
		||||
    .byte 18, 7, 10, 9, 6, 19, 9, 2
 | 
			
		||||
    .byte 14, 8, 14, 18, 18, 2, 13, 0
 | 
			
		||||
    .byte 15, 26, 3, 23, 17, 12, 18, 11
 | 
			
		||||
    .byte 4, 16, 17, 22, 9, 25, 3, 15
 | 
			
		||||
    .byte 28, 3, 6, 14, 25, 5, 21, 8
 | 
			
		||||
    .byte 15, 18, 15, 5, 28, 6, 15, 4
 | 
			
		||||
    .byte 10, 1, 16, 24, 6, 9, 22, 3
 | 
			
		||||
    .byte 17, 18, 10, 19, 27, 11, 22, 16
 | 
			
		||||
    .byte 22, 17, 15, 6, 23, 11, 11, 11
 | 
			
		||||
    .byte 4, 15, 5, 25, 19, 1, 8, 26
 | 
			
		||||
    .byte 21, 20, 17, 27, 11, 3, 11, 20
 | 
			
		||||
    .byte 15, 28, 0, 6, 14, 23, 20, 21
 | 
			
		||||
    .byte 17, 20, 16, 15, 19, 6, 21, 19
 | 
			
		||||
    .byte 15, 27, 1, 22, 7, 0, 5, 2
 | 
			
		||||
    .byte 14, 24, 15, 4, 20, 16, 1, 14
 | 
			
		||||
    .byte 4, 16, 4, 8, 13, 26, 3, 9
 | 
			
		||||
    .byte 12, 25, 5, 0, 7, 17, 14, 20
 | 
			
		||||
    .byte 2, 26, 2, 27, 18, 23, 5, 8
 | 
			
		||||
    .byte 4, 21, 10, 11, 28, 22, 6, 6
 | 
			
		||||
    .byte 10, 13, 23, 12, 20, 28, 20, 1
 | 
			
		||||
    .byte 27, 19, 25, 6, 1, 10, 1
 | 
			
		||||
 | 
			
		||||
random_x:
 | 
			
		||||
    .byte 42, 59, 11, 5, 18, 0, 26, 1
 | 
			
		||||
    .byte 61, 16, 1, 51, 36, 47, 23, 1
 | 
			
		||||
    .byte 16, 50, 46, 4, 55, 31, 15, 2
 | 
			
		||||
    .byte 45, 21, 59, 53, 15, 43, 0, 2
 | 
			
		||||
    .byte 64, 31, 38, 41, 25, 12, 12, 3
 | 
			
		||||
    .byte 30, 13, 64, 44, 21, 8, 48, 3
 | 
			
		||||
    .byte 46, 1, 2, 33, 4, 32, 59, 28
 | 
			
		||||
    .byte 4, 24, 58, 53, 21, 41, 30, 2
 | 
			
		||||
    .byte 56, 53, 31, 10, 42, 12, 9, 54
 | 
			
		||||
    .byte 14, 14, 24, 29, 43, 60, 54, 26
 | 
			
		||||
    .byte 5, 53, 17, 55, 27, 46, 31, 3
 | 
			
		||||
    .byte 26, 44, 63, 30, 10, 34, 62, 48
 | 
			
		||||
    .byte 42, 47, 51, 7, 55, 32, 14, 21
 | 
			
		||||
    .byte 15, 26, 52, 37, 48, 0, 13, 2
 | 
			
		||||
    .byte 50, 20, 35, 32, 8, 41, 2, 24
 | 
			
		||||
    .byte 18, 9, 52, 22, 52, 12, 19, 32
 | 
			
		||||
    .byte 29, 46, 34, 58, 54, 51, 43, 57
 | 
			
		||||
    .byte 62, 10, 12, 57, 36, 39, 4, 30
 | 
			
		||||
    .byte 38, 9, 30, 32, 33, 57, 3, 25
 | 
			
		||||
    .byte 21, 36, 59, 30, 19, 39, 9, 60
 | 
			
		||||
    .byte 34, 50, 52, 37, 34, 42, 3, 33
 | 
			
		||||
    .byte 40, 19, 2, 26, 10, 38, 46, 30
 | 
			
		||||
    .byte 3, 1, 19, 16, 26, 58, 42, 49
 | 
			
		||||
    .byte 63, 1, 63, 41, 0, 21, 41, 19
 | 
			
		||||
    .byte 21, 45, 44, 52, 20, 5, 11, 64
 | 
			
		||||
    .byte 1, 62, 16, 5, 5, 8, 58, 56
 | 
			
		||||
    .byte 16, 26, 6, 37, 19, 16, 25, 29
 | 
			
		||||
    .byte 64, 59, 16, 6, 41, 28, 8, 51
 | 
			
		||||
    .byte 54, 5, 19, 28, 13, 38, 52, 35
 | 
			
		||||
    .byte 42, 13, 34, 33, 61, 61, 7, 27
 | 
			
		||||
    .byte 38, 33, 9, 57, 10, 30, 8, 4
 | 
			
		||||
    .byte 46, 3, 39, 46, 62, 20, 48, 7
 | 
			
		||||
 | 
			
		||||
delay: 
 | 
			
		||||
    delay
 | 
			
		||||
    delay
 | 
			
		||||
    delay
 | 
			
		||||
    delay
 | 
			
		||||
    delay
 | 
			
		||||
    delay
 | 
			
		||||
    delay
 | 
			
		||||
    rts
 | 
			
		||||
 | 
			
		||||
isr: ; interrupt service routine
 | 
			
		||||
    rti
 | 
			
		||||
 | 
			
		||||
    .org $fffc
 | 
			
		||||
    .word reset
 | 
			
		||||
    .word isr
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,63 @@
 | 
			
		|||
use std::{cell::RefCell, panic, rc::Rc};
 | 
			
		||||
 | 
			
		||||
use georgeemu::GeorgeEmu;
 | 
			
		||||
use minifb::{Scale, ScaleMode, Window, WindowOptions};
 | 
			
		||||
use wasm_bindgen::prelude::*;
 | 
			
		||||
use web_sys::HtmlElement;
 | 
			
		||||
 | 
			
		||||
fn window() -> web_sys::Window {
 | 
			
		||||
    web_sys::window().expect("no global `window` exists")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn request_animation_frame(f: &Closure<dyn FnMut()>) {
 | 
			
		||||
    window()
 | 
			
		||||
        .request_animation_frame(f.as_ref().unchecked_ref())
 | 
			
		||||
        .expect("should register `requestAnimationFrame` OK");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const WIDTH: usize = 512;
 | 
			
		||||
const HEIGHT: usize = 380;
 | 
			
		||||
 | 
			
		||||
#[wasm_bindgen(start)]
 | 
			
		||||
pub fn main() {
 | 
			
		||||
    panic::set_hook(Box::new(console_error_panic_hook::hook));
 | 
			
		||||
    let rom = *include_bytes!("./demo.rom");
 | 
			
		||||
    let document = window().document().unwrap();
 | 
			
		||||
    let george_canvas: HtmlElement = document
 | 
			
		||||
        .get_element_by_id("george")
 | 
			
		||||
        .unwrap()
 | 
			
		||||
        .dyn_into::<HtmlElement>()
 | 
			
		||||
        .unwrap();
 | 
			
		||||
    let window = Window::new(
 | 
			
		||||
        george_canvas,
 | 
			
		||||
        WIDTH,
 | 
			
		||||
        HEIGHT,
 | 
			
		||||
        WindowOptions {
 | 
			
		||||
            resize: true,
 | 
			
		||||
            borderless: true,
 | 
			
		||||
            title: true,
 | 
			
		||||
            transparency: false,
 | 
			
		||||
            scale: Scale::FitScreen,
 | 
			
		||||
            scale_mode: ScaleMode::AspectRatioStretch,
 | 
			
		||||
            topmost: false,
 | 
			
		||||
            none: true,
 | 
			
		||||
        },
 | 
			
		||||
    )
 | 
			
		||||
    .unwrap();
 | 
			
		||||
    let mut emu = GeorgeEmu::builder().rom(rom).window(window).build();
 | 
			
		||||
 | 
			
		||||
    let f = Rc::new(RefCell::new(None));
 | 
			
		||||
    let g = f.clone();
 | 
			
		||||
 | 
			
		||||
    *g.borrow_mut() = Some(Closure::wrap(Box::new(move || {
 | 
			
		||||
        // cycle roughly however many cycles would've run during a frame
 | 
			
		||||
        for _ in 0..32000 {
 | 
			
		||||
            emu.cycle();
 | 
			
		||||
        }
 | 
			
		||||
        emu.draw();
 | 
			
		||||
        // schedule this closure for running again at next frame
 | 
			
		||||
        request_animation_frame(f.borrow().as_ref().unwrap());
 | 
			
		||||
    }) as Box<dyn FnMut() + 'static>));
 | 
			
		||||
 | 
			
		||||
    request_animation_frame(g.borrow().as_ref().unwrap());
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,160 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8" />
 | 
			
		||||
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
			
		||||
    <title>Hi Warp Team, I'm August!</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="style.css">
 | 
			
		||||
    <script type="module" src="/src/index.ts"></script>
 | 
			
		||||
    <link rel="preconnect" href="https://rsms.me/">
 | 
			
		||||
    <link rel="stylesheet" href="https://rsms.me/inter/inter.css">
 | 
			
		||||
    <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/hack-font@3/build/web/hack.css">
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
    <div class="background">
 | 
			
		||||
        <div class="dots">
 | 
			
		||||
            <div class="page">
 | 
			
		||||
                <div>
 | 
			
		||||
                    <h1 class="accent"> Hi Warp Team!</h1>
 | 
			
		||||
                    <h1> i'm <span class="august-accent">august</span></h1>
 | 
			
		||||
                    <p>I love your product and want to help build the terminal of the future</p>
 | 
			
		||||
                    <code class="intro-prompt accent">$ <span class="echo">echo </span><span id="typed"></span></code>
 | 
			
		||||
                </div>
 | 
			
		||||
                <img class="chevron" aria-hidden="true" src="/chevron.svg">
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="page">
 | 
			
		||||
                <div class="about-menu">
 | 
			
		||||
                    <h1>what <span class="august-accent">am I</span>?</h1>
 | 
			
		||||
                    <p id="about">
 | 
			
		||||
                        I am a skilled Rust and Typescript <a href="#engineer"
 | 
			
		||||
                            class="august-accent-underline">engineer</a> who has
 | 
			
		||||
                        collaborated with global teams to
 | 
			
		||||
                        bring developers <a href="#together">together</a>, applies her skills to build
 | 
			
		||||
                        <a href="#beautiful">beautiful</a> products, and spends her free time <a
 | 
			
		||||
                            href="#tinkering">tinkering</a> and growing her skills.
 | 
			
		||||
                    </p>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div id="about-display">
 | 
			
		||||
                    <div class="about" id="engineer">
 | 
			
		||||
                        <div id="george" class="george widget">
 | 
			
		||||
                            <div class="traffic-lights">
 | 
			
		||||
                                <span class="dot red"></span>
 | 
			
		||||
                                <span class="dot yellow"></span>
 | 
			
		||||
                                <span class="dot green"></span>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <p class="accent">
 | 
			
		||||
                            This <a href="https://git.augustkline.com/august/warp" target="_blank"
 | 
			
		||||
                                rel="noreferer">site</a> was written in plain
 | 
			
		||||
                            Typescript, and this
 | 
			
		||||
                            demo is an <a href="https://git.augustkline.com/august/george-emu" target="_blank"
 | 
			
		||||
                                rel="noreferer">emulator</a> i wrote from
 | 
			
		||||
                            scratch in Rust that was compiled to WASM and runs
 | 
			
		||||
                            hand-written assembly in the browser at native speed.
 | 
			
		||||
                        </p>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="about" id="together">
 | 
			
		||||
                        <img class="widget train" src="/train.svg" />
 | 
			
		||||
                        <p class="accent">
 | 
			
		||||
                            At my last job with <a href="https://thecodingtrain.com/" target="_blank"
 | 
			
		||||
                                rel="noreferer">The Coding
 | 
			
		||||
                                Train</a> I worked with
 | 
			
		||||
                            a
 | 
			
		||||
                            global team of designers and educators to bring coding education to tens of thousands of
 | 
			
		||||
                            monthly
 | 
			
		||||
                            active users. I led implementation of the <a href="https://thecodingtrain.com/showcase"
 | 
			
		||||
                                target="_blank" rel="noreferer">Passenger
 | 
			
		||||
                                Showcase</a>, which enabled hundreds of creative coders to have their projects featured
 | 
			
		||||
                            on
 | 
			
		||||
                            the
 | 
			
		||||
                            site.
 | 
			
		||||
                        </p>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="about" id="beautiful">
 | 
			
		||||
                        <img class="widget"
 | 
			
		||||
                            src="https://upload.wikimedia.org/wikipedia/commons/e/e2/New_York_Daniel_Rozin_%22The_Wooden_Mirror%22_%285060453987%29.jpg" />
 | 
			
		||||
                        <p class="accent">I'm both a talented engineer and creatively-driven. I studied at NYU ITP's
 | 
			
		||||
                            undergrad program,
 | 
			
		||||
                            Interactive Media Arts, where I applied my engineering skills to the arts, creating <a
 | 
			
		||||
                                href="https://soundpaint.vercel.app" target="_blank" rel="noreferer">interactive musical
 | 
			
		||||
                                watercolors</a>, <a href="https://github.com/augustkline/childhoodstegify"
 | 
			
		||||
                                target="_blank" rel="noreferer">hidden message poetry</a>, and <a
 | 
			
		||||
                                href="https://github.com/augustkline/traceomancy" target="_blank"
 | 
			
		||||
                                rel="noreferer">networked oracles</a>, just to name a
 | 
			
		||||
                            few
 | 
			
		||||
                            projects.
 | 
			
		||||
                        </p>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="about" id="tinkering">
 | 
			
		||||
                        <img src="/blinkenlights.jpeg" class="widget" />
 | 
			
		||||
                        <p class="accent">
 | 
			
		||||
                            For fun I like to play with <a href="https://git.augustkline.com/august/george-hardware"
 | 
			
		||||
                                target="_blank" rel="noreferer">hardware</a>, and lately I've
 | 
			
		||||
                            been
 | 
			
		||||
                            developing <a href="https://git.augustkline.com/august/fuzzy" target="_blank"
 | 
			
		||||
                                rel="noreferer">fuzzy</a>, a programming
 | 
			
		||||
                            language
 | 
			
		||||
                            for
 | 
			
		||||
                            my homemade computer <a href="https://git.augustkline.com/august/george" target="_blank"
 | 
			
		||||
                                rel="noreferer">george</a>. Other
 | 
			
		||||
                            spare-time projects I've written include <a href="https://github.com/augustkline/aurchive"
 | 
			
		||||
                                target="_blank" rel="noreferer">svg
 | 
			
		||||
                                canvases</a>, <a href="https://git.augustkline.com/august/birdkov" target="_blank"
 | 
			
		||||
                                rel="noreferer">generative audio
 | 
			
		||||
                                markov
 | 
			
		||||
                                chains</a>, and <a href="https://github.com/augustkline/ephemeral-chat" target="_blank"
 | 
			
		||||
                                rel="noreferer">ephemeral chat
 | 
			
		||||
                                apps</a>.
 | 
			
		||||
                        </p>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="page">
 | 
			
		||||
                <div class="page-desc left">
 | 
			
		||||
                    <span class="accent"><code>man</code> for the future of coding</span>
 | 
			
		||||
                    <h1>here's a <span class="august-accent">feature idea</span>...</h1>
 | 
			
		||||
                    <p>I read up on your interview process and figured I'd skip straight to the best part!</p>
 | 
			
		||||
                    <p>The terminal of the future should blur the lines between TUI and GUI.</p>
 | 
			
		||||
                    <p>Here, I imagined an enhanced user interface for <code>man</code> that respects the developer and
 | 
			
		||||
                        doesn't
 | 
			
		||||
                        switch
 | 
			
		||||
                        contexts
 | 
			
		||||
                        or change their workflow.</p>
 | 
			
		||||
                    <p>(and <a href="https://git.augustkline.com/august/manserve" target="_blank"
 | 
			
		||||
                            rel="noreferer">here's</a> a little server I wrote
 | 
			
		||||
                        just
 | 
			
		||||
                        for
 | 
			
		||||
                        this demo)</p>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div id="man-demo">
 | 
			
		||||
                    <div class="terminal widget" id="man-terminal">
 | 
			
		||||
                        <div class="traffic-lights">
 | 
			
		||||
                            <span class="dot red"></span>
 | 
			
		||||
                            <span class="dot yellow"></span>
 | 
			
		||||
                            <span class="dot green"></span>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div id="results"></div>
 | 
			
		||||
                        <form id="man-input">
 | 
			
		||||
                            <code>~</code>
 | 
			
		||||
                            <input type="text" name="command" autocomplete="off" placeholder="Try typing `man pwd`" />
 | 
			
		||||
                            <input type="submit" hidden />
 | 
			
		||||
                        </form>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="page">
 | 
			
		||||
                <div>
 | 
			
		||||
                    <h1>Let's work <span class="august-accent">together</span></h1>
 | 
			
		||||
                    <p>Shoot me an <a href="mailto:me@augustkline.com">email</a> and let's set up an interview</p>
 | 
			
		||||
                    <p>I'm really excited to bring my skills to your team!</p>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</body>
 | 
			
		||||
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,715 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "vite-plugin-wasm-pack-example",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "lockfileVersion": 3,
 | 
			
		||||
  "requires": true,
 | 
			
		||||
  "packages": {
 | 
			
		||||
    "": {
 | 
			
		||||
      "name": "vite-plugin-wasm-pack-example",
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "devDependencies": {
 | 
			
		||||
        "vite": "^2.6.14",
 | 
			
		||||
        "vite-plugin-wasm-pack": "^0.1.9"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@esbuild/linux-loong64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "loong64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/ansi-styles": {
 | 
			
		||||
      "version": "4.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "color-convert": "^2.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/chalk": {
 | 
			
		||||
      "version": "4.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "ansi-styles": "^4.1.0",
 | 
			
		||||
        "supports-color": "^7.1.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/chalk/chalk?sponsor=1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/color-convert": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "color-name": "~1.1.4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=7.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/color-name": {
 | 
			
		||||
      "version": "1.1.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
 | 
			
		||||
      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "hasInstallScript": true,
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "esbuild": "bin/esbuild"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@esbuild/linux-loong64": "0.14.54",
 | 
			
		||||
        "esbuild-android-64": "0.14.54",
 | 
			
		||||
        "esbuild-android-arm64": "0.14.54",
 | 
			
		||||
        "esbuild-darwin-64": "0.14.54",
 | 
			
		||||
        "esbuild-darwin-arm64": "0.14.54",
 | 
			
		||||
        "esbuild-freebsd-64": "0.14.54",
 | 
			
		||||
        "esbuild-freebsd-arm64": "0.14.54",
 | 
			
		||||
        "esbuild-linux-32": "0.14.54",
 | 
			
		||||
        "esbuild-linux-64": "0.14.54",
 | 
			
		||||
        "esbuild-linux-arm": "0.14.54",
 | 
			
		||||
        "esbuild-linux-arm64": "0.14.54",
 | 
			
		||||
        "esbuild-linux-mips64le": "0.14.54",
 | 
			
		||||
        "esbuild-linux-ppc64le": "0.14.54",
 | 
			
		||||
        "esbuild-linux-riscv64": "0.14.54",
 | 
			
		||||
        "esbuild-linux-s390x": "0.14.54",
 | 
			
		||||
        "esbuild-netbsd-64": "0.14.54",
 | 
			
		||||
        "esbuild-openbsd-64": "0.14.54",
 | 
			
		||||
        "esbuild-sunos-64": "0.14.54",
 | 
			
		||||
        "esbuild-windows-32": "0.14.54",
 | 
			
		||||
        "esbuild-windows-64": "0.14.54",
 | 
			
		||||
        "esbuild-windows-arm64": "0.14.54"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-android-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "android"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-android-arm64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "android"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-darwin-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "darwin"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-darwin-arm64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "darwin"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-freebsd-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "freebsd"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-freebsd-arm64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "freebsd"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-linux-32": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "ia32"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-linux-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-linux-arm": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-linux-arm64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-linux-mips64le": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "mips64el"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-linux-ppc64le": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "ppc64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-linux-riscv64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "riscv64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-linux-s390x": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "s390x"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-netbsd-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "netbsd"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-openbsd-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "openbsd"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-sunos-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "sunos"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-windows-32": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "ia32"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "win32"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-windows-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "win32"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/esbuild-windows-arm64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "win32"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/fs-extra": {
 | 
			
		||||
      "version": "10.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "graceful-fs": "^4.2.0",
 | 
			
		||||
        "jsonfile": "^6.0.1",
 | 
			
		||||
        "universalify": "^2.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/fsevents": {
 | 
			
		||||
      "version": "2.3.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
 | 
			
		||||
      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "hasInstallScript": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "darwin"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/function-bind": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/graceful-fs": {
 | 
			
		||||
      "version": "4.2.11",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
 | 
			
		||||
      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/has-flag": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/hasown": {
 | 
			
		||||
      "version": "2.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "function-bind": "^1.1.2"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 0.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/is-core-module": {
 | 
			
		||||
      "version": "2.15.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
 | 
			
		||||
      "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "hasown": "^2.0.2"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 0.4"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/jsonfile": {
 | 
			
		||||
      "version": "6.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "universalify": "^2.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "graceful-fs": "^4.1.6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/nanoid": {
 | 
			
		||||
      "version": "3.3.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
 | 
			
		||||
      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "funding": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "github",
 | 
			
		||||
          "url": "https://github.com/sponsors/ai"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "nanoid": "bin/nanoid.cjs"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/narrowing": {
 | 
			
		||||
      "version": "1.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/narrowing/-/narrowing-1.5.0.tgz",
 | 
			
		||||
      "integrity": "sha512-DUu4XdKgkfAPTAL28k79pdnshDE2W5T24QAnidSPo2F/W1TX6CjNzmEeXQfE5O1lxQvC0GYI6ZRDsLcyzugEYA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/path-parse": {
 | 
			
		||||
      "version": "1.0.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
 | 
			
		||||
      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/picocolors": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/postcss": {
 | 
			
		||||
      "version": "8.4.41",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
 | 
			
		||||
      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "funding": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "opencollective",
 | 
			
		||||
          "url": "https://opencollective.com/postcss/"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "tidelift",
 | 
			
		||||
          "url": "https://tidelift.com/funding/github/npm/postcss"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "github",
 | 
			
		||||
          "url": "https://github.com/sponsors/ai"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "nanoid": "^3.3.7",
 | 
			
		||||
        "picocolors": "^1.0.1",
 | 
			
		||||
        "source-map-js": "^1.2.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^10 || ^12 || >=14"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/resolve": {
 | 
			
		||||
      "version": "1.22.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
 | 
			
		||||
      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "is-core-module": "^2.13.0",
 | 
			
		||||
        "path-parse": "^1.0.7",
 | 
			
		||||
        "supports-preserve-symlinks-flag": "^1.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "resolve": "bin/resolve"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/rollup": {
 | 
			
		||||
      "version": "2.77.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz",
 | 
			
		||||
      "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "rollup": "dist/bin/rollup"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "fsevents": "~2.3.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/source-map-js": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/supports-color": {
 | 
			
		||||
      "version": "7.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "has-flag": "^4.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/supports-preserve-symlinks-flag": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 0.4"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/universalify": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/vite": {
 | 
			
		||||
      "version": "2.9.18",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.18.tgz",
 | 
			
		||||
      "integrity": "sha512-sAOqI5wNM9QvSEE70W3UGMdT8cyEn0+PmJMTFvTB8wB0YbYUWw3gUbY62AOyrXosGieF2htmeLATvNxpv/zNyQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "esbuild": "^0.14.27",
 | 
			
		||||
        "postcss": "^8.4.13",
 | 
			
		||||
        "resolve": "^1.22.0",
 | 
			
		||||
        "rollup": ">=2.59.0 <2.78.0"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "vite": "bin/vite.js"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12.2.0"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "fsevents": "~2.3.2"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "less": "*",
 | 
			
		||||
        "sass": "*",
 | 
			
		||||
        "stylus": "*"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependenciesMeta": {
 | 
			
		||||
        "less": {
 | 
			
		||||
          "optional": true
 | 
			
		||||
        },
 | 
			
		||||
        "sass": {
 | 
			
		||||
          "optional": true
 | 
			
		||||
        },
 | 
			
		||||
        "stylus": {
 | 
			
		||||
          "optional": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/vite-plugin-wasm-pack": {
 | 
			
		||||
      "version": "0.1.12",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/vite-plugin-wasm-pack/-/vite-plugin-wasm-pack-0.1.12.tgz",
 | 
			
		||||
      "integrity": "sha512-WliYvQp9HXluir4OKGbngkcKxtYtifU11cqLurRRJGsl770Sjr1iIkp5RuvU3IC1poT4A57Z2/YgAKI2Skm7ZA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "chalk": "^4.1.2",
 | 
			
		||||
        "fs-extra": "^10.0.0",
 | 
			
		||||
        "narrowing": "^1.4.0"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "vite-plugin-wasm-pack-example",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "vite": "^2.6.14",
 | 
			
		||||
    "vite-plugin-wasm-pack": "^0.1.9"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "wasm": "wasm-pack build ./george --target web",
 | 
			
		||||
    "dev": "vite",
 | 
			
		||||
    "build": "vite build"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 347 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
 | 
			
		||||
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
 | 
			
		||||
<path d="M17 9.5L12 14.5L7 9.5" stroke="white" stroke-linecap="round" stroke-linejoin="round"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 299 B  | 
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 After Width: | Height: | Size: 56 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,231 @@
 | 
			
		|||
//@ts-ignore
 | 
			
		||||
import init, { main } from "george";
 | 
			
		||||
 | 
			
		||||
async function run() {
 | 
			
		||||
  await init();
 | 
			
		||||
  main();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
run();
 | 
			
		||||
 | 
			
		||||
async function getManpage(command: string) {
 | 
			
		||||
  const res = await fetch(`https://man.augustkline.com/${command}`, {
 | 
			
		||||
    method: "GET",
 | 
			
		||||
    credentials: "same-origin",
 | 
			
		||||
  });
 | 
			
		||||
  const parser = new DOMParser();
 | 
			
		||||
  const json = await res.json();
 | 
			
		||||
  const html = window.atob(json["html"]);
 | 
			
		||||
  const doc = parser.parseFromString(html, "text/html");
 | 
			
		||||
  return doc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const sendInput = async (event: SubmitEvent) => {
 | 
			
		||||
  event.preventDefault();
 | 
			
		||||
  const form: HTMLFormElement = document.getElementById(
 | 
			
		||||
    "man-input",
 | 
			
		||||
  )! as HTMLFormElement;
 | 
			
		||||
 | 
			
		||||
  const input = form.elements[0] as HTMLInputElement;
 | 
			
		||||
  const command_text = input.value;
 | 
			
		||||
  input.value = "";
 | 
			
		||||
  const command = command_text.slice(4, command_text.length);
 | 
			
		||||
  try {
 | 
			
		||||
    await makeManpage(command);
 | 
			
		||||
    makeEcho(command_text, false);
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    makeEcho(command_text, true);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const makeEcho = (command: string, error: boolean) => {
 | 
			
		||||
  const results = document.getElementById("results")!;
 | 
			
		||||
  const echo = document.createElement("div");
 | 
			
		||||
  const commandEl = document.createElement("code");
 | 
			
		||||
  commandEl.innerHTML = command;
 | 
			
		||||
  const result = document.createElement("p");
 | 
			
		||||
  if (error) {
 | 
			
		||||
    if (command.slice(0, 4) == "man ") {
 | 
			
		||||
      result.innerHTML = `Unrecognized command <code>${command.slice(4, command.length)}</code>`;
 | 
			
		||||
    } else {
 | 
			
		||||
      result.innerHTML = `Unrecognized command <code>${command}</code>`;
 | 
			
		||||
    }
 | 
			
		||||
    echo.className += " error";
 | 
			
		||||
  } else {
 | 
			
		||||
    result.innerHTML = `Opening man page for <code>${command.slice(4, command.length)}</code>`;
 | 
			
		||||
  }
 | 
			
		||||
  echo.append(commandEl, result);
 | 
			
		||||
  results.append(echo);
 | 
			
		||||
  fadeIn(echo);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const fadeIn = (el: HTMLElement) => {
 | 
			
		||||
  el.style.animation = "fade-in 0.3s";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const fadeInFlex = (el: HTMLElement) => {
 | 
			
		||||
  el.style.animation = "fade-in 0.5s, flex-in 0.8s";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const makeManpage = async (command: string) => {
 | 
			
		||||
  const demo = document.getElementById("man-demo")!;
 | 
			
		||||
  const doc = await getManpage(command);
 | 
			
		||||
  if (demo.children.length > 1) {
 | 
			
		||||
    const h1 = document.createElement("h1");
 | 
			
		||||
    const desc = doc.getElementsByClassName("Pp")!.item(0)?.innerHTML;
 | 
			
		||||
    const widget = document.getElementById("manpage-widget")!;
 | 
			
		||||
    widget.scrollTop = 0;
 | 
			
		||||
    h1.innerHTML = `${desc}`;
 | 
			
		||||
    widget.innerHTML = "";
 | 
			
		||||
    widget.style.setProperty("opacity", "1");
 | 
			
		||||
    widget.append(h1, ...doc.body.children);
 | 
			
		||||
  } else {
 | 
			
		||||
    const h1 = document.createElement("h1");
 | 
			
		||||
    const desc = doc.getElementsByClassName("Pp")!.item(0)?.innerHTML;
 | 
			
		||||
    const widget = document.createElement("div");
 | 
			
		||||
    widget.id = "manpage-widget";
 | 
			
		||||
    const container = document.createElement("div");
 | 
			
		||||
    container.id = "manpage-container";
 | 
			
		||||
    container.className = "widget";
 | 
			
		||||
    h1.innerHTML = `${desc}`;
 | 
			
		||||
    widget.innerHTML = "";
 | 
			
		||||
    widget.style.setProperty("opacity", "1");
 | 
			
		||||
    widget.append(h1, ...doc.body.children);
 | 
			
		||||
    container.append(widget);
 | 
			
		||||
    demo.append(container);
 | 
			
		||||
    fadeInFlex(container);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const typeAnim = () => {
 | 
			
		||||
  let i = 0;
 | 
			
		||||
  const txt = '"here\'s what I bring to the team"';
 | 
			
		||||
  const speed = 75;
 | 
			
		||||
  const type = () => {
 | 
			
		||||
    if (i < txt.length) {
 | 
			
		||||
      document.getElementById("typed")!.innerHTML += txt.charAt(i);
 | 
			
		||||
      i++;
 | 
			
		||||
      setTimeout(type, speed);
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  type();
 | 
			
		||||
};
 | 
			
		||||
setTimeout(typeAnim, 1000);
 | 
			
		||||
 | 
			
		||||
const manTerm = document.getElementById("man-terminal")!;
 | 
			
		||||
const input = document.getElementById("man-input")! as HTMLFormElement;
 | 
			
		||||
manTerm.addEventListener("click", () => {
 | 
			
		||||
  let prompt = input.children[1] as HTMLInputElement;
 | 
			
		||||
  prompt.focus();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const setTabIndices = () => {
 | 
			
		||||
  const canvases = document.getElementsByTagName("canvas")!;
 | 
			
		||||
  for (let canvas in canvases) {
 | 
			
		||||
    canvases[canvas].setAttribute("tabIndex", "-1");
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
window.addEventListener("load", () => {
 | 
			
		||||
  // Wait for wasm to add canvas before changing indices
 | 
			
		||||
  setTimeout(setTabIndices, 1000);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
input!.addEventListener("submit", sendInput);
 | 
			
		||||
 | 
			
		||||
const memoize = (fn) => {
 | 
			
		||||
  let cache = {};
 | 
			
		||||
  return (...args) => {
 | 
			
		||||
    let n = args[0];
 | 
			
		||||
    if (n in cache) {
 | 
			
		||||
      return cache[n];
 | 
			
		||||
    } else {
 | 
			
		||||
      let result = fn(n);
 | 
			
		||||
      cache[n] = result;
 | 
			
		||||
      return result;
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const getAboutWords = (): {
 | 
			
		||||
  abouts: HTMLCollectionOf<HTMLAnchorElement>;
 | 
			
		||||
  displays: HTMLCollectionOf<HTMLDivElement>;
 | 
			
		||||
} => {
 | 
			
		||||
  let about = document.getElementById("about")!;
 | 
			
		||||
  let abouts = about.getElementsByTagName(
 | 
			
		||||
    "a",
 | 
			
		||||
  )! as HTMLCollectionOf<HTMLAnchorElement>;
 | 
			
		||||
  let aboutDisplay = document.getElementById("about-display")!;
 | 
			
		||||
  let displays = aboutDisplay.getElementsByClassName(
 | 
			
		||||
    "about",
 | 
			
		||||
  )! as HTMLCollectionOf<HTMLDivElement>;
 | 
			
		||||
  return { abouts, displays };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const setAboutWordsMouseEnter = () => {
 | 
			
		||||
  let { abouts, displays } = getAboutWords();
 | 
			
		||||
  for (let i = 0; i < abouts.length; i++) {
 | 
			
		||||
    let word = abouts.item(i)!;
 | 
			
		||||
    word.onmouseenter = () => {
 | 
			
		||||
      for (let j = 0; j < abouts.length; j++) {
 | 
			
		||||
        let display = displays.item(j)!;
 | 
			
		||||
        if (word != abouts.item(j)) {
 | 
			
		||||
          abouts.item(j)!.className = "";
 | 
			
		||||
          if (memoize(window.getComputedStyle(display)).opacity === "1") {
 | 
			
		||||
            display.style.animation = "fade-out 0.3s forwards";
 | 
			
		||||
          } else {
 | 
			
		||||
            display.style.opacity = "0";
 | 
			
		||||
            display.style.animation = "";
 | 
			
		||||
          }
 | 
			
		||||
          display.style.pointerEvents = "none";
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      word.className = "august-accent-underline";
 | 
			
		||||
      displays.item(i)!.style.animation = "fade-in 0.3s forwards";
 | 
			
		||||
      displays.item(i)!.style.pointerEvents = "all";
 | 
			
		||||
    };
 | 
			
		||||
    word.onclick = (ev) => {
 | 
			
		||||
      ev.preventDefault();
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const removeListenersMobile = () => {
 | 
			
		||||
  let { abouts } = getAboutWords();
 | 
			
		||||
  for (let i = 0; i < abouts.length; i++) {
 | 
			
		||||
    let word = abouts.item(i)!;
 | 
			
		||||
    word.onmouseenter = null;
 | 
			
		||||
    word.onclick = null;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const onResize = () => {
 | 
			
		||||
  const mobile = window.matchMedia("all and (max-width: 70rem)").matches;
 | 
			
		||||
  if (mobile) {
 | 
			
		||||
    removeListenersMobile();
 | 
			
		||||
    setMobileAboutStyle();
 | 
			
		||||
  } else {
 | 
			
		||||
    setAboutWordsMouseEnter();
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
window.addEventListener("resize", onResize);
 | 
			
		||||
 | 
			
		||||
const setMobileAboutStyle = () => {
 | 
			
		||||
  const { abouts, displays } = getAboutWords();
 | 
			
		||||
  for (let i = 0; i < abouts.length; i++) {
 | 
			
		||||
    abouts[i].className = "";
 | 
			
		||||
    displays[i].style.pointerEvents = "all";
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const onLoad = () => {
 | 
			
		||||
  const mobile = window.matchMedia("all and (max-width: 70rem)").matches;
 | 
			
		||||
  if (!mobile) {
 | 
			
		||||
    setAboutWordsMouseEnter();
 | 
			
		||||
  } else {
 | 
			
		||||
    setMobileAboutStyle();
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
window.addEventListener("load", onLoad);
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,712 @@
 | 
			
		|||
:root {
 | 
			
		||||
    /* UI Fonts */
 | 
			
		||||
    --ui-font-family: Inter, sans-serif;
 | 
			
		||||
    --code-font-family: Hack, monospace;
 | 
			
		||||
    font-family: var(--ui-font-family);
 | 
			
		||||
    font-feature-settings: 'liga' 1, 'calt' 1;
 | 
			
		||||
 | 
			
		||||
    /* UI Colors */
 | 
			
		||||
    --accent-1: rgba(255, 255, 255, 0.05);
 | 
			
		||||
    --accent-2: rgba(255, 255, 255, 0.1);
 | 
			
		||||
    --accent-3: rgba(255, 255, 255, 0.15);
 | 
			
		||||
    --widget-shadow:
 | 
			
		||||
        inset 0 0 0 1px var(--accent-3),
 | 
			
		||||
        0 0.2rem 2rem rgba(255, 255, 255, 0.1);
 | 
			
		||||
    --inner-border: inset 0 0 0 1px var(--accent-2);
 | 
			
		||||
    --accent-bg: linear-gradient(95deg, var(--accent-3), var(--accent-1));
 | 
			
		||||
    --august-pink: oklch(80.67% 0.1 0);
 | 
			
		||||
    --august-orange: oklch(80.67% 0.1 43);
 | 
			
		||||
    --accent-grad: linear-gradient(120deg in oklab, var(--august-pink) 10%, var(--august-orange) 80%);
 | 
			
		||||
    --font-color: white;
 | 
			
		||||
    color-scheme: dark;
 | 
			
		||||
 | 
			
		||||
    /* Text Size Calculation */
 | 
			
		||||
    --min-fs: 1;
 | 
			
		||||
    --max-fs: 1.5;
 | 
			
		||||
    --min-vw: 20;
 | 
			
		||||
    --max-vw: 45;
 | 
			
		||||
    --min-fs-rem: var(--min-fs) * 1rem;
 | 
			
		||||
    --max-fs-rem: var(--max-fs) * 1rem;
 | 
			
		||||
    --min-vw-rem: var(--min-vw) * 1rem;
 | 
			
		||||
    --slope: (var(--max-fs) - var(--min-fs)) * (100svi - var(--min-vw-rem)) / (var(--max-vw) - var(--min-vw));
 | 
			
		||||
    --font-size: clamp(var(--min-fs-rem), var(--min-fs-rem) + var(--slope), var(--max-fs-rem));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
* {
 | 
			
		||||
    color: var(--font-color);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@supports (font-variation-settings: normal) {
 | 
			
		||||
    :root {
 | 
			
		||||
        font-family: InterVariable, sans-serif;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
::selection {
 | 
			
		||||
    background-color: color-mix(in srgb, white, transparent 70%);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a[href^='http'] {
 | 
			
		||||
    text-decoration: none;
 | 
			
		||||
    font-weight: 700;
 | 
			
		||||
 | 
			
		||||
    transition: color 0.3s ease;
 | 
			
		||||
 | 
			
		||||
    &:hover {
 | 
			
		||||
        color: var(--august-pink)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.chevron {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    inline-size: 3rem;
 | 
			
		||||
    bottom: 5%;
 | 
			
		||||
    left: 50%;
 | 
			
		||||
    color: rgba(255, 255, 255, 0.8);
 | 
			
		||||
    transform: translate(-50%, -50%);
 | 
			
		||||
    animation: pullDown 5s cubic-bezier(0.77, 0, 0.175, 1) infinite;
 | 
			
		||||
    animation-delay: 4s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@keyframes pullDown {
 | 
			
		||||
 | 
			
		||||
    from,
 | 
			
		||||
    to {
 | 
			
		||||
        bottom: 5%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    50% {
 | 
			
		||||
        bottom: 2%;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
body,
 | 
			
		||||
html {
 | 
			
		||||
    font-size: calc(var(--font-size) * 0.8);
 | 
			
		||||
    inline-size: 100%;
 | 
			
		||||
    block-size: 100%;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    overflow: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.august-accent {
 | 
			
		||||
    background: var(--accent-grad);
 | 
			
		||||
    color: transparent;
 | 
			
		||||
    background-clip: text;
 | 
			
		||||
    -webkit-background-clip: text;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.august-accent-underline {
 | 
			
		||||
    background-image: var(--accent-grad);
 | 
			
		||||
    color: black;
 | 
			
		||||
    background-size: 100% 100% !important;
 | 
			
		||||
    background-repeat: no-repeat;
 | 
			
		||||
    background-position: left bottom;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
code {
 | 
			
		||||
    font-family: var(--code-font-family);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.background {
 | 
			
		||||
    background: linear-gradient(160deg, #101010, #010101);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dots {
 | 
			
		||||
    inline-size: 100%;
 | 
			
		||||
    background-image: radial-gradient(rgba(255, 255, 255, 0.2) 1px, transparent 0);
 | 
			
		||||
    background-size: 4rem 4rem;
 | 
			
		||||
    background-position: 0.1rem 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#typed {
 | 
			
		||||
    animation: blink-cursor 1s step-end infinite;
 | 
			
		||||
    padding-inline-end: 0.5ch;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.echo {
 | 
			
		||||
    color: var(--august-pink)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
    --inner-padding: calc(var(--font-size) * 2);
 | 
			
		||||
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    padding: var(--inner-padding);
 | 
			
		||||
    gap: var(--font-size);
 | 
			
		||||
 | 
			
		||||
    &:first-child,
 | 
			
		||||
    &:last-child {
 | 
			
		||||
        div {
 | 
			
		||||
            margin: auto;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        block-size: calc(100svb - calc(2 * var(--inner-padding)));
 | 
			
		||||
 | 
			
		||||
        p {
 | 
			
		||||
            font-size: calc(var(--font-size));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        h1 {
 | 
			
		||||
            margin-block: 0.5rem;
 | 
			
		||||
            font-size: calc(4 * var(--font-size));
 | 
			
		||||
 | 
			
		||||
            &.accent {
 | 
			
		||||
                font-size: calc(1.5 * var(--font-size));
 | 
			
		||||
                align-self: start;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &:nth-child(2) {
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        .about-menu {
 | 
			
		||||
            flex: 0 1 50%;
 | 
			
		||||
 | 
			
		||||
            h1 {
 | 
			
		||||
                font-size: calc(3 * var(--font-size));
 | 
			
		||||
                max-block-size: 2ch;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            p {
 | 
			
		||||
                font-size: calc(var(--font-size) * 1.8);
 | 
			
		||||
                font-weight: 300;
 | 
			
		||||
                text-wrap: pretty;
 | 
			
		||||
                padding: 1rem;
 | 
			
		||||
 | 
			
		||||
                a {
 | 
			
		||||
                    text-decoration: none;
 | 
			
		||||
                    padding-inline: 0.25rem;
 | 
			
		||||
                    font-weight: 500 !important;
 | 
			
		||||
                    background-size: 100% 2px;
 | 
			
		||||
                    background-image: var(--accent-grad);
 | 
			
		||||
                    background-repeat: no-repeat;
 | 
			
		||||
                    background-position: left bottom;
 | 
			
		||||
                    transition: background-size 0.3s ease, color 0.3s ease;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        #about-display {
 | 
			
		||||
            position: relative;
 | 
			
		||||
            display: flex;
 | 
			
		||||
            align-items: center;
 | 
			
		||||
            justify-content: center;
 | 
			
		||||
            flex: 0 1 50%;
 | 
			
		||||
            block-size: 90%;
 | 
			
		||||
 | 
			
		||||
            &>:first-child {
 | 
			
		||||
                pointer-events: all;
 | 
			
		||||
                opacity: 1;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            &>:not(:first-child) {
 | 
			
		||||
                pointer-events: none;
 | 
			
		||||
                opacity: 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        .about {
 | 
			
		||||
            display: flex;
 | 
			
		||||
            position: absolute;
 | 
			
		||||
            flex-direction: column;
 | 
			
		||||
            justify-content: space-between;
 | 
			
		||||
            inline-size: 80%;
 | 
			
		||||
            block-size: 100%;
 | 
			
		||||
 | 
			
		||||
            &>* {
 | 
			
		||||
                border-radius: 1rem;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            img {
 | 
			
		||||
                max-inline-size: 100%;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            &>:first-child {
 | 
			
		||||
                max-block-size: 100%;
 | 
			
		||||
                block-size: 100%;
 | 
			
		||||
                overflow: hidden;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            p {
 | 
			
		||||
                font-size: var(--font-size);
 | 
			
		||||
                padding: 1rem;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            .train {
 | 
			
		||||
                background: white;
 | 
			
		||||
                padding: 1rem;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            .george {
 | 
			
		||||
                background-color: #110500;
 | 
			
		||||
                padding: 2.5rem 1rem;
 | 
			
		||||
 | 
			
		||||
                & canvas {
 | 
			
		||||
                    inline-size: 100%;
 | 
			
		||||
                    object-fit: contain;
 | 
			
		||||
                    image-rendering: pixelated;
 | 
			
		||||
                    z-index: -10;
 | 
			
		||||
 | 
			
		||||
                    /* this is a bug with rust_minifb, 
 | 
			
		||||
       it makes 2 canvases for some reason... */
 | 
			
		||||
                    &:nth-child(2) {
 | 
			
		||||
                        display: none;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#manpage-container {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#man-demo {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    gap: var(--font-size);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    a {
 | 
			
		||||
        pointer-events: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .terminal {
 | 
			
		||||
        background: black;
 | 
			
		||||
        position: relative;
 | 
			
		||||
        display: flex;
 | 
			
		||||
        justify-content: end;
 | 
			
		||||
        flex-direction: column;
 | 
			
		||||
        padding: var(--font-size);
 | 
			
		||||
        min-block-size: calc(var(--font-size) * 6);
 | 
			
		||||
 | 
			
		||||
        &:not(:only-child) {
 | 
			
		||||
            transition: flex 0.8s;
 | 
			
		||||
            flex: 0 0 50%;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        &:only-child {
 | 
			
		||||
            flex: 1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        p {
 | 
			
		||||
            margin: 0;
 | 
			
		||||
 | 
			
		||||
            &:nth-child(1) {
 | 
			
		||||
                color: lightblue;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        input,
 | 
			
		||||
        p {
 | 
			
		||||
            font-size: inherit;
 | 
			
		||||
            font-family: var(--code-font-family);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        #results {
 | 
			
		||||
            div {
 | 
			
		||||
                margin-block: 1rem;
 | 
			
		||||
                padding: 0.25rem 0.5rem;
 | 
			
		||||
                overflow: hidden;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            p {
 | 
			
		||||
                margin-block: 0.5rem;
 | 
			
		||||
 | 
			
		||||
                code {
 | 
			
		||||
                    color: var(--august-orange)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            .error {
 | 
			
		||||
                background: #ff615920;
 | 
			
		||||
                border-inline-start: solid 2px #ff6159;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            code {
 | 
			
		||||
                color: lightblue;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        form {
 | 
			
		||||
            &>input {
 | 
			
		||||
                inline-size: 100%;
 | 
			
		||||
                background: transparent;
 | 
			
		||||
                outline: none;
 | 
			
		||||
                border: none;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            code {
 | 
			
		||||
                color: pink;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #manpage-widget {
 | 
			
		||||
        --inner-padding: calc(var(--font-size)) calc(var(--font-size));
 | 
			
		||||
        overflow-y: auto;
 | 
			
		||||
        overflow-x: hidden;
 | 
			
		||||
        padding: 1rem;
 | 
			
		||||
 | 
			
		||||
        &>* {
 | 
			
		||||
            margin-block-start: 0;
 | 
			
		||||
            padding: var(--inner-padding);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        a {
 | 
			
		||||
            pointer-events: none;
 | 
			
		||||
 | 
			
		||||
            ::after {
 | 
			
		||||
                content: none;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        #SYNOPSIS {
 | 
			
		||||
            margin-block-start: 0
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        h1 {
 | 
			
		||||
            font-family: InterVariable, sans-serif;
 | 
			
		||||
            font-size: var(--font-size);
 | 
			
		||||
            font-weight: 400;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        &>h1 {
 | 
			
		||||
            position: sticky;
 | 
			
		||||
            top: 0;
 | 
			
		||||
            background: #000a;
 | 
			
		||||
            border-radius: 1rem;
 | 
			
		||||
            box-shadow: var(--inner-border);
 | 
			
		||||
            backdrop-filter: blur(10px);
 | 
			
		||||
            -webkit-backdrop-filter: blur(0.5rem);
 | 
			
		||||
 | 
			
		||||
            &::before {
 | 
			
		||||
                content: 'man';
 | 
			
		||||
                display: block;
 | 
			
		||||
                align-self: start;
 | 
			
		||||
                margin-block: 0 1rem;
 | 
			
		||||
                font-size: calc(var(--font-size) * 0.8);
 | 
			
		||||
                font-weight: 300;
 | 
			
		||||
                text-align: center;
 | 
			
		||||
                max-inline-size: 4ch;
 | 
			
		||||
                border-radius: 0.3rem;
 | 
			
		||||
                box-shadow: var(--inner-border);
 | 
			
		||||
                background: var(--accent-bg);
 | 
			
		||||
                padding: 0.2rem;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        & .manual-text>section:first-child {
 | 
			
		||||
            display: none;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        section>h1,
 | 
			
		||||
        section>h2 {
 | 
			
		||||
            text-transform: lowercase;
 | 
			
		||||
            font-weight: 300;
 | 
			
		||||
            font-style: italic;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        & * {
 | 
			
		||||
            text-decoration: none;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        p:not(:has(*)) {
 | 
			
		||||
            background: none;
 | 
			
		||||
            border: none;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .Bl-tag dd {
 | 
			
		||||
            margin-block-end: 1rem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        b,
 | 
			
		||||
        i,
 | 
			
		||||
        code,
 | 
			
		||||
        pre {
 | 
			
		||||
            font-family: var(--code-font-family);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        table {
 | 
			
		||||
            display: block;
 | 
			
		||||
            overflow: auto;
 | 
			
		||||
 | 
			
		||||
            tbody {
 | 
			
		||||
                display: inline-block;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            &:is(.head, .foot) {
 | 
			
		||||
                display: none;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            &.Nm tr {
 | 
			
		||||
                display: block;
 | 
			
		||||
                gap: 1rem;
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            td:nth-child(1) {
 | 
			
		||||
                padding-inline-end: 0.5rem;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            td:not(:has(*)) {
 | 
			
		||||
                display: none;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        section.Sh:nth-child(2) .Pp,
 | 
			
		||||
        b:not(section.Sh:nth-child(2) .Pp b, dt b, pre b),
 | 
			
		||||
        pre,
 | 
			
		||||
        dt {
 | 
			
		||||
            background: #fff3;
 | 
			
		||||
            padding: 0.1rem 0.4rem;
 | 
			
		||||
            border-radius: 0.3rem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .Pp {
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pre {
 | 
			
		||||
            overflow: auto;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        dt {
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
            margin-block: 0.4rem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.accent {
 | 
			
		||||
    --spacing: calc(0.25 * var(--font-size));
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    font-weight: 300;
 | 
			
		||||
    border-radius: 0.3rem;
 | 
			
		||||
    padding: var(--spacing) calc(var(--spacing) * 2);
 | 
			
		||||
    box-shadow: var(--inner-border);
 | 
			
		||||
    background: var(--accent-bg);
 | 
			
		||||
    backdrop-filter: blur(0.5rem);
 | 
			
		||||
    -webkit-backdrop-filter: blur(0.5rem);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.widget {
 | 
			
		||||
    position: relative;
 | 
			
		||||
    background: black;
 | 
			
		||||
    border-radius: 1rem;
 | 
			
		||||
    box-shadow: inset 0 0 0 1px var(--accent-3),
 | 
			
		||||
        0 0.2rem 2rem rgba(255, 255, 255, 0.1);
 | 
			
		||||
 | 
			
		||||
    .traffic-lights {
 | 
			
		||||
        --spacing: calc(0.5 * var(--font-size));
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        top: var(--spacing);
 | 
			
		||||
        left: calc(var(--spacing) * 1.25);
 | 
			
		||||
        user-select: none;
 | 
			
		||||
 | 
			
		||||
        .dot {
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
            inline-size: var(--spacing);
 | 
			
		||||
            block-size: var(--spacing);
 | 
			
		||||
            margin-inline-end: 0.3rem;
 | 
			
		||||
            background: red;
 | 
			
		||||
            border-radius: 100%;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .red {
 | 
			
		||||
            background: #ff6159;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .yellow {
 | 
			
		||||
            background: #ffbd2e;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .green {
 | 
			
		||||
            background: #28c941;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@keyframes blink-cursor {
 | 
			
		||||
 | 
			
		||||
    from,
 | 
			
		||||
    to {
 | 
			
		||||
        border-inline-end: 0.15rem solid transparent;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    50% {
 | 
			
		||||
        border-inline-end: 0.15rem solid white;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@media all and (max-width: 60rem) {
 | 
			
		||||
    .page {
 | 
			
		||||
        &:nth-child(2) {
 | 
			
		||||
            flex-direction: column;
 | 
			
		||||
 | 
			
		||||
            .about {
 | 
			
		||||
                margin: 5svb auto;
 | 
			
		||||
                inline-size: 90%;
 | 
			
		||||
                position: relative;
 | 
			
		||||
                opacity: 1 !important;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            #about-display {
 | 
			
		||||
                display: contents;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    #man-demo {
 | 
			
		||||
        max-block-size: 80svb;
 | 
			
		||||
        flex-direction: column;
 | 
			
		||||
 | 
			
		||||
        #manpage-widget>h1 {
 | 
			
		||||
            position: relative;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media all and (min-width: 60rem) {
 | 
			
		||||
 | 
			
		||||
    body {
 | 
			
		||||
        scroll-snap-type: block mandatory;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .page {
 | 
			
		||||
        flex-direction: row;
 | 
			
		||||
        block-size: calc(100svb - calc(2 * var(--inner-padding)));
 | 
			
		||||
        scroll-snap-align: center;
 | 
			
		||||
        scroll-snap-stop: always;
 | 
			
		||||
 | 
			
		||||
        .page-desc {
 | 
			
		||||
            h1 {
 | 
			
		||||
                font-size: calc(var(--font-size)* 1.7);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            p {
 | 
			
		||||
                font-size: calc(var(--font-size)* 1.1);
 | 
			
		||||
                max-inline-size: 24ch;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media all and (min-width: 60rem) and (max-width: 80rem) {
 | 
			
		||||
    .page {
 | 
			
		||||
        &:nth-child(3) {
 | 
			
		||||
            flex-direction: row;
 | 
			
		||||
            grid-template-columns: 4;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        &:nth-child(2) {
 | 
			
		||||
            #about {
 | 
			
		||||
                font-size: calc(var(--font-size) * 1.2);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            flex-direction: row;
 | 
			
		||||
            grid-template-columns: 4;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .page-desc {
 | 
			
		||||
 | 
			
		||||
            h1 {
 | 
			
		||||
                font-size: calc(var(--font-size)* 1.3);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            p {
 | 
			
		||||
                font-size: calc(var(--font-size));
 | 
			
		||||
                max-inline-size: 24ch;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #man-demo {
 | 
			
		||||
        min-inline-size: 50vi;
 | 
			
		||||
        inline-size: 50vi;
 | 
			
		||||
        flex-direction: column-reverse;
 | 
			
		||||
 | 
			
		||||
        .terminal:not(:only-child) {
 | 
			
		||||
            transition: flex 0.8s;
 | 
			
		||||
            flex: 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@media all and (min-width: 80rem) {
 | 
			
		||||
 | 
			
		||||
    .page:nth-child(3) {
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #man-demo {
 | 
			
		||||
        flex-direction: row;
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        max-inline-size: 60%;
 | 
			
		||||
        justify-self: flex-end;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@keyframes fade-in {
 | 
			
		||||
    from {
 | 
			
		||||
        opacity: 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    to {
 | 
			
		||||
        opacity: 1;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@keyframes fade-out {
 | 
			
		||||
    from {
 | 
			
		||||
        opacity: 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    to {
 | 
			
		||||
        opacity: 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@keyframes flex-in {
 | 
			
		||||
    from {
 | 
			
		||||
        flex: 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    to {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
import { defineConfig } from "vite";
 | 
			
		||||
import wasmPack from "vite-plugin-wasm-pack";
 | 
			
		||||
 | 
			
		||||
export default defineConfig({
 | 
			
		||||
  build: {
 | 
			
		||||
    minify: false,
 | 
			
		||||
  },
 | 
			
		||||
  plugins: [wasmPack(["./george"])],
 | 
			
		||||
});
 | 
			
		||||
		Loading…
	
		Reference in New Issue