├── .github └── workflows │ ├── ci.yml │ ├── oranda.yml │ └── release.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Cargo.lock ├── Cargo.toml ├── LICENSE-APACHE ├── LICENSE-MIT ├── README.md ├── SECURITY.md ├── examples ├── agent-conf.md └── cheatsheet.md ├── oranda.json └── src ├── assets ├── slide.js ├── styles.css └── themes │ ├── axo.css │ ├── cupcake.css │ ├── dark.css │ ├── light.css │ └── nash.css ├── errors.rs ├── main.rs ├── message.rs └── slideshow ├── html.rs ├── markdown_parser.rs └── mod.rs /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Rust 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: 7 | - main 8 | schedule: 9 | - cron: '11 7 * * 1,4' 10 | 11 | env: 12 | RUSTFLAGS: -Dwarnings 13 | 14 | jobs: 15 | fmt: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - uses: actions/checkout@v2 19 | - name: Run cargo fmt 20 | run: | 21 | cargo fmt --all -- --check 22 | clippy: 23 | runs-on: ubuntu-latest 24 | steps: 25 | - uses: actions/checkout@v2 26 | - name: Run cargo clippy 27 | run: | 28 | cargo clippy --workspace --tests --examples 29 | docs: 30 | runs-on: ubuntu-latest 31 | env: 32 | RUSTDOCFLAGS: -Dwarnings 33 | steps: 34 | - uses: actions/checkout@v2 35 | - name: Run cargo clippy 36 | run: | 37 | cargo doc --workspace --no-deps 38 | test: 39 | runs-on: ${{ matrix.os }} 40 | strategy: 41 | matrix: 42 | os: [ubuntu-latest, windows-latest, macOS-latest] 43 | steps: 44 | - uses: actions/checkout@v2 45 | - name: Run cargo test 46 | run: | 47 | cargo test --workspace 48 | -------------------------------------------------------------------------------- /.github/workflows/oranda.yml: -------------------------------------------------------------------------------- 1 | name: Oranda 2 | on: 3 | push: 4 | branches: 5 | - main 6 | jobs: 7 | web: 8 | name: Build oranda 9 | runs-on: ubuntu-latest 10 | permissions: 11 | contents: write 12 | steps: 13 | - uses: actions/checkout@v2 14 | - uses: actions-rs/toolchain@v1 15 | with: 16 | toolchain: stable 17 | override: true 18 | - name: Install and run oranda 19 | run: | 20 | curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/oranda/releases/latest/download/oranda-installer.sh | sh 21 | oranda build 22 | - name: Deploy oranda 23 | uses: JamesIves/github-pages-deploy-action@v4.4.1 24 | if: ${{ github.ref == 'refs/heads/main' }} 25 | with: 26 | branch: gh-pages 27 | folder: public 28 | token: ${{ secrets.GITHUB_TOKEN }} 29 | single-commit: true 30 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | # CI that: 2 | # 3 | # * checks for a Git Tag that looks like a release 4 | # * creates a Github Release™ and fills in its text 5 | # * builds artifacts with cargo-dist (executable-zips, installers) 6 | # * uploads those artifacts to the Github Release™ 7 | # 8 | # Note that the Github Release™ will be created before the artifacts, 9 | # so there will be a few minutes where the release has no artifacts 10 | # and then they will slowly trickle in, possibly failing. To make 11 | # this more pleasant we mark the release as a "draft" until all 12 | # artifacts have been successfully uploaded. This allows you to 13 | # choose what to do with partial successes and avoids spamming 14 | # anyone with notifications before the release is actually ready. 15 | name: Release 16 | 17 | permissions: 18 | contents: write 19 | 20 | # This task will run whenever you push a git tag that looks like a version 21 | # like "v1", "v1.2.0", "v0.1.0-prerelease01", "my-app-v1.0.0", etc. 22 | # The version will be roughly parsed as ({PACKAGE_NAME}-)?v{VERSION}, where 23 | # PACKAGE_NAME must be the name of a Cargo package in your workspace, and VERSION 24 | # must be a Cargo-style SemVer Version. 25 | # 26 | # If PACKAGE_NAME is specified, then we will create a Github Release™ for that 27 | # package (erroring out if it doesn't have the given version or isn't cargo-dist-able). 28 | # 29 | # If PACKAGE_NAME isn't specified, then we will create a Github Release™ for all 30 | # (cargo-dist-able) packages in the workspace with that version (this is mode is 31 | # intended for workspaces with only one dist-able package, or with all dist-able 32 | # packages versioned/released in lockstep). 33 | # 34 | # If you push multiple tags at once, separate instances of this workflow will 35 | # spin up, creating an independent Github Release™ for each one. 36 | # 37 | # If there's a prerelease-style suffix to the version then the Github Release™ 38 | # will be marked as a prerelease. 39 | on: 40 | push: 41 | tags: 42 | - '*-?v[0-9]+*' 43 | 44 | jobs: 45 | # Create the Github Release™ so the packages have something to be uploaded to 46 | create-release: 47 | runs-on: ubuntu-latest 48 | outputs: 49 | has-releases: ${{ steps.create-release.outputs.has-releases }} 50 | env: 51 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 52 | steps: 53 | - uses: actions/checkout@v3 54 | - name: Install Rust 55 | run: rustup update 1.67.1 --no-self-update && rustup default 1.67.1 56 | - name: Install cargo-dist 57 | run: curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.0.7/cargo-dist-installer.sh | sh 58 | - id: create-release 59 | run: | 60 | cargo dist plan --tag=${{ github.ref_name }} --output-format=json > dist-manifest.json 61 | echo "dist plan ran successfully" 62 | cat dist-manifest.json 63 | 64 | # Create the Github Release™ based on what cargo-dist thinks it should be 65 | ANNOUNCEMENT_TITLE=$(jq --raw-output ".announcement_title" dist-manifest.json) 66 | IS_PRERELEASE=$(jq --raw-output ".announcement_is_prerelease" dist-manifest.json) 67 | jq --raw-output ".announcement_github_body" dist-manifest.json > new_dist_announcement.md 68 | gh release create ${{ github.ref_name }} --draft --prerelease="$IS_PRERELEASE" --title="$ANNOUNCEMENT_TITLE" --notes-file=new_dist_announcement.md 69 | echo "created announcement!" 70 | 71 | # Upload the manifest to the Github Release™ 72 | gh release upload ${{ github.ref_name }} dist-manifest.json 73 | echo "uploaded manifest!" 74 | 75 | # Disable all the upload-artifacts tasks if we have no actual releases 76 | HAS_RELEASES=$(jq --raw-output ".releases != null" dist-manifest.json) 77 | echo "has-releases=$HAS_RELEASES" >> "$GITHUB_OUTPUT" 78 | 79 | # Build and packages all the things 80 | upload-artifacts: 81 | # Let the initial task tell us to not run (currently very blunt) 82 | needs: create-release 83 | if: ${{ needs.create-release.outputs.has-releases == 'true' }} 84 | strategy: 85 | matrix: 86 | # For these target platforms 87 | include: 88 | - os: ubuntu-20.04 89 | dist-args: --artifacts=global 90 | install-dist: curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.0.7/cargo-dist-installer.sh | sh 91 | - os: macos-11 92 | dist-args: --artifacts=local --target=aarch64-apple-darwin --target=x86_64-apple-darwin 93 | install-dist: curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.0.7/cargo-dist-installer.sh | sh 94 | - os: ubuntu-20.04 95 | dist-args: --artifacts=local --target=x86_64-unknown-linux-gnu 96 | install-dist: curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.0.7/cargo-dist-installer.sh | sh 97 | - os: windows-2019 98 | dist-args: --artifacts=local --target=x86_64-pc-windows-msvc 99 | install-dist: irm https://github.com/axodotdev/cargo-dist/releases/download/v0.0.7/cargo-dist-installer.ps1 | iex 100 | 101 | runs-on: ${{ matrix.os }} 102 | env: 103 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 104 | steps: 105 | - uses: actions/checkout@v3 106 | - name: Install Rust 107 | run: rustup update 1.67.1 --no-self-update && rustup default 1.67.1 108 | - name: Install cargo-dist 109 | run: ${{ matrix.install-dist }} 110 | - name: Run cargo-dist 111 | # This logic is a bit janky because it's trying to be a polyglot between 112 | # powershell and bash since this will run on windows, macos, and linux! 113 | # The two platforms don't agree on how to talk about env vars but they 114 | # do agree on 'cat' and '$()' so we use that to marshal values between commands. 115 | run: | 116 | # Actually do builds and make zips and whatnot 117 | cargo dist build --tag=${{ github.ref_name }} --output-format=json ${{ matrix.dist-args }} > dist-manifest.json 118 | echo "dist ran successfully" 119 | cat dist-manifest.json 120 | 121 | # Parse out what we just built and upload it to the Github Release™ 122 | jq --raw-output ".artifacts[]?.path | select( . != null )" dist-manifest.json > uploads.txt 123 | echo "uploading..." 124 | cat uploads.txt 125 | gh release upload ${{ github.ref_name }} $(cat uploads.txt) 126 | echo "uploaded!" 127 | 128 | # Mark the Github Release™ as a non-draft now that everything has succeeded! 129 | publish-release: 130 | # Only run after all the other tasks, but it's ok if upload-artifacts was skipped 131 | needs: [create-release, upload-artifacts] 132 | if: ${{ always() && needs.create-release.result == 'success' && (needs.upload-artifacts.result == 'skipped' || needs.upload-artifacts.result == 'success') }} 133 | runs-on: ubuntu-latest 134 | env: 135 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 136 | steps: 137 | - uses: actions/checkout@v3 138 | - name: mark release as non-draft 139 | run: | 140 | gh release edit ${{ github.ref_name }} --draft=false 141 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | public -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | The repositories within the @axodotdev GitHub organization are formally owned 4 | by Axo Developer Co. which is a for-profit C-Corporation incorporated in 5 | Delaware, USA and operated by its global, distributed, team of employees. 6 | 7 | To the extent it is possible, reasonable, and legal, external contributors and 8 | employees are held to the same behavior standards, as defined by the 9 | [Contributor Covenant]'s Pledge and Standards. 10 | 11 | Enforcement will necessarily be different depending on the employment status 12 | of involved parties. 13 | 14 | All decisions are made by [Ashley Williams](mailto:ashley@axo.dev) through a 15 | consensus-seeking process with the [Axo team](https://www.axo.dev/team) and 16 | to the extent it is possible, reasonable, and legal, any involved external 17 | participants. 18 | 19 | [Contributor Covenant]: https://www.contributor-covenant.org/version/2/1/code_of_conduct/ 20 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Thanks so much for your interest in contributing to `slippy`. We are excited 4 | about the building a community of contributors to the project. Here's some 5 | guiding principles for working with us: 6 | 7 | **1. File an issue first!** 8 | 9 | Except for the absolute tiniest of PRs (e.g. a single typo fix), please file an 10 | issue before opening a PR. This can help ensure that the problem you are trying 11 | to solve and the solution you have in mind will be accepted. Where possible, we 12 | don't want folks wasting time on directions we don't want to take the project. 13 | 14 | **2. Write tests, or at least detailed reproduction steps** 15 | 16 | If you find a bug, the best way to prioritize getting it fixed is to open a PR 17 | with a failing test! If you a opening a bug fix PR, please add a test to show 18 | that your fix works. 19 | 20 | **3. Overcommunicate** 21 | 22 | In all scenarios, please provide as much context as possible- you may not think 23 | it's important but it may be! 24 | 25 | **4. Patience** 26 | 27 | Axo is a very small company, it's possible that we may not be able to 28 | immediately prioritize your issue. We are excite to develop a community of 29 | contributors around this project, but it won't always be on the top of our to-do 30 | list, even if we wish it could be. 31 | 32 | If you haven't heard from us in a while and want to check in, feel free to 33 | at-mention @ashleygwilliams- but please be kind while doing so! 34 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "adler" 7 | version = "1.0.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 10 | 11 | [[package]] 12 | name = "aho-corasick" 13 | version = "0.7.20" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" 16 | dependencies = [ 17 | "memchr", 18 | ] 19 | 20 | [[package]] 21 | name = "ansi_term" 22 | version = "0.12.1" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 25 | dependencies = [ 26 | "winapi", 27 | ] 28 | 29 | [[package]] 30 | name = "ascii-canvas" 31 | version = "3.0.0" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" 34 | dependencies = [ 35 | "term", 36 | ] 37 | 38 | [[package]] 39 | name = "assert_cmd" 40 | version = "2.0.8" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" 43 | dependencies = [ 44 | "bstr", 45 | "doc-comment", 46 | "predicates", 47 | "predicates-core", 48 | "predicates-tree", 49 | "wait-timeout", 50 | ] 51 | 52 | [[package]] 53 | name = "atty" 54 | version = "0.2.14" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 57 | dependencies = [ 58 | "hermit-abi 0.1.19", 59 | "libc", 60 | "winapi", 61 | ] 62 | 63 | [[package]] 64 | name = "autocfg" 65 | version = "1.1.0" 66 | source = "registry+https://github.com/rust-lang/crates.io-index" 67 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 68 | 69 | [[package]] 70 | name = "axoasset" 71 | version = "0.0.1" 72 | source = "registry+https://github.com/rust-lang/crates.io-index" 73 | checksum = "d910f7c1d30f796d88031b1421200c26a4d82a16b81078e538cfd73b520052e4" 74 | dependencies = [ 75 | "image", 76 | "mime", 77 | "reqwest", 78 | "thiserror", 79 | "toml", 80 | "url", 81 | ] 82 | 83 | [[package]] 84 | name = "axohtml" 85 | version = "0.4.1" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "53b9c23173b389981ed2b86a22b62dd52f143b36daedae867555453d0a829e92" 88 | dependencies = [ 89 | "axohtml-macros", 90 | "htmlescape", 91 | "language-tags", 92 | "mime", 93 | "proc-macro-nested", 94 | "strum", 95 | "strum_macros", 96 | ] 97 | 98 | [[package]] 99 | name = "axohtml-macros" 100 | version = "0.4.1" 101 | source = "registry+https://github.com/rust-lang/crates.io-index" 102 | checksum = "502fa4afcc70e8493bd8a4f66b9b455cd9ae6adfa8a7dfd71ad637c01c59c40b" 103 | dependencies = [ 104 | "ansi_term", 105 | "lalrpop", 106 | "lalrpop-util", 107 | "proc-macro2", 108 | "quote", 109 | "version_check", 110 | ] 111 | 112 | [[package]] 113 | name = "base64" 114 | version = "0.21.0" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" 117 | 118 | [[package]] 119 | name = "bit-set" 120 | version = "0.5.3" 121 | source = "registry+https://github.com/rust-lang/crates.io-index" 122 | checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 123 | dependencies = [ 124 | "bit-vec", 125 | ] 126 | 127 | [[package]] 128 | name = "bit-vec" 129 | version = "0.6.3" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 132 | 133 | [[package]] 134 | name = "bit_field" 135 | version = "0.10.2" 136 | source = "registry+https://github.com/rust-lang/crates.io-index" 137 | checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" 138 | 139 | [[package]] 140 | name = "bitflags" 141 | version = "1.3.2" 142 | source = "registry+https://github.com/rust-lang/crates.io-index" 143 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 144 | 145 | [[package]] 146 | name = "bstr" 147 | version = "1.2.0" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" 150 | dependencies = [ 151 | "memchr", 152 | "once_cell", 153 | "regex-automata", 154 | "serde", 155 | ] 156 | 157 | [[package]] 158 | name = "bumpalo" 159 | version = "3.12.0" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" 162 | 163 | [[package]] 164 | name = "bytemuck" 165 | version = "1.13.1" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" 168 | 169 | [[package]] 170 | name = "byteorder" 171 | version = "1.4.3" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 174 | 175 | [[package]] 176 | name = "bytes" 177 | version = "1.4.0" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" 180 | 181 | [[package]] 182 | name = "cc" 183 | version = "1.0.79" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" 186 | 187 | [[package]] 188 | name = "cfg-if" 189 | version = "1.0.0" 190 | source = "registry+https://github.com/rust-lang/crates.io-index" 191 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 192 | 193 | [[package]] 194 | name = "clap" 195 | version = "4.1.4" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" 198 | dependencies = [ 199 | "bitflags", 200 | "clap_derive", 201 | "clap_lex", 202 | "is-terminal", 203 | "once_cell", 204 | "strsim", 205 | "termcolor", 206 | ] 207 | 208 | [[package]] 209 | name = "clap_derive" 210 | version = "4.1.0" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" 213 | dependencies = [ 214 | "heck 0.4.1", 215 | "proc-macro-error", 216 | "proc-macro2", 217 | "quote", 218 | "syn", 219 | ] 220 | 221 | [[package]] 222 | name = "clap_lex" 223 | version = "0.3.1" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" 226 | dependencies = [ 227 | "os_str_bytes", 228 | ] 229 | 230 | [[package]] 231 | name = "color_quant" 232 | version = "1.1.0" 233 | source = "registry+https://github.com/rust-lang/crates.io-index" 234 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 235 | 236 | [[package]] 237 | name = "console" 238 | version = "0.15.5" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" 241 | dependencies = [ 242 | "encode_unicode", 243 | "lazy_static", 244 | "libc", 245 | "unicode-width", 246 | "windows-sys 0.42.0", 247 | ] 248 | 249 | [[package]] 250 | name = "convert_case" 251 | version = "0.4.0" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 254 | 255 | [[package]] 256 | name = "core-foundation" 257 | version = "0.9.3" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 260 | dependencies = [ 261 | "core-foundation-sys", 262 | "libc", 263 | ] 264 | 265 | [[package]] 266 | name = "core-foundation-sys" 267 | version = "0.8.3" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 270 | 271 | [[package]] 272 | name = "crc32fast" 273 | version = "1.3.2" 274 | source = "registry+https://github.com/rust-lang/crates.io-index" 275 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 276 | dependencies = [ 277 | "cfg-if", 278 | ] 279 | 280 | [[package]] 281 | name = "crossbeam-channel" 282 | version = "0.5.7" 283 | source = "registry+https://github.com/rust-lang/crates.io-index" 284 | checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" 285 | dependencies = [ 286 | "cfg-if", 287 | "crossbeam-utils", 288 | ] 289 | 290 | [[package]] 291 | name = "crossbeam-deque" 292 | version = "0.8.3" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" 295 | dependencies = [ 296 | "cfg-if", 297 | "crossbeam-epoch", 298 | "crossbeam-utils", 299 | ] 300 | 301 | [[package]] 302 | name = "crossbeam-epoch" 303 | version = "0.9.14" 304 | source = "registry+https://github.com/rust-lang/crates.io-index" 305 | checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" 306 | dependencies = [ 307 | "autocfg", 308 | "cfg-if", 309 | "crossbeam-utils", 310 | "memoffset", 311 | "scopeguard", 312 | ] 313 | 314 | [[package]] 315 | name = "crossbeam-utils" 316 | version = "0.8.15" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" 319 | dependencies = [ 320 | "cfg-if", 321 | ] 322 | 323 | [[package]] 324 | name = "crunchy" 325 | version = "0.2.2" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 328 | 329 | [[package]] 330 | name = "css-minify" 331 | version = "0.3.1" 332 | source = "registry+https://github.com/rust-lang/crates.io-index" 333 | checksum = "874c6e2d19f8d4a285083b11a3241bfbe01ac3ed85f26e1e6b34888d960552bd" 334 | dependencies = [ 335 | "derive_more", 336 | "indexmap", 337 | "nom", 338 | ] 339 | 340 | [[package]] 341 | name = "derive_more" 342 | version = "0.99.17" 343 | source = "registry+https://github.com/rust-lang/crates.io-index" 344 | checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" 345 | dependencies = [ 346 | "convert_case", 347 | "proc-macro2", 348 | "quote", 349 | "rustc_version", 350 | "syn", 351 | ] 352 | 353 | [[package]] 354 | name = "diff" 355 | version = "0.1.13" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" 358 | 359 | [[package]] 360 | name = "difflib" 361 | version = "0.4.0" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" 364 | 365 | [[package]] 366 | name = "dirs-next" 367 | version = "2.0.0" 368 | source = "registry+https://github.com/rust-lang/crates.io-index" 369 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" 370 | dependencies = [ 371 | "cfg-if", 372 | "dirs-sys-next", 373 | ] 374 | 375 | [[package]] 376 | name = "dirs-sys-next" 377 | version = "0.1.2" 378 | source = "registry+https://github.com/rust-lang/crates.io-index" 379 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" 380 | dependencies = [ 381 | "libc", 382 | "redox_users", 383 | "winapi", 384 | ] 385 | 386 | [[package]] 387 | name = "doc-comment" 388 | version = "0.3.3" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" 391 | 392 | [[package]] 393 | name = "either" 394 | version = "1.8.1" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" 397 | 398 | [[package]] 399 | name = "ena" 400 | version = "0.14.1" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "b2e5d13ca2353ab7d0230988629def93914a8c4015f621f9b13ed2955614731d" 403 | dependencies = [ 404 | "log", 405 | ] 406 | 407 | [[package]] 408 | name = "encode_unicode" 409 | version = "0.3.6" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" 412 | 413 | [[package]] 414 | name = "encoding_rs" 415 | version = "0.8.32" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" 418 | dependencies = [ 419 | "cfg-if", 420 | ] 421 | 422 | [[package]] 423 | name = "errno" 424 | version = "0.2.8" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" 427 | dependencies = [ 428 | "errno-dragonfly", 429 | "libc", 430 | "winapi", 431 | ] 432 | 433 | [[package]] 434 | name = "errno-dragonfly" 435 | version = "0.1.2" 436 | source = "registry+https://github.com/rust-lang/crates.io-index" 437 | checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" 438 | dependencies = [ 439 | "cc", 440 | "libc", 441 | ] 442 | 443 | [[package]] 444 | name = "exr" 445 | version = "1.6.3" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | checksum = "bdd2162b720141a91a054640662d3edce3d50a944a50ffca5313cd951abb35b4" 448 | dependencies = [ 449 | "bit_field", 450 | "flume", 451 | "half", 452 | "lebe", 453 | "miniz_oxide", 454 | "rayon-core", 455 | "smallvec", 456 | "zune-inflate", 457 | ] 458 | 459 | [[package]] 460 | name = "fastrand" 461 | version = "1.9.0" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" 464 | dependencies = [ 465 | "instant", 466 | ] 467 | 468 | [[package]] 469 | name = "fixedbitset" 470 | version = "0.4.2" 471 | source = "registry+https://github.com/rust-lang/crates.io-index" 472 | checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" 473 | 474 | [[package]] 475 | name = "flate2" 476 | version = "1.0.25" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" 479 | dependencies = [ 480 | "crc32fast", 481 | "miniz_oxide", 482 | ] 483 | 484 | [[package]] 485 | name = "flume" 486 | version = "0.10.14" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" 489 | dependencies = [ 490 | "futures-core", 491 | "futures-sink", 492 | "nanorand", 493 | "pin-project", 494 | "spin", 495 | ] 496 | 497 | [[package]] 498 | name = "fnv" 499 | version = "1.0.7" 500 | source = "registry+https://github.com/rust-lang/crates.io-index" 501 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 502 | 503 | [[package]] 504 | name = "foreign-types" 505 | version = "0.3.2" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 508 | dependencies = [ 509 | "foreign-types-shared", 510 | ] 511 | 512 | [[package]] 513 | name = "foreign-types-shared" 514 | version = "0.1.1" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 517 | 518 | [[package]] 519 | name = "form_urlencoded" 520 | version = "1.1.0" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" 523 | dependencies = [ 524 | "percent-encoding", 525 | ] 526 | 527 | [[package]] 528 | name = "fs_extra" 529 | version = "1.3.0" 530 | source = "registry+https://github.com/rust-lang/crates.io-index" 531 | checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" 532 | 533 | [[package]] 534 | name = "futures-channel" 535 | version = "0.3.26" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" 538 | dependencies = [ 539 | "futures-core", 540 | ] 541 | 542 | [[package]] 543 | name = "futures-core" 544 | version = "0.3.26" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" 547 | 548 | [[package]] 549 | name = "futures-sink" 550 | version = "0.3.26" 551 | source = "registry+https://github.com/rust-lang/crates.io-index" 552 | checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" 553 | 554 | [[package]] 555 | name = "futures-task" 556 | version = "0.3.26" 557 | source = "registry+https://github.com/rust-lang/crates.io-index" 558 | checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" 559 | 560 | [[package]] 561 | name = "futures-util" 562 | version = "0.3.26" 563 | source = "registry+https://github.com/rust-lang/crates.io-index" 564 | checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" 565 | dependencies = [ 566 | "futures-core", 567 | "futures-task", 568 | "pin-project-lite", 569 | "pin-utils", 570 | ] 571 | 572 | [[package]] 573 | name = "getrandom" 574 | version = "0.2.8" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" 577 | dependencies = [ 578 | "cfg-if", 579 | "js-sys", 580 | "libc", 581 | "wasi", 582 | "wasm-bindgen", 583 | ] 584 | 585 | [[package]] 586 | name = "gif" 587 | version = "0.11.4" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" 590 | dependencies = [ 591 | "color_quant", 592 | "weezl", 593 | ] 594 | 595 | [[package]] 596 | name = "h2" 597 | version = "0.3.16" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" 600 | dependencies = [ 601 | "bytes", 602 | "fnv", 603 | "futures-core", 604 | "futures-sink", 605 | "futures-util", 606 | "http", 607 | "indexmap", 608 | "slab", 609 | "tokio", 610 | "tokio-util", 611 | "tracing", 612 | ] 613 | 614 | [[package]] 615 | name = "half" 616 | version = "2.2.1" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" 619 | dependencies = [ 620 | "crunchy", 621 | ] 622 | 623 | [[package]] 624 | name = "hashbrown" 625 | version = "0.12.3" 626 | source = "registry+https://github.com/rust-lang/crates.io-index" 627 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 628 | 629 | [[package]] 630 | name = "heck" 631 | version = "0.3.3" 632 | source = "registry+https://github.com/rust-lang/crates.io-index" 633 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 634 | dependencies = [ 635 | "unicode-segmentation", 636 | ] 637 | 638 | [[package]] 639 | name = "heck" 640 | version = "0.4.1" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 643 | 644 | [[package]] 645 | name = "hermit-abi" 646 | version = "0.1.19" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 649 | dependencies = [ 650 | "libc", 651 | ] 652 | 653 | [[package]] 654 | name = "hermit-abi" 655 | version = "0.2.6" 656 | source = "registry+https://github.com/rust-lang/crates.io-index" 657 | checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" 658 | dependencies = [ 659 | "libc", 660 | ] 661 | 662 | [[package]] 663 | name = "hermit-abi" 664 | version = "0.3.0" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "856b5cb0902c2b6d65d5fd97dfa30f9b70c7538e770b98eab5ed52d8db923e01" 667 | 668 | [[package]] 669 | name = "htmlescape" 670 | version = "0.3.1" 671 | source = "registry+https://github.com/rust-lang/crates.io-index" 672 | checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" 673 | 674 | [[package]] 675 | name = "http" 676 | version = "0.2.9" 677 | source = "registry+https://github.com/rust-lang/crates.io-index" 678 | checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" 679 | dependencies = [ 680 | "bytes", 681 | "fnv", 682 | "itoa", 683 | ] 684 | 685 | [[package]] 686 | name = "http-body" 687 | version = "0.4.5" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" 690 | dependencies = [ 691 | "bytes", 692 | "http", 693 | "pin-project-lite", 694 | ] 695 | 696 | [[package]] 697 | name = "httparse" 698 | version = "1.8.0" 699 | source = "registry+https://github.com/rust-lang/crates.io-index" 700 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 701 | 702 | [[package]] 703 | name = "httpdate" 704 | version = "1.0.2" 705 | source = "registry+https://github.com/rust-lang/crates.io-index" 706 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" 707 | 708 | [[package]] 709 | name = "hyper" 710 | version = "0.14.25" 711 | source = "registry+https://github.com/rust-lang/crates.io-index" 712 | checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" 713 | dependencies = [ 714 | "bytes", 715 | "futures-channel", 716 | "futures-core", 717 | "futures-util", 718 | "h2", 719 | "http", 720 | "http-body", 721 | "httparse", 722 | "httpdate", 723 | "itoa", 724 | "pin-project-lite", 725 | "socket2", 726 | "tokio", 727 | "tower-service", 728 | "tracing", 729 | "want", 730 | ] 731 | 732 | [[package]] 733 | name = "hyper-tls" 734 | version = "0.5.0" 735 | source = "registry+https://github.com/rust-lang/crates.io-index" 736 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" 737 | dependencies = [ 738 | "bytes", 739 | "hyper", 740 | "native-tls", 741 | "tokio", 742 | "tokio-native-tls", 743 | ] 744 | 745 | [[package]] 746 | name = "idna" 747 | version = "0.3.0" 748 | source = "registry+https://github.com/rust-lang/crates.io-index" 749 | checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" 750 | dependencies = [ 751 | "unicode-bidi", 752 | "unicode-normalization", 753 | ] 754 | 755 | [[package]] 756 | name = "image" 757 | version = "0.24.5" 758 | source = "registry+https://github.com/rust-lang/crates.io-index" 759 | checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" 760 | dependencies = [ 761 | "bytemuck", 762 | "byteorder", 763 | "color_quant", 764 | "exr", 765 | "gif", 766 | "jpeg-decoder", 767 | "num-rational", 768 | "num-traits", 769 | "png", 770 | "scoped_threadpool", 771 | "tiff", 772 | ] 773 | 774 | [[package]] 775 | name = "indexmap" 776 | version = "1.9.2" 777 | source = "registry+https://github.com/rust-lang/crates.io-index" 778 | checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" 779 | dependencies = [ 780 | "autocfg", 781 | "hashbrown", 782 | ] 783 | 784 | [[package]] 785 | name = "instant" 786 | version = "0.1.12" 787 | source = "registry+https://github.com/rust-lang/crates.io-index" 788 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 789 | dependencies = [ 790 | "cfg-if", 791 | ] 792 | 793 | [[package]] 794 | name = "io-lifetimes" 795 | version = "1.0.5" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" 798 | dependencies = [ 799 | "libc", 800 | "windows-sys 0.45.0", 801 | ] 802 | 803 | [[package]] 804 | name = "ipnet" 805 | version = "2.7.1" 806 | source = "registry+https://github.com/rust-lang/crates.io-index" 807 | checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" 808 | 809 | [[package]] 810 | name = "is-terminal" 811 | version = "0.4.3" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" 814 | dependencies = [ 815 | "hermit-abi 0.3.0", 816 | "io-lifetimes", 817 | "rustix", 818 | "windows-sys 0.45.0", 819 | ] 820 | 821 | [[package]] 822 | name = "itertools" 823 | version = "0.10.5" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 826 | dependencies = [ 827 | "either", 828 | ] 829 | 830 | [[package]] 831 | name = "itoa" 832 | version = "1.0.6" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" 835 | 836 | [[package]] 837 | name = "jpeg-decoder" 838 | version = "0.3.0" 839 | source = "registry+https://github.com/rust-lang/crates.io-index" 840 | checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" 841 | dependencies = [ 842 | "rayon", 843 | ] 844 | 845 | [[package]] 846 | name = "js-sys" 847 | version = "0.3.61" 848 | source = "registry+https://github.com/rust-lang/crates.io-index" 849 | checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" 850 | dependencies = [ 851 | "wasm-bindgen", 852 | ] 853 | 854 | [[package]] 855 | name = "lalrpop" 856 | version = "0.19.8" 857 | source = "registry+https://github.com/rust-lang/crates.io-index" 858 | checksum = "b30455341b0e18f276fa64540aff54deafb54c589de6aca68659c63dd2d5d823" 859 | dependencies = [ 860 | "ascii-canvas", 861 | "atty", 862 | "bit-set", 863 | "diff", 864 | "ena", 865 | "itertools", 866 | "lalrpop-util", 867 | "petgraph", 868 | "pico-args", 869 | "regex", 870 | "regex-syntax", 871 | "string_cache", 872 | "term", 873 | "tiny-keccak", 874 | "unicode-xid", 875 | ] 876 | 877 | [[package]] 878 | name = "lalrpop-util" 879 | version = "0.19.8" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "bcf796c978e9b4d983414f4caedc9273aa33ee214c5b887bd55fde84c85d2dc4" 882 | dependencies = [ 883 | "regex", 884 | ] 885 | 886 | [[package]] 887 | name = "language-tags" 888 | version = "0.3.2" 889 | source = "registry+https://github.com/rust-lang/crates.io-index" 890 | checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" 891 | 892 | [[package]] 893 | name = "lazy_static" 894 | version = "1.4.0" 895 | source = "registry+https://github.com/rust-lang/crates.io-index" 896 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 897 | 898 | [[package]] 899 | name = "lebe" 900 | version = "0.5.2" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" 903 | 904 | [[package]] 905 | name = "libc" 906 | version = "0.2.139" 907 | source = "registry+https://github.com/rust-lang/crates.io-index" 908 | checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" 909 | 910 | [[package]] 911 | name = "linux-raw-sys" 912 | version = "0.1.4" 913 | source = "registry+https://github.com/rust-lang/crates.io-index" 914 | checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" 915 | 916 | [[package]] 917 | name = "lock_api" 918 | version = "0.4.9" 919 | source = "registry+https://github.com/rust-lang/crates.io-index" 920 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" 921 | dependencies = [ 922 | "autocfg", 923 | "scopeguard", 924 | ] 925 | 926 | [[package]] 927 | name = "log" 928 | version = "0.4.17" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 931 | dependencies = [ 932 | "cfg-if", 933 | ] 934 | 935 | [[package]] 936 | name = "markdown" 937 | version = "1.0.0-alpha.7" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "98de49c677e95e00eaa74c42a0b07ea55e1e0b1ebca5b2cbc7657f288cd714eb" 940 | dependencies = [ 941 | "unicode-id", 942 | ] 943 | 944 | [[package]] 945 | name = "memchr" 946 | version = "2.5.0" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 949 | 950 | [[package]] 951 | name = "memoffset" 952 | version = "0.8.0" 953 | source = "registry+https://github.com/rust-lang/crates.io-index" 954 | checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" 955 | dependencies = [ 956 | "autocfg", 957 | ] 958 | 959 | [[package]] 960 | name = "mime" 961 | version = "0.3.16" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 964 | 965 | [[package]] 966 | name = "minimal-lexical" 967 | version = "0.2.1" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 970 | 971 | [[package]] 972 | name = "miniz_oxide" 973 | version = "0.6.2" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" 976 | dependencies = [ 977 | "adler", 978 | ] 979 | 980 | [[package]] 981 | name = "mio" 982 | version = "0.8.6" 983 | source = "registry+https://github.com/rust-lang/crates.io-index" 984 | checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" 985 | dependencies = [ 986 | "libc", 987 | "log", 988 | "wasi", 989 | "windows-sys 0.45.0", 990 | ] 991 | 992 | [[package]] 993 | name = "nanorand" 994 | version = "0.7.0" 995 | source = "registry+https://github.com/rust-lang/crates.io-index" 996 | checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" 997 | dependencies = [ 998 | "getrandom", 999 | ] 1000 | 1001 | [[package]] 1002 | name = "native-tls" 1003 | version = "0.2.11" 1004 | source = "registry+https://github.com/rust-lang/crates.io-index" 1005 | checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" 1006 | dependencies = [ 1007 | "lazy_static", 1008 | "libc", 1009 | "log", 1010 | "openssl", 1011 | "openssl-probe", 1012 | "openssl-sys", 1013 | "schannel", 1014 | "security-framework", 1015 | "security-framework-sys", 1016 | "tempfile", 1017 | ] 1018 | 1019 | [[package]] 1020 | name = "new_debug_unreachable" 1021 | version = "1.0.4" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" 1024 | 1025 | [[package]] 1026 | name = "nom" 1027 | version = "7.1.3" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1030 | dependencies = [ 1031 | "memchr", 1032 | "minimal-lexical", 1033 | ] 1034 | 1035 | [[package]] 1036 | name = "num-integer" 1037 | version = "0.1.45" 1038 | source = "registry+https://github.com/rust-lang/crates.io-index" 1039 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 1040 | dependencies = [ 1041 | "autocfg", 1042 | "num-traits", 1043 | ] 1044 | 1045 | [[package]] 1046 | name = "num-rational" 1047 | version = "0.4.1" 1048 | source = "registry+https://github.com/rust-lang/crates.io-index" 1049 | checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" 1050 | dependencies = [ 1051 | "autocfg", 1052 | "num-integer", 1053 | "num-traits", 1054 | ] 1055 | 1056 | [[package]] 1057 | name = "num-traits" 1058 | version = "0.2.15" 1059 | source = "registry+https://github.com/rust-lang/crates.io-index" 1060 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 1061 | dependencies = [ 1062 | "autocfg", 1063 | ] 1064 | 1065 | [[package]] 1066 | name = "num_cpus" 1067 | version = "1.15.0" 1068 | source = "registry+https://github.com/rust-lang/crates.io-index" 1069 | checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" 1070 | dependencies = [ 1071 | "hermit-abi 0.2.6", 1072 | "libc", 1073 | ] 1074 | 1075 | [[package]] 1076 | name = "once_cell" 1077 | version = "1.17.0" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" 1080 | 1081 | [[package]] 1082 | name = "openssl" 1083 | version = "0.10.45" 1084 | source = "registry+https://github.com/rust-lang/crates.io-index" 1085 | checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1" 1086 | dependencies = [ 1087 | "bitflags", 1088 | "cfg-if", 1089 | "foreign-types", 1090 | "libc", 1091 | "once_cell", 1092 | "openssl-macros", 1093 | "openssl-sys", 1094 | ] 1095 | 1096 | [[package]] 1097 | name = "openssl-macros" 1098 | version = "0.1.0" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" 1101 | dependencies = [ 1102 | "proc-macro2", 1103 | "quote", 1104 | "syn", 1105 | ] 1106 | 1107 | [[package]] 1108 | name = "openssl-probe" 1109 | version = "0.1.5" 1110 | source = "registry+https://github.com/rust-lang/crates.io-index" 1111 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 1112 | 1113 | [[package]] 1114 | name = "openssl-sys" 1115 | version = "0.9.80" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7" 1118 | dependencies = [ 1119 | "autocfg", 1120 | "cc", 1121 | "libc", 1122 | "pkg-config", 1123 | "vcpkg", 1124 | ] 1125 | 1126 | [[package]] 1127 | name = "os_str_bytes" 1128 | version = "6.4.1" 1129 | source = "registry+https://github.com/rust-lang/crates.io-index" 1130 | checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" 1131 | 1132 | [[package]] 1133 | name = "parking_lot" 1134 | version = "0.12.1" 1135 | source = "registry+https://github.com/rust-lang/crates.io-index" 1136 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1137 | dependencies = [ 1138 | "lock_api", 1139 | "parking_lot_core", 1140 | ] 1141 | 1142 | [[package]] 1143 | name = "parking_lot_core" 1144 | version = "0.9.7" 1145 | source = "registry+https://github.com/rust-lang/crates.io-index" 1146 | checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" 1147 | dependencies = [ 1148 | "cfg-if", 1149 | "libc", 1150 | "redox_syscall", 1151 | "smallvec", 1152 | "windows-sys 0.45.0", 1153 | ] 1154 | 1155 | [[package]] 1156 | name = "percent-encoding" 1157 | version = "2.2.0" 1158 | source = "registry+https://github.com/rust-lang/crates.io-index" 1159 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" 1160 | 1161 | [[package]] 1162 | name = "petgraph" 1163 | version = "0.6.3" 1164 | source = "registry+https://github.com/rust-lang/crates.io-index" 1165 | checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" 1166 | dependencies = [ 1167 | "fixedbitset", 1168 | "indexmap", 1169 | ] 1170 | 1171 | [[package]] 1172 | name = "phf_shared" 1173 | version = "0.10.0" 1174 | source = "registry+https://github.com/rust-lang/crates.io-index" 1175 | checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" 1176 | dependencies = [ 1177 | "siphasher", 1178 | ] 1179 | 1180 | [[package]] 1181 | name = "pico-args" 1182 | version = "0.4.2" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468" 1185 | 1186 | [[package]] 1187 | name = "pin-project" 1188 | version = "1.0.12" 1189 | source = "registry+https://github.com/rust-lang/crates.io-index" 1190 | checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" 1191 | dependencies = [ 1192 | "pin-project-internal", 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "pin-project-internal" 1197 | version = "1.0.12" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" 1200 | dependencies = [ 1201 | "proc-macro2", 1202 | "quote", 1203 | "syn", 1204 | ] 1205 | 1206 | [[package]] 1207 | name = "pin-project-lite" 1208 | version = "0.2.9" 1209 | source = "registry+https://github.com/rust-lang/crates.io-index" 1210 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 1211 | 1212 | [[package]] 1213 | name = "pin-utils" 1214 | version = "0.1.0" 1215 | source = "registry+https://github.com/rust-lang/crates.io-index" 1216 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1217 | 1218 | [[package]] 1219 | name = "pkg-config" 1220 | version = "0.3.26" 1221 | source = "registry+https://github.com/rust-lang/crates.io-index" 1222 | checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" 1223 | 1224 | [[package]] 1225 | name = "png" 1226 | version = "0.17.7" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" 1229 | dependencies = [ 1230 | "bitflags", 1231 | "crc32fast", 1232 | "flate2", 1233 | "miniz_oxide", 1234 | ] 1235 | 1236 | [[package]] 1237 | name = "precomputed-hash" 1238 | version = "0.1.1" 1239 | source = "registry+https://github.com/rust-lang/crates.io-index" 1240 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 1241 | 1242 | [[package]] 1243 | name = "predicates" 1244 | version = "2.1.5" 1245 | source = "registry+https://github.com/rust-lang/crates.io-index" 1246 | checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" 1247 | dependencies = [ 1248 | "difflib", 1249 | "itertools", 1250 | "predicates-core", 1251 | ] 1252 | 1253 | [[package]] 1254 | name = "predicates-core" 1255 | version = "1.0.5" 1256 | source = "registry+https://github.com/rust-lang/crates.io-index" 1257 | checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" 1258 | 1259 | [[package]] 1260 | name = "predicates-tree" 1261 | version = "1.0.7" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" 1264 | dependencies = [ 1265 | "predicates-core", 1266 | "termtree", 1267 | ] 1268 | 1269 | [[package]] 1270 | name = "proc-macro-error" 1271 | version = "1.0.4" 1272 | source = "registry+https://github.com/rust-lang/crates.io-index" 1273 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 1274 | dependencies = [ 1275 | "proc-macro-error-attr", 1276 | "proc-macro2", 1277 | "quote", 1278 | "syn", 1279 | "version_check", 1280 | ] 1281 | 1282 | [[package]] 1283 | name = "proc-macro-error-attr" 1284 | version = "1.0.4" 1285 | source = "registry+https://github.com/rust-lang/crates.io-index" 1286 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 1287 | dependencies = [ 1288 | "proc-macro2", 1289 | "quote", 1290 | "version_check", 1291 | ] 1292 | 1293 | [[package]] 1294 | name = "proc-macro-nested" 1295 | version = "0.1.7" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" 1298 | 1299 | [[package]] 1300 | name = "proc-macro2" 1301 | version = "1.0.51" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" 1304 | dependencies = [ 1305 | "unicode-ident", 1306 | ] 1307 | 1308 | [[package]] 1309 | name = "quote" 1310 | version = "1.0.23" 1311 | source = "registry+https://github.com/rust-lang/crates.io-index" 1312 | checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" 1313 | dependencies = [ 1314 | "proc-macro2", 1315 | ] 1316 | 1317 | [[package]] 1318 | name = "rayon" 1319 | version = "1.7.0" 1320 | source = "registry+https://github.com/rust-lang/crates.io-index" 1321 | checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" 1322 | dependencies = [ 1323 | "either", 1324 | "rayon-core", 1325 | ] 1326 | 1327 | [[package]] 1328 | name = "rayon-core" 1329 | version = "1.11.0" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" 1332 | dependencies = [ 1333 | "crossbeam-channel", 1334 | "crossbeam-deque", 1335 | "crossbeam-utils", 1336 | "num_cpus", 1337 | ] 1338 | 1339 | [[package]] 1340 | name = "redox_syscall" 1341 | version = "0.2.16" 1342 | source = "registry+https://github.com/rust-lang/crates.io-index" 1343 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 1344 | dependencies = [ 1345 | "bitflags", 1346 | ] 1347 | 1348 | [[package]] 1349 | name = "redox_users" 1350 | version = "0.4.3" 1351 | source = "registry+https://github.com/rust-lang/crates.io-index" 1352 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 1353 | dependencies = [ 1354 | "getrandom", 1355 | "redox_syscall", 1356 | "thiserror", 1357 | ] 1358 | 1359 | [[package]] 1360 | name = "regex" 1361 | version = "1.7.1" 1362 | source = "registry+https://github.com/rust-lang/crates.io-index" 1363 | checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" 1364 | dependencies = [ 1365 | "aho-corasick", 1366 | "memchr", 1367 | "regex-syntax", 1368 | ] 1369 | 1370 | [[package]] 1371 | name = "regex-automata" 1372 | version = "0.1.10" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 1375 | 1376 | [[package]] 1377 | name = "regex-syntax" 1378 | version = "0.6.28" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" 1381 | 1382 | [[package]] 1383 | name = "reqwest" 1384 | version = "0.11.14" 1385 | source = "registry+https://github.com/rust-lang/crates.io-index" 1386 | checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" 1387 | dependencies = [ 1388 | "base64", 1389 | "bytes", 1390 | "encoding_rs", 1391 | "futures-core", 1392 | "futures-util", 1393 | "h2", 1394 | "http", 1395 | "http-body", 1396 | "hyper", 1397 | "hyper-tls", 1398 | "ipnet", 1399 | "js-sys", 1400 | "log", 1401 | "mime", 1402 | "native-tls", 1403 | "once_cell", 1404 | "percent-encoding", 1405 | "pin-project-lite", 1406 | "serde", 1407 | "serde_json", 1408 | "serde_urlencoded", 1409 | "tokio", 1410 | "tokio-native-tls", 1411 | "tower-service", 1412 | "url", 1413 | "wasm-bindgen", 1414 | "wasm-bindgen-futures", 1415 | "web-sys", 1416 | "winreg", 1417 | ] 1418 | 1419 | [[package]] 1420 | name = "rustc_version" 1421 | version = "0.4.0" 1422 | source = "registry+https://github.com/rust-lang/crates.io-index" 1423 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 1424 | dependencies = [ 1425 | "semver", 1426 | ] 1427 | 1428 | [[package]] 1429 | name = "rustix" 1430 | version = "0.36.8" 1431 | source = "registry+https://github.com/rust-lang/crates.io-index" 1432 | checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" 1433 | dependencies = [ 1434 | "bitflags", 1435 | "errno", 1436 | "io-lifetimes", 1437 | "libc", 1438 | "linux-raw-sys", 1439 | "windows-sys 0.45.0", 1440 | ] 1441 | 1442 | [[package]] 1443 | name = "rustversion" 1444 | version = "1.0.12" 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" 1446 | checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" 1447 | 1448 | [[package]] 1449 | name = "ryu" 1450 | version = "1.0.13" 1451 | source = "registry+https://github.com/rust-lang/crates.io-index" 1452 | checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" 1453 | 1454 | [[package]] 1455 | name = "schannel" 1456 | version = "0.1.21" 1457 | source = "registry+https://github.com/rust-lang/crates.io-index" 1458 | checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" 1459 | dependencies = [ 1460 | "windows-sys 0.42.0", 1461 | ] 1462 | 1463 | [[package]] 1464 | name = "scoped_threadpool" 1465 | version = "0.1.9" 1466 | source = "registry+https://github.com/rust-lang/crates.io-index" 1467 | checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" 1468 | 1469 | [[package]] 1470 | name = "scopeguard" 1471 | version = "1.1.0" 1472 | source = "registry+https://github.com/rust-lang/crates.io-index" 1473 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1474 | 1475 | [[package]] 1476 | name = "security-framework" 1477 | version = "2.8.2" 1478 | source = "registry+https://github.com/rust-lang/crates.io-index" 1479 | checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" 1480 | dependencies = [ 1481 | "bitflags", 1482 | "core-foundation", 1483 | "core-foundation-sys", 1484 | "libc", 1485 | "security-framework-sys", 1486 | ] 1487 | 1488 | [[package]] 1489 | name = "security-framework-sys" 1490 | version = "2.8.0" 1491 | source = "registry+https://github.com/rust-lang/crates.io-index" 1492 | checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" 1493 | dependencies = [ 1494 | "core-foundation-sys", 1495 | "libc", 1496 | ] 1497 | 1498 | [[package]] 1499 | name = "semver" 1500 | version = "1.0.16" 1501 | source = "registry+https://github.com/rust-lang/crates.io-index" 1502 | checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" 1503 | 1504 | [[package]] 1505 | name = "serde" 1506 | version = "1.0.154" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | checksum = "8cdd151213925e7f1ab45a9bbfb129316bd00799784b174b7cc7bcd16961c49e" 1509 | 1510 | [[package]] 1511 | name = "serde_json" 1512 | version = "1.0.94" 1513 | source = "registry+https://github.com/rust-lang/crates.io-index" 1514 | checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" 1515 | dependencies = [ 1516 | "itoa", 1517 | "ryu", 1518 | "serde", 1519 | ] 1520 | 1521 | [[package]] 1522 | name = "serde_urlencoded" 1523 | version = "0.7.1" 1524 | source = "registry+https://github.com/rust-lang/crates.io-index" 1525 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1526 | dependencies = [ 1527 | "form_urlencoded", 1528 | "itoa", 1529 | "ryu", 1530 | "serde", 1531 | ] 1532 | 1533 | [[package]] 1534 | name = "simd-adler32" 1535 | version = "0.3.4" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "14a5df39617d7c8558154693a1bb8157a4aab8179209540cc0b10e5dc24e0b18" 1538 | 1539 | [[package]] 1540 | name = "siphasher" 1541 | version = "0.3.10" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" 1544 | 1545 | [[package]] 1546 | name = "slab" 1547 | version = "0.4.8" 1548 | source = "registry+https://github.com/rust-lang/crates.io-index" 1549 | checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" 1550 | dependencies = [ 1551 | "autocfg", 1552 | ] 1553 | 1554 | [[package]] 1555 | name = "slippy" 1556 | version = "0.1.0" 1557 | dependencies = [ 1558 | "assert_cmd", 1559 | "axoasset", 1560 | "axohtml", 1561 | "clap", 1562 | "console", 1563 | "css-minify", 1564 | "fs_extra", 1565 | "markdown", 1566 | "thiserror", 1567 | ] 1568 | 1569 | [[package]] 1570 | name = "smallvec" 1571 | version = "1.10.0" 1572 | source = "registry+https://github.com/rust-lang/crates.io-index" 1573 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" 1574 | 1575 | [[package]] 1576 | name = "socket2" 1577 | version = "0.4.9" 1578 | source = "registry+https://github.com/rust-lang/crates.io-index" 1579 | checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" 1580 | dependencies = [ 1581 | "libc", 1582 | "winapi", 1583 | ] 1584 | 1585 | [[package]] 1586 | name = "spin" 1587 | version = "0.9.5" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" 1590 | dependencies = [ 1591 | "lock_api", 1592 | ] 1593 | 1594 | [[package]] 1595 | name = "string_cache" 1596 | version = "0.8.7" 1597 | source = "registry+https://github.com/rust-lang/crates.io-index" 1598 | checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" 1599 | dependencies = [ 1600 | "new_debug_unreachable", 1601 | "once_cell", 1602 | "parking_lot", 1603 | "phf_shared", 1604 | "precomputed-hash", 1605 | ] 1606 | 1607 | [[package]] 1608 | name = "strsim" 1609 | version = "0.10.0" 1610 | source = "registry+https://github.com/rust-lang/crates.io-index" 1611 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 1612 | 1613 | [[package]] 1614 | name = "strum" 1615 | version = "0.23.0" 1616 | source = "registry+https://github.com/rust-lang/crates.io-index" 1617 | checksum = "cae14b91c7d11c9a851d3fbc80a963198998c2a64eec840477fa92d8ce9b70bb" 1618 | 1619 | [[package]] 1620 | name = "strum_macros" 1621 | version = "0.23.1" 1622 | source = "registry+https://github.com/rust-lang/crates.io-index" 1623 | checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38" 1624 | dependencies = [ 1625 | "heck 0.3.3", 1626 | "proc-macro2", 1627 | "quote", 1628 | "rustversion", 1629 | "syn", 1630 | ] 1631 | 1632 | [[package]] 1633 | name = "syn" 1634 | version = "1.0.107" 1635 | source = "registry+https://github.com/rust-lang/crates.io-index" 1636 | checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" 1637 | dependencies = [ 1638 | "proc-macro2", 1639 | "quote", 1640 | "unicode-ident", 1641 | ] 1642 | 1643 | [[package]] 1644 | name = "tempfile" 1645 | version = "3.4.0" 1646 | source = "registry+https://github.com/rust-lang/crates.io-index" 1647 | checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" 1648 | dependencies = [ 1649 | "cfg-if", 1650 | "fastrand", 1651 | "redox_syscall", 1652 | "rustix", 1653 | "windows-sys 0.42.0", 1654 | ] 1655 | 1656 | [[package]] 1657 | name = "term" 1658 | version = "0.7.0" 1659 | source = "registry+https://github.com/rust-lang/crates.io-index" 1660 | checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" 1661 | dependencies = [ 1662 | "dirs-next", 1663 | "rustversion", 1664 | "winapi", 1665 | ] 1666 | 1667 | [[package]] 1668 | name = "termcolor" 1669 | version = "1.2.0" 1670 | source = "registry+https://github.com/rust-lang/crates.io-index" 1671 | checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" 1672 | dependencies = [ 1673 | "winapi-util", 1674 | ] 1675 | 1676 | [[package]] 1677 | name = "termtree" 1678 | version = "0.4.0" 1679 | source = "registry+https://github.com/rust-lang/crates.io-index" 1680 | checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" 1681 | 1682 | [[package]] 1683 | name = "thiserror" 1684 | version = "1.0.39" 1685 | source = "registry+https://github.com/rust-lang/crates.io-index" 1686 | checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" 1687 | dependencies = [ 1688 | "thiserror-impl", 1689 | ] 1690 | 1691 | [[package]] 1692 | name = "thiserror-impl" 1693 | version = "1.0.39" 1694 | source = "registry+https://github.com/rust-lang/crates.io-index" 1695 | checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" 1696 | dependencies = [ 1697 | "proc-macro2", 1698 | "quote", 1699 | "syn", 1700 | ] 1701 | 1702 | [[package]] 1703 | name = "tiff" 1704 | version = "0.8.1" 1705 | source = "registry+https://github.com/rust-lang/crates.io-index" 1706 | checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" 1707 | dependencies = [ 1708 | "flate2", 1709 | "jpeg-decoder", 1710 | "weezl", 1711 | ] 1712 | 1713 | [[package]] 1714 | name = "tiny-keccak" 1715 | version = "2.0.2" 1716 | source = "registry+https://github.com/rust-lang/crates.io-index" 1717 | checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" 1718 | dependencies = [ 1719 | "crunchy", 1720 | ] 1721 | 1722 | [[package]] 1723 | name = "tinyvec" 1724 | version = "1.6.0" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1727 | dependencies = [ 1728 | "tinyvec_macros", 1729 | ] 1730 | 1731 | [[package]] 1732 | name = "tinyvec_macros" 1733 | version = "0.1.1" 1734 | source = "registry+https://github.com/rust-lang/crates.io-index" 1735 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1736 | 1737 | [[package]] 1738 | name = "tokio" 1739 | version = "1.26.0" 1740 | source = "registry+https://github.com/rust-lang/crates.io-index" 1741 | checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" 1742 | dependencies = [ 1743 | "autocfg", 1744 | "bytes", 1745 | "libc", 1746 | "memchr", 1747 | "mio", 1748 | "pin-project-lite", 1749 | "socket2", 1750 | "windows-sys 0.45.0", 1751 | ] 1752 | 1753 | [[package]] 1754 | name = "tokio-native-tls" 1755 | version = "0.3.1" 1756 | source = "registry+https://github.com/rust-lang/crates.io-index" 1757 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 1758 | dependencies = [ 1759 | "native-tls", 1760 | "tokio", 1761 | ] 1762 | 1763 | [[package]] 1764 | name = "tokio-util" 1765 | version = "0.7.7" 1766 | source = "registry+https://github.com/rust-lang/crates.io-index" 1767 | checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" 1768 | dependencies = [ 1769 | "bytes", 1770 | "futures-core", 1771 | "futures-sink", 1772 | "pin-project-lite", 1773 | "tokio", 1774 | "tracing", 1775 | ] 1776 | 1777 | [[package]] 1778 | name = "toml" 1779 | version = "0.5.11" 1780 | source = "registry+https://github.com/rust-lang/crates.io-index" 1781 | checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" 1782 | dependencies = [ 1783 | "serde", 1784 | ] 1785 | 1786 | [[package]] 1787 | name = "tower-service" 1788 | version = "0.3.2" 1789 | source = "registry+https://github.com/rust-lang/crates.io-index" 1790 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 1791 | 1792 | [[package]] 1793 | name = "tracing" 1794 | version = "0.1.37" 1795 | source = "registry+https://github.com/rust-lang/crates.io-index" 1796 | checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" 1797 | dependencies = [ 1798 | "cfg-if", 1799 | "pin-project-lite", 1800 | "tracing-core", 1801 | ] 1802 | 1803 | [[package]] 1804 | name = "tracing-core" 1805 | version = "0.1.30" 1806 | source = "registry+https://github.com/rust-lang/crates.io-index" 1807 | checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" 1808 | dependencies = [ 1809 | "once_cell", 1810 | ] 1811 | 1812 | [[package]] 1813 | name = "try-lock" 1814 | version = "0.2.4" 1815 | source = "registry+https://github.com/rust-lang/crates.io-index" 1816 | checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" 1817 | 1818 | [[package]] 1819 | name = "unicode-bidi" 1820 | version = "0.3.11" 1821 | source = "registry+https://github.com/rust-lang/crates.io-index" 1822 | checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" 1823 | 1824 | [[package]] 1825 | name = "unicode-id" 1826 | version = "0.3.3" 1827 | source = "registry+https://github.com/rust-lang/crates.io-index" 1828 | checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a" 1829 | 1830 | [[package]] 1831 | name = "unicode-ident" 1832 | version = "1.0.6" 1833 | source = "registry+https://github.com/rust-lang/crates.io-index" 1834 | checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" 1835 | 1836 | [[package]] 1837 | name = "unicode-normalization" 1838 | version = "0.1.22" 1839 | source = "registry+https://github.com/rust-lang/crates.io-index" 1840 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 1841 | dependencies = [ 1842 | "tinyvec", 1843 | ] 1844 | 1845 | [[package]] 1846 | name = "unicode-segmentation" 1847 | version = "1.10.1" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" 1850 | 1851 | [[package]] 1852 | name = "unicode-width" 1853 | version = "0.1.10" 1854 | source = "registry+https://github.com/rust-lang/crates.io-index" 1855 | checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" 1856 | 1857 | [[package]] 1858 | name = "unicode-xid" 1859 | version = "0.2.4" 1860 | source = "registry+https://github.com/rust-lang/crates.io-index" 1861 | checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" 1862 | 1863 | [[package]] 1864 | name = "url" 1865 | version = "2.3.1" 1866 | source = "registry+https://github.com/rust-lang/crates.io-index" 1867 | checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" 1868 | dependencies = [ 1869 | "form_urlencoded", 1870 | "idna", 1871 | "percent-encoding", 1872 | ] 1873 | 1874 | [[package]] 1875 | name = "vcpkg" 1876 | version = "0.2.15" 1877 | source = "registry+https://github.com/rust-lang/crates.io-index" 1878 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1879 | 1880 | [[package]] 1881 | name = "version_check" 1882 | version = "0.9.4" 1883 | source = "registry+https://github.com/rust-lang/crates.io-index" 1884 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1885 | 1886 | [[package]] 1887 | name = "wait-timeout" 1888 | version = "0.2.0" 1889 | source = "registry+https://github.com/rust-lang/crates.io-index" 1890 | checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" 1891 | dependencies = [ 1892 | "libc", 1893 | ] 1894 | 1895 | [[package]] 1896 | name = "want" 1897 | version = "0.3.0" 1898 | source = "registry+https://github.com/rust-lang/crates.io-index" 1899 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 1900 | dependencies = [ 1901 | "log", 1902 | "try-lock", 1903 | ] 1904 | 1905 | [[package]] 1906 | name = "wasi" 1907 | version = "0.11.0+wasi-snapshot-preview1" 1908 | source = "registry+https://github.com/rust-lang/crates.io-index" 1909 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1910 | 1911 | [[package]] 1912 | name = "wasm-bindgen" 1913 | version = "0.2.84" 1914 | source = "registry+https://github.com/rust-lang/crates.io-index" 1915 | checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" 1916 | dependencies = [ 1917 | "cfg-if", 1918 | "wasm-bindgen-macro", 1919 | ] 1920 | 1921 | [[package]] 1922 | name = "wasm-bindgen-backend" 1923 | version = "0.2.84" 1924 | source = "registry+https://github.com/rust-lang/crates.io-index" 1925 | checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" 1926 | dependencies = [ 1927 | "bumpalo", 1928 | "log", 1929 | "once_cell", 1930 | "proc-macro2", 1931 | "quote", 1932 | "syn", 1933 | "wasm-bindgen-shared", 1934 | ] 1935 | 1936 | [[package]] 1937 | name = "wasm-bindgen-futures" 1938 | version = "0.4.34" 1939 | source = "registry+https://github.com/rust-lang/crates.io-index" 1940 | checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" 1941 | dependencies = [ 1942 | "cfg-if", 1943 | "js-sys", 1944 | "wasm-bindgen", 1945 | "web-sys", 1946 | ] 1947 | 1948 | [[package]] 1949 | name = "wasm-bindgen-macro" 1950 | version = "0.2.84" 1951 | source = "registry+https://github.com/rust-lang/crates.io-index" 1952 | checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" 1953 | dependencies = [ 1954 | "quote", 1955 | "wasm-bindgen-macro-support", 1956 | ] 1957 | 1958 | [[package]] 1959 | name = "wasm-bindgen-macro-support" 1960 | version = "0.2.84" 1961 | source = "registry+https://github.com/rust-lang/crates.io-index" 1962 | checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" 1963 | dependencies = [ 1964 | "proc-macro2", 1965 | "quote", 1966 | "syn", 1967 | "wasm-bindgen-backend", 1968 | "wasm-bindgen-shared", 1969 | ] 1970 | 1971 | [[package]] 1972 | name = "wasm-bindgen-shared" 1973 | version = "0.2.84" 1974 | source = "registry+https://github.com/rust-lang/crates.io-index" 1975 | checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" 1976 | 1977 | [[package]] 1978 | name = "web-sys" 1979 | version = "0.3.61" 1980 | source = "registry+https://github.com/rust-lang/crates.io-index" 1981 | checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" 1982 | dependencies = [ 1983 | "js-sys", 1984 | "wasm-bindgen", 1985 | ] 1986 | 1987 | [[package]] 1988 | name = "weezl" 1989 | version = "0.1.7" 1990 | source = "registry+https://github.com/rust-lang/crates.io-index" 1991 | checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" 1992 | 1993 | [[package]] 1994 | name = "winapi" 1995 | version = "0.3.9" 1996 | source = "registry+https://github.com/rust-lang/crates.io-index" 1997 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1998 | dependencies = [ 1999 | "winapi-i686-pc-windows-gnu", 2000 | "winapi-x86_64-pc-windows-gnu", 2001 | ] 2002 | 2003 | [[package]] 2004 | name = "winapi-i686-pc-windows-gnu" 2005 | version = "0.4.0" 2006 | source = "registry+https://github.com/rust-lang/crates.io-index" 2007 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2008 | 2009 | [[package]] 2010 | name = "winapi-util" 2011 | version = "0.1.5" 2012 | source = "registry+https://github.com/rust-lang/crates.io-index" 2013 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 2014 | dependencies = [ 2015 | "winapi", 2016 | ] 2017 | 2018 | [[package]] 2019 | name = "winapi-x86_64-pc-windows-gnu" 2020 | version = "0.4.0" 2021 | source = "registry+https://github.com/rust-lang/crates.io-index" 2022 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2023 | 2024 | [[package]] 2025 | name = "windows-sys" 2026 | version = "0.42.0" 2027 | source = "registry+https://github.com/rust-lang/crates.io-index" 2028 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" 2029 | dependencies = [ 2030 | "windows_aarch64_gnullvm", 2031 | "windows_aarch64_msvc", 2032 | "windows_i686_gnu", 2033 | "windows_i686_msvc", 2034 | "windows_x86_64_gnu", 2035 | "windows_x86_64_gnullvm", 2036 | "windows_x86_64_msvc", 2037 | ] 2038 | 2039 | [[package]] 2040 | name = "windows-sys" 2041 | version = "0.45.0" 2042 | source = "registry+https://github.com/rust-lang/crates.io-index" 2043 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 2044 | dependencies = [ 2045 | "windows-targets", 2046 | ] 2047 | 2048 | [[package]] 2049 | name = "windows-targets" 2050 | version = "0.42.1" 2051 | source = "registry+https://github.com/rust-lang/crates.io-index" 2052 | checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" 2053 | dependencies = [ 2054 | "windows_aarch64_gnullvm", 2055 | "windows_aarch64_msvc", 2056 | "windows_i686_gnu", 2057 | "windows_i686_msvc", 2058 | "windows_x86_64_gnu", 2059 | "windows_x86_64_gnullvm", 2060 | "windows_x86_64_msvc", 2061 | ] 2062 | 2063 | [[package]] 2064 | name = "windows_aarch64_gnullvm" 2065 | version = "0.42.1" 2066 | source = "registry+https://github.com/rust-lang/crates.io-index" 2067 | checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" 2068 | 2069 | [[package]] 2070 | name = "windows_aarch64_msvc" 2071 | version = "0.42.1" 2072 | source = "registry+https://github.com/rust-lang/crates.io-index" 2073 | checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" 2074 | 2075 | [[package]] 2076 | name = "windows_i686_gnu" 2077 | version = "0.42.1" 2078 | source = "registry+https://github.com/rust-lang/crates.io-index" 2079 | checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" 2080 | 2081 | [[package]] 2082 | name = "windows_i686_msvc" 2083 | version = "0.42.1" 2084 | source = "registry+https://github.com/rust-lang/crates.io-index" 2085 | checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" 2086 | 2087 | [[package]] 2088 | name = "windows_x86_64_gnu" 2089 | version = "0.42.1" 2090 | source = "registry+https://github.com/rust-lang/crates.io-index" 2091 | checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" 2092 | 2093 | [[package]] 2094 | name = "windows_x86_64_gnullvm" 2095 | version = "0.42.1" 2096 | source = "registry+https://github.com/rust-lang/crates.io-index" 2097 | checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" 2098 | 2099 | [[package]] 2100 | name = "windows_x86_64_msvc" 2101 | version = "0.42.1" 2102 | source = "registry+https://github.com/rust-lang/crates.io-index" 2103 | checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" 2104 | 2105 | [[package]] 2106 | name = "winreg" 2107 | version = "0.10.1" 2108 | source = "registry+https://github.com/rust-lang/crates.io-index" 2109 | checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" 2110 | dependencies = [ 2111 | "winapi", 2112 | ] 2113 | 2114 | [[package]] 2115 | name = "zune-inflate" 2116 | version = "0.2.51" 2117 | source = "registry+https://github.com/rust-lang/crates.io-index" 2118 | checksum = "a01728b79fb9b7e28a8c11f715e1cd8dc2cda7416a007d66cac55cebb3a8ac6b" 2119 | dependencies = [ 2120 | "simd-adler32", 2121 | ] 2122 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "slippy" 3 | description = "🖼 the easiest way to make a presentation" 4 | version = "0.1.1" 5 | edition = "2021" 6 | license = "MIT OR Apache-2.0" 7 | repository = "https://github.com/axodotdev/slippy" 8 | 9 | [dependencies] 10 | axoasset = "0.0.1" 11 | axohtml = "0.4.1" 12 | clap = { version = "4.1.4", features = ["derive"] } 13 | console = "0.15.5" 14 | css-minify = "0.3.1" 15 | fs_extra = "1.3.0" 16 | markdown = "1.0.0-alpha.7" 17 | thiserror = "1.0.39" 18 | 19 | [dev-dependencies] 20 | assert_cmd = "2.0.8" 21 | 22 | # The profile that 'cargo dist' will build with 23 | [profile.dist] 24 | inherits = "release" 25 | lto = "thin" 26 | 27 | # Config for 'cargo dist' 28 | [workspace.metadata.dist] 29 | # The preferred cargo-dist version to use in CI (Cargo.toml SemVer syntax) 30 | cargo-dist-version = "0.0.7" 31 | # The preferred Rust toolchain to use in CI (rustup toolchain syntax) 32 | rust-toolchain-version = "1.67.1" 33 | # CI backends to support (see 'cargo dist generate-ci') 34 | ci = ["github"] 35 | # The installers to generate for each app 36 | installers = ["shell", "powershell", "npm"] 37 | # Target platforms to build apps for (Rust target-triple syntax) 38 | targets = [ 39 | "x86_64-unknown-linux-gnu", 40 | "x86_64-apple-darwin", 41 | "x86_64-pc-windows-msvc", 42 | "aarch64-apple-darwin", 43 | ] 44 | # The archive format to use for windows builds (defaults .zip) 45 | windows-archive = ".tar.gz" 46 | # The archive format to use for non-windows builds (defaults .tar.xz) 47 | unix-archive = ".tar.gz" 48 | -------------------------------------------------------------------------------- /LICENSE-APACHE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2023 Axo Developer Co. 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2023 Axo Developer Co. 2 | 3 | Permission is hereby granted, free of charge, to any 4 | person obtaining a copy of this software and associated 5 | documentation files (the "Software"), to deal in the 6 | Software without restriction, including without 7 | limitation the rights to use, copy, modify, merge, 8 | publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software 10 | is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice 14 | shall be included in all copies or substantial portions 15 | of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 18 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 19 | TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 20 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 21 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 24 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 | DEALINGS IN THE SOFTWARE. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | > 🖼 the easiest way to make slideshows 4 | 5 | ## Usage 6 | 7 | ```sh 8 | Usage: slippy [OPTIONS] 9 | 10 | Arguments: 11 | 12 | 13 | Options: 14 | -t, --theme [possible values: light, dark, cupcake] 15 | -h, --help Print help 16 | -V, --version Print version 17 | ``` 18 | 19 | ### Basic usage 20 | 21 | ```sh 22 | > slippy deck.md 23 | ``` 24 | 25 | ### Changing the theme 26 | 27 | ```sh 28 | > slippy --theme=dark deck.md 29 | ``` 30 | 31 | Current themes are: 32 | 33 | - light (default) 34 | - dark 35 | - cupcake 36 | - axo 37 | - nash 38 | 39 | ### Adding custom css 40 | 41 | By placing a `deck.css` in the root axo-slides will automatically recognize it and place it at the contents at the end of the CSS 42 | 43 | ### Using local assets 44 | 45 | Any images or assets that you want to be on your published slideshow must be in the `static` folder, this folder will be copied over to the public directory, ready to be uploaded to any static file hoster. 46 | 47 | ## License 48 | 49 | Licensed under either of 50 | 51 | - Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or [apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)) 52 | - MIT license ([LICENSE-MIT](LICENSE-MIT) or [opensource.org/licenses/MIT](https://opensource.org/licenses/MIT)) 53 | 54 | at your option. 55 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | Axo Developer Co. takes the security of our software products and services seriously. If you believe you have found a security vulnerability in this open source repository, please report the issue to us directly using GitHub private vulnerability reporting or email ashley@axo.dev. If you aren't sure you have found a security vulnerability but have a suspicion or concern, feel free to message anyways; we prefer over-communication :) 2 | 3 | Please do not report security vulnerabilities publicly, such as via GitHub issues, Twitter, or other social media. 4 | 5 | Thanks for helping make software safe for everyone! 6 | -------------------------------------------------------------------------------- /examples/agent-conf.md: -------------------------------------------------------------------------------- 1 | # Rust for the rest of us 2 | 3 | --- 4 | 5 | # 👋 6 | 7 | My name is Sara 8 | 9 | I am a founding engineer at [axo.dev](https://axo.dev) 10 | 11 | --- 12 | 13 | ### I am also a frontend developer 14 | 15 | --- 16 | 17 | ### Besides some C# and GodotScript JavaScript was the only language I knew until 6 months ago 18 | 19 | --- 20 | 21 | ### I'm here to tell you rust is fun 22 | 23 | --- 24 | 25 | ### Okay, nerd fun 26 | 27 | ### not like FUN FUN 28 | 29 | --- 30 | 31 | ### We are going to build a CLI 32 | 33 | And not cry 34 | 35 | maybe 36 | 37 | --- 38 | 39 | ### Livecoding and prayers 40 | 41 | --- 42 | 43 | [github.com/SaraVieira/rust-for-all](https://github.com/SaraVieira/rust-for-all) 44 | 45 | --- 46 | 47 | # Thank you 🙌 48 | -------------------------------------------------------------------------------- /examples/cheatsheet.md: -------------------------------------------------------------------------------- 1 | ## This is the test slideshow to test `slippy` 2 | 3 | --- 4 | 5 | # Heading 1 6 | 7 | ## Heading 2 8 | 9 | ### Heading 3 10 | 11 | ### Heading 4 12 | 13 | #### Heading 5 14 | 15 | ##### Heading 6 16 | 17 | --- 18 | 19 | Bold 20 | 21 | **The quick brown fox jumps over the lazy dog.** 22 | 23 | **The quick brown fox jumps over the lazy dog.** 24 | 25 | The quick brown fox jumps over the lazy dog. 26 | 27 | Italic 28 | 29 | _The quick brown fox jumps over the lazy dog._ 30 | 31 | _The quick brown fox jumps over the lazy dog._ 32 | 33 | The quick brown fox jumps over the lazy dog. 34 | 35 | Bold and Italic 36 | 37 | **_The quick brown fox jumps over the lazy dog._** 38 | 39 | The quick brown fox jumps over the lazy dog. 40 | 41 | --- 42 | 43 | Blockquotes 44 | 45 | > The quick brown fox jumps over the lazy dog. 46 | 47 | > The quick brown fox jumps over the lazy dog. 48 | > 49 | > The quick brown fox jumps over the lazy dog. 50 | > 51 | > The quick brown fox jumps over the lazy dog. 52 | 53 | > The quick brown fox jumps over the lazy dog. 54 | > 55 | > > The quick brown fox jumps over the lazy dog. 56 | > > 57 | > > > The quick brown fox jumps over the lazy dog. 58 | 59 | > **The quick brown fox** _jumps over the lazy dog._ 60 | 61 | --- 62 | 63 | Monospaced 64 | The quick brown fox jumps over the lazy dog. 65 | 66 | Underlined 67 | The quick brown fox jumps over the lazy dog. 68 | 69 | Strike-through 70 | ~~The quick brown fox jumps over the lazy dog.~~ 71 | 72 | --- 73 | 74 | | one | two | three | 75 | | --- | --- | ----- | 76 | | yes | no | yes | 77 | | yes | no | yes | 78 | 79 | --- 80 | 81 | [The-Ultimate-Markdown-Cheat-Sheet](https://github.com/lifeparticle/Markdown-Cheatsheet) 82 | 83 | [The-Ultimate-Markdown-Cheat-Sheet][reference text] 84 | 85 | [The-Ultimate-Markdown-Cheat-Sheet][1] 86 | [Markdown-Cheat-Sheet] 87 | 88 | [reference text]: https://github.com/lifeparticle/Markdown-Cheatsheet 89 | [1]: https://github.com/lifeparticle/Markdown-Cheatsheet 90 | [markdown-cheat-sheet]: https://github.com/lifeparticle/Markdown-Cheatsheet 91 | 92 | --- 93 | 94 | ![alt text](https://images.unsplash.com/photo-1415604934674-561df9abf539?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=100&q=80) 95 | 96 | --- 97 | 98 | 1. One 99 | 2. Two 100 | 3. Three 101 | 102 | 4. First level 103 | 1. Second level 104 | - Third level 105 | - Fourth level 106 | 5. First level 107 | 1. Second level 108 | 6. First level 109 | 1. Second level 110 | 111 | - 1 112 | - 2 113 | - 3 114 | 115 | * 1 116 | * 2 117 | * 3 118 | 119 | - 1 120 | - 2 121 | - 3 122 | 123 | --- 124 | 125 | cmd + shift + p 126 | 127 | --- 128 | 129 | A class method is an instance method of the class object. When a new class is created, an object of type `Class` is initialized and assigned to a global constant (Mobile in this case). 130 | 131 | ```js 132 | console.log("hiiiii"); 133 | ``` 134 | -------------------------------------------------------------------------------- /oranda.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": { 3 | "path_prefix": "slippy" 4 | }, 5 | "styles": { 6 | "theme": "hacker" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/assets/slide.js: -------------------------------------------------------------------------------- 1 | const SLIDES_SELECTOR = "section"; 2 | const UP = ["ArrowUp", 38]; 3 | const DOWN = ["ArrowDown", 40]; 4 | const LEFT = ["ArrowLeft", 37]; 5 | const RIGHT = ["ArrowRight", 39]; 6 | const BACKSPACE = ["Backspace", 8]; 7 | const PAGE_DOWN = ["PageDown", 34]; 8 | const PAGE_UP = ["PageUp", 33]; 9 | const FORWARD = [].concat(RIGHT, DOWN, PAGE_DOWN); 10 | const BACKWARD = [].concat(LEFT, UP, BACKSPACE, PAGE_UP); 11 | let SELECTION_TYPE = true; 12 | const progressNode = document.querySelector(".progress-bar"); 13 | const slides = document.querySelectorAll(SLIDES_SELECTOR); 14 | const totalSlides = slides.length; 15 | 16 | const init = () => { 17 | let current = -1; 18 | 19 | showSlide(parseInt(window.location.hash.split("#")[1]) || 0); 20 | 21 | document.querySelector("body").addEventListener("keyup", (e) => { 22 | const key = e.key || e.keyCode; 23 | if (FORWARD.includes(key)) { 24 | if (current + 1 < totalSlides) { 25 | showSlide(current + 1); 26 | } 27 | } else if (BACKWARD.includes(key)) { 28 | if (current - 1 >= 0) { 29 | showSlide(current - 1); 30 | } 31 | } 32 | }); 33 | 34 | function showSlide(idx) { 35 | if (current >= 0) { 36 | slides[current].style.visibility = "hidden"; 37 | slides[current].style.opacity = 0; 38 | } 39 | current = idx; 40 | slides[current].style.visibility = "visible"; 41 | slides[current].style.opacity = 1; 42 | 43 | postSlide(current); 44 | } 45 | }; 46 | 47 | const updateProgress = (current) => 48 | (progressNode.style.width = `${((current + 1) / totalSlides) * 100}%`); 49 | 50 | const postSlide = (current) => { 51 | updateProgress(current); 52 | setTimeout(() => { 53 | window.location.href = "#" + current; 54 | }, 1); 55 | }; 56 | 57 | init(); 58 | -------------------------------------------------------------------------------- /src/assets/styles.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap"); 2 | @import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@800&display=swap"); 3 | 4 | body { 5 | width: 100%; 6 | height: 100%; 7 | margin: 0; 8 | padding: 0; 9 | font-size: 20px; 10 | font-family: "Inter", sans-serif; 11 | overflow: hidden; 12 | } 13 | 14 | section { 15 | position: absolute; 16 | top: 0; 17 | left: 0; 18 | opacity: 0; 19 | transition: opacity 0.6s ease-out; 20 | visibility: hidden; 21 | width: 80vw; 22 | left: 50%; 23 | transform: translateX(-50%); 24 | height: 100vh; 25 | display: flex; 26 | align-items: center; 27 | justify-content: center; 28 | } 29 | section pre { 30 | margin: 0; 31 | padding: 2em; 32 | font-size: 1em; 33 | } 34 | section code { 35 | margin: 0; 36 | padding: 0; 37 | font-size: 1em; 38 | } 39 | 40 | .progress-bar { 41 | position: absolute; 42 | bottom: 0; 43 | left: 0; 44 | height: 12px; 45 | z-index: 10; 46 | transition: width 0.5s ease-out; 47 | } 48 | a { 49 | text-decoration: underline; 50 | font-weight: 500; 51 | } 52 | ul { 53 | list-style: none; 54 | } 55 | ul li::before { 56 | content: "• "; 57 | font-size: 0.8em; 58 | } 59 | h1, 60 | h2, 61 | h3, 62 | h4, 63 | h5, 64 | h6, 65 | p { 66 | padding: 0 2em; 67 | margin: 0.5em 0; 68 | text-align: center; 69 | font-size: 20px; 70 | } 71 | 72 | p { 73 | padding: 0; 74 | } 75 | 76 | blockquote p, 77 | li p { 78 | text-align: left; 79 | } 80 | 81 | h1 { 82 | font-size: 80px; 83 | line-height: 0.6em; 84 | } 85 | h1 small { 86 | font-size: 0.4em; 87 | } 88 | h2 { 89 | font-size: 3em; 90 | } 91 | h3 { 92 | font-size: 2.4em; 93 | } 94 | p code, 95 | h1 code, 96 | h2 code, 97 | h3 code, 98 | h4 code, 99 | h5 code, 100 | h6 code { 101 | padding: 0 0.2em; 102 | } 103 | 104 | blockquote { 105 | border-style: solid; 106 | border-width: 0; 107 | padding-left: 1.5rem; 108 | border-left-width: 2px; 109 | } 110 | 111 | kbd { 112 | display: inline-flex; 113 | align-items: center; 114 | justify-content: center; 115 | border-width: 1px; 116 | padding-left: 0.5rem; 117 | padding-right: 0.5rem; 118 | border-radius: 0.5rem; 119 | border-bottom-width: 2px; 120 | min-height: 2.2em; 121 | min-width: 2.2em; 122 | border-style: solid; 123 | } 124 | 125 | table th, 126 | table td { 127 | white-space: nowrap; 128 | padding: 1rem; 129 | vertical-align: middle; 130 | } 131 | 132 | table :where(thead, tbody, tfoot) :where(tr:not(:last-child) :where(th, td)) { 133 | border-bottom-width: 1px; 134 | } 135 | 136 | table thead th td, 137 | table tfoot th td { 138 | font-size: 0.75rem; 139 | line-height: 1rem; 140 | font-weight: 700; 141 | text-transform: uppercase; 142 | } 143 | 144 | table tr:first-child td:last-child { 145 | border-top-right-radius: 0.5rem; 146 | } 147 | 148 | table tr:first-child td:first-child { 149 | border-top-left-radius: 0.5rem; 150 | } 151 | 152 | table tr:last-child td:last-child { 153 | border-bottom-right-radius: 0.5rem; 154 | } 155 | 156 | table tr:last-child td:first-child { 157 | border-bottom-left-radius: 0.5rem; 158 | } 159 | -------------------------------------------------------------------------------- /src/assets/themes/axo.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --b1: 0deg 0% 9.1%; 3 | --b2: 0deg 0% 16.97%; 4 | --b3: 22.5 14.286% 89.02%; 5 | --bg: #0d0d0d; 6 | --text: #cbd5e1; 7 | --headings: #ff75c3; 8 | --links: #f57070; 9 | --blockquotes-b: rgb(51 65 85); 10 | --primary: #ff75c3; 11 | } 12 | 13 | body { 14 | background-color: var(--bg); 15 | color: var(--text); 16 | } 17 | 18 | h1, 19 | h2, 20 | h3, 21 | h4, 22 | h5, 23 | h6 { 24 | color: var(--headings); 25 | } 26 | 27 | .progress-bar { 28 | background: var(--primary); 29 | } 30 | a { 31 | color: var(--links); 32 | } 33 | 34 | blockquote { 35 | border-color: var(--blockquotes-b); 36 | color: var(--text); 37 | } 38 | 39 | table tbody tr:hover th, 40 | table tbody tr:hover td { 41 | background-color: var(--b2); 42 | } 43 | 44 | :where(thead, tbody, tfoot) :where(tr:not(:last-child) :where(th, td)) { 45 | border-color: hsl(var(--b2, var(--b1))); 46 | } 47 | 48 | :where(thead, tfoot) :where(th, td) { 49 | background-color: hsl(var(--b2, var(--b1))); 50 | } 51 | 52 | :where(tbody th, tbody td) { 53 | background-color: hsl(var(--b1)); 54 | } 55 | 56 | kbd { 57 | border-color: hsl(215 27.907% 16.863%/0.2); 58 | background-color: hsl(var(--b2, var(--b1))); 59 | } 60 | 61 | /* CODE */ 62 | 63 | code[class*="language-"]::selection, 64 | pre[class*="language-"]::selection, 65 | code[class*="language-"] ::selection, 66 | pre[class*="language-"] ::selection { 67 | background: rgba(29, 59, 83, 1); 68 | } 69 | 70 | p code, 71 | h1 code, 72 | h2 code, 73 | h3 code, 74 | h4 code, 75 | h5 code, 76 | h6 code { 77 | color: #d6deeb; 78 | background: rgba(29, 59, 83, 1); 79 | } 80 | 81 | code[class*="language-"], 82 | pre[class*="language-"] { 83 | color: #d6deeb; 84 | font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; 85 | text-align: left; 86 | white-space: pre; 87 | word-spacing: normal; 88 | word-break: normal; 89 | word-wrap: normal; 90 | line-height: 1.5; 91 | tab-size: 4; 92 | hyphens: none; 93 | } 94 | 95 | pre[class*="language-"]::-moz-selection, 96 | pre[class*="language-"] ::-moz-selection, 97 | code[class*="language-"]::-moz-selection, 98 | code[class*="language-"] ::-moz-selection { 99 | text-shadow: none; 100 | background: rgba(29, 59, 83, 1); 101 | } 102 | 103 | pre[class*="language-"]::selection, 104 | pre[class*="language-"] ::selection, 105 | code[class*="language-"]::selection, 106 | code[class*="language-"] ::selection { 107 | text-shadow: none; 108 | background: rgba(29, 59, 83, 1); 109 | } 110 | 111 | @media print { 112 | code[class*="language-"], 113 | pre[class*="language-"] { 114 | text-shadow: none; 115 | } 116 | } 117 | 118 | /* Code blocks */ 119 | pre[class*="language-"] { 120 | padding: 1em; 121 | margin: 0.5em 0; 122 | overflow: auto; 123 | } 124 | 125 | :not(pre) > code[class*="language-"], 126 | pre[class*="language-"] { 127 | color: white; 128 | background: #011627; 129 | } 130 | 131 | :not(pre) > code[class*="language-"] { 132 | padding: 0.1em; 133 | border-radius: 0.3em; 134 | white-space: normal; 135 | } 136 | 137 | .token.comment, 138 | .token.prolog, 139 | .token.cdata { 140 | color: rgb(99, 119, 119); 141 | font-style: italic; 142 | } 143 | 144 | .token.punctuation { 145 | color: rgb(199, 146, 234); 146 | } 147 | 148 | .namespace { 149 | color: rgb(178, 204, 214); 150 | } 151 | 152 | .token.deleted { 153 | color: rgba(239, 83, 80, 0.56); 154 | font-style: italic; 155 | } 156 | 157 | .token.symbol, 158 | .token.property { 159 | color: rgb(128, 203, 196); 160 | } 161 | 162 | .token.tag, 163 | .token.operator, 164 | .token.keyword { 165 | color: rgb(127, 219, 202); 166 | } 167 | 168 | .token.boolean { 169 | color: rgb(255, 88, 116); 170 | } 171 | 172 | .token.number { 173 | color: rgb(247, 140, 108); 174 | } 175 | 176 | .token.constant, 177 | .token.function, 178 | .token.builtin, 179 | .token.char { 180 | color: rgb(130, 170, 255); 181 | } 182 | 183 | .token.selector, 184 | .token.doctype { 185 | color: rgb(199, 146, 234); 186 | font-style: italic; 187 | } 188 | 189 | .token.attr-name, 190 | .token.inserted { 191 | color: rgb(173, 219, 103); 192 | font-style: italic; 193 | } 194 | 195 | .token.string, 196 | .token.url, 197 | .token.entity, 198 | .language-css .token.string, 199 | .style .token.string { 200 | color: rgb(173, 219, 103); 201 | } 202 | 203 | .token.class-name, 204 | .token.atrule, 205 | .token.attr-value { 206 | color: rgb(255, 203, 139); 207 | } 208 | 209 | .token.regex, 210 | .token.important, 211 | .token.variable { 212 | color: rgb(214, 222, 235); 213 | } 214 | 215 | .token.important, 216 | .token.bold { 217 | font-weight: bold; 218 | } 219 | 220 | .token.italic { 221 | font-style: italic; 222 | } 223 | -------------------------------------------------------------------------------- /src/assets/themes/cupcake.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --b1: 24 33.333% 97.059%; 3 | --b2: 26.667 21.951% 91.961%; 4 | --b3: 22.5 14.286% 89.02%; 5 | --bg: #faf7f5; 6 | --text: hsla(250, 46.47%, 13.9%/0.8); 7 | --headings: #291334; 8 | --links: #291334; 9 | --blockquotes-b: #291334; 10 | --primary: #65c3c8; 11 | } 12 | 13 | body { 14 | background-color: var(--bg); 15 | color: var(--text); 16 | } 17 | 18 | h1, 19 | h2, 20 | h3, 21 | h4, 22 | h5, 23 | h6 { 24 | color: var(--headings); 25 | } 26 | 27 | .progress-bar { 28 | background: var(--primary); 29 | } 30 | a { 31 | color: var(--links); 32 | } 33 | 34 | blockquote { 35 | border-color: var(--blockquotes-b); 36 | color: var(--text); 37 | } 38 | 39 | table tbody tr:hover th, 40 | table tbody tr:hover td { 41 | background-color: hsl(var(--b3, var(--b2))); 42 | } 43 | 44 | :where(thead, tbody, tfoot) :where(tr:not(:last-child) :where(th, td)) { 45 | border-color: hsl(var(--b2, var(--b1))); 46 | } 47 | 48 | :where(thead, tfoot) :where(th, td) { 49 | background-color: hsl(var(--b2, var(--b1))); 50 | } 51 | 52 | :where(tbody th, tbody td) { 53 | background-color: hsl(var(--b1)); 54 | } 55 | 56 | kbd { 57 | border-color: hsl(215 27.907% 16.863%/0.2); 58 | background-color: hsl(var(--b2, var(--b1))); 59 | } 60 | 61 | /* CODE */ 62 | 63 | code[class*="language-"]::selection, 64 | pre[class*="language-"]::selection, 65 | code[class*="language-"] ::selection, 66 | pre[class*="language-"] ::selection { 67 | background: rgba(29, 59, 83, 1); 68 | } 69 | 70 | p code, 71 | h1 code, 72 | h2 code, 73 | h3 code, 74 | h4 code, 75 | h5 code, 76 | h6 code { 77 | color: #d6deeb; 78 | background: rgba(29, 59, 83, 1); 79 | } 80 | 81 | code[class*="language-"], 82 | pre[class*="language-"] { 83 | color: #d6deeb; 84 | font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; 85 | text-align: left; 86 | white-space: pre; 87 | word-spacing: normal; 88 | word-break: normal; 89 | word-wrap: normal; 90 | line-height: 1.5; 91 | tab-size: 4; 92 | hyphens: none; 93 | } 94 | 95 | pre[class*="language-"]::-moz-selection, 96 | pre[class*="language-"] ::-moz-selection, 97 | code[class*="language-"]::-moz-selection, 98 | code[class*="language-"] ::-moz-selection { 99 | text-shadow: none; 100 | background: rgba(29, 59, 83, 1); 101 | } 102 | 103 | pre[class*="language-"]::selection, 104 | pre[class*="language-"] ::selection, 105 | code[class*="language-"]::selection, 106 | code[class*="language-"] ::selection { 107 | text-shadow: none; 108 | background: rgba(29, 59, 83, 1); 109 | } 110 | 111 | @media print { 112 | code[class*="language-"], 113 | pre[class*="language-"] { 114 | text-shadow: none; 115 | } 116 | } 117 | 118 | /* Code blocks */ 119 | pre[class*="language-"] { 120 | padding: 1em; 121 | margin: 0.5em 0; 122 | overflow: auto; 123 | } 124 | 125 | :not(pre) > code[class*="language-"], 126 | pre[class*="language-"] { 127 | color: white; 128 | background: #011627; 129 | } 130 | 131 | :not(pre) > code[class*="language-"] { 132 | padding: 0.1em; 133 | border-radius: 0.3em; 134 | white-space: normal; 135 | } 136 | 137 | .token.comment, 138 | .token.prolog, 139 | .token.cdata { 140 | color: rgb(99, 119, 119); 141 | font-style: italic; 142 | } 143 | 144 | .token.punctuation { 145 | color: rgb(199, 146, 234); 146 | } 147 | 148 | .namespace { 149 | color: rgb(178, 204, 214); 150 | } 151 | 152 | .token.deleted { 153 | color: rgba(239, 83, 80, 0.56); 154 | font-style: italic; 155 | } 156 | 157 | .token.symbol, 158 | .token.property { 159 | color: rgb(128, 203, 196); 160 | } 161 | 162 | .token.tag, 163 | .token.operator, 164 | .token.keyword { 165 | color: rgb(127, 219, 202); 166 | } 167 | 168 | .token.boolean { 169 | color: rgb(255, 88, 116); 170 | } 171 | 172 | .token.number { 173 | color: rgb(247, 140, 108); 174 | } 175 | 176 | .token.constant, 177 | .token.function, 178 | .token.builtin, 179 | .token.char { 180 | color: rgb(130, 170, 255); 181 | } 182 | 183 | .token.selector, 184 | .token.doctype { 185 | color: rgb(199, 146, 234); 186 | font-style: italic; 187 | } 188 | 189 | .token.attr-name, 190 | .token.inserted { 191 | color: rgb(173, 219, 103); 192 | font-style: italic; 193 | } 194 | 195 | .token.string, 196 | .token.url, 197 | .token.entity, 198 | .language-css .token.string, 199 | .style .token.string { 200 | color: rgb(173, 219, 103); 201 | } 202 | 203 | .token.class-name, 204 | .token.atrule, 205 | .token.attr-value { 206 | color: rgb(255, 203, 139); 207 | } 208 | 209 | .token.regex, 210 | .token.important, 211 | .token.variable { 212 | color: rgb(214, 222, 235); 213 | } 214 | 215 | .token.important, 216 | .token.bold { 217 | font-weight: bold; 218 | } 219 | 220 | .token.italic { 221 | font-style: italic; 222 | } 223 | -------------------------------------------------------------------------------- /src/assets/themes/dark.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --b1: 220 17.647% 20%; 3 | --b2: 220 17.241% 17.059%; 4 | --b3: 218.57 17.949% 15.294%; 5 | --bg: #2a303c; 6 | --text: rgba(166, 173, 187, 0.8); 7 | --headings: #a6adbb; 8 | --links: #a6adbb; 9 | --blockquotes-b: rgba(166, 173, 187, 0.2); 10 | --primary: #661ae6; 11 | } 12 | 13 | h1, 14 | h2, 15 | h3, 16 | h4, 17 | h5, 18 | h6 { 19 | color: var(--headings); 20 | } 21 | 22 | body { 23 | background-color: var(--bg); 24 | color: var(--text); 25 | } 26 | 27 | .progress-bar { 28 | background: var(--primary); 29 | } 30 | a { 31 | color: var(--links); 32 | } 33 | 34 | blockquote { 35 | border-color: var(--blockquotes-b); 36 | color: var(--text); 37 | } 38 | 39 | table tbody tr:hover th, 40 | table tbody tr:hover td { 41 | background-color: hsl(var(--b3, var(--b2))); 42 | } 43 | 44 | :where(thead, tbody, tfoot) :where(tr:not(:last-child) :where(th, td)) { 45 | border-color: hsl(var(--b2, var(--b1))); 46 | } 47 | 48 | :where(thead, tfoot) :where(th, td) { 49 | background-color: hsl(var(--b2, var(--b1))); 50 | } 51 | 52 | :where(tbody th, tbody td) { 53 | background-color: hsl(var(--b1)); 54 | } 55 | 56 | kbd { 57 | border-color: hsl(215 27.907% 16.863%/0.2); 58 | background-color: hsl(var(--b2, var(--b1))); 59 | } 60 | 61 | /* CODE */ 62 | 63 | code[class*="language-"]::selection, 64 | pre[class*="language-"]::selection, 65 | code[class*="language-"] ::selection, 66 | pre[class*="language-"] ::selection { 67 | background: rgba(29, 59, 83, 1); 68 | } 69 | 70 | p code, 71 | h1 code, 72 | h2 code, 73 | h3 code, 74 | h4 code, 75 | h5 code, 76 | h6 code { 77 | color: #d6deeb; 78 | background: rgba(29, 59, 83, 1); 79 | } 80 | 81 | code[class*="language-"], 82 | pre[class*="language-"] { 83 | color: #d6deeb; 84 | font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; 85 | text-align: left; 86 | white-space: pre; 87 | word-spacing: normal; 88 | word-break: normal; 89 | word-wrap: normal; 90 | line-height: 1.5; 91 | tab-size: 4; 92 | hyphens: none; 93 | } 94 | 95 | pre[class*="language-"]::-moz-selection, 96 | pre[class*="language-"] ::-moz-selection, 97 | code[class*="language-"]::-moz-selection, 98 | code[class*="language-"] ::-moz-selection { 99 | text-shadow: none; 100 | background: rgba(29, 59, 83, 1); 101 | } 102 | 103 | pre[class*="language-"]::selection, 104 | pre[class*="language-"] ::selection, 105 | code[class*="language-"]::selection, 106 | code[class*="language-"] ::selection { 107 | text-shadow: none; 108 | background: rgba(29, 59, 83, 1); 109 | } 110 | 111 | @media print { 112 | code[class*="language-"], 113 | pre[class*="language-"] { 114 | text-shadow: none; 115 | } 116 | } 117 | 118 | /* Code blocks */ 119 | pre[class*="language-"] { 120 | padding: 1em; 121 | margin: 0.5em 0; 122 | overflow: auto; 123 | } 124 | 125 | :not(pre) > code[class*="language-"], 126 | pre[class*="language-"] { 127 | color: white; 128 | background: #011627; 129 | } 130 | 131 | :not(pre) > code[class*="language-"] { 132 | padding: 0.1em; 133 | border-radius: 0.3em; 134 | white-space: normal; 135 | } 136 | 137 | .token.comment, 138 | .token.prolog, 139 | .token.cdata { 140 | color: rgb(99, 119, 119); 141 | font-style: italic; 142 | } 143 | 144 | .token.punctuation { 145 | color: rgb(199, 146, 234); 146 | } 147 | 148 | .namespace { 149 | color: rgb(178, 204, 214); 150 | } 151 | 152 | .token.deleted { 153 | color: rgba(239, 83, 80, 0.56); 154 | font-style: italic; 155 | } 156 | 157 | .token.symbol, 158 | .token.property { 159 | color: rgb(128, 203, 196); 160 | } 161 | 162 | .token.tag, 163 | .token.operator, 164 | .token.keyword { 165 | color: rgb(127, 219, 202); 166 | } 167 | 168 | .token.boolean { 169 | color: rgb(255, 88, 116); 170 | } 171 | 172 | .token.number { 173 | color: rgb(247, 140, 108); 174 | } 175 | 176 | .token.constant, 177 | .token.function, 178 | .token.builtin, 179 | .token.char { 180 | color: rgb(130, 170, 255); 181 | } 182 | 183 | .token.selector, 184 | .token.doctype { 185 | color: rgb(199, 146, 234); 186 | font-style: italic; 187 | } 188 | 189 | .token.attr-name, 190 | .token.inserted { 191 | color: rgb(173, 219, 103); 192 | font-style: italic; 193 | } 194 | 195 | .token.string, 196 | .token.url, 197 | .token.entity, 198 | .language-css .token.string, 199 | .style .token.string { 200 | color: rgb(173, 219, 103); 201 | } 202 | 203 | .token.class-name, 204 | .token.atrule, 205 | .token.attr-value { 206 | color: rgb(255, 203, 139); 207 | } 208 | 209 | .token.regex, 210 | .token.important, 211 | .token.variable { 212 | color: rgb(214, 222, 235); 213 | } 214 | 215 | .token.important, 216 | .token.bold { 217 | font-weight: bold; 218 | } 219 | 220 | .token.italic { 221 | font-style: italic; 222 | } 223 | -------------------------------------------------------------------------------- /src/assets/themes/light.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --b1: 0 0% 100%; 3 | --b2: 0 0% 94.902%; 4 | --b3: 180 1.9608% 90%; 5 | --bg: #ffffff; 6 | --text: #1f2937; 7 | --links: #1f2937; 8 | --headings: #1f2937; 9 | --blockquotes-b: rgba(31, 41, 55, 0.2); 10 | --primary: #570df8; 11 | } 12 | 13 | h1, 14 | h2, 15 | h3, 16 | h4, 17 | h5, 18 | h6 { 19 | color: var(--headings); 20 | } 21 | 22 | body { 23 | background-color: var(--bg); 24 | color: var(--text); 25 | } 26 | 27 | .progress-bar { 28 | background: var(--primary); 29 | } 30 | a { 31 | color: var(--links); 32 | } 33 | 34 | blockquote { 35 | border-color: var(--blockquotes-b); 36 | color: var(--text); 37 | } 38 | 39 | table tbody tr:hover th, 40 | table tbody tr:hover td { 41 | background-color: hsl(var(--b3, var(--b2))); 42 | } 43 | 44 | :where(thead, tbody, tfoot) :where(tr:not(:last-child) :where(th, td)) { 45 | border-color: hsl(var(--b2, var(--b1))); 46 | } 47 | 48 | :where(thead, tfoot) :where(th, td) { 49 | background-color: hsl(var(--b2, var(--b1))); 50 | } 51 | 52 | :where(tbody th, tbody td) { 53 | background-color: hsl(var(--b1)); 54 | } 55 | 56 | kbd { 57 | border-color: hsl(215 27.907% 16.863%/0.2); 58 | background-color: hsl(var(--b2, var(--b1))); 59 | } 60 | 61 | /* CODE */ 62 | 63 | code[class*="language-"]::selection, 64 | pre[class*="language-"]::selection, 65 | code[class*="language-"] ::selection, 66 | pre[class*="language-"] ::selection { 67 | background: rgba(29, 59, 83, 1); 68 | } 69 | 70 | p code, 71 | h1 code, 72 | h2 code, 73 | h3 code, 74 | h4 code, 75 | h5 code, 76 | h6 code { 77 | color: #d6deeb; 78 | background: rgba(29, 59, 83, 1); 79 | } 80 | 81 | code[class*="language-"], 82 | pre[class*="language-"] { 83 | color: #d6deeb; 84 | font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; 85 | text-align: left; 86 | white-space: pre; 87 | word-spacing: normal; 88 | word-break: normal; 89 | word-wrap: normal; 90 | line-height: 1.5; 91 | tab-size: 4; 92 | hyphens: none; 93 | } 94 | 95 | pre[class*="language-"]::-moz-selection, 96 | pre[class*="language-"] ::-moz-selection, 97 | code[class*="language-"]::-moz-selection, 98 | code[class*="language-"] ::-moz-selection { 99 | text-shadow: none; 100 | background: rgba(29, 59, 83, 1); 101 | } 102 | 103 | pre[class*="language-"]::selection, 104 | pre[class*="language-"] ::selection, 105 | code[class*="language-"]::selection, 106 | code[class*="language-"] ::selection { 107 | text-shadow: none; 108 | background: rgba(29, 59, 83, 1); 109 | } 110 | 111 | @media print { 112 | code[class*="language-"], 113 | pre[class*="language-"] { 114 | text-shadow: none; 115 | } 116 | } 117 | 118 | /* Code blocks */ 119 | pre[class*="language-"] { 120 | padding: 1em; 121 | margin: 0.5em 0; 122 | overflow: auto; 123 | } 124 | 125 | :not(pre) > code[class*="language-"], 126 | pre[class*="language-"] { 127 | color: white; 128 | background: #011627; 129 | } 130 | 131 | :not(pre) > code[class*="language-"] { 132 | padding: 0.1em; 133 | border-radius: 0.3em; 134 | white-space: normal; 135 | } 136 | 137 | .token.comment, 138 | .token.prolog, 139 | .token.cdata { 140 | color: rgb(99, 119, 119); 141 | font-style: italic; 142 | } 143 | 144 | .token.punctuation { 145 | color: rgb(199, 146, 234); 146 | } 147 | 148 | .namespace { 149 | color: rgb(178, 204, 214); 150 | } 151 | 152 | .token.deleted { 153 | color: rgba(239, 83, 80, 0.56); 154 | font-style: italic; 155 | } 156 | 157 | .token.symbol, 158 | .token.property { 159 | color: rgb(128, 203, 196); 160 | } 161 | 162 | .token.tag, 163 | .token.operator, 164 | .token.keyword { 165 | color: rgb(127, 219, 202); 166 | } 167 | 168 | .token.boolean { 169 | color: rgb(255, 88, 116); 170 | } 171 | 172 | .token.number { 173 | color: rgb(247, 140, 108); 174 | } 175 | 176 | .token.constant, 177 | .token.function, 178 | .token.builtin, 179 | .token.char { 180 | color: rgb(130, 170, 255); 181 | } 182 | 183 | .token.selector, 184 | .token.doctype { 185 | color: rgb(199, 146, 234); 186 | font-style: italic; 187 | } 188 | 189 | .token.attr-name, 190 | .token.inserted { 191 | color: rgb(173, 219, 103); 192 | font-style: italic; 193 | } 194 | 195 | .token.string, 196 | .token.url, 197 | .token.entity, 198 | .language-css .token.string, 199 | .style .token.string { 200 | color: rgb(173, 219, 103); 201 | } 202 | 203 | .token.class-name, 204 | .token.atrule, 205 | .token.attr-value { 206 | color: rgb(255, 203, 139); 207 | } 208 | 209 | .token.regex, 210 | .token.important, 211 | .token.variable { 212 | color: rgb(214, 222, 235); 213 | } 214 | 215 | .token.important, 216 | .token.bold { 217 | font-weight: bold; 218 | } 219 | 220 | .token.italic { 221 | font-style: italic; 222 | } 223 | -------------------------------------------------------------------------------- /src/assets/themes/nash.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --bg: #090033; 3 | --text: #eee; 4 | --links: #dc802f; 5 | --blockquotes-b: #f96f15; 6 | --primary: #65c3c8; 7 | } 8 | 9 | body { 10 | background-color: var(--bg); 11 | color: var(--text); 12 | } 13 | 14 | h1 { 15 | font-size: 80px; 16 | } 17 | 18 | h1, 19 | h2, 20 | h3, 21 | h4, 22 | h5, 23 | h6 { 24 | background: linear-gradient(#f7df1e, transparent), 25 | linear-gradient(90deg, #f51764, transparent), 26 | linear-gradient(-90deg, #f96f15, transparent); 27 | background-blend-mode: screen; 28 | background-size: 100%; 29 | -webkit-background-clip: text; 30 | -moz-background-clip: text; 31 | background-clip: text; 32 | -webkit-text-fill-color: transparent; 33 | -moz-text-fill-color: transparent; 34 | line-height: normal; 35 | font-family: "Montserrat", sans-serif; 36 | font-weight: 800; 37 | } 38 | 39 | .progress-bar { 40 | background: var(--primary); 41 | } 42 | a { 43 | color: var(--links); 44 | } 45 | 46 | blockquote { 47 | border-color: var(--blockquotes-b); 48 | color: var(--text); 49 | } 50 | 51 | kbd { 52 | border-color: #130f27; 53 | background-color: #231469; 54 | } 55 | 56 | /* CODE */ 57 | 58 | code[class*="language-"]::selection, 59 | pre[class*="language-"]::selection, 60 | code[class*="language-"] ::selection, 61 | pre[class*="language-"] ::selection { 62 | background: rgba(29, 59, 83, 1); 63 | } 64 | 65 | p code, 66 | h1 code, 67 | h2 code, 68 | h3 code, 69 | h4 code, 70 | h5 code, 71 | h6 code { 72 | color: #d6deeb; 73 | background: rgba(29, 59, 83, 1); 74 | -webkit-text-fill-color: initial; 75 | } 76 | 77 | code[class*="language-"], 78 | pre[class*="language-"] { 79 | color: #d6deeb; 80 | font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; 81 | text-align: left; 82 | white-space: pre; 83 | word-spacing: normal; 84 | word-break: normal; 85 | word-wrap: normal; 86 | line-height: 1.5; 87 | tab-size: 4; 88 | hyphens: none; 89 | } 90 | 91 | pre[class*="language-"]::-moz-selection, 92 | pre[class*="language-"] ::-moz-selection, 93 | code[class*="language-"]::-moz-selection, 94 | code[class*="language-"] ::-moz-selection { 95 | text-shadow: none; 96 | background: rgba(29, 59, 83, 1); 97 | } 98 | 99 | pre[class*="language-"]::selection, 100 | pre[class*="language-"] ::selection, 101 | code[class*="language-"]::selection, 102 | code[class*="language-"] ::selection { 103 | text-shadow: none; 104 | background: rgba(29, 59, 83, 1); 105 | } 106 | 107 | @media print { 108 | code[class*="language-"], 109 | pre[class*="language-"] { 110 | text-shadow: none; 111 | } 112 | } 113 | 114 | /* Code blocks */ 115 | pre[class*="language-"] { 116 | padding: 1em; 117 | margin: 0.5em 0; 118 | overflow: auto; 119 | } 120 | 121 | :not(pre) > code[class*="language-"], 122 | pre[class*="language-"] { 123 | color: white; 124 | background: #011627; 125 | } 126 | 127 | :not(pre) > code[class*="language-"] { 128 | padding: 0.1em; 129 | border-radius: 0.3em; 130 | white-space: normal; 131 | } 132 | 133 | .token.comment, 134 | .token.prolog, 135 | .token.cdata { 136 | color: rgb(99, 119, 119); 137 | font-style: italic; 138 | } 139 | 140 | .token.punctuation { 141 | color: rgb(199, 146, 234); 142 | } 143 | 144 | .namespace { 145 | color: rgb(178, 204, 214); 146 | } 147 | 148 | .token.deleted { 149 | color: rgba(239, 83, 80, 0.56); 150 | font-style: italic; 151 | } 152 | 153 | .token.symbol, 154 | .token.property { 155 | color: rgb(128, 203, 196); 156 | } 157 | 158 | .token.tag, 159 | .token.operator, 160 | .token.keyword { 161 | color: rgb(127, 219, 202); 162 | } 163 | 164 | .token.boolean { 165 | color: rgb(255, 88, 116); 166 | } 167 | 168 | .token.number { 169 | color: rgb(247, 140, 108); 170 | } 171 | 172 | .token.constant, 173 | .token.function, 174 | .token.builtin, 175 | .token.char { 176 | color: rgb(130, 170, 255); 177 | } 178 | 179 | .token.selector, 180 | .token.doctype { 181 | color: rgb(199, 146, 234); 182 | font-style: italic; 183 | } 184 | 185 | .token.attr-name, 186 | .token.inserted { 187 | color: rgb(173, 219, 103); 188 | font-style: italic; 189 | } 190 | 191 | .token.string, 192 | .token.url, 193 | .token.entity, 194 | .language-css .token.string, 195 | .style .token.string { 196 | color: rgb(173, 219, 103); 197 | } 198 | 199 | .token.class-name, 200 | .token.atrule, 201 | .token.attr-value { 202 | color: rgb(255, 203, 139); 203 | } 204 | 205 | .token.regex, 206 | .token.important, 207 | .token.variable { 208 | color: rgb(214, 222, 235); 209 | } 210 | 211 | .token.important, 212 | .token.bold { 213 | font-weight: bold; 214 | } 215 | 216 | .token.italic { 217 | font-style: italic; 218 | } 219 | 220 | .progress-bar { 221 | background: linear-gradient(to right, #f7df1e, #f96f15); 222 | } 223 | -------------------------------------------------------------------------------- /src/errors.rs: -------------------------------------------------------------------------------- 1 | use thiserror::Error; 2 | 3 | pub type Result = std::result::Result; 4 | 5 | #[derive(Debug, Error)] 6 | pub enum SlippyError { 7 | #[error(transparent)] 8 | Io(#[from] std::io::Error), 9 | 10 | #[error(transparent)] 11 | StripPrefixError(#[from] std::path::StripPrefixError), 12 | 13 | #[error(transparent)] 14 | AxoAsset(#[from] axoasset::AxoassetError), 15 | 16 | #[error("failed to read {filedesc} at {path}")] 17 | FileNotFound { filedesc: String, path: String }, 18 | 19 | #[error("File is not markdown")] 20 | FileNotMD {}, 21 | 22 | #[error(transparent)] 23 | FSExtra(#[from] fs_extra::error::Error), 24 | 25 | #[error("There was an issue minifing CSS")] 26 | CSSMinificationError {}, 27 | // #[error("{0}")] 28 | // Other(String), 29 | } 30 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![allow(clippy::uninlined_format_args)] 2 | 3 | pub mod errors; 4 | pub mod message; 5 | pub mod slideshow; 6 | use crate::errors::*; 7 | use axohtml::{elements::section, html, unsafe_text}; 8 | use clap::{Parser, ValueEnum}; 9 | use message::Message; 10 | use slideshow::{create_files, html::create_html, markdown_parser::transform_markdown}; 11 | use std::{fs, path::Path}; 12 | 13 | #[derive(Parser, Debug)] 14 | #[command(author, version, about, long_about = None)] 15 | struct Args { 16 | file: String, 17 | #[arg(short, long)] 18 | theme: Option, 19 | } 20 | 21 | #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)] 22 | pub enum Theme { 23 | Light, 24 | Dark, 25 | Cupcake, 26 | Axo, 27 | Nash, 28 | } 29 | 30 | fn main() -> Result<()> { 31 | let args = Args::parse(); 32 | let file_path = Path::new(&args.file); 33 | 34 | if !Path::exists(file_path) { 35 | return Err(SlippyError::FileNotFound { 36 | filedesc: "markdown slideshow".to_owned(), 37 | path: args.file, 38 | }); 39 | } 40 | 41 | if file_path.extension().unwrap().to_str() != Some("md") { 42 | return Err(SlippyError::FileNotMD {}); 43 | } 44 | 45 | Message::new(message::MessageType::Info, "Creating your slideshow").print(); 46 | let mut slides_html: Vec>> = vec![]; 47 | let content = fs::read_to_string(file_path)?; 48 | let slides: Vec<&str> = content.as_str().split("\n---\n").collect(); 49 | for slide in slides { 50 | let slide_html = transform_markdown(slide); 51 | slides_html.extend(html!(
{unsafe_text!(slide_html)}
)) 52 | } 53 | 54 | let final_html = create_html(slides_html); 55 | create_files(final_html, args.theme)?; 56 | Message::new( 57 | message::MessageType::Success, 58 | "Slideshow created in the public directory", 59 | ) 60 | .print(); 61 | 62 | Ok(()) 63 | } 64 | -------------------------------------------------------------------------------- /src/message.rs: -------------------------------------------------------------------------------- 1 | use console::Color::{Cyan, Green, Magenta, Red, White, Yellow}; 2 | use console::Style; 3 | #[allow(dead_code)] 4 | pub enum MessageType { 5 | Success, 6 | Info, 7 | Hint, 8 | Debug, 9 | Warning, 10 | Error, 11 | } 12 | #[allow(dead_code)] 13 | pub struct Message { 14 | mtype: MessageType, 15 | msg: String, 16 | } 17 | 18 | impl Message { 19 | pub fn new(mtype: MessageType, msg: &str) -> Self { 20 | Message { 21 | mtype, 22 | msg: msg.to_string(), 23 | } 24 | } 25 | 26 | pub fn print(&self) { 27 | println!("{}", &self.style()); 28 | } 29 | 30 | fn style(&self) -> String { 31 | let warn_icon = Style::new().bold().fg(Yellow).apply_to("⚠"); 32 | let check_icon = Style::new().bold().fg(Green).apply_to("✓"); 33 | let x_icon = Style::new().bold().fg(Red).apply_to("✗"); 34 | let arrow_icon = Style::new().bold().fg(White).apply_to("↪"); 35 | match self.mtype { 36 | MessageType::Success => { 37 | let style = Style::new().bold().fg(Green); 38 | format!( 39 | "{} >o_o< SUCCESS: {}", 40 | check_icon, 41 | style.apply_to(&self.msg) 42 | ) 43 | } 44 | MessageType::Info => { 45 | let style = Style::new().bold().fg(White); 46 | format!("{} >o_o< INFO: {}", arrow_icon, style.apply_to(&self.msg)) 47 | } 48 | MessageType::Hint => { 49 | let style = Style::new().bold().fg(Cyan); 50 | format!("{} >o_o< HINT: {}", arrow_icon, style.apply_to(&self.msg)) 51 | } 52 | MessageType::Debug => { 53 | let style = Style::new().bold().fg(Magenta); 54 | format!("{} >o_o< DEBUG: {}", arrow_icon, style.apply_to(&self.msg)) 55 | } 56 | MessageType::Warning => { 57 | let style = Style::new().bold().fg(Yellow); 58 | format!("{} >o_o< WARNING: {}", warn_icon, style.apply_to(&self.msg)) 59 | } 60 | MessageType::Error => { 61 | let style = Style::new().bold().fg(Red); 62 | format!("{} >o_o< ERROR: {}", x_icon, style.apply_to(&self.msg)) 63 | } 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/slideshow/html.rs: -------------------------------------------------------------------------------- 1 | use axohtml::{elements::section, html}; 2 | 3 | // False positive duplicate allocation warning 4 | // https://github.com/rust-lang/rust-clippy/issues?q=is%3Aissue+redundant_allocation+sort%3Aupdated-desc 5 | #[allow(clippy::vec_box)] 6 | pub fn create_html(slides_html: Vec>>) -> String { 7 | html!( 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {slides_html} 17 |
18 | 19 | 20 | ")); 31 | } 32 | -------------------------------------------------------------------------------- /src/slideshow/markdown_parser.rs: -------------------------------------------------------------------------------- 1 | use markdown::{CompileOptions, Constructs, ParseOptions}; 2 | 3 | pub fn transform_markdown(slide: &str) -> String { 4 | let compile_options = CompileOptions { 5 | allow_dangerous_html: true, 6 | allow_dangerous_protocol: true, 7 | ..CompileOptions::default() 8 | }; 9 | 10 | let custom = Constructs { 11 | autolink: true, 12 | code_fenced: true, 13 | gfm_strikethrough: true, 14 | gfm_table: true, 15 | ..Constructs::gfm() 16 | }; 17 | markdown::to_html_with_options( 18 | slide, 19 | &markdown::Options { 20 | parse: ParseOptions { 21 | constructs: custom, 22 | ..ParseOptions::default() 23 | }, 24 | compile: compile_options, 25 | }, 26 | ) 27 | // https://docs.rs/markdown/1.0.0-alpha.7/markdown/fn.to_html_with_options.html#errors 28 | .unwrap() 29 | } 30 | 31 | #[test] 32 | fn parses_markdown_headings() { 33 | let html = transform_markdown("## hello"); 34 | println!("{}", html); 35 | assert!(html.eq("

hello

")); 36 | } 37 | 38 | #[cfg(test)] 39 | fn remove_whitespace(s: String) -> String { 40 | s.chars().filter(|c| !c.is_whitespace()).collect() 41 | } 42 | 43 | #[test] 44 | fn parses_markdown_tables() { 45 | let html = transform_markdown( 46 | r#" 47 | | one | two | three | 48 | | --- | --- | ----- | 49 | | yes | no | yes | 50 | "#, 51 | ); 52 | assert!(remove_whitespace(html).eq("
onetwothree
yesnoyes
")); 53 | } 54 | 55 | #[test] 56 | fn parses_markdown_code() { 57 | let html = transform_markdown( 58 | r#" 59 | ```bash 60 | sh uwu.sh 61 | ``` 62 | "#, 63 | ); 64 | assert!(remove_whitespace(html).eq("
shuwu.sh
")); 65 | } 66 | -------------------------------------------------------------------------------- /src/slideshow/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod html; 2 | pub mod markdown_parser; 3 | 4 | use std::path::Path; 5 | 6 | use crate::{errors::*, Theme}; 7 | use axoasset::LocalAsset; 8 | use css_minify::optimizations::{Level, Minifier}; 9 | use std::fs; 10 | 11 | const CSS: &str = include_str!("../assets/styles.css"); 12 | const LIGHT_THEME: &str = include_str!("../assets/themes/light.css"); 13 | const DARK_THEME: &str = include_str!("../assets/themes/dark.css"); 14 | const NASH_THEME: &str = include_str!("../assets/themes/nash.css"); 15 | const CUPCAKE_THEME: &str = include_str!("../assets/themes/cupcake.css"); 16 | const AXO_THEME: &str = include_str!("../assets/themes/axo.css"); 17 | const JS: &str = include_str!("../assets/slide.js"); 18 | const DIST: &str = "public"; 19 | const STATIC: &str = "static"; 20 | 21 | pub fn create_files(html: String, theme_d: Option) -> Result<()> { 22 | let theme_css = match theme_d { 23 | Some(theme) => match theme { 24 | Theme::Light => LIGHT_THEME, 25 | Theme::Dark => DARK_THEME, 26 | Theme::Cupcake => CUPCAKE_THEME, 27 | Theme::Axo => AXO_THEME, 28 | Theme::Nash => NASH_THEME, 29 | }, 30 | None => LIGHT_THEME, 31 | }; 32 | let additional_css_promise = fs::read_to_string("deck.css"); 33 | 34 | let additional_css = match additional_css_promise { 35 | Ok(css) => css, 36 | Err(_) => "".to_string(), 37 | }; 38 | 39 | let full_css = format!("{} {} {}", CSS, theme_css, additional_css); 40 | let minified_css = Minifier::default().minify(full_css.as_str(), Level::Three); 41 | 42 | match minified_css { 43 | Err(_) => Err(SlippyError::CSSMinificationError {}), 44 | Ok(css) => { 45 | create_dist_dir()?; 46 | LocalAsset::new("index.js", JS.into()).write(DIST)?; 47 | LocalAsset::new("styles.css", css.into()).write(DIST)?; 48 | LocalAsset::new("index.html", html.into()).write(DIST)?; 49 | copy_static()?; 50 | 51 | Ok(()) 52 | } 53 | } 54 | } 55 | 56 | pub fn create_dist_dir() -> Result<()> { 57 | if !Path::new(&DIST).exists() { 58 | std::fs::create_dir_all(DIST)?; 59 | } 60 | 61 | Ok(()) 62 | } 63 | 64 | pub fn copy_static() -> Result<()> { 65 | if Path::new(STATIC).exists() { 66 | let mut options = fs_extra::dir::CopyOptions::new(); 67 | options.overwrite = true; 68 | fs_extra::copy_items(&[STATIC], DIST, &options)?; 69 | } 70 | Ok(()) 71 | } 72 | --------------------------------------------------------------------------------