diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..8252e1e Binary files /dev/null and b/.DS_Store differ diff --git a/.gitea/workflows/nightly.yml b/.github/workflows/nightly.yml similarity index 60% rename from .gitea/workflows/nightly.yml rename to .github/workflows/nightly.yml index 5c6fe61..d21fde8 100644 --- a/.gitea/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -5,24 +5,24 @@ on: branches: [ master ] jobs: - build-docker: - runs-on: edge + build-image: + runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_REGISTRY_USERNAME }} password: ${{ secrets.DOCKER_REGISTRY_TOKEN }} - name: Build and push - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: . - file: ./Dockerfile push: true - tags: xsheep2010/roadsign:nightly + file: ./Dockerfile + tags: xsheep2010/roadsign:sigma diff --git a/.gitignore b/.gitignore index 240112f..d51ebb3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /config +/certs /letsencrypt # Added by cargo diff --git a/Cargo.lock b/Cargo.lock index 70acf64..fb75eba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,259 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "actix-codec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" +dependencies = [ + "bitflags 2.4.1", + "bytes", + "futures-core", + "futures-sink", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-files" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf0bdd6ff79de7c9a021f5d9ea79ce23e108d8bfc9b49b5b4a2cf6fad5a35212" +dependencies = [ + "actix-http", + "actix-service", + "actix-utils", + "actix-web", + "bitflags 2.4.1", + "bytes", + "derive_more", + "futures-core", + "http-range", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "v_htmlescape", +] + +[[package]] +name = "actix-http" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d223b13fd481fc0d1f83bb12659ae774d9e3601814c68a0bc539731698cca743" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-tls", + "actix-utils", + "ahash", + "base64", + "bitflags 2.4.1", + "brotli", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "flate2", + "futures-core", + "h2", + "http 0.2.11", + "httparse", + "httpdate", + "itoa", + "language-tags", + "local-channel", + "mime", + "percent-encoding", + "pin-project-lite", + "rand", + "sha1", + "smallvec", + "tokio", + "tokio-util", + "tracing", + "zstd", +] + +[[package]] +name = "actix-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +dependencies = [ + "quote", + "syn 2.0.48", +] + +[[package]] +name = "actix-proxy" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eb1ba1258bd79835d602dffb79f62aae42da7569036c67929e21961e2b3693c" +dependencies = [ + "actix-web", + "awc", + "openssl", +] + +[[package]] +name = "actix-router" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d22475596539443685426b6bdadb926ad0ecaefdfc5fb05e5e3441f15463c511" +dependencies = [ + "bytestring", + "http 0.2.11", + "regex", + "serde", + "tracing", +] + +[[package]] +name = "actix-rt" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28f32d40287d3f402ae0028a9d54bef51af15c8769492826a69d28f81893151d" +dependencies = [ + "futures-core", + "tokio", +] + +[[package]] +name = "actix-server" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eb13e7eef0423ea6eab0e59f6c72e7cb46d33691ad56a726b3cd07ddec2c2d4" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "socket2", + "tokio", + "tracing", +] + +[[package]] +name = "actix-service" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" +dependencies = [ + "futures-core", + "paste", + "pin-project-lite", +] + +[[package]] +name = "actix-tls" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4cce60a2f2b477bc72e5cde0af1812a6e82d8fd85b5570a5dcf2a5bf2c5be5f" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "http 0.2.11", + "http 1.0.0", + "impl-more", + "openssl", + "pin-project-lite", + "rustls-pki-types", + "tokio", + "tokio-openssl", + "tokio-rustls", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a6556ddebb638c2358714d853257ed226ece6023ef9364f23f0c70737ea984" +dependencies = [ + "actix-codec", + "actix-http", + "actix-macros", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-tls", + "actix-utils", + "actix-web-codegen", + "ahash", + "bytes", + "bytestring", + "cfg-if", + "cookie", + "derive_more", + "encoding_rs", + "futures-core", + "futures-util", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2", + "time", + "url", +] + +[[package]] +name = "actix-web-codegen" +version = "4.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1f50ebbb30eca122b188319a4398b3f7bb4a8cdf50ecfb73bfc6a3c3ce54f5" +dependencies = [ + "actix-router", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "actix-web-httpauth" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d613edf08a42ccc6864c941d30fe14e1b676a77d16f1dbadc1174d065a0a775" +dependencies = [ + "actix-utils", + "actix-web", + "base64", + "futures-core", + "futures-util", + "log", + "pin-project-lite", +] + [[package]] name = "addr2line" version = "0.21.0" @@ -18,49 +271,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] -name = "aead" -version = "0.5.2" +name = "ahash" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" -dependencies = [ - "crypto-common", - "generic-array", -] - -[[package]] -name = "aes" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +checksum = "42cd52102d3df161c77a887b608d7a4897d7cc112886a9537b738a887a03aaff" dependencies = [ "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "aes-gcm" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", -] - -[[package]] -name = "ahash" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" -dependencies = [ "getrandom", "once_cell", "version_check", + "zerocopy", ] [[package]] @@ -73,18 +293,18 @@ dependencies = [ ] [[package]] -name = "android-tzdata" -version = "0.1.1" +name = "alloc-no-stdlib" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] -name = "android_system_properties" -version = "0.1.5" +name = "alloc-stdlib" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ - "libc", + "alloc-no-stdlib", ] [[package]] @@ -104,6 +324,40 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "awc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c09cc97310b926f01621faee652f3d1b0962545a3cec6c9ac07def9ea36c2c" +dependencies = [ + "actix-codec", + "actix-http", + "actix-rt", + "actix-service", + "actix-tls", + "actix-utils", + "base64", + "bytes", + "cfg-if", + "cookie", + "derive_more", + "futures-core", + "futures-util", + "h2", + "http 0.2.11", + "itoa", + "log", + "mime", + "openssl", + "percent-encoding", + "pin-project-lite", + "rand", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", +] + [[package]] name = "backtrace" version = "0.3.69" @@ -119,12 +373,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.21.7" @@ -142,6 +390,9 @@ name = "bitflags" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +dependencies = [ + "serde", +] [[package]] name = "block-buffer" @@ -153,10 +404,25 @@ dependencies = [ ] [[package]] -name = "bumpalo" -version = "3.14.0" +name = "brotli" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] [[package]] name = "byteorder" @@ -170,12 +436,22 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +[[package]] +name = "bytestring" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" +dependencies = [ + "bytes", +] + [[package]] name = "cc" version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ + "jobserver", "libc", ] @@ -185,35 +461,14 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chrono" -version = "0.4.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits", - "windows-targets 0.48.5", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - [[package]] name = "config" -version = "0.13.4" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca" +checksum = "7328b20597b53c2454f0b1919720c25c7339051c02b72b7e05409e00b14132be" dependencies = [ "async-trait", + "convert_case 0.6.0", "json5", "lazy_static", "nom", @@ -222,10 +477,30 @@ dependencies = [ "rust-ini", "serde", "serde_json", - "toml 0.5.11", + "toml", "yaml-rust", ] +[[package]] +name = "const-random" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + [[package]] name = "convert_case" version = "0.4.0" @@ -233,39 +508,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] -name = "cookie" -version = "0.17.0" +name = "convert_case" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" dependencies = [ - "aes-gcm", - "base64 0.21.7", - "hkdf", - "hmac", "percent-encoding", - "rand", - "sha2", - "subtle", "time", "version_check", ] -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - [[package]] name = "cpufeatures" version = "0.2.12" @@ -275,6 +536,21 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "crypto-common" version = "0.1.6" @@ -282,54 +558,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "rand_core", "typenum", ] -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "darling" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.48", -] - -[[package]] -name = "darling_macro" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.48", -] - [[package]] name = "data-encoding" version = "2.5.0" @@ -351,7 +582,7 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "convert_case", + "convert_case 0.4.0", "proc-macro2", "quote", "rustc_version", @@ -366,14 +597,16 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", - "subtle", ] [[package]] name = "dlv-list" -version = "0.3.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] [[package]] name = "encoding_rs" @@ -391,21 +624,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "errno" -version = "0.3.8" +name = "flate2" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ - "libc", - "windows-sys 0.52.0", + "crc32fast", + "miniz_oxide", ] -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - [[package]] name = "fnv" version = "1.0.7" @@ -436,32 +663,12 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", -] - [[package]] name = "futures-core" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" -[[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 2.0.48", -] - [[package]] name = "futures-sink" version = "0.3.30" @@ -481,7 +688,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", - "futures-macro", "futures-sink", "futures-task", "pin-project-lite", @@ -510,16 +716,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "ghash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" -dependencies = [ - "opaque-debug", - "polyval", -] - [[package]] name = "gimli" version = "0.28.1" @@ -528,9 +724,9 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "h2" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b553656127a00601c8ae5590fcfdc118e4083a7924b6cf4ffc1ea4b99dc429d7" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" dependencies = [ "bytes", "fnv", @@ -545,33 +741,11 @@ dependencies = [ "tracing", ] -[[package]] -name = "h2" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "991910e35c615d8cab86b5ab04be67e6ad24d2bf5f4f11fdbbed26da999bbeab" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 1.0.0", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", -] +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" [[package]] name = "hashbrown" @@ -579,54 +753,12 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" -[[package]] -name = "headers" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322106e6bd0cba2d5ead589ddb8150a13d7c4217cf80d7c4f682ca994ccc6aa9" -dependencies = [ - "base64 0.21.7", - "bytes", - "headers-core", - "http 1.0.0", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" -dependencies = [ - "http 1.0.0", -] - [[package]] name = "hermit-abi" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - [[package]] name = "http" version = "0.2.11" @@ -650,38 +782,10 @@ dependencies = [ ] [[package]] -name = "http-body" -version = "0.4.6" +name = "http-range" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.11", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" -dependencies = [ - "bytes", - "http 1.0.0", -] - -[[package]] -name = "http-body-util" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" -dependencies = [ - "bytes", - "futures-util", - "http 1.0.0", - "http-body 1.0.0", - "pin-project-lite", -] +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" [[package]] name = "httparse" @@ -695,115 +799,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "hyper" -version = "0.14.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.23", - "http 0.2.11", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5aa53871fc917b1a9ed87b683a5d86db645e23acb32c2e0785a353e522fb75" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2 0.4.1", - "http 1.0.0", - "http-body 1.0.0", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "tokio", - "want", -] - -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper 1.1.0", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdea9aac0dbe5a9240d68cfd9501e2db94222c6dc06843e06640b9e07f0fdc67" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.0.0", - "http-body 1.0.0", - "hyper 1.1.0", - "pin-project-lite", - "socket2", - "tokio", - "tower", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" version = "0.5.0" @@ -814,6 +809,12 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "impl-more" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206ca75c9c03ba3d4ace2460e57b189f39f43de612c2f85836e65c929701bb2d" + [[package]] name = "indexmap" version = "2.1.0" @@ -824,21 +825,6 @@ dependencies = [ "hashbrown 0.14.3", ] -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", -] - -[[package]] -name = "ipnet" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" - [[package]] name = "itoa" version = "1.0.10" @@ -846,12 +832,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] -name = "js-sys" -version = "0.3.67" +name = "jobserver" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" dependencies = [ - "wasm-bindgen", + "libc", ] [[package]] @@ -865,6 +851,12 @@ dependencies = [ "serde", ] +[[package]] +name = "language-tags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" + [[package]] name = "lazy_static" version = "1.4.0" @@ -884,10 +876,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] -name = "linux-raw-sys" -version = "0.4.12" +name = "local-channel" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" +dependencies = [ + "futures-core", + "futures-sink", + "local-waker", +] + +[[package]] +name = "local-waker" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" [[package]] name = "lock_api" @@ -949,56 +952,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", + "log", "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "multer" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15d522be0a9c3e46fd2632e272d178f56387bdb5c9fbb3a36c649062e9b5219" -dependencies = [ - "bytes", - "encoding_rs", - "futures-util", - "http 1.0.0", - "httparse", - "log", - "memchr", - "mime", - "spin", - "tokio", - "version_check", -] - -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "nix" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" -dependencies = [ - "bitflags 2.4.1", - "cfg-if", - "libc", + "windows-sys", ] [[package]] @@ -1021,15 +977,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", -] - [[package]] name = "num_cpus" version = "1.16.0" @@ -1055,12 +1002,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - [[package]] name = "openssl" version = "0.10.62" @@ -1087,12 +1028,6 @@ dependencies = [ "syn 2.0.48", ] -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - [[package]] name = "openssl-sys" version = "0.9.98" @@ -1107,12 +1042,12 @@ dependencies = [ [[package]] name = "ordered-multimap" -version = "0.4.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" +checksum = "4ed8acf08e98e744e5384c8bc63ceb0364e68a6854187221c18df61c4797690e" dependencies = [ "dlv-list", - "hashbrown 0.12.3", + "hashbrown 0.13.2", ] [[package]] @@ -1141,9 +1076,15 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.48.5", + "windows-targets", ] +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + [[package]] name = "pathdiff" version = "0.2.1" @@ -1201,26 +1142,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "pin-project" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - [[package]] name = "pin-project-lite" version = "0.2.13" @@ -1239,121 +1160,6 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" -[[package]] -name = "poem" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38a712ff53e257d60d3d22936c51cafa606552129d55539c8a400de44eff676d" -dependencies = [ - "async-trait", - "base64 0.21.7", - "bytes", - "chrono", - "cookie", - "futures-util", - "headers", - "http 1.0.0", - "http-body-util", - "httpdate", - "hyper 1.1.0", - "hyper-util", - "mime", - "mime_guess", - "multer", - "nix", - "parking_lot", - "percent-encoding", - "pin-project-lite", - "poem-derive", - "quick-xml", - "regex", - "reqwest 0.11.23 (registry+https://github.com/rust-lang/crates.io-index)", - "rfc7239", - "serde", - "serde_json", - "serde_urlencoded", - "serde_yaml", - "smallvec", - "sync_wrapper", - "tempfile", - "thiserror", - "time", - "tokio", - "tokio-metrics", - "tokio-stream", - "tokio-tungstenite", - "tokio-util", - "tracing", - "wildmatch", -] - -[[package]] -name = "poem-derive" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e2bd3f82499a00ecb2d0e06bb1b9a17540aeaa28bab14336a94255ff5185f8f" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "poem-openapi" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c7c12d9e19a0cda311f46515b819eb1e8425a4bee004540aff7b9c587e02b82" -dependencies = [ - "base64 0.21.7", - "bytes", - "derive_more", - "futures-util", - "indexmap", - "mime", - "num-traits", - "poem", - "poem-openapi-derive", - "quick-xml", - "regex", - "serde", - "serde_json", - "serde_urlencoded", - "serde_yaml", - "thiserror", - "tokio", -] - -[[package]] -name = "poem-openapi-derive" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d485fb9cc4ca9a8364beedd4ea81294b1f028d459c8fd7bb352e38f87f8ffa" -dependencies = [ - "darling", - "http 1.0.0", - "indexmap", - "mime", - "proc-macro-crate", - "proc-macro2", - "quote", - "regex", - "syn 2.0.48", - "thiserror", -] - -[[package]] -name = "polyval" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash", -] - [[package]] name = "powerfmt" version = "0.2.0" @@ -1366,15 +1172,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" -[[package]] -name = "proc-macro-crate" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" -dependencies = [ - "toml_edit 0.20.2", -] - [[package]] name = "proc-macro2" version = "1.0.76" @@ -1397,16 +1194,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "quick-xml" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "quote" version = "1.0.35" @@ -1485,110 +1272,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] -name = "reqwest" -version = "0.11.23" +name = "ring" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.23", - "http 0.2.11", - "http-body 0.4.6", - "hyper 0.14.28", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "system-configuration", - "tokio", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "reqwest" -version = "0.11.23" -source = "git+https://github.com/seanmonstar/reqwest.git?branch=hyper-v1#7f4bfcbaaa8d332464709262c645893702b1ae84" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.4.1", - "http 1.0.0", - "http-body 1.0.0", - "http-body-util", - "hyper 1.1.0", - "hyper-tls", - "hyper-util", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "system-configuration", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "rfc7239" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "087317b3cf7eb481f13bd9025d729324b7cd068d6f470e2d76d049e191f5ba47" -dependencies = [ - "uncased", + "cc", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys", ] [[package]] name = "roadsign" version = "0.1.0" dependencies = [ + "actix-files", + "actix-proxy", + "actix-web", + "actix-web-httpauth", + "awc", "config", - "futures-util", - "http 1.0.0", - "hyper-util", + "derive_more", "lazy_static", "mime", "percent-encoding", - "poem", - "poem-openapi", "queryst", "rand", "regex", - "reqwest 0.11.23 (git+https://github.com/seanmonstar/reqwest.git?branch=hyper-v1)", + "rustls", + "rustls-pemfile", "serde", "serde_json", "tokio", "tokio-tungstenite", - "toml 0.8.8", + "toml", "tracing", "tracing-subscriber", "wildmatch", @@ -1596,20 +1316,21 @@ dependencies = [ [[package]] name = "ron" -version = "0.7.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ - "base64 0.13.1", - "bitflags 1.2.1", + "base64", + "bitflags 2.4.1", "serde", + "serde_derive", ] [[package]] name = "rust-ini" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" +checksum = "7e2a3bcec1f113553ef1c88aae6c020a369d03d55b58de9869a0908930385091" dependencies = [ "cfg-if", "ordered-multimap", @@ -1631,16 +1352,44 @@ dependencies = [ ] [[package]] -name = "rustix" -version = "0.38.30" +name = "rustls" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41" dependencies = [ - "bitflags 2.4.1", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", + "log", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e4980fa29e4c4b212ffb3db068a564cbf560e51d3944b7c88bd8bf5bec64f4" +dependencies = [ + "base64", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a716eb65e3158e90e17cd93d855216e27bde02745ab842f2cab4a39dba1bacf" + +[[package]] +name = "rustls-webpki" +version = "0.102.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] @@ -1649,44 +1398,12 @@ version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" -[[package]] -name = "schannel" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "security-framework" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a2ac85147a3a11d77ecf1bc7166ec0b92febfa4461c37944e180f319ece467" -dependencies = [ - "bitflags 1.2.1", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "semver" version = "1.0.21" @@ -1745,19 +1462,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_yaml" -version = "0.9.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1bf28c79a99f70ee1f1d83d10c875d2e70618417fda01ad1785e027579d9d38" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "sha1" version = "0.10.6" @@ -1820,7 +1524,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -1829,12 +1533,6 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "subtle" version = "2.5.0" @@ -1863,49 +1561,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" -dependencies = [ - "futures-core", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.2.1", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tempfile" -version = "3.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall", - "rustix", - "windows-sys 0.52.0", -] - [[package]] name = "thiserror" version = "1.0.56" @@ -1965,6 +1620,15 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -1996,7 +1660,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -2011,35 +1675,25 @@ dependencies = [ ] [[package]] -name = "tokio-metrics" -version = "0.3.1" +name = "tokio-openssl" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eace09241d62c98b7eeb1107d4c5c64ca3bd7da92e8c218c153ab3a78f9be112" +checksum = "6ffab79df67727f6acf57f1ff743091873c24c579b1e2ce4d8f53e47ded4d63d" dependencies = [ "futures-util", - "pin-project-lite", - "tokio", - "tokio-stream", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", + "openssl", + "openssl-sys", "tokio", ] [[package]] -name = "tokio-stream" -version = "0.1.14" +name = "tokio-rustls" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ - "futures-core", - "pin-project-lite", + "rustls", + "rustls-pki-types", "tokio", ] @@ -2069,15 +1723,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - [[package]] name = "toml" version = "0.8.8" @@ -2087,7 +1732,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.21.0", + "toml_edit", ] [[package]] @@ -2099,17 +1744,6 @@ dependencies = [ "serde", ] -[[package]] -name = "toml_edit" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - [[package]] name = "toml_edit" version = "0.21.0" @@ -2123,34 +1757,6 @@ dependencies = [ "winnow", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - [[package]] name = "tracing" version = "0.1.40" @@ -2209,12 +1815,6 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - [[package]] name = "tungstenite" version = "0.21.0" @@ -2246,15 +1846,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" -[[package]] -name = "uncased" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68" -dependencies = [ - "version_check", -] - [[package]] name = "unicase" version = "2.7.0" @@ -2286,20 +1877,16 @@ dependencies = [ ] [[package]] -name = "universal-hash" -version = "0.5.1" +name = "unicode-segmentation" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle", -] +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] -name = "unsafe-libyaml" -version = "0.2.10" +name = "untrusted" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" @@ -2318,6 +1905,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "v_htmlescape" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e8257fbc510f0a46eb602c10215901938b5c2a7d5e70fc11483b1d3c9b5b18c" + [[package]] name = "valuable" version = "0.1.0" @@ -2336,97 +1929,12 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" -[[package]] -name = "wasm-bindgen" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" - -[[package]] -name = "web-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "wildmatch" version = "2.3.0" @@ -2455,31 +1963,13 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.0", -] - [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.0", + "windows-targets", ] [[package]] @@ -2488,28 +1978,13 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] @@ -2518,84 +1993,42 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" - [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - [[package]] name = "winnow" version = "0.5.34" @@ -2605,16 +2038,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "yaml-rust" version = "0.4.5" @@ -2623,3 +2046,57 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" + +[[package]] +name = "zstd" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.9+zstd.1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml index 3bd45fa..f72e974 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,24 +6,18 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -config = { version = "0.13.4", features = ["toml"] } -futures-util = "0.3.30" -http = "1.0.0" -hyper-util = { version = "0.1.2", features = ["full"] } +actix-files = "0.6.5" +actix-proxy = "0.2.0" +actix-web = { version = "4.5.1", features = ["rustls-0_22"] } +actix-web-httpauth = "0.8.1" +awc = "3.4.0" +config = { version = "0.14.0", features = ["toml"] } lazy_static = "1.4.0" mime = "0.3.17" percent-encoding = "2.3.1" -poem = { version = "2.0.0", features = [ - "tokio-metrics", - "websocket", - "static-files", - "reqwest", -] } -poem-openapi = { version = "4.0.0" } queryst = "3.0.0" rand = "0.8.5" regex = "1.10.2" -reqwest = { git = "https://github.com/seanmonstar/reqwest.git", branch = "hyper-v1", version = "0.11.23" } serde = "1.0.195" serde_json = "1.0.111" tokio = { version = "1.35.1", features = [ @@ -37,3 +31,6 @@ toml = "0.8.8" tracing = "0.1.40" tracing-subscriber = "0.3.18" wildmatch = "2.3.0" +derive_more = "0.99.17" +rustls = "0.22.2" +rustls-pemfile = "2.0.0" diff --git a/Dockerfile b/Dockerfile index 71cee3c..499036c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ WORKDIR /source/pkg/sideload/view RUN npm install RUN npm run build WORKDIR /source -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -buildvcs -o /dist ./pkg/cmd/server/main.go +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -buildvcs -o /dist ./pkg/cmd/server.rs/main.go # Runtime FROM golang:alpine diff --git a/README.md b/README.md index 4b16287..f7f2a1e 100644 --- a/README.md +++ b/README.md @@ -74,9 +74,9 @@ rds cli with this command. ```shell rds connect -# ID will allow you find this server in after commands. -# URL is to your roadsign server sideload api. -# Password is your roadsign server credential. +# ID will allow you find this server.rs in after commands. +# URL is to your roadsign server.rs sideload api. +# Password is your roadsign server.rs credential. # ====================================================================== # !WARNING! All these things will storage in your $HOME/.roadsignrc.yaml # ====================================================================== @@ -85,8 +85,8 @@ rds connect Then, sync your local config to remote. ```shell -rds sync -# Server ID is your server added by last command. +rds sync +# Server ID is your server.rs added by last command. # Site ID is your new site id or old site id if you need update it. # Config File is your local config file path. ``` diff --git a/Settings.toml b/Settings.toml index b31488d..fcfba2c 100644 --- a/Settings.toml +++ b/Settings.toml @@ -1,7 +1,17 @@ regions = "./regions" secret = "aEXcED5xJ3" -[listen] -proxies = "0.0.0.0:80" -proxies_tls = "0.0.0.0:443" -sideload = "0.0.0.0:81" +[sideload] +bind_addr = "0.0.0.0:81" + +[[proxies.bind]] +addr = "0.0.0.0:80" +tls = false +[[proxies.bind]] +addr = "0.0.0.0:443" +tls = false + +[[certificates]] +domain = "localhost" +certs = "certs/fullchain.pem" +key = "certs/privkey.pem" \ No newline at end of file diff --git a/regions/index.toml b/regions/index.toml index 9d87b77..899c626 100644 --- a/regions/index.toml +++ b/regions/index.toml @@ -11,4 +11,4 @@ uri = "files://regions?index=index.html" [[applications]] id = "script" exe = "./script.sh" -workdir = "regions" +workdir = "regions" \ No newline at end of file diff --git a/src/auth.rs b/src/auth.rs deleted file mode 100644 index 79b28c4..0000000 --- a/src/auth.rs +++ /dev/null @@ -1,50 +0,0 @@ -use http::StatusCode; -use poem::{ - web::headers::{self, authorization::Basic, HeaderMapExt}, - Endpoint, Error, Middleware, Request, Response, Result, -}; - -pub struct BasicAuth { - pub username: String, - pub password: String, -} - -impl Middleware for BasicAuth { - type Output = BasicAuthEndpoint; - - fn transform(&self, ep: E) -> Self::Output { - BasicAuthEndpoint { - ep, - username: self.username.clone(), - password: self.password.clone(), - } - } -} - -pub struct BasicAuthEndpoint { - ep: E, - username: String, - password: String, -} - -#[poem::async_trait] -impl Endpoint for BasicAuthEndpoint { - type Output = E::Output; - - async fn call(&self, req: Request) -> Result { - if let Some(auth) = req.headers().typed_get::>() { - if auth.0.username() == self.username && auth.0.password() == self.password { - return self.ep.call(req).await; - } - } - Err(Error::from_response( - Response::builder() - .header( - "WWW-Authenticate", - "Basic realm=\"RoadSig\", charset=\"UTF-8\"", - ) - .status(StatusCode::UNAUTHORIZED) - .finish(), - )) - } -} diff --git a/src/config/mod.rs b/src/config/mod.rs index de6edc1..6804038 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -7,5 +7,5 @@ use crate::config::loader::load_settings; pub mod loader; lazy_static! { - pub static ref C: RwLock = RwLock::new(load_settings()); + pub static ref CFG: RwLock = RwLock::new(load_settings()); } diff --git a/src/main.rs b/src/main.rs index a634ae5..6495a7c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,28 +1,28 @@ -pub mod auth; +extern crate core; + mod config; mod proxies; mod sideload; -pub mod warden; +mod warden; +mod server; +pub mod tls; +use std::error; use lazy_static::lazy_static; -use poem::{listener::TcpListener, EndpointExt, Route, Server}; -use poem_openapi::OpenApiService; use proxies::RoadInstance; use tokio::sync::Mutex; +use tokio::task::JoinSet; use tracing::{error, info, Level}; - -use crate::proxies::route; +use crate::proxies::server::build_proxies; +use crate::sideload::server::build_sideload; lazy_static! { static ref ROAD: Mutex = Mutex::new(RoadInstance::new()); } #[tokio::main] -async fn main() -> Result<(), std::io::Error> { +async fn main() -> Result<(), Box> { // Setting up logging - if std::env::var_os("RUST_LOG").is_none() { - std::env::set_var("RUST_LOG", "poem=debug"); - } tracing_subscriber::fmt() .with_max_level(Level::DEBUG) .init(); @@ -30,11 +30,10 @@ async fn main() -> Result<(), std::io::Error> { // Prepare all the stuff info!("Loading proxy regions..."); match proxies::loader::scan_regions( - config::C + config::CFG .read() .await - .get_string("regions") - .unwrap_or("./regions".to_string()), + .get_string("regions")? ) { Err(_) => error!("Loading proxy regions... failed"), Ok((regions, count)) => { @@ -43,37 +42,15 @@ async fn main() -> Result<(), std::io::Error> { } }; + let mut server_set = JoinSet::new(); + // Proxies - let proxies_server = Server::new(TcpListener::bind( - config::C - .read() - .await - .get_string("listen.proxies") - .unwrap_or("0.0.0.0:80".to_string()), - )) - .run(route::handle); + for server in build_proxies().await? { + server_set.spawn(server); + } // Sideload - let sideload = OpenApiService::new(sideload::SideloadApi, "Sideload API", "1.0") - .server("http://localhost:3000/cgi"); - - let sideload_server = Server::new(TcpListener::bind( - config::C - .read() - .await - .get_string("listen.sideload") - .unwrap_or("0.0.0.0:81".to_string()), - )) - .run( - Route::new().nest("/cgi", sideload).with(auth::BasicAuth { - username: "RoadSign".to_string(), - password: config::C - .read() - .await - .get_string("secret") - .unwrap_or("password".to_string()), - }), - ); + server_set.spawn(build_sideload().await?); // Process manager { @@ -85,7 +62,8 @@ async fn main() -> Result<(), std::io::Error> { app.warden.start().await; } - tokio::try_join!(proxies_server, sideload_server)?; + // Wait for web servers + server_set.join_next().await; Ok(()) } diff --git a/src/proxies/browser.rs b/src/proxies/browser.rs deleted file mode 100644 index 56f0aff..0000000 --- a/src/proxies/browser.rs +++ /dev/null @@ -1,52 +0,0 @@ -use std::fmt::Write; - -pub struct DirectoryTemplate<'a> { - pub path: &'a str, - pub files: Vec, -} - -impl<'a> DirectoryTemplate<'a> { - pub fn render(&self) -> String { - let mut s = format!( - r#" - - - Index of {} - - -

Index of /{}

-
    "#, - self.path, self.path - ); - - for file in &self.files { - if file.is_dir { - let _ = write!( - s, - r#"
  • {}/
  • "#, - file.url, file.filename - ); - } else { - let _ = write!( - s, - r#"
  • {}
  • "#, - file.url, file.filename - ); - } - } - - s.push_str( - r#"
- - "#, - ); - - s - } -} - -pub struct FileRef { - pub url: String, - pub filename: String, - pub is_dir: bool, -} diff --git a/src/proxies/config.rs b/src/proxies/config.rs index 108e6f8..60d4b31 100644 --- a/src/proxies/config.rs +++ b/src/proxies/config.rs @@ -1,6 +1,5 @@ use std::collections::HashMap; -use poem_openapi::Object; use queryst::parse; use serde::{Deserialize, Serialize}; use serde_json::json; @@ -9,14 +8,14 @@ use crate::warden::Application; use super::responder::StaticResponderConfig; -#[derive(Debug, Object, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct Region { pub id: String, pub locations: Vec, pub applications: Vec, } -#[derive(Debug, Object, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct Location { pub id: String, pub hosts: Vec, @@ -27,7 +26,7 @@ pub struct Location { pub destinations: Vec, } -#[derive(Debug, Object, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct Destination { pub id: String, pub uri: String, @@ -75,15 +74,6 @@ impl Destination { .collect::>()[0] } - pub fn get_websocket_uri(&self) -> Result { - let parts = self.uri.as_str().splitn(2, "://").collect::>(); - let url = parts.get(1).unwrap_or(&""); - match self.get_protocol() { - "http" | "https" => Ok(url.replace("http", "ws")), - _ => Err(()), - } - } - pub fn get_hypertext_uri(&self) -> Result { match self.get_protocol() { "http" => Ok("http://".to_string() + self.get_host()), diff --git a/src/proxies/metrics.rs b/src/proxies/metrics.rs index 5d06a0e..ba5c6c8 100644 --- a/src/proxies/metrics.rs +++ b/src/proxies/metrics.rs @@ -1,21 +1,30 @@ use std::collections::VecDeque; -use poem_openapi::Object; use serde::{Deserialize, Serialize}; use super::config::{Destination, Location, Region}; -#[derive(Debug, Object, Clone, Serialize, Deserialize, PartialEq)] +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct RoadTrace { pub region: String, pub location: String, pub destination: String, + pub ip_address: String, + pub user_agent: String, pub error: Option, } impl RoadTrace { - pub fn from_structs(reg: Region, loc: Location, end: Destination) -> RoadTrace { + pub fn from_structs( + ip: String, + ua: String, + reg: Region, + loc: Location, + end: Destination, + ) -> RoadTrace { RoadTrace { + ip_address: ip, + user_agent: ua, region: reg.id, location: loc.id, destination: end.id, @@ -24,17 +33,16 @@ impl RoadTrace { } pub fn from_structs_with_error( + ip: String, + ua: String, reg: Region, loc: Location, end: Destination, err: String, ) -> RoadTrace { - RoadTrace { - region: reg.id, - location: loc.id, - destination: end.id, - error: Some(err), - } + let mut trace = Self::from_structs(ip, ua, reg, loc, end); + trace.error = Some(err); + return trace; } } @@ -47,7 +55,7 @@ pub struct RoadMetrics { pub recent_errors: VecDeque, } -const MAX_TRACE_COUNT: usize = 10; +const MAX_TRACE_COUNT: usize = 32; impl RoadMetrics { pub fn new() -> RoadMetrics { @@ -67,26 +75,35 @@ impl RoadMetrics { } } - pub fn add_success_request(&mut self, reg: Region, loc: Location, end: Destination) { + pub fn add_success_request( + &mut self, + ip: String, + ua: String, + reg: Region, + loc: Location, + end: Destination, + ) { self.requests_count += 1; self.recent_successes - .push_back(RoadTrace::from_structs(reg, loc, end)); + .push_back(RoadTrace::from_structs(ip, ua, reg, loc, end)); if self.recent_successes.len() > MAX_TRACE_COUNT { self.recent_successes.pop_front(); } } - pub fn add_faliure_request( + pub fn add_failure_request( &mut self, + ip: String, + ua: String, reg: Region, loc: Location, end: Destination, - err: String, // For some reason error is rarely clonable, so we use preformatted message + err: String, // For some reason error is rarely cloneable, so we use preformatted message ) { self.requests_count += 1; self.failures_count += 1; self.recent_errors - .push_back(RoadTrace::from_structs_with_error(reg, loc, end, err)); + .push_back(RoadTrace::from_structs_with_error(ip, ua, reg, loc, end, err)); if self.recent_errors.len() > MAX_TRACE_COUNT { self.recent_errors.pop_front(); } diff --git a/src/proxies/mod.rs b/src/proxies/mod.rs index c62bfe0..027faac 100644 --- a/src/proxies/mod.rs +++ b/src/proxies/mod.rs @@ -1,7 +1,9 @@ -use http::Method; -use poem::http::{HeaderMap, Uri}; +use actix_web::http::header::{ContentType, HeaderMap}; +use actix_web::http::{Method, StatusCode, Uri}; use regex::Regex; use wildmatch::WildMatch; +use actix_web::{error, HttpResponse}; +use derive_more::{Display}; use crate::warden::WardenInstance; @@ -10,12 +12,52 @@ use self::{ metrics::RoadMetrics, }; -pub mod browser; pub mod config; pub mod loader; pub mod metrics; pub mod responder; pub mod route; +pub mod server; + +#[derive(Debug, Display)] +pub enum ProxyError { + #[display(fmt = "Remote gateway issue")] + BadGateway, + + #[display(fmt = "No configured able to process this request")] + NoGateway, + + #[display(fmt = "Not found")] + NotFound, + + #[display(fmt = "Only accepts method GET")] + MethodGetOnly, + + #[display(fmt = "Invalid request path")] + InvalidRequestPath, + + #[display(fmt = "Upstream does not support protocol you used")] + NotImplemented, +} + +impl error::ResponseError for ProxyError { + fn status_code(&self) -> StatusCode { + match *self { + ProxyError::BadGateway => StatusCode::BAD_GATEWAY, + ProxyError::NoGateway => StatusCode::NOT_FOUND, + ProxyError::NotFound => StatusCode::NOT_FOUND, + ProxyError::MethodGetOnly => StatusCode::METHOD_NOT_ALLOWED, + ProxyError::InvalidRequestPath => StatusCode::BAD_REQUEST, + ProxyError::NotImplemented => StatusCode::NOT_IMPLEMENTED, + } + } + + fn error_response(&self) -> HttpResponse { + HttpResponse::build(self.status_code()) + .insert_header(ContentType::html()) + .body(self.to_string()) + } +} #[derive(Debug, Clone)] pub struct RoadInstance { @@ -38,7 +80,7 @@ impl RoadInstance { pub fn filter( &self, uri: &Uri, - method: Method, + method: &Method, headers: &HeaderMap, ) -> Option<(&Region, &Location)> { self.regions.iter().find_map(|region| { diff --git a/src/proxies/responder.rs b/src/proxies/responder.rs index 5322ab4..3213695 100644 --- a/src/proxies/responder.rs +++ b/src/proxies/responder.rs @@ -1,117 +1,51 @@ -use futures_util::{SinkExt, StreamExt}; -use http::{header, request::Builder, HeaderMap, Method, StatusCode, Uri}; -use lazy_static::lazy_static; -use poem::{ - web::{websocket::WebSocket, StaticFileRequest}, - Body, Error, FromRequest, IntoResponse, Request, Response, -}; use std::{ ffi::OsStr, path::{Path, PathBuf}, - sync::Arc, }; -use tokio::sync::RwLock; -use tokio_tungstenite::connect_async; - -use super::browser::{DirectoryTemplate, FileRef}; - -lazy_static! { - pub static ref CLIENT: reqwest::Client = reqwest::Client::new(); -} - -pub async fn repond_websocket(req: Builder, ws: WebSocket) -> Response { - ws.on_upgrade(move |socket| async move { - let (mut clientsink, mut clientstream) = socket.split(); - - // Start connection to server - let (serversocket, _) = connect_async(req.body(()).unwrap()).await.unwrap(); - let (mut serversink, mut serverstream) = serversocket.split(); - - let client_live = Arc::new(RwLock::new(true)); - let server_live = client_live.clone(); - - tokio::spawn(async move { - while let Some(Ok(msg)) = clientstream.next().await { - if (serversink.send(msg.into()).await).is_err() { - break; - }; - if !*client_live.read().await { - break; - }; - } - - *client_live.write().await = false; - }); - - // Relay server messages to the client - tokio::spawn(async move { - while let Some(Ok(msg)) = serverstream.next().await { - if (clientsink.send(msg.into()).await).is_err() { - break; - }; - if !*server_live.read().await { - break; - }; - } - - *server_live.write().await = false; - }); - }) - .into_response() -} +use actix_files::{NamedFile}; +use actix_proxy::IntoHttpResponse; +use actix_web::{HttpRequest, HttpResponse, web}; +use actix_web::http::Method; +use awc::Client; +use tracing::log::warn; +use crate::proxies::ProxyError; pub async fn respond_hypertext( uri: String, - ori: &Uri, - req: &Request, - method: Method, - body: Body, - headers: &HeaderMap, -) -> Result { - let ip = req.remote_addr().to_string(); + req: HttpRequest, + client: web::Data, +) -> Result { + let ip = req.peer_addr().unwrap().ip().to_string(); let proto = req.uri().scheme_str().unwrap(); let host = req.uri().host().unwrap(); - let mut headers = headers.clone(); - headers.insert("Server", "RoadSign".parse().unwrap()); - headers.insert("X-Forward-For", ip.parse().unwrap()); - headers.insert("X-Forwarded-Proto", proto.parse().unwrap()); - headers.insert("X-Forwarded-Host", host.parse().unwrap()); - headers.insert("X-Real-IP", ip.parse().unwrap()); + let mut headers = req.headers().clone(); + headers.insert("Server".parse().unwrap(), "RoadSign".parse().unwrap()); + headers.insert("X-Forward-For".parse().unwrap(), ip.parse().unwrap()); + headers.insert("X-Forwarded-Proto".parse().unwrap(), proto.parse().unwrap()); + headers.insert("X-Forwarded-Host".parse().unwrap(), host.parse().unwrap()); + headers.insert("X-Real-IP".parse().unwrap(), ip.parse().unwrap()); headers.insert( - "Forwarded", + "Forwarded".parse().unwrap(), format!("by={};for={};host={};proto={}", ip, ip, host, proto) .parse() .unwrap(), ); - let res = CLIENT - .request(method, uri + ori.path() + ori.query().unwrap_or("")) - .headers(headers.clone()) - .body(body.into_bytes().await.unwrap()) - .send() - .await; + let res = client.get(uri).send().await; - match res { + return match res { Ok(result) => { - let mut res = Response::default(); - res.extensions().clone_from(&result.extensions()); - result.headers().iter().for_each(|(key, val)| { - res.headers_mut().insert(key, val.to_owned()); - }); - res.headers_mut() - .insert("Server", "RoadSign".parse().unwrap()); - res.set_status(result.status()); - res.set_version(result.version()); - res.set_body(result.bytes().await.unwrap()); + let mut res = result.into_http_response(); + res.headers_mut().insert("Server".parse().unwrap(), "RoadSign".parse().unwrap()); Ok(res) } - Err(error) => Err(Error::from_string( - error.to_string(), - error.status().unwrap_or(StatusCode::BAD_GATEWAY), - )), - } + Err(error) => { + warn!("Proxy got a upstream issue... {:?}", error); + Err(ProxyError::BadGateway) + } + }; } pub struct StaticResponderConfig { @@ -126,14 +60,10 @@ pub struct StaticResponderConfig { pub async fn respond_static( cfg: StaticResponderConfig, - method: Method, - req: &Request, -) -> Result { - if method != Method::GET { - return Err(Error::from_string( - "This destination only support GET request.", - StatusCode::METHOD_NOT_ALLOWED, - )); + req: HttpRequest, +) -> Result { + if req.method() != Method::GET { + return Err(ProxyError::MethodGetOnly); } let path = req @@ -142,9 +72,12 @@ pub async fn respond_static( .trim_start_matches('/') .trim_end_matches('/'); - let path = percent_encoding::percent_decode_str(path) - .decode_utf8() - .map_err(|_| Error::from_status(StatusCode::NOT_FOUND))?; + let path = match percent_encoding::percent_decode_str(path).decode_utf8() { + Ok(val) => val, + Err(_) => { + return Err(ProxyError::NotFound); + } + }; let base_path = cfg.uri.parse::().unwrap(); let mut file_path = base_path.clone(); @@ -159,7 +92,7 @@ pub async fn respond_static( } if !file_path.starts_with(cfg.uri) { - return Err(Error::from_status(StatusCode::FORBIDDEN)); + return Err(ProxyError::InvalidRequestPath); } if !file_path.exists() { @@ -172,87 +105,30 @@ pub async fn respond_static( file_path.pop(); file_path.push((file_name + &suffix).as_str()); if file_path.is_file() { - return Ok(StaticFileRequest::from_request_without_body(req) - .await? - .create_response(&file_path, cfg.utf8)? - .into_response()); + return Ok(NamedFile::open(file_path).unwrap().into_response(&req)); } } if let Some(file) = cfg.fallback { let fallback_path = base_path.join(file); if fallback_path.is_file() { - return Ok(StaticFileRequest::from_request_without_body(req) - .await? - .create_response(&fallback_path, cfg.utf8)? - .into_response()); + return Ok(NamedFile::open(fallback_path).unwrap().into_response(&req)); } } - return Err(Error::from_status(StatusCode::NOT_FOUND)); + + return Err(ProxyError::NotFound); } - if file_path.is_file() { - Ok(StaticFileRequest::from_request_without_body(req) - .await? - .create_response(&file_path, cfg.utf8)? - .into_response()) + return if file_path.is_file() { + Ok(NamedFile::open(file_path).unwrap().into_response(&req)) } else { - if cfg.with_slash - && !req.original_uri().path().ends_with('/') - && (cfg.index.is_some() || cfg.browse) - { - let redirect_to = format!("{}/", req.original_uri().path()); - return Ok(Response::builder() - .status(StatusCode::FOUND) - .header(header::LOCATION, redirect_to) - .finish()); - } - if let Some(index_file) = &cfg.index { let index_path = file_path.join(index_file); if index_path.is_file() { - return Ok(StaticFileRequest::from_request_without_body(req) - .await? - .create_response(&index_path, cfg.utf8)? - .into_response()); + return Ok(NamedFile::open(index_path).unwrap().into_response(&req)); } } - if cfg.browse { - let read_dir = file_path - .read_dir() - .map_err(|_| Error::from_status(StatusCode::FORBIDDEN))?; - let mut template = DirectoryTemplate { - path: &path, - files: Vec::new(), - }; - - for res in read_dir { - let entry = res.map_err(|_| Error::from_status(StatusCode::FORBIDDEN))?; - - if let Some(filename) = entry.file_name().to_str() { - let mut base_url = req.original_uri().path().to_string(); - if !base_url.ends_with('/') { - base_url.push('/'); - } - let filename_url = percent_encoding::percent_encode( - filename.as_bytes(), - percent_encoding::NON_ALPHANUMERIC, - ); - template.files.push(FileRef { - url: format!("{base_url}{filename_url}"), - filename: filename.to_string(), - is_dir: entry.path().is_dir(), - }); - } - } - - let html = template.render(); - Ok(Response::builder() - .header(header::CONTENT_TYPE, mime::TEXT_HTML_UTF_8.as_ref()) - .body(Body::from_string(html))) - } else { - Err(Error::from_status(StatusCode::NOT_FOUND)) - } - } + return Err(ProxyError::NotFound); + }; } diff --git a/src/proxies/route.rs b/src/proxies/route.rs index ec86e45..3e37b5f 100644 --- a/src/proxies/route.rs +++ b/src/proxies/route.rs @@ -1,10 +1,6 @@ -use http::Method; -use poem::{ - handler, - http::{HeaderMap, StatusCode, Uri}, - web::websocket::WebSocket, - Body, Error, FromRequest, IntoResponse, Request, Response, Result, -}; +use actix_web::{HttpRequest, HttpResponse, ResponseError, web}; +use actix_web::http::header; +use awc::Client; use rand::seq::SliceRandom; use crate::{ @@ -14,23 +10,14 @@ use crate::{ }, ROAD, }; +use crate::proxies::ProxyError; -#[handler] -pub async fn handle( - req: &Request, - uri: &Uri, - headers: &HeaderMap, - method: Method, - body: Body, -) -> Result { +pub async fn handle(req: HttpRequest, client: web::Data) -> HttpResponse { let readable_app = ROAD.lock().await; - let (region, location) = match readable_app.filter(uri, method.clone(), headers) { + let (region, location) = match readable_app.filter(req.uri(), req.method(), req.headers()) { Some(val) => val, None => { - return Err(Error::from_string( - "There are no region be able to respone this request.", - StatusCode::NOT_FOUND, - )) + return ProxyError::NoGateway.error_response(); } }; @@ -41,58 +28,26 @@ pub async fn handle( async fn forward( end: &Destination, - req: &Request, - ori: &Uri, - headers: &HeaderMap, - method: Method, - body: Body, - ) -> Result { - // Handle websocket - if let Ok(ws) = WebSocket::from_request_without_body(req).await { - // Get uri - let Ok(uri) = end.get_websocket_uri() else { - return Err(Error::from_string( - "This destination was not support websockets.", - StatusCode::NOT_IMPLEMENTED, - )); - }; - - // Build request - let mut ws_req = http::Request::builder().uri(&uri); - for (key, value) in headers.iter() { - ws_req = ws_req.header(key, value); - } - - // Start the websocket connection - return Ok(responder::repond_websocket(ws_req, ws).await); - } - + req: HttpRequest, + client: web::Data, + ) -> Result { // Handle normal web request match end.get_type() { DestinationType::Hypertext => { let Ok(uri) = end.get_hypertext_uri() else { - return Err(Error::from_string( - "This destination was not support web requests.", - StatusCode::NOT_IMPLEMENTED, - )); + return Err(ProxyError::NotImplemented); }; - responder::respond_hypertext(uri, ori, req, method, body, headers).await + responder::respond_hypertext(uri, req, client).await } DestinationType::StaticFiles => { let Ok(cfg) = end.get_static_config() else { - return Err(Error::from_string( - "This destination was not support static files.", - StatusCode::NOT_IMPLEMENTED, - )); + return Err(ProxyError::NotImplemented); }; - responder::respond_static(cfg, method, req).await + responder::respond_static(cfg, req).await } - _ => Err(Error::from_string( - "Unsupported destination protocol.", - StatusCode::NOT_IMPLEMENTED, - )), + _ => Err(ProxyError::NotImplemented) } } @@ -100,23 +55,32 @@ pub async fn handle( let loc = location.clone(); let end = destination.clone(); - match forward(&end, req, uri, headers, method, body).await { + let ip = match req.peer_addr() { + None => "unknown".to_string(), + Some(val) => val.ip().to_string() + }; + let ua = match req.headers().get(header::USER_AGENT) { + None => "unknown".to_string(), + Some(val) => val.to_str().unwrap().to_string(), + }; + + match forward(&end, req, client).await { Ok(resp) => { tokio::spawn(async move { let writable_app = &mut ROAD.lock().await; - writable_app.metrics.add_success_request(reg, loc, end); + writable_app.metrics.add_success_request(ip, ua, reg, loc, end); }); - Ok(resp) + resp } - Err(err) => { - let message = format!("{:}", err); + Err(resp) => { + let message = resp.to_string(); tokio::spawn(async move { let writable_app = &mut ROAD.lock().await; writable_app .metrics - .add_faliure_request(reg, loc, end, message); + .add_failure_request(ip, ua, reg, loc, end, message); }); - Err(err) + resp.error_response() } } } diff --git a/src/proxies/server.rs b/src/proxies/server.rs new file mode 100644 index 0000000..fdab9a9 --- /dev/null +++ b/src/proxies/server.rs @@ -0,0 +1,39 @@ +use std::error; +use actix_web::{App, HttpServer, web}; +use actix_web::dev::Server; +use actix_web::middleware::Logger; +use awc::Client; +use crate::config::CFG; +use crate::proxies::route; +use crate::server::ServerBindConfig; +use crate::tls::{load_certificates, use_rustls}; + +pub async fn build_proxies() -> Result, Box> { + load_certificates().await?; + + let cfg = CFG + .read() + .await + .get::>("proxies.bind")?; + + let mut tasks = Vec::new(); + for item in cfg { + tasks.push(build_single_proxy(item)?); + } + + Ok(tasks) +} + +pub fn build_single_proxy(cfg: ServerBindConfig) -> Result> { + let server = HttpServer::new(|| { + App::new() + .wrap(Logger::default()) + .app_data(web::Data::new(Client::default())) + .route("/", web::to(route::handle)) + }); + if cfg.tls { + Ok(server.bind_rustls_0_22(cfg.addr, use_rustls()?)?.run()) + } else { + Ok(server.bind(cfg.addr)?.run()) + } +} \ No newline at end of file diff --git a/src/server.rs b/src/server.rs new file mode 100644 index 0000000..59c7182 --- /dev/null +++ b/src/server.rs @@ -0,0 +1,7 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize)] +pub struct ServerBindConfig { + pub addr: String, + pub tls: bool, +} \ No newline at end of file diff --git a/src/sideload/mod.rs b/src/sideload/mod.rs index e69231e..ac450b2 100644 --- a/src/sideload/mod.rs +++ b/src/sideload/mod.rs @@ -1,19 +1,15 @@ -use poem_openapi::OpenApi; +use actix_web::{Scope, web}; +use crate::sideload::overview::get_overview; +use crate::sideload::regions::list_region; -pub mod overview; -pub mod regions; +mod overview; +mod regions; +pub mod server; -pub struct SideloadApi; +static ROOT: &str = ""; -#[OpenApi] -impl SideloadApi { - #[oai(path = "/", method = "get")] - async fn index(&self) -> overview::OverviewResponse { - overview::index().await - } - - #[oai(path = "/regions", method = "get")] - async fn regions_index(&self) -> regions::RegionResponse { - regions::index().await - } -} +pub fn service() -> Scope { + web::scope("/cgi") + .route(ROOT, web::get().to(get_overview)) + .route("/regions", web::get().to(list_region)) +} \ No newline at end of file diff --git a/src/sideload/overview.rs b/src/sideload/overview.rs index 8c3ac6b..ce66a7d 100644 --- a/src/sideload/overview.rs +++ b/src/sideload/overview.rs @@ -1,46 +1,23 @@ -use poem_openapi::{payload::Json, ApiResponse, Object}; +use actix_web::web; +use serde::Serialize; +use crate::proxies::config::{Destination, Location}; +use crate::proxies::metrics::RoadTrace; +use crate::ROAD; -use crate::{ - proxies::{ - config::{Destination, Location}, - metrics::RoadTrace, - }, - ROAD, -}; - -#[derive(ApiResponse)] -pub enum OverviewResponse { - /// Return the overview data. - #[oai(status = 200)] - Ok(Json), -} - -#[derive(Debug, Object, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Serialize)] pub struct OverviewData { - /// Loaded regions count - #[oai(read_only)] regions: usize, - /// Loaded locations count - #[oai(read_only)] locations: usize, - /// Loaded destnations count - #[oai(read_only)] destinations: usize, - /// Recent requests count requests_count: u64, - /// Recent requests success count - faliures_count: u64, - /// Recent requests falied count + failures_count: u64, successes_count: u64, - /// Recent requests success rate success_rate: f64, - /// Recent successes recent_successes: Vec, - /// Recent errors recent_errors: Vec, } -pub async fn index() -> OverviewResponse { +pub async fn get_overview() -> web::Json { let locked_app = ROAD.lock().await; let regions = locked_app.regions.clone(); let locations = regions @@ -51,13 +28,13 @@ pub async fn index() -> OverviewResponse { .iter() .flat_map(|item| item.destinations.clone()) .collect::>(); - OverviewResponse::Ok(Json(OverviewData { + web::Json(OverviewData { regions: regions.len(), locations: locations.len(), destinations: destinations.len(), requests_count: locked_app.metrics.requests_count, successes_count: locked_app.metrics.requests_count - locked_app.metrics.failures_count, - faliures_count: locked_app.metrics.failures_count, + failures_count: locked_app.metrics.failures_count, success_rate: locked_app.metrics.get_success_rate(), recent_successes: locked_app .metrics @@ -71,5 +48,5 @@ pub async fn index() -> OverviewResponse { .clone() .into_iter() .collect::>(), - })) -} + }) +} \ No newline at end of file diff --git a/src/sideload/regions.rs b/src/sideload/regions.rs index 827d603..d3719f1 100644 --- a/src/sideload/regions.rs +++ b/src/sideload/regions.rs @@ -1,25 +1,9 @@ -use poem_openapi::{payload::Json, ApiResponse}; +use actix_web::web; +use crate::proxies::config::Region; +use crate::ROAD; -use crate::{proxies::config::Region, ROAD}; - -#[derive(ApiResponse)] -pub enum RegionResponse { - /// Return the region data. - #[oai(status = 200)] - Ok(Json), - /// Return the list of region data. - #[oai(status = 200)] - OkMany(Json>), - /// Return the region data after created. - #[oai(status = 201)] - Created(Json), - /// Return was not found. - #[oai(status = 404)] - NotFound, -} - -pub async fn index() -> RegionResponse { +pub async fn list_region() -> web::Json> { let locked_app = ROAD.lock().await; - RegionResponse::OkMany(Json(locked_app.regions.clone())) -} + web::Json(locked_app.regions.clone()) +} \ No newline at end of file diff --git a/src/sideload/server.rs b/src/sideload/server.rs new file mode 100644 index 0000000..9254b08 --- /dev/null +++ b/src/sideload/server.rs @@ -0,0 +1,35 @@ +use std::error; +use actix_web::dev::Server; +use actix_web::{App, HttpServer}; +use actix_web_httpauth::extractors::AuthenticationError; +use actix_web_httpauth::headers::www_authenticate::basic::Basic; +use actix_web_httpauth::middleware::HttpAuthentication; +use crate::sideload; + +pub async fn build_sideload() -> Result> { + Ok( + HttpServer::new(|| { + App::new() + .wrap(HttpAuthentication::basic(|req, credentials| async move { + let password = match crate::config::CFG + .read() + .await + .get_string("secret") { + Ok(val) => val, + Err(_) => return Err((AuthenticationError::new(Basic::new()).into(), req)) + }; + if credentials.password().unwrap_or("") != password { + Err((AuthenticationError::new(Basic::new()).into(), req)) + } else { + Ok(req) + } + })) + .service(sideload::service()) + }).bind( + crate::config::CFG + .read() + .await + .get_string("sideload.bind_addr")? + )?.workers(1).run() + ) +} \ No newline at end of file diff --git a/src/tls.rs b/src/tls.rs new file mode 100644 index 0000000..849481e --- /dev/null +++ b/src/tls.rs @@ -0,0 +1,76 @@ +use std::fs::File; +use std::{error}; +use std::io::BufReader; +use std::sync::Arc; +use config::ConfigError; +use lazy_static::lazy_static; +use rustls::crypto::ring::sign::RsaSigningKey; +use rustls::server::{ClientHello, ResolvesServerCert}; +use rustls::sign::CertifiedKey; +use serde::{Deserialize, Serialize}; +use std::sync::Mutex; +use wildmatch::WildMatch; + +lazy_static! { + static ref CERTS: Mutex> = Mutex::new(Vec::new()); +} + +#[derive(Debug)] +struct ProxyCertResolver; + +impl ResolvesServerCert for ProxyCertResolver { + fn resolve(&self, handshake: ClientHello) -> Option> { + let domain = handshake.server_name()?; + + let certs = CERTS.lock().unwrap(); + for cert in certs.iter() { + if WildMatch::new(cert.domain.as_str()).matches(domain) { + return match cert.clone().load() { + Ok(val) => Some(val), + Err(_) => None + }; + } + } + None + } +} + +#[derive(Clone, Serialize, Deserialize)] +struct CertificateConfig { + pub domain: String, + pub certs: String, + pub key: String, +} + +impl CertificateConfig { + pub fn load(self) -> Result, Box> { + let certs = + rustls_pemfile::certs(&mut BufReader::new(&mut File::open(self.certs)?)) + .collect::, _>>()?; + let key = + rustls_pemfile::private_key(&mut BufReader::new(&mut File::open(self.key)?))? + .unwrap(); + let sign = RsaSigningKey::new(&key)?; + + Ok(Arc::new(CertifiedKey::new(certs, Arc::new(sign)))) + } +} + +pub async fn load_certificates() -> Result<(), ConfigError> { + let certs = crate::config::CFG + .read() + .await + .get::>("certificates")?; + + CERTS.lock().unwrap().clone_from(&certs); + + Ok(()) +} + +pub fn use_rustls() -> Result { + Ok( + rustls::ServerConfig::builder() + .with_no_client_auth() + .with_cert_resolver(Arc::new(ProxyCertResolver)) + ) +} \ No newline at end of file diff --git a/src/warden/mod.rs b/src/warden/mod.rs index e7265b4..e8d6224 100644 --- a/src/warden/mod.rs +++ b/src/warden/mod.rs @@ -2,10 +2,9 @@ pub mod runner; use std::collections::HashMap; -use futures_util::lock::Mutex; use lazy_static::lazy_static; -use poem_openapi::Object; use serde::{Deserialize, Serialize}; +use tokio::sync::Mutex; use tracing::{debug, warn}; use crate::proxies::config::Region; @@ -63,7 +62,7 @@ impl Default for WardenInstance { } } -#[derive(Debug, Object, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct Application { pub id: String, pub exe: String, diff --git a/src/warden/runner.rs b/src/warden/runner.rs index 080388f..215071a 100644 --- a/src/warden/runner.rs +++ b/src/warden/runner.rs @@ -1,12 +1,12 @@ use std::{borrow::BorrowMut, collections::HashMap, io}; use super::Application; -use futures_util::lock::Mutex; use lazy_static::lazy_static; use tokio::{ io::{AsyncBufReadExt, BufReader}, process::{Child, Command}, }; +use tokio::sync::Mutex; lazy_static! { static ref STDOUT: Mutex> = Mutex::new(HashMap::new()); diff --git a/test/data/warden/dist/client/_astro/Media.7FWSwaPB.js b/test/data/warden/dist/client/_astro/Media.7FWSwaPB.js new file mode 100644 index 0000000..da0fd64 --- /dev/null +++ b/test/data/warden/dist/client/_astro/Media.7FWSwaPB.js @@ -0,0 +1,179 @@ +import{r as Z}from"./index.LFf77hJu.js";var me=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ve(F){return F&&F.__esModule&&Object.prototype.hasOwnProperty.call(F,"default")?F.default:F}var ye={exports:{}},de={};/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Le=Z,Ce=Symbol.for("react.element"),Be=Symbol.for("react.fragment"),Fe=Object.prototype.hasOwnProperty,He=Le.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Ae={key:!0,ref:!0,__self:!0,__source:!0};function be(F,A,o){var h,s={},e=null,t=null;o!==void 0&&(e=""+o),A.key!==void 0&&(e=""+A.key),A.ref!==void 0&&(t=A.ref);for(h in A)Fe.call(A,h)&&!Ae.hasOwnProperty(h)&&(s[h]=A[h]);if(F&&F.defaultProps)for(h in A=F.defaultProps,A)s[h]===void 0&&(s[h]=A[h]);return{$$typeof:Ce,type:F,key:e,ref:t,props:s,_owner:He.current}}de.Fragment=Be;de.jsx=be;de.jsxs=be;ye.exports=de;var z=ye.exports,we={exports:{}};(function(F,A){(function(o,h){F.exports=h()})(window,function(){return function(o){var h={};function s(e){if(h[e])return h[e].exports;var t=h[e]={i:e,l:!1,exports:{}};return o[e].call(t.exports,t,t.exports,s),t.l=!0,t.exports}return s.m=o,s.c=h,s.d=function(e,t,r){s.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},s.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="/",s(s.s=41)}([function(o,h,s){Object.defineProperty(h,"__esModule",{value:!0});var e=/mobile/i.test(window.navigator.userAgent),t={secondToTime:function(r){var n=Math.floor(r/3600),i=Math.floor((r-3600*n)/60),u=Math.floor(r-3600*n-60*i);return(n>0?[n,i,u]:[i,u]).map(function(a){return a<10?"0"+a:""+a}).join(":")},getElementViewLeft:function(r){var n=r.offsetLeft,i=r.offsetParent,u=document.body.scrollLeft+document.documentElement.scrollLeft;if(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement)for(;i!==null&&i!==r;)n+=i.offsetLeft,i=i.offsetParent;else for(;i!==null;)n+=i.offsetLeft,i=i.offsetParent;return n-u},getElementViewTop:function(r,n){for(var i,u=r.offsetTop,a=r.offsetParent;a!==null;)u+=a.offsetTop,a=a.offsetParent;return i=document.body.scrollTop+document.documentElement.scrollTop,n?u:u-i},isMobile:e,storage:{set:function(r,n){localStorage.setItem(r,n)},get:function(r){return localStorage.getItem(r)}},nameMap:{dragStart:e?"touchstart":"mousedown",dragMove:e?"touchmove":"mousemove",dragEnd:e?"touchend":"mouseup"},randomOrder:function(r){return function(n){for(var i=n.length-1;i>=0;i--){var u=Math.floor(Math.random()*(i+1)),a=n[u];n[u]=n[i],n[i]=a}return n}([].concat(function(n){if(Array.isArray(n)){for(var i=0,u=Array(n.length);i + + `,r+=u(p+l),r+=` + `,r+=u(c.name),r+=` + `,r+=u(c.artist),r+=` + +`}),r}},function(o,h,s){o.exports=s(15)},function(o,h,s){Object.defineProperty(h,"__esModule",{value:!0});var e=b(s(33)),t=b(s(32)),r=b(s(31)),n=b(s(30)),i=b(s(29)),u=b(s(28)),a=b(s(27)),l=b(s(26)),c=b(s(25)),p=b(s(24)),d=b(s(23)),y=b(s(22)),m=b(s(21)),w=b(s(20)),x=b(s(19));function b(f){return f&&f.__esModule?f:{default:f}}var g={play:e.default,pause:t.default,volumeUp:r.default,volumeDown:n.default,volumeOff:i.default,orderRandom:u.default,orderList:a.default,menu:l.default,loopAll:c.default,loopOne:p.default,loopNone:d.default,loading:y.default,right:m.default,skip:w.default,lrc:x.default};h.default=g},function(o,h,s){var e,t=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(r){return typeof r}:function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r};e=function(){return this}();try{e=e||Function("return this")()||(0,eval)("this")}catch{(typeof window>"u"?"undefined":t(window))==="object"&&(e=window)}o.exports=e},function(o,h,s){var e,t,r=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(n){return typeof n}:function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n};(t=typeof(e=function(){if((typeof window>"u"?"undefined":r(window))==="object"&&document.querySelectorAll!==void 0&&window.pageYOffset!==void 0&&history.pushState!==void 0){var n=function(a,l,c,p){return c>p?l:a+(l-a)*((d=c/p)<.5?4*d*d*d:(d-1)*(2*d-2)*(2*d-2)+1);var d},i=function(a,l,c,p){l=l||500;var d=(p=p||window).scrollTop||window.pageYOffset;if(typeof a=="number")var y=parseInt(a);else var y=function(x,b){return x.nodeName==="HTML"?-b:x.getBoundingClientRect().top+b}(a,d);var m=Date.now(),w=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(x){window.setTimeout(x,15)};(function x(){var b=Date.now()-m;p!==window?p.scrollTop=n(d,y,b,l):window.scroll(0,n(d,y,b,l)),b>l?typeof c=="function"&&c(a):w(x)})()},u=function(a){if(!a.defaultPrevented){a.preventDefault(),location.hash!==this.hash&&window.history.pushState(null,null,this.hash);var l=document.getElementById(this.hash.substring(1));if(!l)return;i(l,500,function(c){location.replace("#"+c.id)})}};return document.addEventListener("DOMContentLoaded",function(){for(var a,l=document.querySelectorAll('a[href^="#"]:not([href="#"])'),c=l.length;a=l[--c];)a.addEventListener("click",u,!1)}),i}})=="function"?e.call(h,s,h,o):e)===void 0||(o.exports=t)},function(o,h,s){Object.defineProperty(h,"__esModule",{value:!0});var e=function(){function a(l,c){for(var p=0;p1),p=this.audios.length===0;this.player.template.listOl.innerHTML+=(0,t.default)({theme:this.player.options.theme,audio:l,index:this.audios.length+1}),this.audios=this.audios.concat(l),c&&this.audios.length>1&&this.player.container.classList.add("aplayer-withlist"),this.player.randomOrder=r.default.randomOrder(this.audios.length),this.player.template.listCurs=this.player.container.querySelectorAll(".aplayer-list-cur"),this.player.template.listCurs[this.audios.length-1].style.backgroundColor=l.theme||this.player.options.theme,p&&(this.player.options.order==="random"?this.switch(this.player.randomOrder[0]):this.switch(0))}},{key:"remove",value:function(l){if(this.player.events.trigger("listremove",{index:l}),this.audios[l])if(this.audios.length>1){var c=this.player.container.querySelectorAll(".aplayer-list li");c[l].remove(),this.audios.splice(l,1),this.player.lrc&&this.player.lrc.remove(l),l===this.index&&(this.audios[l]?this.switch(l):this.switch(l-1)),this.index>l&&this.index--;for(var p=l;pi&&!n.player.audio.paused&&(n.player.container.classList.remove("aplayer-loading"),a=!1),i=u)},100)}},{key:"enable",value:function(n){this["enable"+n+"Checker"]=!0,n==="fps"&&this.initfpsChecker()}},{key:"disable",value:function(n){this["enable"+n+"Checker"]=!1}},{key:"destroy",value:function(){var n=this;this.types.forEach(function(i){n["enable"+i+"Checker"]=!1,n[i+"Checker"]&&clearInterval(n[i+"Checker"])})}}]),r}();h.default=t},function(o,h,s){Object.defineProperty(h,"__esModule",{value:!0});var e=function(){function u(a,l){for(var c=0;c1?a.player.options.loop==="one"?(a.player.options.loop="none",a.player.template.loop.innerHTML=r.default.loopNone):a.player.options.loop==="none"?(a.player.options.loop="all",a.player.template.loop.innerHTML=r.default.loopAll):a.player.options.loop==="all"&&(a.player.options.loop="one",a.player.template.loop.innerHTML=r.default.loopOne):a.player.options.loop==="one"||a.player.options.loop==="all"?(a.player.options.loop="none",a.player.template.loop.innerHTML=r.default.loopNone):a.player.options.loop==="none"&&(a.player.options.loop="all",a.player.template.loop.innerHTML=r.default.loopAll)})}},{key:"initMenuButton",value:function(){var a=this;this.player.template.menu.addEventListener("click",function(){a.player.list.toggle()})}},{key:"initMiniSwitcher",value:function(){var a=this;this.player.template.miniSwitcher.addEventListener("click",function(){a.player.setMode(a.player.mode==="mini"?"normal":"mini")})}},{key:"initSkipButton",value:function(){var a=this;this.player.template.skipBackButton.addEventListener("click",function(){a.player.skipBack()}),this.player.template.skipForwardButton.addEventListener("click",function(){a.player.skipForward()}),this.player.template.skipPlayButton.addEventListener("click",function(){a.player.toggle()})}},{key:"initLrcButton",value:function(){var a=this;this.player.template.lrcButton.addEventListener("click",function(){a.player.template.lrcButton.classList.contains("aplayer-icon-lrc-inactivity")?(a.player.template.lrcButton.classList.remove("aplayer-icon-lrc-inactivity"),a.player.lrc&&a.player.lrc.show()):(a.player.template.lrcButton.classList.add("aplayer-icon-lrc-inactivity"),a.player.lrc&&a.player.lrc.hide())})}}]),u}();h.default=i},function(o,h,s){var e=s(2);o.exports=function(t){t=t||{};var r="",n=e.$each,i=t.lyrics,u=(t.$value,t.$index,e.$escape);return n(i,function(a,l){r+=` + +`}),r}},function(o,h,s){Object.defineProperty(h,"__esModule",{value:!0});var e,t=function(){function u(a,l){for(var c=0;c0&&arguments[0]!==void 0?arguments[0]:this.player.audio.currentTime;if(this.index>this.current.length-1||a=this.current[this.index+1][0])for(var l=0;l=this.current[l][0]&&(!this.current[l+1]||a=200&&c.status<300||c.status===304?l.parsed[a]=l.parse(c.responseText):(l.player.notice("LRC file request fails: status "+c.status),l.parsed[a]=[["00:00","Not available"]]),l.container.innerHTML=(0,n.default)({lyrics:l.parsed[a]}),l.update(0),l.current=l.parsed[a])};var p=this.player.list.audios[a].lrc;c.open("get",p,!0),c.send(null)}else this.player.list.audios[a].lrc?this.parsed[a]=this.parse(this.player.list.audios[a].lrc):this.parsed[a]=[["00:00","Not available"]];this.container.innerHTML=(0,n.default)({lyrics:this.parsed[a]}),this.update(0),this.current=this.parsed[a]}},{key:"parse",value:function(a){if(a){for(var l=(a=a.replace(/([^\]^\n])\[/g,function(f,v){return v+` +[`})).split(` +`),c=[],p=l.length,d=0;d/g,"").replace(/^\s+|\s+$/g,"");if(y)for(var w=y.length,x=0;x]/;r.$escape=function(i){return function(u){var a=""+u,l=n.exec(a);if(!l)return u;var c="",p=void 0,d=void 0,y=void 0;for(p=l.index,d=0;p + + `,l(s(1)(c({theme:n.theme,audio:n.audio,index:1}))),r+=` + + +
+
+
`,r+=a.play,r+=`
+
+ +
+
+
+
+
+
+`):(r+=` +
+
+
`,r+=a.play,r+=`
+
+
+
+ No audio + +
+
+
+
+
+
+
+
+
+ + `,r+=a.loading,r+=` + +
+
+
+
+ + 00:00 / 00:00 + + + `,r+=a.skip,r+=` + + + `,r+=a.play,r+=` + + + `,r+=a.skip,r+=` + +
+ +
+
+
+
+
+
+ + + + +
+
+
+
+
+
+
+ + `,l(s(1)(c({theme:n.theme,audio:n.audio,index:1}))),r+=` + +
+`),r}},function(o,h,s){Object.defineProperty(h,"__esModule",{value:!0});var e=function(){function u(a,l){for(var c=0;c'},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h){o.exports=''},function(o,h,s){var e,t,r=o.exports={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function u(x){if(e===setTimeout)return setTimeout(x,0);if((e===n||!e)&&setTimeout)return e=setTimeout,setTimeout(x,0);try{return e(x,0)}catch{try{return e.call(null,x,0)}catch{return e.call(this,x,0)}}}(function(){try{e=typeof setTimeout=="function"?setTimeout:n}catch{e=n}try{t=typeof clearTimeout=="function"?clearTimeout:i}catch{t=i}})();var a,l=[],c=!1,p=-1;function d(){c&&a&&(c=!1,a.length?l=a.concat(l):p=-1,l.length&&y())}function y(){if(!c){var x=u(d);c=!0;for(var b=l.length;b;){for(a=l,l=[];++p1)for(var g=1;g"u"?e===void 0?void 0:e:self)}).call(this,s(4),s(34))},function(o,h,s){var e=Function.prototype.apply;function t(r,n){this._id=r,this._clearFn=n}h.setTimeout=function(){return new t(e.call(setTimeout,window,arguments),clearTimeout)},h.setInterval=function(){return new t(e.call(setInterval,window,arguments),clearInterval)},h.clearTimeout=h.clearInterval=function(r){r&&r.close()},t.prototype.unref=t.prototype.ref=function(){},t.prototype.close=function(){this._clearFn.call(window,this._id)},h.enroll=function(r,n){clearTimeout(r._idleTimeoutId),r._idleTimeout=n},h.unenroll=function(r){clearTimeout(r._idleTimeoutId),r._idleTimeout=-1},h._unrefActive=h.active=function(r){clearTimeout(r._idleTimeoutId);var n=r._idleTimeout;n>=0&&(r._idleTimeoutId=setTimeout(function(){r._onTimeout&&r._onTimeout()},n))},s(35),h.setImmediate=setImmediate,h.clearImmediate=clearImmediate},function(o,h,s){(function(e){var t=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(d){return typeof d}:function(d){return d&&typeof Symbol=="function"&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},r=setTimeout;function n(){}function i(d){if(!(this instanceof i))throw new TypeError("Promises must be constructed via new");if(typeof d!="function")throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],p(d,this)}function u(d,y){for(;d._state===3;)d=d._value;d._state!==0?(d._handled=!0,i._immediateFn(function(){var m=d._state===1?y.onFulfilled:y.onRejected;if(m!==null){var w;try{w=m(d._value)}catch(x){return void l(y.promise,x)}a(y.promise,w)}else(d._state===1?a:l)(y.promise,d._value)})):d._deferreds.push(y)}function a(d,y){try{if(y===d)throw new TypeError("A promise cannot be resolved with itself.");if(y&&((y===void 0?"undefined":t(y))==="object"||typeof y=="function")){var m=y.then;if(y instanceof i)return d._state=3,d._value=y,void c(d);if(typeof m=="function")return void p((w=m,x=y,function(){w.apply(x,arguments)}),d)}d._state=1,d._value=y,c(d)}catch(b){l(d,b)}var w,x}function l(d,y){d._state=2,d._value=y,c(d)}function c(d){d._state===2&&d._deferreds.length===0&&i._immediateFn(function(){d._handled||i._unhandledRejectionFn(d._value)});for(var y=0,m=d._deferreds.length;y1&&this.container.classList.add("aplayer-withlist"),r.default.isMobile&&this.container.classList.add("aplayer-mobile"),this.arrow=this.container.offsetWidth<=300,this.arrow&&this.container.classList.add("aplayer-arrow"),this.container=this.options.container,this.options.lrcType===2||this.options.lrcType===!0)for(var v=this.container.getElementsByClassName("aplayer-lrc-content"),k=0;k1?(f.notice("An audio error has occurred, player will skip forward in 2 seconds."),v=setTimeout(function(){f.skipForward(),f.paused||f.play()},2e3)):f.list.audios.length===1&&f.notice("An audio error has occurred.")}),this.events.on("listswitch",function(){v&&clearTimeout(v)}),this.on("ended",function(){f.options.loop==="none"?f.options.order==="list"?f.list.index0&&arguments[0]!==void 0?arguments[0]:this.list.audios[this.list.index].theme||this.options.theme,v=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.list.index;(!(arguments.length>2&&arguments[2]!==void 0)||arguments[2])&&this.list.audios[v]&&(this.list.audios[v].theme=f),this.template.listCurs[v]&&(this.template.listCurs[v].style.backgroundColor=f),v===this.list.index&&(this.template.pic.style.backgroundColor=f,this.template.played.style.background=f,this.template.thumb.style.background=f,this.template.volume.style.background=f)}},{key:"seek",value:function(f){f=Math.max(f,0),f=Math.min(f,this.duration),this.audio.currentTime=f,this.bar.set("played",f/this.duration,"width"),this.template.ptime.innerHTML=r.default.secondToTime(f)}},{key:"setUIPlaying",value:function(){var f=this;if(this.paused&&(this.paused=!1,this.template.button.classList.remove("aplayer-play"),this.template.button.classList.add("aplayer-pause"),this.template.button.innerHTML="",setTimeout(function(){f.template.button.innerHTML=n.default.pause},100),this.template.skipPlayButton.innerHTML=n.default.pause),this.timer.enable("loading"),this.options.mutex)for(var v=0;v=.95?this.template.volumeButton.innerHTML=n.default.volumeUp:this.volume()>0?this.template.volumeButton.innerHTML=n.default.volumeDown:this.template.volumeButton.innerHTML=n.default.volumeOff}},{key:"volume",value:function(f,v){return f=parseFloat(f),isNaN(f)||(f=Math.max(f,0),f=Math.min(f,1),this.bar.set("volume",f,"height"),v||this.storage.set("volume",f),this.audio.volume=f,this.audio.muted&&(this.audio.muted=!1),this.switchVolumeIcon()),this.audio.muted?0:this.audio.volume}},{key:"on",value:function(f,v){this.events.on(f,v)}},{key:"toggle",value:function(){this.template.button.classList.contains("aplayer-play")?this.play():this.template.button.classList.contains("aplayer-pause")&&this.pause()}},{key:"switchAudio",value:function(f){this.list.switch(f)}},{key:"addAudio",value:function(f){this.list.add(f)}},{key:"removeAudio",value:function(f){this.list.remove(f)}},{key:"destroy",value:function(){x.splice(x.indexOf(this),1),this.pause(),this.container.innerHTML="",this.audio.src="",this.timer.destroy(),this.events.trigger("destroy")}},{key:"setMode",value:function(){var f=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"normal";this.mode=f,f==="mini"?this.container.classList.add("aplayer-narrow"):f==="normal"&&this.container.classList.remove("aplayer-narrow")}},{key:"notice",value:function(f){var v=this,k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2e3,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:.8;this.template.notice.innerHTML=f,this.template.notice.style.opacity=T,this.noticeTime&&clearTimeout(this.noticeTime),this.events.trigger("noticeshow",{text:f}),k&&(this.noticeTime=setTimeout(function(){v.template.notice.style.opacity=0,v.events.trigger("noticehide")},k))}},{key:"prevIndex",value:function(){if(!(this.list.audios.length>1))return 0;if(this.options.order==="list")return this.list.index-1<0?this.list.audios.length-1:this.list.index-1;if(this.options.order==="random"){var f=this.randomOrder.indexOf(this.list.index);return f===0?this.randomOrder[this.randomOrder.length-1]:this.randomOrder[f-1]}}},{key:"nextIndex",value:function(){if(!(this.list.audios.length>1))return 0;if(this.options.order==="list")return(this.list.index+1)%this.list.audios.length;if(this.options.order==="random"){var f=this.randomOrder.indexOf(this.list.index);return f===this.randomOrder.length-1?this.randomOrder[0]:this.randomOrder[f+1]}}},{key:"skipBack",value:function(){this.list.switch(this.prevIndex())}},{key:"skipForward",value:function(){this.list.switch(this.nextIndex())}},{key:"duration",get:function(){return isNaN(this.audio.duration)?0:this.audio.duration}}],[{key:"version",get:function(){return"1.10.1"}}]),g}();h.default=b},,function(o,h,s){},function(o,h,s){Object.defineProperty(h,"__esModule",{value:!0}),s(40);var e,t=s(38),r=(e=t)&&e.__esModule?e:{default:e};console.log(` + %c APlayer v1.10.1 af84efb %c http://aplayer.js.org +`,"color: #fadfa3; background: #030307; padding:5px 0;","background: #fadfa3; padding:5px 0;"),h.default=r.default}]).default})})(we);var _e=we.exports;const Re=ve(_e);function ge(F){throw new Error('Could not dynamically require "'+F+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var pe={exports:{}};/*! + * artplayer.js v5.1.1 + * Github: https://github.com/zhw2590582/ArtPlayer + * (c) 2017-2024 Harvey Zack + * Released under the MIT License. + */pe.exports;(function(F,A){(function(o,h,s,e,t){var r=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof me<"u"?me:{},n=typeof r[e]=="function"&&r[e],i=n.cache||{},u=typeof ge=="function"&&ge.bind(F);function a(p,d){if(!i[p]){if(!o[p]){var y=typeof r[e]=="function"&&r[e];if(!d&&y)return y(p,!0);if(n)return n(p,!0);if(u&&typeof p=="string")return u(p);var m=new Error("Cannot find module '"+p+"'");throw m.code="MODULE_NOT_FOUND",m}x.resolve=function(b){var g=o[p][1][b];return g??b},x.cache={};var w=i[p]=new a.Module(p);o[p][0].call(w.exports,x,w,w.exports,this)}return i[p].exports;function x(b){var g=x.resolve(b);return g===!1?{}:a(g)}}a.isParcelRequire=!0,a.Module=function(p){this.id=p,this.bundle=a,this.exports={}},a.modules=o,a.cache=i,a.parent=n,a.register=function(p,d){o[p]=[function(y,m){m.exports=d},{}]},Object.defineProperty(a,"root",{get:function(){return r[e]}}),r[e]=a;for(var l=0;lW.call(this,this)),O.DEBUG){const V=q=>console.log(`[ART.${this.id}] -> ${q}`);V("Version@"+O.version),V("Env@"+O.env),V("Build@"+O.build);for(let q=0;qV("Event@"+le.type))}N.push(this)}static get instances(){return N}static get version(){return"5.1.1"}static get env(){return"production"}static get build(){return"2024-01-11 10:39:44"}static get config(){return y.default}static get utils(){return l}static get scheme(){return p.default}static get Emitter(){return a.default}static get validator(){return i.default}static get kindOf(){return i.default.kindOf}static get html(){return w.default.html}static get option(){return{id:"",container:"#artplayer",url:"",poster:"",type:"",theme:"#f00",volume:.7,isLive:!1,muted:!1,autoplay:!1,autoSize:!1,autoMini:!1,loop:!1,flip:!1,playbackRate:!1,aspectRatio:!1,screenshot:!1,setting:!1,hotkey:!0,pip:!1,mutex:!0,backdrop:!0,fullscreen:!1,fullscreenWeb:!1,subtitleOffset:!1,miniProgressBar:!1,useSSR:!1,playsInline:!0,lock:!1,fastForward:!1,autoPlayback:!1,autoOrientation:!1,airplay:!1,layers:[],contextmenu:[],controls:[],settings:[],quality:[],highlight:[],plugins:[],thumbnails:{url:"",number:60,column:10,width:0,height:0},subtitle:{url:"",type:"",style:{},name:"",escape:!0,encoding:"utf-8",onVttLoad:P=>P},moreVideoAttr:{controls:!1,preload:l.isSafari?"auto":"metadata"},i18n:{},icons:{},cssVar:{},customType:{},lang:navigator.language.toLowerCase()}}get proxy(){return this.events.proxy}get query(){return this.template.query}get video(){return this.template.$video}destroy(P=!0){this.events.destroy(),this.template.destroy(P),N.splice(N.indexOf(this),1),this.isDestroy=!0,this.emit("destroy")}}s.default=O,O.DEBUG=!1,O.CONTEXTMENU=!0,O.NOTICE_TIME=2e3,O.SETTING_WIDTH=250,O.SETTING_ITEM_WIDTH=200,O.SETTING_ITEM_HEIGHT=35,O.RESIZE_TIME=200,O.SCROLL_TIME=200,O.SCROLL_GAP=50,O.AUTO_PLAYBACK_MAX=10,O.AUTO_PLAYBACK_MIN=5,O.AUTO_PLAYBACK_TIMEOUT=3e3,O.RECONNECT_TIME_MAX=5,O.RECONNECT_SLEEP_TIME=1e3,O.CONTROL_HIDE_TIME=3e3,O.DBCLICK_TIME=300,O.DBCLICK_FULLSCREEN=!0,O.MOBILE_DBCLICK_PLAY=!0,O.MOBILE_CLICK_PLAY=!1,O.AUTO_ORIENTATION_TIME=200,O.INFO_LOOP_TIME=1e3,O.FAST_FORWARD_VALUE=3,O.FAST_FORWARD_TIME=1e3,O.TOUCH_MOVE_RATIO=.5,O.VOLUME_STEP=.1,O.SEEK_STEP=5,O.PLAYBACK_RATE=[.5,.75,1,1.25,1.5,2],O.ASPECT_RATIO=["default","4:3","16:9"],O.FLIP=["normal","horizontal","vertical"],O.FULLSCREEN_WEB_IN_BODY=!1,O.LOG_VERSION=!0,O.USE_RAF=!1,l.isBrowser&&(window.Artplayer=O,l.setStyleText("artplayer-style",r.default),setTimeout(()=>{O.LOG_VERSION&&console.log(`%c ArtPlayer %c ${O.version} %c https://artplayer.org`,"color: #fff; background: #5f5f5f","color: #fff; background: #4bc729","")},100))},{"bundle-text:./style/index.less":"kfOe8","option-validator":"bAWi2","./utils/emitter":"2bGVu","./utils":"h3rH9","./scheme":"AdvwB","./config":"9Xmqu","./template":"2gKYH","./i18n":"1AdeF","./player":"556MW","./control":"14IBq","./contextmenu":"7iUum","./info":"hD2Lg","./subtitle":"lum0D","./events":"1Epl5","./hotkey":"eTow4","./layer":"4fDoD","./loading":"fE0Sp","./notice":"9PuGy","./mask":"2etr0","./icons":"6dYSr","./setting":"bRHiA","./storage":"f2Thp","./plugins":"96ThS","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],kfOe8:[function(o,h,s){h.exports='.art-video-player{--art-theme:red;--art-font-color:#fff;--art-background-color:#000;--art-text-shadow-color:#00000080;--art-transition-duration:.2s;--art-padding:10px;--art-border-radius:3px;--art-progress-height:6px;--art-progress-color:#fff3;--art-hover-color:#fff3;--art-loaded-color:#fff3;--art-state-size:80px;--art-state-opacity:.8;--art-bottom-height:100px;--art-bottom-offset:20px;--art-bottom-gap:5px;--art-highlight-width:8px;--art-highlight-color:#ffffff80;--art-control-height:46px;--art-control-opacity:.75;--art-control-icon-size:36px;--art-control-icon-scale:1.1;--art-volume-height:120px;--art-volume-handle-size:14px;--art-lock-size:36px;--art-indicator-scale:0;--art-indicator-size:16px;--art-fullscreen-web-index:9999;--art-settings-icon-size:24px;--art-settings-max-height:300px;--art-selector-max-height:300px;--art-contextmenus-min-width:250px;--art-subtitle-font-size:20px;--art-subtitle-gap:5px;--art-subtitle-bottom:15px;--art-subtitle-border:#000;--art-widget-background:#000000d9;--art-tip-background:#00000080;--art-scrollbar-size:4px;--art-scrollbar-background:#ffffff40;--art-scrollbar-background-hover:#ffffff80;--art-mini-progress-height:2px}.art-bg-cover{background-position:50%;background-repeat:no-repeat;background-size:cover}.art-bottom-gradient{background-image:linear-gradient(#0000,#0006,#000);background-position:bottom;background-repeat:repeat-x}.art-backdrop-filter{-webkit-backdrop-filter:saturate(180%)blur(20px);backdrop-filter:saturate(180%)blur(20px);background-color:#000000bf!important}.art-truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.art-video-player{width:100%;height:100%;zoom:1;text-align:left;direction:ltr;user-select:none;box-sizing:border-box;color:var(--art-font-color);background-color:var(--art-background-color);text-shadow:0 0 2px var(--art-text-shadow-color);-webkit-tap-highlight-color:#0000;-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none;outline:0;margin:0 auto;padding:0;font-family:PingFang SC,Helvetica Neue,Microsoft YaHei,Roboto,Arial,sans-serif;font-size:14px;line-height:1.3;position:relative}.art-video-player *,.art-video-player :before,.art-video-player :after{box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:var(--art-scrollbar-size);height:var(--art-scrollbar-size)}.art-video-player ::-webkit-scrollbar-thumb{background-color:var(--art-scrollbar-background)}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:var(--art-scrollbar-background-hover)}.art-video-player img{max-width:100%;vertical-align:top}.art-video-player svg{fill:var(--art-font-color)}.art-video-player a{color:var(--art-font-color);text-decoration:none}.art-icon{justify-content:center;align-items:center;line-height:1;display:flex}.art-video-player.art-backdrop .art-contextmenus,.art-video-player.art-backdrop .art-info,.art-video-player.art-backdrop .art-settings,.art-video-player.art-backdrop .art-layer-auto-playback,.art-video-player.art-backdrop .art-selector-list,.art-video-player.art-backdrop .art-volume-inner{-webkit-backdrop-filter:saturate(180%)blur(20px);backdrop-filter:saturate(180%)blur(20px);background-color:#000000bf!important}.art-video{z-index:10;width:100%;height:100%;cursor:pointer;position:absolute;inset:0}.art-poster{z-index:11;width:100%;height:100%;pointer-events:none;background-position:50%;background-repeat:no-repeat;background-size:cover;position:absolute;inset:0}.art-video-player .art-subtitle{z-index:20;width:100%;text-align:center;pointer-events:none;justify-content:center;align-items:center;gap:var(--art-subtitle-gap);bottom:var(--art-subtitle-bottom);font-size:var(--art-subtitle-font-size);transition:bottom var(--art-transition-duration)ease;text-shadow:var(--art-subtitle-border)1px 0 1px,var(--art-subtitle-border)0 1px 1px,var(--art-subtitle-border)-1px 0 1px,var(--art-subtitle-border)0 -1px 1px,var(--art-subtitle-border)1px 1px 1px,var(--art-subtitle-border)-1px -1px 1px,var(--art-subtitle-border)1px -1px 1px,var(--art-subtitle-border)-1px 1px 1px;flex-direction:column;padding:0 5%;display:none;position:absolute}.art-video-player.art-subtitle-show .art-subtitle{display:flex}.art-video-player.art-control-show .art-subtitle{bottom:calc(var(--art-control-height) + var(--art-subtitle-bottom))}.art-danmuku{z-index:30;width:100%;height:100%;pointer-events:none;position:absolute;inset:0;overflow:hidden}.art-video-player .art-layers{z-index:40;width:100%;height:100%;pointer-events:none;display:none;position:absolute;inset:0}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:flex}.art-video-player .art-mask{z-index:50;width:100%;height:100%;pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.art-video-player .art-mask .art-state{opacity:0;width:var(--art-state-size);height:var(--art-state-size);transition:all var(--art-transition-duration)ease;justify-content:center;align-items:center;display:flex;transform:scale(2)}.art-video-player.art-mask-show .art-state{cursor:pointer;pointer-events:auto;opacity:var(--art-state-opacity);transform:scale(1)}.art-video-player.art-loading-show .art-state{display:none}.art-video-player .art-loading{z-index:70;width:100%;height:100%;pointer-events:none;justify-content:center;align-items:center;display:none;position:absolute;inset:0}.art-video-player.art-loading-show .art-loading{display:flex}.art-video-player .art-bottom{z-index:60;width:100%;height:100%;opacity:0;pointer-events:none;padding:0 var(--art-padding);transition:all var(--art-transition-duration)ease;background-size:100% var(--art-bottom-height);background-image:linear-gradient(#0000,#0006,#000);background-position:bottom;background-repeat:repeat-x;flex-direction:column;justify-content:flex-end;display:flex;position:absolute;inset:0;overflow:hidden}.art-video-player .art-bottom .art-controls,.art-video-player .art-bottom .art-progress{transform:translateY(var(--art-bottom-offset));transition:transform var(--art-transition-duration)ease}.art-video-player.art-control-show .art-bottom,.art-video-player.art-hover .art-bottom{opacity:1}.art-video-player.art-control-show .art-bottom .art-controls,.art-video-player.art-hover .art-bottom .art-controls,.art-video-player.art-control-show .art-bottom .art-progress,.art-video-player.art-hover .art-bottom .art-progress{transform:translateY(0)}.art-bottom .art-progress{z-index:0;pointer-events:auto;padding-bottom:var(--art-bottom-gap);position:relative}.art-bottom .art-progress .art-control-progress{cursor:pointer;height:var(--art-progress-height);justify-content:center;align-items:center;display:flex;position:relative}.art-bottom .art-progress .art-control-progress .art-control-progress-inner{height:50%;width:100%;transition:height var(--art-transition-duration)ease;background-color:var(--art-progress-color);align-items:center;display:flex;position:relative}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover{z-index:0;width:100%;height:100%;width:0%;background-color:var(--art-hover-color);display:none;position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{z-index:10;width:100%;height:100%;width:0%;background-color:var(--art-loaded-color);position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played{z-index:20;width:100%;height:100%;width:0%;background-color:var(--art-theme);position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{z-index:30;width:100%;height:100%;pointer-events:none;position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{z-index:0;width:100%;height:100%;pointer-events:auto;transform:translateX(calc(var(--art-highlight-width)/-2));background-color:var(--art-highlight-color);position:absolute;inset:0 auto 0 0;width:var(--art-highlight-width)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{z-index:40;width:var(--art-indicator-size);height:var(--art-indicator-size);transform:scale(var(--art-indicator-scale));margin-left:calc(var(--art-indicator-size)/-2);transition:transform var(--art-transition-duration)ease;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute;left:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon{width:100%;height:100%;pointer-events:none}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover{transform:scale(1.2)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active{transform:scale(1)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip{z-index:50;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);padding:3px 5px;font-size:12px;line-height:1;display:none;position:absolute;top:-25px;left:0}.art-bottom .art-progress .art-control-progress:hover .art-control-progress-inner{height:100%}.art-bottom .art-progress .art-control-thumbnails{bottom:calc(var(--art-bottom-gap) + 10px);border-radius:var(--art-border-radius);pointer-events:none;background-color:var(--art-widget-background);display:none;position:absolute;left:0;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003}.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{transform:scale(1)}.art-controls{z-index:10;pointer-events:auto;height:var(--art-control-height);justify-content:space-between;align-items:center;display:flex;position:relative}.art-controls .art-controls-left,.art-controls .art-controls-right{height:100%;display:flex}.art-controls .art-controls-center{height:100%;flex:1;justify-content:center;align-items:center;padding:0 10px;display:none}.art-controls .art-controls-right{justify-content:flex-end}.art-controls .art-control{cursor:pointer;white-space:nowrap;opacity:var(--art-control-opacity);min-height:var(--art-control-height);min-width:var(--art-control-height);transition:opacity var(--art-transition-duration)ease;flex-shrink:0;justify-content:center;align-items:center;display:flex}.art-controls .art-control .art-icon{height:var(--art-control-icon-size);width:var(--art-control-icon-size);transform:scale(var(--art-control-icon-scale));transition:transform var(--art-transition-duration)ease}.art-controls .art-control .art-icon:active{transform:scale(calc(var(--art-control-icon-scale)*.8))}.art-controls .art-control:hover{opacity:1}.art-control-volume{position:relative}.art-control-volume .art-volume-panel{text-align:center;cursor:default;opacity:0;pointer-events:none;left:0;right:0;bottom:var(--art-control-height);width:var(--art-control-height);height:var(--art-volume-height);transition:all var(--art-transition-duration)ease;justify-content:center;align-items:center;padding:0 5px;font-size:12px;display:flex;position:absolute;transform:translateY(10px)}.art-control-volume .art-volume-panel .art-volume-inner{height:100%;width:100%;border-radius:var(--art-border-radius);background-color:var(--art-widget-background);flex-direction:column;align-items:center;gap:10px;padding:10px 0 12px;display:flex}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider{width:100%;cursor:pointer;flex:1;justify-content:center;display:flex;position:relative}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle{width:2px;border-radius:var(--art-border-radius);background-color:#ffffff40;justify-content:center;display:flex;position:relative;overflow:hidden}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded{z-index:0;width:100%;height:100%;background-color:var(--art-theme);position:absolute;inset:0}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator{width:var(--art-volume-handle-size);height:var(--art-volume-handle-size);margin-top:calc(var(--art-volume-handle-size)/-2);background-color:var(--art-theme);transition:transform var(--art-transition-duration)ease;border-radius:100%;flex-shrink:0;position:absolute;transform:scale(1)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator{transform:scale(.9)}.art-control-volume:hover .art-volume-panel{opacity:1;pointer-events:auto;transform:translateY(0)}.art-video-player .art-notice{z-index:80;width:100%;height:100%;height:auto;padding:var(--art-padding);pointer-events:none;display:none;position:absolute;inset:0 0 auto}.art-video-player .art-notice .art-notice-inner{border-radius:var(--art-border-radius);background-color:var(--art-tip-background);padding:5px;line-height:1;display:inline-flex}.art-video-player.art-notice-show .art-notice{display:flex}.art-video-player .art-contextmenus{z-index:120;border-radius:var(--art-border-radius);background-color:var(--art-widget-background);min-width:var(--art-contextmenus-min-width);flex-direction:column;padding:5px 0;font-size:12px;display:none;position:absolute}.art-video-player .art-contextmenus .art-contextmenu{cursor:pointer;border-bottom:1px solid #ffffff1a;padding:10px 15px;display:flex}.art-video-player .art-contextmenus .art-contextmenu span{padding:0 8px}.art-video-player .art-contextmenus .art-contextmenu span:hover,.art-video-player .art-contextmenus .art-contextmenu span.art-current{color:var(--art-theme)}.art-video-player .art-contextmenus .art-contextmenu:hover{background-color:#ffffff1a}.art-video-player .art-contextmenus .art-contextmenu:last-child{border-bottom:none}.art-video-player.art-contextmenu-show .art-contextmenus{display:flex}.art-video-player .art-settings{z-index:90;border-radius:var(--art-border-radius);transform-origin:100% 100%;max-height:var(--art-settings-max-height);left:auto;right:var(--art-padding);bottom:var(--art-control-height);transform:scale(var(--art-settings-scale));transition:all var(--art-transition-duration)ease;background-color:var(--art-widget-background);flex-direction:column;display:none;position:absolute;overflow:hidden auto}.art-video-player .art-settings .art-setting-panel{flex-direction:column;display:none}.art-video-player .art-settings .art-setting-panel.art-current{display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item{cursor:pointer;transition:background-color var(--art-transition-duration)ease;justify-content:space-between;align-items:center;padding:0 5px;display:flex;overflow:hidden}.art-video-player .art-settings .art-setting-panel .art-setting-item:hover{background-color:#ffffff1a}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current{color:var(--art-theme)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check{visibility:hidden;height:15px}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check{visibility:visible}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left{justify-content:center;align-items:center;gap:5px;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon{height:var(--art-settings-icon-size);width:var(--art-settings-icon-size);justify-content:center;align-items:center;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right{justify-content:center;align-items:center;gap:5px;font-size:12px;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip{white-space:nowrap;color:#ffffff80}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon{min-width:32px;height:24px;justify-content:center;align-items:center;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range{height:3px;width:80px;appearance:none;background-color:#fff3;outline:none}.art-video-player .art-settings .art-setting-panel .art-setting-item-back{border-bottom:1px solid #ffffff1a}.art-video-player.art-setting-show .art-settings{display:flex}.art-video-player .art-info{left:var(--art-padding);top:var(--art-padding);z-index:100;border-radius:var(--art-border-radius);background-color:var(--art-widget-background);padding:10px;font-size:12px;display:none;position:absolute}.art-video-player .art-info .art-info-panel{flex-direction:column;gap:5px;display:flex}.art-video-player .art-info .art-info-panel .art-info-item{align-items:center;gap:5px;display:flex}.art-video-player .art-info .art-info-panel .art-info-item .art-info-title{width:100px;text-align:right}.art-video-player .art-info .art-info-panel .art-info-item .art-info-content{width:250px;text-overflow:ellipsis;white-space:nowrap;user-select:all;overflow:hidden}.art-video-player .art-info .art-info-close{cursor:pointer;position:absolute;top:5px;right:5px}.art-video-player.art-info-show .art-info{display:flex}.art-hide-cursor *{cursor:none!important}.art-video-player[data-aspect-ratio]{overflow:hidden}.art-video-player[data-aspect-ratio] .art-video{object-fit:fill;box-sizing:content-box}.art-fullscreen{--art-control-height:60px;--art-control-icon-scale:1.3}.art-fullscreen-web{--art-control-height:60px;--art-control-icon-scale:1.3;z-index:var(--art-fullscreen-web-index);width:100%;height:100%;position:fixed;inset:0}.art-mini-popup{z-index:9999;width:320px;height:180px;border-radius:var(--art-border-radius);cursor:move;user-select:none;background:#000;transition:opacity .2s;position:fixed;overflow:hidden;box-shadow:0 0 5px #00000080}.art-mini-popup svg{fill:#fff}.art-mini-popup .art-video{pointer-events:none}.art-mini-popup .art-mini-close{z-index:20;cursor:pointer;opacity:0;transition:opacity .2s;position:absolute;top:10px;right:10px}.art-mini-popup .art-mini-state{z-index:30;width:100%;height:100%;pointer-events:none;opacity:0;background-color:#00000040;justify-content:center;align-items:center;transition:opacity .2s;display:flex;position:absolute;inset:0}.art-mini-popup .art-mini-state .art-icon{opacity:.75;cursor:pointer;pointer-events:auto;transition:transform .2s;transform:scale(3)}.art-mini-popup .art-mini-state .art-icon:active{transform:scale(2.5)}.art-mini-popup.art-mini-droging{opacity:.9}.art-mini-popup:hover .art-mini-close,.art-mini-popup:hover .art-mini-state{opacity:1}.art-video-player[data-flip=horizontal] .art-video{transform:scaleX(-1)}.art-video-player[data-flip=vertical] .art-video{transform:scaleY(-1)}.art-video-player .art-layer-lock{height:var(--art-lock-size);width:var(--art-lock-size);top:50%;left:var(--art-padding);background-color:var(--art-tip-background);border-radius:50%;justify-content:center;align-items:center;display:none;position:absolute;transform:translateY(-50%)}.art-video-player .art-layer-auto-playback{border-radius:var(--art-border-radius);left:var(--art-padding);bottom:calc(var(--art-control-height) + var(--art-bottom-gap) + 10px);background-color:var(--art-widget-background);align-items:center;gap:10px;padding:10px;line-height:1;display:none;position:absolute}.art-video-player .art-layer-auto-playback .art-auto-playback-close{cursor:pointer;justify-content:center;align-items:center;display:flex}.art-video-player .art-layer-auto-playback .art-auto-playback-close svg{width:15px;height:15px;fill:var(--art-theme)}.art-video-player .art-layer-auto-playback .art-auto-playback-jump{color:var(--art-theme);cursor:pointer}.art-video-player.art-lock .art-subtitle{bottom:var(--art-subtitle-bottom)!important}.art-video-player.art-mini-progress-bar .art-bottom,.art-video-player.art-lock .art-bottom{opacity:1;background-image:none;padding:0}.art-video-player.art-mini-progress-bar .art-bottom .art-controls,.art-video-player.art-lock .art-bottom .art-controls,.art-video-player.art-mini-progress-bar .art-bottom .art-progress,.art-video-player.art-lock .art-bottom .art-progress{transform:translateY(calc(var(--art-control-height) + var(--art-bottom-gap) + var(--art-progress-height)/4))}.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,.art-video-player.art-lock .art-bottom .art-progress-indicator{display:none!important}.art-video-player.art-control-show .art-layer-lock{display:flex}.art-control-selector{position:relative}.art-control-selector .art-selector-list{text-align:center;border-radius:var(--art-border-radius);opacity:0;pointer-events:none;bottom:var(--art-control-height);max-height:var(--art-selector-max-height);background-color:var(--art-widget-background);transition:all var(--art-transition-duration)ease;flex-direction:column;align-items:center;display:flex;position:absolute;overflow:hidden auto;transform:translateY(10px)}.art-control-selector .art-selector-list .art-selector-item{width:100%;flex-shrink:0;justify-content:center;align-items:center;padding:10px 15px;line-height:1;display:flex}.art-control-selector .art-selector-list .art-selector-item:hover{background-color:#ffffff1a}.art-control-selector .art-selector-list .art-selector-item:hover,.art-control-selector .art-selector-list .art-selector-item.art-current{color:var(--art-theme)}.art-control-selector:hover .art-selector-list{opacity:1;pointer-events:auto;transform:translateY(0)}[class*=hint--]{font-style:normal;display:inline-block;position:relative}[class*=hint--]:before,[class*=hint--]:after{visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;transition:all .3s;position:absolute;transform:translate(0,0)}[class*=hint--]:hover:before,[class*=hint--]:hover:after{visibility:visible;opacity:1;transition-delay:.1s}[class*=hint--]:before{content:"";z-index:1000001;background:0 0;border:6px solid #0000;position:absolute}[class*=hint--]:after{color:#fff;white-space:nowrap;background:#000;padding:8px 10px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;line-height:12px}[class*=hint--][aria-label]:after{content:attr(aria-label)}[class*=hint--][data-hint]:after{content:attr(data-hint)}[aria-label=""]:before,[aria-label=""]:after,[data-hint=""]:before,[data-hint=""]:after{display:none!important}.hint--top-left:before,.hint--top-right:before,.hint--top:before{border-top-color:#000}.hint--bottom-left:before,.hint--bottom-right:before,.hint--bottom:before{border-bottom-color:#000}.hint--left:before{border-left-color:#000}.hint--right:before{border-right-color:#000}.hint--top:before{margin-bottom:-11px}.hint--top:before,.hint--top:after{bottom:100%;left:50%}.hint--top:before{left:calc(50% - 6px)}.hint--top:after{transform:translate(-50%)}.hint--top:hover:before{transform:translateY(-8px)}.hint--top:hover:after{transform:translate(-50%)translateY(-8px)}.hint--bottom:before{margin-top:-11px}.hint--bottom:before,.hint--bottom:after{top:100%;left:50%}.hint--bottom:before{left:calc(50% - 6px)}.hint--bottom:after{transform:translate(-50%)}.hint--bottom:hover:before{transform:translateY(8px)}.hint--bottom:hover:after{transform:translate(-50%)translateY(8px)}.hint--right:before{margin-bottom:-6px;margin-left:-11px}.hint--right:after{margin-bottom:-14px}.hint--right:before,.hint--right:after{bottom:50%;left:100%}.hint--right:hover:before,.hint--right:hover:after{transform:translate(8px)}.hint--left:before{margin-bottom:-6px;margin-right:-11px}.hint--left:after{margin-bottom:-14px}.hint--left:before,.hint--left:after{bottom:50%;right:100%}.hint--left:hover:before,.hint--left:hover:after{transform:translate(-8px)}.hint--top-left:before{margin-bottom:-11px}.hint--top-left:before,.hint--top-left:after{bottom:100%;left:50%}.hint--top-left:before{left:calc(50% - 6px)}.hint--top-left:after{margin-left:12px;transform:translate(-100%)}.hint--top-left:hover:before{transform:translateY(-8px)}.hint--top-left:hover:after{transform:translate(-100%)translateY(-8px)}.hint--top-right:before{margin-bottom:-11px}.hint--top-right:before,.hint--top-right:after{bottom:100%;left:50%}.hint--top-right:before{left:calc(50% - 6px)}.hint--top-right:after{margin-left:-12px;transform:translate(0)}.hint--top-right:hover:before,.hint--top-right:hover:after{transform:translateY(-8px)}.hint--bottom-left:before{margin-top:-11px}.hint--bottom-left:before,.hint--bottom-left:after{top:100%;left:50%}.hint--bottom-left:before{left:calc(50% - 6px)}.hint--bottom-left:after{margin-left:12px;transform:translate(-100%)}.hint--bottom-left:hover:before{transform:translateY(8px)}.hint--bottom-left:hover:after{transform:translate(-100%)translateY(8px)}.hint--bottom-right:before{margin-top:-11px}.hint--bottom-right:before,.hint--bottom-right:after{top:100%;left:50%}.hint--bottom-right:before{left:calc(50% - 6px)}.hint--bottom-right:after{margin-left:-12px;transform:translate(0)}.hint--bottom-right:hover:before,.hint--bottom-right:hover:after{transform:translateY(8px)}.hint--small:after,.hint--medium:after,.hint--large:after{white-space:normal;word-wrap:break-word;line-height:1.4em}.hint--small:after{width:80px}.hint--medium:after{width:150px}.hint--large:after{width:300px}[class*=hint--]:after{text-shadow:0 -1px #000;box-shadow:4px 4px 8px #0000004d}.hint--error:after{text-shadow:0 -1px #592726;background-color:#b34e4d}.hint--error.hint--top-left:before,.hint--error.hint--top-right:before,.hint--error.hint--top:before{border-top-color:#b34e4d}.hint--error.hint--bottom-left:before,.hint--error.hint--bottom-right:before,.hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.hint--error.hint--left:before{border-left-color:#b34e4d}.hint--error.hint--right:before{border-right-color:#b34e4d}.hint--warning:after{text-shadow:0 -1px #6c5328;background-color:#c09854}.hint--warning.hint--top-left:before,.hint--warning.hint--top-right:before,.hint--warning.hint--top:before{border-top-color:#c09854}.hint--warning.hint--bottom-left:before,.hint--warning.hint--bottom-right:before,.hint--warning.hint--bottom:before{border-bottom-color:#c09854}.hint--warning.hint--left:before{border-left-color:#c09854}.hint--warning.hint--right:before{border-right-color:#c09854}.hint--info:after{text-shadow:0 -1px #1a3c4d;background-color:#3986ac}.hint--info.hint--top-left:before,.hint--info.hint--top-right:before,.hint--info.hint--top:before{border-top-color:#3986ac}.hint--info.hint--bottom-left:before,.hint--info.hint--bottom-right:before,.hint--info.hint--bottom:before{border-bottom-color:#3986ac}.hint--info.hint--left:before{border-left-color:#3986ac}.hint--info.hint--right:before{border-right-color:#3986ac}.hint--success:after{text-shadow:0 -1px #1a321a;background-color:#458746}.hint--success.hint--top-left:before,.hint--success.hint--top-right:before,.hint--success.hint--top:before{border-top-color:#458746}.hint--success.hint--bottom-left:before,.hint--success.hint--bottom-right:before,.hint--success.hint--bottom:before{border-bottom-color:#458746}.hint--success.hint--left:before{border-left-color:#458746}.hint--success.hint--right:before{border-right-color:#458746}.hint--always:after,.hint--always:before{opacity:1;visibility:visible}.hint--always.hint--top:before{transform:translateY(-8px)}.hint--always.hint--top:after{transform:translate(-50%)translateY(-8px)}.hint--always.hint--top-left:before{transform:translateY(-8px)}.hint--always.hint--top-left:after{transform:translate(-100%)translateY(-8px)}.hint--always.hint--top-right:before,.hint--always.hint--top-right:after{transform:translateY(-8px)}.hint--always.hint--bottom:before{transform:translateY(8px)}.hint--always.hint--bottom:after{transform:translate(-50%)translateY(8px)}.hint--always.hint--bottom-left:before{transform:translateY(8px)}.hint--always.hint--bottom-left:after{transform:translate(-100%)translateY(8px)}.hint--always.hint--bottom-right:before,.hint--always.hint--bottom-right:after{transform:translateY(8px)}.hint--always.hint--left:before,.hint--always.hint--left:after{transform:translate(-8px)}.hint--always.hint--right:before,.hint--always.hint--right:after{transform:translate(8px)}.hint--rounded:after{border-radius:4px}.hint--no-animate:before,.hint--no-animate:after{transition-duration:0s}.hint--bounce:before,.hint--bounce:after{-webkit-transition:opacity .3s,visibility .3s,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s,visibility .3s,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s,visibility .3s,transform .3s cubic-bezier(.71,1.7,.77,1.24)}.hint--no-shadow:before,.hint--no-shadow:after{text-shadow:initial;box-shadow:initial}.hint--no-arrow:before{display:none}.art-video-player.art-mobile{--art-bottom-gap:10px;--art-control-height:38px;--art-control-icon-scale:1;--art-state-size:60px;--art-settings-max-height:180px;--art-selector-max-height:180px;--art-indicator-scale:1;--art-control-opacity:1}.art-video-player.art-mobile .art-controls-left{margin-left:calc(var(--art-padding)/-1)}.art-video-player.art-mobile .art-controls-right{margin-right:calc(var(--art-padding)/-1)}'},{}],bAWi2:[function(o,h,s){h.exports=function(){function e(l){return(e=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(c){return typeof c}:function(c){return c&&typeof Symbol=="function"&&c.constructor===Symbol&&c!==Symbol.prototype?"symbol":typeof c})(l)}var t=Object.prototype.toString,r=function(l){if(l===void 0)return"undefined";if(l===null)return"null";var c=e(l);if(c==="boolean")return"boolean";if(c==="string")return"string";if(c==="number")return"number";if(c==="symbol")return"symbol";if(c==="function")return function(p){return n(p)==="GeneratorFunction"}(l)?"generatorfunction":"function";if(function(p){return Array.isArray?Array.isArray(p):p instanceof Array}(l))return"array";if(function(p){return!(!p.constructor||typeof p.constructor.isBuffer!="function")&&p.constructor.isBuffer(p)}(l))return"buffer";if(function(p){try{if(typeof p.length=="number"&&typeof p.callee=="function")return!0}catch(d){if(d.message.indexOf("callee")!==-1)return!0}return!1}(l))return"arguments";if(function(p){return p instanceof Date||typeof p.toDateString=="function"&&typeof p.getDate=="function"&&typeof p.setDate=="function"}(l))return"date";if(function(p){return p instanceof Error||typeof p.message=="string"&&p.constructor&&typeof p.constructor.stackTraceLimit=="number"}(l))return"error";if(function(p){return p instanceof RegExp||typeof p.flags=="string"&&typeof p.ignoreCase=="boolean"&&typeof p.multiline=="boolean"&&typeof p.global=="boolean"}(l))return"regexp";switch(n(l)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(p){return typeof p.throw=="function"&&typeof p.return=="function"&&typeof p.next=="function"}(l))return"generator";switch(c=t.call(l)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return c.slice(8,-1).toLowerCase().replace(/\s/g,"")};function n(l){return l.constructor?l.constructor.name:null}function i(l,c){var p=2r),e.export(s,"queryAll",()=>n),e.export(s,"addClass",()=>i),e.export(s,"removeClass",()=>u),e.export(s,"hasClass",()=>a),e.export(s,"append",()=>l),e.export(s,"remove",()=>c),e.export(s,"setStyle",()=>p),e.export(s,"setStyles",()=>d),e.export(s,"getStyle",()=>y),e.export(s,"sublings",()=>m),e.export(s,"inverseClass",()=>w),e.export(s,"tooltip",()=>x),e.export(s,"isInViewport",()=>b),e.export(s,"includeFromEvent",()=>g),e.export(s,"replaceElement",()=>f),e.export(s,"createElement",()=>v),e.export(s,"getIcon",()=>k),e.export(s,"setStyleText",()=>T);var t=o("./compatibility");function r(j,M=document){return M.querySelector(j)}function n(j,M=document){return Array.from(M.querySelectorAll(j))}function i(j,M){return j.classList.add(M)}function u(j,M){return j.classList.remove(M)}function a(j,M){return j.classList.contains(M)}function l(j,M){return M instanceof Element?j.appendChild(M):j.insertAdjacentHTML("beforeend",String(M)),j.lastElementChild||j.lastChild}function c(j){return j.parentNode.removeChild(j)}function p(j,M,S){return j.style[M]=S,j}function d(j,M){for(const S in M)p(j,S,M[S]);return j}function y(j,M,S=!0){const $=window.getComputedStyle(j,null).getPropertyValue(M);return S?parseFloat($):$}function m(j){return Array.from(j.parentElement.children).filter(M=>M!==j)}function w(j,M){m(j).forEach(S=>u(S,M)),i(j,M)}function x(j,M,S="top"){t.isMobile||(j.setAttribute("aria-label",M),i(j,"hint--rounded"),i(j,`hint--${S}`))}function b(j,M=0){const S=j.getBoundingClientRect(),$=window.innerHeight||document.documentElement.clientHeight,B=window.innerWidth||document.documentElement.clientWidth,I=S.top-M<=$&&S.top+S.height+M>=0,C=S.left-M<=B+M&&S.left+S.width+M>=0;return I&&C}function g(j,M){return j.composedPath&&j.composedPath().indexOf(M)>-1}function f(j,M){return M.parentNode.replaceChild(j,M),j}function v(j){return document.createElement(j)}function k(j="",M=""){const S=v("i");return i(S,"art-icon"),i(S,`art-icon-${j}`),l(S,M),S}function T(j,M){const S=document.getElementById(j);if(S)S.textContent=M;else{const $=v("style");$.id=j,$.textContent=M,document.head.appendChild($)}}},{"./compatibility":"luXC1","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],luXC1:[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s),e.export(s,"userAgent",()=>t),e.export(s,"isSafari",()=>r),e.export(s,"isWechat",()=>n),e.export(s,"isIE",()=>i),e.export(s,"isAndroid",()=>u),e.export(s,"isIOS",()=>a),e.export(s,"isIOS13",()=>l),e.export(s,"isMobile",()=>c),e.export(s,"isBrowser",()=>p);const t=typeof navigator<"u"?navigator.userAgent:"",r=/^((?!chrome|android).)*safari/i.test(t),n=/MicroMessenger/i.test(t),i=/MSIE|Trident/i.test(t),u=/android/i.test(t),a=/iPad|iPhone|iPod/i.test(t)&&!window.MSStream,l=a||t.includes("Macintosh")&&navigator.maxTouchPoints>=1,c=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(t)||l,p=typeof window<"u"},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"2nFlF":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s),e.export(s,"ArtPlayerError",()=>t),e.export(s,"errorHandle",()=>r);class t extends Error{constructor(i,u){super(i),typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,u||this.constructor),this.name="ArtPlayerError"}}function r(n,i){if(!n)throw new t(i);return n}},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],yqFoT:[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");function t(i){return`WEBVTT \r +\r +`.concat((u=i,u.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g,(a,l,c)=>{let p=c.slice(0,3);return c.length===1&&(p=c+"00"),c.length===2&&(p=c+"0"),`${l},${p}`})).replace(/\{\\([ibu])\}/g,"").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").replace(/{[\s\S]*?}/g,"").concat(`\r +\r +`));var u}function r(i){return URL.createObjectURL(new Blob([i],{type:"text/vtt"}))}function n(i){const u=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function a(l=""){return l.split(/[:.]/).map((c,p,d)=>{if(p===d.length-1){if(c.length===1)return`.${c}00`;if(c.length===2)return`.${c}0`}else if(c.length===1)return(p===0?"0":":0")+c;return p===0?c:p===d.length-1?`.${c}`:`:${c}`}).join("")}return`WEBVTT + +${i.split(/\r?\n/).map(l=>{const c=l.match(u);return c?{start:a(c[1].trim()),end:a(c[2].trim()),text:c[5].replace(/{[\s\S]*?}/g,"").replace(/(\\N)/g,` +`).trim().split(/\r?\n/).map(p=>p.trim()).join(` +`)}:null}).filter(l=>l).map((l,c)=>l?`${c+1} +${l.start} --> ${l.end} +${l.text}`:"").filter(l=>l.trim()).join(` + +`)}`}e.defineInteropFlag(s),e.export(s,"srtToVtt",()=>t),e.export(s,"vttToBlob",()=>r),e.export(s,"assToVtt",()=>n)},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"1VRQn":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");function t(n){return n.includes("?")?t(n.split("?")[0]):n.includes("#")?t(n.split("#")[0]):n.trim().toLowerCase().split(".").pop()}function r(n,i){const u=document.createElement("a");u.style.display="none",u.href=n,u.download=i,document.body.appendChild(u),u.click(),document.body.removeChild(u)}e.defineInteropFlag(s),e.export(s,"getExt",()=>t),e.export(s,"download",()=>r)},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"3weX2":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s),e.export(s,"def",()=>t),e.export(s,"has",()=>n),e.export(s,"get",()=>i),e.export(s,"mergeDeep",()=>u);const t=Object.defineProperty,{hasOwnProperty:r}=Object.prototype;function n(a,l){return r.call(a,l)}function i(a,l){return Object.getOwnPropertyDescriptor(a,l)}function u(...a){const l=c=>c&&typeof c=="object"&&!Array.isArray(c);return a.reduce((c,p)=>(Object.keys(p).forEach(d=>{const y=c[d],m=p[d];Array.isArray(y)&&Array.isArray(m)?c[d]=y.concat(...m):l(y)&&l(m)?c[d]=u(y,m):c[d]=m}),c),{})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"7kBIx":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");function t(i=0){return new Promise(u=>setTimeout(u,i))}function r(i,u){let a;return function(...l){clearTimeout(a),a=setTimeout(()=>(a=null,i.apply(this,l)),u)}}function n(i,u){let a=!1;return function(...l){a||(i.apply(this,l),a=!0,setTimeout(function(){a=!1},u))}}e.defineInteropFlag(s),e.export(s,"sleep",()=>t),e.export(s,"debounce",()=>r),e.export(s,"throttle",()=>n)},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"13atT":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");function t(l,c,p){return Math.max(Math.min(l,Math.max(c,p)),Math.min(c,p))}function r(l){return l.charAt(0).toUpperCase()+l.slice(1)}function n(l){return["string","number"].includes(typeof l)}function i(l){if(!l)return"00:00";const c=Math.floor(l/3600),p=Math.floor((l-3600*c)/60),d=Math.floor(l-3600*c-60*p);return(c>0?[c,p,d]:[p,d]).map(y=>y<10?`0${y}`:String(y)).join(":")}function u(l){return l.replace(/[&<>'"]/g,c=>({"&":"&","<":"<",">":">","'":"'",'"':"""})[c]||c)}function a(l){const c={"&":"&","<":"<",">":">","'":"'",""":'"'},p=new RegExp(`(${Object.keys(c).join("|")})`,"g");return l.replace(p,d=>c[d]||d)}e.defineInteropFlag(s),e.export(s,"clamp",()=>t),e.export(s,"capitalize",()=>r),e.export(s,"isStringOrNumber",()=>n),e.export(s,"secondToTime",()=>i),e.export(s,"escape",()=>u),e.export(s,"unescape",()=>a)},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],AdvwB:[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s),e.export(s,"ComponentOption",()=>p);var t=o("../utils");const r="array",n="boolean",i="string",u="number",a="object",l="function";function c(d,y,m){return(0,t.errorHandle)(y===i||y===u||d instanceof Element,`${m.join(".")} require '${i}' or 'Element' type`)}const p={html:c,disable:`?${n}`,name:`?${i}`,index:`?${u}`,style:`?${a}`,click:`?${l}`,mounted:`?${l}`,tooltip:`?${i}|${u}`,width:`?${u}`,selector:`?${r}`,onSelect:`?${l}`,switch:`?${n}`,onSwitch:`?${l}`,range:`?${r}`,onRange:`?${l}`,onChange:`?${l}`};s.default={id:i,container:c,url:i,poster:i,type:i,theme:i,lang:i,volume:u,isLive:n,muted:n,autoplay:n,autoSize:n,autoMini:n,loop:n,flip:n,playbackRate:n,aspectRatio:n,screenshot:n,setting:n,hotkey:n,pip:n,mutex:n,backdrop:n,fullscreen:n,fullscreenWeb:n,subtitleOffset:n,miniProgressBar:n,useSSR:n,playsInline:n,lock:n,fastForward:n,autoPlayback:n,autoOrientation:n,airplay:n,plugins:[l],layers:[p],contextmenu:[p],settings:[p],controls:[{...p,position:(d,y,m)=>{const w=["top","left","right"];return(0,t.errorHandle)(w.includes(d),`${m.join(".")} only accept ${w.toString()} as parameters`)}}],quality:[{default:`?${n}`,html:i,url:i}],highlight:[{time:u,text:i}],thumbnails:{url:i,number:u,column:u,width:u,height:u},subtitle:{url:i,name:i,type:i,style:a,escape:n,encoding:i,onVttLoad:l},moreVideoAttr:a,i18n:a,icons:a,cssVar:a,customType:a}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"9Xmqu":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s),s.default={propertys:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],prototypes:["width","height","videoWidth","videoHeight","poster","webkitDecodedFrameCount","webkitDroppedFrameCount","playsInline","webkitSupportsFullscreen","webkitDisplayingFullscreen","onenterpictureinpicture","onleavepictureinpicture","disablePictureInPicture","cancelVideoFrameCallback","requestVideoFrameCallback","getVideoPlaybackQuality","requestPictureInPicture","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen"]}},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"2gKYH":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("./utils");class t{constructor(n){this.art=n;const{option:i,constructor:u}=n;i.container instanceof Element?this.$container=i.container:(this.$container=(0,e.query)(i.container),(0,e.errorHandle)(this.$container,`No container element found by ${i.container}`));const a=this.$container.tagName.toLowerCase();(0,e.errorHandle)(a==="div",`Unsupported container element type, only support 'div' but got '${a}'`),(0,e.errorHandle)(u.instances.every(l=>l.template.$container!==this.$container),"Cannot mount multiple instances on the same dom element"),this.query=this.query.bind(this),this.$container.dataset.artId=n.id,this.init()}static get html(){return'
Player version:
5.1.1
Video url:
Video volume:
Video time:
Video duration:
Video resolution:
x
[x]
'}query(n){return(0,e.query)(n,this.$container)}init(){const{option:n}=this.art;n.useSSR||(this.$container.innerHTML=t.html),this.$player=this.query(".art-video-player"),this.$video=this.query(".art-video"),this.$track=this.query("track"),this.$poster=this.query(".art-poster"),this.$subtitle=this.query(".art-subtitle"),this.$danmuku=this.query(".art-danmuku"),this.$bottom=this.query(".art-bottom"),this.$progress=this.query(".art-progress"),this.$controls=this.query(".art-controls"),this.$controlsLeft=this.query(".art-controls-left"),this.$controlsCenter=this.query(".art-controls-center"),this.$controlsRight=this.query(".art-controls-right"),this.$layer=this.query(".art-layers"),this.$loading=this.query(".art-loading"),this.$notice=this.query(".art-notice"),this.$noticeInner=this.query(".art-notice-inner"),this.$mask=this.query(".art-mask"),this.$state=this.query(".art-state"),this.$setting=this.query(".art-settings"),this.$info=this.query(".art-info"),this.$infoPanel=this.query(".art-info-panel"),this.$infoClose=this.query(".art-info-close"),this.$contextmenu=this.query(".art-contextmenus"),n.backdrop&&(0,e.addClass)(this.$player,"art-backdrop"),e.isMobile&&(0,e.addClass)(this.$player,"art-mobile")}destroy(n){n?this.$container.innerHTML="":(0,e.addClass)(this.$player,"art-destroy")}}s.default=t},{"./utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"1AdeF":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("../utils"),r=o("./zh-cn"),n=e.interopDefault(r);s.default=class{constructor(i){this.art=i,this.languages={"zh-cn":n.default},this.language={},this.update(i.option.i18n)}init(){const i=this.art.option.lang.toLowerCase();this.language=this.languages[i]||{}}get(i){return this.language[i]||i}update(i){this.languages=(0,t.mergeDeep)(this.languages,i),this.init()}}},{"../utils":"h3rH9","./zh-cn":"3ZSKq","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"3ZSKq":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);const e={"Video Info":"统计信息",Close:"关闭","Video Load Failed":"加载失败",Volume:"音量",Play:"播放",Pause:"暂停",Rate:"速度",Mute:"静音","Video Flip":"画面翻转",Horizontal:"水平",Vertical:"垂直",Reconnect:"重新连接","Show Setting":"显示设置","Hide Setting":"隐藏设置",Screenshot:"截图","Play Speed":"播放速度","Aspect Ratio":"画面比例",Default:"默认",Normal:"正常",Open:"打开","Switch Video":"切换","Switch Subtitle":"切换字幕",Fullscreen:"全屏","Exit Fullscreen":"退出全屏","Web Fullscreen":"网页全屏","Exit Web Fullscreen":"退出网页全屏","Mini Player":"迷你播放器","PIP Mode":"开启画中画","Exit PIP Mode":"退出画中画","PIP Not Supported":"不支持画中画","Fullscreen Not Supported":"不支持全屏","Subtitle Offset":"字幕偏移","Last Seen":"上次看到","Jump Play":"跳转播放",AirPlay:"隔空播放","AirPlay Not Available":"隔空播放不可用"};s.default=e,typeof window<"u"&&(window["artplayer-i18n-zh-cn"]=e)},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"556MW":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("./urlMix"),r=e.interopDefault(t),n=o("./attrMix"),i=e.interopDefault(n),u=o("./playMix"),a=e.interopDefault(u),l=o("./pauseMix"),c=e.interopDefault(l),p=o("./toggleMix"),d=e.interopDefault(p),y=o("./seekMix"),m=e.interopDefault(y),w=o("./volumeMix"),x=e.interopDefault(w),b=o("./currentTimeMix"),g=e.interopDefault(b),f=o("./durationMix"),v=e.interopDefault(f),k=o("./switchMix"),T=e.interopDefault(k),j=o("./playbackRateMix"),M=e.interopDefault(j),S=o("./aspectRatioMix"),$=e.interopDefault(S),B=o("./screenshotMix"),I=e.interopDefault(B),C=o("./fullscreenMix"),E=e.interopDefault(C),H=o("./fullscreenWebMix"),_=e.interopDefault(H),R=o("./pipMix"),D=e.interopDefault(R),Y=o("./loadedMix"),K=e.interopDefault(Y),G=o("./playedMix"),X=e.interopDefault(G),J=o("./playingMix"),Q=e.interopDefault(J),ee=o("./autoSizeMix"),te=e.interopDefault(ee),re=o("./rectMix"),ae=e.interopDefault(re),ne=o("./flipMix"),oe=e.interopDefault(ne),ie=o("./miniMix"),se=e.interopDefault(ie),N=o("./posterMix"),O=e.interopDefault(N),he=o("./autoHeightMix"),P=e.interopDefault(he),W=o("./cssVarMix"),U=e.interopDefault(W),V=o("./themeMix"),q=e.interopDefault(V),le=o("./typeMix"),fe=e.interopDefault(le),ue=o("./stateMix"),ce=e.interopDefault(ue),xe=o("./subtitleOffsetMix"),ke=e.interopDefault(xe),je=o("./airplayMix"),Te=e.interopDefault(je),Me=o("./qualityMix"),Se=e.interopDefault(Me),Ee=o("./optionInit"),Oe=e.interopDefault(Ee),Ie=o("./eventInit"),$e=e.interopDefault(Ie);s.default=class{constructor(L){(0,r.default)(L),(0,i.default)(L),(0,a.default)(L),(0,c.default)(L),(0,d.default)(L),(0,m.default)(L),(0,x.default)(L),(0,g.default)(L),(0,v.default)(L),(0,T.default)(L),(0,M.default)(L),(0,$.default)(L),(0,I.default)(L),(0,E.default)(L),(0,_.default)(L),(0,D.default)(L),(0,K.default)(L),(0,X.default)(L),(0,Q.default)(L),(0,te.default)(L),(0,ae.default)(L),(0,oe.default)(L),(0,se.default)(L),(0,O.default)(L),(0,P.default)(L),(0,U.default)(L),(0,q.default)(L),(0,fe.default)(L),(0,ce.default)(L),(0,ke.default)(L),(0,Te.default)(L),(0,Se.default)(L),(0,$e.default)(L),(0,Oe.default)(L)}}},{"./urlMix":"2mRAc","./attrMix":"2EA19","./playMix":"fD2Tc","./pauseMix":"c3LGJ","./toggleMix":"fVsAa","./seekMix":"dmROF","./volumeMix":"9jtfB","./currentTimeMix":"7NCDR","./durationMix":"YS7JL","./switchMix":"dzUqN","./playbackRateMix":"5I2mT","./aspectRatioMix":"7m6R8","./screenshotMix":"2dgtR","./fullscreenMix":"fKDW8","./fullscreenWebMix":"lNvYI","./pipMix":"8j7oC","./loadedMix":"dwVOT","./playedMix":"dDeLx","./playingMix":"ceoBp","./autoSizeMix":"lcWXX","./rectMix":"f7y88","./flipMix":"l4qt5","./miniMix":"9ZPBQ","./posterMix":"5K8hA","./autoHeightMix":"3T5ls","./cssVarMix":"6KfHs","./themeMix":"7lcSc","./typeMix":"8JgTw","./stateMix":"cebt1","./subtitleOffsetMix":"hJvIy","./airplayMix":"4Tp0U","./qualityMix":"3wZgN","./optionInit":"iPdgW","./eventInit":"3mj0J","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"2mRAc":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{option:r,template:{$video:n}}=t;(0,e.def)(t,"url",{get:()=>n.src,async set(i){if(i){const u=t.url,a=r.type||(0,e.getExt)(i),l=r.customType[a];a&&l?(await(0,e.sleep)(),t.loading.show=!0,l.call(t,n,i,t)):(URL.revokeObjectURL(u),n.src=i),u!==t.url&&(t.option.url=i,t.isReady&&u&&t.once("video:canplay",()=>{t.emit("restart",i)}))}else await(0,e.sleep)(),t.loading.show=!0}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"2EA19":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{template:{$video:r}}=t;(0,e.def)(t,"attr",{value(n,i){if(i===void 0)return r[n];r[n]=i}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],fD2Tc:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{i18n:r,notice:n,option:i,constructor:{instances:u},template:{$video:a}}=t;(0,e.def)(t,"play",{value:async function(){const l=await a.play();if(n.show=r.get("Play"),t.emit("play"),i.mutex)for(let c=0;ct.playing?t.pause():t.play()})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],dmROF:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{notice:r}=t;(0,e.def)(t,"seek",{set(n){t.currentTime=n,t.emit("seek",t.currentTime),t.duration&&(r.show=`${(0,e.secondToTime)(t.currentTime)} / ${(0,e.secondToTime)(t.duration)}`)}}),(0,e.def)(t,"forward",{set(n){t.seek=t.currentTime+n}}),(0,e.def)(t,"backward",{set(n){t.seek=t.currentTime-n}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"9jtfB":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{template:{$video:r},i18n:n,notice:i,storage:u}=t;(0,e.def)(t,"volume",{get:()=>r.volume||0,set:a=>{r.volume=(0,e.clamp)(a,0,1),i.show=`${n.get("Volume")}: ${parseInt(100*r.volume,10)}`,r.volume!==0&&u.set("volume",r.volume)}}),(0,e.def)(t,"muted",{get:()=>r.muted,set:a=>{r.muted=a,t.emit("muted",a)}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"7NCDR":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{$video:r}=t.template;(0,e.def)(t,"currentTime",{get:()=>r.currentTime||0,set:n=>{n=parseFloat(n),Number.isNaN(n)||(r.currentTime=(0,e.clamp)(n,0,t.duration))}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],YS7JL:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){(0,e.def)(t,"duration",{get:()=>{const{duration:r}=t.template.$video;return r===1/0?0:r||0}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],dzUqN:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){function r(n,i){return new Promise((u,a)=>{if(n===t.url)return;const{playing:l,aspectRatio:c,playbackRate:p}=t;t.pause(),t.url=n,t.notice.show="",t.once("video:error",a),t.once("video:canplay",async()=>{t.playbackRate=p,t.aspectRatio=c,t.currentTime=i,l&&await t.play(),t.notice.show="",u()})})}(0,e.def)(t,"switchQuality",{value:n=>r(n,t.currentTime)}),(0,e.def)(t,"switchUrl",{value:n=>r(n,0)}),(0,e.def)(t,"switch",{set:t.switchUrl})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"5I2mT":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{template:{$video:r},i18n:n,notice:i}=t;(0,e.def)(t,"playbackRate",{get:()=>r.playbackRate,set(u){if(u){if(u===r.playbackRate)return;r.playbackRate=u,i.show=`${n.get("Rate")}: ${u===1?n.get("Normal"):`${u}x`}`}else t.playbackRate=1}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"7m6R8":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{i18n:r,notice:n,template:{$video:i,$player:u}}=t;(0,e.def)(t,"aspectRatio",{get:()=>u.dataset.aspectRatio||"default",set(a){if(a||(a="default"),a==="default")(0,e.setStyle)(i,"width",null),(0,e.setStyle)(i,"height",null),(0,e.setStyle)(i,"margin",null),delete u.dataset.aspectRatio;else{const l=a.split(":").map(Number),{clientWidth:c,clientHeight:p}=u,d=c/p,y=l[0]/l[1];d>y?((0,e.setStyle)(i,"width",y*p+"px"),(0,e.setStyle)(i,"height","100%"),(0,e.setStyle)(i,"margin","0 auto")):((0,e.setStyle)(i,"width","100%"),(0,e.setStyle)(i,"height",c/y+"px"),(0,e.setStyle)(i,"margin","auto 0")),u.dataset.aspectRatio=a}n.show=`${r.get("Aspect Ratio")}: ${a==="default"?r.get("Default"):a}`,t.emit("aspectRatio",a)}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"2dgtR":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{notice:r,template:{$video:n}}=t,i=(0,e.createElement)("canvas");(0,e.def)(t,"getDataURL",{value:()=>new Promise((u,a)=>{try{i.width=n.videoWidth,i.height=n.videoHeight,i.getContext("2d").drawImage(n,0,0),u(i.toDataURL("image/png"))}catch(l){r.show=l,a(l)}})}),(0,e.def)(t,"getBlobUrl",{value:()=>new Promise((u,a)=>{try{i.width=n.videoWidth,i.height=n.videoHeight,i.getContext("2d").drawImage(n,0,0),i.toBlob(l=>{u(URL.createObjectURL(l))})}catch(l){r.show=l,a(l)}})}),(0,e.def)(t,"screenshot",{value:async()=>{const u=await t.getDataURL();return(0,e.download)(u,`artplayer_${(0,e.secondToTime)(n.currentTime)}.png`),t.emit("screenshot",u),u}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],fKDW8:[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("../libs/screenfull"),r=e.interopDefault(t),n=o("../utils");s.default=function(i){const{i18n:u,notice:a,template:{$video:l,$player:c}}=i;i.once("video:loadedmetadata",()=>{r.default.isEnabled?(p=>{r.default.on("change",()=>{p.emit("fullscreen",r.default.isFullscreen)}),(0,n.def)(p,"fullscreen",{get:()=>r.default.isFullscreen,async set(d){d?(p.state="fullscreen",await r.default.request(c),(0,n.addClass)(c,"art-fullscreen")):(await r.default.exit(),(0,n.removeClass)(c,"art-fullscreen")),p.emit("resize")}})})(i):document.fullscreenEnabled||l.webkitSupportsFullscreen?(p=>{(0,n.def)(p,"fullscreen",{get:()=>l.webkitDisplayingFullscreen,set(d){d?(p.state="fullscreen",l.webkitEnterFullscreen(),p.emit("fullscreen",!0)):(l.webkitExitFullscreen(),p.emit("fullscreen",!1)),p.emit("resize")}})})(i):(0,n.def)(i,"fullscreen",{get:()=>!1,set(){a.show=u.get("Fullscreen Not Supported")}}),(0,n.def)(i,"fullscreen",(0,n.get)(i,"fullscreen"))})}},{"../libs/screenfull":"lUahW","../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],lUahW:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);const e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],t=(()=>{if(typeof document>"u")return!1;const i=e[0],u={};for(const a of e)if(a[1]in document){for(const[l,c]of a.entries())u[i[l]]=c;return u}return!1})(),r={change:t.fullscreenchange,error:t.fullscreenerror};let n={request:(i=document.documentElement,u)=>new Promise((a,l)=>{const c=()=>{n.off("change",c),a()};n.on("change",c);const p=i[t.requestFullscreen](u);p instanceof Promise&&p.then(c).catch(l)}),exit:()=>new Promise((i,u)=>{if(!n.isFullscreen)return void i();const a=()=>{n.off("change",a),i()};n.on("change",a);const l=document[t.exitFullscreen]();l instanceof Promise&&l.then(a).catch(u)}),toggle:(i,u)=>n.isFullscreen?n.exit():n.request(i,u),onchange(i){n.on("change",i)},onerror(i){n.on("error",i)},on(i,u){const a=r[i];a&&document.addEventListener(a,u,!1)},off(i,u){const a=r[i];a&&document.removeEventListener(a,u,!1)},raw:t};Object.defineProperties(n,{isFullscreen:{get:()=>!!document[t.fullscreenElement]},element:{enumerable:!0,get:()=>document[t.fullscreenElement]},isEnabled:{enumerable:!0,get:()=>!!document[t.fullscreenEnabled]}}),t||(n={isEnabled:!1}),s.default=n},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],lNvYI:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{constructor:r,template:{$container:n,$player:i}}=t;let u="";(0,e.def)(t,"fullscreenWeb",{get:()=>(0,e.hasClass)(i,"art-fullscreen-web"),set(a){a?(u=i.style.cssText,r.FULLSCREEN_WEB_IN_BODY&&(0,e.append)(document.body,i),t.state="fullscreenWeb",(0,e.setStyle)(i,"width","100%"),(0,e.setStyle)(i,"height","100%"),(0,e.addClass)(i,"art-fullscreen-web"),t.emit("fullscreenWeb",!0)):(r.FULLSCREEN_WEB_IN_BODY&&(0,e.append)(n,i),u&&(i.style.cssText=u,u=""),(0,e.removeClass)(i,"art-fullscreen-web"),t.emit("fullscreenWeb",!1)),t.emit("resize")}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"8j7oC":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{i18n:r,notice:n,template:{$video:i}}=t;document.pictureInPictureEnabled?function(u){const{template:{$video:a},proxy:l,notice:c}=u;a.disablePictureInPicture=!1,(0,e.def)(u,"pip",{get:()=>document.pictureInPictureElement,set(p){p?(u.state="pip",a.requestPictureInPicture().catch(d=>{throw c.show=d,d})):document.exitPictureInPicture().catch(d=>{throw c.show=d,d})}}),l(a,"enterpictureinpicture",()=>{u.emit("pip",!0)}),l(a,"leavepictureinpicture",()=>{u.emit("pip",!1)})}(t):i.webkitSupportsPresentationMode?function(u){const{$video:a}=u.template;a.webkitSetPresentationMode("inline"),(0,e.def)(u,"pip",{get:()=>a.webkitPresentationMode==="picture-in-picture",set(l){l?(u.state="pip",a.webkitSetPresentationMode("picture-in-picture"),u.emit("pip",!0)):(a.webkitSetPresentationMode("inline"),u.emit("pip",!1))}})}(t):(0,e.def)(t,"pip",{get:()=>!1,set(){n.show=r.get("PIP Not Supported")}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],dwVOT:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{$video:r}=t.template;(0,e.def)(t,"loaded",{get:()=>t.loadedTime/r.duration}),(0,e.def)(t,"loadedTime",{get:()=>r.buffered.length?r.buffered.end(r.buffered.length-1):0})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],dDeLx:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){(0,e.def)(t,"played",{get:()=>t.currentTime/t.duration})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],ceoBp:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{$video:r}=t.template;(0,e.def)(t,"playing",{get:()=>r.currentTime>0&&!r.paused&&!r.ended&&r.readyState>2})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],lcWXX:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{$container:r,$player:n,$video:i}=t.template;(0,e.def)(t,"autoSize",{value(){const{videoWidth:u,videoHeight:a}=i,{width:l,height:c}=r.getBoundingClientRect(),p=u/a;if(l/c>p){const d=c*p/l*100;(0,e.setStyle)(n,"width",`${d}%`),(0,e.setStyle)(n,"height","100%")}else{const d=l/p/c*100;(0,e.setStyle)(n,"width","100%"),(0,e.setStyle)(n,"height",`${d}%`)}t.emit("autoSize",{width:t.width,height:t.height})}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],f7y88:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){(0,e.def)(t,"rect",{get:()=>t.template.$player.getBoundingClientRect()});const r=["bottom","height","left","right","top","width"];for(let n=0;nt.rect[i]})}(0,e.def)(t,"x",{get:()=>t.left+window.pageXOffset}),(0,e.def)(t,"y",{get:()=>t.top+window.pageYOffset})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],l4qt5:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{template:{$player:r},i18n:n,notice:i}=t;(0,e.def)(t,"flip",{get:()=>r.dataset.flip||"normal",set(u){u||(u="normal"),u==="normal"?delete r.dataset.flip:r.dataset.flip=u,i.show=`${n.get("Video Flip")}: ${n.get((0,e.capitalize)(u))}`,t.emit("flip",u)}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"9ZPBQ":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{icons:r,proxy:n,storage:i,template:{$player:u,$video:a}}=t;let l=!1,c=0,p=0;function d(){const{$mini:w}=t.template;w&&((0,e.removeClass)(u,"art-mini"),(0,e.setStyle)(w,"display","none"),u.prepend(a),t.emit("mini",!1))}function y(w,x){t.playing?((0,e.setStyle)(w,"display","none"),(0,e.setStyle)(x,"display","flex")):((0,e.setStyle)(w,"display","flex"),(0,e.setStyle)(x,"display","none"))}function m(){const{$mini:w}=t.template,x=w.getBoundingClientRect(),b=window.innerHeight-x.height-50,g=window.innerWidth-x.width-50;i.set("top",b),i.set("left",g),(0,e.setStyle)(w,"top",`${b}px`),(0,e.setStyle)(w,"left",`${g}px`)}(0,e.def)(t,"mini",{get:()=>(0,e.hasClass)(u,"art-mini"),set(w){if(w){t.state="mini",(0,e.addClass)(u,"art-mini");const x=function(){const{$mini:f}=t.template;if(f)return(0,e.append)(f,a),(0,e.setStyle)(f,"display","flex");{const v=(0,e.createElement)("div");(0,e.addClass)(v,"art-mini-popup"),(0,e.append)(document.body,v),t.template.$mini=v,(0,e.append)(v,a);const k=(0,e.append)(v,'
');(0,e.append)(k,r.close),n(k,"click",d);const T=(0,e.append)(v,'
'),j=(0,e.append)(T,r.play),M=(0,e.append)(T,r.pause);return n(j,"click",()=>t.play()),n(M,"click",()=>t.pause()),y(j,M),t.on("video:playing",()=>y(j,M)),t.on("video:pause",()=>y(j,M)),t.on("video:timeupdate",()=>y(j,M)),n(v,"mousedown",S=>{l=S.button===0,c=S.pageX,p=S.pageY}),t.on("document:mousemove",S=>{if(l){(0,e.addClass)(v,"art-mini-droging");const $=S.pageX-c,B=S.pageY-p;(0,e.setStyle)(v,"transform",`translate(${$}px, ${B}px)`)}}),t.on("document:mouseup",()=>{if(l){l=!1,(0,e.removeClass)(v,"art-mini-droging");const S=v.getBoundingClientRect();i.set("left",S.left),i.set("top",S.top),(0,e.setStyle)(v,"left",`${S.left}px`),(0,e.setStyle)(v,"top",`${S.top}px`),(0,e.setStyle)(v,"transform",null)}}),v}}(),b=i.get("top"),g=i.get("left");b&&g?((0,e.setStyle)(x,"top",`${b}px`),(0,e.setStyle)(x,"left",`${g}px`),(0,e.isInViewport)(x)||m()):m(),t.emit("mini",!0)}else d()}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"5K8hA":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{template:{$poster:r}}=t;(0,e.def)(t,"poster",{get:()=>{try{return r.style.backgroundImage.match(/"(.*)"/)[1]}catch{return""}},set(n){(0,e.setStyle)(r,"backgroundImage",`url(${n})`)}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"3T5ls":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{template:{$container:r,$video:n}}=t;(0,e.def)(t,"autoHeight",{value(){const{clientWidth:i}=r,{videoHeight:u,videoWidth:a}=n,l=u*(i/a);(0,e.setStyle)(r,"height",l+"px"),t.emit("autoHeight",l)}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"6KfHs":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{$player:r}=t.template;(0,e.def)(t,"cssVar",{value:(n,i)=>i?r.style.setProperty(n,i):getComputedStyle(r).getPropertyValue(n)})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"7lcSc":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){(0,e.def)(t,"theme",{get:()=>t.cssVar("--art-theme"),set(r){t.cssVar("--art-theme",r)}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"8JgTw":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){(0,e.def)(t,"type",{get:()=>t.option.type,set(r){t.option.type=r}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],cebt1:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const r=["mini","pip","fullscreen","fullscreenWeb"];(0,e.def)(t,"state",{get:()=>r.find(n=>t[n])||"standard",set(n){for(let i=0;i{l=[]}),(0,e.def)(t,"subtitleOffset",{get:()=>a,set(c){if(i.$track&&i.$track.track){const p=Array.from(i.$track.track.cues);a=r(c,-5,5);for(let d=0;d{switch(l.availability){case"available":a=!0;break;case"not-available":a=!1}}):a=!1,(0,e.def)(t,"airplay",{value(){a?(u.webkitShowPlaybackTargetPicker(),t.emit("airplay")):n.show=r.get("AirPlay Not Available")}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"3wZgN":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){(0,e.def)(t,"quality",{set(r){const{controls:n,notice:i,i18n:u}=t,a=r.find(l=>l.default)||r[0];n.update({name:"quality",position:"right",index:10,style:{marginRight:"10px"},html:a?a.html:"",selector:r,async onSelect(l){await t.switchQuality(l.url),i.show=`${u.get("Switch Video")}: ${l.html}`}})}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],iPdgW:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{option:r,storage:n,template:{$video:i,$poster:u}}=t;for(const l in r.moreVideoAttr)t.attr(l,r.moreVideoAttr[l]);r.muted&&(t.muted=r.muted),r.volume&&(i.volume=(0,e.clamp)(r.volume,0,1));const a=n.get("volume");typeof a=="number"&&(i.volume=(0,e.clamp)(a,0,1)),r.poster&&(0,e.setStyle)(u,"backgroundImage",`url(${r.poster})`),r.autoplay&&(i.autoplay=r.autoplay),r.playsInline&&(i.playsInline=!0,i["webkit-playsinline"]=!0),r.theme&&(r.cssVar["--art-theme"]=r.theme);for(const l in r.cssVar)t.cssVar(l,r.cssVar[l]);t.url=r.url}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"3mj0J":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("../config"),r=e.interopDefault(t),n=o("../utils");s.default=function(i){const{i18n:u,notice:a,option:l,constructor:c,proxy:p,template:{$player:d,$video:y,$poster:m}}=i;let w=0;for(let x=0;x{i.emit(`video:${b.type}`,b)});i.on("video:canplay",()=>{w=0,i.loading.show=!1}),i.once("video:canplay",()=>{i.loading.show=!1,i.controls.show=!0,i.mask.show=!0,i.isReady=!0,i.emit("ready")}),i.on("video:ended",()=>{l.loop?(i.seek=0,i.play(),i.controls.show=!1,i.mask.show=!1):(i.controls.show=!0,i.mask.show=!0)}),i.on("video:error",async x=>{w{i.emit("resize"),n.isMobile&&(i.loading.show=!1,i.controls.show=!0,i.mask.show=!0)}),i.on("video:loadstart",()=>{i.loading.show=!0,i.mask.show=!1,i.controls.show=!0}),i.on("video:pause",()=>{i.controls.show=!0,i.mask.show=!0}),i.on("video:play",()=>{i.mask.show=!1,(0,n.setStyle)(m,"display","none")}),i.on("video:playing",()=>{i.mask.show=!1}),i.on("video:progress",()=>{i.playing&&(i.loading.show=!1)}),i.on("video:seeked",()=>{i.loading.show=!1,i.mask.show=!0}),i.on("video:seeking",()=>{i.loading.show=!0,i.mask.show=!1}),i.on("video:timeupdate",()=>{i.mask.show=!1}),i.on("video:waiting",()=>{i.loading.show=!0,i.mask.show=!1})}},{"../config":"9Xmqu","../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"14IBq":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("../utils"),r=o("../utils/component"),n=e.interopDefault(r),i=o("./fullscreen"),u=e.interopDefault(i),a=o("./fullscreenWeb"),l=e.interopDefault(a),c=o("./pip"),p=e.interopDefault(c),d=o("./playAndPause"),y=e.interopDefault(d),m=o("./progress"),w=e.interopDefault(m),x=o("./time"),b=e.interopDefault(x),g=o("./volume"),f=e.interopDefault(g),v=o("./setting"),k=e.interopDefault(v),T=o("./thumbnails"),j=e.interopDefault(T),M=o("./screenshot"),S=e.interopDefault(M),$=o("./airplay"),B=e.interopDefault($);class I extends n.default{constructor(E){super(E),this.name="control",this.timer=Date.now();const{constructor:H}=E,{$player:_}=this.art.template;E.on("mousemove",()=>{t.isMobile||(this.show=!0)}),E.on("click",()=>{t.isMobile?this.toggle():this.show=!0}),E.on("video:timeupdate",()=>{!E.isInput&&E.playing&&this.show&&Date.now()-this.timer>=H.CONTROL_HIDE_TIME&&(this.show=!1)}),E.on("control",R=>{R?((0,t.removeClass)(_,"art-hide-cursor"),(0,t.addClass)(_,"art-hover"),this.timer=Date.now()):((0,t.addClass)(_,"art-hide-cursor"),(0,t.removeClass)(_,"art-hover"))}),this.init()}init(){const{option:E}=this.art;E.isLive||this.add((0,w.default)({name:"progress",position:"top",index:10})),!E.thumbnails.url||E.isLive||t.isMobile||this.add((0,j.default)({name:"thumbnails",position:"top",index:20})),this.add((0,y.default)({name:"playAndPause",position:"left",index:10})),this.add((0,f.default)({name:"volume",position:"left",index:20})),E.isLive||this.add((0,b.default)({name:"time",position:"left",index:30})),E.quality.length&&(0,t.sleep)().then(()=>{this.art.quality=E.quality}),E.screenshot&&!t.isMobile&&this.add((0,S.default)({name:"screenshot",position:"right",index:20})),E.setting&&this.add((0,k.default)({name:"setting",position:"right",index:30})),E.pip&&this.add((0,p.default)({name:"pip",position:"right",index:40})),E.airplay&&window.WebKitPlaybackTargetAvailabilityEvent&&this.add((0,B.default)({name:"airplay",position:"right",index:50})),E.fullscreenWeb&&this.add((0,l.default)({name:"fullscreenWeb",position:"right",index:60})),E.fullscreen&&this.add((0,u.default)({name:"fullscreen",position:"right",index:70}));for(let H=0;HNumber(b.dataset.index)>=Number(y.dataset.index));w?w.insertAdjacentElement("beforebegin",y):(0,t.append)(this.$parent,y),c.html&&(0,t.append)(y,c.html),c.style&&(0,t.setStyles)(y,c.style),c.tooltip&&(0,t.tooltip)(y,c.tooltip);const x=[];if(c.click){const b=this.art.events.proxy(y,"click",g=>{g.preventDefault(),c.click.call(this.art,this,g)});x.push(b)}return c.selector&&["left","right"].includes(c.position)&&this.addSelector(c,y,x),this[p]=y,this.cache.set(p,{$ref:y,events:x,option:c}),c.mounted&&c.mounted.call(this.art,y),y}addSelector(l,c,p){const{hover:d,proxy:y}=this.art.events;(0,t.addClass)(c,"art-control-selector");const m=(0,t.createElement)("div");(0,t.addClass)(m,"art-selector-value"),(0,t.append)(m,l.html),c.innerText="",(0,t.append)(c,m);const w=l.selector.map((f,v)=>`
${f.html}
`).join(""),x=(0,t.createElement)("div");(0,t.addClass)(x,"art-selector-list"),(0,t.append)(x,w),(0,t.append)(c,x);const b=()=>{const f=(0,t.getStyle)(c,"width")/2-(0,t.getStyle)(x,"width")/2;x.style.left=`${f}px`};d(c,b);const g=y(x,"click",async f=>{const v=(f.composedPath()||[]).find(j=>(0,t.hasClass)(j,"art-selector-item"));if(!v)return;(0,t.inverseClass)(v,"art-current");const k=Number(v.dataset.index),T=l.selector[k]||{};if(m.innerText=v.innerText,l.onSelect){const j=await l.onSelect.call(this.art,T,v,f);(0,r.isStringOrNumber)(j)&&(m.innerHTML=j)}b()});p.push(g)}remove(l){const c=this.cache.get(l);(0,n.errorHandle)(c,`Can't find [${l}] from the [${this.name}]`),c.option.beforeUnmount&&c.option.beforeUnmount.call(this.art,c.$ref);for(let p=0;p({...t,tooltip:r.i18n.get("Fullscreen"),mounted:n=>{const{proxy:i,icons:u,i18n:a}=r,l=(0,e.append)(n,u.fullscreenOn),c=(0,e.append)(n,u.fullscreenOff);(0,e.setStyle)(c,"display","none"),i(n,"click",()=>{r.fullscreen=!r.fullscreen}),r.on("fullscreen",p=>{p?((0,e.tooltip)(n,a.get("Exit Fullscreen")),(0,e.setStyle)(l,"display","none"),(0,e.setStyle)(c,"display","inline-flex")):((0,e.tooltip)(n,a.get("Fullscreen")),(0,e.setStyle)(l,"display","inline-flex"),(0,e.setStyle)(c,"display","none"))})}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"66eEC":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){return r=>({...t,tooltip:r.i18n.get("Web Fullscreen"),mounted:n=>{const{proxy:i,icons:u,i18n:a}=r,l=(0,e.append)(n,u.fullscreenWebOn),c=(0,e.append)(n,u.fullscreenWebOff);(0,e.setStyle)(c,"display","none"),i(n,"click",()=>{r.fullscreenWeb=!r.fullscreenWeb}),r.on("fullscreenWeb",p=>{p?((0,e.tooltip)(n,a.get("Exit Web Fullscreen")),(0,e.setStyle)(l,"display","none"),(0,e.setStyle)(c,"display","inline-flex")):((0,e.tooltip)(n,a.get("Web Fullscreen")),(0,e.setStyle)(l,"display","inline-flex"),(0,e.setStyle)(c,"display","none"))})}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],kCFkA:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){return r=>({...t,tooltip:r.i18n.get("PIP Mode"),mounted:n=>{const{proxy:i,icons:u,i18n:a}=r;(0,e.append)(n,u.pip),i(n,"click",()=>{r.pip=!r.pip}),r.on("pip",l=>{(0,e.tooltip)(n,a.get(l?"Exit PIP Mode":"PIP Mode"))})}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],iRhgD:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){return r=>({...t,mounted:n=>{const{proxy:i,icons:u,i18n:a}=r,l=(0,e.append)(n,u.play),c=(0,e.append)(n,u.pause);function p(){(0,e.setStyle)(l,"display","flex"),(0,e.setStyle)(c,"display","none")}function d(){(0,e.setStyle)(l,"display","none"),(0,e.setStyle)(c,"display","flex")}(0,e.tooltip)(l,a.get("Play")),(0,e.tooltip)(c,a.get("Pause")),i(l,"click",()=>{r.play()}),i(c,"click",()=>{r.pause()}),r.playing?d():p(),r.on("video:playing",()=>{d()}),r.on("video:pause",()=>{p()})}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],aBBSH:[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s),e.export(s,"getPosFromEvent",()=>r),e.export(s,"setCurrentTime",()=>n);var t=o("../utils");function r(i,u){const{$progress:a}=i.template,{left:l}=a.getBoundingClientRect(),c=t.isMobile?u.touches[0].clientX:u.clientX,p=(0,t.clamp)(c-l,0,a.clientWidth),d=p/a.clientWidth*i.duration;return{second:d,time:(0,t.secondToTime)(d),width:p,percentage:(0,t.clamp)(p/a.clientWidth,0,1)}}function n(i,u){if(i.isRotate){const a=u.touches[0].clientY/i.height,l=a*i.duration;i.emit("setBar","played",a),i.seek=l}else{const{second:a,percentage:l}=r(i,u);i.emit("setBar","played",l),i.seek=a}}s.default=function(i){return u=>{const{icons:a,option:l,proxy:c}=u;return{...i,html:'
',mounted:p=>{let d=!1;const y=(0,t.query)(".art-progress-hover",p),m=(0,t.query)(".art-progress-loaded",p),w=(0,t.query)(".art-progress-played",p),x=(0,t.query)(".art-progress-highlight",p),b=(0,t.query)(".art-progress-indicator",p),g=(0,t.query)(".art-progress-tip",p);function f(v,k){v==="loaded"&&(0,t.setStyle)(m,"width",100*k+"%"),v==="played"&&((0,t.setStyle)(w,"width",100*k+"%"),(0,t.setStyle)(b,"left",100*k+"%"))}a.indicator?(0,t.append)(b,a.indicator):(0,t.setStyle)(b,"backgroundColor","var(--art-theme)"),u.on("video:loadedmetadata",()=>{for(let v=0;v`;(0,t.append)(x,j)}}),f("loaded",u.loaded),u.on("setBar",(v,k)=>{f(v,k)}),u.on("video:progress",()=>{f("loaded",u.loaded)}),u.constructor.USE_RAF?u.on("raf",()=>{f("played",u.played)}):u.on("video:timeupdate",()=>{f("played",u.played)}),u.on("video:ended",()=>{f("played",1)}),t.isMobile||(c(p,"click",v=>{v.target!==b&&n(u,v)}),c(p,"mousemove",v=>{(function(k){const{width:T}=r(u,k);(0,t.setStyle)(y,"width",`${T}px`),(0,t.setStyle)(y,"display","flex")})(v),(0,t.setStyle)(g,"display","flex"),(0,t.includeFromEvent)(v,x)?function(k){const{width:T}=r(u,k),{text:j}=k.target.dataset;g.innerHTML=j;const M=g.clientWidth;T<=M/2?(0,t.setStyle)(g,"left",0):T>p.clientWidth-M/2?(0,t.setStyle)(g,"left",p.clientWidth-M+"px"):(0,t.setStyle)(g,"left",T-M/2+"px")}(v):function(k){const{width:T,time:j}=r(u,k);g.innerHTML=j;const M=g.clientWidth;T<=M/2?(0,t.setStyle)(g,"left",0):T>p.clientWidth-M/2?(0,t.setStyle)(g,"left",p.clientWidth-M+"px"):(0,t.setStyle)(g,"left",T-M/2+"px")}(v)}),c(p,"mouseleave",()=>{(0,t.setStyle)(g,"display","none"),(0,t.setStyle)(y,"display","none")}),c(p,"mousedown",v=>{d=v.button===0}),u.on("document:mousemove",v=>{if(d){const{second:k,percentage:T}=r(u,v);f("played",T),u.seek=k}}),u.on("document:mouseup",()=>{d&&(d=!1)}))}}}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"7H0CE":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){return r=>({...t,style:e.isMobile?{fontSize:"12px",padding:"0 5px"}:{cursor:"auto",padding:"0 10px"},mounted:n=>{function i(){const a=`${(0,e.secondToTime)(r.currentTime)} / ${(0,e.secondToTime)(r.duration)}`;a!==n.innerText&&(n.innerText=a)}i();const u=["video:loadedmetadata","video:timeupdate","video:progress"];for(let a=0;a({...t,mounted:n=>{const{proxy:i,icons:u}=r,a=(0,e.append)(n,u.volume),l=(0,e.append)(n,u.volumeClose),c=(0,e.append)(n,'
'),p=(0,e.append)(c,'
'),d=(0,e.append)(p,'
'),y=(0,e.append)(p,'
'),m=(0,e.append)(y,'
'),w=(0,e.append)(m,'
'),x=(0,e.append)(y,'
');function b(f){const{top:v,height:k}=y.getBoundingClientRect();return 1-(f.clientY-v)/k}function g(){if(r.muted||r.volume===0)(0,e.setStyle)(a,"display","none"),(0,e.setStyle)(l,"display","flex"),(0,e.setStyle)(x,"top","100%"),(0,e.setStyle)(w,"top","100%"),d.innerText=0;else{const f=100*r.volume;(0,e.setStyle)(a,"display","flex"),(0,e.setStyle)(l,"display","none"),(0,e.setStyle)(x,"top",100-f+"%"),(0,e.setStyle)(w,"top",100-f+"%"),d.innerText=Math.floor(f)}}if(g(),r.on("video:volumechange",g),i(a,"click",()=>{r.muted=!0}),i(l,"click",()=>{r.muted=!1}),e.isMobile)(0,e.setStyle)(c,"display","none");else{let f=!1;i(y,"mousedown",v=>{f=v.button===0,r.volume=b(v)}),r.on("document:mousemove",v=>{f&&(r.muted=!1,r.volume=b(v))}),r.on("document:mouseup",()=>{f&&(f=!1)})}}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"8BrCu":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){return r=>({...t,tooltip:r.i18n.get("Show Setting"),mounted:n=>{const{proxy:i,icons:u,i18n:a}=r;(0,e.append)(n,u.setting),i(n,"click",()=>{r.setting.toggle(),r.setting.updateStyle()}),r.on("setting",l=>{(0,e.tooltip)(n,a.get(l?"Hide Setting":"Show Setting"))})}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"2HiWx":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils"),t=o("./progress");s.default=function(r){return n=>({...r,mounted:i=>{const{option:u,template:{$progress:a,$video:l},events:{proxy:c,loadImg:p}}=n;let d=null,y=!1,m=!1;c(a,"mousemove",async w=>{y||(y=!0,d=await p(u.thumbnails.url),m=!0),m&&((0,e.setStyle)(i,"display","flex"),function(x){const{width:b}=(0,t.getPosFromEvent)(n,x),{url:g,number:f,column:v,width:k,height:T}=u.thumbnails,j=k||d.naturalWidth/v,M=T||j/(l.videoWidth/l.videoHeight),S=a.clientWidth/f,$=Math.floor(b/S),B=Math.ceil($/v)-1,I=$%v||v-1;(0,e.setStyle)(i,"backgroundImage",`url(${g})`),(0,e.setStyle)(i,"height",`${M}px`),(0,e.setStyle)(i,"width",`${j}px`),(0,e.setStyle)(i,"backgroundPosition",`-${I*j}px -${B*M}px`),b<=j/2?(0,e.setStyle)(i,"left",0):b>a.clientWidth-j/2?(0,e.setStyle)(i,"left",a.clientWidth-j+"px"):(0,e.setStyle)(i,"left",b-j/2+"px")}(w))}),c(a,"mouseleave",()=>{(0,e.setStyle)(i,"display","none")}),n.on("hover",w=>{w||(0,e.setStyle)(i,"display","none")})}})}},{"../utils":"h3rH9","./progress":"aBBSH","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],c1GeG:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){return r=>({...t,tooltip:r.i18n.get("Screenshot"),mounted:n=>{const{proxy:i,icons:u}=r;(0,e.append)(n,u.screenshot),i(n,"click",()=>{r.screenshot()})}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"6GRju":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){return r=>({...t,tooltip:r.i18n.get("AirPlay"),mounted:n=>{const{proxy:i,icons:u}=r;(0,e.append)(n,u.airplay),i(n,"click",()=>r.airplay())}})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"7iUum":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("../utils"),r=o("../utils/component"),n=e.interopDefault(r),i=o("./playbackRate"),u=e.interopDefault(i),a=o("./aspectRatio"),l=e.interopDefault(a),c=o("./flip"),p=e.interopDefault(c),d=o("./info"),y=e.interopDefault(d),m=o("./version"),w=e.interopDefault(m),x=o("./close"),b=e.interopDefault(x);class g extends n.default{constructor(v){super(v),this.name="contextmenu",this.$parent=v.template.$contextmenu,t.isMobile||this.init()}init(){const{option:v,proxy:k,template:{$player:T,$contextmenu:j}}=this.art;v.playbackRate&&this.add((0,u.default)({name:"playbackRate",index:10})),v.aspectRatio&&this.add((0,l.default)({name:"aspectRatio",index:20})),v.flip&&this.add((0,p.default)({name:"flip",index:30})),this.add((0,y.default)({name:"info",index:40})),this.add((0,w.default)({name:"version",index:50})),this.add((0,b.default)({name:"close",index:60}));for(let M=0;M{if(M.preventDefault(),!this.art.constructor.CONTEXTMENU)return;this.show=!0;const S=M.clientX,$=M.clientY,{height:B,width:I,left:C,top:E}=T.getBoundingClientRect(),{height:H,width:_}=j.getBoundingClientRect();let R=S-C,D=$-E;S+_>C+I&&(R=I-_),$+H>E+B&&(D=B-H),(0,t.setStyles)(j,{top:`${D}px`,left:`${R}px`})}),k(T,"click",M=>{(0,t.includeFromEvent)(M,j)||(this.show=!1)}),this.art.on("blur",()=>{this.show=!1})}}s.default=g},{"../utils":"h3rH9","../utils/component":"guki8","./playbackRate":"f1W36","./aspectRatio":"afxZC","./flip":"9jCuX","./info":"k8wIZ","./version":"bb0TU","./close":"9zTkI","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],f1W36:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){return r=>{const{i18n:n,constructor:{PLAYBACK_RATE:i}}=r,u=i.map(a=>`${a===1?n.get("Normal"):a.toFixed(1)}`).join("");return{...t,html:`${n.get("Play Speed")}: ${u}`,click:(a,l)=>{const{value:c}=l.target.dataset;c&&(r.playbackRate=Number(c),a.show=!1)},mounted:a=>{const l=(0,e.query)('[data-value="1"]',a);l&&(0,e.inverseClass)(l,"art-current"),r.on("video:ratechange",()=>{const c=(0,e.queryAll)("span",a).find(p=>Number(p.dataset.value)===r.playbackRate);c&&(0,e.inverseClass)(c,"art-current")})}}}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],afxZC:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){return r=>{const{i18n:n,constructor:{ASPECT_RATIO:i}}=r,u=i.map(a=>`${a==="default"?n.get("Default"):a}`).join("");return{...t,html:`${n.get("Aspect Ratio")}: ${u}`,click:(a,l)=>{const{value:c}=l.target.dataset;c&&(r.aspectRatio=c,a.show=!1)},mounted:a=>{const l=(0,e.query)('[data-value="default"]',a);l&&(0,e.inverseClass)(l,"art-current"),r.on("aspectRatio",c=>{const p=(0,e.queryAll)("span",a).find(d=>d.dataset.value===c);p&&(0,e.inverseClass)(p,"art-current")})}}}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"9jCuX":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){return r=>{const{i18n:n,constructor:{FLIP:i}}=r,u=i.map(a=>`${n.get((0,e.capitalize)(a))}`).join("");return{...t,html:`${n.get("Video Flip")}: ${u}`,click:(a,l)=>{const{value:c}=l.target.dataset;c&&(r.flip=c.toLowerCase(),a.show=!1)},mounted:a=>{const l=(0,e.query)('[data-value="normal"]',a);l&&(0,e.inverseClass)(l,"art-current"),r.on("flip",c=>{const p=(0,e.queryAll)("span",a).find(d=>d.dataset.value===c);p&&(0,e.inverseClass)(p,"art-current")})}}}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],k8wIZ:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s),s.default=function(e){return t=>({...e,html:t.i18n.get("Video Info"),click:r=>{t.info.show=!0,r.show=!1}})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],bb0TU:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s),s.default=function(e){return{...e,html:'ArtPlayer 5.1.1'}}},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"9zTkI":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s),s.default=function(e){return t=>({...e,html:t.i18n.get("Close"),click:r=>{r.show=!1}})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],hD2Lg:[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("./utils"),r=o("./utils/component"),n=e.interopDefault(r);class i extends n.default{constructor(a){super(a),this.name="info",t.isMobile||this.init()}init(){const{proxy:a,constructor:l,template:{$infoPanel:c,$infoClose:p,$video:d}}=this.art;a(p,"click",()=>{this.show=!1});let y=null;const m=(0,t.queryAll)("[data-video]",c)||[];this.art.on("destroy",()=>clearTimeout(y)),function w(){for(let x=0;xnull,this.init(d.option.subtitle);let y=!1;d.on("video:timeupdate",()=>{if(!this.url)return;const m=this.art.template.$video.webkitDisplayingFullscreen;typeof m=="boolean"&&m!==y&&(y=m,this.createTrack(m?"subtitles":"metadata",this.url))})}get url(){return this.art.template.$track.src}set url(d){this.switch(d)}get textTrack(){return this.art.template.$video.textTracks[0]}get activeCue(){return this.textTrack.activeCues[0]}style(d,y){const{$subtitle:m}=this.art.template;return typeof d=="object"?(0,t.setStyles)(m,d):(0,t.setStyle)(m,d,y)}update(){const{$subtitle:d}=this.art.template;d.innerHTML="",this.activeCue&&(this.art.option.subtitle.escape?d.innerHTML=this.activeCue.text.split(/\r?\n/).map(y=>`
${(0,t.escape)(y)}
`).join(""):d.innerHTML=this.activeCue.text,this.art.emit("subtitleUpdate",this.activeCue.text))}async switch(d,y={}){const{i18n:m,notice:w,option:x}=this.art,b={...x.subtitle,...y,url:d},g=await this.init(b);return y.name&&(w.show=`${m.get("Switch Subtitle")}: ${y.name}`),g}createTrack(d,y){const{template:m,proxy:w,option:x}=this.art,{$video:b,$track:g}=m,f=(0,t.createElement)("track");f.default=!0,f.kind=d,f.src=y,f.label=x.subtitle.name||"Artplayer",f.track.mode="hidden",this.eventDestroy(),(0,t.remove)(g),(0,t.append)(b,f),m.$track=f,this.eventDestroy=w(this.textTrack,"cuechange",()=>this.update())}async init(d){const{notice:y,template:{$subtitle:m}}=this.art;if((0,u.default)(d,l.default.subtitle),d.url)return this.style(d.style),fetch(d.url).then(w=>w.arrayBuffer()).then(w=>{const x=new TextDecoder(d.encoding).decode(w);switch(this.art.emit("subtitleLoad",d.url),d.type||(0,t.getExt)(d.url)){case"srt":{const b=(0,t.srtToVtt)(x),g=d.onVttLoad(b);return(0,t.vttToBlob)(g)}case"ass":{const b=(0,t.assToVtt)(x),g=d.onVttLoad(b);return(0,t.vttToBlob)(g)}case"vtt":{const b=d.onVttLoad(x);return(0,t.vttToBlob)(b)}default:return d.url}}).then(w=>(m.innerHTML="",this.url===w||(URL.revokeObjectURL(this.url),this.createTrack("metadata",w),this.art.emit("subtitleSwitch",w)),w)).catch(w=>{throw m.innerHTML="",y.show=w,w})}}s.default=c},{"./utils":"h3rH9","./utils/component":"guki8","option-validator":"bAWi2","./scheme":"AdvwB","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"1Epl5":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("../utils/error"),r=o("./clickInit"),n=e.interopDefault(r),i=o("./hoverInit"),u=e.interopDefault(i),a=o("./moveInit"),l=e.interopDefault(a),c=o("./resizeInit"),p=e.interopDefault(c),d=o("./gestureInit"),y=e.interopDefault(d),m=o("./viewInit"),w=e.interopDefault(m),x=o("./documentInit"),b=e.interopDefault(x),g=o("./updateInit"),f=e.interopDefault(g);s.default=class{constructor(v){this.destroyEvents=[],this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),this.loadImg=this.loadImg.bind(this),(0,n.default)(v,this),(0,u.default)(v,this),(0,l.default)(v,this),(0,p.default)(v,this),(0,y.default)(v,this),(0,w.default)(v,this),(0,b.default)(v,this),(0,f.default)(v,this)}proxy(v,k,T,j={}){if(Array.isArray(k))return k.map(S=>this.proxy(v,S,T,j));v.addEventListener(k,T,j);const M=()=>v.removeEventListener(k,T,j);return this.destroyEvents.push(M),M}hover(v,k,T){k&&this.proxy(v,"mouseenter",k),T&&this.proxy(v,"mouseleave",T)}loadImg(v){return new Promise((k,T)=>{let j;if(v instanceof HTMLImageElement)j=v;else{if(typeof v!="string")return T(new t.ArtPlayerError("Unable to get Image"));j=new Image,j.src=v}if(j.complete)return k(j);this.proxy(j,"load",()=>k(j)),this.proxy(j,"error",()=>T(new t.ArtPlayerError(`Failed to load Image: ${j.src}`)))})}remove(v){const k=this.destroyEvents.indexOf(v);k>-1&&(v(),this.destroyEvents.splice(k,1))}destroy(){for(let v=0;v{(0,e.includeFromEvent)(l,i)?(t.isInput=l.target.tagName==="INPUT",t.isFocus=!0,t.emit("focus",l)):(t.isInput=!1,t.isFocus=!1,t.emit("blur",l))});let a=0;r.proxy(u,"click",l=>{const c=Date.now(),{MOBILE_CLICK_PLAY:p,DBCLICK_TIME:d,MOBILE_DBCLICK_PLAY:y,DBCLICK_FULLSCREEN:m}=n;c-a<=d?(t.emit("dblclick",l),e.isMobile?!t.isLock&&y&&t.toggle():m&&(t.fullscreen=!t.fullscreen)):(t.emit("click",l),e.isMobile?!t.isLock&&p&&t.toggle():t.toggle()),a=c})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],kpTJf:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t,r){const{$player:n}=t.template;r.hover(n,i=>{(0,e.addClass)(n,"art-hover"),t.emit("hover",!0,i)},i=>{(0,e.removeClass)(n,"art-hover"),t.emit("hover",!1,i)})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],ef6qz:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s),s.default=function(e,t){const{$player:r}=e.template;t.proxy(r,"mousemove",n=>{e.emit("mousemove",n)})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"9TXOX":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t,r){const{option:n,constructor:i}=t;t.on("resize",()=>{const{aspectRatio:a,notice:l}=t;t.state==="standard"&&n.autoSize&&t.autoSize(),t.aspectRatio=a,l.show=""});const u=(0,e.debounce)(()=>t.emit("resize"),i.RESIZE_TIME);r.proxy(window,["orientationchange","resize"],()=>u()),screen&&screen.orientation&&screen.orientation.onchange&&r.proxy(screen.orientation,"change",()=>u())}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],dePMU:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils"),t=o("../control/progress");function r(n,i,u,a){var l=i-a,c=u-n,p=0;if(Math.abs(c)<2&&Math.abs(l)<2)return p;var d=function(y,m){return 180*Math.atan2(m,y)/Math.PI}(c,l);return d>=-45&&d<45?p=4:d>=45&&d<135?p=1:d>=-135&&d<-45?p=2:(d>=135&&d<=180||d>=-180&&d<-135)&&(p=3),p}s.default=function(n,i){if(e.isMobile&&!n.option.isLive){const{$video:u,$progress:a}=n.template;let l=null,c=!1,p=0,d=0,y=0;const m=b=>{if(b.touches.length===1&&!n.isLock){l===a&&(0,t.setCurrentTime)(n,b),c=!0;const{pageX:g,pageY:f}=b.touches[0];p=g,d=f,y=n.currentTime}},w=b=>{if(b.touches.length===1&&c&&n.duration){const{pageX:g,pageY:f}=b.touches[0],v=r(p,d,g,f),k=[3,4].includes(v),T=[1,2].includes(v);if(k&&!n.isRotate||T&&n.isRotate){const j=(0,e.clamp)((g-p)/n.width,-1,1),M=(0,e.clamp)((f-d)/n.height,-1,1),S=n.isRotate?M:j,$=l===u?n.constructor.TOUCH_MOVE_RATIO:1,B=(0,e.clamp)(y+n.duration*S*$,0,n.duration);n.seek=B,n.emit("setBar","played",(0,e.clamp)(B/n.duration,0,1)),n.notice.show=`${(0,e.secondToTime)(B)} / ${(0,e.secondToTime)(n.duration)}`}}},x=()=>{c&&(p=0,d=0,y=0,c=!1,l=null)};i.proxy(a,"touchstart",b=>{l=a,m(b)}),i.proxy(u,"touchstart",b=>{l=u,m(b)}),i.proxy(u,"touchmove",w),i.proxy(a,"touchmove",w),i.proxy(document,"touchend",x)}}},{"../utils":"h3rH9","../control/progress":"aBBSH","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],hDyWF:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t,r){const{option:n,constructor:i,template:{$container:u}}=t,a=(0,e.throttle)(()=>{t.emit("view",(0,e.isInViewport)(u,i.SCROLL_GAP))},i.SCROLL_TIME);r.proxy(window,"scroll",()=>a()),t.on("view",l=>{n.autoMini&&(t.mini=!l)})}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"7RjDP":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s),s.default=function(e,t){t.proxy(document,"mousemove",r=>{e.emit("document:mousemove",r)}),t.proxy(document,"mouseup",r=>{e.emit("document:mouseup",r)})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"8SmBT":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s),s.default=function(e){if(e.constructor.USE_RAF){let t=null;(function r(){e.playing&&e.emit("raf"),e.isDestroy||(t=requestAnimationFrame(r))})(),e.on("destroy",()=>{cancelAnimationFrame(t)})}}},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],eTow4:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("./utils");s.default=class{constructor(t){this.art=t,this.keys={},t.option.hotkey&&!e.isMobile&&this.init()}init(){const{proxy:t,constructor:r}=this.art;this.add(27,()=>{this.art.fullscreenWeb&&(this.art.fullscreenWeb=!1)}),this.add(32,()=>{this.art.toggle()}),this.add(37,()=>{this.art.backward=r.SEEK_STEP}),this.add(38,()=>{this.art.volume+=r.VOLUME_STEP}),this.add(39,()=>{this.art.forward=r.SEEK_STEP}),this.add(40,()=>{this.art.volume-=r.VOLUME_STEP}),t(window,"keydown",n=>{if(this.art.isFocus){const i=document.activeElement.tagName.toUpperCase(),u=document.activeElement.getAttribute("contenteditable");if(!(i==="INPUT"||i==="TEXTAREA"||u===""||u==="true"||n.altKey||n.ctrlKey||n.metaKey||n.shiftKey)){const a=this.keys[n.keyCode];if(a){n.preventDefault();for(let l=0;l{i.innerText="",(0,e.removeClass)(n,"art-notice-show")},r.NOTICE_TIME)):(0,e.removeClass)(n,"art-notice-show")}}},{"./utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"2etr0":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("./utils"),r=o("./utils/component"),n=e.interopDefault(r);class i extends n.default{constructor(a){super(a),this.name="mask";const{template:l,icons:c,events:p}=a,d=(0,t.append)(l.$state,c.state),y=(0,t.append)(l.$state,c.error);(0,t.setStyle)(y,"display","none"),a.on("destroy",()=>{(0,t.setStyle)(d,"display","none"),(0,t.setStyle)(y,"display",null)}),p.proxy(l.$state,"click",()=>a.play())}}s.default=i},{"./utils":"h3rH9","./utils/component":"guki8","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"6dYSr":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("../utils"),r=o("bundle-text:./loading.svg"),n=e.interopDefault(r),i=o("bundle-text:./state.svg"),u=e.interopDefault(i),a=o("bundle-text:./check.svg"),l=e.interopDefault(a),c=o("bundle-text:./play.svg"),p=e.interopDefault(c),d=o("bundle-text:./pause.svg"),y=e.interopDefault(d),m=o("bundle-text:./volume.svg"),w=e.interopDefault(m),x=o("bundle-text:./volume-close.svg"),b=e.interopDefault(x),g=o("bundle-text:./screenshot.svg"),f=e.interopDefault(g),v=o("bundle-text:./setting.svg"),k=e.interopDefault(v),T=o("bundle-text:./arrow-left.svg"),j=e.interopDefault(T),M=o("bundle-text:./arrow-right.svg"),S=e.interopDefault(M),$=o("bundle-text:./playback-rate.svg"),B=e.interopDefault($),I=o("bundle-text:./aspect-ratio.svg"),C=e.interopDefault(I),E=o("bundle-text:./config.svg"),H=e.interopDefault(E),_=o("bundle-text:./pip.svg"),R=e.interopDefault(_),D=o("bundle-text:./lock.svg"),Y=e.interopDefault(D),K=o("bundle-text:./unlock.svg"),G=e.interopDefault(K),X=o("bundle-text:./fullscreen-off.svg"),J=e.interopDefault(X),Q=o("bundle-text:./fullscreen-on.svg"),ee=e.interopDefault(Q),te=o("bundle-text:./fullscreen-web-off.svg"),re=e.interopDefault(te),ae=o("bundle-text:./fullscreen-web-on.svg"),ne=e.interopDefault(ae),oe=o("bundle-text:./switch-on.svg"),ie=e.interopDefault(oe),se=o("bundle-text:./switch-off.svg"),N=e.interopDefault(se),O=o("bundle-text:./flip.svg"),he=e.interopDefault(O),P=o("bundle-text:./error.svg"),W=e.interopDefault(P),U=o("bundle-text:./close.svg"),V=e.interopDefault(U),q=o("bundle-text:./airplay.svg"),le=e.interopDefault(q);s.default=class{constructor(fe){const ue={loading:n.default,state:u.default,play:p.default,pause:y.default,check:l.default,volume:w.default,volumeClose:b.default,screenshot:f.default,setting:k.default,pip:R.default,arrowLeft:j.default,arrowRight:S.default,playbackRate:B.default,aspectRatio:C.default,config:H.default,lock:Y.default,flip:he.default,unlock:G.default,fullscreenOff:J.default,fullscreenOn:ee.default,fullscreenWebOff:re.default,fullscreenWebOn:ne.default,switchOn:ie.default,switchOff:N.default,error:W.default,close:V.default,airplay:le.default,...fe.option.icons};for(const ce in ue)(0,t.def)(this,ce,{get:()=>(0,t.getIcon)(ce,ue[ce])})}}},{"../utils":"h3rH9","bundle-text:./loading.svg":"fY5Gt","bundle-text:./state.svg":"iNfLt","bundle-text:./check.svg":"jtE9u","bundle-text:./play.svg":"elgfY","bundle-text:./pause.svg":"eKokJ","bundle-text:./volume.svg":"hNB4y","bundle-text:./volume-close.svg":"i9vta","bundle-text:./screenshot.svg":"kB3Mf","bundle-text:./setting.svg":"3MONs","bundle-text:./arrow-left.svg":"iMCpk","bundle-text:./arrow-right.svg":"3oe4L","bundle-text:./playback-rate.svg":"liE22","bundle-text:./aspect-ratio.svg":"8HqYc","bundle-text:./config.svg":"hYAAH","bundle-text:./pip.svg":"jmNrH","bundle-text:./lock.svg":"cIqko","bundle-text:./unlock.svg":"65zy4","bundle-text:./fullscreen-off.svg":"jaJRT","bundle-text:./fullscreen-on.svg":"cRY1X","bundle-text:./fullscreen-web-off.svg":"3aVGL","bundle-text:./fullscreen-web-on.svg":"4DiVn","bundle-text:./switch-on.svg":"kwdKE","bundle-text:./switch-off.svg":"bWfXZ","bundle-text:./flip.svg":"h3zZ9","bundle-text:./error.svg":"7Oyth","bundle-text:./close.svg":"U5Jcy","bundle-text:./airplay.svg":"jK5Fx","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],fY5Gt:[function(o,h,s){h.exports=''},{}],iNfLt:[function(o,h,s){h.exports=''},{}],jtE9u:[function(o,h,s){h.exports=''},{}],elgfY:[function(o,h,s){h.exports=''},{}],eKokJ:[function(o,h,s){h.exports=''},{}],hNB4y:[function(o,h,s){h.exports=''},{}],i9vta:[function(o,h,s){h.exports=''},{}],kB3Mf:[function(o,h,s){h.exports=''},{}],"3MONs":[function(o,h,s){h.exports=''},{}],iMCpk:[function(o,h,s){h.exports=''},{}],"3oe4L":[function(o,h,s){h.exports=''},{}],liE22:[function(o,h,s){h.exports=''},{}],"8HqYc":[function(o,h,s){h.exports=``},{}],hYAAH:[function(o,h,s){h.exports=''},{}],jmNrH:[function(o,h,s){h.exports=''},{}],cIqko:[function(o,h,s){h.exports=''},{}],"65zy4":[function(o,h,s){h.exports=''},{}],jaJRT:[function(o,h,s){h.exports=''},{}],cRY1X:[function(o,h,s){h.exports=''},{}],"3aVGL":[function(o,h,s){h.exports=''},{}],"4DiVn":[function(o,h,s){h.exports=''},{}],kwdKE:[function(o,h,s){h.exports=''},{}],bWfXZ:[function(o,h,s){h.exports=''},{}],h3zZ9:[function(o,h,s){h.exports=''},{}],"7Oyth":[function(o,h,s){h.exports=''},{}],U5Jcy:[function(o,h,s){h.exports=''},{}],jK5Fx:[function(o,h,s){h.exports=''},{}],bRHiA:[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("./flip"),r=e.interopDefault(t),n=o("./aspectRatio"),i=e.interopDefault(n),u=o("./playbackRate"),a=e.interopDefault(u),l=o("./subtitleOffset"),c=e.interopDefault(l),p=o("../utils/component"),d=e.interopDefault(p),y=o("../utils/error"),m=o("../utils");class w extends d.default{constructor(b){super(b);const{option:g,controls:f,template:{$setting:v}}=b;this.name="setting",this.$parent=v,this.option=[],this.events=[],this.cache=new Map,g.setting&&(this.init(),b.on("blur",()=>{this.show&&(this.show=!1,this.render(this.option))}),b.on("focus",k=>{const T=(0,m.includeFromEvent)(k,f.setting),j=(0,m.includeFromEvent)(k,this.$parent);!this.show||T||j||(this.show=!1,this.render(this.option))}))}static makeRecursion(b,g,f){for(let v=0;v'),j=(0,m.createElement)("div");(0,m.addClass)(j,"art-setting-item-left-icon"),(0,m.append)(j,g.arrowLeft),(0,m.append)(T,j),(0,m.append)(T,b.$parentItem.html);const M=f(k,"click",()=>this.render(b.$parentList));return this.events.push(M),k}creatItem(b,g){const{icons:f,proxy:v,constructor:k}=this.art,T=(0,m.createElement)("div");(0,m.addClass)(T,"art-setting-item"),(0,m.setStyle)(T,"height",`${k.SETTING_ITEM_HEIGHT}px`),(0,m.isStringOrNumber)(g.name)&&(T.dataset.name=g.name),(0,m.isStringOrNumber)(g.value)&&(T.dataset.value=g.value);const j=(0,m.append)(T,'
'),M=(0,m.append)(T,'
'),S=(0,m.createElement)("div");switch((0,m.addClass)(S,"art-setting-item-left-icon"),b){case"switch":case"range":(0,m.append)(S,(0,m.isStringOrNumber)(g.icon)||g.icon instanceof Element?g.icon:f.config);break;case"selector":g.selector&&g.selector.length?(0,m.append)(S,(0,m.isStringOrNumber)(g.icon)||g.icon instanceof Element?g.icon:f.config):(0,m.append)(S,f.check)}(0,m.append)(j,S),g.$icon=S,(0,m.def)(g,"icon",{configurable:!0,get:()=>S.innerHTML,set(I){(0,m.isStringOrNumber)(I)&&(S.innerHTML=I)}});const $=(0,m.createElement)("div");(0,m.addClass)($,"art-setting-item-left-text"),(0,m.append)($,g.html||""),(0,m.append)(j,$),g.$html=$,(0,m.def)(g,"html",{configurable:!0,get:()=>$.innerHTML,set(I){(0,m.isStringOrNumber)(I)&&($.innerHTML=I)}});const B=(0,m.createElement)("div");switch((0,m.addClass)(B,"art-setting-item-right-tooltip"),(0,m.append)(B,g.tooltip||""),(0,m.append)(M,B),g.$tooltip=B,(0,m.def)(g,"tooltip",{configurable:!0,get:()=>B.innerHTML,set(I){(0,m.isStringOrNumber)(I)&&(B.innerHTML=I)}}),b){case"switch":{const I=(0,m.createElement)("div");(0,m.addClass)(I,"art-setting-item-right-icon");const C=(0,m.append)(I,f.switchOn),E=(0,m.append)(I,f.switchOff);(0,m.setStyle)(g.switch?E:C,"display","none"),(0,m.append)(M,I),g.$switch=g.switch,(0,m.def)(g,"switch",{configurable:!0,get:()=>g.$switch,set(H){g.$switch=H,H?((0,m.setStyle)(E,"display","none"),(0,m.setStyle)(C,"display",null)):((0,m.setStyle)(E,"display",null),(0,m.setStyle)(C,"display","none"))}});break}case"range":{const I=(0,m.createElement)("div");(0,m.addClass)(I,"art-setting-item-right-icon");const C=(0,m.append)(I,'');C.value=g.range[0]||0,C.min=g.range[1]||0,C.max=g.range[2]||10,C.step=g.range[3]||1,(0,m.addClass)(C,"art-setting-range"),(0,m.append)(M,I),g.$range=C,(0,m.def)(g,"range",{configurable:!0,get:()=>C.valueAsNumber,set(E){C.value=Number(E)}})}break;case"selector":if(g.selector&&g.selector.length){const I=(0,m.createElement)("div");(0,m.addClass)(I,"art-setting-item-right-icon"),(0,m.append)(I,f.arrowRight),(0,m.append)(M,I)}}switch(b){case"switch":if(g.onSwitch){const I=v(T,"click",async C=>{g.switch=await g.onSwitch.call(this.art,g,T,C)});this.events.push(I)}break;case"range":if(g.$range){if(g.onRange){const I=v(g.$range,"change",async C=>{g.tooltip=await g.onRange.call(this.art,g,T,C)});this.events.push(I)}if(g.onChange){const I=v(g.$range,"input",async C=>{g.tooltip=await g.onChange.call(this.art,g,T,C)});this.events.push(I)}}break;case"selector":{const I=v(T,"click",async C=>{if(g.selector&&g.selector.length)this.render(g.selector,g.width);else{(0,m.inverseClass)(T,"art-current");for(let E=0;E$?((0,m.setStyle)(k,"left",null),(0,m.setStyle)(k,"right",null)):((0,m.setStyle)(k,"left",`${B}px`),(0,m.setStyle)(k,"right","auto"))}}render(b,g){const{constructor:f}=this.art;if(this.cache.has(b)){const v=this.cache.get(b);(0,m.inverseClass)(v,"art-current"),(0,m.setStyle)(this.$parent,"width",`${v.dataset.width}px`),(0,m.setStyle)(this.$parent,"height",`${v.dataset.height}px`),this.updateStyle(Number(v.dataset.width))}else{const v=(0,m.createElement)("div");(0,m.addClass)(v,"art-setting-panel"),v.dataset.width=g||f.SETTING_WIDTH,v.dataset.height=b.length*f.SETTING_ITEM_HEIGHT,b[0]&&b[0].$parentItem&&((0,m.append)(v,this.creatHeader(b[0])),v.dataset.height=Number(v.dataset.height)+f.SETTING_ITEM_HEIGHT);for(let k=0;ky.dataset.value===p);d&&(0,e.inverseClass)(d,"art-current")}return{width:i,name:"flip",html:r.get("Video Flip"),tooltip:r.get((0,e.capitalize)(t.flip)),icon:n.flip,selector:u.map(l=>({value:l,name:`aspect-ratio-${l}`,default:l===t.flip,html:r.get((0,e.capitalize)(l))})),onSelect:l=>(t.flip=l.value,l.html),mounted:(l,c)=>{a(l,c.$tooltip,t.flip),t.on("flip",()=>{a(l,c.$tooltip,t.flip)})}}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"5lAsp":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{i18n:r,icons:n,constructor:{SETTING_ITEM_WIDTH:i,ASPECT_RATIO:u}}=t;function a(c){return c==="default"?r.get("Default"):c}function l(c,p,d){p&&(p.innerText=a(d));const y=(0,e.queryAll)(".art-setting-item",c).find(m=>m.dataset.value===d);y&&(0,e.inverseClass)(y,"art-current")}return{width:i,name:"aspect-ratio",html:r.get("Aspect Ratio"),icon:n.aspectRatio,tooltip:a(t.aspectRatio),selector:u.map(c=>({value:c,name:`aspect-ratio-${c}`,default:c===t.aspectRatio,html:a(c)})),onSelect:c=>(t.aspectRatio=c.value,c.html),mounted:(c,p)=>{l(c,p.$tooltip,t.aspectRatio),t.on("aspectRatio",()=>{l(c,p.$tooltip,t.aspectRatio)})}}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],e6hsR:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{i18n:r,icons:n,constructor:{SETTING_ITEM_WIDTH:i,PLAYBACK_RATE:u}}=t;function a(c){return c===1?r.get("Normal"):c.toFixed(1)}function l(c,p,d){p&&(p.innerText=a(d));const y=(0,e.queryAll)(".art-setting-item",c).find(m=>Number(m.dataset.value)===d);y&&(0,e.inverseClass)(y,"art-current")}return{width:i,name:"playback-rate",html:r.get("Play Speed"),tooltip:a(t.playbackRate),icon:n.playbackRate,selector:u.map(c=>({value:c,name:`aspect-ratio-${c}`,default:c===t.playbackRate,html:a(c)})),onSelect:c=>(t.playbackRate=c.value,c.html),mounted:(c,p)=>{l(c,p.$tooltip,t.playbackRate),t.on("video:ratechange",()=>{l(c,p.$tooltip,t.playbackRate)})}}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],fFNEr:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s),s.default=function(e){const{i18n:t,icons:r,constructor:n}=e;return{width:n.SETTING_ITEM_WIDTH,name:"subtitle-offset",html:t.get("Subtitle Offset"),icon:r.subtitle,tooltip:"0s",range:[0,-5,5,.1],onChange:i=>(e.subtitleOffset=i.range,i.range+"s")}}},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],f2Thp:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s),s.default=class{constructor(){this.name="artplayer_settings",this.settings={}}get(e){try{const t=JSON.parse(window.localStorage.getItem(this.name))||{};return e?t[e]:t}catch{return e?this.settings[e]:this.settings}}set(e,t){try{const r=Object.assign({},this.get(),{[e]:t});window.localStorage.setItem(this.name,JSON.stringify(r))}catch{this.settings[e]=t}}del(e){try{const t=this.get();delete t[e],window.localStorage.setItem(this.name,JSON.stringify(t))}catch{delete this.settings[e]}}clear(){try{window.localStorage.removeItem(this.name)}catch{this.settings={}}}}},{"@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"96ThS":[function(o,h,s){var e=o("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(s);var t=o("../utils"),r=o("./miniProgressBar"),n=e.interopDefault(r),i=o("./autoOrientation"),u=e.interopDefault(i),a=o("./autoPlayback"),l=e.interopDefault(a),c=o("./fastForward"),p=e.interopDefault(c),d=o("./lock"),y=e.interopDefault(d);s.default=class{constructor(m){this.art=m,this.id=0;const{option:w}=m;w.miniProgressBar&&!w.isLive&&this.add(n.default),w.lock&&t.isMobile&&this.add(y.default),w.autoPlayback&&!w.isLive&&this.add(l.default),w.autoOrientation&&t.isMobile&&this.add(u.default),w.fastForward&&t.isMobile&&!w.isLive&&this.add(p.default);for(let x=0;xthis.next(m,x)):this.next(m,w)}next(m,w){const x=w&&w.name||m.name||`plugin${this.id}`;return(0,t.errorHandle)(!(0,t.has)(this,x),`Cannot add a plugin that already has the same name: ${x}`),(0,t.def)(this,x,{value:w}),this}}},{"../utils":"h3rH9","./miniProgressBar":"iBx4M","./autoOrientation":"2O9qO","./autoPlayback":"iiOc1","./fastForward":"d9NUE","./lock":"5dnKh","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],iBx4M:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){return t.on("control",r=>{r?(0,e.removeClass)(t.template.$player,"art-mini-progress-bar"):(0,e.addClass)(t.template.$player,"art-mini-progress-bar")}),{name:"mini-progress-bar"}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"2O9qO":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{constructor:r,template:{$player:n,$video:i}}=t;return t.on("fullscreenWeb",u=>{if(u){const{videoWidth:a,videoHeight:l}=i,{clientWidth:c,clientHeight:p}=document.documentElement;(a>l&&cp)&&setTimeout(()=>{(0,e.setStyle)(n,"width",`${p}px`),(0,e.setStyle)(n,"height",`${c}px`),(0,e.setStyle)(n,"transform-origin","0 0"),(0,e.setStyle)(n,"transform",`rotate(90deg) translate(0, -${c}px)`),(0,e.addClass)(n,"art-auto-orientation"),t.isRotate=!0,t.emit("resize")},r.AUTO_ORIENTATION_TIME)}else(0,e.hasClass)(n,"art-auto-orientation")&&((0,e.removeClass)(n,"art-auto-orientation"),t.isRotate=!1,t.emit("resize"))}),t.on("fullscreen",async u=>{const a=screen.orientation.type;if(u){const{videoWidth:l,videoHeight:c}=i,{clientWidth:p,clientHeight:d}=document.documentElement;if(l>c&&pd){const y=a.startsWith("portrait")?"landscape":"portrait";await screen.orientation.lock(y),(0,e.addClass)(n,"art-auto-orientation-fullscreen")}}else(0,e.hasClass)(n,"art-auto-orientation-fullscreen")&&(await screen.orientation.lock(a),(0,e.removeClass)(n,"art-auto-orientation-fullscreen"))}),{name:"autoOrientation",get state(){return(0,e.hasClass)(n,"art-auto-orientation")}}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],iiOc1:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{i18n:r,icons:n,storage:i,constructor:u,proxy:a,template:{$poster:l}}=t,c=t.layers.add({name:"auto-playback",html:'
'}),p=(0,e.query)(".art-auto-playback-last",c),d=(0,e.query)(".art-auto-playback-jump",c),y=(0,e.query)(".art-auto-playback-close",c);return t.on("video:timeupdate",()=>{if(t.playing){const m=i.get("times")||{},w=Object.keys(m);w.length>u.AUTO_PLAYBACK_MAX&&delete m[w[0]],m[t.option.id||t.option.url]=t.currentTime,i.set("times",m)}}),t.on("ready",()=>{const m=(i.get("times")||{})[t.option.id||t.option.url];m&&m>=u.AUTO_PLAYBACK_MIN&&((0,e.append)(y,n.close),(0,e.setStyle)(c,"display","flex"),p.innerText=`${r.get("Last Seen")} ${(0,e.secondToTime)(m)}`,d.innerText=r.get("Jump Play"),a(y,"click",()=>{(0,e.setStyle)(c,"display","none")}),a(d,"click",()=>{t.seek=m,t.play(),(0,e.setStyle)(l,"display","none"),(0,e.setStyle)(c,"display","none")}),t.once("video:timeupdate",()=>{setTimeout(()=>{(0,e.setStyle)(c,"display","none")},u.AUTO_PLAYBACK_TIMEOUT)}))}),{name:"auto-playback",get times(){return i.get("times")||{}},clear:()=>i.del("times"),delete(m){const w=i.get("times")||{};return delete w[m],i.set("times",w),w}}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],d9NUE:[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{constructor:r,proxy:n,template:{$player:i,$video:u}}=t;let a=null,l=!1,c=1;const p=()=>{clearTimeout(a),l&&(l=!1,t.playbackRate=c,(0,e.removeClass)(i,"art-fast-forward"))};return n(u,"touchstart",d=>{d.touches.length===1&&t.playing&&!t.isLock&&(a=setTimeout(()=>{l=!0,c=t.playbackRate,t.playbackRate=r.FAST_FORWARD_VALUE,(0,e.addClass)(i,"art-fast-forward")},r.FAST_FORWARD_TIME))}),n(document,"touchmove",p),n(document,"touchend",p),{name:"fastForward",get state(){return(0,e.hasClass)(i,"art-fast-forward")}}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}],"5dnKh":[function(o,h,s){o("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(s);var e=o("../utils");s.default=function(t){const{layers:r,icons:n,template:{$player:i}}=t;return r.add({name:"lock",mounted(u){const a=(0,e.append)(u,n.lock),l=(0,e.append)(u,n.unlock);(0,e.setStyle)(a,"display","none"),t.on("lock",c=>{c?((0,e.setStyle)(a,"display","inline-flex"),(0,e.setStyle)(l,"display","none")):((0,e.setStyle)(a,"display","none"),(0,e.setStyle)(l,"display","inline-flex"))})},click(){(0,e.hasClass)(i,"art-lock")?((0,e.removeClass)(i,"art-lock"),this.isLock=!1,t.emit("lock",!1)):((0,e.addClass)(i,"art-lock"),this.isLock=!0,t.emit("lock",!0))}}),{name:"lock",get state(){return(0,e.hasClass)(i,"art-lock")}}}},{"../utils":"h3rH9","@parcel/transformer-js/src/esmodule-helpers.js":"guZOB"}]},["abjMI"],"abjMI","parcelRequireb749")})(pe,pe.exports);var De=pe.exports;const Pe=ve(De);function ze({url:F,...A}){const o=Z.useRef(null);return Z.useEffect(()=>{new Pe({container:o.current,url:F,setting:!0,flip:!0,loop:!0,playbackRate:!0,aspectRatio:!0,subtitleOffset:!0,fullscreen:!0,fullscreenWeb:!0,screenshot:!0,autoPlayback:!0,airplay:!0,theme:"#49509e"})}),z.jsx("div",{ref:o,...A})}function qe({url:F,artist:A,caption:o,...h}){const s=Z.useRef(null);return Z.useEffect(()=>{new Re({container:s.current,audio:[{name:o,artist:A,url:F,theme:"#49509e"}]})}),z.jsx("div",{ref:s,...h})}function Ve({sources:F,author:A}){const[o,h]=Z.useState(F.map((e,t)=>t===0));function s(e){h(o.map((t,r)=>r===e))}return z.jsx("div",{role:"tablist",className:"tabs tabs-lifted",children:F.map((e,t)=>z.jsxs(Z.Fragment,{children:[z.jsx("input",{type:"radio",name:e.caption,role:"tab",className:"tab","aria-label":e.caption,checked:o[t],onChange:()=>s(t)}),z.jsxs("div",{role:"tabpanel",className:"tab-content bg-base-100 border-base-300 rounded-box w-full",children:[e.type==="video"&&z.jsx("div",{className:"w-full h-[460px]",children:z.jsx(ze,{className:"w-full h-full",url:e.url})}),e.type==="audio"&&z.jsx("div",{className:"w-full",children:z.jsx(qe,{url:e.url,artist:A?.name??"佚名",caption:e.caption})})]})]},t))})}export{Ve as default}; diff --git a/test/data/warden/dist/client/_astro/Media.Co8_pG1j.css b/test/data/warden/dist/client/_astro/Media.Co8_pG1j.css new file mode 100644 index 0000000..bca9268 --- /dev/null +++ b/test/data/warden/dist/client/_astro/Media.Co8_pG1j.css @@ -0,0 +1 @@ +.aplayer{background:#fff;font-family:Arial,Helvetica,sans-serif;margin:5px;box-shadow:0 2px 2px #00000012,0 1px 5px #0000001a;border-radius:2px;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none;line-height:normal;position:relative}.aplayer *{box-sizing:content-box}.aplayer svg{width:100%;height:100%}.aplayer svg circle,.aplayer svg path{fill:#fff}.aplayer.aplayer-withlist .aplayer-info{border-bottom:1px solid #e9e9e9}.aplayer.aplayer-withlist .aplayer-list{display:block}.aplayer.aplayer-withlist .aplayer-icon-order,.aplayer.aplayer-withlist .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-menu{display:inline}.aplayer.aplayer-withlrc .aplayer-pic{height:90px;width:90px}.aplayer.aplayer-withlrc .aplayer-info{margin-left:90px;height:90px;padding:10px 7px 0}.aplayer.aplayer-withlrc .aplayer-lrc{display:block}.aplayer.aplayer-narrow{width:66px}.aplayer.aplayer-narrow .aplayer-info,.aplayer.aplayer-narrow .aplayer-list{display:none}.aplayer.aplayer-narrow .aplayer-body,.aplayer.aplayer-narrow .aplayer-pic{height:66px;width:66px}.aplayer.aplayer-fixed{position:fixed;bottom:0;left:0;right:0;margin:0;z-index:99;overflow:visible;max-width:400px;box-shadow:none}.aplayer.aplayer-fixed .aplayer-list{margin-bottom:65px;border:1px solid #eee;border-bottom:none}.aplayer.aplayer-fixed .aplayer-body{position:fixed;bottom:0;left:0;right:0;margin:0;z-index:99;background:#fff;padding-right:18px;transition:all .3s ease;max-width:400px}.aplayer.aplayer-fixed .aplayer-lrc{display:block;position:fixed;bottom:10px;left:0;right:0;margin:0;z-index:98;pointer-events:none;text-shadow:-1px -1px 0 #fff}.aplayer.aplayer-fixed .aplayer-lrc:after,.aplayer.aplayer-fixed .aplayer-lrc:before{display:none}.aplayer.aplayer-fixed .aplayer-info{transform:scaleX(1);transform-origin:0 0;transition:all .3s ease;border-bottom:none;border-top:1px solid #e9e9e9}.aplayer.aplayer-fixed .aplayer-info .aplayer-music{width:calc(100% - 105px)}.aplayer.aplayer-fixed .aplayer-miniswitcher{display:block}.aplayer.aplayer-fixed.aplayer-narrow .aplayer-info{display:block;transform:scaleX(0)}.aplayer.aplayer-fixed.aplayer-narrow .aplayer-body{width:66px!important}.aplayer.aplayer-fixed.aplayer-narrow .aplayer-miniswitcher .aplayer-icon{transform:rotateY(0)}.aplayer.aplayer-fixed .aplayer-icon-back,.aplayer.aplayer-fixed .aplayer-icon-forward,.aplayer.aplayer-fixed .aplayer-icon-lrc,.aplayer.aplayer-fixed .aplayer-icon-play{display:inline-block}.aplayer.aplayer-fixed .aplayer-icon-back,.aplayer.aplayer-fixed .aplayer-icon-forward,.aplayer.aplayer-fixed .aplayer-icon-menu,.aplayer.aplayer-fixed .aplayer-icon-play{position:absolute;bottom:27px;width:20px;height:20px}.aplayer.aplayer-fixed .aplayer-icon-back{right:75px}.aplayer.aplayer-fixed .aplayer-icon-play{right:50px}.aplayer.aplayer-fixed .aplayer-icon-forward{right:25px}.aplayer.aplayer-fixed .aplayer-icon-menu{right:0}.aplayer.aplayer-arrow .aplayer-icon-loop,.aplayer.aplayer-arrow .aplayer-icon-order,.aplayer.aplayer-mobile .aplayer-icon-volume-down{display:none}.aplayer.aplayer-loading .aplayer-info .aplayer-controller .aplayer-loading-icon{display:block}.aplayer.aplayer-loading .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb{transform:scale(1)}.aplayer .aplayer-body{position:relative}.aplayer .aplayer-icon{width:15px;height:15px;border:none;background-color:transparent;outline:none;cursor:pointer;opacity:.8;vertical-align:middle;padding:0;font-size:12px;margin:0;display:inline-block}.aplayer .aplayer-icon path{transition:all .2s ease-in-out}.aplayer .aplayer-icon-back,.aplayer .aplayer-icon-forward,.aplayer .aplayer-icon-lrc,.aplayer .aplayer-icon-order,.aplayer .aplayer-icon-play{display:none}.aplayer .aplayer-icon-lrc-inactivity svg{opacity:.4}.aplayer .aplayer-icon-forward{transform:rotate(180deg)}.aplayer .aplayer-lrc-content{display:none}.aplayer .aplayer-pic{position:relative;float:left;height:66px;width:66px;background-size:cover;background-position:50%;transition:all .3s ease;cursor:pointer}.aplayer .aplayer-pic:hover .aplayer-button{opacity:1}.aplayer .aplayer-pic .aplayer-button{position:absolute;border-radius:50%;opacity:.8;text-shadow:0 1px 1px rgba(0,0,0,.2);box-shadow:0 1px 1px #0003;background:#0003;transition:all .1s ease}.aplayer .aplayer-pic .aplayer-button path{fill:#fff}.aplayer .aplayer-pic .aplayer-hide{display:none}.aplayer .aplayer-pic .aplayer-play{width:26px;height:26px;border:2px solid #fff;bottom:50%;right:50%;margin:0 -15px -15px 0}.aplayer .aplayer-pic .aplayer-play svg{position:absolute;top:3px;left:4px;height:20px;width:20px}.aplayer .aplayer-pic .aplayer-pause{width:16px;height:16px;border:2px solid #fff;bottom:4px;right:4px}.aplayer .aplayer-pic .aplayer-pause svg{position:absolute;top:2px;left:2px;height:12px;width:12px}.aplayer .aplayer-info{margin-left:66px;padding:14px 7px 0 10px;height:66px;box-sizing:border-box}.aplayer .aplayer-info .aplayer-music{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin:0 0 13px 5px;-webkit-user-select:text;-moz-user-select:text;user-select:text;cursor:default;padding-bottom:2px;height:20px}.aplayer .aplayer-info .aplayer-music .aplayer-title{font-size:14px}.aplayer .aplayer-info .aplayer-music .aplayer-author{font-size:12px;color:#666}.aplayer .aplayer-info .aplayer-controller{position:relative;display:flex}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap{margin:0 0 0 5px;padding:4px 0;cursor:pointer!important;flex:1}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap:hover .aplayer-bar .aplayer-played .aplayer-thumb{transform:scale(1)}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar{position:relative;height:2px;width:100%;background:#cdcdcd}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded{position:absolute;left:0;top:0;bottom:0;background:#aaa;height:2px;transition:all .5s ease}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played{position:absolute;left:0;top:0;bottom:0;height:2px}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb{position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:10px;width:10px;border-radius:50%;cursor:pointer;transition:all .3s ease-in-out;transform:scale(0)}.aplayer .aplayer-info .aplayer-controller .aplayer-time{position:relative;right:0;bottom:4px;height:17px;color:#999;font-size:11px;padding-left:7px}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner{vertical-align:middle}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon{cursor:pointer;transition:all .2s ease}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon path{fill:#666}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-loop{margin-right:2px}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon:hover path{fill:#000}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-menu,.aplayer .aplayer-info .aplayer-controller .aplayer-time.aplayer-time-narrow .aplayer-icon-menu,.aplayer .aplayer-info .aplayer-controller .aplayer-time.aplayer-time-narrow .aplayer-icon-mode{display:none}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap{position:relative;display:inline-block;margin-left:3px;cursor:pointer!important}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap:hover .aplayer-volume-bar-wrap{height:40px}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap{position:absolute;bottom:15px;right:-3px;width:25px;height:0;z-index:99;overflow:hidden;transition:all .2s ease-in-out}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap.aplayer-volume-bar-wrap-active{height:40px}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap .aplayer-volume-bar{position:absolute;bottom:0;right:10px;width:5px;height:35px;background:#aaa;border-radius:2.5px;overflow:hidden}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap .aplayer-volume-bar .aplayer-volume{position:absolute;bottom:0;right:0;width:5px;transition:all .1s ease}.aplayer .aplayer-info .aplayer-controller .aplayer-loading-icon{display:none}.aplayer .aplayer-info .aplayer-controller .aplayer-loading-icon svg{position:absolute;animation:rotate 1s linear infinite}.aplayer .aplayer-lrc{display:none;position:relative;height:30px;text-align:center;overflow:hidden;margin:-10px 0 7px}.aplayer .aplayer-lrc:before{top:0;height:10%;background:linear-gradient(180deg,#fff 0,#fff0);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffff",endColorstr="#00ffffff",GradientType=0)}.aplayer .aplayer-lrc:after,.aplayer .aplayer-lrc:before{position:absolute;z-index:1;display:block;overflow:hidden;width:100%;content:" "}.aplayer .aplayer-lrc:after{bottom:0;height:33%;background:linear-gradient(180deg,#fff0 0,#fffc);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00ffffff",endColorstr="#ccffffff",GradientType=0)}.aplayer .aplayer-lrc p{font-size:12px;color:#666;line-height:16px!important;height:16px!important;padding:0!important;margin:0!important;transition:all .5s ease-out;opacity:.4;overflow:hidden}.aplayer .aplayer-lrc p.aplayer-lrc-current{opacity:1;overflow:visible;height:auto!important;min-height:16px}.aplayer .aplayer-lrc.aplayer-lrc-hide{display:none}.aplayer .aplayer-lrc .aplayer-lrc-contents{width:100%;transition:all .5s ease-out;-webkit-user-select:text;-moz-user-select:text;user-select:text;cursor:default}.aplayer .aplayer-list{overflow:auto;transition:all .5s ease;will-change:height;display:none;overflow:hidden}.aplayer .aplayer-list.aplayer-list-hide{max-height:0!important}.aplayer .aplayer-list ol{list-style-type:none;margin:0;padding:0;overflow-y:auto}.aplayer .aplayer-list ol::-webkit-scrollbar{width:5px}.aplayer .aplayer-list ol::-webkit-scrollbar-thumb{border-radius:3px;background-color:#eee}.aplayer .aplayer-list ol::-webkit-scrollbar-thumb:hover{background-color:#ccc}.aplayer .aplayer-list ol li{position:relative;height:32px;line-height:32px;padding:0 15px;font-size:12px;border-top:1px solid #e9e9e9;cursor:pointer;transition:all .2s ease;overflow:hidden;margin:0}.aplayer .aplayer-list ol li:first-child{border-top:none}.aplayer .aplayer-list ol li:hover{background:#efefef}.aplayer .aplayer-list ol li.aplayer-list-light{background:#e9e9e9}.aplayer .aplayer-list ol li.aplayer-list-light .aplayer-list-cur{display:inline-block}.aplayer .aplayer-list ol li .aplayer-list-cur{display:none;width:3px;height:22px;position:absolute;left:0;top:5px;cursor:pointer}.aplayer .aplayer-list ol li .aplayer-list-index{color:#666;margin-right:12px;cursor:pointer}.aplayer .aplayer-list ol li .aplayer-list-author{color:#666;float:right;cursor:pointer}.aplayer .aplayer-notice{opacity:0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:12px;border-radius:4px;padding:5px 10px;transition:all .3s ease-in-out;overflow:hidden;color:#fff;pointer-events:none;background-color:#f4f4f5;color:#909399}.aplayer .aplayer-miniswitcher{display:none;position:absolute;top:0;right:0;bottom:0;height:100%;background:#e6e6e6;width:18px;border-radius:0 2px 2px 0}.aplayer .aplayer-miniswitcher .aplayer-icon{height:100%;width:100%;transform:rotateY(180deg);transition:all .3s ease}.aplayer .aplayer-miniswitcher .aplayer-icon path{fill:#666}.aplayer .aplayer-miniswitcher .aplayer-icon:hover path{fill:#000}@keyframes aplayer-roll{0%{left:0}to{left:-100%}}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(1turn)}} diff --git a/test/data/warden/dist/client/_astro/_slug_.bcjV8AoT.css b/test/data/warden/dist/client/_astro/_slug_.bcjV8AoT.css new file mode 100644 index 0000000..e85e93d --- /dev/null +++ b/test/data/warden/dist/client/_astro/_slug_.bcjV8AoT.css @@ -0,0 +1 @@ +:root{--bs-body-font-family: "IBM Plex Serif", "Noto Serif SC", sans-serif !important}html,body{font-family:var(--bs-body-font-family)}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:normal;font-weight:100;src:url(/_astro/ibm-plex-serif-v19-latin-100.6qNbweSL.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:italic;font-weight:100;src:url(/_astro/ibm-plex-serif-v19-latin-100italic.E22nrI7z.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:normal;font-weight:200;src:url(/_astro/ibm-plex-serif-v19-latin-200.GFXE_YJc.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:italic;font-weight:200;src:url(/_astro/ibm-plex-serif-v19-latin-200italic.pJK4yaaG.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:normal;font-weight:300;src:url(/_astro/ibm-plex-serif-v19-latin-300.RVbRgkxX.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:italic;font-weight:300;src:url(/_astro/ibm-plex-serif-v19-latin-300italic.ZdSVgmcR.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:normal;font-weight:400;src:url(/_astro/ibm-plex-serif-v19-latin-regular.HRmMD3sQ.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:italic;font-weight:400;src:url(/_astro/ibm-plex-serif-v19-latin-italic.MiJiQVsi.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:normal;font-weight:500;src:url(/_astro/ibm-plex-serif-v19-latin-500.xAA_w-Ac.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:italic;font-weight:500;src:url(/_astro/ibm-plex-serif-v19-latin-500italic.Unq84pJ7.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:normal;font-weight:600;src:url(/_astro/ibm-plex-serif-v19-latin-600.cuuqzllG.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:italic;font-weight:600;src:url(/_astro/ibm-plex-serif-v19-latin-600italic.vDhUog1q.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:normal;font-weight:700;src:url(/_astro/ibm-plex-serif-v19-latin-700.yX9JjmCp.woff2) format("woff2")}@font-face{font-display:swap;font-family:"IBM Plex Serif";font-style:italic;font-weight:700;src:url(/_astro/ibm-plex-serif-v19-latin-700italic.QM1RA0vx.woff2) format("woff2")}@font-face{font-display:swap;font-family:"Noto Serif SC";font-style:normal;font-weight:200;src:url(/_astro/noto-serif-sc-v22-chinese-simplified-200.g4OBZhIi.woff2) format("woff2")}@font-face{font-display:swap;font-family:"Noto Serif SC";font-style:normal;font-weight:300;src:url(/_astro/noto-serif-sc-v22-chinese-simplified-300.yFtdUYoh.woff2) format("woff2")}@font-face{font-display:swap;font-family:"Noto Serif SC";font-style:normal;font-weight:400;src:url(/_astro/noto-serif-sc-v22-chinese-simplified-regular.9muiKgFz.woff2) format("woff2")}@font-face{font-display:swap;font-family:"Noto Serif SC";font-style:normal;font-weight:500;src:url(/_astro/noto-serif-sc-v22-chinese-simplified-500.exkAspFQ.woff2) format("woff2")}@font-face{font-display:swap;font-family:"Noto Serif SC";font-style:normal;font-weight:600;src:url(/_astro/noto-serif-sc-v22-chinese-simplified-600.4n6uFOXj.woff2) format("woff2")}@font-face{font-display:swap;font-family:"Noto Serif SC";font-style:normal;font-weight:700;src:url(/_astro/noto-serif-sc-v22-chinese-simplified-700.HyiB9Pzv.woff2) format("woff2")}@font-face{font-display:swap;font-family:"Noto Serif SC";font-style:normal;font-weight:900;src:url(/_astro/noto-serif-sc-v22-chinese-simplified-900.ERSRy_0V.woff2) format("woff2")}.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}.h-fullpage{height:calc(100vh - 64px)}.max-h-fullpage{max-height:calc(100vh - 64px)}.mt-header{margin-top:64px}.top-header{top:64px}html{overflow-x:hidden!important;overflow-y:auto!important}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0}}@keyframes astroFadeOut{to{opacity:0}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}} diff --git a/test/data/warden/dist/client/_astro/_slug_.yOjdTrIk.css b/test/data/warden/dist/client/_astro/_slug_.yOjdTrIk.css new file mode 100644 index 0000000..35aea6d --- /dev/null +++ b/test/data/warden/dist/client/_astro/_slug_.yOjdTrIk.css @@ -0,0 +1 @@ +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:root,[data-theme]{background-color:var(--fallback-b1,oklch(var(--b1)/1));color:var(--fallback-bc,oklch(var(--bc)/1))}@supports not (color: oklch(0 0 0)){:root{color-scheme:light;--fallback-p: #491eff;--fallback-pc: #d4dbff;--fallback-s: #ff41c7;--fallback-sc: #fff9fc;--fallback-a: #00cfbd;--fallback-ac: #00100d;--fallback-n: #2b3440;--fallback-nc: #d7dde4;--fallback-b1: #ffffff;--fallback-b2: #e5e6e6;--fallback-b3: #e5e6e6;--fallback-bc: #1f2937;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--fallback-p: #7582ff;--fallback-pc: #050617;--fallback-s: #ff71cf;--fallback-sc: #190211;--fallback-a: #00c7b5;--fallback-ac: #000e0c;--fallback-n: #2a323c;--fallback-nc: #a6adbb;--fallback-b1: #1d232a;--fallback-b2: #191e24;--fallback-b3: #15191e;--fallback-bc: #a6adbb;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}}}html{-webkit-tap-highlight-color:transparent}:root{color-scheme:light;--pc: .893613 .026504 275.389117;--ac: .902188 .017211 186.391359;--inc: .173015 .023069 207.07779;--suc: .90546 .027421 150.069279;--wac: .140974 .037344 47.604421;--erc: .91542 .043031 27.325049;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--p: .468067 .13252 275.389117;--s: .809069 .095598 251.812784;--sc: .9871 .0106 342.55;--a: .510938 .086055 186.391359;--n: .321785 .02476 255.701624;--nc: .894994 .011585 252.096176;--b1: 1 0 0;--b2: .961151 0 0;--b3: .924169 .00108 197.137559;--bc: .278078 .029596 256.847952;--in: .865073 .115347 207.07779;--su: .527299 .137103 150.069279;--wa: .704871 .186721 47.604421;--er: .577099 .215157 27.325049;--rounded-box: 0;--rounded-btn: 0;--rounded-badge: 0;--tab-radius: 0}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--pc: .893613 .026504 275.389117;--sc: .161814 .01912 251.812784;--ac: .902188 .017211 186.391359;--inc: .173015 .023069 207.07779;--suc: .90546 .027421 150.069279;--wac: .140974 .037344 47.604421;--erc: .91542 .043031 27.325049;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--p: .468067 .13252 275.389117;--s: .809069 .095598 251.812784;--a: .510938 .086055 186.391359;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964;--in: .865073 .115347 207.07779;--su: .527299 .137103 150.069279;--wa: .704871 .186721 47.604421;--er: .577099 .215157 27.325049;--rounded-box: 0;--rounded-btn: 0;--rounded-badge: 0;--tab-radius: 0}}[data-theme=light]{color-scheme:light;--pc: .893613 .026504 275.389117;--ac: .902188 .017211 186.391359;--inc: .173015 .023069 207.07779;--suc: .90546 .027421 150.069279;--wac: .140974 .037344 47.604421;--erc: .91542 .043031 27.325049;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--p: .468067 .13252 275.389117;--s: .809069 .095598 251.812784;--sc: .9871 .0106 342.55;--a: .510938 .086055 186.391359;--n: .321785 .02476 255.701624;--nc: .894994 .011585 252.096176;--b1: 1 0 0;--b2: .961151 0 0;--b3: .924169 .00108 197.137559;--bc: .278078 .029596 256.847952;--in: .865073 .115347 207.07779;--su: .527299 .137103 150.069279;--wa: .704871 .186721 47.604421;--er: .577099 .215157 27.325049;--rounded-box: 0;--rounded-btn: 0;--rounded-badge: 0;--tab-radius: 0}:root:has(input.theme-controller[value=light]:checked){color-scheme:light;--pc: .893613 .026504 275.389117;--ac: .902188 .017211 186.391359;--inc: .173015 .023069 207.07779;--suc: .90546 .027421 150.069279;--wac: .140974 .037344 47.604421;--erc: .91542 .043031 27.325049;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--p: .468067 .13252 275.389117;--s: .809069 .095598 251.812784;--sc: .9871 .0106 342.55;--a: .510938 .086055 186.391359;--n: .321785 .02476 255.701624;--nc: .894994 .011585 252.096176;--b1: 1 0 0;--b2: .961151 0 0;--b3: .924169 .00108 197.137559;--bc: .278078 .029596 256.847952;--in: .865073 .115347 207.07779;--su: .527299 .137103 150.069279;--wa: .704871 .186721 47.604421;--er: .577099 .215157 27.325049;--rounded-box: 0;--rounded-btn: 0;--rounded-badge: 0;--tab-radius: 0}[data-theme=dark]{color-scheme:dark;--pc: .893613 .026504 275.389117;--sc: .161814 .01912 251.812784;--ac: .902188 .017211 186.391359;--inc: .173015 .023069 207.07779;--suc: .90546 .027421 150.069279;--wac: .140974 .037344 47.604421;--erc: .91542 .043031 27.325049;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--p: .468067 .13252 275.389117;--s: .809069 .095598 251.812784;--a: .510938 .086055 186.391359;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964;--in: .865073 .115347 207.07779;--su: .527299 .137103 150.069279;--wa: .704871 .186721 47.604421;--er: .577099 .215157 27.325049;--rounded-box: 0;--rounded-btn: 0;--rounded-badge: 0;--tab-radius: 0}:root:has(input.theme-controller[value=dark]:checked){color-scheme:dark;--pc: .893613 .026504 275.389117;--sc: .161814 .01912 251.812784;--ac: .902188 .017211 186.391359;--inc: .173015 .023069 207.07779;--suc: .90546 .027421 150.069279;--wac: .140974 .037344 47.604421;--erc: .91542 .043031 27.325049;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--p: .468067 .13252 275.389117;--s: .809069 .095598 251.812784;--a: .510938 .086055 186.391359;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964;--in: .865073 .115347 207.07779;--su: .527299 .137103 150.069279;--wa: .704871 .186721 47.604421;--er: .577099 .215157 27.325049;--rounded-box: 0;--rounded-btn: 0;--rounded-badge: 0;--tab-radius: 0}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.badge{display:inline-flex;align-items:center;justify-content:center;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s;height:1.25rem;font-size:.875rem;line-height:1.25rem;width:-moz-fit-content;width:fit-content;padding-left:.563rem;padding-right:.563rem;border-radius:var(--rounded-badge, 1.9rem);border-width:1px;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}@media (hover:hover){.label a:hover{--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.tab:hover{--tw-text-opacity: 1}}.btn{display:inline-flex;height:3rem;min-height:3rem;flex-shrink:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;justify-content:center;border-radius:var(--rounded-btn, .5rem);border-color:transparent;border-color:oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1em;gap:.5rem;font-weight:600;text-decoration-line:none;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);border-width:var(--border-btn, 1px);animation:button-pop var(--animation-btn, .25s) ease-out;transition-property:color,background-color,border-color,opacity,box-shadow,transform;--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:var(--fallback-bc,oklch(var(--bc)/1));background-color:oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity));--tw-bg-opacity: 1;--tw-border-opacity: 1}.btn-disabled,.btn[disabled],.btn:disabled{pointer-events:none}:where(.btn:is(input[type=checkbox])),:where(.btn:is(input[type=radio])){width:auto;-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:is(input[type=checkbox]):after,.btn:is(input[type=radio]):after{--tw-content: attr(aria-label);content:var(--tw-content)}.card{position:relative;display:flex;flex-direction:column;border-radius:var(--rounded-box, 1rem)}.card:focus{outline:2px solid transparent;outline-offset:2px}.card-body{display:flex;flex:1 1 auto;flex-direction:column;padding:var(--padding-card, 2rem);gap:.5rem}.card-body :where(p){flex-grow:1}.card figure{display:flex;align-items:center;justify-content:center}.card.image-full{display:grid}.card.image-full:before{position:relative;content:"";z-index:10;border-radius:var(--rounded-box, 1rem);--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));opacity:.75}.card.image-full:before,.card.image-full>*{grid-column-start:1;grid-row-start:1}.card.image-full>figure img{height:100%;-o-object-fit:cover;object-fit:cover}.card.image-full>.card-body{position:relative;z-index:20;--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.checkbox{flex-shrink:0;--chkbg: var(--fallback-bc,oklch(var(--bc)/1));--chkfg: var(--fallback-b1,oklch(var(--b1)/1));height:1.5rem;width:1.5rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));--tw-border-opacity: .2}.divider{display:flex;flex-direction:row;align-items:center;align-self:stretch;margin-top:1rem;margin-bottom:1rem;height:1rem;white-space:nowrap}.divider:before,.divider:after{height:.125rem;width:100%;flex-grow:1;--tw-content: "";content:var(--tw-content);background-color:var(--fallback-bc,oklch(var(--bc)/.1))}.dropdown{position:relative;display:inline-block}.dropdown>*:not(summary):focus{outline:2px solid transparent;outline-offset:2px}.dropdown .dropdown-content{position:absolute}.dropdown:is(:not(details)) .dropdown-content{visibility:hidden;opacity:0;transform-origin:top;--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s}.dropdown-end .dropdown-content{inset-inline-end:0px}.dropdown-left .dropdown-content{bottom:auto;inset-inline-end:100%;top:0;transform-origin:right}.dropdown-right .dropdown-content{bottom:auto;inset-inline-start:100%;top:0;transform-origin:left}.dropdown-bottom .dropdown-content{bottom:auto;top:100%;transform-origin:top}.dropdown-top .dropdown-content{bottom:100%;top:auto;transform-origin:bottom}.dropdown-end.dropdown-right .dropdown-content,.dropdown-end.dropdown-left .dropdown-content{bottom:0;top:auto}.dropdown.dropdown-open .dropdown-content,.dropdown:not(.dropdown-hover):focus .dropdown-content,.dropdown:focus-within .dropdown-content{visibility:visible;opacity:1}@media (hover: hover){.dropdown.dropdown-hover:hover .dropdown-content{visibility:visible;opacity:1}.btn:hover{--tw-border-opacity: 1;border-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}@supports (color: color-mix(in oklab,black,black)){.btn:hover{background-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,black);border-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,black)}}@supports not (color: oklch(0 0 0)){.btn:hover{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}}.btn.glass:hover{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-ghost:hover{border-color:transparent}@supports (color: oklch(0 0 0)){.btn-ghost:hover{background-color:var(--fallback-bc,oklch(var(--bc)/.2))}}.btn-outline.btn-primary:hover{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}@supports (color: color-mix(in oklab,black,black)){.btn-outline.btn-primary:hover{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.btn-disabled:hover,.btn[disabled]:hover,.btn:disabled:hover{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}@supports (color: color-mix(in oklab,black,black)){.btn:is(input[type=checkbox]:checked):hover,.btn:is(input[type=radio]:checked):hover{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.dropdown.dropdown-hover:hover .dropdown-content{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{cursor:pointer;outline:2px solid transparent;outline-offset:2px}@supports (color: oklch(0 0 0)){:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{background-color:var(--fallback-bc,oklch(var(--bc)/.1))}}.tab[disabled],.tab[disabled]:hover{cursor:not-allowed;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}}.dropdown:is(details) summary::-webkit-details-marker{display:none}.label{display:flex;-webkit-user-select:none;-moz-user-select:none;user-select:none;align-items:center;justify-content:space-between;padding:.5rem .25rem}.hero{display:grid;width:100%;place-items:center;background-size:cover;background-position:center}.hero>*{grid-column-start:1;grid-row-start:1}.hero-content{z-index:0;display:flex;align-items:center;justify-content:center;max-width:80rem;gap:1rem;padding:1rem}.input{flex-shrink:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:3rem;padding-left:1rem;padding-right:1rem;font-size:1rem;line-height:2;line-height:1.5rem;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.join .dropdown .join-item:first-child:not(:last-child),.join *:first-child:not(:last-child) .dropdown .join-item{border-start-end-radius:inherit;border-end-end-radius:inherit}.link{cursor:pointer;text-decoration-line:underline}.menu{display:flex;flex-direction:column;flex-wrap:wrap;font-size:.875rem;line-height:1.25rem;padding:.5rem}.menu :where(li ul){position:relative;white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){display:grid;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;grid-auto-columns:minmax(auto,max-content) auto max-content;-webkit-user-select:none;-moz-user-select:none;user-select:none}.menu li.disabled{cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:var(--fallback-bc,oklch(var(--bc)/.3))}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}:where(.menu li){position:relative;display:flex;flex-shrink:0;flex-direction:column;flex-wrap:wrap;align-items:stretch}:where(.menu li) .badge{justify-self:end}.navbar{display:flex;align-items:center;padding:var(--navbar-padding, .5rem);min-height:4rem;width:100%}:where(.navbar>*){display:inline-flex;align-items:center}.navbar-start{width:50%;justify-content:flex-start}.navbar-center{flex-shrink:0}.navbar-end{width:50%;justify-content:flex-end}.radio{flex-shrink:0;--chkbg: var(--bc);height:1.5rem;width:1.5rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:9999px;border-width:1px;border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));--tw-border-opacity: .2}.stats{display:inline-grid;border-radius:var(--rounded-box, 1rem);--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}:where(.stats){grid-auto-flow:column;overflow-x:auto}.stat{display:inline-grid;width:100%;grid-template-columns:repeat(1,1fr);-moz-column-gap:1rem;column-gap:1rem;border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));--tw-border-opacity: .1;padding:1rem 1.5rem}.stat-figure{grid-column-start:2;grid-row:span 3 / span 3;grid-row-start:1;place-self:center;justify-self:end}.stat-title{grid-column-start:1;white-space:nowrap;color:var(--fallback-bc,oklch(var(--bc)/.6))}.stat-value{grid-column-start:1;white-space:nowrap;font-size:2.25rem;line-height:2.5rem;font-weight:800}.stat-desc{grid-column-start:1;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--fallback-bc,oklch(var(--bc)/.6))}.swap{position:relative;display:inline-grid;-webkit-user-select:none;-moz-user-select:none;user-select:none;place-content:center;cursor:pointer}.swap>*{grid-column-start:1;grid-row-start:1;transition-duration:.3s;transition-timing-function:cubic-bezier(0,0,.2,1);transition-property:transform,opacity}.swap input{-webkit-appearance:none;-moz-appearance:none;appearance:none}.swap .swap-on,.swap .swap-indeterminate,.swap input:indeterminate~.swap-on{opacity:0}.swap input:checked~.swap-off,.swap-active .swap-off,.swap input:indeterminate~.swap-off{opacity:0}.swap input:checked~.swap-on,.swap-active .swap-on,.swap input:indeterminate~.swap-indeterminate{opacity:1}.tabs{display:grid;align-items:flex-end}.tabs-lifted:has(.tab-content[class^=rounded-]) .tab:first-child:not(.tab-active),.tabs-lifted:has(.tab-content[class*=" rounded-"]) .tab:first-child:not(.tab-active){border-bottom-color:transparent}.tab{position:relative;grid-row-start:1;display:inline-flex;height:2rem;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;flex-wrap:wrap;align-items:center;justify-content:center;text-align:center;font-size:.875rem;line-height:1.25rem;line-height:2;--tab-padding: 1rem;--tw-text-opacity: .5;--tab-color: var(--fallback-bc,oklch(var(--bc)/1));--tab-bg: var(--fallback-b1,oklch(var(--b1)/1));--tab-border-color: var(--fallback-b3,oklch(var(--b3)/1));color:var(--tab-color);padding-inline-start:var(--tab-padding, 1rem);padding-inline-end:var(--tab-padding, 1rem)}.tab:is(input[type=radio]){width:auto;border-bottom-right-radius:0;border-bottom-left-radius:0}.tab:is(input[type=radio]):after{--tw-content: attr(aria-label);content:var(--tw-content)}.tab:not(input):empty{cursor:default;grid-column-start:span 9999}.tab-content{grid-column-start:1;grid-column-end:span 9999;grid-row-start:2;margin-top:calc(var(--tab-border) * -1);display:none;border-color:transparent;border-width:var(--tab-border, 0)}:checked+.tab-content:nth-child(2),.tab-active+.tab-content:nth-child(2){border-start-start-radius:0px}input.tab:checked+.tab-content,.tab-active+.tab-content{display:block}.timeline{position:relative;display:flex}:where(.timeline>li){position:relative;display:grid;flex-shrink:0;align-items:center;grid-template-rows:var(--timeline-row-start, minmax(0, 1fr)) auto var( --timeline-row-end, minmax(0, 1fr) );grid-template-columns:var(--timeline-col-start, minmax(0, 1fr)) auto var( --timeline-col-end, minmax(0, 1fr) )}.timeline>li>hr{width:100%;border-width:0px}:where(.timeline>li>hr):first-child{grid-column-start:1;grid-row-start:2}:where(.timeline>li>hr):last-child{grid-column-start:3;grid-column-end:none;grid-row-start:2;grid-row-end:auto}.timeline-start{grid-column-start:1;grid-column-end:4;grid-row-start:1;grid-row-end:2;margin:.25rem;align-self:flex-end;justify-self:center}.timeline-middle{grid-column-start:2;grid-row-start:2}.timeline-end{grid-column-start:1;grid-column-end:4;grid-row-start:3;grid-row-end:4;margin:.25rem;align-self:flex-start;justify-self:center}.badge-primary{--tw-border-opacity: 1;border-color:var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.badge-secondary{--tw-border-opacity: 1;border-color:var(--fallback-s,oklch(var(--s)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-s,oklch(var(--s)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-sc,oklch(var(--sc)/var(--tw-text-opacity)))}.badge-accent{--tw-border-opacity: 1;border-color:var(--fallback-a,oklch(var(--a)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-a,oklch(var(--a)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-ac,oklch(var(--ac)/var(--tw-text-opacity)))}.badge-outline.badge-primary{--tw-text-opacity: 1;color:var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)))}.badge-outline.badge-secondary{--tw-text-opacity: 1;color:var(--fallback-s,oklch(var(--s)/var(--tw-text-opacity)))}.badge-outline.badge-accent{--tw-text-opacity: 1;color:var(--fallback-a,oklch(var(--a)/var(--tw-text-opacity)))}.btm-nav>* .label{font-size:1rem;line-height:1.5rem}.btn:active:hover,.btn:active:focus{animation:button-pop 0s ease-out;transform:scale(var(--btn-focus-scale, .97))}@supports not (color: oklch(0 0 0)){.btn{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}.btn-primary{--btn-color: var(--fallback-p)}.prose :where(code):not(:where([class~=not-prose] *,pre *)){background-color:var(--fallback-b3,oklch(var(--b3)/1))}}@supports (color: color-mix(in oklab,black,black)){.btn-outline.btn-primary.btn-active{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.btn:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px}.btn-primary{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));outline-color:var(--fallback-p,oklch(var(--p)/1))}@supports (color: oklch(0 0 0)){.btn-primary{--btn-color: var(--p)}}.btn.glass{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:currentColor}.btn.glass.btn-active{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-ghost{border-width:1px;border-color:transparent;background-color:transparent;color:currentColor;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:currentColor}.btn-ghost.btn-active{border-color:transparent;background-color:var(--fallback-bc,oklch(var(--bc)/.2))}.btn-outline.btn-primary{--tw-text-opacity: 1;color:var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)))}.btn-outline.btn-primary.btn-active{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.btn.btn-disabled,.btn[disabled],.btn:disabled{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}.btn:is(input[type=checkbox]:checked),.btn:is(input[type=radio]:checked){--tw-border-opacity: 1;border-color:var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.btn:is(input[type=checkbox]:checked):focus-visible,.btn:is(input[type=radio]:checked):focus-visible{outline-color:var(--fallback-p,oklch(var(--p)/1))}@keyframes button-pop{0%{transform:scale(var(--btn-focus-scale, .98))}40%{transform:scale(1.02)}to{transform:scale(1)}}.card :where(figure:first-child){overflow:hidden;border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-start-radius:unset;border-end-end-radius:unset}.card :where(figure:last-child){overflow:hidden;border-start-start-radius:unset;border-start-end-radius:unset;border-end-start-radius:inherit;border-end-end-radius:inherit}.card:focus-visible{outline:2px solid currentColor;outline-offset:2px}.card.bordered{border-width:1px;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)))}.card.compact .card-body{padding:1rem;font-size:.875rem;line-height:1.25rem}.card-title{display:flex;align-items:center;gap:.5rem;font-size:1.25rem;line-height:1.75rem;font-weight:600}.card.image-full :where(figure){overflow:hidden;border-radius:inherit}.checkbox:focus{box-shadow:none}.checkbox:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/1))}.checkbox:checked,.checkbox[checked=true],.checkbox[aria-checked=true]{background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-color:var(--chkbg);background-image:linear-gradient(-45deg,transparent 65%,var(--chkbg) 65.99%),linear-gradient(45deg,transparent 75%,var(--chkbg) 75.99%),linear-gradient(-45deg,var(--chkbg) 40%,transparent 40.99%),linear-gradient(45deg,var(--chkbg) 30%,var(--chkfg) 30.99%,var(--chkfg) 40%,transparent 40.99%),linear-gradient(-45deg,var(--chkfg) 50%,var(--chkbg) 50.99%)}.checkbox:indeterminate{--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-image:linear-gradient(90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(-90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(0deg,var(--chkbg) 43%,var(--chkfg) 43%,var(--chkfg) 57%,var(--chkbg) 57%)}.checkbox:disabled{cursor:not-allowed;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.2}@keyframes checkmark{0%{background-position-y:5px}50%{background-position-y:-2px}to{background-position-y:0}}.divider:not(:empty){gap:1rem}.dropdown.dropdown-open .dropdown-content,.dropdown:focus .dropdown-content,.dropdown:focus-within .dropdown-content{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.input input:focus{outline:2px solid transparent;outline-offset:2px}.input[list]::-webkit-calendar-picker-indicator{line-height:1em}.input:focus,.input:focus-within{box-shadow:none;border-color:var(--fallback-bc,oklch(var(--bc)/.2));outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/.2))}.input-disabled,.input:disabled,.input[disabled]{cursor:not-allowed;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));color:var(--fallback-bc,oklch(var(--bc)/.4))}.input-disabled::-moz-placeholder,.input:disabled::-moz-placeholder,.input[disabled]::-moz-placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input-disabled::placeholder,.input:disabled::placeholder,.input[disabled]::placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input::-webkit-date-and-time-value{text-align:inherit}.link-primary{--tw-text-opacity: 1;color:var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)))}@supports (color:color-mix(in oklab,black,black)){@media (hover:hover){.link-primary:hover{color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 80%,black)}.link-secondary:hover{color:color-mix(in oklab,var(--fallback-s,oklch(var(--s)/1)) 80%,black)}}}.link-secondary{--tw-text-opacity: 1;color:var(--fallback-s,oklch(var(--s)/var(--tw-text-opacity)))}.link:focus{outline:2px solid transparent;outline-offset:2px}.link:focus-visible{outline:2px solid currentColor;outline-offset:2px}.loading{pointer-events:none;display:inline-block;aspect-ratio:1 / 1;width:1.5rem;background-color:currentColor;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='%23000' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle%3E.spinner_V8m1%7Btransform-origin:center;animation:spinner_zKoa 2s linear infinite%7D.spinner_V8m1 circle%7Bstroke-linecap:round;animation:spinner_YpZS 1.5s ease-out infinite%7D%40keyframes spinner_zKoa%7B100%25%7Btransform:rotate(360deg)%7D%7D%40keyframes spinner_YpZS%7B0%25%7Bstroke-dasharray:0 150;stroke-dashoffset:0%7D47.5%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-16%7D95%25%2C100%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-59%7D%7D%3C%2Fstyle%3E%3Cg class='spinner_V8m1'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3'%3E%3C%2Fcircle%3E%3C%2Fg%3E%3C%2Fsvg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='%23000' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle%3E.spinner_V8m1%7Btransform-origin:center;animation:spinner_zKoa 2s linear infinite%7D.spinner_V8m1 circle%7Bstroke-linecap:round;animation:spinner_YpZS 1.5s ease-out infinite%7D%40keyframes spinner_zKoa%7B100%25%7Btransform:rotate(360deg)%7D%7D%40keyframes spinner_YpZS%7B0%25%7Bstroke-dasharray:0 150;stroke-dashoffset:0%7D47.5%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-16%7D95%25%2C100%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-59%7D%7D%3C%2Fstyle%3E%3Cg class='spinner_V8m1'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3'%3E%3C%2Fcircle%3E%3C%2Fg%3E%3C%2Fsvg%3E")}:where(.menu li:empty){--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;margin:.5rem 1rem;height:1px}.menu :where(li ul):before{position:absolute;bottom:.75rem;inset-inline-start:0px;top:.75rem;width:1px;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;content:""}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--rounded-btn, .5rem);padding:.5rem 1rem;text-align:start;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s;text-wrap:balance}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):is(summary):not(.active):focus-visible,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):is(summary):not(.active):focus-visible{cursor:pointer;background-color:var(--fallback-bc,oklch(var(--bc)/.1));--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));outline:2px solid transparent;outline-offset:2px}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.menu :where(li>details>summary)::-webkit-details-marker{display:none}.menu :where(li>details>summary):after,.menu :where(li>.menu-dropdown-toggle):after{justify-self:end;display:block;margin-top:-.5rem;height:.5rem;width:.5rem;transform:rotate(45deg);transition-property:transform,margin-top;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);content:"";transform-origin:75% 75%;box-shadow:2px 2px;pointer-events:none}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{transform:rotate(225deg);margin-top:0}.mockup-phone .display{overflow:hidden;border-radius:40px;margin-top:-25px}.mockup-browser .mockup-browser-toolbar .input{position:relative;margin-left:auto;margin-right:auto;display:block;height:1.75rem;width:24rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));padding-left:2rem;direction:ltr}.mockup-browser .mockup-browser-toolbar .input:before{content:"";position:absolute;left:.5rem;top:50%;aspect-ratio:1 / 1;height:.75rem;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:2px;border-color:currentColor;opacity:.6}.mockup-browser .mockup-browser-toolbar .input:after{content:"";position:absolute;left:1.25rem;top:50%;height:.5rem;--tw-translate-y: 25%;--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:1px;border-color:currentColor;opacity:.6}@keyframes modal-pop{0%{opacity:0}}@keyframes progress-loading{50%{background-position-x:-115%}}.radio:focus{box-shadow:none}.radio:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/1))}.radio:checked,.radio[aria-checked=true]{--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));background-image:none;animation:radiomark var(--animation-input, .2s) ease-out;box-shadow:0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset}.radio:disabled{cursor:not-allowed;opacity:.2}@keyframes radiomark{0%{box-shadow:0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset}50%{box-shadow:0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset}to{box-shadow:0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset}}@keyframes rating-pop{0%{transform:translateY(-.125em)}40%{transform:translateY(-.125em)}to{transform:translateY(0)}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}:where(.stats)>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse: 0;border-top-width:calc(0px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(0px * var(--tw-divide-y-reverse))}:is([dir=rtl] .stats>:not([hidden])~:not([hidden])){--tw-divide-x-reverse: 1}.swap-rotate .swap-on,.swap-rotate .swap-indeterminate,.swap-rotate input:indeterminate~.swap-on{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.swap-rotate input:checked~.swap-off,.swap-active:where(.swap-rotate) .swap-off,.swap-rotate input:indeterminate~.swap-off{--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.swap-rotate input:checked~.swap-on,.swap-active:where(.swap-rotate) .swap-on,.swap-rotate input:indeterminate~.swap-indeterminate{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.swap-flip .swap-on,.swap-flip .swap-indeterminate,.swap-flip input:indeterminate~.swap-on{transform:rotateY(180deg);backface-visibility:hidden;opacity:1}.swap-flip input:checked~.swap-off,.swap-active:where(.swap-flip) .swap-off,.swap-flip input:indeterminate~.swap-off{transform:rotateY(-180deg);backface-visibility:hidden;opacity:1}.swap-flip input:checked~.swap-on,.swap-active:where(.swap-flip) .swap-on,.swap-flip input:indeterminate~.swap-indeterminate{transform:rotateY(0)}.tabs-lifted>.tab:focus-visible{border-end-end-radius:0;border-end-start-radius:0}.tab.tab-active:not(.tab-disabled):not([disabled]),.tab:is(input:checked){border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));--tw-border-opacity: 1;--tw-text-opacity: 1}.tab:focus{outline:2px solid transparent;outline-offset:2px}.tab:focus-visible{outline:2px solid currentColor;outline-offset:-5px}.tab-disabled,.tab[disabled]{cursor:not-allowed;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}.tabs-bordered>.tab{border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));--tw-border-opacity: .2;border-style:solid;border-bottom-width:calc(var(--tab-border, 1px) + 1px)}.tabs-lifted>.tab{border:var(--tab-border, 1px) solid transparent;border-width:0 0 var(--tab-border, 1px) 0;border-start-start-radius:var(--tab-radius, .5rem);border-start-end-radius:var(--tab-radius, .5rem);border-bottom-color:var(--tab-border-color);padding-inline-start:var(--tab-padding, 1rem);padding-inline-end:var(--tab-padding, 1rem);padding-top:var(--tab-border, 1px)}.tabs-lifted>.tab.tab-active:not(.tab-disabled):not([disabled]),.tabs-lifted>.tab:is(input:checked){background-color:var(--tab-bg);border-width:var(--tab-border, 1px) var(--tab-border, 1px) 0 var(--tab-border, 1px);border-inline-start-color:var(--tab-border-color);border-inline-end-color:var(--tab-border-color);border-top-color:var(--tab-border-color);padding-inline-start:calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));padding-inline-end:calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));padding-bottom:var(--tab-border, 1px);padding-top:0}.tabs-lifted>.tab.tab-active:not(.tab-disabled):not([disabled]):before,.tabs-lifted>.tab:is(input:checked):before{z-index:1;content:"";display:block;position:absolute;width:calc(100% + var(--tab-radius, .5rem) * 2);height:var(--tab-radius, .5rem);bottom:0;background-size:var(--tab-radius, .5rem);background-position:top left,top right;background-repeat:no-repeat;--tab-grad: calc(69% - var(--tab-border, 1px));--radius-start: radial-gradient( circle at top left, transparent var(--tab-grad), var(--tab-border-color) calc(var(--tab-grad) + .25px), var(--tab-border-color) calc(var(--tab-grad) + var(--tab-border, 1px)), var(--tab-bg) calc(var(--tab-grad) + var(--tab-border, 1px) + .25px) );--radius-end: radial-gradient( circle at top right, transparent var(--tab-grad), var(--tab-border-color) calc(var(--tab-grad) + .25px), var(--tab-border-color) calc(var(--tab-grad) + var(--tab-border, 1px)), var(--tab-bg) calc(var(--tab-grad) + var(--tab-border, 1px) + .25px) );background-image:var(--radius-start),var(--radius-end)}.tabs-lifted>.tab.tab-active:not(.tab-disabled):not([disabled]):first-child:before,.tabs-lifted>.tab:is(input:checked):first-child:before{background-image:var(--radius-end);background-position:top right}[dir=rtl] .tabs-lifted>.tab.tab-active:not(.tab-disabled):not([disabled]):first-child:before,[dir=rtl] .tabs-lifted>.tab:is(input:checked):first-child:before{background-image:var(--radius-start);background-position:top left}.tabs-lifted>.tab.tab-active:not(.tab-disabled):not([disabled]):last-child:before,.tabs-lifted>.tab:is(input:checked):last-child:before{background-image:var(--radius-start);background-position:top left}[dir=rtl] .tabs-lifted>.tab.tab-active:not(.tab-disabled):not([disabled]):last-child:before,[dir=rtl] .tabs-lifted>.tab:is(input:checked):last-child:before{background-image:var(--radius-end);background-position:top right}.tabs-lifted>.tab-active:not(.tab-disabled):not([disabled])+.tabs-lifted .tab-active:not(.tab-disabled):not([disabled]):before,.tabs-lifted>.tab:is(input:checked)+.tabs-lifted .tab:is(input:checked):before{background-image:var(--radius-end);background-position:top right}.tabs-boxed .tab{border-radius:var(--rounded-btn, .5rem)}.timeline hr{height:.25rem}:where(.timeline hr){--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}:where(.timeline:has(.timeline-middle) hr):first-child{border-start-end-radius:var(--rounded-badge, 1.9rem);border-end-end-radius:var(--rounded-badge, 1.9rem);border-start-start-radius:0px;border-end-start-radius:0px}:where(.timeline:has(.timeline-middle) hr):last-child{border-start-start-radius:var(--rounded-badge, 1.9rem);border-end-start-radius:var(--rounded-badge, 1.9rem);border-start-end-radius:0px;border-end-end-radius:0px}:where(.timeline:not(:has(.timeline-middle)) :first-child hr:last-child){border-start-start-radius:var(--rounded-badge, 1.9rem);border-end-start-radius:var(--rounded-badge, 1.9rem);border-start-end-radius:0px;border-end-end-radius:0px}:where(.timeline:not(:has(.timeline-middle)) :last-child hr:first-child){border-start-end-radius:var(--rounded-badge, 1.9rem);border-end-end-radius:var(--rounded-badge, 1.9rem);border-start-start-radius:0px;border-end-start-radius:0px}.timeline-box{border-radius:var(--rounded-box, 1rem);border-width:1px;--tw-border-opacity: 1;border-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));padding:.5rem 1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@keyframes toast-pop{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}:root .prose{--tw-prose-body: var(--fallback-bc,oklch(var(--bc)/.8));--tw-prose-headings: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-lead: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-links: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-bold: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-counters: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-bullets: var(--fallback-bc,oklch(var(--bc)/.5));--tw-prose-hr: var(--fallback-bc,oklch(var(--bc)/.2));--tw-prose-quotes: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-quote-borders: var(--fallback-bc,oklch(var(--bc)/.2));--tw-prose-captions: var(--fallback-bc,oklch(var(--bc)/.5));--tw-prose-code: var(--fallback-bc,oklch(var(--bc)/1));--tw-prose-pre-code: var(--fallback-nc,oklch(var(--nc)/1));--tw-prose-pre-bg: var(--fallback-n,oklch(var(--n)/1));--tw-prose-th-borders: var(--fallback-bc,oklch(var(--bc)/.5));--tw-prose-td-borders: var(--fallback-bc,oklch(var(--bc)/.2))}.prose :where(code):not(:where([class~=not-prose] *,pre *)){padding:1px 8px;border-radius:var(--rounded-badge);font-weight:initial;background-color:var(--fallback-bc,oklch(var(--bc)/.1))}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{display:none}.prose pre code{border-radius:0;padding:0}.prose :where(tbody tr,thead):not(:where([class~=not-prose] *)){border-bottom-color:var(--fallback-bc,oklch(var(--bc)/.2))}.btn-md{height:3rem;min-height:3rem;padding-left:1rem;padding-right:1rem;font-size:.875rem}.btn-square:where(.btn-md){height:3rem;width:3rem;padding:0}.btn-circle:where(.btn-md){height:3rem;width:3rem;border-radius:9999px;padding:0}.menu-horizontal{display:inline-flex;flex-direction:row}.menu-horizontal>li:not(.menu-title)>details>ul{position:absolute}.tabs-md :where(.tab){height:2rem;font-size:.875rem;line-height:1.25rem;line-height:2;--tab-padding: 1rem}.tabs-lg :where(.tab){height:3rem;font-size:1.125rem;line-height:1.75rem;line-height:2;--tab-padding: 1.25rem}.tabs-sm :where(.tab){height:1.5rem;font-size:.875rem;line-height:.75rem;--tab-padding: .75rem}.tabs-xs :where(.tab){height:1.25rem;font-size:.75rem;line-height:.75rem;--tab-padding: .5rem}.timeline-vertical{flex-direction:column}.timeline-compact,.timeline-horizontal.timeline-compact{--timeline-row-start: 0}.timeline-compact .timeline-start,.timeline-horizontal.timeline-compact .timeline-start{grid-column-start:1;grid-column-end:4;grid-row-start:3;grid-row-end:4;margin:.25rem;align-self:flex-start;justify-self:center}.timeline-compact li:has(.timeline-start) .timeline-end,.timeline-horizontal.timeline-compact li:has(.timeline-start) .timeline-end{grid-column-start:none;grid-row-start:auto}.timeline-vertical.timeline-compact>li{--timeline-col-start: 0}.timeline-vertical.timeline-compact .timeline-start{grid-column-start:3;grid-column-end:4;grid-row-start:1;grid-row-end:4;align-self:center;justify-self:start}.timeline-vertical.timeline-compact li:has(.timeline-start) .timeline-end{grid-column-start:auto;grid-row-start:none}:where(.timeline-vertical>li){--timeline-row-start: minmax(0, 1fr);--timeline-row-end: minmax(0, 1fr);justify-items:center}.timeline-vertical>li>hr{height:100%}:where(.timeline-vertical>li>hr):first-child{grid-column-start:2;grid-row-start:1}:where(.timeline-vertical>li>hr):last-child{grid-column-start:2;grid-column-end:auto;grid-row-start:3;grid-row-end:none}.timeline-vertical .timeline-start{grid-column-start:1;grid-column-end:2;grid-row-start:1;grid-row-end:4;align-self:center;justify-self:end}.timeline-vertical .timeline-end{grid-column-start:3;grid-column-end:4;grid-row-start:1;grid-row-end:4;align-self:center;justify-self:start}.timeline-vertical:where(.timeline-snap-icon)>li{--timeline-col-start: minmax(0, 1fr);--timeline-row-start: .5rem}.timeline-horizontal{flex-direction:row}.timeline-horizontal>li>hr{width:100%}:where(.timeline-horizontal>li){align-items:center}:where(.timeline-horizontal>li>hr):first-child{grid-column-start:1;grid-row-start:2}:where(.timeline-horizontal>li>hr):last-child{grid-column-start:3;grid-column-end:none;grid-row-start:2;grid-row-end:auto}.timeline-horizontal .timeline-start{grid-column-start:1;grid-column-end:4;grid-row-start:1;grid-row-end:2;align-self:flex-end;justify-self:center}.timeline-horizontal .timeline-end{grid-column-start:1;grid-column-end:4;grid-row-start:3;grid-row-end:4;align-self:flex-start;justify-self:center}:where(.timeline-snap-icon)>li,.timeline-horizontal:where(.timeline-snap-icon)>li{--timeline-col-start: .5rem;--timeline-row-start: minmax(0, 1fr)}.card-compact .card-body{padding:1rem;font-size:.875rem;line-height:1.25rem}.card-compact .card-title{margin-bottom:.25rem}.card-normal .card-body{padding:var(--padding-card, 2rem);font-size:1rem;line-height:1.5rem}.card-normal .card-title{margin-bottom:.75rem}.menu-horizontal>li:not(.menu-title)>details>ul{margin-inline-start:0px;margin-top:1rem;padding-top:.5rem;padding-bottom:.5rem;padding-inline-end:.5rem}.menu-horizontal>li>details>ul:before{content:none}:where(.menu-horizontal>li:not(.menu-title)>details>ul){border-radius:var(--rounded-box, 1rem);--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.menu-sm :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu-sm :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--rounded-btn, .5rem);padding:.25rem .75rem;font-size:.875rem;line-height:1.25rem}.menu-sm .menu-title{padding:.5rem .75rem}.timeline-vertical>li>hr{width:.25rem}:where(.timeline-vertical:has(.timeline-middle)>li>hr):first-child{border-bottom-right-radius:var(--rounded-badge, 1.9rem);border-bottom-left-radius:var(--rounded-badge, 1.9rem);border-top-left-radius:0;border-top-right-radius:0}:where(.timeline-vertical:has(.timeline-middle)>li>hr):last-child{border-top-left-radius:var(--rounded-badge, 1.9rem);border-top-right-radius:var(--rounded-badge, 1.9rem);border-bottom-right-radius:0;border-bottom-left-radius:0}:where(.timeline-vertical:not(:has(.timeline-middle)) :first-child>hr:last-child){border-top-left-radius:var(--rounded-badge, 1.9rem);border-top-right-radius:var(--rounded-badge, 1.9rem);border-bottom-right-radius:0;border-bottom-left-radius:0}:where(.timeline-vertical:not(:has(.timeline-middle)) :last-child>hr:first-child){border-bottom-right-radius:var(--rounded-badge, 1.9rem);border-bottom-left-radius:var(--rounded-badge, 1.9rem);border-top-left-radius:0;border-top-right-radius:0}.timeline-horizontal>li>hr{height:.25rem}:where(.timeline-horizontal:has(.timeline-middle)>li>hr):first-child{border-start-end-radius:var(--rounded-badge, 1.9rem);border-end-end-radius:var(--rounded-badge, 1.9rem);border-start-start-radius:0px;border-end-start-radius:0px}:where(.timeline-horizontal:has(.timeline-middle)>li>hr):last-child{border-start-start-radius:var(--rounded-badge, 1.9rem);border-end-start-radius:var(--rounded-badge, 1.9rem);border-start-end-radius:0px;border-end-end-radius:0px}:where(.timeline-horizontal:not(:has(.timeline-middle)) :first-child>hr:last-child){border-start-start-radius:var(--rounded-badge, 1.9rem);border-end-start-radius:var(--rounded-badge, 1.9rem);border-start-end-radius:0px;border-end-end-radius:0px}:where(.timeline-horizontal:not(:has(.timeline-middle)) :last-child>hr:first-child){border-start-end-radius:var(--rounded-badge, 1.9rem);border-end-end-radius:var(--rounded-badge, 1.9rem);border-start-start-radius:0px;border-end-start-radius:0px}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px rgb(var(--tw-prose-kbd-shadows) / 10%);font-size:.875em;border-radius:.3125rem;padding:.1875em .375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: 17 24 39;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: 255 255 255;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-left:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.fixed{position:fixed}.sticky{position:sticky}.top-0{top:0}.z-10{z-index:10}.z-\[1\]{z-index:1}.mx-\[-20px\]{margin-left:-20px;margin-right:-20px}.mx-\[-2px\]{margin-left:-2px;margin-right:-2px}.mx-auto{margin-left:auto;margin-right:auto}.mb-10{margin-bottom:2.5rem}.mb-5{margin-bottom:1.25rem}.mt-3{margin-top:.75rem}.mt-\[-4px\]{margin-top:-4px}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.inline-block{display:inline-block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.h-5{height:1.25rem}.h-8{height:2rem}.h-\[460px\]{height:460px}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.w-5{width:1.25rem}.w-52{width:13rem}.w-8{width:2rem}.w-\[192px\]{width:192px}.w-full{width:100%}.max-w-\[100vw\]{max-width:100vw}.max-w-\[720px\]{max-width:720px}.max-w-none{max-width:none}.snap-y{scroll-snap-type:y var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness: mandatory}.snap-start{scroll-snap-align:start}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.overflow-x-auto{overflow-x:auto}.rounded-\[30\%\]{border-radius:30%}.rounded-box{border-radius:var(--rounded-box, 1rem)}.rounded-btn{border-radius:var(--rounded-btn, .5rem)}.border{border-width:1px}.border-base-300{--tw-border-opacity: 1;border-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)))}.border-base-content{--tw-border-opacity: 1;border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)))}.border-opacity-5{--tw-border-opacity: .05}.bg-base-100{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.bg-base-300{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}.fill-current{fill:currentColor}.stroke-current{stroke:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-\[16px\]{padding-left:16px;padding-right:16px}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pl-\[24px\]{padding-left:24px}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.italic{font-style:italic}.tracking-\[8px\]{letter-spacing:8px}.text-accent{--tw-text-opacity: 1;color:var(--fallback-a,oklch(var(--a)/var(--tw-text-opacity)))}.text-secondary{--tw-text-opacity: 1;color:var(--fallback-s,oklch(var(--s)/var(--tw-text-opacity)))}.opacity-60{opacity:.6}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@media not all and (min-width: 768px){.max-md\:timeline-compact,.max-md\:timeline-compact .timeline-horizontal{--timeline-row-start: 0}.max-md\:timeline-compact .timeline-start,.max-md\:timeline-compact .timeline-horizontal .timeline-start{grid-column-start:1;grid-column-end:4;grid-row-start:3;grid-row-end:4;margin:.25rem;align-self:flex-start;justify-self:center}.max-md\:timeline-compact li:has(.timeline-start) .timeline-end,.max-md\:timeline-compact .timeline-horizontal li:has(.timeline-start) .timeline-end{grid-column-start:none;grid-row-start:auto}.max-md\:timeline-compact.timeline-vertical>li{--timeline-col-start: 0}.max-md\:timeline-compact.timeline-vertical .timeline-start{grid-column-start:3;grid-column-end:4;grid-row-start:1;grid-row-end:4;align-self:center;justify-self:start}.max-md\:timeline-compact.timeline-vertical li:has(.timeline-start) .timeline-end{grid-column-start:auto;grid-row-start:none}}@media (min-width: 640px){.sm\:card-side{align-items:stretch;flex-direction:row}.sm\:card-side :where(figure:first-child){overflow:hidden;border-start-start-radius:inherit;border-start-end-radius:unset;border-end-start-radius:inherit;border-end-end-radius:unset}.sm\:card-side :where(figure:last-child){overflow:hidden;border-start-start-radius:unset;border-start-end-radius:inherit;border-end-start-radius:unset;border-end-end-radius:inherit}.sm\:card-side figure>*{max-width:unset}:where(.sm\:card-side figure>*){width:100%;height:100%;-o-object-fit:cover;object-fit:cover}}.hover\:bg-base-200:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}@media not all and (min-width: 768px){.max-md\:order-first{order:-9999}.max-md\:gap-\[60px\]{gap:60px}.max-md\:text-left{text-align:left}.max-md\:text-center{text-align:center}}@media not all and (min-width: 640px){.max-sm\:pb-0{padding-bottom:0}}@media (min-width: 640px){.sm\:max-w-\[12rem\]{max-width:12rem}.sm\:max-w-none{max-width:none}.sm\:pe-0{padding-inline-end:0px}}@media (min-width: 768px){.md\:w-\[256px\]{width:256px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:justify-start{justify-content:flex-start}.md\:justify-end{justify-content:flex-end}.md\:p-5{padding:1.25rem}.md\:text-left{text-align:left}.md\:text-right{text-align:right}}@media (min-width: 1024px){.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-\[384px\]{width:384px}.lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}} diff --git a/test/data/warden/dist/client/_astro/client.olTvLX7Y.js b/test/data/warden/dist/client/_astro/client.olTvLX7Y.js new file mode 100644 index 0000000..af51804 --- /dev/null +++ b/test/data/warden/dist/client/_astro/client.olTvLX7Y.js @@ -0,0 +1,24 @@ +import{r as Je}from"./index.LFf77hJu.js";var No={exports:{}},ve={},zo={exports:{}},Po={};/** + * @license React + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */(function(e){function n(C,z){var P=C.length;C.push(z);e:for(;0>>1,Y=C[B];if(0>>1;Bl(al,P))vnl(Gt,al)?(C[B]=Gt,C[vn]=P,B=vn):(C[B]=al,C[mn]=P,B=mn);else if(vnl(Gt,P))C[B]=Gt,C[vn]=P,B=vn;else break e}}return z}function l(C,z){var P=C.sortIndex-z.sortIndex;return P!==0?P:C.id-z.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var u=Date,o=u.now();e.unstable_now=function(){return u.now()-o}}var s=[],f=[],v=1,m=null,p=3,g=!1,w=!1,k=!1,F=typeof setTimeout=="function"?setTimeout:null,c=typeof clearTimeout=="function"?clearTimeout:null,a=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function d(C){for(var z=t(f);z!==null;){if(z.callback===null)r(f);else if(z.startTime<=C)r(f),z.sortIndex=z.expirationTime,n(s,z);else break;z=t(f)}}function h(C){if(k=!1,d(C),!w)if(t(s)!==null)w=!0,ol(E);else{var z=t(f);z!==null&&sl(h,z.startTime-C)}}function E(C,z){w=!1,k&&(k=!1,c(N),N=-1),g=!0;var P=p;try{for(d(z),m=t(s);m!==null&&(!(m.expirationTime>z)||C&&!Ce());){var B=m.callback;if(typeof B=="function"){m.callback=null,p=m.priorityLevel;var Y=B(m.expirationTime<=z);z=e.unstable_now(),typeof Y=="function"?m.callback=Y:m===t(s)&&r(s),d(z)}else r(s);m=t(s)}if(m!==null)var Xt=!0;else{var mn=t(f);mn!==null&&sl(h,mn.startTime-z),Xt=!1}return Xt}finally{m=null,p=P,g=!1}}var x=!1,_=null,N=-1,H=5,T=-1;function Ce(){return!(e.unstable_now()-TC||125B?(C.sortIndex=P,n(f,C),t(s)===null&&C===t(f)&&(k?(c(N),N=-1):k=!0,sl(h,P-B))):(C.sortIndex=Y,n(s,C),w||g||(w=!0,ol(E))),C},e.unstable_shouldYield=Ce,e.unstable_wrapCallback=function(C){var z=p;return function(){var P=p;p=z;try{return C.apply(this,arguments)}finally{p=P}}}})(Po);zo.exports=Po;var Ra=zo.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var To=Je,me=Ra;function y(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Fl=Object.prototype.hasOwnProperty,Oa=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,wu={},ku={};function Fa(e){return Fl.call(ku,e)?!0:Fl.call(wu,e)?!1:Oa.test(e)?ku[e]=!0:(wu[e]=!0,!1)}function Ia(e,n,t,r){if(t!==null&&t.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return r?!1:t!==null?!t.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function ja(e,n,t,r){if(n===null||typeof n>"u"||Ia(e,n,t,r))return!0;if(r)return!1;if(t!==null)switch(t.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function ie(e,n,t,r,l,i,u){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=t,this.propertyName=e,this.type=n,this.sanitizeURL=i,this.removeEmptyString=u}var q={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){q[e]=new ie(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];q[n]=new ie(n,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){q[e]=new ie(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){q[e]=new ie(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){q[e]=new ie(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){q[e]=new ie(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){q[e]=new ie(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){q[e]=new ie(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){q[e]=new ie(e,5,!1,e.toLowerCase(),null,!1,!1)});var zi=/[\-:]([a-z])/g;function Pi(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(zi,Pi);q[n]=new ie(n,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(zi,Pi);q[n]=new ie(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(zi,Pi);q[n]=new ie(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){q[e]=new ie(e,1,!1,e.toLowerCase(),null,!1,!1)});q.xlinkHref=new ie("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){q[e]=new ie(e,1,!1,e.toLowerCase(),null,!0,!0)});function Ti(e,n,t,r){var l=q.hasOwnProperty(n)?q[n]:null;(l!==null?l.type!==0:r||!(2o||l[u]!==i[o]){var s=` +`+l[u].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=u&&0<=o);break}}}finally{fl=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:"")?mt(e):""}function Ua(e){switch(e.tag){case 5:return mt(e.type);case 16:return mt("Lazy");case 13:return mt("Suspense");case 19:return mt("SuspenseList");case 0:case 2:case 15:return e=dl(e.type,!1),e;case 11:return e=dl(e.type.render,!1),e;case 1:return e=dl(e.type,!0),e;default:return""}}function Al(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Dn:return"Fragment";case Mn:return"Portal";case Il:return"Profiler";case Li:return"StrictMode";case jl:return"Suspense";case Ul:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Do:return(e.displayName||"Context")+".Consumer";case Mo:return(e._context.displayName||"Context")+".Provider";case Mi:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Di:return n=e.displayName||null,n!==null?n:Al(e.type)||"Memo";case Ye:n=e._payload,e=e._init;try{return Al(e(n))}catch{}}return null}function Aa(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Al(n);case 8:return n===Li?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function an(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Oo(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function Va(e){var n=Oo(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),r=""+e[n];if(!e.hasOwnProperty(n)&&typeof t<"u"&&typeof t.get=="function"&&typeof t.set=="function"){var l=t.get,i=t.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return l.call(this)},set:function(u){r=""+u,i.call(this,u)}}),Object.defineProperty(e,n,{enumerable:t.enumerable}),{getValue:function(){return r},setValue:function(u){r=""+u},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function Jt(e){e._valueTracker||(e._valueTracker=Va(e))}function Fo(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),r="";return e&&(r=Oo(e)?e.checked?"true":"false":e.value),e=r,e!==t?(n.setValue(e),!0):!1}function Er(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Vl(e,n){var t=n.checked;return A({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:t??e._wrapperState.initialChecked})}function Eu(e,n){var t=n.defaultValue==null?"":n.defaultValue,r=n.checked!=null?n.checked:n.defaultChecked;t=an(n.value!=null?n.value:t),e._wrapperState={initialChecked:r,initialValue:t,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Io(e,n){n=n.checked,n!=null&&Ti(e,"checked",n,!1)}function Hl(e,n){Io(e,n);var t=an(n.value),r=n.type;if(t!=null)r==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?Bl(e,n.type,t):n.hasOwnProperty("defaultValue")&&Bl(e,n.type,an(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function Cu(e,n,t){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var r=n.type;if(!(r!=="submit"&&r!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,t||n===e.value||(e.value=n),e.defaultValue=n}t=e.name,t!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,t!==""&&(e.name=t)}function Bl(e,n,t){(n!=="number"||Er(e.ownerDocument)!==e)&&(t==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}var vt=Array.isArray;function Wn(e,n,t,r){if(e=e.options,n){n={};for(var l=0;l"+n.valueOf().toString()+"",n=qt.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Pt(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&t.nodeType===3){t.nodeValue=n;return}}e.textContent=n}var gt={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Ha=["Webkit","ms","Moz","O"];Object.keys(gt).forEach(function(e){Ha.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),gt[n]=gt[e]})});function Vo(e,n,t){return n==null||typeof n=="boolean"||n===""?"":t||typeof n!="number"||n===0||gt.hasOwnProperty(e)&>[e]?(""+n).trim():n+"px"}function Ho(e,n){e=e.style;for(var t in n)if(n.hasOwnProperty(t)){var r=t.indexOf("--")===0,l=Vo(t,n[t],r);t==="float"&&(t="cssFloat"),r?e.setProperty(t,l):e[t]=l}}var Ba=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function $l(e,n){if(n){if(Ba[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(y(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(y(60));if(typeof n.dangerouslySetInnerHTML!="object"||!("__html"in n.dangerouslySetInnerHTML))throw Error(y(61))}if(n.style!=null&&typeof n.style!="object")throw Error(y(62))}}function Kl(e,n){if(e.indexOf("-")===-1)return typeof n.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Yl=null;function Ri(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Xl=null,Qn=null,$n=null;function Nu(e){if(e=Kt(e)){if(typeof Xl!="function")throw Error(y(280));var n=e.stateNode;n&&(n=Zr(n),Xl(e.stateNode,e.type,n))}}function Bo(e){Qn?$n?$n.push(e):$n=[e]:Qn=e}function Wo(){if(Qn){var e=Qn,n=$n;if($n=Qn=null,Nu(e),n)for(e=0;e>>=0,e===0?32:31-(ba(e)/ec|0)|0}var bt=64,er=4194304;function ht(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Nr(e,n){var t=e.pendingLanes;if(t===0)return 0;var r=0,l=e.suspendedLanes,i=e.pingedLanes,u=t&268435455;if(u!==0){var o=u&~l;o!==0?r=ht(o):(i&=u,i!==0&&(r=ht(i)))}else u=t&~l,u!==0?r=ht(u):i!==0&&(r=ht(i));if(r===0)return 0;if(n!==0&&n!==r&&!(n&l)&&(l=r&-r,i=n&-n,l>=i||l===16&&(i&4194240)!==0))return n;if(r&4&&(r|=t&16),n=e.entangledLanes,n!==0)for(e=e.entanglements,n&=r;0t;t++)n.push(e);return n}function Qt(e,n,t){e.pendingLanes|=n,n!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,n=31-Pe(n),e[n]=t}function lc(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=kt),Fu=" ",Iu=!1;function as(e,n){switch(e){case"keyup":return Dc.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function cs(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Rn=!1;function Oc(e,n){switch(e){case"compositionend":return cs(n);case"keypress":return n.which!==32?null:(Iu=!0,Fu);case"textInput":return e=n.data,e===Fu&&Iu?null:e;default:return null}}function Fc(e,n){if(Rn)return e==="compositionend"||!Hi&&as(e,n)?(e=os(),pr=Ui=qe=null,Rn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:t,offset:n-e};e=r}e:{for(;t;){if(t.nextSibling){t=t.nextSibling;break e}t=t.parentNode}t=void 0}t=Vu(t)}}function ms(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?ms(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function vs(){for(var e=window,n=Er();n instanceof e.HTMLIFrameElement;){try{var t=typeof n.contentWindow.location.href=="string"}catch{t=!1}if(t)e=n.contentWindow;else break;n=Er(e.document)}return n}function Bi(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}function Qc(e){var n=vs(),t=e.focusedElem,r=e.selectionRange;if(n!==t&&t&&t.ownerDocument&&ms(t.ownerDocument.documentElement,t)){if(r!==null&&Bi(t)){if(n=r.start,e=r.end,e===void 0&&(e=n),"selectionStart"in t)t.selectionStart=n,t.selectionEnd=Math.min(e,t.value.length);else if(e=(n=t.ownerDocument||document)&&n.defaultView||window,e.getSelection){e=e.getSelection();var l=t.textContent.length,i=Math.min(r.start,l);r=r.end===void 0?i:Math.min(r.end,l),!e.extend&&i>r&&(l=r,r=i,i=l),l=Hu(t,i);var u=Hu(t,r);l&&u&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==u.node||e.focusOffset!==u.offset)&&(n=n.createRange(),n.setStart(l.node,l.offset),e.removeAllRanges(),i>r?(e.addRange(n),e.extend(u.node,u.offset)):(n.setEnd(u.node,u.offset),e.addRange(n)))}}for(n=[],e=t;e=e.parentNode;)e.nodeType===1&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof t.focus=="function"&&t.focus(),t=0;t=document.documentMode,On=null,ei=null,Et=null,ni=!1;function Bu(e,n,t){var r=t.window===t?t.document:t.nodeType===9?t:t.ownerDocument;ni||On==null||On!==Er(r)||(r=On,"selectionStart"in r&&Bi(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Et&&Ot(Et,r)||(Et=r,r=Tr(ei,"onSelect"),0jn||(e.current=oi[jn],oi[jn]=null,jn--)}function D(e,n){jn++,oi[jn]=e.current,e.current=n}var cn={},te=dn(cn),se=dn(!1),Cn=cn;function Zn(e,n){var t=e.type.contextTypes;if(!t)return cn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l={},i;for(i in t)l[i]=n[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=l),l}function ae(e){return e=e.childContextTypes,e!=null}function Mr(){O(se),O(te)}function Gu(e,n,t){if(te.current!==cn)throw Error(y(168));D(te,n),D(se,t)}function xs(e,n,t){var r=e.stateNode;if(n=n.childContextTypes,typeof r.getChildContext!="function")return t;r=r.getChildContext();for(var l in r)if(!(l in n))throw Error(y(108,Aa(e)||"Unknown",l));return A({},t,r)}function Dr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||cn,Cn=te.current,D(te,e),D(se,se.current),!0}function Zu(e,n,t){var r=e.stateNode;if(!r)throw Error(y(169));t?(e=xs(e,n,Cn),r.__reactInternalMemoizedMergedChildContext=e,O(se),O(te),D(te,e)):O(se),D(se,t)}var je=null,Jr=!1,Nl=!1;function _s(e){je===null?je=[e]:je.push(e)}function tf(e){Jr=!0,_s(e)}function pn(){if(!Nl&&je!==null){Nl=!0;var e=0,n=M;try{var t=je;for(M=1;e>=u,l-=u,Ue=1<<32-Pe(n)+l|t<N?(H=_,_=null):H=_.sibling;var T=p(c,_,d[N],h);if(T===null){_===null&&(_=H);break}e&&_&&T.alternate===null&&n(c,_),a=i(T,a,N),x===null?E=T:x.sibling=T,x=T,_=H}if(N===d.length)return t(c,_),I&&hn(c,N),E;if(_===null){for(;NN?(H=_,_=null):H=_.sibling;var Ce=p(c,_,T.value,h);if(Ce===null){_===null&&(_=H);break}e&&_&&Ce.alternate===null&&n(c,_),a=i(Ce,a,N),x===null?E=Ce:x.sibling=Ce,x=Ce,_=H}if(T.done)return t(c,_),I&&hn(c,N),E;if(_===null){for(;!T.done;N++,T=d.next())T=m(c,T.value,h),T!==null&&(a=i(T,a,N),x===null?E=T:x.sibling=T,x=T);return I&&hn(c,N),E}for(_=r(c,_);!T.done;N++,T=d.next())T=g(_,c,N,T.value,h),T!==null&&(e&&T.alternate!==null&&_.delete(T.key===null?N:T.key),a=i(T,a,N),x===null?E=T:x.sibling=T,x=T);return e&&_.forEach(function(lt){return n(c,lt)}),I&&hn(c,N),E}function F(c,a,d,h){if(typeof d=="object"&&d!==null&&d.type===Dn&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case Zt:e:{for(var E=d.key,x=a;x!==null;){if(x.key===E){if(E=d.type,E===Dn){if(x.tag===7){t(c,x.sibling),a=l(x,d.props.children),a.return=c,c=a;break e}}else if(x.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===Ye&&ro(E)===x.type){t(c,x.sibling),a=l(x,d.props),a.ref=ft(c,x,d),a.return=c,c=a;break e}t(c,x);break}else n(c,x);x=x.sibling}d.type===Dn?(a=En(d.props.children,c.mode,h,d.key),a.return=c,c=a):(h=Sr(d.type,d.key,d.props,null,c.mode,h),h.ref=ft(c,a,d),h.return=c,c=h)}return u(c);case Mn:e:{for(x=d.key;a!==null;){if(a.key===x)if(a.tag===4&&a.stateNode.containerInfo===d.containerInfo&&a.stateNode.implementation===d.implementation){t(c,a.sibling),a=l(a,d.children||[]),a.return=c,c=a;break e}else{t(c,a);break}else n(c,a);a=a.sibling}a=Ol(d,c.mode,h),a.return=c,c=a}return u(c);case Ye:return x=d._init,F(c,a,x(d._payload),h)}if(vt(d))return w(c,a,d,h);if(ut(d))return k(c,a,d,h);or(c,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,a!==null&&a.tag===6?(t(c,a.sibling),a=l(a,d),a.return=c,c=a):(t(c,a),a=Rl(d,c.mode,h),a.return=c,c=a),u(c)):t(c,a)}return F}var qn=Rs(!0),Os=Rs(!1),Yt={},Fe=dn(Yt),Ut=dn(Yt),At=dn(Yt);function kn(e){if(e===Yt)throw Error(y(174));return e}function Ji(e,n){switch(D(At,n),D(Ut,e),D(Fe,Yt),e=n.nodeType,e){case 9:case 11:n=(n=n.documentElement)?n.namespaceURI:Ql(null,"");break;default:e=e===8?n.parentNode:n,n=e.namespaceURI||null,e=e.tagName,n=Ql(n,e)}O(Fe),D(Fe,n)}function bn(){O(Fe),O(Ut),O(At)}function Fs(e){kn(At.current);var n=kn(Fe.current),t=Ql(n,e.type);n!==t&&(D(Ut,e),D(Fe,t))}function qi(e){Ut.current===e&&(O(Fe),O(Ut))}var j=dn(0);function Ur(e){for(var n=e;n!==null;){if(n.tag===13){var t=n.memoizedState;if(t!==null&&(t=t.dehydrated,t===null||t.data==="$?"||t.data==="$!"))return n}else if(n.tag===19&&n.memoizedProps.revealOrder!==void 0){if(n.flags&128)return n}else if(n.child!==null){n.child.return=n,n=n.child;continue}if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var zl=[];function bi(){for(var e=0;et?t:4,e(!0);var r=Pl.transition;Pl.transition={};try{e(!1),n()}finally{M=t,Pl.transition=r}}function Js(){return Ee().memoizedState}function of(e,n,t){var r=on(e);if(t={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null},qs(e))bs(n,t);else if(t=Ts(e,n,t,r),t!==null){var l=le();Te(t,e,r,l),ea(t,n,r)}}function sf(e,n,t){var r=on(e),l={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null};if(qs(e))bs(n,l);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=n.lastRenderedReducer,i!==null))try{var u=n.lastRenderedState,o=i(u,t);if(l.hasEagerState=!0,l.eagerState=o,Le(o,u)){var s=n.interleaved;s===null?(l.next=l,Gi(n)):(l.next=s.next,s.next=l),n.interleaved=l;return}}catch{}finally{}t=Ts(e,n,l,r),t!==null&&(l=le(),Te(t,e,r,l),ea(t,n,r))}}function qs(e){var n=e.alternate;return e===U||n!==null&&n===U}function bs(e,n){Ct=Ar=!0;var t=e.pending;t===null?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function ea(e,n,t){if(t&4194240){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,Fi(e,t)}}var Vr={readContext:Se,useCallback:b,useContext:b,useEffect:b,useImperativeHandle:b,useInsertionEffect:b,useLayoutEffect:b,useMemo:b,useReducer:b,useRef:b,useState:b,useDebugValue:b,useDeferredValue:b,useTransition:b,useMutableSource:b,useSyncExternalStore:b,useId:b,unstable_isNewReconciler:!1},af={readContext:Se,useCallback:function(e,n){return De().memoizedState=[e,n===void 0?null:n],e},useContext:Se,useEffect:io,useImperativeHandle:function(e,n,t){return t=t!=null?t.concat([e]):null,yr(4194308,4,Ks.bind(null,n,e),t)},useLayoutEffect:function(e,n){return yr(4194308,4,e,n)},useInsertionEffect:function(e,n){return yr(4,2,e,n)},useMemo:function(e,n){var t=De();return n=n===void 0?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=De();return n=t!==void 0?t(n):n,r.memoizedState=r.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},r.queue=e,e=e.dispatch=of.bind(null,U,e),[r.memoizedState,e]},useRef:function(e){var n=De();return e={current:e},n.memoizedState=e},useState:lo,useDebugValue:lu,useDeferredValue:function(e){return De().memoizedState=e},useTransition:function(){var e=lo(!1),n=e[0];return e=uf.bind(null,e[1]),De().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,t){var r=U,l=De();if(I){if(t===void 0)throw Error(y(407));t=t()}else{if(t=n(),G===null)throw Error(y(349));_n&30||Us(r,n,t)}l.memoizedState=t;var i={value:t,getSnapshot:n};return l.queue=i,io(Vs.bind(null,r,i,e),[e]),r.flags|=2048,Bt(9,As.bind(null,r,i,t,n),void 0,null),t},useId:function(){var e=De(),n=G.identifierPrefix;if(I){var t=Ae,r=Ue;t=(r&~(1<<32-Pe(r)-1)).toString(32)+t,n=":"+n+"R"+t,t=Vt++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=u.createElement(t,{is:r.is}):(e=u.createElement(t),t==="select"&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,t),e[Re]=n,e[jt]=r,aa(e,n,!1,!1),n.stateNode=e;e:{switch(u=Kl(t,r),t){case"dialog":R("cancel",e),R("close",e),l=r;break;case"iframe":case"object":case"embed":R("load",e),l=r;break;case"video":case"audio":for(l=0;lnt&&(n.flags|=128,r=!0,dt(i,!1),n.lanes=4194304)}else{if(!r)if(e=Ur(u),e!==null){if(n.flags|=128,r=!0,t=e.updateQueue,t!==null&&(n.updateQueue=t,n.flags|=4),dt(i,!0),i.tail===null&&i.tailMode==="hidden"&&!u.alternate&&!I)return ee(n),null}else 2*W()-i.renderingStartTime>nt&&t!==1073741824&&(n.flags|=128,r=!0,dt(i,!1),n.lanes=4194304);i.isBackwards?(u.sibling=n.child,n.child=u):(t=i.last,t!==null?t.sibling=u:n.child=u,i.last=u)}return i.tail!==null?(n=i.tail,i.rendering=n,i.tail=n.sibling,i.renderingStartTime=W(),n.sibling=null,t=j.current,D(j,r?t&1|2:t&1),n):(ee(n),null);case 22:case 23:return cu(),r=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(n.flags|=8192),r&&n.mode&1?fe&1073741824&&(ee(n),n.subtreeFlags&6&&(n.flags|=8192)):ee(n),null;case 24:return null;case 25:return null}throw Error(y(156,n.tag))}function yf(e,n){switch(Qi(n),n.tag){case 1:return ae(n.type)&&Mr(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return bn(),O(se),O(te),bi(),e=n.flags,e&65536&&!(e&128)?(n.flags=e&-65537|128,n):null;case 5:return qi(n),null;case 13:if(O(j),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(y(340));Jn()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return O(j),null;case 4:return bn(),null;case 10:return Xi(n.type._context),null;case 22:case 23:return cu(),null;case 24:return null;default:return null}}var ar=!1,ne=!1,gf=typeof WeakSet=="function"?WeakSet:Set,S=null;function Hn(e,n){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(r){V(e,n,r)}else t.current=null}function wi(e,n,t){try{t()}catch(r){V(e,n,r)}}var vo=!1;function wf(e,n){if(ti=zr,e=vs(),Bi(e)){if("selectionStart"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{t=(t=e.ownerDocument)&&t.defaultView||window;var r=t.getSelection&&t.getSelection();if(r&&r.rangeCount!==0){t=r.anchorNode;var l=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{t.nodeType,i.nodeType}catch{t=null;break e}var u=0,o=-1,s=-1,f=0,v=0,m=e,p=null;n:for(;;){for(var g;m!==t||l!==0&&m.nodeType!==3||(o=u+l),m!==i||r!==0&&m.nodeType!==3||(s=u+r),m.nodeType===3&&(u+=m.nodeValue.length),(g=m.firstChild)!==null;)p=m,m=g;for(;;){if(m===e)break n;if(p===t&&++f===l&&(o=u),p===i&&++v===r&&(s=u),(g=m.nextSibling)!==null)break;m=p,p=m.parentNode}m=g}t=o===-1||s===-1?null:{start:o,end:s}}else t=null}t=t||{start:0,end:0}}else t=null;for(ri={focusedElem:e,selectionRange:t},zr=!1,S=n;S!==null;)if(n=S,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,S=e;else for(;S!==null;){n=S;try{var w=n.alternate;if(n.flags&1024)switch(n.tag){case 0:case 11:case 15:break;case 1:if(w!==null){var k=w.memoizedProps,F=w.memoizedState,c=n.stateNode,a=c.getSnapshotBeforeUpdate(n.elementType===n.type?k:_e(n.type,k),F);c.__reactInternalSnapshotBeforeUpdate=a}break;case 3:var d=n.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(y(163))}}catch(h){V(n,n.return,h)}if(e=n.sibling,e!==null){e.return=n.return,S=e;break}S=n.return}return w=vo,vo=!1,w}function xt(e,n,t){var r=n.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var i=l.destroy;l.destroy=void 0,i!==void 0&&wi(n,t,i)}l=l.next}while(l!==r)}}function el(e,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function ki(e){var n=e.ref;if(n!==null){var t=e.stateNode;switch(e.tag){case 5:e=t;break;default:e=t}typeof n=="function"?n(e):n.current=e}}function da(e){var n=e.alternate;n!==null&&(e.alternate=null,da(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[Re],delete n[jt],delete n[ui],delete n[ef],delete n[nf])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function pa(e){return e.tag===5||e.tag===3||e.tag===4}function ho(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||pa(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Si(e,n,t){var r=e.tag;if(r===5||r===6)e=e.stateNode,n?t.nodeType===8?t.parentNode.insertBefore(e,n):t.insertBefore(e,n):(t.nodeType===8?(n=t.parentNode,n.insertBefore(e,t)):(n=t,n.appendChild(e)),t=t._reactRootContainer,t!=null||n.onclick!==null||(n.onclick=Lr));else if(r!==4&&(e=e.child,e!==null))for(Si(e,n,t),e=e.sibling;e!==null;)Si(e,n,t),e=e.sibling}function Ei(e,n,t){var r=e.tag;if(r===5||r===6)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Ei(e,n,t),e=e.sibling;e!==null;)Ei(e,n,t),e=e.sibling}var Z=null,Ne=!1;function Ke(e,n,t){for(t=t.child;t!==null;)ma(e,n,t),t=t.sibling}function ma(e,n,t){if(Oe&&typeof Oe.onCommitFiberUnmount=="function")try{Oe.onCommitFiberUnmount(Kr,t)}catch{}switch(t.tag){case 5:ne||Hn(t,n);case 6:var r=Z,l=Ne;Z=null,Ke(e,n,t),Z=r,Ne=l,Z!==null&&(Ne?(e=Z,t=t.stateNode,e.nodeType===8?e.parentNode.removeChild(t):e.removeChild(t)):Z.removeChild(t.stateNode));break;case 18:Z!==null&&(Ne?(e=Z,t=t.stateNode,e.nodeType===8?_l(e.parentNode,t):e.nodeType===1&&_l(e,t),Dt(e)):_l(Z,t.stateNode));break;case 4:r=Z,l=Ne,Z=t.stateNode.containerInfo,Ne=!0,Ke(e,n,t),Z=r,Ne=l;break;case 0:case 11:case 14:case 15:if(!ne&&(r=t.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var i=l,u=i.destroy;i=i.tag,u!==void 0&&(i&2||i&4)&&wi(t,n,u),l=l.next}while(l!==r)}Ke(e,n,t);break;case 1:if(!ne&&(Hn(t,n),r=t.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=t.memoizedProps,r.state=t.memoizedState,r.componentWillUnmount()}catch(o){V(t,n,o)}Ke(e,n,t);break;case 21:Ke(e,n,t);break;case 22:t.mode&1?(ne=(r=ne)||t.memoizedState!==null,Ke(e,n,t),ne=r):Ke(e,n,t);break;default:Ke(e,n,t)}}function yo(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var t=e.stateNode;t===null&&(t=e.stateNode=new gf),n.forEach(function(r){var l=Pf.bind(null,e,r);t.has(r)||(t.add(r),r.then(l,l))})}}function xe(e,n){var t=n.deletions;if(t!==null)for(var r=0;rl&&(l=u),r&=~i}if(r=l,r=W()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Sf(r/1960))-r,10e?16:e,be===null)var r=!1;else{if(e=be,be=null,Wr=0,L&6)throw Error(y(331));var l=L;for(L|=4,S=e.current;S!==null;){var i=S,u=i.child;if(S.flags&16){var o=i.deletions;if(o!==null){for(var s=0;sW()-su?Sn(e,0):ou|=t),ce(e,n)}function Ea(e,n){n===0&&(e.mode&1?(n=er,er<<=1,!(er&130023424)&&(er=4194304)):n=1);var t=le();e=We(e,n),e!==null&&(Qt(e,n,t),ce(e,t))}function zf(e){var n=e.memoizedState,t=0;n!==null&&(t=n.retryLane),Ea(e,t)}function Pf(e,n){var t=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(t=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(y(314))}r!==null&&r.delete(n),Ea(e,t)}var Ca;Ca=function(e,n,t){if(e!==null)if(e.memoizedProps!==n.pendingProps||se.current)oe=!0;else{if(!(e.lanes&t)&&!(n.flags&128))return oe=!1,vf(e,n,t);oe=!!(e.flags&131072)}else oe=!1,I&&n.flags&1048576&&Ns(n,Or,n.index);switch(n.lanes=0,n.tag){case 2:var r=n.type;gr(e,n),e=n.pendingProps;var l=Zn(n,te.current);Yn(n,t),l=nu(null,n,r,e,l,t);var i=tu();return n.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,ae(r)?(i=!0,Dr(n)):i=!1,n.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Zi(n),l.updater=qr,n.stateNode=l,l._reactInternals=n,di(n,r,e,t),n=vi(null,n,r,!0,i,t)):(n.tag=0,I&&i&&Wi(n),re(null,n,l,t),n=n.child),n;case 16:r=n.elementType;e:{switch(gr(e,n),e=n.pendingProps,l=r._init,r=l(r._payload),n.type=r,l=n.tag=Lf(r),e=_e(r,e),l){case 0:n=mi(null,n,r,e,t);break e;case 1:n=fo(null,n,r,e,t);break e;case 11:n=ao(null,n,r,e,t);break e;case 14:n=co(null,n,r,_e(r.type,e),t);break e}throw Error(y(306,r,""))}return n;case 0:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:_e(r,l),mi(e,n,r,l,t);case 1:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:_e(r,l),fo(e,n,r,l,t);case 3:e:{if(ua(n),e===null)throw Error(y(387));r=n.pendingProps,i=n.memoizedState,l=i.element,Ls(e,n),jr(n,r,null,t);var u=n.memoizedState;if(r=u.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:u.cache,pendingSuspenseBoundaries:u.pendingSuspenseBoundaries,transitions:u.transitions},n.updateQueue.baseState=i,n.memoizedState=i,n.flags&256){l=et(Error(y(423)),n),n=po(e,n,r,t,l);break e}else if(r!==l){l=et(Error(y(424)),n),n=po(e,n,r,t,l);break e}else for(de=rn(n.stateNode.containerInfo.firstChild),pe=n,I=!0,ze=null,t=Os(n,null,r,t),n.child=t;t;)t.flags=t.flags&-3|4096,t=t.sibling;else{if(Jn(),r===l){n=Qe(e,n,t);break e}re(e,n,r,t)}n=n.child}return n;case 5:return Fs(n),e===null&&ai(n),r=n.type,l=n.pendingProps,i=e!==null?e.memoizedProps:null,u=l.children,li(r,l)?u=null:i!==null&&li(r,i)&&(n.flags|=32),ia(e,n),re(e,n,u,t),n.child;case 6:return e===null&&ai(n),null;case 13:return oa(e,n,t);case 4:return Ji(n,n.stateNode.containerInfo),r=n.pendingProps,e===null?n.child=qn(n,null,r,t):re(e,n,r,t),n.child;case 11:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:_e(r,l),ao(e,n,r,l,t);case 7:return re(e,n,n.pendingProps,t),n.child;case 8:return re(e,n,n.pendingProps.children,t),n.child;case 12:return re(e,n,n.pendingProps.children,t),n.child;case 10:e:{if(r=n.type._context,l=n.pendingProps,i=n.memoizedProps,u=l.value,D(Fr,r._currentValue),r._currentValue=u,i!==null)if(Le(i.value,u)){if(i.children===l.children&&!se.current){n=Qe(e,n,t);break e}}else for(i=n.child,i!==null&&(i.return=n);i!==null;){var o=i.dependencies;if(o!==null){u=i.child;for(var s=o.firstContext;s!==null;){if(s.context===r){if(i.tag===1){s=Ve(-1,t&-t),s.tag=2;var f=i.updateQueue;if(f!==null){f=f.shared;var v=f.pending;v===null?s.next=s:(s.next=v.next,v.next=s),f.pending=s}}i.lanes|=t,s=i.alternate,s!==null&&(s.lanes|=t),ci(i.return,t,n),o.lanes|=t;break}s=s.next}}else if(i.tag===10)u=i.type===n.type?null:i.child;else if(i.tag===18){if(u=i.return,u===null)throw Error(y(341));u.lanes|=t,o=u.alternate,o!==null&&(o.lanes|=t),ci(u,t,n),u=i.sibling}else u=i.child;if(u!==null)u.return=i;else for(u=i;u!==null;){if(u===n){u=null;break}if(i=u.sibling,i!==null){i.return=u.return,u=i;break}u=u.return}i=u}re(e,n,l.children,t),n=n.child}return n;case 9:return l=n.type,r=n.pendingProps.children,Yn(n,t),l=Se(l),r=r(l),n.flags|=1,re(e,n,r,t),n.child;case 14:return r=n.type,l=_e(r,n.pendingProps),l=_e(r.type,l),co(e,n,r,l,t);case 15:return ra(e,n,n.type,n.pendingProps,t);case 17:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:_e(r,l),gr(e,n),n.tag=1,ae(r)?(e=!0,Dr(n)):e=!1,Yn(n,t),Ds(n,r,l),di(n,r,l,t),vi(null,n,r,!0,e,t);case 19:return sa(e,n,t);case 22:return la(e,n,t)}throw Error(y(156,n.tag))};function xa(e,n){return Zo(e,n)}function Tf(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function we(e,n,t,r){return new Tf(e,n,t,r)}function du(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Lf(e){if(typeof e=="function")return du(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Mi)return 11;if(e===Di)return 14}return 2}function sn(e,n){var t=e.alternate;return t===null?(t=we(e.tag,n,e.key,e.mode),t.elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=e.flags&14680064,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Sr(e,n,t,r,l,i){var u=2;if(r=e,typeof e=="function")du(e)&&(u=1);else if(typeof e=="string")u=5;else e:switch(e){case Dn:return En(t.children,l,i,n);case Li:u=8,l|=8;break;case Il:return e=we(12,t,n,l|2),e.elementType=Il,e.lanes=i,e;case jl:return e=we(13,t,n,l),e.elementType=jl,e.lanes=i,e;case Ul:return e=we(19,t,n,l),e.elementType=Ul,e.lanes=i,e;case Ro:return tl(t,l,i,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Mo:u=10;break e;case Do:u=9;break e;case Mi:u=11;break e;case Di:u=14;break e;case Ye:u=16,r=null;break e}throw Error(y(130,e==null?e:typeof e,""))}return n=we(u,t,n,l),n.elementType=e,n.type=r,n.lanes=i,n}function En(e,n,t,r){return e=we(7,e,r,n),e.lanes=t,e}function tl(e,n,t,r){return e=we(22,e,r,n),e.elementType=Ro,e.lanes=t,e.stateNode={isHidden:!1},e}function Rl(e,n,t){return e=we(6,e,null,n),e.lanes=t,e}function Ol(e,n,t){return n=we(4,e.children!==null?e.children:[],e.key,n),n.lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function Mf(e,n,t,r,l){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=ml(0),this.expirationTimes=ml(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ml(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function pu(e,n,t,r,l,i,u,o,s){return e=new Mf(e,n,t,o,s),n===1?(n=1,i===!0&&(n|=8)):n=0,i=we(3,null,null,n),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},Zi(i),e}function Df(e,n,t){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Pa)}catch(e){console.error(e)}}Pa(),No.exports=ve;var jf=No.exports,Ta,La,_o=jf;La=_o.createRoot,Ta=_o.hydrateRoot;const yu=({value:e,name:n,hydrate:t=!0})=>{if(!e)return null;const r=t?"astro-slot":"astro-static-slot";return Je.createElement(r,{name:n,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:e}})};yu.shouldComponentUpdate=()=>!1;function Uf(e){for(const n in e)if(n.startsWith("__reactContainer"))return n}function Ma(e){let n={};for(const t of e.attributes)n[t.name]=t.value;return Je.createElement(e.localName,n,Array.from(e.childNodes).map(t=>t.nodeType===Node.TEXT_NODE?t.data:t.nodeType===Node.ELEMENT_NODE?Ma(t):void 0).filter(t=>!!t))}function Af(e,n){if(n&&e){let t=[],r=document.createElement("template");r.innerHTML=e;for(let l of r.content.children)t.push(Ma(l));return t}else return e?Je.createElement(yu,{value:e}):void 0}const Hf=e=>(n,t,{default:r,...l},{client:i})=>{if(!e.hasAttribute("ssr"))return;const u={identifierPrefix:e.getAttribute("prefix")};for(const[f,v]of Object.entries(l))t[f]=Je.createElement(yu,{value:v,name:f});const o=Je.createElement(n,t,Af(r,e.hasAttribute("data-react-children"))),s=Uf(e);if(s&&delete e[s],i==="only")return Je.startTransition(()=>{const f=La(e);f.render(o),e.addEventListener("astro:unmount",()=>f.unmount(),{once:!0})});Je.startTransition(()=>{const f=Ta(e,o,u);f.render(o),e.addEventListener("astro:unmount",()=>f.unmount(),{once:!0})})};export{Hf as default}; diff --git a/test/data/warden/dist/client/_astro/hoisted.l-JsOPk0.js b/test/data/warden/dist/client/_astro/hoisted.l-JsOPk0.js new file mode 100644 index 0000000..261f79d --- /dev/null +++ b/test/data/warden/dist/client/_astro/hoisted.l-JsOPk0.js @@ -0,0 +1 @@ +const Q="astro:before-preparation",Z="astro:after-preparation",ee="astro:before-swap",te="astro:after-swap",ne=e=>document.dispatchEvent(new Event(e));class q extends Event{from;to;direction;navigationType;sourceElement;info;newDocument;constructor(t,n,o,r,a,l,f,i,m){super(t,n),this.from=o,this.to=r,this.direction=a,this.navigationType=l,this.sourceElement=f,this.info=i,this.newDocument=m,Object.defineProperties(this,{from:{enumerable:!0},to:{enumerable:!0,writable:!0},direction:{enumerable:!0,writable:!0},navigationType:{enumerable:!0},sourceElement:{enumerable:!0},info:{enumerable:!0},newDocument:{enumerable:!0,writable:!0}})}}class oe extends q{formData;loader;constructor(t,n,o,r,a,l,f,i,m){super(Q,{cancelable:!0},t,n,o,r,a,l,f),this.formData=i,this.loader=m.bind(this,this),Object.defineProperties(this,{formData:{enumerable:!0},loader:{enumerable:!0,writable:!0}})}}class re extends q{direction;viewTransition;swap;constructor(t,n,o){super(ee,void 0,t.from,t.to,t.direction,t.navigationType,t.sourceElement,t.info,t.newDocument),this.direction=t.direction,this.viewTransition=n,this.swap=o.bind(this,this),Object.defineProperties(this,{direction:{enumerable:!0},viewTransition:{enumerable:!0},swap:{enumerable:!0,writable:!0}})}}async function ie(e,t,n,o,r,a,l,f){const i=new oe(e,t,n,o,r,a,window.document,l,f);return document.dispatchEvent(i)&&(await i.loader(),i.defaultPrevented||(ne(Z),i.navigationType!=="traverse"&&P({scrollX,scrollY}))),i}async function se(e,t,n){const o=new re(e,t,n);return document.dispatchEvent(o),o.swap(),o}const ae=history.pushState.bind(history),v=history.replaceState.bind(history),P=e=>{history.state&&(history.scrollRestoration="manual",v({...history.state,...e},""))},k=!!document.startViewTransition,I=()=>!!document.querySelector('[name="astro-view-transitions-enabled"]'),C=(e,t)=>e.pathname===t.pathname&&e.search===t.search;let L,p,A=!1,U;const B=e=>document.dispatchEvent(new Event(e)),V=()=>B("astro:page-load"),ce=()=>{let e=document.createElement("div");e.setAttribute("aria-live","assertive"),e.setAttribute("aria-atomic","true"),e.className="astro-route-announcer",document.body.append(e),setTimeout(()=>{let t=document.title||document.querySelector("h1")?.textContent||location.pathname;e.textContent=t},60)},w="data-astro-transition-persist",W="data-astro-transition",X="data-astro-transition-fallback";let H,b=0;history.state?(b=history.state.index,scrollTo({left:history.state.scrollX,top:history.state.scrollY})):I()&&(v({index:b,scrollX,scrollY},""),history.scrollRestoration="manual");const le=(e,t)=>{let n=!1,o=!1;return(...r)=>{if(n){o=!0;return}e(...r),n=!0,setTimeout(()=>{o&&(o=!1,e(...r)),n=!1},t)}};async function ue(e,t){try{const n=await fetch(e,t),r=(n.headers.get("content-type")??"").split(";",1)[0].trim();return r!=="text/html"&&r!=="application/xhtml+xml"?null:{html:await n.text(),redirected:n.redirected?n.url:void 0,mediaType:r}}catch{return null}}function Y(){const e=document.querySelector('[name="astro-view-transitions-fallback"]');return e?e.getAttribute("content"):"animate"}function fe(){let e=Promise.resolve();for(const t of Array.from(document.scripts)){if(t.dataset.astroExec==="")continue;const n=t.getAttribute("type");if(n&&n!=="module"&&n!=="text/javascript")continue;const o=document.createElement("script");o.innerHTML=t.innerHTML;for(const r of t.attributes){if(r.name==="src"){const a=new Promise(l=>{o.onload=o.onerror=l});e=e.then(()=>a)}o.setAttribute(r.name,r.value)}o.dataset.astroExec="",t.replaceWith(o)}return e}const j=(e,t,n,o,r)=>{const a=C(t,e),l=document.title;document.title=o;let f=!1;if(e.href!==location.href&&!r)if(n.history==="replace"){const i=history.state;v({...n.state,index:i.index,scrollX:i.scrollX,scrollY:i.scrollY},"",e.href)}else ae({...n.state,index:++b,scrollX:0,scrollY:0},"",e.href);if(L=e,a||(scrollTo({left:0,top:0,behavior:"instant"}),f=!0),r)scrollTo(r.scrollX,r.scrollY);else{if(e.hash){history.scrollRestoration="auto";const i=history.state;location.href=e.href,history.state||v(i,"")}else f||scrollTo({left:0,top:0,behavior:"instant"});history.scrollRestoration="manual"}document.title=l};function de(e){const t=[];for(const n of e.querySelectorAll("head link[rel=stylesheet]"))if(!document.querySelector(`[${w}="${n.getAttribute(w)}"], link[rel=stylesheet][href="${n.getAttribute("href")}"]`)){const o=document.createElement("link");o.setAttribute("rel","preload"),o.setAttribute("as","style"),o.setAttribute("href",n.getAttribute("href")),t.push(new Promise(r=>{["load","error"].forEach(a=>o.addEventListener(a,r)),document.head.append(o)}))}return t}async function M(e,t,n,o){const r=(s,d)=>{const h=s.getAttribute(w),g=h&&d.head.querySelector(`[${w}="${h}"]`);if(g)return g;if(s.matches("link[rel=stylesheet]")){const T=s.getAttribute("href");return d.head.querySelector(`link[rel=stylesheet][href="${T}"]`)}return null},a=()=>{const s=document.activeElement;if(s?.closest(`[${w}]`)){if(s instanceof HTMLInputElement||s instanceof HTMLTextAreaElement){const d=s.selectionStart,h=s.selectionEnd;return{activeElement:s,start:d,end:h}}return{activeElement:s}}else return{activeElement:null}},l=({activeElement:s,start:d,end:h})=>{s&&(s.focus(),(s instanceof HTMLInputElement||s instanceof HTMLTextAreaElement)&&(s.selectionStart=d,s.selectionEnd=h))},f=s=>{const d=document.documentElement,h=[...d.attributes].filter(({name:c})=>(d.removeAttribute(c),c.startsWith("data-astro-")));[...s.newDocument.documentElement.attributes,...h].forEach(({name:c,value:u})=>d.setAttribute(c,u));for(const c of document.scripts)for(const u of s.newDocument.scripts)if(!c.src&&c.textContent===u.textContent||c.src&&c.type===u.type&&c.src===u.src){u.dataset.astroExec="";break}for(const c of Array.from(document.head.children)){const u=r(c,s.newDocument);u?u.remove():c.remove()}document.head.append(...s.newDocument.head.children);const g=document.body,T=a();document.body.replaceWith(s.newDocument.body);for(const c of g.querySelectorAll(`[${w}]`)){const u=c.getAttribute(w),R=document.querySelector(`[${w}="${u}"]`);R&&R.replaceWith(c)}l(T)};async function i(s){function d(c){const u=c.effect;return!u||!(u instanceof KeyframeEffect)||!u.target?!1:window.getComputedStyle(u.target,u.pseudoElement).animationIterationCount==="infinite"}const h=document.getAnimations();document.documentElement.setAttribute(X,s);const T=document.getAnimations().filter(c=>!h.includes(c)&&!d(c));return Promise.all(T.map(c=>c.finished))}if(!A)document.documentElement.setAttribute(W,e.direction),o==="animate"&&await i("old");else throw new DOMException("Transition was skipped");const m=document.title,y=await se(e,p,f);j(y.to,y.from,t,m,n),B(te),o==="animate"&&!A&&i("new").then(()=>U())}async function K(e,t,n,o,r){if(!I()||location.origin!==n.origin){location.href=n.href;return}const a=r?"traverse":o.history==="replace"?"replace":"push";if(a!=="traverse"&&P({scrollX,scrollY}),C(t,n)&&n.hash){j(n,t,o,document.title,r);return}const l=await ie(t,n,e,a,o.sourceElement,o.info,o.formData,f);if(l.defaultPrevented){location.href=n.href;return}async function f(i){const m=i.to.href,y={};if(i.formData){y.method="POST";const h=i.sourceElement instanceof HTMLFormElement?i.sourceElement:i.sourceElement instanceof HTMLElement&&"form"in i.sourceElement?i.sourceElement.form:i.sourceElement?.closest("form");y.body=h?.attributes.getNamedItem("enctype")?.value==="application/x-www-form-urlencoded"?new URLSearchParams(i.formData):i.formData}const s=await ue(m,y);if(s===null){i.preventDefault();return}if(s.redirected&&(i.to=new URL(s.redirected)),H??=new DOMParser,i.newDocument=H.parseFromString(s.html,s.mediaType),i.newDocument.querySelectorAll("noscript").forEach(h=>h.remove()),!i.newDocument.querySelector('[name="astro-view-transitions-enabled"]')&&!i.formData){i.preventDefault();return}const d=de(i.newDocument);d.length&&await Promise.all(d)}if(A=!1,k)p=document.startViewTransition(async()=>await M(l,o,r));else{const i=(async()=>{await new Promise(m=>setTimeout(m)),await M(l,o,r,Y())})();p={updateCallbackDone:i,ready:i,finished:new Promise(m=>U=m),skipTransition:()=>{A=!0}}}p.ready.then(async()=>{await fe(),V(),ce()}),p.finished.then(()=>{document.documentElement.removeAttribute(W),document.documentElement.removeAttribute(X)}),await p.ready}async function N(e,t){await K("forward",L,new URL(e,location.href),t??{})}function me(e){if(!I()&&e.state){location.reload();return}if(e.state===null)return;const t=history.state,n=t.index,o=n>b?"forward":"back";b=n,K(o,L,new URL(location.href),{},t)}const F=()=>{P({scrollX,scrollY})};{(k||Y()!=="none")&&(L=new URL(location.href),addEventListener("popstate",me),addEventListener("load",V),"onscrollend"in window?addEventListener("scrollend",F):addEventListener("scroll",le(F,350),{passive:!0}));for(const e of document.scripts)e.dataset.astroExec=""}const G=new Set,S=new WeakSet;let x,z,$=!1;function he(e){$||($=!0,x??=e?.prefetchAll??!1,z??=e?.defaultStrategy??"hover",we(),ye(),pe(),Te())}function we(){for(const e of["touchstart","mousedown"])document.body.addEventListener(e,t=>{E(t.target,"tap")&&D(t.target.href,{with:"fetch",ignoreSlowConnection:!0})},{passive:!0})}function ye(){let e;document.body.addEventListener("focusin",o=>{E(o.target,"hover")&&t(o)},{passive:!0}),document.body.addEventListener("focusout",n,{passive:!0}),O(()=>{for(const o of document.getElementsByTagName("a"))S.has(o)||E(o,"hover")&&(S.add(o),o.addEventListener("mouseenter",t,{passive:!0}),o.addEventListener("mouseleave",n,{passive:!0}))});function t(o){const r=o.target.href;e&&clearTimeout(e),e=setTimeout(()=>{D(r,{with:"fetch"})},80)}function n(){e&&(clearTimeout(e),e=0)}}function pe(){let e;O(()=>{for(const t of document.getElementsByTagName("a"))S.has(t)||E(t,"viewport")&&(S.add(t),e??=ge(),e.observe(t))})}function ge(){const e=new WeakMap;return new IntersectionObserver((t,n)=>{for(const o of t){const r=o.target,a=e.get(r);o.isIntersecting?(a&&clearTimeout(a),e.set(r,setTimeout(()=>{n.unobserve(r),e.delete(r),D(r.href,{with:"link"})},300))):a&&(clearTimeout(a),e.delete(r))}})}function Te(){O(()=>{for(const e of document.getElementsByTagName("a"))E(e,"load")&&D(e.href,{with:"link"})})}function D(e,t){const n=t?.ignoreSlowConnection??!1;if(!be(e,n))return;if(G.add(e),(t?.with??"link")==="link"){const r=document.createElement("link");r.rel="prefetch",r.setAttribute("href",e),document.head.append(r)}else fetch(e).catch(r=>{console.log(`[astro] Failed to prefetch ${e}`),console.error(r)})}function be(e,t){if(!navigator.onLine||!t&&J())return!1;try{const n=new URL(e,location.href);return location.origin===n.origin&&(location.pathname!==n.pathname||location.search!==n.search)&&!G.has(e)}catch{}return!1}function E(e,t){if(e?.tagName!=="A")return!1;const n=e.dataset.astroPrefetch;return n==="false"?!1:t==="tap"&&(n!=null||x)&&J()?!0:n==null&&x||n===""?t===z:n===t}function J(){if("connection"in navigator){const e=navigator.connection;return e.saveData||/2g/.test(e.effectiveType)}return!1}function O(e){e();let t=!1;document.addEventListener("astro:page-load",()=>{if(!t){t=!0;return}e()})}function Ee(){const e=document.querySelector('[name="astro-view-transitions-fallback"]');return e?e.getAttribute("content"):"animate"}function _(e){return e.dataset.astroReload!==void 0}(k||Ee()!=="none")&&(document.addEventListener("click",e=>{let t=e.target;if(e.composed&&(t=e.composedPath()[0]),t instanceof Element&&(t=t.closest("a, area")),!(t instanceof HTMLAnchorElement)&&!(t instanceof SVGAElement)&&!(t instanceof HTMLAreaElement))return;const n=t instanceof HTMLElement?t.target:t.target.baseVal,o=t instanceof HTMLElement?t.href:t.href.baseVal,r=new URL(o,location.href).origin;_(t)||t.hasAttribute("download")||!t.href||n&&n!=="_self"||r!==location.origin||e.button!==0||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||e.defaultPrevented||(e.preventDefault(),N(o,{history:t.dataset.astroHistory==="replace"?"replace":"auto",sourceElement:t}))}),document.addEventListener("submit",e=>{let t=e.target;if(t.tagName!=="FORM"||e.defaultPrevented||_(t))return;const n=t,o=e.submitter,r=new FormData(n,o);let a=o?.getAttribute("formaction")??n.action??location.pathname;const l=o?.getAttribute("formmethod")??n.method;if(l==="dialog"||location.origin!==new URL(a,location.href).origin)return;const f={sourceElement:o??n};if(l==="get"){const i=new URLSearchParams(r),m=new URL(a);m.search=i.toString(),a=m.toString()}else f.formData=r;e.preventDefault(),N(a,f)}),he({prefetchAll:!0})); diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-100.6qNbweSL.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-100.6qNbweSL.woff2 new file mode 100644 index 0000000..066ac60 Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-100.6qNbweSL.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-100italic.E22nrI7z.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-100italic.E22nrI7z.woff2 new file mode 100644 index 0000000..d0852f8 Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-100italic.E22nrI7z.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-200.GFXE_YJc.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-200.GFXE_YJc.woff2 new file mode 100644 index 0000000..b6fed8e Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-200.GFXE_YJc.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-200italic.pJK4yaaG.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-200italic.pJK4yaaG.woff2 new file mode 100644 index 0000000..5119f1f Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-200italic.pJK4yaaG.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-300.RVbRgkxX.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-300.RVbRgkxX.woff2 new file mode 100644 index 0000000..aaab334 Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-300.RVbRgkxX.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-300italic.ZdSVgmcR.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-300italic.ZdSVgmcR.woff2 new file mode 100644 index 0000000..2fbe4c4 Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-300italic.ZdSVgmcR.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-500.xAA_w-Ac.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-500.xAA_w-Ac.woff2 new file mode 100644 index 0000000..f71d315 Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-500.xAA_w-Ac.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-500italic.Unq84pJ7.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-500italic.Unq84pJ7.woff2 new file mode 100644 index 0000000..b4cd639 Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-500italic.Unq84pJ7.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-600.cuuqzllG.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-600.cuuqzllG.woff2 new file mode 100644 index 0000000..5e04a71 Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-600.cuuqzllG.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-600italic.vDhUog1q.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-600italic.vDhUog1q.woff2 new file mode 100644 index 0000000..6661fd1 Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-600italic.vDhUog1q.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-700.yX9JjmCp.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-700.yX9JjmCp.woff2 new file mode 100644 index 0000000..316d5b5 Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-700.yX9JjmCp.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-700italic.QM1RA0vx.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-700italic.QM1RA0vx.woff2 new file mode 100644 index 0000000..1d7b71b Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-700italic.QM1RA0vx.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-italic.MiJiQVsi.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-italic.MiJiQVsi.woff2 new file mode 100644 index 0000000..5645b4d Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-italic.MiJiQVsi.woff2 differ diff --git a/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-regular.HRmMD3sQ.woff2 b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-regular.HRmMD3sQ.woff2 new file mode 100644 index 0000000..4a563ca Binary files /dev/null and b/test/data/warden/dist/client/_astro/ibm-plex-serif-v19-latin-regular.HRmMD3sQ.woff2 differ diff --git a/test/data/warden/dist/client/_astro/index.LFf77hJu.js b/test/data/warden/dist/client/_astro/index.LFf77hJu.js new file mode 100644 index 0000000..ff0b665 --- /dev/null +++ b/test/data/warden/dist/client/_astro/index.LFf77hJu.js @@ -0,0 +1,9 @@ +var b={exports:{}},r={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var y=Symbol.for("react.element"),T=Symbol.for("react.portal"),V=Symbol.for("react.fragment"),A=Symbol.for("react.strict_mode"),D=Symbol.for("react.profiler"),U=Symbol.for("react.provider"),q=Symbol.for("react.context"),F=Symbol.for("react.forward_ref"),L=Symbol.for("react.suspense"),M=Symbol.for("react.memo"),N=Symbol.for("react.lazy"),w=Symbol.iterator;function z(e){return e===null||typeof e!="object"?null:(e=w&&e[w]||e["@@iterator"],typeof e=="function"?e:null)}var C={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},x=Object.assign,j={};function p(e,t,n){this.props=e,this.context=t,this.refs=j,this.updater=n||C}p.prototype.isReactComponent={};p.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};p.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function O(){}O.prototype=p.prototype;function m(e,t,n){this.props=e,this.context=t,this.refs=j,this.updater=n||C}var S=m.prototype=new O;S.constructor=m;x(S,p.prototype);S.isPureReactComponent=!0;var R=Array.isArray,g=Object.prototype.hasOwnProperty,E={current:null},P={key:!0,ref:!0,__self:!0,__source:!0};function I(e,t,n){var u,o={},i=null,s=null;if(t!=null)for(u in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(i=""+t.key),t)g.call(t,u)&&!P.hasOwnProperty(u)&&(o[u]=t[u]);var f=arguments.length-2;if(f===1)o.children=n;else if(1 + SmartSheep Logo + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/data/warden/dist/client/media/nicolas-saintot-xkFhOdId7mA-unsplash.jpg b/test/data/warden/dist/client/media/nicolas-saintot-xkFhOdId7mA-unsplash.jpg new file mode 100644 index 0000000..5b9291b Binary files /dev/null and b/test/data/warden/dist/client/media/nicolas-saintot-xkFhOdId7mA-unsplash.jpg differ diff --git a/test/data/warden/dist/client/sitemap-0.xml b/test/data/warden/dist/client/sitemap-0.xml new file mode 100644 index 0000000..deb490b --- /dev/null +++ b/test/data/warden/dist/client/sitemap-0.xml @@ -0,0 +1 @@ +https://smartsheep.studio/https://smartsheep.studio/events/https://smartsheep.studio/posts/ \ No newline at end of file diff --git a/test/data/warden/dist/client/sitemap-index.xml b/test/data/warden/dist/client/sitemap-index.xml new file mode 100644 index 0000000..7551fef --- /dev/null +++ b/test/data/warden/dist/client/sitemap-index.xml @@ -0,0 +1 @@ +https://smartsheep.studio/sitemap-0.xml \ No newline at end of file diff --git a/test/data/warden/dist/server/_empty-middleware.mjs b/test/data/warden/dist/server/_empty-middleware.mjs new file mode 100644 index 0000000..0dc1231 --- /dev/null +++ b/test/data/warden/dist/server/_empty-middleware.mjs @@ -0,0 +1,3 @@ +const onRequest = undefined; + +export { onRequest }; diff --git a/test/data/warden/dist/server/chunks/_slug__3BAY271A.mjs b/test/data/warden/dist/server/chunks/_slug__3BAY271A.mjs new file mode 100644 index 0000000..e624a1f --- /dev/null +++ b/test/data/warden/dist/server/chunks/_slug__3BAY271A.mjs @@ -0,0 +1,6 @@ +export { renderers } from '../renderers.mjs'; +export { onRequest } from '../_empty-middleware.mjs'; + +const page = () => import('./pages/_slug__TUDhKBhQ.mjs').then(n => n.c); + +export { page }; diff --git a/test/data/warden/dist/server/chunks/_slug__EgGcJ0nJ.mjs b/test/data/warden/dist/server/chunks/_slug__EgGcJ0nJ.mjs new file mode 100644 index 0000000..e8f8dd2 --- /dev/null +++ b/test/data/warden/dist/server/chunks/_slug__EgGcJ0nJ.mjs @@ -0,0 +1,6 @@ +export { renderers } from '../renderers.mjs'; +export { onRequest } from '../_empty-middleware.mjs'; + +const page = () => import('./pages/_slug__TUDhKBhQ.mjs').then(n => n._); + +export { page }; diff --git a/test/data/warden/dist/server/chunks/_slug__wxGnmrgA.mjs b/test/data/warden/dist/server/chunks/_slug__wxGnmrgA.mjs new file mode 100644 index 0000000..42ff10f --- /dev/null +++ b/test/data/warden/dist/server/chunks/_slug__wxGnmrgA.mjs @@ -0,0 +1,6 @@ +export { renderers } from '../renderers.mjs'; +export { onRequest } from '../_empty-middleware.mjs'; + +const page = () => import('./pages/_slug__TUDhKBhQ.mjs').then(n => n.d); + +export { page }; diff --git a/test/data/warden/dist/server/chunks/astro/assets-service_4dMyVCFm.mjs b/test/data/warden/dist/server/chunks/astro/assets-service_4dMyVCFm.mjs new file mode 100644 index 0000000..98b9fea --- /dev/null +++ b/test/data/warden/dist/server/chunks/astro/assets-service_4dMyVCFm.mjs @@ -0,0 +1,342 @@ +import { isRemotePath, joinPaths } from '@astrojs/internal-helpers/path'; +import { A as AstroError, E as ExpectedImage, L as LocalImageUsedWrongly, M as MissingImageDimension, U as UnsupportedImageFormat, I as IncompatibleDescriptorOptions, a as UnsupportedImageConversion, b as MissingSharp } from '../astro_5WdVqH1c.mjs'; + +const VALID_SUPPORTED_FORMATS = [ + "jpeg", + "jpg", + "png", + "tiff", + "webp", + "gif", + "svg", + "avif" +]; +const DEFAULT_OUTPUT_FORMAT = "webp"; +const DEFAULT_HASH_PROPS = ["src", "width", "height", "format", "quality"]; + +function isESMImportedImage(src) { + return typeof src === "object"; +} +function isRemoteImage(src) { + return typeof src === "string"; +} + +function matchPattern(url, remotePattern) { + return matchProtocol(url, remotePattern.protocol) && matchHostname(url, remotePattern.hostname, true) && matchPort(url, remotePattern.port) && matchPathname(url, remotePattern.pathname, true); +} +function matchPort(url, port) { + return !port || port === url.port; +} +function matchProtocol(url, protocol) { + return !protocol || protocol === url.protocol.slice(0, -1); +} +function matchHostname(url, hostname, allowWildcard) { + if (!hostname) { + return true; + } else if (!allowWildcard || !hostname.startsWith("*")) { + return hostname === url.hostname; + } else if (hostname.startsWith("**.")) { + const slicedHostname = hostname.slice(2); + return slicedHostname !== url.hostname && url.hostname.endsWith(slicedHostname); + } else if (hostname.startsWith("*.")) { + const slicedHostname = hostname.slice(1); + const additionalSubdomains = url.hostname.replace(slicedHostname, "").split(".").filter(Boolean); + return additionalSubdomains.length === 1; + } + return false; +} +function matchPathname(url, pathname, allowWildcard) { + if (!pathname) { + return true; + } else if (!allowWildcard || !pathname.endsWith("*")) { + return pathname === url.pathname; + } else if (pathname.endsWith("/**")) { + const slicedPathname = pathname.slice(0, -2); + return slicedPathname !== url.pathname && url.pathname.startsWith(slicedPathname); + } else if (pathname.endsWith("/*")) { + const slicedPathname = pathname.slice(0, -1); + const additionalPathChunks = url.pathname.replace(slicedPathname, "").split("/").filter(Boolean); + return additionalPathChunks.length === 1; + } + return false; +} +function isRemoteAllowed(src, { + domains = [], + remotePatterns = [] +}) { + if (!isRemotePath(src)) + return false; + const url = new URL(src); + return domains.some((domain) => matchHostname(url, domain)) || remotePatterns.some((remotePattern) => matchPattern(url, remotePattern)); +} + +function isLocalService(service) { + if (!service) { + return false; + } + return "transform" in service; +} +function parseQuality(quality) { + let result = parseInt(quality); + if (Number.isNaN(result)) { + return quality; + } + return result; +} +const baseService = { + propertiesToHash: DEFAULT_HASH_PROPS, + validateOptions(options) { + if (!options.src || typeof options.src !== "string" && typeof options.src !== "object") { + throw new AstroError({ + ...ExpectedImage, + message: ExpectedImage.message( + JSON.stringify(options.src), + typeof options.src, + JSON.stringify(options, (_, v) => v === void 0 ? null : v) + ) + }); + } + if (!isESMImportedImage(options.src)) { + if (options.src.startsWith("/@fs/") || !isRemotePath(options.src) && !options.src.startsWith("/")) { + throw new AstroError({ + ...LocalImageUsedWrongly, + message: LocalImageUsedWrongly.message(options.src) + }); + } + let missingDimension; + if (!options.width && !options.height) { + missingDimension = "both"; + } else if (!options.width && options.height) { + missingDimension = "width"; + } else if (options.width && !options.height) { + missingDimension = "height"; + } + if (missingDimension) { + throw new AstroError({ + ...MissingImageDimension, + message: MissingImageDimension.message(missingDimension, options.src) + }); + } + } else { + if (!VALID_SUPPORTED_FORMATS.includes(options.src.format)) { + throw new AstroError({ + ...UnsupportedImageFormat, + message: UnsupportedImageFormat.message( + options.src.format, + options.src.src, + VALID_SUPPORTED_FORMATS + ) + }); + } + if (options.widths && options.densities) { + throw new AstroError(IncompatibleDescriptorOptions); + } + if (options.src.format === "svg") { + options.format = "svg"; + } + if (options.src.format === "svg" && options.format !== "svg" || options.src.format !== "svg" && options.format === "svg") { + throw new AstroError(UnsupportedImageConversion); + } + } + if (!options.format) { + options.format = DEFAULT_OUTPUT_FORMAT; + } + if (options.width) + options.width = Math.round(options.width); + if (options.height) + options.height = Math.round(options.height); + return options; + }, + getHTMLAttributes(options) { + const { targetWidth, targetHeight } = getTargetDimensions(options); + const { src, width, height, format, quality, densities, widths, formats, ...attributes } = options; + return { + ...attributes, + width: targetWidth, + height: targetHeight, + loading: attributes.loading ?? "lazy", + decoding: attributes.decoding ?? "async" + }; + }, + getSrcSet(options) { + const srcSet = []; + const { targetWidth } = getTargetDimensions(options); + const { widths, densities } = options; + const targetFormat = options.format ?? DEFAULT_OUTPUT_FORMAT; + let imageWidth = options.width; + let maxWidth = Infinity; + if (isESMImportedImage(options.src)) { + imageWidth = options.src.width; + maxWidth = imageWidth; + } + const { + width: transformWidth, + height: transformHeight, + ...transformWithoutDimensions + } = options; + const allWidths = []; + if (densities) { + const densityValues = densities.map((density) => { + if (typeof density === "number") { + return density; + } else { + return parseFloat(density); + } + }); + const densityWidths = densityValues.sort().map((density) => Math.round(targetWidth * density)); + allWidths.push( + ...densityWidths.map((width, index) => ({ + maxTargetWidth: Math.min(width, maxWidth), + descriptor: `${densityValues[index]}x` + })) + ); + } else if (widths) { + allWidths.push( + ...widths.map((width) => ({ + maxTargetWidth: Math.min(width, maxWidth), + descriptor: `${width}w` + })) + ); + } + for (const { maxTargetWidth, descriptor } of allWidths) { + const srcSetTransform = { ...transformWithoutDimensions }; + if (maxTargetWidth !== imageWidth) { + srcSetTransform.width = maxTargetWidth; + } else { + if (options.width && options.height) { + srcSetTransform.width = options.width; + srcSetTransform.height = options.height; + } + } + srcSet.push({ + transform: srcSetTransform, + descriptor, + attributes: { + type: `image/${targetFormat}` + } + }); + } + return srcSet; + }, + getURL(options, imageConfig) { + const searchParams = new URLSearchParams(); + if (isESMImportedImage(options.src)) { + searchParams.append("href", options.src.src); + } else if (isRemoteAllowed(options.src, imageConfig)) { + searchParams.append("href", options.src); + } else { + return options.src; + } + const params = { + w: "width", + h: "height", + q: "quality", + f: "format" + }; + Object.entries(params).forEach(([param, key]) => { + options[key] && searchParams.append(param, options[key].toString()); + }); + const imageEndpoint = joinPaths("/", "/_image"); + return `${imageEndpoint}?${searchParams}`; + }, + parseURL(url) { + const params = url.searchParams; + if (!params.has("href")) { + return void 0; + } + const transform = { + src: params.get("href"), + width: params.has("w") ? parseInt(params.get("w")) : void 0, + height: params.has("h") ? parseInt(params.get("h")) : void 0, + format: params.get("f"), + quality: params.get("q") + }; + return transform; + } +}; +function getTargetDimensions(options) { + let targetWidth = options.width; + let targetHeight = options.height; + if (isESMImportedImage(options.src)) { + const aspectRatio = options.src.width / options.src.height; + if (targetHeight && !targetWidth) { + targetWidth = Math.round(targetHeight * aspectRatio); + } else if (targetWidth && !targetHeight) { + targetHeight = Math.round(targetWidth / aspectRatio); + } else if (!targetWidth && !targetHeight) { + targetWidth = options.src.width; + targetHeight = options.src.height; + } + } + return { + targetWidth, + targetHeight + }; +} + +let sharp; +const qualityTable = { + low: 25, + mid: 50, + high: 80, + max: 100 +}; +async function loadSharp() { + let sharpImport; + try { + sharpImport = (await import('sharp')).default; + } catch (e) { + throw new AstroError(MissingSharp); + } + return sharpImport; +} +const sharpService = { + validateOptions: baseService.validateOptions, + getURL: baseService.getURL, + parseURL: baseService.parseURL, + getHTMLAttributes: baseService.getHTMLAttributes, + getSrcSet: baseService.getSrcSet, + async transform(inputBuffer, transformOptions, config) { + if (!sharp) + sharp = await loadSharp(); + const transform = transformOptions; + if (transform.format === "svg") + return { data: inputBuffer, format: "svg" }; + const result = sharp(inputBuffer, { + failOnError: false, + pages: -1, + limitInputPixels: config.service.config.limitInputPixels + }); + result.rotate(); + if (transform.height && !transform.width) { + result.resize({ height: Math.round(transform.height) }); + } else if (transform.width) { + result.resize({ width: Math.round(transform.width) }); + } + if (transform.format) { + let quality = void 0; + if (transform.quality) { + const parsedQuality = parseQuality(transform.quality); + if (typeof parsedQuality === "number") { + quality = parsedQuality; + } else { + quality = transform.quality in qualityTable ? qualityTable[transform.quality] : void 0; + } + } + result.toFormat(transform.format, { quality }); + } + const { data, info } = await result.toBuffer({ resolveWithObject: true }); + return { + data, + format: info.format + }; + } +}; +var sharp_default = sharpService; + +const sharp$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({ + __proto__: null, + default: sharp_default +}, Symbol.toStringTag, { value: 'Module' })); + +export { DEFAULT_HASH_PROPS as D, isLocalService as a, isRemoteImage as b, isRemoteAllowed as c, isESMImportedImage as i, sharp$1 as s }; diff --git a/test/data/warden/dist/server/chunks/astro_5WdVqH1c.mjs b/test/data/warden/dist/server/chunks/astro_5WdVqH1c.mjs new file mode 100644 index 0000000..1929659 --- /dev/null +++ b/test/data/warden/dist/server/chunks/astro_5WdVqH1c.mjs @@ -0,0 +1,2196 @@ +import { bold } from 'kleur/colors'; +import { escape } from 'html-escaper'; +import { clsx } from 'clsx'; + +const ClientAddressNotAvailable = { + name: "ClientAddressNotAvailable", + title: "`Astro.clientAddress` is not available in current adapter.", + message: (adapterName) => `\`Astro.clientAddress\` is not available in the \`${adapterName}\` adapter. File an issue with the adapter to add support.` +}; +const StaticClientAddressNotAvailable = { + name: "StaticClientAddressNotAvailable", + title: "`Astro.clientAddress` is not available in static mode.", + message: "`Astro.clientAddress` is only available when using `output: 'server.rs'` or `output: 'hybrid'`. Update your Astro config if you need SSR features.", + hint: "See https://docs.astro.build/en/guides/server-side-rendering/ for more information on how to enable SSR." +}; +const NoMatchingStaticPathFound = { + name: "NoMatchingStaticPathFound", + title: "No static path found for requested path.", + message: (pathName) => `A \`getStaticPaths()\` route pattern was matched, but no matching static path was found for requested path \`${pathName}\`.`, + hint: (possibleRoutes) => `Possible dynamic routes being matched: ${possibleRoutes.join(", ")}.` +}; +const OnlyResponseCanBeReturned = { + name: "OnlyResponseCanBeReturned", + title: "Invalid type returned by Astro page.", + message: (route, returnedValue) => `Route \`${route ? route : ""}\` returned a \`${returnedValue}\`. Only a [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) can be returned from Astro files.`, + hint: "See https://docs.astro.build/en/guides/server-side-rendering/#response for more information." +}; +const MissingMediaQueryDirective = { + name: "MissingMediaQueryDirective", + title: "Missing value for `client:media` directive.", + message: 'Media query not provided for `client:media` directive. A media query similar to `client:media="(max-width: 600px)"` must be provided' +}; +const NoMatchingRenderer = { + name: "NoMatchingRenderer", + title: "No matching renderer found.", + message: (componentName, componentExtension, plural, validRenderersCount) => `Unable to render \`${componentName}\`. + +${validRenderersCount > 0 ? `There ${plural ? "are" : "is"} ${validRenderersCount} renderer${plural ? "s" : ""} configured in your \`astro.config.mjs\` file, +but ${plural ? "none were" : "it was not"} able to server-side render \`${componentName}\`.` : `No valid renderer was found ${componentExtension ? `for the \`.${componentExtension}\` file extension.` : `for this file extension.`}`}`, + hint: (probableRenderers) => `Did you mean to enable the ${probableRenderers} integration? + +See https://docs.astro.build/en/core-concepts/framework-components/ for more information on how to install and configure integrations.` +}; +const NoClientEntrypoint = { + name: "NoClientEntrypoint", + title: "No client entrypoint specified in renderer.", + message: (componentName, clientDirective, rendererName) => `\`${componentName}\` component has a \`client:${clientDirective}\` directive, but no client entrypoint was provided by \`${rendererName}\`.`, + hint: "See https://docs.astro.build/en/reference/integrations-reference/#addrenderer-option for more information on how to configure your renderer." +}; +const NoClientOnlyHint = { + name: "NoClientOnlyHint", + title: "Missing hint on client:only directive.", + message: (componentName) => `Unable to render \`${componentName}\`. When using the \`client:only\` hydration strategy, Astro needs a hint to use the correct renderer.`, + hint: (probableRenderers) => `Did you mean to pass \`client:only="${probableRenderers}"\`? See https://docs.astro.build/en/reference/directives-reference/#clientonly for more information on client:only` +}; +const InvalidGetStaticPathsEntry = { + name: "InvalidGetStaticPathsEntry", + title: "Invalid entry inside getStaticPath's return value", + message: (entryType) => `Invalid entry returned by getStaticPaths. Expected an object, got \`${entryType}\``, + hint: "If you're using a `.map` call, you might be looking for `.flatMap()` instead. See https://docs.astro.build/en/reference/api-reference/#getstaticpaths for more information on getStaticPaths." +}; +const InvalidGetStaticPathsReturn = { + name: "InvalidGetStaticPathsReturn", + title: "Invalid value returned by getStaticPaths.", + message: (returnType) => `Invalid type returned by \`getStaticPaths\`. Expected an \`array\`, got \`${returnType}\``, + hint: "See https://docs.astro.build/en/reference/api-reference/#getstaticpaths for more information on getStaticPaths." +}; +const GetStaticPathsExpectedParams = { + name: "GetStaticPathsExpectedParams", + title: "Missing params property on `getStaticPaths` route.", + message: "Missing or empty required `params` property on `getStaticPaths` route.", + hint: "See https://docs.astro.build/en/reference/api-reference/#getstaticpaths for more information on getStaticPaths." +}; +const GetStaticPathsInvalidRouteParam = { + name: "GetStaticPathsInvalidRouteParam", + title: "Invalid value for `getStaticPaths` route parameter.", + message: (key, value, valueType) => `Invalid getStaticPaths route parameter for \`${key}\`. Expected undefined, a string or a number, received \`${valueType}\` (\`${value}\`)`, + hint: "See https://docs.astro.build/en/reference/api-reference/#getstaticpaths for more information on getStaticPaths." +}; +const GetStaticPathsRequired = { + name: "GetStaticPathsRequired", + title: "`getStaticPaths()` function required for dynamic routes.", + message: "`getStaticPaths()` function is required for dynamic routes. Make sure that you `export` a `getStaticPaths` function from your dynamic route.", + hint: `See https://docs.astro.build/en/core-concepts/routing/#dynamic-routes for more information on dynamic routes. + +Alternatively, set \`output: "server"\` or \`output: "hybrid"\` in your Astro config file to switch to a non-static server build. This error can also occur if using \`export const prerender = true;\`. +See https://docs.astro.build/en/guides/server-side-rendering/ for more information on non-static rendering.` +}; +const ReservedSlotName = { + name: "ReservedSlotName", + title: "Invalid slot name.", + message: (slotName) => `Unable to create a slot named \`${slotName}\`. \`${slotName}\` is a reserved slot name. Please update the name of this slot.` +}; +const NoMatchingImport = { + name: "NoMatchingImport", + title: "No import found for component.", + message: (componentName) => `Could not render \`${componentName}\`. No matching import has been found for \`${componentName}\`.`, + hint: "Please make sure the component is properly imported." +}; +const InvalidComponentArgs = { + name: "InvalidComponentArgs", + title: "Invalid component arguments.", + message: (name) => `Invalid arguments passed to${name ? ` <${name}>` : ""} component.`, + hint: "Astro components cannot be rendered directly via function call, such as `Component()` or `{items.map(Component)}`." +}; +const PageNumberParamNotFound = { + name: "PageNumberParamNotFound", + title: "Page number param not found.", + message: (paramName) => `[paginate()] page number param \`${paramName}\` not found in your filepath.`, + hint: "Rename your file to `[page].astro` or `[...page].astro`." +}; +const ImageMissingAlt = { + name: "ImageMissingAlt", + title: 'Image missing required "alt" property.', + message: 'Image missing "alt" property. "alt" text is required to describe important images on the page.', + hint: 'Use an empty string ("") for decorative images.' +}; +const InvalidImageService = { + name: "InvalidImageService", + title: "Error while loading image service.", + message: "There was an error loading the configured image service. Please see the stack trace for more information." +}; +const MissingImageDimension = { + name: "MissingImageDimension", + title: "Missing image dimensions", + message: (missingDimension, imageURL) => `Missing ${missingDimension === "both" ? "width and height attributes" : `${missingDimension} attribute`} for ${imageURL}. When using remote images, both dimensions are always required in order to avoid CLS.`, + hint: "If your image is inside your `src` folder, you probably meant to import it instead. See [the Imports guide for more information](https://docs.astro.build/en/guides/imports/#other-assets)." +}; +const UnsupportedImageFormat = { + name: "UnsupportedImageFormat", + title: "Unsupported image format", + message: (format, imagePath, supportedFormats) => `Received unsupported format \`${format}\` from \`${imagePath}\`. Currently only ${supportedFormats.join( + ", " + )} are supported by our image services.`, + hint: "Using an `img` tag directly instead of the `Image` component might be what you're looking for." +}; +const UnsupportedImageConversion = { + name: "UnsupportedImageConversion", + title: "Unsupported image conversion", + message: "Converting between vector (such as SVGs) and raster (such as PNGs and JPEGs) images is not currently supported." +}; +const PrerenderDynamicEndpointPathCollide = { + name: "PrerenderDynamicEndpointPathCollide", + title: "Prerendered dynamic endpoint has path collision.", + message: (pathname) => `Could not render \`${pathname}\` with an \`undefined\` param as the generated path will collide during prerendering. Prevent passing \`undefined\` as \`params\` for the endpoint's \`getStaticPaths()\` function, or add an additional extension to the endpoint's filename.`, + hint: (filename) => `Rename \`${filename}\` to \`${filename.replace(/\.(js|ts)/, (m) => `.json` + m)}\`` +}; +const ExpectedImage = { + name: "ExpectedImage", + title: "Expected src to be an image.", + message: (src, typeofOptions, fullOptions) => `Expected \`src\` property for \`getImage\` or \`\` to be either an ESM imported image or a string with the path of a remote image. Received \`${src}\` (type: \`${typeofOptions}\`). + +Full serialized options received: \`${fullOptions}\`.`, + hint: "This error can often happen because of a wrong path. Make sure the path to your image is correct. If you're passing an async function, make sure to call and await it." +}; +const ExpectedImageOptions = { + name: "ExpectedImageOptions", + title: "Expected image options.", + message: (options) => `Expected getImage() parameter to be an object. Received \`${options}\`.` +}; +const IncompatibleDescriptorOptions = { + name: "IncompatibleDescriptorOptions", + title: "Cannot set both `densities` and `widths`", + message: "Only one of `densities` or `widths` can be specified. In most cases, you'll probably want to use only `widths` if you require specific widths.", + hint: "Those attributes are used to construct a `srcset` attribute, which cannot have both `x` and `w` descriptors." +}; +const ResponseSentError = { + name: "ResponseSentError", + title: "Unable to set response.", + message: "The response has already been sent to the browser and cannot be altered." +}; +const MiddlewareNoDataOrNextCalled = { + name: "MiddlewareNoDataOrNextCalled", + title: "The middleware didn't return a `Response`.", + message: "Make sure your middleware returns a `Response` object, either directly or by returning the `Response` from calling the `next` function." +}; +const MiddlewareNotAResponse = { + name: "MiddlewareNotAResponse", + title: "The middleware returned something that is not a `Response` object.", + message: "Any data returned from middleware must be a valid `Response` object." +}; +const LocalsNotAnObject = { + name: "LocalsNotAnObject", + title: "Value assigned to `locals` is not accepted.", + message: "`locals` can only be assigned to an object. Other values like numbers, strings, etc. are not accepted.", + hint: "If you tried to remove some information from the `locals` object, try to use `delete` or set the property to `undefined`." +}; +const LocalImageUsedWrongly = { + name: "LocalImageUsedWrongly", + title: "Local images must be imported.", + message: (imageFilePath) => `\`Image\`'s and \`getImage\`'s \`src\` parameter must be an imported image or an URL, it cannot be a string filepath. Received \`${imageFilePath}\`.`, + hint: "If you want to use an image from your `src` folder, you need to either import it or if the image is coming from a content collection, use the [image() schema helper](https://docs.astro.build/en/guides/images/#images-in-content-collections) See https://docs.astro.build/en/guides/images/#src-required for more information on the `src` property." +}; +const AstroGlobUsedOutside = { + name: "AstroGlobUsedOutside", + title: "Astro.glob() used outside of an Astro file.", + message: (globStr) => `\`Astro.glob(${globStr})\` can only be used in \`.astro\` files. \`import.meta.glob(${globStr})\` can be used instead to achieve a similar result.`, + hint: "See Vite's documentation on `import.meta.glob` for more information: https://vitejs.dev/guide/features.html#glob-import" +}; +const AstroGlobNoMatch = { + name: "AstroGlobNoMatch", + title: "Astro.glob() did not match any files.", + message: (globStr) => `\`Astro.glob(${globStr})\` did not return any matching files. Check the pattern for typos.` +}; +const MissingSharp = { + name: "MissingSharp", + title: "Could not find Sharp.", + message: "Could not find Sharp. Please install Sharp (`sharp`) manually into your project or migrate to another image service.", + hint: "See Sharp's installation instructions for more information: https://sharp.pixelplumbing.com/install. If you are not relying on `astro:assets` to optimize, transform, or process any images, you can configure a passthrough image service instead of installing Sharp. See https://docs.astro.build/en/reference/errors/missing-sharp for more information.\n\nSee https://docs.astro.build/en/guides/images/#default-image-service for more information on how to migrate to another image service." +}; +const CantRenderPage = { + name: "CantRenderPage", + title: "Astro can't render the route.", + message: "Astro cannot find any content to render for this route. There is no file or redirect associated with this route.", + hint: "If you expect to find a route here, this may be an Astro bug. Please file an issue/restart the dev server.rs" +}; + +function normalizeLF(code) { + return code.replace(/\r\n|\r(?!\n)|\n/g, "\n"); +} + +function codeFrame(src, loc) { + if (!loc || loc.line === void 0 || loc.column === void 0) { + return ""; + } + const lines = normalizeLF(src).split("\n").map((ln) => ln.replace(/\t/g, " ")); + const visibleLines = []; + for (let n = -2; n <= 2; n++) { + if (lines[loc.line + n]) + visibleLines.push(loc.line + n); + } + let gutterWidth = 0; + for (const lineNo of visibleLines) { + let w = `> ${lineNo}`; + if (w.length > gutterWidth) + gutterWidth = w.length; + } + let output = ""; + for (const lineNo of visibleLines) { + const isFocusedLine = lineNo === loc.line - 1; + output += isFocusedLine ? "> " : " "; + output += `${lineNo + 1} | ${lines[lineNo]} +`; + if (isFocusedLine) + output += `${Array.from({ length: gutterWidth }).join(" ")} | ${Array.from({ + length: loc.column + }).join(" ")}^ +`; + } + return output; +} + +class AstroError extends Error { + loc; + title; + hint; + frame; + type = "AstroError"; + constructor(props, options) { + const { name, title, message, stack, location, hint, frame } = props; + super(message, options); + this.title = title; + this.name = name; + if (message) + this.message = message; + this.stack = stack ? stack : this.stack; + this.loc = location; + this.hint = hint; + this.frame = frame; + } + setLocation(location) { + this.loc = location; + } + setName(name) { + this.name = name; + } + setMessage(message) { + this.message = message; + } + setHint(hint) { + this.hint = hint; + } + setFrame(source, location) { + this.frame = codeFrame(source, location); + } + static is(err) { + return err.type === "AstroError"; + } +} + +function validateArgs(args) { + if (args.length !== 3) + return false; + if (!args[0] || typeof args[0] !== "object") + return false; + return true; +} +function baseCreateComponent(cb, moduleId, propagation) { + const name = moduleId?.split("/").pop()?.replace(".astro", "") ?? ""; + const fn = (...args) => { + if (!validateArgs(args)) { + throw new AstroError({ + ...InvalidComponentArgs, + message: InvalidComponentArgs.message(name) + }); + } + return cb(...args); + }; + Object.defineProperty(fn, "name", { value: name, writable: false }); + fn.isAstroComponentFactory = true; + fn.moduleId = moduleId; + fn.propagation = propagation; + return fn; +} +function createComponentWithOptions(opts) { + const cb = baseCreateComponent(opts.factory, opts.moduleId, opts.propagation); + return cb; +} +function createComponent(arg1, moduleId, propagation) { + if (typeof arg1 === "function") { + return baseCreateComponent(arg1, moduleId, propagation); + } else { + return createComponentWithOptions(arg1); + } +} + +const ASTRO_VERSION = "4.2.1"; + +function createAstroGlobFn() { + const globHandler = (importMetaGlobResult) => { + if (typeof importMetaGlobResult === "string") { + throw new AstroError({ + ...AstroGlobUsedOutside, + message: AstroGlobUsedOutside.message(JSON.stringify(importMetaGlobResult)) + }); + } + let allEntries = [...Object.values(importMetaGlobResult)]; + if (allEntries.length === 0) { + throw new AstroError({ + ...AstroGlobNoMatch, + message: AstroGlobNoMatch.message(JSON.stringify(importMetaGlobResult)) + }); + } + return Promise.all(allEntries.map((fn) => fn())); + }; + return globHandler; +} +function createAstro(site) { + return { + site: site ? new URL(site) : void 0, + generator: `Astro v${ASTRO_VERSION}`, + glob: createAstroGlobFn() + }; +} + +async function renderEndpoint(mod, context, ssr, logger) { + const { request, url } = context; + const method = request.method.toUpperCase(); + const handler = mod[method] ?? mod["ALL"]; + if (!ssr && ssr === false && method !== "GET") { + logger.warn( + "router", + `${url.pathname} ${bold( + method + )} requests are not available for a static site. Update your config to \`output: 'server'\` or \`output: 'hybrid'\` to enable.` + ); + } + if (typeof handler !== "function") { + logger.warn( + "router", + `No API Route handler exists for the method "${method}" for the route ${url.pathname}. +Found handlers: ${Object.keys(mod).map((exp) => JSON.stringify(exp)).join(", ")} +` + ("all" in mod ? `One of the exported handlers is "all" (lowercase), did you mean to export 'ALL'? +` : "") + ); + return new Response(null, { + status: 404, + headers: { + "X-Astro-Response": "Not-Found" + } + }); + } + return handler.call(mod, context); +} + +function isPromise(value) { + return !!value && typeof value === "object" && typeof value.then === "function"; +} + +const escapeHTML = escape; +class HTMLString extends String { + get [Symbol.toStringTag]() { + return "HTMLString"; + } +} +const markHTMLString = (value) => { + if (value instanceof HTMLString) { + return value; + } + if (typeof value === "string") { + return new HTMLString(value); + } + return value; +}; +function isHTMLString(value) { + return Object.prototype.toString.call(value) === "[object HTMLString]"; +} + +const AstroJSX = "astro:jsx"; +function isVNode(vnode) { + return vnode && typeof vnode === "object" && vnode[AstroJSX]; +} + +const RenderInstructionSymbol = Symbol.for("astro:render"); +function createRenderInstruction(instruction) { + return Object.defineProperty(instruction, RenderInstructionSymbol, { + value: true + }); +} +function isRenderInstruction(chunk) { + return chunk && typeof chunk === "object" && chunk[RenderInstructionSymbol]; +} + +const PROP_TYPE = { + Value: 0, + JSON: 1, + // Actually means Array + RegExp: 2, + Date: 3, + Map: 4, + Set: 5, + BigInt: 6, + URL: 7, + Uint8Array: 8, + Uint16Array: 9, + Uint32Array: 10 +}; +function serializeArray(value, metadata = {}, parents = /* @__PURE__ */ new WeakSet()) { + if (parents.has(value)) { + throw new Error(`Cyclic reference detected while serializing props for <${metadata.displayName} client:${metadata.hydrate}>! + +Cyclic references cannot be safely serialized for client-side usage. Please remove the cyclic reference.`); + } + parents.add(value); + const serialized = value.map((v) => { + return convertToSerializedForm(v, metadata, parents); + }); + parents.delete(value); + return serialized; +} +function serializeObject(value, metadata = {}, parents = /* @__PURE__ */ new WeakSet()) { + if (parents.has(value)) { + throw new Error(`Cyclic reference detected while serializing props for <${metadata.displayName} client:${metadata.hydrate}>! + +Cyclic references cannot be safely serialized for client-side usage. Please remove the cyclic reference.`); + } + parents.add(value); + const serialized = Object.fromEntries( + Object.entries(value).map(([k, v]) => { + return [k, convertToSerializedForm(v, metadata, parents)]; + }) + ); + parents.delete(value); + return serialized; +} +function convertToSerializedForm(value, metadata = {}, parents = /* @__PURE__ */ new WeakSet()) { + const tag = Object.prototype.toString.call(value); + switch (tag) { + case "[object Date]": { + return [PROP_TYPE.Date, value.toISOString()]; + } + case "[object RegExp]": { + return [PROP_TYPE.RegExp, value.source]; + } + case "[object Map]": { + return [PROP_TYPE.Map, serializeArray(Array.from(value), metadata, parents)]; + } + case "[object Set]": { + return [PROP_TYPE.Set, serializeArray(Array.from(value), metadata, parents)]; + } + case "[object BigInt]": { + return [PROP_TYPE.BigInt, value.toString()]; + } + case "[object URL]": { + return [PROP_TYPE.URL, value.toString()]; + } + case "[object Array]": { + return [PROP_TYPE.JSON, serializeArray(value, metadata, parents)]; + } + case "[object Uint8Array]": { + return [PROP_TYPE.Uint8Array, Array.from(value)]; + } + case "[object Uint16Array]": { + return [PROP_TYPE.Uint16Array, Array.from(value)]; + } + case "[object Uint32Array]": { + return [PROP_TYPE.Uint32Array, Array.from(value)]; + } + default: { + if (value !== null && typeof value === "object") { + return [PROP_TYPE.Value, serializeObject(value, metadata, parents)]; + } else if (value === void 0) { + return [PROP_TYPE.Value]; + } else { + return [PROP_TYPE.Value, value]; + } + } + } +} +function serializeProps(props, metadata) { + const serialized = JSON.stringify(serializeObject(props, metadata)); + return serialized; +} + +const transitionDirectivesToCopyOnIsland = Object.freeze([ + "data-astro-transition-scope", + "data-astro-transition-persist" +]); +function extractDirectives(inputProps, clientDirectives) { + let extracted = { + isPage: false, + hydration: null, + props: {}, + propsWithoutTransitionAttributes: {} + }; + for (const [key, value] of Object.entries(inputProps)) { + if (key.startsWith("server.rs:")) { + if (key === "server:root") { + extracted.isPage = true; + } + } + if (key.startsWith("client:")) { + if (!extracted.hydration) { + extracted.hydration = { + directive: "", + value: "", + componentUrl: "", + componentExport: { value: "" } + }; + } + switch (key) { + case "client:component-path": { + extracted.hydration.componentUrl = value; + break; + } + case "client:component-export": { + extracted.hydration.componentExport.value = value; + break; + } + case "client:component-hydration": { + break; + } + case "client:display-name": { + break; + } + default: { + extracted.hydration.directive = key.split(":")[1]; + extracted.hydration.value = value; + if (!clientDirectives.has(extracted.hydration.directive)) { + const hydrationMethods = Array.from(clientDirectives.keys()).map((d) => `client:${d}`).join(", "); + throw new Error( + `Error: invalid hydration directive "${key}". Supported hydration methods: ${hydrationMethods}` + ); + } + if (extracted.hydration.directive === "media" && typeof extracted.hydration.value !== "string") { + throw new AstroError(MissingMediaQueryDirective); + } + break; + } + } + } else { + extracted.props[key] = value; + if (!transitionDirectivesToCopyOnIsland.includes(key)) { + extracted.propsWithoutTransitionAttributes[key] = value; + } + } + } + for (const sym of Object.getOwnPropertySymbols(inputProps)) { + extracted.props[sym] = inputProps[sym]; + extracted.propsWithoutTransitionAttributes[sym] = inputProps[sym]; + } + return extracted; +} +async function generateHydrateScript(scriptOptions, metadata) { + const { renderer, result, astroId, props, attrs } = scriptOptions; + const { hydrate, componentUrl, componentExport } = metadata; + if (!componentExport.value) { + throw new AstroError({ + ...NoMatchingImport, + message: NoMatchingImport.message(metadata.displayName) + }); + } + const island = { + children: "", + props: { + // This is for HMR, probably can avoid it in prod + uid: astroId + } + }; + if (attrs) { + for (const [key, value] of Object.entries(attrs)) { + island.props[key] = escapeHTML(value); + } + } + island.props["component-url"] = await result.resolve(decodeURI(componentUrl)); + if (renderer.clientEntrypoint) { + island.props["component-export"] = componentExport.value; + island.props["renderer-url"] = await result.resolve(decodeURI(renderer.clientEntrypoint)); + island.props["props"] = escapeHTML(serializeProps(props, metadata)); + } + island.props["ssr"] = ""; + island.props["client"] = hydrate; + let beforeHydrationUrl = await result.resolve("astro:scripts/before-hydration.js"); + if (beforeHydrationUrl.length) { + island.props["before-hydration-url"] = beforeHydrationUrl; + } + island.props["opts"] = escapeHTML( + JSON.stringify({ + name: metadata.displayName, + value: metadata.hydrateArgs || "" + }) + ); + transitionDirectivesToCopyOnIsland.forEach((name) => { + if (props[name]) { + island.props[name] = props[name]; + } + }); + return island; +} + +/** + * shortdash - https://github.com/bibig/node-shorthash + * + * @license + * + * (The MIT License) + * + * Copyright (c) 2013 Bibig + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ +const dictionary = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY"; +const binary = dictionary.length; +function bitwise(str) { + let hash = 0; + if (str.length === 0) + return hash; + for (let i = 0; i < str.length; i++) { + const ch = str.charCodeAt(i); + hash = (hash << 5) - hash + ch; + hash = hash & hash; + } + return hash; +} +function shorthash(text) { + let num; + let result = ""; + let integer = bitwise(text); + const sign = integer < 0 ? "Z" : ""; + integer = Math.abs(integer); + while (integer >= binary) { + num = integer % binary; + integer = Math.floor(integer / binary); + result = dictionary[num] + result; + } + if (integer > 0) { + result = dictionary[integer] + result; + } + return sign + result; +} + +function isAstroComponentFactory(obj) { + return obj == null ? false : obj.isAstroComponentFactory === true; +} +function isAPropagatingComponent(result, factory) { + let hint = factory.propagation || "none"; + if (factory.moduleId && result.componentMetadata.has(factory.moduleId) && hint === "none") { + hint = result.componentMetadata.get(factory.moduleId).propagation; + } + return hint === "in-tree" || hint === "self"; +} + +const headAndContentSym = Symbol.for("astro.headAndContent"); +function isHeadAndContent(obj) { + return typeof obj === "object" && !!obj[headAndContentSym]; +} + +var astro_island_prebuilt_default = `(()=>{var b=Object.defineProperty;var f=(c,o,i)=>o in c?b(c,o,{enumerable:!0,configurable:!0,writable:!0,value:i}):c[o]=i;var l=(c,o,i)=>(f(c,typeof o!="symbol"?o+"":o,i),i);var p;{let c={0:t=>m(t),1:t=>i(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(i(t)),5:t=>new Set(i(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t)},o=t=>{let[e,r]=t;return e in c?c[e](r):void 0},i=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([e,r])=>[e,o(r)]));customElements.get("astro-island")||customElements.define("astro-island",(p=class extends HTMLElement{constructor(){super(...arguments);l(this,"Component");l(this,"hydrator");l(this,"hydrate",async()=>{var d;if(!this.hydrator||!this.isConnected)return;let e=(d=this.parentElement)==null?void 0:d.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let r=this.querySelectorAll("astro-slot"),a={},h=this.querySelectorAll("template[data-astro-template]");for(let n of h){let s=n.closest(this.tagName);s!=null&&s.isSameNode(this)&&(a[n.getAttribute("data-astro-template")||"default"]=n.innerHTML,n.remove())}for(let n of r){let s=n.closest(this.tagName);s!=null&&s.isSameNode(this)&&(a[n.getAttribute("name")||"default"]=n.innerHTML)}let u;try{u=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(n){let s=this.getAttribute("component-url")||"",y=this.getAttribute("component-export");throw y&&(s+=\` (export \${y})\`),console.error(\`[hydrate] Error parsing props for component \${s}\`,this.getAttribute("props"),n),n}await this.hydrator(this)(this.Component,u,a,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});l(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),r.disconnect(),this.childrenConnectedCallback()},r=new MutationObserver(()=>{var a;((a=this.lastChild)==null?void 0:a.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});r.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}start(){let e=JSON.parse(this.getAttribute("opts")),r=this.getAttribute("client");if(Astro[r]===void 0){window.addEventListener(\`astro:\${r}\`,()=>this.start(),{once:!0});return}Astro[r](async()=>{let a=this.getAttribute("renderer-url"),[h,{default:u}]=await Promise.all([import(this.getAttribute("component-url")),a?import(a):()=>()=>{}]),d=this.getAttribute("component-export")||"default";if(!d.includes("."))this.Component=h[d];else{this.Component=h;for(let n of d.split("."))this.Component=this.Component[n]}return this.hydrator=u,this.hydrate},e,this)}attributeChangedCallback(){this.hydrate()}},l(p,"observedAttributes",["props"]),p))}})();`; + +const ISLAND_STYLES = ``; +function determineIfNeedsHydrationScript(result) { + if (result._metadata.hasHydrationScript) { + return false; + } + return result._metadata.hasHydrationScript = true; +} +function determinesIfNeedsDirectiveScript(result, directive) { + if (result._metadata.hasDirectives.has(directive)) { + return false; + } + result._metadata.hasDirectives.add(directive); + return true; +} +function getDirectiveScriptText(result, directive) { + const clientDirectives = result.clientDirectives; + const clientDirective = clientDirectives.get(directive); + if (!clientDirective) { + throw new Error(`Unknown directive: ${directive}`); + } + return clientDirective; +} +function getPrescripts(result, type, directive) { + switch (type) { + case "both": + return `${ISLAND_STYLES}`; + case "directive": + return ``; + } + return ""; +} + +const voidElementNames = /^(area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/i; +const htmlBooleanAttributes = /^(allowfullscreen|async|autofocus|autoplay|controls|default|defer|disabled|disablepictureinpicture|disableremoteplayback|formnovalidate|hidden|loop|nomodule|novalidate|open|playsinline|readonly|required|reversed|scoped|seamless|itemscope)$/i; +const htmlEnumAttributes = /^(contenteditable|draggable|spellcheck|value)$/i; +const svgEnumAttributes = /^(autoReverse|externalResourcesRequired|focusable|preserveAlpha)$/i; +const STATIC_DIRECTIVES = /* @__PURE__ */ new Set(["set:html", "set:text"]); +const toIdent = (k) => k.trim().replace(/(?:(?!^)\b\w|\s+|[^\w]+)/g, (match, index) => { + if (/[^\w]|\s/.test(match)) + return ""; + return index === 0 ? match : match.toUpperCase(); +}); +const toAttributeString = (value, shouldEscape = true) => shouldEscape ? String(value).replace(/&/g, "&").replace(/"/g, """) : value; +const kebab = (k) => k.toLowerCase() === k ? k : k.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`); +const toStyleString = (obj) => Object.entries(obj).filter(([_, v]) => typeof v === "string" && v.trim() || typeof v === "number").map(([k, v]) => { + if (k[0] !== "-" && k[1] !== "-") + return `${kebab(k)}:${v}`; + return `${k}:${v}`; +}).join(";"); +function defineScriptVars(vars) { + let output = ""; + for (const [key, value] of Object.entries(vars)) { + output += `const ${toIdent(key)} = ${JSON.stringify(value)?.replace( + /<\/script>/g, + "\\x3C/script>" + )}; +`; + } + return markHTMLString(output); +} +function formatList(values) { + if (values.length === 1) { + return values[0]; + } + return `${values.slice(0, -1).join(", ")} or ${values[values.length - 1]}`; +} +function addAttribute(value, key, shouldEscape = true) { + if (value == null) { + return ""; + } + if (value === false) { + if (htmlEnumAttributes.test(key) || svgEnumAttributes.test(key)) { + return markHTMLString(` ${key}="false"`); + } + return ""; + } + if (STATIC_DIRECTIVES.has(key)) { + console.warn(`[astro] The "${key}" directive cannot be applied dynamically at runtime. It will not be rendered as an attribute. + +Make sure to use the static attribute syntax (\`${key}={value}\`) instead of the dynamic spread syntax (\`{...{ "${key}": value }}\`).`); + return ""; + } + if (key === "class:list") { + const listValue = toAttributeString(clsx(value), shouldEscape); + if (listValue === "") { + return ""; + } + return markHTMLString(` ${key.slice(0, -5)}="${listValue}"`); + } + if (key === "style" && !(value instanceof HTMLString)) { + if (Array.isArray(value) && value.length === 2) { + return markHTMLString( + ` ${key}="${toAttributeString(`${toStyleString(value[0])};${value[1]}`, shouldEscape)}"` + ); + } + if (typeof value === "object") { + return markHTMLString(` ${key}="${toAttributeString(toStyleString(value), shouldEscape)}"`); + } + } + if (key === "className") { + return markHTMLString(` class="${toAttributeString(value, shouldEscape)}"`); + } + if (value === true && (key.startsWith("data-") || htmlBooleanAttributes.test(key))) { + return markHTMLString(` ${key}`); + } else { + return markHTMLString(` ${key}="${toAttributeString(value, shouldEscape)}"`); + } +} +function internalSpreadAttributes(values, shouldEscape = true) { + let output = ""; + for (const [key, value] of Object.entries(values)) { + output += addAttribute(value, key, shouldEscape); + } + return markHTMLString(output); +} +function renderElement$1(name, { props: _props, children = "" }, shouldEscape = true) { + const { lang: _, "data-astro-id": astroId, "define:vars": defineVars, ...props } = _props; + if (defineVars) { + if (name === "style") { + delete props["is:global"]; + delete props["is:scoped"]; + } + if (name === "script") { + delete props.hoist; + children = defineScriptVars(defineVars) + "\n" + children; + } + } + if ((children == null || children == "") && voidElementNames.test(name)) { + return `<${name}${internalSpreadAttributes(props, shouldEscape)} />`; + } + return `<${name}${internalSpreadAttributes(props, shouldEscape)}>${children}`; +} +function renderToBufferDestination(bufferRenderFunction) { + const bufferChunks = []; + const bufferDestination = { + write: (chunk) => bufferChunks.push(chunk) + }; + const renderPromise = bufferRenderFunction(bufferDestination); + return { + async renderToFinalDestination(destination) { + for (const chunk of bufferChunks) { + destination.write(chunk); + } + bufferDestination.write = (chunk) => destination.write(chunk); + await renderPromise; + } + }; +} + +const uniqueElements = (item, index, all) => { + const props = JSON.stringify(item.props); + const children = item.children; + return index === all.findIndex((i) => JSON.stringify(i.props) === props && i.children == children); +}; +function renderAllHeadContent(result) { + result._metadata.hasRenderedHead = true; + const styles = Array.from(result.styles).filter(uniqueElements).map( + (style) => style.props.rel === "stylesheet" ? renderElement$1("link", style) : renderElement$1("style", style) + ); + result.styles.clear(); + const scripts = Array.from(result.scripts).filter(uniqueElements).map((script) => { + return renderElement$1("script", script, false); + }); + const links = Array.from(result.links).filter(uniqueElements).map((link) => renderElement$1("link", link, false)); + let content = styles.join("\n") + links.join("\n") + scripts.join("\n"); + if (result._metadata.extraHead.length > 0) { + for (const part of result._metadata.extraHead) { + content += part; + } + } + return markHTMLString(content); +} +function* renderHead() { + yield createRenderInstruction({ type: "head" }); +} +function* maybeRenderHead() { + yield createRenderInstruction({ type: "maybe-head" }); +} + +const slotString = Symbol.for("astro:slot-string"); +class SlotString extends HTMLString { + instructions; + [slotString]; + constructor(content, instructions) { + super(content); + this.instructions = instructions; + this[slotString] = true; + } +} +function isSlotString(str) { + return !!str[slotString]; +} +function renderSlot(result, slotted, fallback) { + if (!slotted && fallback) { + return renderSlot(result, fallback); + } + return { + async render(destination) { + await renderChild(destination, typeof slotted === "function" ? slotted(result) : slotted); + } + }; +} +async function renderSlotToString(result, slotted, fallback) { + let content = ""; + let instructions = null; + const temporaryDestination = { + write(chunk) { + if (chunk instanceof Response) + return; + if (typeof chunk === "object" && "type" in chunk && typeof chunk.type === "string") { + if (instructions === null) { + instructions = []; + } + instructions.push(chunk); + } else { + content += chunkToString(result, chunk); + } + } + }; + const renderInstance = renderSlot(result, slotted, fallback); + await renderInstance.render(temporaryDestination); + return markHTMLString(new SlotString(content, instructions)); +} +async function renderSlots(result, slots = {}) { + let slotInstructions = null; + let children = {}; + if (slots) { + await Promise.all( + Object.entries(slots).map( + ([key, value]) => renderSlotToString(result, value).then((output) => { + if (output.instructions) { + if (slotInstructions === null) { + slotInstructions = []; + } + slotInstructions.push(...output.instructions); + } + children[key] = output; + }) + ) + ); + } + return { slotInstructions, children }; +} + +const Fragment = Symbol.for("astro:fragment"); +const Renderer = Symbol.for("astro:renderer"); +const encoder = new TextEncoder(); +const decoder = new TextDecoder(); +function stringifyChunk(result, chunk) { + if (isRenderInstruction(chunk)) { + const instruction = chunk; + switch (instruction.type) { + case "directive": { + const { hydration } = instruction; + let needsHydrationScript = hydration && determineIfNeedsHydrationScript(result); + let needsDirectiveScript = hydration && determinesIfNeedsDirectiveScript(result, hydration.directive); + let prescriptType = needsHydrationScript ? "both" : needsDirectiveScript ? "directive" : null; + if (prescriptType) { + let prescripts = getPrescripts(result, prescriptType, hydration.directive); + return markHTMLString(prescripts); + } else { + return ""; + } + } + case "head": { + if (result._metadata.hasRenderedHead || result.partial) { + return ""; + } + return renderAllHeadContent(result); + } + case "maybe-head": { + if (result._metadata.hasRenderedHead || result._metadata.headInTree || result.partial) { + return ""; + } + return renderAllHeadContent(result); + } + case "renderer-hydration-script": { + const { rendererSpecificHydrationScripts } = result._metadata; + const { rendererName } = instruction; + if (!rendererSpecificHydrationScripts.has(rendererName)) { + rendererSpecificHydrationScripts.add(rendererName); + return instruction.render(); + } + return ""; + } + default: { + throw new Error(`Unknown chunk type: ${chunk.type}`); + } + } + } else if (chunk instanceof Response) { + return ""; + } else if (isSlotString(chunk)) { + let out = ""; + const c = chunk; + if (c.instructions) { + for (const instr of c.instructions) { + out += stringifyChunk(result, instr); + } + } + out += chunk.toString(); + return out; + } + return chunk.toString(); +} +function chunkToString(result, chunk) { + if (ArrayBuffer.isView(chunk)) { + return decoder.decode(chunk); + } else { + return stringifyChunk(result, chunk); + } +} +function chunkToByteArray(result, chunk) { + if (ArrayBuffer.isView(chunk)) { + return chunk; + } else { + const stringified = stringifyChunk(result, chunk); + return encoder.encode(stringified.toString()); + } +} +function isRenderInstance(obj) { + return !!obj && typeof obj === "object" && "render" in obj && typeof obj.render === "function"; +} + +async function renderChild(destination, child) { + child = await child; + if (child instanceof SlotString) { + destination.write(child); + } else if (isHTMLString(child)) { + destination.write(child); + } else if (Array.isArray(child)) { + const childRenders = child.map((c) => { + return renderToBufferDestination((bufferDestination) => { + return renderChild(bufferDestination, c); + }); + }); + for (const childRender of childRenders) { + if (!childRender) + continue; + await childRender.renderToFinalDestination(destination); + } + } else if (typeof child === "function") { + await renderChild(destination, child()); + } else if (typeof child === "string") { + destination.write(markHTMLString(escapeHTML(child))); + } else if (!child && child !== 0) ; else if (isRenderInstance(child)) { + await child.render(destination); + } else if (isRenderTemplateResult(child)) { + await child.render(destination); + } else if (isAstroComponentInstance(child)) { + await child.render(destination); + } else if (ArrayBuffer.isView(child)) { + destination.write(child); + } else if (typeof child === "object" && (Symbol.asyncIterator in child || Symbol.iterator in child)) { + for await (const value of child) { + await renderChild(destination, value); + } + } else { + destination.write(child); + } +} + +const astroComponentInstanceSym = Symbol.for("astro.componentInstance"); +class AstroComponentInstance { + [astroComponentInstanceSym] = true; + result; + props; + slotValues; + factory; + returnValue; + constructor(result, props, slots, factory) { + this.result = result; + this.props = props; + this.factory = factory; + this.slotValues = {}; + for (const name in slots) { + let didRender = false; + let value = slots[name](result); + this.slotValues[name] = () => { + if (!didRender) { + didRender = true; + return value; + } + return slots[name](result); + }; + } + } + async init(result) { + if (this.returnValue !== void 0) + return this.returnValue; + this.returnValue = this.factory(result, this.props, this.slotValues); + return this.returnValue; + } + async render(destination) { + if (this.returnValue === void 0) { + await this.init(this.result); + } + let value = this.returnValue; + if (isPromise(value)) { + value = await value; + } + if (isHeadAndContent(value)) { + await value.content.render(destination); + } else { + await renderChild(destination, value); + } + } +} +function validateComponentProps(props, displayName) { + if (props != null) { + for (const prop of Object.keys(props)) { + if (prop.startsWith("client:")) { + console.warn( + `You are attempting to render <${displayName} ${prop} />, but ${displayName} is an Astro component. Astro components do not render in the client and should not have a hydration directive. Please use a framework component for client rendering.` + ); + } + } + } +} +function createAstroComponentInstance(result, displayName, factory, props, slots = {}) { + validateComponentProps(props, displayName); + const instance = new AstroComponentInstance(result, props, slots, factory); + if (isAPropagatingComponent(result, factory)) { + result._metadata.propagators.add(instance); + } + return instance; +} +function isAstroComponentInstance(obj) { + return typeof obj === "object" && !!obj[astroComponentInstanceSym]; +} + +const renderTemplateResultSym = Symbol.for("astro.renderTemplateResult"); +class RenderTemplateResult { + [renderTemplateResultSym] = true; + htmlParts; + expressions; + error; + constructor(htmlParts, expressions) { + this.htmlParts = htmlParts; + this.error = void 0; + this.expressions = expressions.map((expression) => { + if (isPromise(expression)) { + return Promise.resolve(expression).catch((err) => { + if (!this.error) { + this.error = err; + throw err; + } + }); + } + return expression; + }); + } + async render(destination) { + const expRenders = this.expressions.map((exp) => { + return renderToBufferDestination((bufferDestination) => { + if (exp || exp === 0) { + return renderChild(bufferDestination, exp); + } + }); + }); + for (let i = 0; i < this.htmlParts.length; i++) { + const html = this.htmlParts[i]; + const expRender = expRenders[i]; + destination.write(markHTMLString(html)); + if (expRender) { + await expRender.renderToFinalDestination(destination); + } + } + } +} +function isRenderTemplateResult(obj) { + return typeof obj === "object" && !!obj[renderTemplateResultSym]; +} +function renderTemplate(htmlParts, ...expressions) { + return new RenderTemplateResult(htmlParts, expressions); +} + +async function renderToString(result, componentFactory, props, children, isPage = false, route) { + const templateResult = await callComponentAsTemplateResultOrResponse( + result, + componentFactory, + props, + children, + route + ); + if (templateResult instanceof Response) + return templateResult; + let str = ""; + let renderedFirstPageChunk = false; + const destination = { + write(chunk) { + if (isPage && !renderedFirstPageChunk) { + renderedFirstPageChunk = true; + if (!result.partial && !/" : "\n"; + str += doctype; + } + } + if (chunk instanceof Response) + return; + str += chunkToString(result, chunk); + } + }; + await templateResult.render(destination); + return str; +} +async function renderToReadableStream(result, componentFactory, props, children, isPage = false, route) { + const templateResult = await callComponentAsTemplateResultOrResponse( + result, + componentFactory, + props, + children, + route + ); + if (templateResult instanceof Response) + return templateResult; + let renderedFirstPageChunk = false; + if (isPage) { + await bufferHeadContent(result); + } + return new ReadableStream({ + start(controller) { + const destination = { + write(chunk) { + if (isPage && !renderedFirstPageChunk) { + renderedFirstPageChunk = true; + if (!result.partial && !/" : "\n"; + controller.enqueue(encoder.encode(doctype)); + } + } + if (chunk instanceof Response) { + throw new AstroError({ + ...ResponseSentError + }); + } + const bytes = chunkToByteArray(result, chunk); + controller.enqueue(bytes); + } + }; + (async () => { + try { + await templateResult.render(destination); + controller.close(); + } catch (e) { + if (AstroError.is(e) && !e.loc) { + e.setLocation({ + file: route?.component + }); + } + setTimeout(() => controller.error(e), 0); + } + })(); + } + }); +} +async function callComponentAsTemplateResultOrResponse(result, componentFactory, props, children, route) { + const factoryResult = await componentFactory(result, props, children); + if (factoryResult instanceof Response) { + return factoryResult; + } else if (!isRenderTemplateResult(factoryResult)) { + throw new AstroError({ + ...OnlyResponseCanBeReturned, + message: OnlyResponseCanBeReturned.message(route?.route, typeof factoryResult), + location: { + file: route?.component + } + }); + } + return isHeadAndContent(factoryResult) ? factoryResult.content : factoryResult; +} +async function bufferHeadContent(result) { + const iterator = result._metadata.propagators.values(); + while (true) { + const { value, done } = iterator.next(); + if (done) { + break; + } + const returnValue = await value.init(result); + if (isHeadAndContent(returnValue)) { + result._metadata.extraHead.push(returnValue.head); + } + } +} + +function componentIsHTMLElement(Component) { + return typeof HTMLElement !== "undefined" && HTMLElement.isPrototypeOf(Component); +} +async function renderHTMLElement(result, constructor, props, slots) { + const name = getHTMLElementName(constructor); + let attrHTML = ""; + for (const attr in props) { + attrHTML += ` ${attr}="${toAttributeString(await props[attr])}"`; + } + return markHTMLString( + `<${name}${attrHTML}>${await renderSlotToString(result, slots?.default)}` + ); +} +function getHTMLElementName(constructor) { + const definedName = customElements.getName(constructor); + if (definedName) + return definedName; + const assignedName = constructor.name.replace(/^HTML|Element$/g, "").replace(/[A-Z]/g, "-$&").toLowerCase().replace(/^-/, "html-"); + return assignedName; +} + +const needsHeadRenderingSymbol = Symbol.for("astro.needsHeadRendering"); +const rendererAliases = /* @__PURE__ */ new Map([["solid", "solid-js"]]); +function guessRenderers(componentUrl) { + const extname = componentUrl?.split(".").pop(); + switch (extname) { + case "svelte": + return ["@astrojs/svelte"]; + case "vue": + return ["@astrojs/vue"]; + case "jsx": + case "tsx": + return ["@astrojs/react", "@astrojs/preact", "@astrojs/solid-js", "@astrojs/vue (jsx)"]; + default: + return [ + "@astrojs/react", + "@astrojs/preact", + "@astrojs/solid-js", + "@astrojs/vue", + "@astrojs/svelte", + "@astrojs/lit" + ]; + } +} +function isFragmentComponent(Component) { + return Component === Fragment; +} +function isHTMLComponent(Component) { + return Component && Component["astro:html"] === true; +} +const ASTRO_SLOT_EXP = /\<\/?astro-slot\b[^>]*>/g; +const ASTRO_STATIC_SLOT_EXP = /\<\/?astro-static-slot\b[^>]*>/g; +function removeStaticAstroSlot(html, supportsAstroStaticSlot) { + const exp = supportsAstroStaticSlot ? ASTRO_STATIC_SLOT_EXP : ASTRO_SLOT_EXP; + return html.replace(exp, ""); +} +async function renderFrameworkComponent(result, displayName, Component, _props, slots = {}) { + if (!Component && !_props["client:only"]) { + throw new Error( + `Unable to render ${displayName} because it is ${Component}! +Did you forget to import the component or is it possible there is a typo?` + ); + } + const { renderers, clientDirectives } = result; + const metadata = { + astroStaticSlot: true, + displayName + }; + const { hydration, isPage, props, propsWithoutTransitionAttributes } = extractDirectives( + _props, + clientDirectives + ); + let html = ""; + let attrs = void 0; + if (hydration) { + metadata.hydrate = hydration.directive; + metadata.hydrateArgs = hydration.value; + metadata.componentExport = hydration.componentExport; + metadata.componentUrl = hydration.componentUrl; + } + const probableRendererNames = guessRenderers(metadata.componentUrl); + const validRenderers = renderers.filter((r) => r.name !== "astro:jsx"); + const { children, slotInstructions } = await renderSlots(result, slots); + let renderer; + if (metadata.hydrate !== "only") { + let isTagged = false; + try { + isTagged = Component && Component[Renderer]; + } catch { + } + if (isTagged) { + const rendererName = Component[Renderer]; + renderer = renderers.find(({ name }) => name === rendererName); + } + if (!renderer) { + let error; + for (const r of renderers) { + try { + if (await r.ssr.check.call({ result }, Component, props, children)) { + renderer = r; + break; + } + } catch (e) { + error ??= e; + } + } + if (!renderer && error) { + throw error; + } + } + if (!renderer && typeof HTMLElement === "function" && componentIsHTMLElement(Component)) { + const output = await renderHTMLElement( + result, + Component, + _props, + slots + ); + return { + render(destination) { + destination.write(output); + } + }; + } + } else { + if (metadata.hydrateArgs) { + const passedName = metadata.hydrateArgs; + const rendererName = rendererAliases.has(passedName) ? rendererAliases.get(passedName) : passedName; + renderer = renderers.find( + ({ name }) => name === `@astrojs/${rendererName}` || name === rendererName + ); + } + if (!renderer && validRenderers.length === 1) { + renderer = validRenderers[0]; + } + if (!renderer) { + const extname = metadata.componentUrl?.split(".").pop(); + renderer = renderers.filter( + ({ name }) => name === `@astrojs/${extname}` || name === extname + )[0]; + } + } + if (!renderer) { + if (metadata.hydrate === "only") { + throw new AstroError({ + ...NoClientOnlyHint, + message: NoClientOnlyHint.message(metadata.displayName), + hint: NoClientOnlyHint.hint( + probableRendererNames.map((r) => r.replace("@astrojs/", "")).join("|") + ) + }); + } else if (typeof Component !== "string") { + const matchingRenderers = validRenderers.filter( + (r) => probableRendererNames.includes(r.name) + ); + const plural = validRenderers.length > 1; + if (matchingRenderers.length === 0) { + throw new AstroError({ + ...NoMatchingRenderer, + message: NoMatchingRenderer.message( + metadata.displayName, + metadata?.componentUrl?.split(".").pop(), + plural, + validRenderers.length + ), + hint: NoMatchingRenderer.hint( + formatList(probableRendererNames.map((r) => "`" + r + "`")) + ) + }); + } else if (matchingRenderers.length === 1) { + renderer = matchingRenderers[0]; + ({ html, attrs } = await renderer.ssr.renderToStaticMarkup.call( + { result }, + Component, + propsWithoutTransitionAttributes, + children, + metadata + )); + } else { + throw new Error(`Unable to render ${metadata.displayName}! + +This component likely uses ${formatList(probableRendererNames)}, +but Astro encountered an error during server-side rendering. + +Please ensure that ${metadata.displayName}: +1. Does not unconditionally access browser-specific globals like \`window\` or \`document\`. + If this is unavoidable, use the \`client:only\` hydration directive. +2. Does not conditionally return \`null\` or \`undefined\` when rendered on the server. + +If you're still stuck, please open an issue on GitHub or join us at https://astro.build/chat.`); + } + } + } else { + if (metadata.hydrate === "only") { + html = await renderSlotToString(result, slots?.fallback); + } else { + ({ html, attrs } = await renderer.ssr.renderToStaticMarkup.call( + { result }, + Component, + propsWithoutTransitionAttributes, + children, + metadata + )); + } + } + if (renderer && !renderer.clientEntrypoint && renderer.name !== "@astrojs/lit" && metadata.hydrate) { + throw new AstroError({ + ...NoClientEntrypoint, + message: NoClientEntrypoint.message( + displayName, + metadata.hydrate, + renderer.name + ) + }); + } + if (!html && typeof Component === "string") { + const Tag = sanitizeElementName(Component); + const childSlots = Object.values(children).join(""); + const renderTemplateResult = renderTemplate`<${Tag}${internalSpreadAttributes( + props + )}${markHTMLString( + childSlots === "" && voidElementNames.test(Tag) ? `/>` : `>${childSlots}` + )}`; + html = ""; + const destination = { + write(chunk) { + if (chunk instanceof Response) + return; + html += chunkToString(result, chunk); + } + }; + await renderTemplateResult.render(destination); + } + if (!hydration) { + return { + render(destination) { + if (slotInstructions) { + for (const instruction of slotInstructions) { + destination.write(instruction); + } + } + if (isPage || renderer?.name === "astro:jsx") { + destination.write(html); + } else if (html && html.length > 0) { + destination.write( + markHTMLString( + removeStaticAstroSlot(html, renderer?.ssr?.supportsAstroStaticSlot ?? false) + ) + ); + } + } + }; + } + const astroId = shorthash( + ` +${html} +${serializeProps( + props, + metadata + )}` + ); + const island = await generateHydrateScript( + { renderer, result, astroId, props, attrs }, + metadata + ); + let unrenderedSlots = []; + if (html) { + if (Object.keys(children).length > 0) { + for (const key of Object.keys(children)) { + let tagName = renderer?.ssr?.supportsAstroStaticSlot ? !!metadata.hydrate ? "astro-slot" : "astro-static-slot" : "astro-slot"; + let expectedHTML = key === "default" ? `<${tagName}>` : `<${tagName} name="${key}">`; + if (!html.includes(expectedHTML)) { + unrenderedSlots.push(key); + } + } + } + } else { + unrenderedSlots = Object.keys(children); + } + const template = unrenderedSlots.length > 0 ? unrenderedSlots.map( + (key) => `` + ).join("") : ""; + island.children = `${html ?? ""}${template}`; + if (island.children) { + island.props["await-children"] = ""; + island.children += ``; + } + return { + render(destination) { + if (slotInstructions) { + for (const instruction of slotInstructions) { + destination.write(instruction); + } + } + destination.write(createRenderInstruction({ type: "directive", hydration })); + if (hydration.directive !== "only" && renderer?.ssr.renderHydrationScript) { + destination.write( + createRenderInstruction({ + type: "renderer-hydration-script", + rendererName: renderer.name, + render: renderer.ssr.renderHydrationScript + }) + ); + } + destination.write(markHTMLString(renderElement$1("astro-island", island, false))); + } + }; +} +function sanitizeElementName(tag) { + const unsafe = /[&<>'"\s]+/g; + if (!unsafe.test(tag)) + return tag; + return tag.trim().split(unsafe)[0].trim(); +} +async function renderFragmentComponent(result, slots = {}) { + const children = await renderSlotToString(result, slots?.default); + return { + render(destination) { + if (children == null) + return; + destination.write(children); + } + }; +} +async function renderHTMLComponent(result, Component, _props, slots = {}) { + const { slotInstructions, children } = await renderSlots(result, slots); + const html = Component({ slots: children }); + const hydrationHtml = slotInstructions ? slotInstructions.map((instr) => chunkToString(result, instr)).join("") : ""; + return { + render(destination) { + destination.write(markHTMLString(hydrationHtml + html)); + } + }; +} +function renderAstroComponent(result, displayName, Component, props, slots = {}) { + const instance = createAstroComponentInstance(result, displayName, Component, props, slots); + return { + async render(destination) { + await instance.render(destination); + } + }; +} +async function renderComponent(result, displayName, Component, props, slots = {}) { + if (isPromise(Component)) { + Component = await Component; + } + if (isFragmentComponent(Component)) { + return await renderFragmentComponent(result, slots); + } + props = normalizeProps(props); + if (isHTMLComponent(Component)) { + return await renderHTMLComponent(result, Component, props, slots); + } + if (isAstroComponentFactory(Component)) { + return renderAstroComponent(result, displayName, Component, props, slots); + } + return await renderFrameworkComponent(result, displayName, Component, props, slots); +} +function normalizeProps(props) { + if (props["class:list"] !== void 0) { + const value = props["class:list"]; + delete props["class:list"]; + props["class"] = clsx(props["class"], value); + if (props["class"] === "") { + delete props["class"]; + } + } + return props; +} +async function renderComponentToString(result, displayName, Component, props, slots = {}, isPage = false, route) { + let str = ""; + let renderedFirstPageChunk = false; + let head = ""; + if (nonAstroPageNeedsHeadInjection(Component)) { + for (const headChunk of maybeRenderHead()) { + head += chunkToString(result, headChunk); + } + } + try { + const destination = { + write(chunk) { + if (isPage && !renderedFirstPageChunk) { + renderedFirstPageChunk = true; + if (!result.partial && !/" : "\n"; + str += doctype + head; + } + } + if (chunk instanceof Response) + return; + str += chunkToString(result, chunk); + } + }; + const renderInstance = await renderComponent(result, displayName, Component, props, slots); + await renderInstance.render(destination); + } catch (e) { + if (AstroError.is(e) && !e.loc) { + e.setLocation({ + file: route?.component + }); + } + throw e; + } + return str; +} +function nonAstroPageNeedsHeadInjection(pageComponent) { + return !!pageComponent?.[needsHeadRenderingSymbol]; +} + +const ClientOnlyPlaceholder = "astro-client-only"; +class Skip { + constructor(vnode) { + this.vnode = vnode; + this.count = 0; + } + count; + increment() { + this.count++; + } + haveNoTried() { + return this.count === 0; + } + isCompleted() { + return this.count > 2; + } + static symbol = Symbol("astro:jsx:skip"); +} +let originalConsoleError; +let consoleFilterRefs = 0; +async function renderJSX(result, vnode) { + switch (true) { + case vnode instanceof HTMLString: + if (vnode.toString().trim() === "") { + return ""; + } + return vnode; + case typeof vnode === "string": + return markHTMLString(escapeHTML(vnode)); + case typeof vnode === "function": + return vnode; + case (!vnode && vnode !== 0): + return ""; + case Array.isArray(vnode): + return markHTMLString( + (await Promise.all(vnode.map((v) => renderJSX(result, v)))).join("") + ); + } + let skip; + if (vnode.props) { + if (vnode.props[Skip.symbol]) { + skip = vnode.props[Skip.symbol]; + } else { + skip = new Skip(vnode); + } + } else { + skip = new Skip(vnode); + } + return renderJSXVNode(result, vnode, skip); +} +async function renderJSXVNode(result, vnode, skip) { + if (isVNode(vnode)) { + switch (true) { + case !vnode.type: { + throw new Error(`Unable to render ${result.pathname} because it contains an undefined Component! +Did you forget to import the component or is it possible there is a typo?`); + } + case vnode.type === Symbol.for("astro:fragment"): + return renderJSX(result, vnode.props.children); + case vnode.type.isAstroComponentFactory: { + let props = {}; + let slots = {}; + for (const [key, value] of Object.entries(vnode.props ?? {})) { + if (key === "children" || value && typeof value === "object" && value["$$slot"]) { + slots[key === "children" ? "default" : key] = () => renderJSX(result, value); + } else { + props[key] = value; + } + } + const str = await renderToString(result, vnode.type, props, slots); + if (str instanceof Response) { + throw str; + } + const html = markHTMLString(str); + return html; + } + case (!vnode.type && vnode.type !== 0): + return ""; + case (typeof vnode.type === "string" && vnode.type !== ClientOnlyPlaceholder): + return markHTMLString(await renderElement(result, vnode.type, vnode.props ?? {})); + } + if (vnode.type) { + let extractSlots2 = function(child) { + if (Array.isArray(child)) { + return child.map((c) => extractSlots2(c)); + } + if (!isVNode(child)) { + _slots.default.push(child); + return; + } + if ("slot" in child.props) { + _slots[child.props.slot] = [..._slots[child.props.slot] ?? [], child]; + delete child.props.slot; + return; + } + _slots.default.push(child); + }; + if (typeof vnode.type === "function" && vnode.type["astro:renderer"]) { + skip.increment(); + } + if (typeof vnode.type === "function" && vnode.props["server:root"]) { + const output2 = await vnode.type(vnode.props ?? {}); + return await renderJSX(result, output2); + } + if (typeof vnode.type === "function") { + if (skip.haveNoTried() || skip.isCompleted()) { + useConsoleFilter(); + try { + const output2 = await vnode.type(vnode.props ?? {}); + let renderResult; + if (output2?.[AstroJSX]) { + renderResult = await renderJSXVNode(result, output2, skip); + return renderResult; + } else if (!output2) { + renderResult = await renderJSXVNode(result, output2, skip); + return renderResult; + } + } catch (e) { + if (skip.isCompleted()) { + throw e; + } + skip.increment(); + } finally { + finishUsingConsoleFilter(); + } + } else { + skip.increment(); + } + } + const { children = null, ...props } = vnode.props ?? {}; + const _slots = { + default: [] + }; + extractSlots2(children); + for (const [key, value] of Object.entries(props)) { + if (value["$$slot"]) { + _slots[key] = value; + delete props[key]; + } + } + const slotPromises = []; + const slots = {}; + for (const [key, value] of Object.entries(_slots)) { + slotPromises.push( + renderJSX(result, value).then((output2) => { + if (output2.toString().trim().length === 0) + return; + slots[key] = () => output2; + }) + ); + } + await Promise.all(slotPromises); + props[Skip.symbol] = skip; + let output; + if (vnode.type === ClientOnlyPlaceholder && vnode.props["client:only"]) { + output = await renderComponentToString( + result, + vnode.props["client:display-name"] ?? "", + null, + props, + slots + ); + } else { + output = await renderComponentToString( + result, + typeof vnode.type === "function" ? vnode.type.name : vnode.type, + vnode.type, + props, + slots + ); + } + return markHTMLString(output); + } + } + return markHTMLString(`${vnode}`); +} +async function renderElement(result, tag, { children, ...props }) { + return markHTMLString( + `<${tag}${spreadAttributes(props)}${markHTMLString( + (children == null || children == "") && voidElementNames.test(tag) ? `/>` : `>${children == null ? "" : await renderJSX(result, prerenderElementChildren(tag, children))}` + )}` + ); +} +function prerenderElementChildren(tag, children) { + if (typeof children === "string" && (tag === "style" || tag === "script")) { + return markHTMLString(children); + } else { + return children; + } +} +function useConsoleFilter() { + consoleFilterRefs++; + if (!originalConsoleError) { + originalConsoleError = console.error; + try { + console.error = filteredConsoleError; + } catch (error) { + } + } +} +function finishUsingConsoleFilter() { + consoleFilterRefs--; +} +function filteredConsoleError(msg, ...rest) { + if (consoleFilterRefs > 0 && typeof msg === "string") { + const isKnownReactHookError = msg.includes("Warning: Invalid hook call.") && msg.includes("https://reactjs.org/link/invalid-hook-call"); + if (isKnownReactHookError) + return; + } + originalConsoleError(msg, ...rest); +} + +async function renderPage(result, componentFactory, props, children, streaming, route) { + if (!isAstroComponentFactory(componentFactory)) { + result._metadata.headInTree = result.componentMetadata.get(componentFactory.moduleId)?.containsHead ?? false; + const pageProps = { ...props ?? {}, "server:root": true }; + const str = await renderComponentToString( + result, + componentFactory.name, + componentFactory, + pageProps, + {}, + true, + route + ); + const bytes = encoder.encode(str); + return new Response(bytes, { + headers: new Headers([ + ["Content-Type", "text/html; charset=utf-8"], + ["Content-Length", bytes.byteLength.toString()] + ]) + }); + } + result._metadata.headInTree = result.componentMetadata.get(componentFactory.moduleId)?.containsHead ?? false; + let body; + if (streaming) { + body = await renderToReadableStream(result, componentFactory, props, children, true, route); + } else { + body = await renderToString(result, componentFactory, props, children, true, route); + } + if (body instanceof Response) + return body; + const init = result.response; + const headers = new Headers(init.headers); + if (!streaming && typeof body === "string") { + body = encoder.encode(body); + headers.set("Content-Length", body.byteLength.toString()); + } + if (route?.component.endsWith(".md")) { + headers.set("Content-Type", "text/html; charset=utf-8"); + } + const response = new Response(body, { ...init, headers }); + return response; +} + +const EASE_IN_OUT_QUART = "cubic-bezier(0.76, 0, 0.24, 1)"; +function slide({ + duration +} = {}) { + return { + forwards: { + old: [ + { + name: "astroFadeOut", + duration: duration ?? "90ms", + easing: EASE_IN_OUT_QUART, + fillMode: "both" + }, + { + name: "astroSlideToLeft", + duration: duration ?? "220ms", + easing: EASE_IN_OUT_QUART, + fillMode: "both" + } + ], + new: [ + { + name: "astroFadeIn", + duration: duration ?? "210ms", + easing: EASE_IN_OUT_QUART, + delay: duration ? void 0 : "30ms", + fillMode: "both" + }, + { + name: "astroSlideFromRight", + duration: duration ?? "220ms", + easing: EASE_IN_OUT_QUART, + fillMode: "both" + } + ] + }, + backwards: { + old: [{ name: "astroFadeOut" }, { name: "astroSlideToRight" }], + new: [{ name: "astroFadeIn" }, { name: "astroSlideFromLeft" }] + } + }; +} +function fade({ + duration +} = {}) { + const anim = { + old: { + name: "astroFadeOut", + duration: duration ?? 180, + easing: EASE_IN_OUT_QUART, + fillMode: "both" + }, + new: { + name: "astroFadeIn", + duration: duration ?? 180, + easing: EASE_IN_OUT_QUART, + fillMode: "both" + } + }; + return { + forwards: anim, + backwards: anim + }; +} + +const transitionNameMap = /* @__PURE__ */ new WeakMap(); +function incrementTransitionNumber(result) { + let num = 1; + if (transitionNameMap.has(result)) { + num = transitionNameMap.get(result) + 1; + } + transitionNameMap.set(result, num); + return num; +} +function createTransitionScope(result, hash) { + const num = incrementTransitionNumber(result); + return `astro-${hash}-${num}`; +} +function toValidIdent(name) { + return name.replace(/[^a-zA-Z0-9\-\_]/g, "_").replace(/^\_+|\_+$/g, ""); +} +const getAnimations = (name) => { + if (name === "fade") + return fade(); + if (name === "slide") + return slide(); + if (typeof name === "object") + return name; +}; +const addPairs = (animations, stylesheet) => { + for (const [direction, images] of Object.entries(animations)) { + for (const [image, rules] of Object.entries(images)) { + stylesheet.addAnimationPair(direction, image, rules); + } + } +}; +function renderTransition(result, hash, animationName, transitionName) { + if (!animationName) + animationName = "fade"; + const scope = createTransitionScope(result, hash); + const name = transitionName ? toValidIdent(transitionName) : scope; + const sheet = new ViewTransitionStyleSheet(scope, name); + const animations = getAnimations(animationName); + if (animations) { + addPairs(animations, sheet); + } else if (animationName === "none") { + sheet.addFallback("old", "animation: none; mix-blend-mode: normal;"); + sheet.addModern("old", "animation: none; opacity: 0; mix-blend-mode: normal;"); + sheet.addAnimationRaw("new", "animation: none; mix-blend-mode: normal;"); + } + result._metadata.extraHead.push(markHTMLString(``)); + return scope; +} +class ViewTransitionStyleSheet { + constructor(scope, name) { + this.scope = scope; + this.name = name; + } + modern = []; + fallback = []; + toString() { + const { scope, name } = this; + const [modern, fallback] = [this.modern, this.fallback].map((rules) => rules.join("")); + return [ + `[data-astro-transition-scope="${scope}"] { view-transition-name: ${name}; }`, + this.layer(modern), + fallback + ].join(""); + } + layer(cssText) { + return cssText ? `@layer astro { ${cssText} }` : ""; + } + addRule(target, cssText) { + this[target].push(cssText); + } + addAnimationRaw(image, animation) { + this.addModern(image, animation); + this.addFallback(image, animation); + } + addModern(image, animation) { + const { name } = this; + this.addRule("modern", `::view-transition-${image}(${name}) { ${animation} }`); + } + addFallback(image, animation) { + const { scope } = this; + this.addRule( + "fallback", + // Two selectors here, the second in case there is an animation on the root. + `[data-astro-transition-fallback="${image}"] [data-astro-transition-scope="${scope}"], + [data-astro-transition-fallback="${image}"][data-astro-transition-scope="${scope}"] { ${animation} }` + ); + } + addAnimationPair(direction, image, rules) { + const { scope, name } = this; + const animation = stringifyAnimation(rules); + const prefix = direction === "backwards" ? `[data-astro-transition=back]` : direction === "forwards" ? "" : `[data-astro-transition=${direction}]`; + this.addRule("modern", `${prefix}::view-transition-${image}(${name}) { ${animation} }`); + this.addRule( + "fallback", + `${prefix}[data-astro-transition-fallback="${image}"] [data-astro-transition-scope="${scope}"], + ${prefix}[data-astro-transition-fallback="${image}"][data-astro-transition-scope="${scope}"] { ${animation} }` + ); + } +} +function addAnimationProperty(builder, prop, value) { + let arr = builder[prop]; + if (Array.isArray(arr)) { + arr.push(value.toString()); + } else { + builder[prop] = [value.toString()]; + } +} +function animationBuilder() { + return { + toString() { + let out = ""; + for (let k in this) { + let value = this[k]; + if (Array.isArray(value)) { + out += ` + ${k}: ${value.join(", ")};`; + } + } + return out; + } + }; +} +function stringifyAnimation(anim) { + if (Array.isArray(anim)) { + return stringifyAnimations(anim); + } else { + return stringifyAnimations([anim]); + } +} +function stringifyAnimations(anims) { + const builder = animationBuilder(); + for (const anim of anims) { + if (anim.duration) { + addAnimationProperty(builder, "animation-duration", toTimeValue(anim.duration)); + } + if (anim.easing) { + addAnimationProperty(builder, "animation-timing-function", anim.easing); + } + if (anim.direction) { + addAnimationProperty(builder, "animation-direction", anim.direction); + } + if (anim.delay) { + addAnimationProperty(builder, "animation-delay", anim.delay); + } + if (anim.fillMode) { + addAnimationProperty(builder, "animation-fill-mode", anim.fillMode); + } + addAnimationProperty(builder, "animation-name", anim.name); + } + return builder.toString(); +} +function toTimeValue(num) { + return typeof num === "number" ? num + "ms" : num; +} + +function spreadAttributes(values = {}, _name, { class: scopedClassName } = {}) { + let output = ""; + if (scopedClassName) { + if (typeof values.class !== "undefined") { + values.class += ` ${scopedClassName}`; + } else if (typeof values["class:list"] !== "undefined") { + values["class:list"] = [values["class:list"], scopedClassName]; + } else { + values.class = scopedClassName; + } + } + for (const [key, value] of Object.entries(values)) { + output += addAttribute(value, key, true); + } + return markHTMLString(output); +} + +export { AstroError as A, renderSlotToString as B, ClientAddressNotAvailable as C, renderJSX as D, ExpectedImage as E, chunkToString as F, GetStaticPathsRequired as G, CantRenderPage as H, IncompatibleDescriptorOptions as I, renderPage as J, LocalImageUsedWrongly as L, MissingImageDimension as M, NoMatchingStaticPathFound as N, PageNumberParamNotFound as P, ResponseSentError as R, StaticClientAddressNotAvailable as S, UnsupportedImageFormat as U, UnsupportedImageConversion as a, MissingSharp as b, createAstro as c, createComponent as d, addAttribute as e, renderSlot as f, renderTransition as g, renderComponent as h, renderHead as i, InvalidImageService as j, ExpectedImageOptions as k, ImageMissingAlt as l, maybeRenderHead as m, MiddlewareNoDataOrNextCalled as n, MiddlewareNotAResponse as o, InvalidGetStaticPathsReturn as p, InvalidGetStaticPathsEntry as q, renderTemplate as r, spreadAttributes as s, GetStaticPathsExpectedParams as t, GetStaticPathsInvalidRouteParam as u, PrerenderDynamicEndpointPathCollide as v, LocalsNotAnObject as w, ASTRO_VERSION as x, renderEndpoint as y, ReservedSlotName as z }; diff --git a/test/data/warden/dist/server/chunks/index_5_WFUSxR.mjs b/test/data/warden/dist/server/chunks/index_5_WFUSxR.mjs new file mode 100644 index 0000000..3cecc1b --- /dev/null +++ b/test/data/warden/dist/server/chunks/index_5_WFUSxR.mjs @@ -0,0 +1,6 @@ +export { renderers } from '../renderers.mjs'; +export { onRequest } from '../_empty-middleware.mjs'; + +const page = () => import('./pages/index_l5vwnKzb.mjs').then(n => n.b); + +export { page }; diff --git a/test/data/warden/dist/server/chunks/index_6C3b8yBv.mjs b/test/data/warden/dist/server/chunks/index_6C3b8yBv.mjs new file mode 100644 index 0000000..5276259 --- /dev/null +++ b/test/data/warden/dist/server/chunks/index_6C3b8yBv.mjs @@ -0,0 +1,6 @@ +export { renderers } from '../renderers.mjs'; +export { onRequest } from '../_empty-middleware.mjs'; + +const page = () => import('./pages/index_l5vwnKzb.mjs').then(n => n.i); + +export { page }; diff --git a/test/data/warden/dist/server/chunks/index_Ij1Dwoh1.mjs b/test/data/warden/dist/server/chunks/index_Ij1Dwoh1.mjs new file mode 100644 index 0000000..3290d5f --- /dev/null +++ b/test/data/warden/dist/server/chunks/index_Ij1Dwoh1.mjs @@ -0,0 +1,6 @@ +export { renderers } from '../renderers.mjs'; +export { onRequest } from '../_empty-middleware.mjs'; + +const page = () => import('./pages/index_l5vwnKzb.mjs').then(n => n.a); + +export { page }; diff --git a/test/data/warden/dist/server/chunks/node_0Fr8CwHA.mjs b/test/data/warden/dist/server/chunks/node_0Fr8CwHA.mjs new file mode 100644 index 0000000..d29836d --- /dev/null +++ b/test/data/warden/dist/server/chunks/node_0Fr8CwHA.mjs @@ -0,0 +1,6 @@ +export { renderers } from '../renderers.mjs'; +export { onRequest } from '../_empty-middleware.mjs'; + +const page = () => import('./pages/node_hIg2I-Kh.mjs'); + +export { page }; diff --git a/test/data/warden/dist/server/chunks/pages/_slug__TUDhKBhQ.mjs b/test/data/warden/dist/server/chunks/pages/_slug__TUDhKBhQ.mjs new file mode 100644 index 0000000..e9cf3f9 --- /dev/null +++ b/test/data/warden/dist/server/chunks/pages/_slug__TUDhKBhQ.mjs @@ -0,0 +1,245 @@ +/* empty css */ +import 'html-escaper'; +import { c as createAstro, d as createComponent, r as renderTemplate, m as maybeRenderHead, e as addAttribute, f as renderSlot, g as renderTransition, h as renderComponent, i as renderHead } from '../astro_5WdVqH1c.mjs'; +import 'kleur/colors'; +import 'clsx'; +import { DocumentRenderer } from '@keystone-6/document-renderer'; +/* empty css */ +/* empty css */ + +const $$Astro$7 = createAstro("https://smartsheep.studio"); +const $$Navbar = createComponent(async ($$result, $$props, $$slots) => { + const Astro2 = $$result.createAstro($$Astro$7, $$props, $$slots); + Astro2.self = $$Navbar; + const items = [ + { + label: "\u60C5\u62A5", + children: [ + { href: "/posts", label: "\u8BB0\u5F55" }, + { href: "/events", label: "\u6D3B\u52A8" } + ] + } + ]; + return renderTemplate`${maybeRenderHead()}`; +}, "/Users/littlesheep/Documents/Projects/Capital/src/components/Navbar.astro", void 0); + +const $$Astro$6 = createAstro("https://smartsheep.studio"); +const $$ViewTransitions = createComponent(async ($$result, $$props, $$slots) => { + const Astro2 = $$result.createAstro($$Astro$6, $$props, $$slots); + Astro2.self = $$ViewTransitions; + const { fallback = "animate" } = Astro2.props; + return renderTemplate``; +}, "/Users/littlesheep/Documents/Projects/Capital/node_modules/astro/components/ViewTransitions.astro", void 0); + +var __freeze = Object.freeze; +var __defProp = Object.defineProperty; +var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", { value: __freeze(raw || cooked.slice()) })); +var _a; +const $$Astro$5 = createAstro("https://smartsheep.studio"); +const $$RootLayout = createComponent(async ($$result, $$props, $$slots) => { + const Astro2 = $$result.createAstro($$Astro$5, $$props, $$slots); + Astro2.self = $$RootLayout; + const { title } = Astro2.props; + return renderTemplate(_a || (_a = __template([' ", "", "", "", " ", "
", '