diff --git a/.drone.yml b/.drone.yml
deleted file mode 100644
index a252d01..0000000
--- a/.drone.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-kind: pipeline
-name: web
-type: docker
-
-steps:
- - name: deploy web
- image: node:alpine
- environment:
- IS_PROD: true
- TOKEN:
- from_secret: VERCEL_TOKEN
- when:
- branch:
- - main
- commands:
- - npm install -g vercel@latest
- - cd web
- - /bin/sh deploy.sh
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
deleted file mode 100644
index 25c5513..0000000
--- a/.github/workflows/publish.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-name: "publish"
-on:
- push:
- branches:
- - release
-
-jobs:
- publish-tauri:
- permissions:
- contents: write
- strategy:
- fail-fast: false
- matrix:
- platform: [macos-latest, ubuntu-20.04, windows-latest]
-
- runs-on: ${{ matrix.platform }}
-
- defaults:
- run:
- working-directory: app
-
- steps:
- - uses: actions/checkout@v3
- - name: setup node
- uses: actions/setup-node@v3
- with:
- node-version: 16
- - name: install Rust stable
- uses: dtolnay/rust-toolchain@stable
- - name: install dependencies (ubuntu only)
- if: matrix.platform == 'ubuntu-20.04'
- run: |
- sudo apt-get update
- sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf
- - name: setup .npmrc
- run: mv .npmrc.githubactions .npmrc
- - name: install frontend dependencies
- run: yarn install # change this to npm or pnpm depending on which one you use
- env:
- UNOM_PACKAGES_TOKEN: ${{ secrets.UNOM_PACKAGES_TOKEN }}
- - uses: tauri-apps/tauri-action@v0
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- UNOM_PACKAGES_TOKEN: ${{ secrets.UNOM_PACKAGES_TOKEN }}
- with:
- tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version
- releaseName: "App v__VERSION__"
- releaseBody: "See the assets to download this version and install."
- releaseDraft: true
- prerelease: false
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
deleted file mode 100644
index 23b691d..0000000
--- a/.github/workflows/test.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-name: "test-on-pr"
-on: [pull_request]
-
-jobs:
- test-app:
- strategy:
- fail-fast: false
- matrix:
- platform: [macos-latest, ubuntu-20.04, windows-latest]
-
- runs-on: ${{ matrix.platform }}
-
- defaults:
- run:
- working-directory: app
-
- steps:
- - uses: actions/checkout@v3
- - name: setup node
- uses: actions/setup-node@v3
- with:
- node-version: 16
- - name: install Rust stable
- uses: dtolnay/rust-toolchain@stable
- - name: install dependencies (ubuntu only)
- if: matrix.platform == 'ubuntu-20.04'
- run: |
- sudo apt-get update
- sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf
- - name: setup .npmrc
- run: mv .npmrc.githubactions .npmrc
- - name: install frontend dependencies
- run: yarn install # change this to npm or pnpm depending on which one you use
- env:
- UNOM_PACKAGES_TOKEN: ${{ secrets.UNOM_PACKAGES_TOKEN }}
- - uses: tauri-apps/tauri-action@v0
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- UNOM_PACKAGES_TOKEN: ${{ secrets.UNOM_PACKAGES_TOKEN }}
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index e43b0f9..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-.DS_Store
diff --git a/LICENSE.md b/LICENSE.md
deleted file mode 100644
index 9bdd5e7..0000000
--- a/LICENSE.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright 2023 Enrico Bühler
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
deleted file mode 100644
index a547bf3..0000000
--- a/app/.gitignore
+++ /dev/null
@@ -1,24 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-dist-ssr
-*.local
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
diff --git a/app/.npmrc.githubactions b/app/.npmrc.githubactions
deleted file mode 100644
index e05150c..0000000
--- a/app/.npmrc.githubactions
+++ /dev/null
@@ -1,4 +0,0 @@
-//packages.unom.io/:_authToken=${UNOM_PACKAGES_TOKEN}
-registry=https://registry.npmjs.org/
-@tempblade:registry=https://packages.unom.io
-@unom:registry=https://packages.unom.io
\ No newline at end of file
diff --git a/app/.vscode/extensions.json b/app/.vscode/extensions.json
deleted file mode 100644
index b864f8c..0000000
--- a/app/.vscode/extensions.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "recommendations": [
- "tauri-apps.tauri-vscode",
- "rust-lang.rust-analyzer"
- ]
-}
\ No newline at end of file
diff --git a/app/.yarn/install-state.gz b/app/.yarn/install-state.gz
deleted file mode 100644
index b244af4..0000000
Binary files a/app/.yarn/install-state.gz and /dev/null differ
diff --git a/app/.yarnrc.yml b/app/.yarnrc.yml
deleted file mode 100644
index 3186f3f..0000000
--- a/app/.yarnrc.yml
+++ /dev/null
@@ -1 +0,0 @@
-nodeLinker: node-modules
diff --git a/app/README.md b/app/README.md
deleted file mode 100644
index 25789e2..0000000
--- a/app/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# tempblade Creator
-
-This is the directory containing the application. It uses tauri with react/vite.
-
-## Commands
-
-Start the dev server:
-```yarn tauri dev```
-
-Create a production build:
-```yarn tauri build```
diff --git a/app/app-icon.png b/app/app-icon.png
deleted file mode 100644
index 3fa0ef7..0000000
Binary files a/app/app-icon.png and /dev/null differ
diff --git a/app/index.html b/app/index.html
deleted file mode 100644
index 2abef64..0000000
--- a/app/index.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
- tempblade Creator
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/package.json b/app/package.json
deleted file mode 100644
index d3e6694..0000000
--- a/app/package.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
- "name": "app",
- "private": true,
- "version": "0.0.0",
- "type": "module",
- "scripts": {
- "dev": "vite",
- "build": "tsc && vite build",
- "preview": "vite preview",
- "tauri": "tauri"
- },
- "dependencies": {
- "@radix-ui/colors": "^0.1.8",
- "@radix-ui/react-form": "^0.0.2",
- "@radix-ui/react-icons": "^1.3.0",
- "@radix-ui/react-menubar": "^1.0.2",
- "@radix-ui/react-popover": "^1.0.6",
- "@radix-ui/react-scroll-area": "^1.0.4",
- "@radix-ui/react-select": "^1.2.2",
- "@radix-ui/react-slider": "^1.1.1",
- "@radix-ui/react-toggle-group": "^1.0.4",
- "@radix-ui/react-toolbar": "^1.0.3",
- "@tauri-apps/api": "^1.3.0",
- "@tempblade/common": "^2.0.1",
- "@types/d3-array": "^3.0.5",
- "@types/lodash.set": "^4.3.7",
- "@unom/style": "^0.2.14",
- "@visx/axis": "^3.1.0",
- "@visx/event": "^3.0.1",
- "@visx/glyph": "^3.0.0",
- "@visx/gradient": "^3.0.0",
- "@visx/grid": "^3.0.1",
- "@visx/group": "^3.0.0",
- "@visx/responsive": "^3.0.0",
- "@visx/scale": "^3.0.0",
- "@visx/shape": "^3.0.0",
- "@visx/tooltip": "^3.1.2",
- "canvaskit-wasm": "^0.38.1",
- "class-variance-authority": "^0.6.0",
- "clsx": "^1.2.1",
- "framer-motion": "^10.12.12",
- "immer": "^10.0.2",
- "lodash.set": "^4.3.2",
- "lucide-react": "^0.229.0",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "tailwind-merge": "^1.12.0",
- "tailwindcss-animate": "^1.0.5",
- "uuid": "^9.0.0",
- "zod": "^3.21.4",
- "zustand": "^4.3.8"
- },
- "devDependencies": {
- "@tauri-apps/cli": "^1.3.0",
- "@types/node": "^18.7.10",
- "@types/react": "^18.0.15",
- "@types/react-dom": "^18.0.6",
- "@types/uuid": "^9",
- "@vitejs/plugin-react": "^3.0.0",
- "autoprefixer": "^10.4.14",
- "postcss": "^8.4.23",
- "tailwindcss": "^3.3.2",
- "typescript": "^4.9.5",
- "vite": "^4.2.1",
- "vite-tsconfig-paths": "^4.2.0"
- }
-}
diff --git a/app/postcss.config.js b/app/postcss.config.js
deleted file mode 100644
index 2e7af2b..0000000
--- a/app/postcss.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-export default {
- plugins: {
- tailwindcss: {},
- autoprefixer: {},
- },
-}
diff --git a/app/public/canvaskit.wasm b/app/public/canvaskit.wasm
deleted file mode 100644
index 3f92994..0000000
Binary files a/app/public/canvaskit.wasm and /dev/null differ
diff --git a/app/public/tauri.svg b/app/public/tauri.svg
deleted file mode 100644
index 31b62c9..0000000
--- a/app/public/tauri.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
diff --git a/app/public/vite.svg b/app/public/vite.svg
deleted file mode 100644
index e7b8dfb..0000000
--- a/app/public/vite.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/app/src-tauri/.gitignore b/app/src-tauri/.gitignore
deleted file mode 100644
index f4dfb82..0000000
--- a/app/src-tauri/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-# Generated by Cargo
-# will have compiled files and executables
-/target/
-
diff --git a/app/src-tauri/Cargo.lock b/app/src-tauri/Cargo.lock
deleted file mode 100644
index 8e3fb19..0000000
--- a/app/src-tauri/Cargo.lock
+++ /dev/null
@@ -1,4061 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 3
-
-[[package]]
-name = "adler"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
-
-[[package]]
-name = "aho-corasick"
-version = "0.7.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "aho-corasick"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "alloc-no-stdlib"
-version = "2.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
-
-[[package]]
-name = "alloc-stdlib"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
-dependencies = [
- "alloc-no-stdlib",
-]
-
-[[package]]
-name = "android_system_properties"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "anyhow"
-version = "1.0.71"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
-
-[[package]]
-name = "atk"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd"
-dependencies = [
- "atk-sys",
- "bitflags",
- "glib",
- "libc",
-]
-
-[[package]]
-name = "atk-sys"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6"
-dependencies = [
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps 6.1.0",
-]
-
-[[package]]
-name = "autocfg"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-
-[[package]]
-name = "base64"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
-
-[[package]]
-name = "base64"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
-
-[[package]]
-name = "bitflags"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-
-[[package]]
-name = "block"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
-
-[[package]]
-name = "block-buffer"
-version = "0.10.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
-dependencies = [
- "generic-array",
-]
-
-[[package]]
-name = "brotli"
-version = "3.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
-dependencies = [
- "alloc-no-stdlib",
- "alloc-stdlib",
- "brotli-decompressor",
-]
-
-[[package]]
-name = "brotli-decompressor"
-version = "2.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
-dependencies = [
- "alloc-no-stdlib",
- "alloc-stdlib",
-]
-
-[[package]]
-name = "bstr"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09"
-dependencies = [
- "memchr",
- "serde",
-]
-
-[[package]]
-name = "bumpalo"
-version = "3.12.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
-
-[[package]]
-name = "bytemuck"
-version = "1.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
-
-[[package]]
-name = "byteorder"
-version = "1.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
-
-[[package]]
-name = "bytes"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
-
-[[package]]
-name = "cairo-rs"
-version = "0.15.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
-dependencies = [
- "bitflags",
- "cairo-sys-rs",
- "glib",
- "libc",
- "thiserror",
-]
-
-[[package]]
-name = "cairo-sys-rs"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
-dependencies = [
- "glib-sys",
- "libc",
- "system-deps 6.1.0",
-]
-
-[[package]]
-name = "cargo_toml"
-version = "0.15.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f83bc2e401ed041b7057345ebc488c005efa0341d5541ce7004d30458d0090b"
-dependencies = [
- "serde",
- "toml 0.7.3",
-]
-
-[[package]]
-name = "cc"
-version = "1.0.79"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
-
-[[package]]
-name = "cesu8"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
-
-[[package]]
-name = "cfb"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f"
-dependencies = [
- "byteorder",
- "fnv",
- "uuid",
-]
-
-[[package]]
-name = "cfg-expr"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7"
-dependencies = [
- "smallvec",
-]
-
-[[package]]
-name = "cfg-expr"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9"
-dependencies = [
- "smallvec",
- "target-lexicon",
-]
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "chrono"
-version = "0.4.24"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
-dependencies = [
- "iana-time-zone",
- "num-integer",
- "num-traits",
- "serde",
- "winapi",
-]
-
-[[package]]
-name = "cmake"
-version = "0.1.50"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
-dependencies = [
- "cc",
-]
-
-[[package]]
-name = "cocoa"
-version = "0.24.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
-dependencies = [
- "bitflags",
- "block",
- "cocoa-foundation",
- "core-foundation",
- "core-graphics",
- "foreign-types",
- "libc",
- "objc",
-]
-
-[[package]]
-name = "cocoa-foundation"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6"
-dependencies = [
- "bitflags",
- "block",
- "core-foundation",
- "core-graphics-types",
- "foreign-types",
- "libc",
- "objc",
-]
-
-[[package]]
-name = "codespan-reporting"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
-dependencies = [
- "termcolor",
- "unicode-width",
-]
-
-[[package]]
-name = "color_quant"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
-
-[[package]]
-name = "combine"
-version = "4.6.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
-dependencies = [
- "bytes",
- "memchr",
-]
-
-[[package]]
-name = "const-cstr"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed3d0b5ff30645a68f35ece8cea4556ca14ef8a1651455f789a099a0513532a6"
-
-[[package]]
-name = "convert_case"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
-
-[[package]]
-name = "core-foundation"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
-dependencies = [
- "core-foundation-sys",
- "libc",
-]
-
-[[package]]
-name = "core-foundation-sys"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
-
-[[package]]
-name = "core-graphics"
-version = "0.22.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
-dependencies = [
- "bitflags",
- "core-foundation",
- "core-graphics-types",
- "foreign-types",
- "libc",
-]
-
-[[package]]
-name = "core-graphics-types"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
-dependencies = [
- "bitflags",
- "core-foundation",
- "foreign-types",
- "libc",
-]
-
-[[package]]
-name = "core-text"
-version = "19.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25"
-dependencies = [
- "core-foundation",
- "core-graphics",
- "foreign-types",
- "libc",
-]
-
-[[package]]
-name = "cpufeatures"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "crc32fast"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "creator_rs"
-version = "0.1.0"
-dependencies = [
- "font-kit",
- "rayon",
- "serde",
- "serde_json",
- "simple-easing",
- "tauri",
- "uuid",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "crossbeam-channel"
-version = "0.5.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
-dependencies = [
- "cfg-if",
- "crossbeam-utils",
-]
-
-[[package]]
-name = "crossbeam-deque"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
-dependencies = [
- "cfg-if",
- "crossbeam-epoch",
- "crossbeam-utils",
-]
-
-[[package]]
-name = "crossbeam-epoch"
-version = "0.9.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
-dependencies = [
- "autocfg",
- "cfg-if",
- "crossbeam-utils",
- "memoffset 0.9.0",
- "scopeguard",
-]
-
-[[package]]
-name = "crossbeam-utils"
-version = "0.8.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "crypto-common"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
-dependencies = [
- "generic-array",
- "typenum",
-]
-
-[[package]]
-name = "cssparser"
-version = "0.27.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
-dependencies = [
- "cssparser-macros",
- "dtoa-short",
- "itoa 0.4.8",
- "matches",
- "phf 0.8.0",
- "proc-macro2",
- "quote",
- "smallvec",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "cssparser-macros"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
-dependencies = [
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "ctor"
-version = "0.1.26"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
-dependencies = [
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "cty"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
-
-[[package]]
-name = "cxx"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
-dependencies = [
- "cc",
- "cxxbridge-flags",
- "cxxbridge-macro",
- "link-cplusplus",
-]
-
-[[package]]
-name = "cxx-build"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
-dependencies = [
- "cc",
- "codespan-reporting",
- "once_cell",
- "proc-macro2",
- "quote",
- "scratch",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "cxxbridge-flags"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
-
-[[package]]
-name = "cxxbridge-macro"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "darling"
-version = "0.20.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944"
-dependencies = [
- "darling_core",
- "darling_macro",
-]
-
-[[package]]
-name = "darling_core"
-version = "0.20.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb"
-dependencies = [
- "fnv",
- "ident_case",
- "proc-macro2",
- "quote",
- "strsim",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "darling_macro"
-version = "0.20.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a"
-dependencies = [
- "darling_core",
- "quote",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "derive_more"
-version = "0.99.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
-dependencies = [
- "convert_case",
- "proc-macro2",
- "quote",
- "rustc_version 0.4.0",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "digest"
-version = "0.10.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
-dependencies = [
- "block-buffer",
- "crypto-common",
-]
-
-[[package]]
-name = "dirs-next"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
-dependencies = [
- "cfg-if",
- "dirs-sys-next",
-]
-
-[[package]]
-name = "dirs-sys-next"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
-dependencies = [
- "libc",
- "redox_users",
- "winapi",
-]
-
-[[package]]
-name = "dispatch"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
-
-[[package]]
-name = "dlib"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
-dependencies = [
- "libloading",
-]
-
-[[package]]
-name = "dtoa"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
-
-[[package]]
-name = "dtoa-short"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6"
-dependencies = [
- "dtoa",
-]
-
-[[package]]
-name = "dunce"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
-
-[[package]]
-name = "dwrote"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b"
-dependencies = [
- "lazy_static 1.4.0",
- "libc",
- "winapi",
- "wio",
-]
-
-[[package]]
-name = "either"
-version = "1.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
-
-[[package]]
-name = "embed-resource"
-version = "2.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80663502655af01a2902dff3f06869330782267924bf1788410b74edcd93770a"
-dependencies = [
- "cc",
- "rustc_version 0.4.0",
- "toml 0.7.3",
- "vswhom",
- "winreg",
-]
-
-[[package]]
-name = "embed_plist"
-version = "1.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
-
-[[package]]
-name = "encoding_rs"
-version = "0.8.32"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "errno"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
-dependencies = [
- "errno-dragonfly",
- "libc",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "errno-dragonfly"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
-dependencies = [
- "cc",
- "libc",
-]
-
-[[package]]
-name = "fastrand"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
-dependencies = [
- "instant",
-]
-
-[[package]]
-name = "fdeflate"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
-dependencies = [
- "simd-adler32",
-]
-
-[[package]]
-name = "field-offset"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535"
-dependencies = [
- "memoffset 0.8.0",
- "rustc_version 0.4.0",
-]
-
-[[package]]
-name = "filetime"
-version = "0.2.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
-dependencies = [
- "cfg-if",
- "libc",
- "redox_syscall 0.2.16",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "flate2"
-version = "1.0.26"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
-dependencies = [
- "crc32fast",
- "miniz_oxide",
-]
-
-[[package]]
-name = "float-ord"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e"
-
-[[package]]
-name = "fnv"
-version = "1.0.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-
-[[package]]
-name = "font-kit"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21fe28504d371085fae9ac7a3450f0b289ab71e07c8e57baa3fb68b9e57d6ce5"
-dependencies = [
- "bitflags",
- "byteorder",
- "core-foundation",
- "core-graphics",
- "core-text",
- "dirs-next",
- "dwrote",
- "float-ord",
- "freetype",
- "lazy_static 1.4.0",
- "libc",
- "log",
- "pathfinder_geometry",
- "pathfinder_simd",
- "walkdir",
- "winapi",
- "yeslogic-fontconfig-sys",
-]
-
-[[package]]
-name = "foreign-types"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
-dependencies = [
- "foreign-types-shared",
-]
-
-[[package]]
-name = "foreign-types-shared"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
-
-[[package]]
-name = "form_urlencoded"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
-dependencies = [
- "percent-encoding",
-]
-
-[[package]]
-name = "freetype"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6"
-dependencies = [
- "freetype-sys",
- "libc",
-]
-
-[[package]]
-name = "freetype-sys"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a"
-dependencies = [
- "cmake",
- "libc",
- "pkg-config",
-]
-
-[[package]]
-name = "futf"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
-dependencies = [
- "mac",
- "new_debug_unreachable",
-]
-
-[[package]]
-name = "futures-channel"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
-dependencies = [
- "futures-core",
-]
-
-[[package]]
-name = "futures-core"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
-
-[[package]]
-name = "futures-executor"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
-dependencies = [
- "futures-core",
- "futures-task",
- "futures-util",
-]
-
-[[package]]
-name = "futures-io"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
-
-[[package]]
-name = "futures-macro"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "futures-task"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
-
-[[package]]
-name = "futures-util"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
-dependencies = [
- "futures-core",
- "futures-macro",
- "futures-task",
- "pin-project-lite",
- "pin-utils",
- "slab",
-]
-
-[[package]]
-name = "fxhash"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
-dependencies = [
- "byteorder",
-]
-
-[[package]]
-name = "gdk"
-version = "0.15.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8"
-dependencies = [
- "bitflags",
- "cairo-rs",
- "gdk-pixbuf",
- "gdk-sys",
- "gio",
- "glib",
- "libc",
- "pango",
-]
-
-[[package]]
-name = "gdk-pixbuf"
-version = "0.15.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
-dependencies = [
- "bitflags",
- "gdk-pixbuf-sys",
- "gio",
- "glib",
- "libc",
-]
-
-[[package]]
-name = "gdk-pixbuf-sys"
-version = "0.15.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
-dependencies = [
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps 6.1.0",
-]
-
-[[package]]
-name = "gdk-sys"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88"
-dependencies = [
- "cairo-sys-rs",
- "gdk-pixbuf-sys",
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "pango-sys",
- "pkg-config",
- "system-deps 6.1.0",
-]
-
-[[package]]
-name = "gdkwayland-sys"
-version = "0.15.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2"
-dependencies = [
- "gdk-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "pkg-config",
- "system-deps 6.1.0",
-]
-
-[[package]]
-name = "gdkx11-sys"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178"
-dependencies = [
- "gdk-sys",
- "glib-sys",
- "libc",
- "system-deps 6.1.0",
- "x11",
-]
-
-[[package]]
-name = "generator"
-version = "0.7.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3e123d9ae7c02966b4d892e550bdc32164f05853cd40ab570650ad600596a8a"
-dependencies = [
- "cc",
- "libc",
- "log",
- "rustversion",
- "windows 0.48.0",
-]
-
-[[package]]
-name = "generic-array"
-version = "0.14.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
-dependencies = [
- "typenum",
- "version_check",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.1.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi 0.9.0+wasi-snapshot-preview1",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
-dependencies = [
- "cfg-if",
- "js-sys",
- "libc",
- "wasi 0.11.0+wasi-snapshot-preview1",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "gio"
-version = "0.15.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
-dependencies = [
- "bitflags",
- "futures-channel",
- "futures-core",
- "futures-io",
- "gio-sys",
- "glib",
- "libc",
- "once_cell",
- "thiserror",
-]
-
-[[package]]
-name = "gio-sys"
-version = "0.15.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
-dependencies = [
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps 6.1.0",
- "winapi",
-]
-
-[[package]]
-name = "glib"
-version = "0.15.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
-dependencies = [
- "bitflags",
- "futures-channel",
- "futures-core",
- "futures-executor",
- "futures-task",
- "glib-macros",
- "glib-sys",
- "gobject-sys",
- "libc",
- "once_cell",
- "smallvec",
- "thiserror",
-]
-
-[[package]]
-name = "glib-macros"
-version = "0.15.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a"
-dependencies = [
- "anyhow",
- "heck 0.4.1",
- "proc-macro-crate",
- "proc-macro-error",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "glib-sys"
-version = "0.15.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
-dependencies = [
- "libc",
- "system-deps 6.1.0",
-]
-
-[[package]]
-name = "glob"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
-
-[[package]]
-name = "globset"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
-dependencies = [
- "aho-corasick 0.7.20",
- "bstr",
- "fnv",
- "log",
- "regex",
-]
-
-[[package]]
-name = "gobject-sys"
-version = "0.15.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
-dependencies = [
- "glib-sys",
- "libc",
- "system-deps 6.1.0",
-]
-
-[[package]]
-name = "gtk"
-version = "0.15.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0"
-dependencies = [
- "atk",
- "bitflags",
- "cairo-rs",
- "field-offset",
- "futures-channel",
- "gdk",
- "gdk-pixbuf",
- "gio",
- "glib",
- "gtk-sys",
- "gtk3-macros",
- "libc",
- "once_cell",
- "pango",
- "pkg-config",
-]
-
-[[package]]
-name = "gtk-sys"
-version = "0.15.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84"
-dependencies = [
- "atk-sys",
- "cairo-sys-rs",
- "gdk-pixbuf-sys",
- "gdk-sys",
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "pango-sys",
- "system-deps 6.1.0",
-]
-
-[[package]]
-name = "gtk3-macros"
-version = "0.15.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d"
-dependencies = [
- "anyhow",
- "proc-macro-crate",
- "proc-macro-error",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.12.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
-
-[[package]]
-name = "heck"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
-
-[[package]]
-name = "heck"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
-
-[[package]]
-name = "hermit-abi"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
-
-[[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-
-[[package]]
-name = "html5ever"
-version = "0.25.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148"
-dependencies = [
- "log",
- "mac",
- "markup5ever",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "http"
-version = "0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
-dependencies = [
- "bytes",
- "fnv",
- "itoa 1.0.6",
-]
-
-[[package]]
-name = "http-range"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
-
-[[package]]
-name = "iana-time-zone"
-version = "0.1.56"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
-dependencies = [
- "android_system_properties",
- "core-foundation-sys",
- "iana-time-zone-haiku",
- "js-sys",
- "wasm-bindgen",
- "windows 0.48.0",
-]
-
-[[package]]
-name = "iana-time-zone-haiku"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
-dependencies = [
- "cxx",
- "cxx-build",
-]
-
-[[package]]
-name = "ico"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae"
-dependencies = [
- "byteorder",
- "png",
-]
-
-[[package]]
-name = "ident_case"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
-
-[[package]]
-name = "idna"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
-dependencies = [
- "unicode-bidi",
- "unicode-normalization",
-]
-
-[[package]]
-name = "ignore"
-version = "0.4.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
-dependencies = [
- "crossbeam-utils",
- "globset",
- "lazy_static 1.4.0",
- "log",
- "memchr",
- "regex",
- "same-file",
- "thread_local",
- "walkdir",
- "winapi-util",
-]
-
-[[package]]
-name = "image"
-version = "0.24.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a"
-dependencies = [
- "bytemuck",
- "byteorder",
- "color_quant",
- "num-rational",
- "num-traits",
-]
-
-[[package]]
-name = "indexmap"
-version = "1.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
-dependencies = [
- "autocfg",
- "hashbrown",
- "serde",
-]
-
-[[package]]
-name = "infer"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3"
-dependencies = [
- "cfb",
-]
-
-[[package]]
-name = "instant"
-version = "0.1.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "io-lifetimes"
-version = "1.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
-dependencies = [
- "hermit-abi 0.3.1",
- "libc",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "itoa"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
-
-[[package]]
-name = "itoa"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
-
-[[package]]
-name = "javascriptcore-rs"
-version = "0.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c"
-dependencies = [
- "bitflags",
- "glib",
- "javascriptcore-rs-sys",
-]
-
-[[package]]
-name = "javascriptcore-rs-sys"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c"
-dependencies = [
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps 5.0.0",
-]
-
-[[package]]
-name = "jni"
-version = "0.20.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
-dependencies = [
- "cesu8",
- "combine",
- "jni-sys",
- "log",
- "thiserror",
- "walkdir",
-]
-
-[[package]]
-name = "jni-sys"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
-
-[[package]]
-name = "js-sys"
-version = "0.3.62"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5"
-dependencies = [
- "wasm-bindgen",
-]
-
-[[package]]
-name = "json-patch"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f54898088ccb91df1b492cc80029a6fdf1c48ca0db7c6822a8babad69c94658"
-dependencies = [
- "serde",
- "serde_json",
- "thiserror",
- "treediff",
-]
-
-[[package]]
-name = "kuchiki"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358"
-dependencies = [
- "cssparser",
- "html5ever",
- "matches",
- "selectors",
-]
-
-[[package]]
-name = "lazy_static"
-version = "0.2.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-
-[[package]]
-name = "libc"
-version = "0.2.144"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
-
-[[package]]
-name = "libloading"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb"
-dependencies = [
- "cfg-if",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "line-wrap"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
-dependencies = [
- "safemem",
-]
-
-[[package]]
-name = "link-cplusplus"
-version = "1.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
-dependencies = [
- "cc",
-]
-
-[[package]]
-name = "linux-raw-sys"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
-
-[[package]]
-name = "lock_api"
-version = "0.4.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
-dependencies = [
- "autocfg",
- "scopeguard",
-]
-
-[[package]]
-name = "log"
-version = "0.4.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "logging_timer"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64e96f261d684b7089aa576bb74e823241dccd994b27d30fabf1dcb3af284fe9"
-dependencies = [
- "log",
- "logging_timer_proc_macros",
-]
-
-[[package]]
-name = "logging_timer_proc_macros"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10a9062912d7952c5588cc474795e0b9ee008e7e6781127945b85413d4b99d81"
-dependencies = [
- "log",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "loom"
-version = "0.5.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
-dependencies = [
- "cfg-if",
- "generator",
- "scoped-tls",
- "serde",
- "serde_json",
- "tracing",
- "tracing-subscriber",
-]
-
-[[package]]
-name = "mac"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
-
-[[package]]
-name = "malloc_buf"
-version = "0.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "markup5ever"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
-dependencies = [
- "log",
- "phf 0.8.0",
- "phf_codegen",
- "string_cache",
- "string_cache_codegen",
- "tendril",
-]
-
-[[package]]
-name = "matchers"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
-dependencies = [
- "regex-automata",
-]
-
-[[package]]
-name = "matches"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
-
-[[package]]
-name = "memchr"
-version = "2.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
-
-[[package]]
-name = "memoffset"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "memoffset"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "miniz_oxide"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
-dependencies = [
- "adler",
- "simd-adler32",
-]
-
-[[package]]
-name = "ndk"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4"
-dependencies = [
- "bitflags",
- "jni-sys",
- "ndk-sys",
- "num_enum",
- "thiserror",
-]
-
-[[package]]
-name = "ndk-context"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
-
-[[package]]
-name = "ndk-sys"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97"
-dependencies = [
- "jni-sys",
-]
-
-[[package]]
-name = "new_debug_unreachable"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
-
-[[package]]
-name = "nodrop"
-version = "0.1.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
-
-[[package]]
-name = "nu-ansi-term"
-version = "0.46.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
-dependencies = [
- "overload",
- "winapi",
-]
-
-[[package]]
-name = "num-integer"
-version = "0.1.45"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
-dependencies = [
- "autocfg",
- "num-traits",
-]
-
-[[package]]
-name = "num-rational"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
-dependencies = [
- "autocfg",
- "num-integer",
- "num-traits",
-]
-
-[[package]]
-name = "num-traits"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "num_cpus"
-version = "1.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
-dependencies = [
- "hermit-abi 0.2.6",
- "libc",
-]
-
-[[package]]
-name = "num_enum"
-version = "0.5.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
-dependencies = [
- "num_enum_derive",
-]
-
-[[package]]
-name = "num_enum_derive"
-version = "0.5.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
-dependencies = [
- "proc-macro-crate",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "num_threads"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "objc"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
-dependencies = [
- "malloc_buf",
- "objc_exception",
-]
-
-[[package]]
-name = "objc-foundation"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
-dependencies = [
- "block",
- "objc",
- "objc_id",
-]
-
-[[package]]
-name = "objc_exception"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
-dependencies = [
- "cc",
-]
-
-[[package]]
-name = "objc_id"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
-dependencies = [
- "objc",
-]
-
-[[package]]
-name = "once_cell"
-version = "1.17.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
-
-[[package]]
-name = "open"
-version = "3.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8"
-dependencies = [
- "pathdiff",
- "windows-sys 0.42.0",
-]
-
-[[package]]
-name = "overload"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
-
-[[package]]
-name = "pango"
-version = "0.15.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
-dependencies = [
- "bitflags",
- "glib",
- "libc",
- "once_cell",
- "pango-sys",
-]
-
-[[package]]
-name = "pango-sys"
-version = "0.15.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
-dependencies = [
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps 6.1.0",
-]
-
-[[package]]
-name = "parking_lot"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
-dependencies = [
- "lock_api",
- "parking_lot_core",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.9.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
-dependencies = [
- "cfg-if",
- "libc",
- "redox_syscall 0.2.16",
- "smallvec",
- "windows-sys 0.45.0",
-]
-
-[[package]]
-name = "pathdiff"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
-
-[[package]]
-name = "pathfinder_geometry"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3"
-dependencies = [
- "log",
- "pathfinder_simd",
-]
-
-[[package]]
-name = "pathfinder_simd"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39fe46acc5503595e5949c17b818714d26fdf9b4920eacf3b2947f0199f4a6ff"
-dependencies = [
- "rustc_version 0.3.3",
-]
-
-[[package]]
-name = "percent-encoding"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
-
-[[package]]
-name = "pest"
-version = "2.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f73935e4d55e2abf7f130186537b19e7a4abc886a0252380b59248af473a3fc9"
-dependencies = [
- "thiserror",
- "ucd-trie",
-]
-
-[[package]]
-name = "phf"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
-dependencies = [
- "phf_macros 0.8.0",
- "phf_shared 0.8.0",
- "proc-macro-hack",
-]
-
-[[package]]
-name = "phf"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
-dependencies = [
- "phf_macros 0.10.0",
- "phf_shared 0.10.0",
- "proc-macro-hack",
-]
-
-[[package]]
-name = "phf_codegen"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
-dependencies = [
- "phf_generator 0.8.0",
- "phf_shared 0.8.0",
-]
-
-[[package]]
-name = "phf_generator"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
-dependencies = [
- "phf_shared 0.8.0",
- "rand 0.7.3",
-]
-
-[[package]]
-name = "phf_generator"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
-dependencies = [
- "phf_shared 0.10.0",
- "rand 0.8.5",
-]
-
-[[package]]
-name = "phf_macros"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
-dependencies = [
- "phf_generator 0.8.0",
- "phf_shared 0.8.0",
- "proc-macro-hack",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "phf_macros"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
-dependencies = [
- "phf_generator 0.10.0",
- "phf_shared 0.10.0",
- "proc-macro-hack",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "phf_shared"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
-dependencies = [
- "siphasher",
-]
-
-[[package]]
-name = "phf_shared"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
-dependencies = [
- "siphasher",
-]
-
-[[package]]
-name = "pin-project-lite"
-version = "0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
-
-[[package]]
-name = "pin-utils"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
-
-[[package]]
-name = "pkg-config"
-version = "0.3.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
-
-[[package]]
-name = "plist"
-version = "1.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590"
-dependencies = [
- "base64 0.21.0",
- "indexmap",
- "line-wrap",
- "quick-xml",
- "serde",
- "time",
-]
-
-[[package]]
-name = "png"
-version = "0.17.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa"
-dependencies = [
- "bitflags",
- "crc32fast",
- "fdeflate",
- "flate2",
- "miniz_oxide",
-]
-
-[[package]]
-name = "ppv-lite86"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
-
-[[package]]
-name = "precomputed-hash"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
-
-[[package]]
-name = "proc-macro-crate"
-version = "1.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
-dependencies = [
- "once_cell",
- "toml_edit",
-]
-
-[[package]]
-name = "proc-macro-error"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-dependencies = [
- "proc-macro-error-attr",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-error-attr"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-dependencies = [
- "proc-macro2",
- "quote",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-hack"
-version = "0.5.20+deprecated"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.56"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "quick-xml"
-version = "0.28.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "rand"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
-dependencies = [
- "getrandom 0.1.16",
- "libc",
- "rand_chacha 0.2.2",
- "rand_core 0.5.1",
- "rand_hc",
- "rand_pcg",
-]
-
-[[package]]
-name = "rand"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-dependencies = [
- "libc",
- "rand_chacha 0.3.1",
- "rand_core 0.6.4",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
-dependencies = [
- "ppv-lite86",
- "rand_core 0.5.1",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-dependencies = [
- "ppv-lite86",
- "rand_core 0.6.4",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
-dependencies = [
- "getrandom 0.1.16",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
-dependencies = [
- "getrandom 0.2.9",
-]
-
-[[package]]
-name = "rand_hc"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
-dependencies = [
- "rand_core 0.5.1",
-]
-
-[[package]]
-name = "rand_pcg"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
-dependencies = [
- "rand_core 0.5.1",
-]
-
-[[package]]
-name = "raw-window-handle"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed7e3d950b66e19e0c372f3fa3fbbcf85b1746b571f74e0c2af6042a5c93420a"
-dependencies = [
- "cty",
-]
-
-[[package]]
-name = "rayon"
-version = "1.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
-dependencies = [
- "either",
- "rayon-core",
-]
-
-[[package]]
-name = "rayon-core"
-version = "1.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
-dependencies = [
- "crossbeam-channel",
- "crossbeam-deque",
- "crossbeam-utils",
- "num_cpus",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-dependencies = [
- "bitflags",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
-dependencies = [
- "bitflags",
-]
-
-[[package]]
-name = "redox_users"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
-dependencies = [
- "getrandom 0.2.9",
- "redox_syscall 0.2.16",
- "thiserror",
-]
-
-[[package]]
-name = "regex"
-version = "1.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
-dependencies = [
- "aho-corasick 1.0.1",
- "memchr",
- "regex-syntax 0.7.1",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
-dependencies = [
- "regex-syntax 0.6.29",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.6.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
-
-[[package]]
-name = "regex-syntax"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
-
-[[package]]
-name = "rfd"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea"
-dependencies = [
- "block",
- "dispatch",
- "glib-sys",
- "gobject-sys",
- "gtk-sys",
- "js-sys",
- "lazy_static 1.4.0",
- "log",
- "objc",
- "objc-foundation",
- "objc_id",
- "raw-window-handle",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
- "windows 0.37.0",
-]
-
-[[package]]
-name = "rustc_version"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
-dependencies = [
- "semver 0.11.0",
-]
-
-[[package]]
-name = "rustc_version"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
-dependencies = [
- "semver 1.0.17",
-]
-
-[[package]]
-name = "rustix"
-version = "0.37.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
-dependencies = [
- "bitflags",
- "errno",
- "io-lifetimes",
- "libc",
- "linux-raw-sys",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "rustversion"
-version = "1.0.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
-
-[[package]]
-name = "ryu"
-version = "1.0.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
-
-[[package]]
-name = "safemem"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
-
-[[package]]
-name = "same-file"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "scoped-tls"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
-
-[[package]]
-name = "scopeguard"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-
-[[package]]
-name = "scratch"
-version = "1.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
-
-[[package]]
-name = "selectors"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe"
-dependencies = [
- "bitflags",
- "cssparser",
- "derive_more",
- "fxhash",
- "log",
- "matches",
- "phf 0.8.0",
- "phf_codegen",
- "precomputed-hash",
- "servo_arc",
- "smallvec",
- "thin-slice",
-]
-
-[[package]]
-name = "semver"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
-dependencies = [
- "semver-parser",
-]
-
-[[package]]
-name = "semver"
-version = "1.0.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "semver-parser"
-version = "0.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
-dependencies = [
- "pest",
-]
-
-[[package]]
-name = "serde"
-version = "1.0.163"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.163"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.96"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
-dependencies = [
- "itoa 1.0.6",
- "ryu",
- "serde",
-]
-
-[[package]]
-name = "serde_repr"
-version = "0.1.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "serde_spanned"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "serde_with"
-version = "3.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f02d8aa6e3c385bf084924f660ce2a3a6bd333ba55b35e8590b321f35d88513"
-dependencies = [
- "base64 0.21.0",
- "chrono",
- "hex",
- "indexmap",
- "serde",
- "serde_json",
- "serde_with_macros",
- "time",
-]
-
-[[package]]
-name = "serde_with_macros"
-version = "3.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edc7d5d3932fb12ce722ee5e64dd38c504efba37567f0c402f6ca728c3b8b070"
-dependencies = [
- "darling",
- "proc-macro2",
- "quote",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "serialize-to-javascript"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
-dependencies = [
- "serde",
- "serde_json",
- "serialize-to-javascript-impl",
-]
-
-[[package]]
-name = "serialize-to-javascript-impl"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "servo_arc"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432"
-dependencies = [
- "nodrop",
- "stable_deref_trait",
-]
-
-[[package]]
-name = "sha2"
-version = "0.10.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
-dependencies = [
- "cfg-if",
- "cpufeatures",
- "digest",
-]
-
-[[package]]
-name = "sharded-slab"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
-dependencies = [
- "lazy_static 1.4.0",
-]
-
-[[package]]
-name = "simd-adler32"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f"
-
-[[package]]
-name = "simple-easing"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "832ddd7df0d98d6fd93b973c330b7c8e0742d5cb8f1afc7dea89dba4d2531aa1"
-
-[[package]]
-name = "siphasher"
-version = "0.3.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
-
-[[package]]
-name = "slab"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "smallvec"
-version = "1.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
-
-[[package]]
-name = "soup2"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0"
-dependencies = [
- "bitflags",
- "gio",
- "glib",
- "libc",
- "once_cell",
- "soup2-sys",
-]
-
-[[package]]
-name = "soup2-sys"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf"
-dependencies = [
- "bitflags",
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps 5.0.0",
-]
-
-[[package]]
-name = "stable_deref_trait"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
-
-[[package]]
-name = "state"
-version = "0.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b"
-dependencies = [
- "loom",
-]
-
-[[package]]
-name = "string_cache"
-version = "0.8.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
-dependencies = [
- "new_debug_unreachable",
- "once_cell",
- "parking_lot",
- "phf_shared 0.10.0",
- "precomputed-hash",
- "serde",
-]
-
-[[package]]
-name = "string_cache_codegen"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
-dependencies = [
- "phf_generator 0.10.0",
- "phf_shared 0.10.0",
- "proc-macro2",
- "quote",
-]
-
-[[package]]
-name = "strsim"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
-
-[[package]]
-name = "syn"
-version = "1.0.109"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "syn"
-version = "2.0.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "system-deps"
-version = "5.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e"
-dependencies = [
- "cfg-expr 0.9.1",
- "heck 0.3.3",
- "pkg-config",
- "toml 0.5.11",
- "version-compare 0.0.11",
-]
-
-[[package]]
-name = "system-deps"
-version = "6.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2"
-dependencies = [
- "cfg-expr 0.15.1",
- "heck 0.4.1",
- "pkg-config",
- "toml 0.7.3",
- "version-compare 0.1.1",
-]
-
-[[package]]
-name = "tao"
-version = "0.16.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd3cde9c0cd2b872616bba26b818e0d6469330196869d7e5000dba96ce9431df"
-dependencies = [
- "bitflags",
- "cairo-rs",
- "cc",
- "cocoa",
- "core-foundation",
- "core-graphics",
- "crossbeam-channel",
- "dispatch",
- "gdk",
- "gdk-pixbuf",
- "gdk-sys",
- "gdkwayland-sys",
- "gdkx11-sys",
- "gio",
- "glib",
- "glib-sys",
- "gtk",
- "image",
- "instant",
- "jni",
- "lazy_static 1.4.0",
- "libc",
- "log",
- "ndk",
- "ndk-context",
- "ndk-sys",
- "objc",
- "once_cell",
- "parking_lot",
- "png",
- "raw-window-handle",
- "scopeguard",
- "serde",
- "tao-macros",
- "unicode-segmentation",
- "uuid",
- "windows 0.39.0",
- "windows-implement",
- "x11-dl",
-]
-
-[[package]]
-name = "tao-macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "tar"
-version = "0.4.38"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
-dependencies = [
- "filetime",
- "libc",
- "xattr",
-]
-
-[[package]]
-name = "target-lexicon"
-version = "0.12.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5"
-
-[[package]]
-name = "tauri"
-version = "1.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fbe522898e35407a8e60dc3870f7579fea2fc262a6a6072eccdd37ae1e1d91e"
-dependencies = [
- "anyhow",
- "cocoa",
- "dirs-next",
- "embed_plist",
- "encoding_rs",
- "flate2",
- "futures-util",
- "glib",
- "glob",
- "gtk",
- "heck 0.4.1",
- "http",
- "ignore",
- "objc",
- "once_cell",
- "open",
- "percent-encoding",
- "rand 0.8.5",
- "raw-window-handle",
- "regex",
- "rfd",
- "semver 1.0.17",
- "serde",
- "serde_json",
- "serde_repr",
- "serialize-to-javascript",
- "state",
- "tar",
- "tauri-macros",
- "tauri-runtime",
- "tauri-runtime-wry",
- "tauri-utils",
- "tempfile",
- "thiserror",
- "tokio",
- "url",
- "uuid",
- "webkit2gtk",
- "webview2-com",
- "windows 0.39.0",
-]
-
-[[package]]
-name = "tauri-build"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d2edd6a259b5591c8efdeb9d5702cb53515b82a6affebd55c7fd6d3a27b7d1b"
-dependencies = [
- "anyhow",
- "cargo_toml",
- "heck 0.4.1",
- "json-patch",
- "semver 1.0.17",
- "serde",
- "serde_json",
- "tauri-utils",
- "tauri-winres",
-]
-
-[[package]]
-name = "tauri-codegen"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54ad2d49fdeab4a08717f5b49a163bdc72efc3b1950b6758245fcde79b645e1a"
-dependencies = [
- "base64 0.21.0",
- "brotli",
- "ico",
- "json-patch",
- "plist",
- "png",
- "proc-macro2",
- "quote",
- "regex",
- "semver 1.0.17",
- "serde",
- "serde_json",
- "sha2",
- "tauri-utils",
- "thiserror",
- "time",
- "uuid",
- "walkdir",
-]
-
-[[package]]
-name = "tauri-macros"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8eb12a2454e747896929338d93b0642144bb51e0dddbb36e579035731f0d76b7"
-dependencies = [
- "heck 0.4.1",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
- "tauri-codegen",
- "tauri-utils",
-]
-
-[[package]]
-name = "tauri-runtime"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "108683199cb18f96d2d4134187bb789964143c845d2d154848dda209191fd769"
-dependencies = [
- "gtk",
- "http",
- "http-range",
- "rand 0.8.5",
- "raw-window-handle",
- "serde",
- "serde_json",
- "tauri-utils",
- "thiserror",
- "url",
- "uuid",
- "webview2-com",
- "windows 0.39.0",
-]
-
-[[package]]
-name = "tauri-runtime-wry"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b7aa256a1407a3a091b5d843eccc1a5042289baf0a43d1179d9f0fcfea37c1b"
-dependencies = [
- "cocoa",
- "gtk",
- "percent-encoding",
- "rand 0.8.5",
- "raw-window-handle",
- "tauri-runtime",
- "tauri-utils",
- "uuid",
- "webkit2gtk",
- "webview2-com",
- "windows 0.39.0",
- "wry",
-]
-
-[[package]]
-name = "tauri-utils"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03fc02bb6072bb397e1d473c6f76c953cda48b4a2d0cce605df284aa74a12e84"
-dependencies = [
- "brotli",
- "ctor",
- "dunce",
- "glob",
- "heck 0.4.1",
- "html5ever",
- "infer",
- "json-patch",
- "kuchiki",
- "memchr",
- "phf 0.10.1",
- "proc-macro2",
- "quote",
- "semver 1.0.17",
- "serde",
- "serde_json",
- "serde_with",
- "thiserror",
- "url",
- "walkdir",
- "windows 0.39.0",
-]
-
-[[package]]
-name = "tauri-winres"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb"
-dependencies = [
- "embed-resource",
- "toml 0.7.3",
-]
-
-[[package]]
-name = "tempblade-creator-app"
-version = "0.0.0"
-dependencies = [
- "creator_rs",
- "logging_timer",
- "serde",
- "serde_json",
- "tauri",
- "tauri-build",
- "tint",
-]
-
-[[package]]
-name = "tempfile"
-version = "3.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
-dependencies = [
- "cfg-if",
- "fastrand",
- "redox_syscall 0.3.5",
- "rustix",
- "windows-sys 0.45.0",
-]
-
-[[package]]
-name = "tendril"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
-dependencies = [
- "futf",
- "mac",
- "utf-8",
-]
-
-[[package]]
-name = "termcolor"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "thin-slice"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
-
-[[package]]
-name = "thiserror"
-version = "1.0.40"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
-dependencies = [
- "thiserror-impl",
-]
-
-[[package]]
-name = "thiserror-impl"
-version = "1.0.40"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "thread_local"
-version = "1.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
-dependencies = [
- "cfg-if",
- "once_cell",
-]
-
-[[package]]
-name = "time"
-version = "0.3.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c"
-dependencies = [
- "itoa 1.0.6",
- "libc",
- "num_threads",
- "serde",
-]
-
-[[package]]
-name = "tint"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7af24570664a3074673dbbf69a65bdae0ae0b72f2949b1adfbacb736ee4d6896"
-dependencies = [
- "lazy_static 0.2.11",
-]
-
-[[package]]
-name = "tinyvec"
-version = "1.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
-dependencies = [
- "tinyvec_macros",
-]
-
-[[package]]
-name = "tinyvec_macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
-
-[[package]]
-name = "tokio"
-version = "1.28.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105"
-dependencies = [
- "autocfg",
- "bytes",
- "num_cpus",
- "pin-project-lite",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "toml"
-version = "0.5.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "toml"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
-dependencies = [
- "serde",
- "serde_spanned",
- "toml_datetime",
- "toml_edit",
-]
-
-[[package]]
-name = "toml_datetime"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "toml_edit"
-version = "0.19.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
-dependencies = [
- "indexmap",
- "serde",
- "serde_spanned",
- "toml_datetime",
- "winnow",
-]
-
-[[package]]
-name = "tracing"
-version = "0.1.37"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
-dependencies = [
- "cfg-if",
- "pin-project-lite",
- "tracing-attributes",
- "tracing-core",
-]
-
-[[package]]
-name = "tracing-attributes"
-version = "0.1.24"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "tracing-core"
-version = "0.1.30"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
-dependencies = [
- "once_cell",
- "valuable",
-]
-
-[[package]]
-name = "tracing-log"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
-dependencies = [
- "lazy_static 1.4.0",
- "log",
- "tracing-core",
-]
-
-[[package]]
-name = "tracing-subscriber"
-version = "0.3.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
-dependencies = [
- "matchers",
- "nu-ansi-term",
- "once_cell",
- "regex",
- "sharded-slab",
- "smallvec",
- "thread_local",
- "tracing",
- "tracing-core",
- "tracing-log",
-]
-
-[[package]]
-name = "treediff"
-version = "4.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303"
-dependencies = [
- "serde_json",
-]
-
-[[package]]
-name = "typenum"
-version = "1.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
-
-[[package]]
-name = "ucd-trie"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
-
-[[package]]
-name = "unicode-bidi"
-version = "0.3.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
-
-[[package]]
-name = "unicode-normalization"
-version = "0.1.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
-dependencies = [
- "tinyvec",
-]
-
-[[package]]
-name = "unicode-segmentation"
-version = "1.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
-
-[[package]]
-name = "unicode-width"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
-
-[[package]]
-name = "url"
-version = "2.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
-dependencies = [
- "form_urlencoded",
- "idna",
- "percent-encoding",
- "serde",
-]
-
-[[package]]
-name = "utf-8"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
-
-[[package]]
-name = "uuid"
-version = "1.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2"
-dependencies = [
- "getrandom 0.2.9",
- "uuid-macro-internal",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "uuid-macro-internal"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8614dda80b9075fbca36bc31b58d1447715b1236af98dee21db521c47a0cc2c0"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "valuable"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
-
-[[package]]
-name = "version-compare"
-version = "0.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
-
-[[package]]
-name = "version-compare"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
-
-[[package]]
-name = "version_check"
-version = "0.9.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-
-[[package]]
-name = "vswhom"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
-dependencies = [
- "libc",
- "vswhom-sys",
-]
-
-[[package]]
-name = "vswhom-sys"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18"
-dependencies = [
- "cc",
- "libc",
-]
-
-[[package]]
-name = "walkdir"
-version = "2.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
-dependencies = [
- "same-file",
- "winapi-util",
-]
-
-[[package]]
-name = "wasi"
-version = "0.9.0+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
-
-[[package]]
-name = "wasi"
-version = "0.11.0+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
-
-[[package]]
-name = "wasm-bindgen"
-version = "0.2.85"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4"
-dependencies = [
- "cfg-if",
- "wasm-bindgen-macro",
-]
-
-[[package]]
-name = "wasm-bindgen-backend"
-version = "0.2.85"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822"
-dependencies = [
- "bumpalo",
- "log",
- "once_cell",
- "proc-macro2",
- "quote",
- "syn 2.0.16",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-futures"
-version = "0.4.35"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "083abe15c5d88556b77bdf7aef403625be9e327ad37c62c4e4129af740168163"
-dependencies = [
- "cfg-if",
- "js-sys",
- "wasm-bindgen",
- "web-sys",
-]
-
-[[package]]
-name = "wasm-bindgen-macro"
-version = "0.2.85"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434"
-dependencies = [
- "quote",
- "wasm-bindgen-macro-support",
-]
-
-[[package]]
-name = "wasm-bindgen-macro-support"
-version = "0.2.85"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.16",
- "wasm-bindgen-backend",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-shared"
-version = "0.2.85"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb"
-
-[[package]]
-name = "web-sys"
-version = "0.3.62"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721"
-dependencies = [
- "js-sys",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "webkit2gtk"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370"
-dependencies = [
- "bitflags",
- "cairo-rs",
- "gdk",
- "gdk-sys",
- "gio",
- "gio-sys",
- "glib",
- "glib-sys",
- "gobject-sys",
- "gtk",
- "gtk-sys",
- "javascriptcore-rs",
- "libc",
- "once_cell",
- "soup2",
- "webkit2gtk-sys",
-]
-
-[[package]]
-name = "webkit2gtk-sys"
-version = "0.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3"
-dependencies = [
- "atk-sys",
- "bitflags",
- "cairo-sys-rs",
- "gdk-pixbuf-sys",
- "gdk-sys",
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "gtk-sys",
- "javascriptcore-rs-sys",
- "libc",
- "pango-sys",
- "pkg-config",
- "soup2-sys",
- "system-deps 6.1.0",
-]
-
-[[package]]
-name = "webview2-com"
-version = "0.19.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178"
-dependencies = [
- "webview2-com-macros",
- "webview2-com-sys",
- "windows 0.39.0",
- "windows-implement",
-]
-
-[[package]]
-name = "webview2-com-macros"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "webview2-com-sys"
-version = "0.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7"
-dependencies = [
- "regex",
- "serde",
- "serde_json",
- "thiserror",
- "windows 0.39.0",
- "windows-bindgen",
- "windows-metadata",
-]
-
-[[package]]
-name = "winapi"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-dependencies = [
- "winapi-i686-pc-windows-gnu",
- "winapi-x86_64-pc-windows-gnu",
-]
-
-[[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-[[package]]
-name = "winapi-util"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-
-[[package]]
-name = "windows"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647"
-dependencies = [
- "windows_aarch64_msvc 0.37.0",
- "windows_i686_gnu 0.37.0",
- "windows_i686_msvc 0.37.0",
- "windows_x86_64_gnu 0.37.0",
- "windows_x86_64_msvc 0.37.0",
-]
-
-[[package]]
-name = "windows"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
-dependencies = [
- "windows-implement",
- "windows_aarch64_msvc 0.39.0",
- "windows_i686_gnu 0.39.0",
- "windows_i686_msvc 0.39.0",
- "windows_x86_64_gnu 0.39.0",
- "windows_x86_64_msvc 0.39.0",
-]
-
-[[package]]
-name = "windows"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
-dependencies = [
- "windows-targets 0.48.0",
-]
-
-[[package]]
-name = "windows-bindgen"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41"
-dependencies = [
- "windows-metadata",
- "windows-tokens",
-]
-
-[[package]]
-name = "windows-implement"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7"
-dependencies = [
- "syn 1.0.109",
- "windows-tokens",
-]
-
-[[package]]
-name = "windows-metadata"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278"
-
-[[package]]
-name = "windows-sys"
-version = "0.42.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
-dependencies = [
- "windows_aarch64_gnullvm 0.42.2",
- "windows_aarch64_msvc 0.42.2",
- "windows_i686_gnu 0.42.2",
- "windows_i686_msvc 0.42.2",
- "windows_x86_64_gnu 0.42.2",
- "windows_x86_64_gnullvm 0.42.2",
- "windows_x86_64_msvc 0.42.2",
-]
-
-[[package]]
-name = "windows-sys"
-version = "0.45.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
-dependencies = [
- "windows-targets 0.42.2",
-]
-
-[[package]]
-name = "windows-sys"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
-dependencies = [
- "windows-targets 0.48.0",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
-dependencies = [
- "windows_aarch64_gnullvm 0.42.2",
- "windows_aarch64_msvc 0.42.2",
- "windows_i686_gnu 0.42.2",
- "windows_i686_msvc 0.42.2",
- "windows_x86_64_gnu 0.42.2",
- "windows_x86_64_gnullvm 0.42.2",
- "windows_x86_64_msvc 0.42.2",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
-dependencies = [
- "windows_aarch64_gnullvm 0.48.0",
- "windows_aarch64_msvc 0.48.0",
- "windows_i686_gnu 0.48.0",
- "windows_i686_msvc 0.48.0",
- "windows_x86_64_gnu 0.48.0",
- "windows_x86_64_gnullvm 0.48.0",
- "windows_x86_64_msvc 0.48.0",
-]
-
-[[package]]
-name = "windows-tokens"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597"
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.39.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
-
-[[package]]
-name = "winnow"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "winreg"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189"
-dependencies = [
- "cfg-if",
- "winapi",
-]
-
-[[package]]
-name = "wio"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "wry"
-version = "0.24.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33748f35413c8a98d45f7a08832d848c0c5915501803d1faade5a4ebcd258cea"
-dependencies = [
- "base64 0.13.1",
- "block",
- "cocoa",
- "core-graphics",
- "crossbeam-channel",
- "dunce",
- "gdk",
- "gio",
- "glib",
- "gtk",
- "html5ever",
- "http",
- "kuchiki",
- "libc",
- "log",
- "objc",
- "objc_id",
- "once_cell",
- "serde",
- "serde_json",
- "sha2",
- "soup2",
- "tao",
- "thiserror",
- "url",
- "webkit2gtk",
- "webkit2gtk-sys",
- "webview2-com",
- "windows 0.39.0",
- "windows-implement",
-]
-
-[[package]]
-name = "x11"
-version = "2.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
-dependencies = [
- "libc",
- "pkg-config",
-]
-
-[[package]]
-name = "x11-dl"
-version = "2.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
-dependencies = [
- "libc",
- "once_cell",
- "pkg-config",
-]
-
-[[package]]
-name = "xattr"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "yeslogic-fontconfig-sys"
-version = "3.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2bbd69036d397ebbff671b1b8e4d918610c181c5a16073b96f984a38d08c386"
-dependencies = [
- "const-cstr",
- "dlib",
- "once_cell",
- "pkg-config",
-]
diff --git a/app/src-tauri/Cargo.toml b/app/src-tauri/Cargo.toml
deleted file mode 100644
index e5a71f2..0000000
--- a/app/src-tauri/Cargo.toml
+++ /dev/null
@@ -1,31 +0,0 @@
-[package]
-name = "tempblade-creator-app"
-version = "0.0.0"
-description = "An open motion design tool written in rust"
-authors = ["enricobuehler"]
-license = "BSD 3-Clause"
-repository = "https://git.unom.io/tempblade/creator"
-edition = "2021"
-
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-
-[build-dependencies]
-tauri-build = { version = "1.4", features = [] }
-
-
-[dependencies]
-creator_core = { path = "../../lib/creator_rs", features = [
- "fonts",
- "parallelization",
- "tauri",
-], version = "*", package = "creator_rs" }
-tauri = { version = "1.4", features = ["dialog-open", "dialog-save", "shell-open"] }
-serde = { version = "1.0", features = ["derive", "rc"] }
-serde_json = "1.0"
-tint = "1.0.0"
-logging_timer = "1.1.0"
-
-[features]
-# this feature is used for production builds or when `devPath` points to the filesystem
-# DO NOT REMOVE!!
-custom-protocol = ["tauri/custom-protocol"]
diff --git a/app/src-tauri/build.rs b/app/src-tauri/build.rs
deleted file mode 100644
index 795b9b7..0000000
--- a/app/src-tauri/build.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-fn main() {
- tauri_build::build()
-}
diff --git a/app/src-tauri/icons/128x128.png b/app/src-tauri/icons/128x128.png
deleted file mode 100644
index 8d0dd67..0000000
Binary files a/app/src-tauri/icons/128x128.png and /dev/null differ
diff --git a/app/src-tauri/icons/128x128@2x.png b/app/src-tauri/icons/128x128@2x.png
deleted file mode 100644
index 283d004..0000000
Binary files a/app/src-tauri/icons/128x128@2x.png and /dev/null differ
diff --git a/app/src-tauri/icons/32x32.png b/app/src-tauri/icons/32x32.png
deleted file mode 100644
index 2e7f186..0000000
Binary files a/app/src-tauri/icons/32x32.png and /dev/null differ
diff --git a/app/src-tauri/icons/Square107x107Logo.png b/app/src-tauri/icons/Square107x107Logo.png
deleted file mode 100644
index 069045e..0000000
Binary files a/app/src-tauri/icons/Square107x107Logo.png and /dev/null differ
diff --git a/app/src-tauri/icons/Square142x142Logo.png b/app/src-tauri/icons/Square142x142Logo.png
deleted file mode 100644
index dcecda4..0000000
Binary files a/app/src-tauri/icons/Square142x142Logo.png and /dev/null differ
diff --git a/app/src-tauri/icons/Square150x150Logo.png b/app/src-tauri/icons/Square150x150Logo.png
deleted file mode 100644
index 42ed661..0000000
Binary files a/app/src-tauri/icons/Square150x150Logo.png and /dev/null differ
diff --git a/app/src-tauri/icons/Square284x284Logo.png b/app/src-tauri/icons/Square284x284Logo.png
deleted file mode 100644
index 3bfb930..0000000
Binary files a/app/src-tauri/icons/Square284x284Logo.png and /dev/null differ
diff --git a/app/src-tauri/icons/Square30x30Logo.png b/app/src-tauri/icons/Square30x30Logo.png
deleted file mode 100644
index f25cfc4..0000000
Binary files a/app/src-tauri/icons/Square30x30Logo.png and /dev/null differ
diff --git a/app/src-tauri/icons/Square310x310Logo.png b/app/src-tauri/icons/Square310x310Logo.png
deleted file mode 100644
index bd2d209..0000000
Binary files a/app/src-tauri/icons/Square310x310Logo.png and /dev/null differ
diff --git a/app/src-tauri/icons/Square44x44Logo.png b/app/src-tauri/icons/Square44x44Logo.png
deleted file mode 100644
index 7291761..0000000
Binary files a/app/src-tauri/icons/Square44x44Logo.png and /dev/null differ
diff --git a/app/src-tauri/icons/Square71x71Logo.png b/app/src-tauri/icons/Square71x71Logo.png
deleted file mode 100644
index 8355891..0000000
Binary files a/app/src-tauri/icons/Square71x71Logo.png and /dev/null differ
diff --git a/app/src-tauri/icons/Square89x89Logo.png b/app/src-tauri/icons/Square89x89Logo.png
deleted file mode 100644
index 87c7e13..0000000
Binary files a/app/src-tauri/icons/Square89x89Logo.png and /dev/null differ
diff --git a/app/src-tauri/icons/StoreLogo.png b/app/src-tauri/icons/StoreLogo.png
deleted file mode 100644
index f6e8e5b..0000000
Binary files a/app/src-tauri/icons/StoreLogo.png and /dev/null differ
diff --git a/app/src-tauri/icons/icon.icns b/app/src-tauri/icons/icon.icns
deleted file mode 100644
index 0fdba38..0000000
Binary files a/app/src-tauri/icons/icon.icns and /dev/null differ
diff --git a/app/src-tauri/icons/icon.ico b/app/src-tauri/icons/icon.ico
deleted file mode 100644
index c3fef03..0000000
Binary files a/app/src-tauri/icons/icon.ico and /dev/null differ
diff --git a/app/src-tauri/icons/icon.png b/app/src-tauri/icons/icon.png
deleted file mode 100644
index f8260b1..0000000
Binary files a/app/src-tauri/icons/icon.png and /dev/null differ
diff --git a/app/src-tauri/src/main.rs b/app/src-tauri/src/main.rs
deleted file mode 100644
index 60894e8..0000000
--- a/app/src-tauri/src/main.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-// Prevents additional console window on Windows in release, DO NOT REMOVE!!
-#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
-
-use creator_core::{
- __cmd__calculate_timeline_at_curr_frame, __cmd__get_system_families, __cmd__get_system_font,
- __cmd__get_system_fonts, __cmd__get_values_at_frame_range_from_animated_float,
- __cmd__get_values_at_frame_range_from_animated_float_vec2,
- __cmd__get_values_at_frame_range_from_animated_float_vec3,
- animation::{
- primitives::values::animated_values::{
- get_values_at_frame_range_from_animated_float,
- get_values_at_frame_range_from_animated_float_vec2,
- get_values_at_frame_range_from_animated_float_vec3,
- },
- timeline::calculate_timeline_at_curr_frame,
- },
- fonts::fonts::{get_system_families, get_system_font, get_system_fonts},
-};
-
-fn main() {
- tauri::Builder::default()
- .invoke_handler(tauri::generate_handler![
- calculate_timeline_at_curr_frame,
- get_system_font,
- get_system_families,
- get_system_fonts,
- get_values_at_frame_range_from_animated_float,
- get_values_at_frame_range_from_animated_float_vec2,
- get_values_at_frame_range_from_animated_float_vec3
- ])
- .run(tauri::generate_context!())
- .expect("error while running tauri application");
-}
diff --git a/app/src-tauri/tauri.conf.json b/app/src-tauri/tauri.conf.json
deleted file mode 100644
index 4ae1b5e..0000000
--- a/app/src-tauri/tauri.conf.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "build": {
- "beforeDevCommand": "yarn dev",
- "beforeBuildCommand": "yarn build",
- "devPath": "http://localhost:1420",
- "distDir": "../dist",
- "withGlobalTauri": false
- },
- "package": {
- "productName": "tempblade Creator",
- "version": "0.1.0"
- },
- "tauri": {
- "allowlist": {
- "all": false,
- "dialog": {
- "open": true,
- "save": true
- },
- "shell": {
- "all": false,
- "open": true
- }
- },
- "bundle": {
- "active": true,
- "icon": [
- "icons/32x32.png",
- "icons/128x128.png",
- "icons/128x128@2x.png",
- "icons/icon.icns",
- "icons/icon.ico"
- ],
- "identifier": "com.tempblade.creator",
- "targets": "all"
- },
- "security": {
- "csp": null
- },
- "updater": {
- "active": false
- },
- "windows": [
- {
- "fullscreen": false,
- "resizable": true,
- "title": "tempblade Creator",
- "width": 1300,
- "height": 900
- }
- ]
- }
-}
\ No newline at end of file
diff --git a/app/src/App.css b/app/src/App.css
deleted file mode 100644
index a89ebd1..0000000
--- a/app/src/App.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.logo.vite:hover {
- filter: drop-shadow(0 0 2em #747bff);
-}
-
-.logo.react:hover {
- filter: drop-shadow(0 0 2em #61dafb);
-}
diff --git a/app/src/App.tsx b/app/src/App.tsx
deleted file mode 100644
index 3a3852f..0000000
--- a/app/src/App.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import "./App.css";
-import Timeline from "./components/Timeline";
-import Canvas from "./components/Canvas";
-import Properties, { PropertiesContainer } from "components/Properties";
-import ToolBar from "components/ToolBar";
-import useKeyControls from "hooks/useKeyControls";
-import { useFontsStore } from "stores/fonts.store";
-import * as ScrollArea from "@radix-ui/react-scroll-area";
-import ScrollBar from "components/ScrollArea";
-
-export default function App() {
- const fontsStoreDidInit = useFontsStore((store) => store.didInit);
-
- useKeyControls();
-
- return (
-
- {/*
*/}
-
-
- {fontsStoreDidInit && (
-
-
-
-
-
-
- )}
-
-
- );
-}
diff --git a/app/src/components/Canvas/index.tsx b/app/src/components/Canvas/index.tsx
deleted file mode 100644
index 92df8ec..0000000
--- a/app/src/components/Canvas/index.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import { FC, useMemo } from "react";
-import { useEffect, useRef, useState } from "react";
-import { PlaybackService } from "services/playback.service";
-
-type CanvasProps = {};
-
-const CanvasComponent: FC = () => {
- const canvas = useRef(null);
- const [didInit, setDidInit] = useState(false);
-
- const playbackService = useMemo(() => new PlaybackService(), []);
-
- useEffect(() => {
- if (canvas.current && !didInit) {
- playbackService
- .init(canvas.current)
- .then(() => {
- setDidInit(true);
- })
- .catch((e) => console.error(e));
- }
- }, []);
-
- return (
-
-
-
- );
-};
-
-export default CanvasComponent;
diff --git a/app/src/components/Inputs/FloatInput.tsx b/app/src/components/Inputs/FloatInput.tsx
deleted file mode 100644
index 7c7eba3..0000000
--- a/app/src/components/Inputs/FloatInput.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { useCallback, useState } from "react";
-import { z } from "zod";
-
-type FloatInputProps = {
- value: number;
- onChange: (value: number) => void;
- id: string;
-};
-
-const FloatInput: React.FC = ({ value, onChange, id }) => {
- const [inputValue, setInputValue] = useState(value.toString());
-
- const handleInputChange = useCallback(
- (e: React.ChangeEvent) => {
- const val = e.target.value.replace(",", ".");
- setInputValue(val);
-
- const nextValue = z.coerce.number().min(-9999).max(9999).safeParse(val);
-
- if (nextValue.success) {
- onChange(nextValue.data);
- }
- },
- [setInputValue, onChange]
- );
-
- return ;
-};
-
-export default FloatInput;
diff --git a/app/src/components/Inputs/Select.tsx b/app/src/components/Inputs/Select.tsx
deleted file mode 100644
index 7aea662..0000000
--- a/app/src/components/Inputs/Select.tsx
+++ /dev/null
@@ -1,118 +0,0 @@
-import * as React from "react";
-import * as SelectPrimitive from "@radix-ui/react-select";
-import { Check, ChevronDown } from "lucide-react";
-
-import { cn } from "utils";
-
-const Select = SelectPrimitive.Root;
-
-const SelectGroup = SelectPrimitive.Group;
-
-const SelectValue = SelectPrimitive.Value;
-
-const SelectTrigger = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, ...props }, ref) => (
-
- {children}
-
-
-
-
-));
-SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
-
-const SelectContent = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, position = "popper", ...props }, ref) => (
-
-
-
- {children}
-
-
-
-));
-SelectContent.displayName = SelectPrimitive.Content.displayName;
-
-const SelectLabel = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-));
-SelectLabel.displayName = SelectPrimitive.Label.displayName;
-
-const SelectItem = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, ...props }, ref) => (
-
-
-
-
-
-
-
- {children}
-
-));
-SelectItem.displayName = SelectPrimitive.Item.displayName;
-
-const SelectSeparator = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-));
-SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
-
-export {
- Select,
- SelectGroup,
- SelectValue,
- SelectTrigger,
- SelectContent,
- SelectLabel,
- SelectItem,
- SelectSeparator,
-};
diff --git a/app/src/components/Loading.tsx b/app/src/components/Loading.tsx
deleted file mode 100644
index 3247a14..0000000
--- a/app/src/components/Loading.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-const Loading = () => {
- return (
-
-
Lädt Skia...
-
- );
-};
-
-export default Loading;
diff --git a/app/src/components/MenuBar/index.tsx b/app/src/components/MenuBar/index.tsx
deleted file mode 100644
index bc81eb8..0000000
--- a/app/src/components/MenuBar/index.tsx
+++ /dev/null
@@ -1,129 +0,0 @@
-import { FC } from "react";
-import * as Menubar from "@radix-ui/react-menubar";
-import { ChevronRightIcon } from "@radix-ui/react-icons";
-import { open, save } from "@tauri-apps/api/dialog";
-
-const MenuBarTrigger: FC<{ label: string }> = ({ label }) => {
- return (
-
- {label}
-
- );
-};
-
-const MenuBarSubTrigger: FC<{ label: string }> = ({ label }) => {
- return (
-
- {label}
-
-
-
-
- );
-};
-
-const MenuBarItem: FC<{ label: string; onClick?: () => void }> = ({
- label,
- onClick,
-}) => {
- return (
-
- {label}
-
- );
-};
-
-const MenuBarSeperator = () => {
- return ;
-};
-
-const MenuBar = () => {
- const menuBarContentClassName =
- "min-w-[220px] bg-gray-800 rounded-md p-[5px]";
-
- const menuBarSubContentClassName =
- "min-w-[220px] bg-gray-800 rounded-md p-[5px]";
-
- return (
-
-
-
-
-
-
- open({ multiple: false })}
- label="Open File"
- />
-
- save({
- title: "Save Project",
- defaultPath: "project.tbcp",
- }).then((val) => {
- console.log(val);
- })
- }
- label="Save"
- />
- save()} label="Save as" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default MenuBar;
diff --git a/app/src/components/Panel.tsx b/app/src/components/Panel.tsx
deleted file mode 100644
index 037e8fd..0000000
--- a/app/src/components/Panel.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { FC, ReactNode } from "react";
-
-const Panel: FC<{ title: string; children: ReactNode }> = ({
- title,
- children,
-}) => {
- return (
-
- );
-};
-
-export default Panel;
diff --git a/app/src/components/Popover.tsx b/app/src/components/Popover.tsx
deleted file mode 100644
index 6aacdd7..0000000
--- a/app/src/components/Popover.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import * as React from "react";
-import * as PopoverPrimitive from "@radix-ui/react-popover";
-import { cn } from "utils";
-import { Cross2Icon } from "@radix-ui/react-icons";
-
-const Popover = PopoverPrimitive.Root;
-
-const PopoverTrigger = PopoverPrimitive.Trigger;
-
-const PopoverArrow = PopoverPrimitive.Arrow;
-
-const PopoverClose: React.FC<{ onClick?: () => void }> = ({ onClick }) => (
-
-
-
-);
-
-const PopoverContent = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
-
-
-
-));
-PopoverContent.displayName = PopoverPrimitive.Content.displayName;
-
-export { Popover, PopoverTrigger, PopoverClose, PopoverContent, PopoverArrow };
diff --git a/app/src/components/Properties/Primitives.tsx b/app/src/components/Properties/Primitives.tsx
deleted file mode 100644
index e4e8c93..0000000
--- a/app/src/components/Properties/Primitives.tsx
+++ /dev/null
@@ -1,255 +0,0 @@
-import { ease } from "@unom/style";
-import { motion } from "framer-motion";
-import {
- AnimatedTextEntity,
- AnimatedRectEntity,
- AnimatedStaggeredTextEntity,
- AnimatedEllipseEntity,
-} from "primitives/AnimatedEntities";
-import { Paint, PaintStyle, PaintStyleType } from "primitives/Paint";
-import { FC } from "react";
-import { z } from "zod";
-import { ColorProperties } from "./Values";
-import { PropertiesProps } from "./common";
-import { useFontsStore } from "stores/fonts.store";
-import {
- Select,
- SelectContent,
- SelectItem,
- SelectTrigger,
- SelectValue,
-} from "components/Inputs/Select";
-
-type TextPropertiesProps = PropertiesProps>;
-type StaggeredTextPropertiesProps = PropertiesProps<
- z.input
->;
-type PaintPropertiesProps = PropertiesProps>;
-type RectPropertiesProps = PropertiesProps>;
-type EllipsePropertiesProps = PropertiesProps<
- z.input
->;
-
-export const PaintProperties: FC = ({
- entity,
- onUpdate,
-}) => {
- return (
-
-
- {entity.style.color && (
-
- onUpdate({ ...entity, style: { ...entity.style, color } })
- }
- entity={entity.style.color}
- />
- )}
-
- );
-};
-
-export const TextProperties: FC = ({
- entity,
- onUpdate,
-}) => {
- const { fonts } = useFontsStore();
-
- return (
-
-
-
-
-
- );
-};
-
-export const StaggeredTextProperties: FC = ({
- entity,
- onUpdate,
-}) => {
- const { fonts } = useFontsStore();
-
- return (
-
-
-
-
-
- onUpdate({
- ...entity,
- letter: {
- ...entity.letter,
- paint: { ...entity.letter.paint, ...paint },
- },
- })
- }
- />
-
- );
-};
-
-export const RectProperties: FC = ({
- entity,
- onUpdate,
-}) => {
- return (
-
-
- onUpdate({ ...entity, paint: { ...entity.paint, ...paint } })
- }
- />
-
- );
-};
-
-export const EllipseProperties: FC = ({
- entity,
- onUpdate,
-}) => {
- return (
-
-
- onUpdate({ ...entity, paint: { ...entity.paint, ...paint } })
- }
- />
-
- );
-};
diff --git a/app/src/components/Properties/Values.tsx b/app/src/components/Properties/Values.tsx
deleted file mode 100644
index 13211a7..0000000
--- a/app/src/components/Properties/Values.tsx
+++ /dev/null
@@ -1,273 +0,0 @@
-import { AnimatedNumber, AnimatedVec2 } from "primitives/Values";
-import { PropertiesProps } from "./common";
-import { FC } from "react";
-import { z } from "zod";
-import { produce } from "immer";
-import { Interpolation, InterpolationType } from "primitives/Interpolation";
-import { Color, PaintStyle, PaintStyleType } from "primitives/Paint";
-import { parseCssColor } from "@tempblade/common";
-import { rgbToHex } from "utils";
-import { SpringInterpolation } from "primitives/Interpolation";
-import FloatInput from "components/Inputs/FloatInput";
-import { Keyframe } from "primitives/Keyframe";
-import {
- Select,
- SelectTrigger,
- SelectValue,
- SelectContent,
- SelectItem,
-} from "components/Inputs/Select";
-
-const SpringInterpolationProperties: FC<
- PropertiesProps>
-> = ({ entity, onUpdate }) => {
- return ;
-};
-
-export const InterpolationProperties: FC<
- PropertiesProps>
-> = ({ entity, onUpdate }) => {
- return (
-
- );
-};
-
-export const KeyframeProperties: FC<
- PropertiesProps>
-> = ({ entity, onUpdate }) => {
- return (
- <>
-
-
-
- {entity.interpolation && (
-
- onUpdate(
- produce(entity, (draft) => {
- draft.interpolation = updatedEntity;
- })
- )
- }
- entity={entity.interpolation}
- />
- )}
- >
- );
-};
-
-const AnimatedNumberProperties: FC<
- PropertiesProps> & { label: string }
-> = ({ entity, onUpdate, label }) => {
- return (
-
-
{label}
- {entity.keyframes.values.map((keyframe, index) => {
- return (
-
-
- onUpdate(
- produce(entity, (draft) => {
- draft.keyframes.values[index] = nextKeyframe;
- })
- )
- }
- />
-
- );
- })}
-
- );
-};
-
-export const ColorProperties: FC<
- PropertiesProps> & {
- label: string;
- mode?: "RGB" | "Picker";
- }
-> = ({ entity, onUpdate, mode = "Picker" }) => {
- if (mode === "Picker") {
- return (
-
- );
- }
-
- return (
-
- );
-};
-
-export const AnimatedVec2Properties: FC<
- PropertiesProps> & { label: string }
-> = ({ entity, onUpdate, label }) => {
- return (
-
-
-
- );
-};
diff --git a/app/src/components/Properties/common.tsx b/app/src/components/Properties/common.tsx
deleted file mode 100644
index 420cedc..0000000
--- a/app/src/components/Properties/common.tsx
+++ /dev/null
@@ -1,4 +0,0 @@
-export type PropertiesProps = {
- entity: E;
- onUpdate: (entity: E) => void;
-};
diff --git a/app/src/components/Properties/index.tsx b/app/src/components/Properties/index.tsx
deleted file mode 100644
index d198620..0000000
--- a/app/src/components/Properties/index.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import { FC, ReactNode } from "react";
-import { useEntitiesStore } from "stores/entities.store";
-
-import { shallow } from "zustand/shallow";
-import {
- RectProperties,
- EllipseProperties,
- TextProperties,
- StaggeredTextProperties,
-} from "./Primitives";
-
-const PropertiesContainer: FC<{ children: ReactNode }> = ({ children }) => {
- return (
-
- {children}
-
- );
-};
-
-const Properties = () => {
- const { selectedEntity, entities, updateEntity } = useEntitiesStore(
- (store) => ({
- updateEntity: store.updateEntity,
- selectedEntity: store.selectedEntity,
- entities: store.entities,
- }),
- shallow
- );
-
- const entity = selectedEntity !== undefined && entities[selectedEntity];
-
- if (entity) {
- switch (entity.type) {
- case "StaggeredText":
- return (
- updateEntity(selectedEntity, entity)}
- entity={entity}
- />
- );
-
- case "Text":
- return (
- updateEntity(selectedEntity, entity)}
- entity={entity}
- />
- );
-
- case "Rect":
- return (
- updateEntity(selectedEntity, entity)}
- entity={entity}
- />
- );
-
- case "Ellipse":
- return (
- updateEntity(selectedEntity, entity)}
- entity={entity}
- />
- );
-
- default:
- return null;
- }
- }
-
- return (
-
-
Wähle ein Element aus
-
- );
-};
-
-export { PropertiesContainer };
-export default Properties;
diff --git a/app/src/components/ScrollArea.tsx b/app/src/components/ScrollArea.tsx
deleted file mode 100644
index d2a5abe..0000000
--- a/app/src/components/ScrollArea.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import * as ScrollArea from "@radix-ui/react-scroll-area";
-import { FC } from "react";
-
-const ScrollBar: FC<{ orientation?: "horizontal" | "vertical" }> = ({
- orientation = "vertical",
-}) => {
- return (
-
-
-
- );
-};
-
-export default ScrollBar;
diff --git a/app/src/components/Timeline/KeyframeIndicator.tsx b/app/src/components/Timeline/KeyframeIndicator.tsx
deleted file mode 100644
index f06abf2..0000000
--- a/app/src/components/Timeline/KeyframeIndicator.tsx
+++ /dev/null
@@ -1,270 +0,0 @@
-import { ease } from "@unom/style";
-import { PanInfo, motion } from "framer-motion";
-import { AnimationData } from "primitives/AnimatedEntities";
-import { Keyframe } from "primitives/Keyframe";
-import { FC, useCallback, useMemo, useState } from "react";
-import { z } from "zod";
-import { TIMELINE_SCALE, calculateOffset } from "./common";
-import { AnimatedNumber, AnimatedVec2, AnimatedVec3 } from "primitives/Values";
-import { useKeyframeStore } from "stores/keyframe.store";
-import { produce } from "immer";
-import KeyframePopover from "./KeyframePopover";
-import { Popover, PopoverContent, PopoverTrigger } from "components/Popover";
-
-const KeyframeIndicator: FC<{
- keyframe: z.input;
- animationData: z.input;
- onUpdate?: (e: z.input) => void;
-}> = ({ keyframe, animationData, onUpdate }) => {
- const { selectedKeyframe, selectKeyframe, deselectKeyframe } =
- useKeyframeStore();
-
- const handleUpdate = useCallback(
- (info: PanInfo) => {
- if (onUpdate) {
- let offset = info.offset.x;
-
- offset = calculateOffset(offset);
-
- offset += keyframe.offset;
-
- onUpdate({ ...keyframe, offset: offset < 0 ? 0 : offset });
- }
- },
- [onUpdate, animationData, keyframe]
- );
-
- const handleValueUpdate = useCallback(
- (keyframe: z.input) => {
- if (onUpdate) {
- onUpdate(keyframe);
- }
- },
- [onUpdate]
- );
-
- const selected = useMemo(
- () => selectedKeyframe === keyframe.id,
- [keyframe.id, selectedKeyframe]
- );
-
- const [isDragged, setIsDragged] = useState(false);
-
- return (
- <>
-
-
- setIsDragged(true)}
- onDragEnd={(e, info) => {
- e.preventDefault();
- setIsDragged(false);
- if (onUpdate) {
- handleUpdate(info);
- }
- }}
- dragConstraints={{ left: 0 }}
- initial={{
- x: (animationData.offset + keyframe.offset) * TIMELINE_SCALE + 2,
- scale: 0,
- }}
- whileTap={{
- scale: 1.6,
- transition: {
- scale: {
- type: "spring",
- stiffness: 200,
- damping: 10,
- mass: 1,
- },
- },
- }}
- animate={{
- x: (animationData.offset + keyframe.offset) * TIMELINE_SCALE + 2,
- scale: 1,
- }}
- transition={ease.quint(0.4).out}
- onClick={() => {
- if (isDragged) {
- if (!selected) selectKeyframe(keyframe.id);
- } else {
- selected ? deselectKeyframe() : selectKeyframe(keyframe.id);
- }
- }}
- className="h-full absolute z-30 select-none w-3 flex items-center justify-center filter
- data-[selected=true]:drop-shadow-[0px_2px_6px_rgba(230,230,255,1)] transition-colors"
- >
-
-
-
-
- deselectKeyframe()}
- onUpdate={handleValueUpdate}
- keyframe={keyframe}
- />
-
-
- >
- );
-};
-
-const AnimatedNumberKeyframeIndicator: FC<{
- animatedNumber: z.input;
- animationData: z.input;
- onUpdate: (e: z.input) => void;
-}> = ({ animatedNumber, animationData, onUpdate }) => {
- return (
- <>
- {animatedNumber.keyframes.values.map((keyframe, index) => (
-
- onUpdate(
- produce(animatedNumber, (draft) => {
- draft.keyframes.values[index] = keyframe;
- })
- )
- }
- key={keyframe.id}
- keyframe={keyframe}
- animationData={animationData}
- />
- ))}
- >
- );
-};
-
-type DimensionsVec2 = "x" | "y";
-const VEC2_DIMENSION_INDEX_MAPPING: Record = {
- x: 0,
- y: 1,
-};
-
-const AnimatedVec2KeyframeIndicator: FC<{
- animatedVec2: z.input;
- dimension?: DimensionsVec2;
- animationData: z.input;
- onUpdate: (e: z.input) => void;
-}> = ({ animatedVec2, animationData, dimension, onUpdate }) => {
- const handleUpdate = useCallback(
- (
- animatedNumber: z.input,
- dimensionIndex: number
- ) => {
- onUpdate(
- produce(animatedVec2, (draft) => {
- draft.keyframes[dimensionIndex] = animatedNumber;
- })
- );
- },
- [animatedVec2]
- );
-
- if (dimension) {
- return (
-
- handleUpdate(animatedNumber, VEC2_DIMENSION_INDEX_MAPPING[dimension])
- }
- animatedNumber={
- animatedVec2.keyframes[VEC2_DIMENSION_INDEX_MAPPING[dimension]]
- }
- />
- );
- }
-
- return (
- <>
- {animatedVec2.keyframes.map((animatedNumber, index) => (
- handleUpdate(animatedNumber, index)}
- key={index}
- animatedNumber={animatedNumber}
- animationData={animationData}
- />
- ))}
- >
- );
-};
-
-type DimensionsVec3 = "x" | "y" | "z";
-const VEC3_DIMENSION_INDEX_MAPPING: Record = {
- x: 0,
- y: 1,
- z: 2,
-};
-
-const AnimatedVec3KeyframeIndicator: FC<{
- animatedVec3: z.input;
- animationData: z.input;
- dimension?: DimensionsVec3;
- onUpdate: (e: z.input) => void;
-}> = ({ animatedVec3, animationData, dimension, onUpdate }) => {
- const handleUpdate = useCallback(
- (
- animatedNumber: z.input,
- dimensionIndex: number
- ) => {
- onUpdate(
- produce(animatedVec3, (draft) => {
- draft.keyframes[dimensionIndex] = animatedNumber;
- })
- );
- },
- [animatedVec3]
- );
-
- if (dimension) {
- return (
-
- handleUpdate(animatedNumber, VEC3_DIMENSION_INDEX_MAPPING[dimension])
- }
- animatedNumber={
- animatedVec3.keyframes[VEC3_DIMENSION_INDEX_MAPPING[dimension]]
- }
- />
- );
- }
-
- return (
- <>
- {animatedVec3.keyframes.map((animatedNumber, index) => (
- handleUpdate(animatedNumber, index)}
- animatedNumber={animatedNumber}
- animationData={animationData}
- />
- ))}
- >
- );
-};
-
-export {
- AnimatedNumberKeyframeIndicator,
- AnimatedVec3KeyframeIndicator,
- AnimatedVec2KeyframeIndicator,
-};
-export default KeyframeIndicator;
diff --git a/app/src/components/Timeline/KeyframePopover.tsx b/app/src/components/Timeline/KeyframePopover.tsx
deleted file mode 100644
index 7a0fc46..0000000
--- a/app/src/components/Timeline/KeyframePopover.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import { PopoverClose } from "components/Popover";
-import { KeyframeProperties } from "components/Properties/Values";
-import { Keyframe } from "primitives/Keyframe";
-import { FC } from "react";
-import { z } from "zod";
-
-const KeyframePopover: FC<{
- keyframe: z.input;
- onUpdate: (k: z.input) => void;
- onClose: () => void;
-}> = ({ keyframe, onUpdate, onClose }) => {
- return (
-
- );
-};
-
-export default KeyframePopover;
diff --git a/app/src/components/Timeline/Timepicker.tsx b/app/src/components/Timeline/Timepicker.tsx
deleted file mode 100644
index 6e438ab..0000000
--- a/app/src/components/Timeline/Timepicker.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { FC } from "react";
-import * as Slider from "@radix-ui/react-slider";
-import { useRenderStateStore } from "stores/render-state.store";
-import { TIMELINE_SCALE } from "./common";
-import { useTimelineStore } from "stores/timeline.store";
-
-export type TimePickerProps = {};
-
-const TimePicker: FC = () => {
- const { renderState, setCurrentFrame } = useRenderStateStore();
- const timeline = useTimelineStore();
-
- return (
- setCurrentFrame(val[0])}
- max={timeline.fps * timeline.duration}
- step={1}
- aria-label="Current Frame"
- >
-
-
-
-
-
- );
-};
-
-export default TimePicker;
diff --git a/app/src/components/Timeline/Timestamp.tsx b/app/src/components/Timeline/Timestamp.tsx
deleted file mode 100644
index 4f484d8..0000000
--- a/app/src/components/Timeline/Timestamp.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import { useRenderStateStore } from "stores/render-state.store";
-import { useTimelineStore } from "stores/timeline.store";
-
-const Timestamp = () => {
- const { renderState } = useRenderStateStore();
- const timeline = useTimelineStore();
-
- return (
-
-
- Frame {renderState.curr_frame} / {timeline.fps * timeline.duration}
-
-
- {(renderState.curr_frame / timeline.fps).toPrecision(3)} /{" "}
- {timeline.duration.toPrecision(3)}
- / {timeline.fps}FPS
-
-
- );
-};
-
-export default Timestamp;
diff --git a/app/src/components/Timeline/Track.tsx b/app/src/components/Timeline/Track.tsx
deleted file mode 100644
index cda336f..0000000
--- a/app/src/components/Timeline/Track.tsx
+++ /dev/null
@@ -1,209 +0,0 @@
-import { ease } from "@unom/style";
-import { useDragControls, Reorder, motion } from "framer-motion";
-import { AnimationData, AnimatedEntity } from "primitives/AnimatedEntities";
-import { FC, memo, useState, useMemo } from "react";
-import { useEntitiesStore } from "stores/entities.store";
-import { z } from "zod";
-import { shallow } from "zustand/shallow";
-import KeyframeIndicator from "./KeyframeIndicator";
-import { TIMELINE_SCALE, calculateOffset } from "./common";
-import { TriangleDownIcon } from "@radix-ui/react-icons";
-import TrackPropertiesEditor from "./TrackDisplay/TrackPropertiesEditor";
-import { cn, flattenedKeyframesByEntity } from "utils";
-
-type TrackProps = {
- animationData: z.input;
- name: string;
- index: number;
- entity: z.input;
-};
-
-const TrackDisplayTypeOptions = ["Default", "Graph"] as const;
-
-export const TrackDisplayType = z.enum(TrackDisplayTypeOptions);
-
-const Track: FC = ({ animationData, index, name, entity }) => {
- const controls = useDragControls();
-
- const flattenedKeyframes = useMemo(
- () => flattenedKeyframesByEntity(entity),
- [entity]
- );
-
- const [isExpanded, setIsExpanded] = useState(false);
-
- const { updateEntity, selectEntity, selectedEntity, deselectEntity } =
- useEntitiesStore(
- (store) => ({
- updateEntity: store.updateEntity,
- selectedEntity: store.selectedEntity,
- selectEntity: store.selectEntity,
- deselectEntity: store.deselectEntity,
- }),
- shallow
- );
-
- return (
- e.preventDefault()}
- className="h-6 relative flex flex-1 flex-col gap-1 select-none"
- >
- e.preventDefault()}
- className="flex flex-row gap-1 select-none"
- >
- e.preventDefault()}
- onPointerDown={(e) => controls.start(e)}
- className={`h-full transition-all rounded-sm min-w-[200px] p-1 px-2 flex flex-col ${
- selectedEntity === index
- ? "bg-highlight text-neutral dark:text-main"
- : "bg-neutral-accent text-main"
- }`}
- >
-
- setIsExpanded(!isExpanded)}
- className={cn("will-change-transform")}
- animate={{ rotate: isExpanded ? 0 : -90 }}
- >
-
-
-
- selectedEntity !== undefined && selectedEntity === index
- ? deselectEntity()
- : selectEntity(index)
- }
- className="h-2 text-base leading-loose font-semibold select-none cursor-pointer"
- >
- {name}
-
-
-
-
-
-
- {!isExpanded &&
- flattenedKeyframes.map((keyframe, index) => (
-
- ))}
-
-
e.preventDefault()}
- transition={ease.circ(0.6).out}
- dragElastic={false}
- dragConstraints={{ left: 0 }}
- onDragEnd={(e, info) => {
- let offset = info.offset.x;
-
- offset = calculateOffset(offset);
-
- const animationOffset =
- animationData.offset + offset < 0
- ? 0
- : animationData.offset + offset;
-
- const duration = animationData.duration - offset;
-
- updateEntity(index, {
- animation_data: {
- ...animationData,
- offset: animationOffset < 0 ? 0 : animationOffset,
- duration: duration < 0 ? 0 : duration,
- },
- });
- }}
- className="z-10 w-4 bg-primary/50 h-full top-0 absolute rounded-md select-none cursor-w-resize"
- />
- e.preventDefault()}
- drag="x"
- animate={{
- x:
- (animationData.duration + animationData.offset) *
- TIMELINE_SCALE -
- 16,
- }}
- whileHover={{
- scale: 1.1,
- }}
- whileTap={{
- scale: 0.9,
- }}
- transition={ease.circ(0.6).out}
- dragConstraints={{ left: 0 }}
- onDragEnd={(e, info) => {
- let offset = info.offset.x;
-
- offset = calculateOffset(offset);
-
- const duration = animationData.duration + offset;
-
- updateEntity(index, {
- animation_data: {
- ...animationData,
- duration: duration < 0 ? 0 : duration,
- },
- });
- }}
- />
- e.preventDefault()}
- transition={ease.circ(0.8).out}
- onDragEnd={(_e, info) => {
- let offset = info.offset.x;
-
- offset = calculateOffset(offset);
-
- offset += animationData.offset;
-
- updateEntity(index, {
- animation_data: {
- ...animationData,
- offset: offset < 0 ? 0 : offset,
- },
- });
- }}
- className="z-5 h-full top-0 absolute rounded-md transition-colors bg-primary/30 hover:bg-primary/50 select-none cursor-grab"
- >
-
-
- {isExpanded && }
-
- );
-};
-
-export default memo(Track);
diff --git a/app/src/components/Timeline/TrackDisplay/Graph.tsx b/app/src/components/Timeline/TrackDisplay/Graph.tsx
deleted file mode 100644
index 0181814..0000000
--- a/app/src/components/Timeline/TrackDisplay/Graph.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-import { FC } from "react";
-import { extent, bisector } from "d3-array";
-import { curveNatural } from "@visx/curve";
-
-import { scaleLinear } from "@visx/scale";
-import { LinePath } from "@visx/shape";
-import { Group } from "@visx/group";
-
-const HEIGHT = 300;
-const WIDTH = 1200;
-
-type PropertyValue = {
- value: number;
- frame: number;
-};
-
-const getValue = (d: PropertyValue) => d.value;
-const getFrame = (d: PropertyValue) => d.frame;
-
-const PropertyGraph: FC<{
- values: Array<{ frame: number; value: number }>;
-}> = ({ values }) => {
- const framesScale = scaleLinear({
- range: [0, WIDTH],
- domain: extent(values, getFrame) as [number, number],
- nice: true,
- });
-
- const valuesScale = scaleLinear({
- range: [HEIGHT, 0],
- domain: extent(values, getValue) as [number, number],
- nice: true,
- });
-
- return (
-
- framesScale(getFrame(d)) ?? 0}
- y={(d) => valuesScale(getValue(d)) ?? 0}
- />
-
- );
-};
-
-const Graphs: FC<{ values: Array> }> = ({ values }) => {
- return (
-
- );
-};
-
-export default Graphs;
diff --git a/app/src/components/Timeline/TrackDisplay/TrackPropertiesEditor.tsx b/app/src/components/Timeline/TrackDisplay/TrackPropertiesEditor.tsx
deleted file mode 100644
index 5ad48c6..0000000
--- a/app/src/components/Timeline/TrackDisplay/TrackPropertiesEditor.tsx
+++ /dev/null
@@ -1,242 +0,0 @@
-import {
- AnimatedEntity,
- AnimationData,
- getAnimatedPropertiesByAnimatedEntity,
-} from "primitives/AnimatedEntities";
-import { AnimatedProperty } from "primitives/AnimatedProperty";
-import { AnimatedVec2, ValueType } from "primitives/Values";
-import { FC, memo, useCallback, useMemo, useState } from "react";
-import { z } from "zod";
-import {
- AnimatedNumberKeyframeIndicator,
- AnimatedVec2KeyframeIndicator,
- AnimatedVec3KeyframeIndicator,
-} from "../KeyframeIndicator";
-import { ToggleGroup, ToggleGroupItem } from "components/ToggleGroup";
-import { produce } from "immer";
-import set from "lodash.set";
-import { useEntitiesStore } from "stores/entities.store";
-import { AnimatedValue } from "primitives/Values";
-import { motion } from "framer-motion";
-import { ease } from "@unom/style";
-import { TrackDisplayType } from "../Track";
-import TrackPropertyGraph from "./TrackPropertyGraph";
-import { LineChart } from "lucide-react";
-
-type DisplayState = {
- type: z.input;
- selectedAnimatedProperties: Array;
-};
-
-const TrackAnimatedPropertyKeyframes: FC<{
- animatedProperty: z.input;
- animationData: z.input;
- onUpdate: (animatedProperty: z.input) => void;
- selectedDimension?: "x" | "y" | "z";
-}> = ({ animatedProperty, animationData, selectedDimension, onUpdate }) => {
- const handleUpdate = useCallback(
- (animatedValue: z.input) => {
- onUpdate({ ...animatedProperty, animatedValue });
- },
- [onUpdate, animatedProperty]
- );
-
- switch (animatedProperty.animatedValue.type) {
- case "Number":
- return (
-
- );
- case "Vec2":
- return (
-
- );
-
- case "Vec3":
- return (
-
- );
- default:
- return null;
- }
-};
-
-const TrackAnimatedProperty: FC<{
- animatedProperty: z.input;
- animationData: z.input;
- displayState: DisplayState;
- index: number;
- onDisplayStateUpdate: (s: DisplayState) => void;
- onUpdate: (e: z.input) => void;
-}> = ({
- animatedProperty,
- animationData,
- onUpdate,
- displayState,
- index,
- onDisplayStateUpdate,
-}) => {
- const [selectedDimension, setSelectedDimension] = useState<"x" | "y" | "z">();
-
- return (
-
-
-
{animatedProperty.label}
-
-
- selectedDimension === "x"
- ? setSelectedDimension(undefined)
- : setSelectedDimension("x")
- }
- selected={selectedDimension === "x"}
- >
- X
-
-
- selectedDimension === "y"
- ? setSelectedDimension(undefined)
- : setSelectedDimension("y")
- }
- selected={selectedDimension === "y"}
- >
- Y
-
- {animatedProperty.animatedValue.type === ValueType.Enum.Vec3 && (
-
- selectedDimension === "z"
- ? setSelectedDimension(undefined)
- : setSelectedDimension("z")
- }
- selected={selectedDimension === "z"}
- >
- Z
-
- )}
- {
- if (displayState.selectedAnimatedProperties.includes(index)) {
- onDisplayStateUpdate({
- ...displayState,
- selectedAnimatedProperties:
- displayState.selectedAnimatedProperties.filter(
- (index) => index !== index
- ),
- });
- } else {
- onDisplayStateUpdate({
- ...displayState,
- selectedAnimatedProperties: [
- ...displayState.selectedAnimatedProperties,
- index,
- ],
- });
- }
- }}
- >
-
-
-
-
-
-
-
-
-
- );
-};
-
-const TrackPropertiesEditor: FC<{
- entity: z.input;
-}> = ({ entity }) => {
- const animatedProperties = useMemo(
- () => getAnimatedPropertiesByAnimatedEntity(entity),
- [entity]
- );
-
- const handleUpdate = useCallback(
- (animatedProperty: z.input) => {
- const entitiesStore = useEntitiesStore.getState();
-
- const nextValue = produce(entity, (draft) => {
- const animatedValue = animatedProperty.animatedValue;
-
- set(draft, animatedProperty.propertyPath, animatedValue);
- });
-
- const parsedEntity = AnimatedEntity.parse(nextValue);
-
- entitiesStore.updateEntityById(parsedEntity.id, parsedEntity);
- },
- [entity]
- );
-
- const [displayState, setDisplayState] = useState({
- type: TrackDisplayType.Enum.Default,
- selectedAnimatedProperties: [],
- });
-
- return (
-
-
- {animatedProperties.map((animatedProperty, index) => (
-
- ))}
-
- {displayState.selectedAnimatedProperties.length > 0 && (
- animatedProperties[index]
- )}
- />
- )}
-
- );
-};
-
-export default memo(TrackPropertiesEditor);
diff --git a/app/src/components/Timeline/TrackDisplay/TrackPropertyGraph.tsx b/app/src/components/Timeline/TrackDisplay/TrackPropertyGraph.tsx
deleted file mode 100644
index af96458..0000000
--- a/app/src/components/Timeline/TrackDisplay/TrackPropertyGraph.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-import { invoke } from "@tauri-apps/api";
-import { AnimationData } from "primitives/AnimatedEntities";
-import { AnimatedProperty } from "primitives/AnimatedProperty";
-import { AnimatedValue, ValueType } from "primitives/Values";
-import { FC, useEffect, useState } from "react";
-import { z } from "zod";
-import Graph from "./Graph";
-
-type TrackPropertyPathProps = {
- animatedProperties: Array>;
- animationData: z.input;
-};
-
-const TrackPropertyGraph: FC = ({
- animatedProperties,
- animationData,
-}) => {
- const [values, setValues] = useState>>([]);
-
- useEffect(() => {
- const tasks: Array>>> = [];
-
- animatedProperties.forEach((animatedProperty) => {
- animatedProperty.animatedValue.type;
- const animatedValue = animatedProperty.animatedValue;
-
- const commonValues: {
- animatedValue: z.input;
- startFrame: number;
- endFrame: number;
- fps: number;
- animationData: z.input;
- } = {
- animatedValue: AnimatedValue.parse(animatedValue),
- startFrame: 0,
- endFrame: 600,
- fps: 60,
- animationData: AnimationData.parse(animationData),
- };
-
- switch (animatedValue.type) {
- case ValueType.Enum.Number:
- tasks.push(
- invoke(
- "get_values_at_frame_range_from_animated_float",
- commonValues
- ).then((data) => {
- const numbers = data as Array;
-
- return [numbers];
- })
- );
- break;
- case ValueType.Enum.Vec2:
- tasks.push(
- invoke(
- "get_values_at_frame_range_from_animated_float_vec2",
- commonValues
- ).then((data) => {
- const vectors = data as [Array, Array];
-
- const xValues = vectors.map((vec2) => vec2[0]);
- const yValues = vectors.map((vec2) => vec2[1]);
-
- return [xValues, yValues];
- })
- );
- break;
-
- case ValueType.Enum.Vec3:
- tasks.push(
- invoke(
- "get_values_at_frame_range_from_animated_float_vec3",
- commonValues
- ).then((data) => {
- const vectors = data as [
- Array,
- Array,
- Array
- ];
-
- const xValues = vectors.map((vec2) => vec2[0]);
- const yValues = vectors.map((vec2) => vec2[1]);
- const zValues = vectors.map((vec2) => vec2[2]);
-
- return [xValues, yValues, zValues];
- })
- );
- break;
- }
- });
-
- Promise.all(tasks).then((values) => {
- const flatValues = values.flat();
-
- console.log("flattened Values", flatValues);
- setValues(flatValues);
- });
- }, animatedProperties);
-
- return (
-
-
-
- );
-};
-
-export default TrackPropertyGraph;
diff --git a/app/src/components/Timeline/common.ts b/app/src/components/Timeline/common.ts
deleted file mode 100644
index c5cf969..0000000
--- a/app/src/components/Timeline/common.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export const TIMELINE_SCALE = 100;
-
-export const calculateOffset = (offset: number) => {
- let nextOffset = offset / TIMELINE_SCALE;
-
- return nextOffset;
-};
diff --git a/app/src/components/Timeline/index.tsx b/app/src/components/Timeline/index.tsx
deleted file mode 100644
index 3030cad..0000000
--- a/app/src/components/Timeline/index.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-import { FC } from "react";
-import { Reorder } from "framer-motion";
-import TimePicker from "./Timepicker";
-import { useEntitiesStore } from "stores/entities.store";
-import Timestamp from "./Timestamp";
-import { PauseIcon, PlayIcon } from "@radix-ui/react-icons";
-import { useRenderStateStore } from "stores/render-state.store";
-import Track from "./Track";
-import * as ScrollArea from "@radix-ui/react-scroll-area";
-import ScrollBar from "components/ScrollArea";
-
-export type AnimationEntity = {
- offset: number;
- duration: number;
-};
-
-type TimelineProps = {};
-
-const Timeline: FC = () => {
- const { entities, setEntities } = useEntitiesStore((store) => ({
- entities: store.entities,
- setEntities: store.setEntities,
- }));
-
- const { setPlaying } = useRenderStateStore((store) => ({
- setPlaying: store.setPlaying,
- }));
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
- {entities.map((entity, index) => (
-
- ))}
-
-
-
-
-
-
-
-
- );
-};
-
-export default Timeline;
diff --git a/app/src/components/ToggleGroup.tsx b/app/src/components/ToggleGroup.tsx
deleted file mode 100644
index 27d938b..0000000
--- a/app/src/components/ToggleGroup.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { FC, ReactNode } from "react";
-import * as ToggleGroupComponents from "@radix-ui/react-toggle-group";
-import { motion } from "framer-motion";
-
-const ToggleGroupItem: FC<{
- children: ReactNode;
- selected: boolean;
- onClick?: () => void;
-}> = ({ children, selected, onClick }) => {
- return (
-
-
- {children}
-
-
- );
-};
-
-const ToggleGroup: FC<{ children: ReactNode }> = ({ children }) => (
-
- {children}
-
-);
-
-export { ToggleGroup, ToggleGroupItem };
diff --git a/app/src/components/ToolBar/index.tsx b/app/src/components/ToolBar/index.tsx
deleted file mode 100644
index a94de5b..0000000
--- a/app/src/components/ToolBar/index.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import {
- BoxIcon,
- CircleIcon,
- CursorArrowIcon,
- FontStyleIcon,
- MixIcon,
- Pencil1Icon,
- Pencil2Icon,
- SymbolIcon,
- TextIcon,
-} from "@radix-ui/react-icons";
-import * as Toolbar from "@radix-ui/react-toolbar";
-import { motion } from "framer-motion";
-import { FC, ReactNode, useMemo, useState } from "react";
-import { EntitiesService } from "services/entities.service";
-
-const ToolBarButton: FC<{ children: ReactNode; onClick?: () => void }> = ({
- children,
- onClick,
-}) => {
- const [didHover, setDidHover] = useState(false);
-
- return (
- !didHover && setDidHover(true)}
- asChild
- className="text-main p-[10px] bg-neutral flex-shrink-0 flex-grow-0
- basis-auto w-[40px] h-[40px] rounded inline-flex text-[13px] leading-none
- items-center justify-center outline-none hover:bg-primary/50
- transition-colors
- focus:relative focus:shadow-[0_0_0_2px] focus:shadow-indigo"
- >
-
- {children}
-
-
- );
-};
-
-const ToolBar = () => {
- const entitiesService = useMemo(() => new EntitiesService(), []);
-
- return (
-
-
-
-
-
-
- entitiesService.createRect()}>
-
-
- entitiesService.createEllipse()}>
-
-
-
-
-
-
-
-
-
- entitiesService.createText()}>
-
-
- entitiesService.createStaggeredText()}>
-
-
-
-
- );
-};
-
-export default ToolBar;
diff --git a/app/src/drawers/cache.ts b/app/src/drawers/cache.ts
deleted file mode 100644
index d36cb7c..0000000
--- a/app/src/drawers/cache.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { BaseEntity } from "primitives/Entities";
-import { z } from "zod";
-
-export interface EntityCache {
- build: () => T;
- get: () => T | undefined;
- set: (id: string, cache: T) => void;
- cleanup: (cache: T) => void;
-}
-
-export function handleEntityCache<
- E extends z.output,
- C,
- EC extends EntityCache
->(entity: E, cache: EC): C {
- const cached = cache.get();
-
- if (!entity.cache.valid) {
- // console.log("Invalid cache");
- if (cached) {
- cache.cleanup(cached);
- }
-
- const nextCache = cache.build();
-
- cache.set(entity.id, nextCache);
-
- return nextCache;
- } else {
- if (!cached) {
- const nextCache = cache.build();
-
- cache.set(entity.id, nextCache);
-
- return nextCache;
- } else {
- return cached;
- }
- }
-}
diff --git a/app/src/drawers/draw.ts b/app/src/drawers/draw.ts
deleted file mode 100644
index aaf724b..0000000
--- a/app/src/drawers/draw.ts
+++ /dev/null
@@ -1,257 +0,0 @@
-import { invoke } from "@tauri-apps/api";
-import InitCanvasKit, { Canvas, CanvasKit, Surface } from "canvaskit-wasm";
-import { AnimatedEntities } from "primitives/AnimatedEntities";
-import {
- Entities,
- EntityType,
- StaggeredTextEntity,
- TextEntity,
-} from "primitives/Entities";
-import { useRenderStateStore } from "stores/render-state.store";
-import { useTimelineStore } from "stores/timeline.store";
-import { z } from "zod";
-import drawStaggeredText, {
- StaggeredTextCache,
- StaggeredTextEntityCache,
- calculateLetters,
-} from "./staggered-text";
-import drawText, { TextCache, TextEntityCache, buildTextCache } from "./text";
-import drawEllipse from "./ellipse";
-import drawRect from "./rect";
-import { useEntitiesStore } from "stores/entities.store";
-import { handleEntityCache } from "./cache";
-import { DependenciesService } from "services/dependencies.service";
-import { RenderState } from "primitives/Timeline";
-
-/**
- *
- * TODO Add more sophisticated dependency logic for e.g. dynamically loading fonts, images etc.
- */
-
-export class Drawer {
- private didLoad: boolean;
- private entities: z.output | undefined;
- private ckDidLoad: boolean;
- drawCount: number;
- private CanvasKit: CanvasKit | undefined;
- cache: {
- staggeredText: Map;
- text: Map;
- };
- surface: Surface | undefined;
- fontData: ArrayBuffer | undefined;
- raf: number | undefined;
- isLocked: boolean;
- dependenciesService: DependenciesService;
-
- constructor() {
- this.entities = undefined;
- this.CanvasKit = undefined;
- this.ckDidLoad = false;
- this.drawCount = 0;
- this.surface = undefined;
- this.fontData = undefined;
- this.cache = {
- staggeredText: new Map(),
- text: new Map(),
- };
- this.dependenciesService = new DependenciesService();
- this.isLocked = false;
- this.raf = undefined;
- this.didLoad = this.ckDidLoad;
- }
-
- async init(canvas: HTMLCanvasElement) {
- await this.loadCanvasKit(canvas);
-
- this.didLoad = this.ckDidLoad;
- }
-
- async loadCanvasKit(canvas: HTMLCanvasElement) {
- await InitCanvasKit({
- locateFile: (file) => file,
- }).then((CanvasKit) => {
- if (canvas) {
- const CSurface = CanvasKit.MakeWebGLCanvasSurface(canvas);
- if (CSurface) {
- this.CanvasKit = CanvasKit;
- this.surface = CSurface;
- this.ckDidLoad = true;
- }
- }
- });
- }
-
- async calculateAnimatedEntities(
- animatedEntities: z.input,
- renderState: z.output
- ) {
- const { fps, size, duration } = useTimelineStore.getState();
-
- const parsedAnimatedEntities = AnimatedEntities.parse(animatedEntities);
-
- const data = await invoke("calculate_timeline_at_curr_frame", {
- timeline: {
- entities: parsedAnimatedEntities,
- render_state: renderState,
- fps,
- size,
- duration,
- },
- });
-
- const parsedEntities = Entities.parse(data);
-
- return parsedEntities;
- }
-
- get isCached(): boolean {
- if (this.entities) {
- return this.entities.reduce(
- (prev, curr) => prev && curr.cache.valid,
- true
- );
- } else {
- return false;
- }
- }
-
- /**
- * Updates the entities based on the input
- */
- update(
- animatedEntities: z.input,
- prepareDependencies: boolean
- ) {
- // console.time("calculate");
-
- if (this.didLoad) {
- const renderState = useRenderStateStore.getState().renderState;
-
- this.calculateAnimatedEntities(animatedEntities, renderState).then(
- (entities) => {
- this.entities = entities;
-
- if (prepareDependencies) {
- this.dependenciesService
- .prepareForEntities(this.entities)
- .then(() => {
- this.requestRedraw(!this.isCached);
- });
- } else {
- this.requestRedraw(!this.isCached);
- }
- }
- );
- } else {
- // console.timeEnd("calculate");
- }
- }
-
- requestRedraw(rebuild: boolean) {
- if (this.didLoad && this.surface && !this.isLocked) {
- if (rebuild && this.raf !== undefined) {
- cancelAnimationFrame(this.raf);
- // this.surface.flush();
- this.raf = this.surface.requestAnimationFrame((canvas) =>
- this.draw(canvas)
- );
- } else {
- // this.surface.flush();
- this.raf = this.surface.requestAnimationFrame((canvas) =>
- this.draw(canvas)
- );
- }
- }
- }
-
- draw(canvas: Canvas) {
- if (this.CanvasKit && this.entities && !this.isLocked) {
- this.isLocked = true;
- //console.time("draw");
- const CanvasKit = this.CanvasKit;
-
- canvas.clear(CanvasKit.WHITE);
-
- this.drawCount++;
-
- [...this.entities].reverse().forEach((entity) => {
- switch (entity.type) {
- case EntityType.Enum.Rect:
- drawRect(CanvasKit, canvas, entity);
- break;
- case EntityType.Enum.Ellipse:
- drawEllipse(CanvasKit, canvas, entity);
- break;
- case EntityType.Enum.Text:
- {
- const cache = handleEntityCache<
- z.output,
- TextCache,
- TextEntityCache
- >(entity, {
- build: () => {
- const cache = buildTextCache(
- CanvasKit,
- entity,
- this.dependenciesService.dependencies
- );
-
- useEntitiesStore
- .getState()
- .updateEntityById(entity.id, { cache: { valid: true } });
-
- return cache;
- },
- get: () => this.cache.text.get(entity.id),
- set: (id, cache) => this.cache.text.set(id, cache),
- cleanup: (cache) => {
- cache.fontManager.delete();
- },
- });
-
- drawText(CanvasKit, canvas, entity, cache);
- }
-
- break;
- case EntityType.Enum.StaggeredText:
- {
- const cache = handleEntityCache<
- z.output,
- StaggeredTextCache,
- StaggeredTextEntityCache
- >(entity, {
- build: () => {
- const cache = calculateLetters(
- CanvasKit,
- entity,
- this.dependenciesService.dependencies
- );
- useEntitiesStore
- .getState()
- .updateEntityById(entity.id, { cache: { valid: true } });
-
- return cache;
- },
- get: () => this.cache.staggeredText.get(entity.id),
- set: (id, cache) => this.cache.staggeredText.set(id, cache),
- cleanup: (cache) => {
- cache.font.delete();
- cache.typeface.delete();
- CanvasKit.Free(cache.glyphs);
- },
- });
-
- drawStaggeredText(CanvasKit, canvas, entity, cache);
- }
-
- break;
- default:
- break;
- }
- });
- this.isLocked = false;
- //console.timeEnd("draw");
- }
- }
-}
diff --git a/app/src/drawers/effects/blur.ts b/app/src/drawers/effects/blur.ts
deleted file mode 100644
index 3bd9170..0000000
--- a/app/src/drawers/effects/blur.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { Canvas, CanvasKit, Surface } from "canvaskit-wasm";
-import { BlurEffectLayer } from "primitives/Effects";
-import { z } from "zod";
-
-export default function applyBlur(
- CanvasKit: CanvasKit,
- canvas: Canvas,
- surface: Surface,
- options: z.input
-) {
- const image = surface.makeImageSnapshot();
-
- if (image) {
- const blurFilter = CanvasKit.ImageFilter.MakeBlur(
- options.amountX,
- options.amountY,
- CanvasKit.TileMode[options.tileMode],
- null
- );
-
- const paint = new CanvasKit.Paint();
-
- paint.setImageFilter(blurFilter);
-
- canvas.drawImage(image, 0, 0, paint);
- }
-}
diff --git a/app/src/drawers/ellipse.ts b/app/src/drawers/ellipse.ts
deleted file mode 100644
index bc8f17a..0000000
--- a/app/src/drawers/ellipse.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { convertToFloat } from "@tempblade/common";
-import { Canvas, CanvasKit } from "canvaskit-wasm";
-import { EllipseEntity } from "primitives/Entities";
-import { z } from "zod";
-import { buildPaintStyle } from "./paint";
-
-export default function drawEllipse(
- CanvasKit: CanvasKit,
- canvas: Canvas,
- entity: z.infer
-) {
- const paint = new CanvasKit.Paint();
-
- buildPaintStyle(CanvasKit, paint, entity.paint);
-
- const mappedPosition = entity.position.map(
- (val, index) => val - entity.radius[index] * 0.5
- );
-
- const rect = CanvasKit.XYWHRect(
- mappedPosition[0],
- mappedPosition[1],
- entity.radius[0],
- entity.radius[1]
- );
-
- canvas.drawOval(rect, paint);
-}
diff --git a/app/src/drawers/paint.ts b/app/src/drawers/paint.ts
deleted file mode 100644
index 4743765..0000000
--- a/app/src/drawers/paint.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { convertToFloat } from "@tempblade/common";
-import { Paint as SkPaint, CanvasKit } from "canvaskit-wasm";
-import { Paint } from "primitives/Paint";
-import { z } from "zod";
-
-export function buildPaintStyle(
- CanvasKit: CanvasKit,
- skPaint: SkPaint,
- paint: z.output
-) {
- const color = convertToFloat(paint.style.color.value);
-
- skPaint.setAntiAlias(true);
- skPaint.setColor(color);
-
- switch (paint.style.type) {
- case "Fill":
- skPaint.setStyle(CanvasKit.PaintStyle.Fill);
- break;
-
- case "Stroke":
- skPaint.setStyle(CanvasKit.PaintStyle.Stroke);
- skPaint.setStrokeWidth(paint.style.width);
- break;
-
- default:
- console.error("Paint Style not supported!");
- break;
- }
-}
diff --git a/app/src/drawers/rect.ts b/app/src/drawers/rect.ts
deleted file mode 100644
index 06c8d30..0000000
--- a/app/src/drawers/rect.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import { Canvas, CanvasKit } from "canvaskit-wasm";
-import { z } from "zod";
-import { RectEntity } from "primitives/Entities";
-import { buildPaintStyle } from "./paint";
-
-export default function drawRect(
- CanvasKit: CanvasKit,
- canvas: Canvas,
- entity: z.infer
-) {
- canvas.save();
-
- const paint = new CanvasKit.Paint();
-
- buildPaintStyle(CanvasKit, paint, entity.paint);
-
- const mappedPosition = entity.position.map(
- (val, index) => val - entity.size[index] * 0.5
- );
-
- const rect = CanvasKit.XYWHRect(
- mappedPosition[0],
- mappedPosition[1],
- entity.size[0],
- entity.size[1]
- );
-
- if (entity.transform) {
- const origin = [0, entity.size[1]];
-
- canvas.translate(origin[0], origin[1]);
-
- canvas.scale(entity.transform.scale[0], entity.transform.scale[1]);
-
- canvas.rotate;
-
- canvas.translate(-origin[0], -origin[1]);
- }
-
- canvas.drawRect(rect, paint);
-
- canvas.restore();
-}
diff --git a/app/src/drawers/staggered-text.ts b/app/src/drawers/staggered-text.ts
deleted file mode 100644
index 4308df3..0000000
--- a/app/src/drawers/staggered-text.ts
+++ /dev/null
@@ -1,302 +0,0 @@
-import {
- Canvas,
- CanvasKit,
- Font,
- FontMetrics,
- MallocObj,
- TypedArray,
- Typeface,
-} from "canvaskit-wasm";
-import { StaggeredTextEntity } from "primitives/Entities";
-import { z } from "zod";
-import { buildPaintStyle } from "./paint";
-import { EntityCache } from "./cache";
-import { Dependencies } from "services/dependencies.service";
-
-export type StaggeredTextCache = {
- letterMeasures: Array;
- metrics: FontMetrics;
- typeface: Typeface;
- font: Font;
- glyphs: MallocObj;
-};
-
-export type StaggeredTextEntityCache = EntityCache;
-
-function getUniqueCharacters(str: string): string {
- const uniqueCharacters: string[] = [];
-
- for (let i = 0; i < str.length; i++) {
- const character = str[i];
-
- if (!uniqueCharacters.includes(character)) {
- uniqueCharacters.push(character);
- }
- }
-
- return uniqueCharacters.join("");
-}
-
-function measureLetters(
- glyphArr: TypedArray,
- boundsById: Record,
- maxWidth: number
-): Array {
- const measuredLetters: Array = [];
-
- let currentWidth = 0;
- let currentLine = 0;
-
- for (let i = 0; i < glyphArr.length; i++) {
- const nextGlyph = boundsById[glyphArr[i]];
-
- const nextGlyphWidth = nextGlyph.x_advance;
-
- currentWidth += nextGlyphWidth;
-
- if (currentWidth > maxWidth) {
- currentLine += 1;
- currentWidth = 0;
- }
-
- measuredLetters.push({
- bounds: nextGlyph,
- line: currentLine,
- offset: {
- x: currentWidth - nextGlyphWidth,
- },
- });
- }
-
- return measuredLetters;
-}
-
-type LetterBounds = {
- x: {
- max: number;
- min: number;
- };
- y: {
- max: number;
- min: number;
- };
- width: number;
- height: number;
- x_advance: number;
-};
-
-type LetterMeasures = {
- offset: {
- x: number;
- };
- line: number;
- bounds: LetterBounds;
-};
-
-export function calculateLetters(
- CanvasKit: CanvasKit,
- entity: z.output,
- dependencies: Dependencies
-): StaggeredTextCache {
- const fontData = dependencies.fonts.get(
- entity.letter.paint.font_name
- ) as ArrayBuffer;
-
- const typeface = CanvasKit.Typeface.MakeFreeTypeFaceFromData(
- fontData
- ) as Typeface;
-
- const font = new CanvasKit.Font(typeface, entity.letter.paint.size);
-
- const glyphIDs = font.getGlyphIDs(entity.text);
-
- // font.setLinearMetrics(true);
- font.setSubpixel(true);
- font.setHinting(CanvasKit.FontHinting.None);
-
- const alphabet = getUniqueCharacters(entity.text);
- const ids = font.getGlyphIDs(alphabet);
- const unknownCharacterGlyphID = ids[0];
-
- const charsToGlyphIDs: Record = {};
-
- let glyphIdx = 0;
- for (let i = 0; i < alphabet.length; i++) {
- charsToGlyphIDs[alphabet[i]] = ids[glyphIdx];
- if ((alphabet.codePointAt(i) as number) > 65535) {
- i++; // skip the next index because that will be the second half of the code point.
- }
- glyphIdx++;
- }
-
- const metrics = font.getMetrics();
- const bounds = font.getGlyphBounds(glyphIDs);
- const widths = font.getGlyphWidths(glyphIDs);
-
- const glyphMetricsByGlyphID: Record = {};
- for (let i = 0; i < glyphIDs.length; i++) {
- const id = glyphIDs[i];
-
- const x_min = bounds[i * 4];
- const x_max = bounds[i * 4 + 2];
- const y_min = bounds[i * 4 + 3];
- const y_max = bounds[i * 4 + 1];
- const width = x_max - x_min;
- const height = Math.abs(y_max - y_min);
-
- glyphMetricsByGlyphID[id] = {
- x: {
- min: x_min,
- max: x_max,
- },
- y: {
- min: y_min,
- max: y_max,
- },
- width,
- height,
- x_advance: widths[i],
- };
- }
-
- const glyphs = CanvasKit.MallocGlyphIDs(entity.text.length);
- let glyphArr = glyphs.toTypedArray();
-
- const MAX_WIDTH = 900;
-
- // Turn the code points into glyphs, accounting for up to 2 ligatures.
- let shapedGlyphIdx = -1;
- for (let i = 0; i < entity.text.length; i++) {
- const char = entity.text[i];
- shapedGlyphIdx++;
- glyphArr[shapedGlyphIdx] = charsToGlyphIDs[char] || unknownCharacterGlyphID;
- if ((entity.text.codePointAt(i) as number) > 65535) {
- i++; // skip the next index because that will be the second half of the code point.
- }
- }
- // Trim down our array of glyphs to only the amount we have after ligatures and code points
- // that are > 16 bits.
- glyphArr = glyphs.subarray(0, shapedGlyphIdx + 1);
-
- // Break our glyphs into runs based on the maxWidth and the xAdvance.
-
- const letterMeasures = measureLetters(
- glyphArr,
- glyphMetricsByGlyphID,
- MAX_WIDTH
- );
-
- return { letterMeasures, metrics, font, typeface, glyphs };
-}
-
-export default function drawStaggeredText(
- CanvasKit: CanvasKit,
- canvas: Canvas,
- entity: z.output,
- cache: StaggeredTextCache
-) {
- const paint = new CanvasKit.Paint();
-
- const { letterMeasures: measuredLetters, font, glyphs, metrics } = cache;
-
- buildPaintStyle(CanvasKit, paint, entity.letter.paint);
-
- if (glyphs) {
- // Draw all those runs.
- for (let i = 0; i < measuredLetters.length; i++) {
- const measuredLetter = measuredLetters[i];
-
- const glyph = glyphs.subarray(i, i + 1);
-
- const blob = CanvasKit.TextBlob.MakeFromGlyphs(
- glyph as unknown as Array,
- font
- );
- if (blob) {
- canvas.save();
-
- const width = measuredLetters
- .filter((letter) => letter.line === 0)
- .reduce((prev, curr) => curr.bounds.x_advance + prev, 0);
-
- const lineOffset = (entity.letter.paint.size / 2) * measuredLetter.line;
-
- const entityOrigin = [
- entity.origin[0] - width / 2,
- entity.origin[1] + lineOffset,
- ];
-
- const lineCount = measuredLetters
- .map((e) => e.line)
- .sort((a, b) => a - b)[measuredLetters.length - 1];
-
- if (entity.letter.transform && entity.letter.transform[i]) {
- const letterTransform = entity.letter.transform[i];
- const letterOrigin = [0, 0];
-
- let origin = letterOrigin.map(
- (val, index) => val + entityOrigin[index]
- );
-
- // Calculate the spacing
-
- const spacing =
- measuredLetter.bounds.x_advance - measuredLetter.bounds.width;
-
- //console.log(spacing);
-
- // Center the origin
-
- origin[0] =
- origin[0] +
- measuredLetter.bounds.width / 2 +
- measuredLetter.offset.x +
- letterTransform.translate[0];
- origin[1] =
- origin[1] -
- metrics.descent +
- lineOffset +
- letterTransform.translate[1];
-
- //console.log(measuredLetter.bounds);
-
- canvas.translate(origin[0], origin[1]);
-
- canvas.rotate(
- letterTransform.rotate[2],
- letterTransform.rotate[0],
- letterTransform.rotate[1]
- );
-
- canvas.scale(letterTransform.scale[0], letterTransform.scale[1]);
-
- canvas.translate(
- letterTransform.translate[0],
- letterTransform.translate[1]
- );
-
- canvas.translate(
- -origin[0] + measuredLetter.offset.x,
- -origin[1] + lineOffset
- );
-
- /* canvas.translate(
- measuredLetter.offset.x + measuredLetter.bounds.width / 2,
- 0
- ); */
- }
-
- /* canvas.translate(
- width * -0.5,
- lineCount * (-entity.letter.paint.size / 2)
- ); */
-
- canvas.drawTextBlob(blob, entityOrigin[0], entityOrigin[1], paint);
-
- canvas.restore();
-
- blob.delete();
- }
- }
- }
-}
diff --git a/app/src/drawers/text.ts b/app/src/drawers/text.ts
deleted file mode 100644
index 6f8c724..0000000
--- a/app/src/drawers/text.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { Canvas, CanvasKit, Font, FontMgr, Typeface } from "canvaskit-wasm";
-import { TextEntity } from "primitives/Entities";
-import { convertToFloat } from "@tempblade/common";
-import { z } from "zod";
-import { EntityCache } from "./cache";
-import { Dependencies } from "services/dependencies.service";
-import { buildPaintStyle } from "./paint";
-
-export type TextCache = {
- fontManager: FontMgr;
-};
-
-export type TextEntityCache = EntityCache;
-
-export function buildTextCache(
- CanvasKit: CanvasKit,
- entity: z.output,
- dependencies: Dependencies
-): TextCache {
- const fontData = dependencies.fonts.get(
- entity.paint.font_name
- ) as ArrayBuffer;
-
- const fontManager = CanvasKit.FontMgr.FromData(fontData) as FontMgr;
-
- return {
- fontManager,
- };
-}
-
-export default function drawText(
- CanvasKit: CanvasKit,
- canvas: Canvas,
- entity: z.output,
- cache: TextCache
-) {
- canvas.save();
-
- const paint = new CanvasKit.Paint();
-
- const color = convertToFloat(entity.paint.style.color.value);
-
- buildPaintStyle(CanvasKit, paint, entity.paint);
-
- const pStyle = new CanvasKit.ParagraphStyle({
- textStyle: {
- color: color,
- fontFamilies: [entity.paint.font_name],
- fontSize: entity.paint.size,
- },
- textDirection: CanvasKit.TextDirection.LTR,
- textAlign: CanvasKit.TextAlign[entity.paint.align],
- });
-
- const builder = CanvasKit.ParagraphBuilder.Make(pStyle, cache.fontManager);
- builder.addText(entity.text);
- const p = builder.build();
- p.layout(900);
- const height = p.getHeight() / 2;
- const width = p.getMaxWidth() / 2;
-
- canvas.drawParagraph(p, entity.origin[0] - width, entity.origin[1] - height);
-
- canvas.restore();
-
- builder.delete();
-}
diff --git a/app/src/example.ts b/app/src/example.ts
deleted file mode 100644
index fff9d05..0000000
--- a/app/src/example.ts
+++ /dev/null
@@ -1,406 +0,0 @@
-import { AnimatedEntity } from "primitives/AnimatedEntities";
-import { Color } from "primitives/Paint";
-import { Timeline } from "primitives/Timeline";
-import {
- staticAnimatedNumber,
- staticAnimatedVec2,
- staticAnimatedVec3,
-} from "primitives/Values";
-import { z } from "zod";
-import { v4 as uuid } from "uuid";
-
-function buildRect1(
- offset: number,
- color: z.infer
-): z.input {
- return {
- id: uuid(),
- cache: {},
- type: "Rect",
- paint: {
- style: {
- type: "Stroke",
- width: 50,
- color,
- },
- },
- size: {
- type: "Vec2",
- keyframes: [
- {
- type: "Number",
- keyframes: {
- values: [
- {
- id: uuid(),
- interpolation: {
- type: "EasingFunction",
- easing_function: "CircOut",
- },
- value: 0.0,
- offset: 0.0,
- },
- {
- id: uuid(),
- interpolation: {
- type: "Linear",
- },
- value: 1280.0,
- offset: 4.0,
- },
- ],
- },
- },
- staticAnimatedNumber(720),
- ],
- },
- origin: staticAnimatedVec2(1280 / 2, 720 / 2),
- position: staticAnimatedVec2(0, 0),
- animation_data: {
- offset,
- duration: 10.0,
- },
- };
-}
-
-function buildRect(
- offset: number,
- color: z.infer
-): z.input {
- return {
- type: "Rect",
- id: uuid(),
- cache: {},
- paint: {
- style: {
- type: "Fill",
- color,
- },
- },
- size: staticAnimatedVec2(1280, 720),
- origin: staticAnimatedVec2(0, -720),
- position: staticAnimatedVec2(1280 / 2, 720 / 2),
- transform: {
- type: "Transform",
- translate: staticAnimatedVec2(0, 0),
- rotate: staticAnimatedVec3(0, 0, 0),
- skew: staticAnimatedVec2(0, 0),
- scale: {
- type: "Vec2",
- keyframes: [
- {
- type: "Number",
- keyframes: {
- values: [
- {
- id: uuid(),
-
- interpolation: {
- type: "Linear",
- },
- value: 1.0,
- offset: 0.0,
- },
- ],
- },
- },
- {
- type: "Number",
- keyframes: {
- values: [
- {
- id: uuid(),
-
- interpolation: {
- type: "EasingFunction",
- easing_function: "CircOut",
- },
- value: 0.0,
- offset: 0.0,
- },
- {
- id: uuid(),
-
- interpolation: {
- type: "Linear",
- },
- value: 1.0,
- offset: 4.0,
- },
- ],
- },
- },
- ],
- },
- },
- animation_data: {
- offset,
- duration: 10.0,
- },
- };
-}
-
-function buildText(
- text: string,
- offset: number,
- size: number,
- y_offset: number,
- color: z.infer
-): z.input {
- return {
- type: "Text",
- id: uuid(),
- cache: {},
- paint: {
- style: {
- type: "Fill",
- color,
- },
- font_name: "Gilroy-Regular",
- size,
- align: "Center",
- },
- text,
- animation_data: {
- offset,
- duration: 5.0,
- },
- origin: {
- type: "Vec2",
- keyframes: [
- {
- type: "Number",
- keyframes: {
- values: [
- {
- id: uuid(),
-
- interpolation: {
- type: "EasingFunction",
- easing_function: "CircOut",
- },
- value: (1280 / 2) * -1 - 300,
- offset: 0.0,
- },
- {
- id: uuid(),
-
- interpolation: {
- type: "EasingFunction",
- easing_function: "QuartOut",
- },
- value: 1280 / 2,
- offset: 5.0,
- },
- ],
- },
- },
- staticAnimatedNumber(720 / 2 + y_offset),
- ],
- },
- };
-}
-
-function buildStaggeredText(
- text: string,
- offset: number,
- color: z.input
-): z.input {
- return {
- type: "StaggeredText",
- text,
- cache: { valid: false },
- id: uuid(),
- origin: staticAnimatedVec2(1280 / 2, 720 / 2),
- transform: {
- type: "Transform",
- translate: staticAnimatedVec2(0, 0),
- rotate: staticAnimatedVec3(0, 0, 0),
- skew: staticAnimatedVec2(0, 0),
- scale: staticAnimatedVec2(1, 1),
- },
- animation_data: {
- offset,
- duration: 5.0,
- },
- stagger: 0.1,
- letter: {
- paint: {
- font_name: "Gilroy-Regular",
- style: {
- type: "Fill",
- color,
- },
- size: 90,
- align: "Center",
- },
- transform: {
- type: "Transform",
- translate: {
- type: "Vec2",
- keyframes: [
- staticAnimatedNumber(0),
- {
- type: "Number",
- keyframes: {
- values: [
- {
- id: uuid(),
- interpolation: {
- type: "Spring",
- damping: 15,
- stiffness: 350,
- mass: 1,
- },
- value: 200.0,
- offset: 0.0,
- },
- {
- id: uuid(),
-
- interpolation: {
- type: "Linear",
- },
- value: 0.0,
- offset: 4.0,
- },
- ],
- },
- },
- ],
- },
- rotate: {
- type: "Vec3",
- keyframes: [
- staticAnimatedNumber(0),
- staticAnimatedNumber(0),
- {
- type: "Number",
- keyframes: {
- values: [
- {
- id: uuid(),
-
- interpolation: {
- type: "Spring",
- damping: 15,
- stiffness: 150,
- mass: 1,
- },
- value: -180.0,
- offset: 0.0,
- },
- {
- id: uuid(),
-
- interpolation: {
- type: "Linear",
- },
- value: 0.0,
- offset: 4.0,
- },
- ],
- },
- },
- ],
- },
- skew: staticAnimatedVec2(0, 0),
- scale: {
- type: "Vec2",
- keyframes: [
- {
- type: "Number",
- keyframes: {
- values: [
- {
- id: uuid(),
-
- interpolation: {
- type: "EasingFunction",
- easing_function: "CircOut",
- },
- value: 0.0,
- offset: 0.0,
- },
- {
- id: uuid(),
-
- interpolation: {
- type: "Linear",
- },
- value: 1.0,
- offset: 2.0,
- },
- ],
- },
- },
- {
- type: "Number",
- keyframes: {
- values: [
- {
- id: uuid(),
-
- interpolation: {
- type: "EasingFunction",
- easing_function: "CircOut",
- },
- value: 0.0,
- offset: 0.0,
- },
- {
- id: uuid(),
-
- interpolation: {
- type: "Linear",
- },
- value: 1.0,
- offset: 2.0,
- },
- ],
- },
- },
- ],
- },
- },
- },
- };
-}
-
-export const EXAMPLE_ANIMATED_ENTITIES: Array> =
- [
- buildStaggeredText("Work in Progress...", 2.0, {
- value: [255, 255, 255, 1.0],
- }),
- // buildText("Wie gehts?", 2.5, 40, 40, { value: [200, 200, 200, 1.0] }),
- buildRect(0.6, { value: [30, 30, 30, 1.0] }),
- buildRect(0.4, { value: [20, 20, 20, 1.0] }),
- buildRect(0.2, { value: [10, 10, 10, 1.0] }),
- buildRect(0, { value: [0, 0, 0, 1.0] }),
- ];
-
-export const EXAMPLE_ANIMATED_ENTITIES_2: Array<
- z.input
-> = [
- buildText("Kleine Dumpfkopf!", 1.0, 80, -30, {
- value: [255, 255, 255, 1.0],
- }),
- // buildText("Wie gehts?", 1.5, 40, 30, { value: [255, 255, 255, 1.0] }),
- buildRect(0.8, { value: [40, 40, 40, 1.0] }),
- buildRect(0.6, { value: [30, 30, 30, 1.0] }),
- buildRect(0.4, { value: [20, 20, 20, 1.0] }),
- buildRect(0.2, { value: [10, 10, 10, 1.0] }),
- buildRect(0, { value: [0, 0, 0, 1.0] }),
-];
-
-const ExampleTimeline: z.input = {
- size: [1920, 1080],
- duration: 10.0,
- render_state: {
- curr_frame: 20,
- },
- fps: 120,
- entities: EXAMPLE_ANIMATED_ENTITIES,
-};
-
-export { ExampleTimeline };
diff --git a/app/src/hooks/useKeyControls.ts b/app/src/hooks/useKeyControls.ts
deleted file mode 100644
index 88f6b07..0000000
--- a/app/src/hooks/useKeyControls.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { useCallback, useEffect } from "react";
-import { useEntitiesStore } from "stores/entities.store";
-import { useRenderStateStore } from "stores/render-state.store";
-
-export default function useKeyControls() {
- const handleKeyPress = useCallback((e: KeyboardEvent) => {
- // Only run shortcuts if no input is focused
-
- if (document.activeElement?.nodeName !== "INPUT") {
- if (e.code === "Space") {
- e.preventDefault();
- useRenderStateStore.getState().togglePlaying();
- }
- if (e.code === "Backspace") {
- const selectedEntity = useEntitiesStore.getState().selectedEntity;
-
- if (selectedEntity !== undefined) {
- useEntitiesStore.getState().deleteEntity(selectedEntity);
- }
- }
- }
- }, []);
-
- useEffect(() => {
- // attach the event listener
- document.addEventListener("keydown", handleKeyPress);
-
- // remove the event listener
- return () => {
- document.removeEventListener("keydown", handleKeyPress);
- };
- }, [handleKeyPress]);
-}
diff --git a/app/src/hooks/useMap.ts b/app/src/hooks/useMap.ts
deleted file mode 100644
index ab0154f..0000000
--- a/app/src/hooks/useMap.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import { useCallback, useState } from "react";
-
-export type MapOrEntries = Map | [K, V][];
-
-// Public interface
-export interface Actions {
- set: (key: K, value: V) => void;
- setAll: (entries: MapOrEntries) => void;
- remove: (key: K) => void;
- reset: Map["clear"];
-}
-
-// We hide some setters from the returned map to disable autocompletion
-type Return = [
- Omit