Compare commits
52 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 92c63b0a46 | |||
| dcbc213d1f | |||
| 30dba88e1c | |||
| 6c553bd7ad | |||
| 5c3f7c6382 | |||
| 45639ca997 | |||
| ab6173a404 | |||
| 7e325de1dd | |||
| 3f8ef2c4ca | |||
| a760abda42 | |||
| 4000960811 | |||
| 02bd90c601 | |||
| 90cbde7262 | |||
| 6c6b7c91a7 | |||
| cbe23ed6d1 | |||
| 5e748b41d8 | |||
| eda572dff4 | |||
| ecf01733aa | |||
| 40d4bf3d6e | |||
| 360f7a7d31 | |||
| f580b29f4a | |||
| 40dcc81ad2 | |||
| 5169fe6342 | |||
| fa0511bc94 | |||
| 3f37de39f8 | |||
| edc0b818ff | |||
| ea6f1b3ac4 | |||
| 5f667a5ae9 | |||
| 0b78bb1d85 | |||
| 110c99d47f | |||
| b43fa4fe43 | |||
| 057ba30908 | |||
| 6e7b7e756a | |||
| 9e478207bb | |||
| 7c56a8d209 | |||
| 01a01129be | |||
| a1ba859aac | |||
| 7fdef386b7 | |||
| b3a2e6d6f4 | |||
| fdbb12aca5 | |||
| b31483c70d | |||
| ba8074a850 | |||
| bbb1256313 | |||
| f303d08467 | |||
| d3b43066cd | |||
| 53b8dc470b | |||
| 810a077bf5 | |||
| 3638a1c520 | |||
| dfb2316784 | |||
| 217241027c | |||
| 3667e916cd | |||
| 67c6ef83e4 |
@@ -0,0 +1,7 @@
|
||||
target/
|
||||
analysis/
|
||||
.git/
|
||||
.worktrees/
|
||||
web/pkg/
|
||||
dist/
|
||||
packaging/
|
||||
@@ -1,4 +1,8 @@
|
||||
analysis/raw/
|
||||
target/
|
||||
dist/
|
||||
*.asar
|
||||
app.asar.unpacked/
|
||||
web/pkg/
|
||||
.worktrees/
|
||||
.oc-agents/
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# Attribution
|
||||
|
||||
Bundled assets and where they come from. Ported code and dependency notices are in
|
||||
[THIRD_PARTY.md](THIRD_PARTY.md).
|
||||
|
||||
| Path | Title | Author | Source | License |
|
||||
|---|---|---|---|---|
|
||||
| `assets/fonts/Inter-*.ttf`, `assets/fonts/OFL.txt` | Inter 4.1 (Regular, Medium, SemiBold, Bold, Italic, Bold Italic) | The Inter Project Authors | https://rsms.me/inter/ | SIL Open Font License 1.1 |
|
||||
| `assets/app-icon/*` | PaperCraft app icon | PaperCraft contributors (original artwork; colors from the Catppuccin palette) | this repository | MIT OR Apache-2.0 |
|
||||
|
||||
## Palettes
|
||||
|
||||
The Catppuccin Latte, Frappé, Macchiato and Mocha themes use the colors of the
|
||||
[Catppuccin](https://github.com/catppuccin/catppuccin) palette (MIT, Copyright (c) 2021 Catppuccin),
|
||||
taken from the `craft-ui` crate of [craft-libs](https://github.com/storytold/craft-libs).
|
||||
|
||||
## Icon sets (not bundled)
|
||||
|
||||
`papercraft-cli icons add <set>` downloads open icon sets from the npm registry into the user's data
|
||||
folder, each with its own license file: Lucide (ISC), Tabler (MIT), Phosphor
|
||||
(MIT, https://github.com/phosphor-icons/core), Heroicons (MIT) and Material Symbols (Apache-2.0).
|
||||
They are not part of this repository or of the release builds.
|
||||
@@ -222,7 +222,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90"
|
||||
dependencies = [
|
||||
"axum-core",
|
||||
"base64 0.22.1",
|
||||
"bytes",
|
||||
"form_urlencoded",
|
||||
"futures-util",
|
||||
"http",
|
||||
"http-body",
|
||||
@@ -236,8 +238,13 @@ dependencies = [
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"serde_core",
|
||||
"serde_json",
|
||||
"serde_path_to_error",
|
||||
"serde_urlencoded",
|
||||
"sha1",
|
||||
"sync_wrapper",
|
||||
"tokio",
|
||||
"tokio-tungstenite",
|
||||
"tower",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
@@ -261,6 +268,12 @@ dependencies = [
|
||||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.22.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.23.1"
|
||||
@@ -294,6 +307,15 @@ version = "2.13.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06"
|
||||
|
||||
[[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 = "block2"
|
||||
version = "0.5.1"
|
||||
@@ -431,8 +453,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cpufeatures",
|
||||
"rand_core",
|
||||
"cpufeatures 0.3.1",
|
||||
"rand_core 0.10.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -507,6 +529,26 @@ dependencies = [
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "console_error_panic_hook"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "console_log"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "86919cef3e37b9356ccf54d4421208c17ecfda01beae61393e7ffd72916c0ef1"
|
||||
dependencies = [
|
||||
"log",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "core-foundation"
|
||||
version = "0.9.4"
|
||||
@@ -517,6 +559,16 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "core-foundation"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
|
||||
dependencies = [
|
||||
"core-foundation-sys",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "core-foundation-sys"
|
||||
version = "0.8.7"
|
||||
@@ -530,9 +582,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"core-foundation",
|
||||
"core-foundation 0.9.4",
|
||||
"core-graphics-types",
|
||||
"foreign-types",
|
||||
"foreign-types 0.5.0",
|
||||
"libc",
|
||||
]
|
||||
|
||||
@@ -543,7 +595,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"core-foundation",
|
||||
"core-foundation 0.9.4",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cpufeatures"
|
||||
version = "0.2.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
@@ -594,12 +655,28 @@ version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
|
||||
|
||||
[[package]]
|
||||
name = "crypto-common"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cursor-icon"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"
|
||||
|
||||
[[package]]
|
||||
name = "data-encoding"
|
||||
version = "2.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06"
|
||||
|
||||
[[package]]
|
||||
name = "data-url"
|
||||
version = "0.3.2"
|
||||
@@ -637,6 +714,16 @@ dependencies = [
|
||||
"thiserror 2.0.21",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.10.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
|
||||
dependencies = [
|
||||
"block-buffer",
|
||||
"crypto-common",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dirs"
|
||||
version = "6.0.0"
|
||||
@@ -985,6 +1072,15 @@ dependencies = [
|
||||
"tinyvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
|
||||
dependencies = [
|
||||
"foreign-types-shared 0.1.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types"
|
||||
version = "0.5.0"
|
||||
@@ -992,7 +1088,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
|
||||
dependencies = [
|
||||
"foreign-types-macros",
|
||||
"foreign-types-shared",
|
||||
"foreign-types-shared 0.3.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1006,6 +1102,12 @@ dependencies = [
|
||||
"syn 3.0.7",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types-shared"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types-shared"
|
||||
version = "0.3.1"
|
||||
@@ -1109,6 +1211,16 @@ dependencies = [
|
||||
"slab",
|
||||
]
|
||||
|
||||
[[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 = "gethostname"
|
||||
version = "1.1.0"
|
||||
@@ -1140,7 +1252,7 @@ dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"r-efi 6.0.0",
|
||||
"rand_core",
|
||||
"rand_core 0.10.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1339,13 +1451,29 @@ dependencies = [
|
||||
"want",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-tls"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"http-body-util",
|
||||
"hyper",
|
||||
"hyper-util",
|
||||
"native-tls",
|
||||
"tokio",
|
||||
"tokio-native-tls",
|
||||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-util"
|
||||
version = "0.1.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"base64 0.23.1",
|
||||
"bytes",
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
@@ -2017,6 +2145,23 @@ dependencies = [
|
||||
"thiserror 2.0.21",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "native-tls"
|
||||
version = "0.2.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"log",
|
||||
"openssl",
|
||||
"openssl-probe",
|
||||
"openssl-sys",
|
||||
"schannel",
|
||||
"security-framework",
|
||||
"security-framework-sys",
|
||||
"tempfile",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ndk"
|
||||
version = "0.9.0"
|
||||
@@ -2485,6 +2630,49 @@ version = "1.70.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
|
||||
|
||||
[[package]]
|
||||
name = "openssl"
|
||||
version = "0.10.81"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45"
|
||||
dependencies = [
|
||||
"bitflags 2.13.2",
|
||||
"cfg-if",
|
||||
"foreign-types 0.3.2",
|
||||
"libc",
|
||||
"openssl-macros",
|
||||
"openssl-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl-macros"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.119",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl-probe"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
|
||||
|
||||
[[package]]
|
||||
name = "openssl-sys"
|
||||
version = "0.9.117"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "option-ext"
|
||||
version = "0.2.0"
|
||||
@@ -2520,12 +2708,15 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "paper-rs"
|
||||
version = "0.1.0"
|
||||
name = "papercraft"
|
||||
version = "0.5.0"
|
||||
dependencies = [
|
||||
"arboard",
|
||||
"axum",
|
||||
"base64 0.23.1",
|
||||
"bytemuck",
|
||||
"console_error_panic_hook",
|
||||
"console_log",
|
||||
"craft-ui",
|
||||
"dirs",
|
||||
"egui",
|
||||
@@ -2535,6 +2726,7 @@ dependencies = [
|
||||
"fastrand",
|
||||
"i_overlay",
|
||||
"image",
|
||||
"js-sys",
|
||||
"log",
|
||||
"lyon",
|
||||
"miniz_oxide 0.9.1",
|
||||
@@ -2548,14 +2740,21 @@ dependencies = [
|
||||
"resvg",
|
||||
"rfd",
|
||||
"rmcp",
|
||||
"semver",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"tokio",
|
||||
"tokio-tungstenite",
|
||||
"tokio-util",
|
||||
"ttf-parser",
|
||||
"usvg",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"web-sys",
|
||||
"web-time",
|
||||
"wgpu",
|
||||
"winit",
|
||||
"winresource",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2716,6 +2915,15 @@ dependencies = [
|
||||
"zerovec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
|
||||
dependencies = [
|
||||
"zerocopy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "presser"
|
||||
version = "0.3.1"
|
||||
@@ -2802,6 +3010,16 @@ version = "6.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.9.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41"
|
||||
dependencies = [
|
||||
"rand_chacha",
|
||||
"rand_core 0.9.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.10.3"
|
||||
@@ -2810,7 +3028,26 @@ checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af"
|
||||
dependencies = [
|
||||
"chacha20",
|
||||
"getrandom 0.4.3",
|
||||
"rand_core",
|
||||
"rand_core 0.10.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core 0.9.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.9.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
|
||||
dependencies = [
|
||||
"getrandom 0.3.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2952,7 +3189,7 @@ version = "0.13.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"base64 0.23.1",
|
||||
"bytes",
|
||||
"futures-core",
|
||||
"futures-util",
|
||||
@@ -2960,15 +3197,19 @@ dependencies = [
|
||||
"http-body",
|
||||
"http-body-util",
|
||||
"hyper",
|
||||
"hyper-tls",
|
||||
"hyper-util",
|
||||
"js-sys",
|
||||
"log",
|
||||
"native-tls",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"rustls-pki-types",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sync_wrapper",
|
||||
"tokio",
|
||||
"tokio-native-tls",
|
||||
"tokio-util",
|
||||
"tower",
|
||||
"tower-http",
|
||||
@@ -3041,7 +3282,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ab5023804cbe0304cbe06197ac16e645a0a0d0ffa2953bf735c15c2fa0213350"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"base64",
|
||||
"base64 0.23.1",
|
||||
"bytes",
|
||||
"chrono",
|
||||
"futures",
|
||||
@@ -3052,7 +3293,7 @@ dependencies = [
|
||||
"pastey",
|
||||
"pin-project-lite",
|
||||
"process-wrap",
|
||||
"rand",
|
||||
"rand 0.10.3",
|
||||
"reqwest",
|
||||
"schemars",
|
||||
"serde",
|
||||
@@ -3129,12 +3370,27 @@ dependencies = [
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls-pki-types"
|
||||
version = "1.15.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96"
|
||||
dependencies = [
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
|
||||
|
||||
[[package]]
|
||||
name = "same-file"
|
||||
version = "1.0.6"
|
||||
@@ -3144,6 +3400,15 @@ dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "schannel"
|
||||
version = "0.1.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939"
|
||||
dependencies = [
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "schemars"
|
||||
version = "1.2.2"
|
||||
@@ -3195,6 +3460,29 @@ dependencies = [
|
||||
"tiny-skia 0.11.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "security-framework"
|
||||
version = "3.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d"
|
||||
dependencies = [
|
||||
"bitflags 2.13.2",
|
||||
"core-foundation 0.10.1",
|
||||
"core-foundation-sys",
|
||||
"libc",
|
||||
"security-framework-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "security-framework-sys"
|
||||
version = "2.17.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3"
|
||||
dependencies = [
|
||||
"core-foundation-sys",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "self_cell"
|
||||
version = "1.3.0"
|
||||
@@ -3261,6 +3549,49 @@ dependencies = [
|
||||
"zmij",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_path_to_error"
|
||||
version = "0.1.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"serde",
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_spanned"
|
||||
version = "1.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4e7523beb55eece201a2356bee0bbca0d1ab466c14c07703b2e0ee6d42cb0c2c"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_urlencoded"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
|
||||
dependencies = [
|
||||
"form_urlencoded",
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sha1"
|
||||
version = "0.10.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cpufeatures 0.2.17",
|
||||
"digest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shlex"
|
||||
version = "2.0.1"
|
||||
@@ -3522,6 +3853,19 @@ dependencies = [
|
||||
"syn 3.0.7",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tempfile"
|
||||
version = "3.27.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
|
||||
dependencies = [
|
||||
"fastrand",
|
||||
"getrandom 0.3.4",
|
||||
"once_cell",
|
||||
"rustix 1.1.5",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.4.1"
|
||||
@@ -3679,6 +4023,16 @@ dependencies = [
|
||||
"syn 3.0.7",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-native-tls"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
|
||||
dependencies = [
|
||||
"native-tls",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-stream"
|
||||
version = "0.1.19"
|
||||
@@ -3690,6 +4044,18 @@ dependencies = [
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-tungstenite"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c"
|
||||
dependencies = [
|
||||
"futures-util",
|
||||
"log",
|
||||
"tokio",
|
||||
"tungstenite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-util"
|
||||
version = "0.7.20"
|
||||
@@ -3704,6 +4070,21 @@ dependencies = [
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "1.1.8+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "20489e00e4d8741d6be680764cc12e270655e375a20d1011e844a9c3379e678d"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"serde_core",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
"toml_parser",
|
||||
"toml_writer",
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "1.1.2+spec-1.1.0"
|
||||
@@ -3734,6 +4115,12 @@ dependencies = [
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_writer"
|
||||
version = "1.1.3+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "06bdbd8cfc056b8d2e2e85f29b56a3bdbecb527cef81eb39e3e7b98af4652770"
|
||||
|
||||
[[package]]
|
||||
name = "tower"
|
||||
version = "0.5.3"
|
||||
@@ -3823,6 +4210,22 @@ version = "0.25.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
|
||||
|
||||
[[package]]
|
||||
name = "tungstenite"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"data-encoding",
|
||||
"http",
|
||||
"httparse",
|
||||
"log",
|
||||
"rand 0.9.5",
|
||||
"sha1",
|
||||
"thiserror 2.0.21",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "type-map"
|
||||
version = "0.5.1"
|
||||
@@ -3832,6 +4235,12 @@ dependencies = [
|
||||
"rustc-hash 2.1.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typenum"
|
||||
version = "1.20.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-bidi"
|
||||
version = "0.3.18"
|
||||
@@ -3892,7 +4301,7 @@ version = "0.48.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "977d0a4abdef933f424a99fe09f95576e089b90aebc6f016a3bc813762493e91"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"base64 0.23.1",
|
||||
"data-url",
|
||||
"flate2",
|
||||
"fontdb",
|
||||
@@ -3937,6 +4346,12 @@ dependencies = [
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vcpkg"
|
||||
version = "0.2.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||
|
||||
[[package]]
|
||||
name = "vello_common"
|
||||
version = "0.1.0"
|
||||
@@ -4732,7 +5147,7 @@ dependencies = [
|
||||
"calloop 0.13.0",
|
||||
"cfg_aliases",
|
||||
"concurrent-queue",
|
||||
"core-foundation",
|
||||
"core-foundation 0.9.4",
|
||||
"core-graphics",
|
||||
"cursor-icon",
|
||||
"dpi",
|
||||
@@ -4778,6 +5193,16 @@ dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winresource"
|
||||
version = "0.1.34"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a2bc6d36480b829272a5bdabf08e6dca8004761c1da7e35efef800540c66221b"
|
||||
dependencies = [
|
||||
"toml",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wit-bindgen"
|
||||
version = "0.57.1"
|
||||
@@ -4923,6 +5348,12 @@ dependencies = [
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zeroize"
|
||||
version = "1.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e13084392c5e4bc371903e2935a5eaeed24905a7511356b883835e18a78f6879"
|
||||
|
||||
[[package]]
|
||||
name = "zerotrie"
|
||||
version = "0.2.5"
|
||||
|
||||
@@ -1,35 +1,43 @@
|
||||
[package]
|
||||
name = "paper-rs"
|
||||
version = "0.1.0"
|
||||
name = "papercraft"
|
||||
version = "0.5.0"
|
||||
edition = "2024"
|
||||
rust-version = "1.95"
|
||||
description = "A native infinite-canvas app for planning, working and sketching"
|
||||
license = "MIT OR Apache-2.0"
|
||||
|
||||
[lib]
|
||||
name = "paper_rs"
|
||||
name = "papercraft"
|
||||
path = "src/lib.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "paper-rs"
|
||||
name = "papercraft"
|
||||
path = "src/main.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "paper-rs-mcp"
|
||||
path = "src/bin/paper-rs-mcp.rs"
|
||||
name = "papercraft-mcp"
|
||||
path = "src/bin/papercraft-mcp.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "papercraft-cli"
|
||||
path = "src/bin/papercraft-cli.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "papercraft-relay"
|
||||
path = "src/bin/papercraft-relay.rs"
|
||||
|
||||
[dependencies]
|
||||
egui = "0.36"
|
||||
egui-wgpu = "0.36"
|
||||
egui-winit = "0.36"
|
||||
wgpu = "30"
|
||||
winit = "0.30"
|
||||
lyon = "1"
|
||||
ttf-parser = "0.25"
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
serde_json = { version = "1", features = ["float_roundtrip"] }
|
||||
semver = "1"
|
||||
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "gif", "webp"] }
|
||||
pollster = "0.4"
|
||||
web-time = "1"
|
||||
bytemuck = { version = "1", features = ["derive"] }
|
||||
log = "0.4"
|
||||
env_logger = "0.11"
|
||||
@@ -40,22 +48,32 @@ craft-ui = { version = "0.1.0", git = "https://git.marcospaulo.dev.br/masi/craft
|
||||
i_overlay = "9.0.1"
|
||||
miniz_oxide = "0.9.1"
|
||||
usvg = "0.48"
|
||||
arboard = { version = "3.6.1", features = ["image-data"] }
|
||||
rmcp = { version = "3.5.1", default-features = false, features = ["server", "base64", "transport-streamable-http-server", "transport-io", "client", "transport-streamable-http-client-reqwest"] }
|
||||
tokio = { version = "1", features = ["rt-multi-thread", "net", "sync", "macros", "time", "io-std"] }
|
||||
axum = { version = "0.8", default-features = false, features = ["http1", "tokio"] }
|
||||
tokio-util = "0.7"
|
||||
resvg = "0.48"
|
||||
tokio = { version = "1", features = ["sync"] }
|
||||
base64 = "0.23"
|
||||
|
||||
[build-dependencies]
|
||||
winresource = "0.1"
|
||||
|
||||
[profile.release]
|
||||
debug = false
|
||||
|
||||
# Browser bundle only (`web/build.sh`): size over compile time. Native release is untouched.
|
||||
[profile.web]
|
||||
inherits = "release"
|
||||
lto = true
|
||||
codegen-units = 1
|
||||
panic = "abort"
|
||||
opt-level = "z"
|
||||
|
||||
[profile.dev.package."*"]
|
||||
opt-level = 2
|
||||
|
||||
[dev-dependencies]
|
||||
resvg = "0.48"
|
||||
rmcp = { version = "3.5.1", default-features = false, features = ["transport-child-process"] }
|
||||
reqwest = { version = "0.13", default-features = false }
|
||||
# The relay test drives a fake tab over a real WebSocket; same version axum's `ws` uses.
|
||||
tokio-tungstenite = "0.29"
|
||||
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
muda = { version = "0.21", default-features = false }
|
||||
@@ -63,3 +81,25 @@ objc2 = "0.6"
|
||||
objc2-app-kit = "0.3"
|
||||
objc2-foundation = "0.3"
|
||||
raw-window-handle = "0.6"
|
||||
|
||||
# Native only: the OS clipboard and the MCP HTTP server do not exist in the browser.
|
||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
||||
egui-winit = "0.36"
|
||||
winit = "0.30"
|
||||
arboard = { version = "3.6.1", features = ["image-data"] }
|
||||
rmcp = { version = "3.5.1", default-features = false, features = ["server", "base64", "transport-streamable-http-server", "transport-io", "client", "transport-streamable-http-client-reqwest"] }
|
||||
tokio = { version = "1", features = ["rt-multi-thread", "net", "sync", "macros", "time", "io-std", "fs"] }
|
||||
axum = { version = "0.8", default-features = false, features = ["http1", "tokio", "ws", "json", "query"] }
|
||||
tokio-util = "0.7"
|
||||
# Shared-project sync; the system TLS stack so https servers work without bundling one.
|
||||
reqwest = { version = "0.13", default-features = false, features = ["native-tls"] }
|
||||
|
||||
# Browser build (`src/web.rs`): canvas + WebGPU/WebGL surface, DOM events instead of winit.
|
||||
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
||||
wgpu = { version = "30", features = ["webgl"] }
|
||||
wasm-bindgen = "0.2"
|
||||
wasm-bindgen-futures = "0.4"
|
||||
js-sys = "0.3"
|
||||
console_error_panic_hook = "0.1"
|
||||
console_log = "1"
|
||||
web-sys = { version = "0.3", features = ["Window", "Document", "Element", "HtmlElement", "HtmlCanvasElement", "KeyboardEvent", "PointerEvent", "WheelEvent", "ClipboardEvent", "DataTransfer", "MediaQueryList", "Location", "Performance", "Navigator", "Clipboard", "CssStyleDeclaration", "console", "WebSocket", "MessageEvent", "CloseEvent", "ErrorEvent", "Storage", "Crypto", "DragEvent", "FileList", "File", "Blob", "Request", "RequestInit", "Response"] }
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
# PaperCraft redesign: handoff
|
||||
|
||||
Last updated 2026-10-21. Branch `debrand`, pushed to `origin` (`masi/papercraft`). Latest commit when this was written: `3f8ef2c`.
|
||||
|
||||
## The goal
|
||||
|
||||
Port the PaperCraft redesign (the `PaperCraft` design file) into the egui app and remake all the UI. A Stop hook keeps judging that goal "not met"; the list below is what is actually left, so the next session does not have to re-derive it.
|
||||
|
||||
## What is done
|
||||
|
||||
* Design file `~/Documents/paper-rs/PaperCraft` (pages `Design System`, `Redesign`, `Redesign (from AI spec)`): built earlier. The dead "+" next to the Layer and Code & AI Handoff headings was removed from all three pages on 2026-10-21. Backup of the file before that edit: `/private/tmp/claude-501/pc-work/PaperCraft.backup` (temp, may be gone).
|
||||
* App UI: floating rounded panels, shared component kit (`src/ui/kit.rs`), Lottie icon motion (`src/lottie`, `src/ui/lottie_icon.rs`, `src/ui/motion.rs`), home, trash, settings (theme, interface scale, animations), command palette, confirm modals, updater, Present mode (arrow keys, prototype links, camera glide between frames), History/Comments/Agent side views, inspector with Design/Prototype tabs, Effects (drop shadow), export presets, icons in the Share menu and every context menu.
|
||||
* Agent feedback: animated "working" pill in the top bar and a pulsing ring around the canvas while an agent has called a tool in the last 6 seconds (`agent_pill`, `agent_glow` in `src/ui/mod.rs`).
|
||||
* Sharing: file sync through the relay (`src/sync.rs`) now merges a page when both sides changed it (`src/merge.rs`, base copies in `.sync-base/`). Verified between two browser sessions and the native app against `papercraft-relay`.
|
||||
* Web build: `sh web/build.sh`, serve with `papercraft-relay --static web --data <dir>`. Fixed the library probe hiding Share/Join after reload, the share dialog is a modal, the menu bar folds into one "Menu" when the canvas is under 1100px, saved versions work in the browser.
|
||||
* Skills: `craft-skills/skills/papercraft` (new `references/compact-workflow.md`), `skills-papercraft/skills/*` (project layout, design-to-code pointers). Both repos pushed to `main`.
|
||||
* Plans: `docs/shared-libs.md` (what to move into `craft-libs`), `docs/feature-ideas.md` (ranked ideas).
|
||||
|
||||
## What is not done, and why
|
||||
|
||||
1. **`/Applications/PaperCraft.app` is the older build.** The user has PaperCraft open for other work and said not to close it. `tools/install-local.sh` asks a running app to quit, so it was never run against `/Applications`. The final build is installed at `~/Applications/PaperCraft.app` (installed with `PAPERCRAFT_APP_PATH="$HOME/Applications/PaperCraft.app" bash tools/install-local.sh --no-launch`). To finish: the user closes PaperCraft, then `bash tools/install-local.sh`.
|
||||
2. **Linux rounded corners:** not built. Needs a transparent surface, a paint callback that clears the four corners with replace blending, and `drag_resize_window` edge resizing; none can be tested without a Linux desktop. Reasoning is in `docs/feature-ideas.md` item 9. Windows is done (`with_corner_preference(Round)` and undecorated shadow, compile-checked only).
|
||||
3. **History, Agent, Comments** show only the project's own data. Richer content needs backend features that do not exist (server-side history, an agent-activity feed, threaded comments with replies from people). See `docs/feature-ideas.md`.
|
||||
4. **Layer and Code "+"**: the user chose to remove them from the design, so design and app match.
|
||||
5. Smart transitions that animate matching layers between frames, layer blur, presence on shared projects, version compare: listed in `docs/feature-ideas.md`, not built.
|
||||
6. **Shared libraries:** nothing moved. `docs/shared-libs.md` has the plan; it touches `craft-libs` and NotesCraft and needs the user's go-ahead.
|
||||
|
||||
## Rules the user set
|
||||
|
||||
* Never close, quit or reinstall over the user's running PaperCraft. Memory: `dont-close-users-papercraft`. Launch test builds with their own `PAPERCRAFT_HOME` and `PAPERCRAFT_MCP_PORT`, keep the PID from `$!`, kill only that PID. Never `pkill` by name.
|
||||
* Commit and push only when asked (they have asked for pushes of this work). No `--no-verify`.
|
||||
* Do not click macOS permission prompts for the user. Launching the app binary directly with `PAPERCRAFT_HOME` set to a temp folder avoids the Documents prompt.
|
||||
* Caveman terse chat style; normal prose in files and commits.
|
||||
|
||||
## How to verify
|
||||
|
||||
* `cargo test --no-fail-fast`. `ten_thousand_elements_cache_and_pan_without_rework` (tests/perf.rs) is a timing test and fails when the machine is busy; run it alone.
|
||||
* `cargo check --lib --target wasm32-unknown-unknown` and `cargo check --lib --target x86_64-pc-windows-msvc` for the other platforms.
|
||||
* On screen: launch `target/debug/papercraft` (or the installed binary) with `PAPERCRAFT_HOME=<tmp> PAPERCRAFT_MCP_PORT=<free port>`, find its window with `osascript ... get {position, size} of window 1` for that PID, and use the helpers in `/private/tmp/claude-501/pc-work/` (`click`, `drag` Swift binaries; may be gone). Drive the app with `papercraft-cli` and `PAPERCRAFT_MCP_PORT`. Note `papercraft-cli call <tool> -` reads stdin; pass `'{}'` for no arguments.
|
||||
* Browser: Playwright's Chromium (installed under `~/Library/Caches/ms-playwright`), script in `/private/tmp/claude-501/pc-work/pw/` (`lib.mjs` launches with `--use-angle=swiftshader --enable-unsafe-swiftshader --ignore-gpu-blocklist --enable-unsafe-webgpu`). The browser MCP tool's own Chrome link is broken.
|
||||
|
||||
## Gotchas
|
||||
|
||||
* egui tests need `out.textures_delta.clear()` after each frame.
|
||||
* `cargo fmt` reformats the whole crate, including files with the user's uncommitted edits.
|
||||
* The relay port 8787 may be taken by another local service; use `--listen 127.0.0.1:18787`.
|
||||
* A `.share` file in a project folder marks it shared; `.sync-base/` holds merge bases and never syncs.
|
||||
* Home cards open on double-click.
|
||||
@@ -1,6 +1,6 @@
|
||||
# Progress
|
||||
|
||||
Last updated: 2026-10-11.
|
||||
Last updated: 2026-10-21.
|
||||
|
||||
## Phase 3: local-first design and whiteboard tool
|
||||
|
||||
@@ -34,7 +34,7 @@ are credited in `THIRD_PARTY.md`.
|
||||
to that page's own document and history (`Editor::with_page`) without switching the view.
|
||||
* **Bridge** (`paper-rs-mcp`): rmcp stdio server that lists tools offline and relays calls to
|
||||
the app over HTTP, reconnecting after app restarts.
|
||||
* **Tools** (`src/mcp/tools.rs`): Paper's names and argument shapes where there is an
|
||||
* **Tools** (`src/mcp/tools.rs`): 53 tools at the time (61 now), using Paper's names and argument shapes where there is an
|
||||
equivalent (see README), plus `create_shape`, `select_nodes`, `undo`, `redo`.
|
||||
`write_html` (`src/mcp/{html,css}.rs`, `exec.rs` `Builder`) maps flex/block layout onto auto
|
||||
layout with CSS stretch semantics, text styles and rich-text runs, backgrounds, gradients,
|
||||
@@ -76,6 +76,21 @@ are credited in `THIRD_PARTY.md`.
|
||||
* **Not carried over**: comments, design tokens, AI image generation, video export, teams;
|
||||
moving layers between pages; remote image URLs (see README Known gaps).
|
||||
|
||||
### 2026-10-21: Agent runs and change review
|
||||
|
||||
* Agent editing calls group into runs, snapshot each edited page as `Before agent run N`, and end on 30 seconds idle, `finish_working_on_nodes`, or project switch. Runs persist under `runs/` and keep the newest 50.
|
||||
* Agent view lists runs and supports review, whole-run revert, per-change undo and accept all. Review adds canvas outlines and a finish toast; palette commands review or revert the last run.
|
||||
* Id-paired page diffs power review; History version compare UI remains todo. Completed with full restore (including variables, modes and tokens), tool edit classification, and wasm support.
|
||||
|
||||
### 2026-10-21: Design libraries and offline CLI
|
||||
|
||||
* Variables are now collections with modes, slash groups, four types and aliases, stored in `design.json` (project version 2; 0.4.0 refuses migrated projects). Each page keeps a derived cache; every edit is one undo step per page, and the page-only removals are gone. Per-page active mode per collection.
|
||||
* Fields bind to variables (stroke, text color, size, gap, padding, radius, font size, line height, opacity, visible) in the inspector and with `bind_variable`; gradients do not bind yet.
|
||||
* Instances work across pages (`component_key`, source page or library); deleting a main flags its instances.
|
||||
* Libraries: publish a snapshot (`library.json`), enable, update with review (overrides kept), disable, and keep working when the source is missing. Variables modal, Libraries modal and Assets view in the UI; `create_collection`, `delete_variables`, `bind_variable` and five `*_library` tools in MCP (61 tools).
|
||||
* `papercraft-cli call --offline` and `papercraft-cli shell` run the tools in-process on the project store, refuse a project the app has open, and fall back to the software adapter for screenshots. See `docs/agents.md`.
|
||||
* Evidence: `src/variables.rs`, `src/editor/design.rs`, `src/libraries.rs`, `src/cli.rs`, `tests/{libraries,cross_page_components,variables_ui,assets_panel,cli_offline}.rs`, specs in `specs/design-libraries/` and `specs/cli-offline/`.
|
||||
|
||||
### P6 notes
|
||||
|
||||
* **Export** (`io/export.rs`): scope = selection, each frame, page or all pages; format =
|
||||
|
||||
@@ -1,345 +1,275 @@
|
||||
# paper-rs
|
||||
<h1 align="center">PaperCraft</h1>
|
||||
|
||||
A native Rust infinite canvas for planning, working and sketching. It is modeled on the
|
||||
behavior of [Paper](https://paper.design) and built clean-room on `wgpu` + `winit` + `egui`.
|
||||
<p align="center">
|
||||
<b>A native, local-first design and whiteboard canvas that AI agents can drive.</b>
|
||||
</p>
|
||||
|
||||

|
||||
<p align="center">
|
||||
<img alt="Status: alpha" src="https://img.shields.io/badge/status-alpha-d69e2e?style=flat-square">
|
||||
<img alt="Rust" src="https://img.shields.io/badge/Rust-egui%20%C2%B7%20wgpu-b7410e?style=flat-square&logo=rust">
|
||||
<img alt="Agents: MCP and CLI" src="https://img.shields.io/badge/agents-MCP%20%2B%20CLI-555555?style=flat-square">
|
||||
<img alt="License: MIT OR Apache-2.0" src="https://img.shields.io/badge/license-MIT%20%2F%20Apache--2.0-3a3a3a?style=flat-square">
|
||||
</p>
|
||||
|
||||
A local-first design and whiteboard tool. Projects are folders of pages; each page is an
|
||||
infinite canvas with frames, groups, components and instances, auto layout and constraints,
|
||||
vector paths and booleans, gradients and image fills, rich text, smart guides, and
|
||||
pressure-sensitive ink — plus a whiteboard mode: hand-drawn (rough.js-style) shapes, arrows that
|
||||
bind to shapes and re-route, elbow connectors, sticky notes, a laser pointer and a shape
|
||||
library. Everything autosaves, and exports to PNG, SVG and PDF; Excalidraw files and SVG import.
|
||||
<p align="center">
|
||||
<img src="docs/screenshots/readme/hero.png" alt="PaperCraft with the Redesign page of its own design file open: layers on the left, the canvas in the middle, the inspector on the right" width="100%">
|
||||
<br>
|
||||
<sub>PaperCraft editing its own design file (the Redesign page).</sub>
|
||||
</p>
|
||||
|
||||

|
||||
<p align="center">
|
||||
<a href="#what-it-is">What it is</a> ·
|
||||
<a href="#features">Features</a> ·
|
||||
<a href="#agents">Agents</a> ·
|
||||
<a href="#get-started">Get started</a> ·
|
||||
<a href="#keyboard-shortcuts">Shortcuts</a> ·
|
||||
<a href="#status-and-known-limits">Status</a> ·
|
||||
<a href="#project-layout">Layout</a> ·
|
||||
<a href="#license-and-credits">License</a>
|
||||
</p>
|
||||
|
||||
> **Clean-room note.** `analysis/PAPER_ARCHITECTURE.md` documents how Paper Desktop 0.5.15 is
|
||||
> put together, from a licensed install. The Electron package turned out to be a thin shell
|
||||
> around the hosted web editor. paper-rs re-implements *behavior* only. No Paper code,
|
||||
> shaders, icons, fonts or assets are used or committed. The UI and canvas text use
|
||||
> [Inter](https://rsms.me/inter/) 4.1 (SIL OFL 1.1), bundled in `assets/fonts/`.
|
||||
## What it is
|
||||
|
||||
## Reverse-engineered origin
|
||||
PaperCraft is an infinite-canvas design tool and whiteboard written in Rust (egui on wgpu). It runs as a desktop app with no account and no cloud: a project is a folder of JSON files on your disk. It also serves the Model Context Protocol and ships a CLI, so an agent such as Claude Code or Codex can read and edit the open canvas, screenshot the result and lint it, one undo step per tool call.
|
||||
|
||||
paper-rs is an independent, clean-room-style reimplementation. It was reverse engineered from
|
||||
[Paper](https://paper.design) by studying the behavior of the Paper desktop app with
|
||||
[REA](https://github.com/morluto/rea) and Claude Code. It is not affiliated with or endorsed by
|
||||
Paper. No original Paper code or assets are included in this repository.
|
||||
It is an alpha. It is good for building screens, design systems and sketches, and it is not a replacement for a mature design tool. See [Status and known limits](#status-and-known-limits).
|
||||
|
||||
## Projects
|
||||
## Features
|
||||
|
||||
paper-rs opens on a **home screen** of your projects (recents grid with thumbnails, New, Import,
|
||||
and Rename / Duplicate / Move to Trash from each card's ⋯ menu or right-click; restore from
|
||||
Trash). Each project is a plain folder in `~/Documents/paper-rs/<name>/` holding `project.json`
|
||||
and one JSON file per page in `pages/`. Work is autosaved about a second after each change with
|
||||
crash-safe atomic writes; files are versioned and older versions migrate on load. Set
|
||||
`PAPER_RS_HOME` to use another folder.
|
||||
**Canvas and layout**
|
||||
* Frames with clipping, groups, vector shapes with the Pen and Bézier editing, boolean operations, gradients, image fills, strokes, per-corner radii, opacity and blend modes, drop shadows, rich text, smart guides, measurements, align and distribute.
|
||||
* Auto layout (direction, gap, padding, hug, fill, wrap, space-between) and constraints.
|
||||
* A layers tree you can drag to reorder or re-parent, an inspector with Design and Prototype tabs, and a command palette over every action, page and layer (⌘K).
|
||||
* Whiteboard mode: hand-drawn (rough.js-style) shapes, arrows bound to shapes, elbow connectors, sticky notes, freehand ink and a laser pointer on the same canvas.
|
||||
* Pages: each page is its own canvas with its own undo history and view.
|
||||
|
||||
A project has any number of **pages** (Pages list at the top of the left sidebar: + to add,
|
||||
double-click to rename, right-click to duplicate or delete, drag to reorder). Each page is its
|
||||
own infinite canvas with its own undo history and view. Copy and paste works between pages and
|
||||
between projects.
|
||||
**Design systems**
|
||||
* **Components** work across pages and across projects. Edit a main component and its instances follow, except the properties an instance overrode.
|
||||
* **Shared libraries:** publish a project as a library, enable it in other projects, and take updates when it changes.
|
||||
* **Variables:** collections with modes, slash groups (`color/brand/primary`), types (color, number, string, boolean) and aliases. Fills, strokes, text color, size, gap, padding, radius, font size, line height, opacity and visibility bind to variables.
|
||||
* **Variables modal** (⌘⌥⇧V, or "Variables…" in the palette) to edit all of it; **Assets view** (side tab) with components grouped by name; **Libraries modal** to publish, enable and update.
|
||||
* Lint (`lint_design`) for contrast, the 4px grid, type scale, touch targets, default names and hard-coded colors, with auto-fix.
|
||||
* Design tokens out as CSS, JSON (W3C DTCG) or Tailwind `@theme`; code out as JSX with inline styles, Tailwind or HTML.
|
||||
|
||||
## Build and run
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
<img src="docs/screenshots/readme/variables.png" alt="The Variables modal listing the Colors collection with four Catppuccin modes" width="100%">
|
||||
<br><sub>Variables modal: collections, modes, groups and types.</sub>
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
<img src="docs/screenshots/readme/assets.png" alt="The Assets side view with components grouped into Banner, Button, Checkbox and Chip" width="100%">
|
||||
<br><sub>Assets view: components grouped by name, from this file and enabled libraries.</sub>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
<img src="docs/screenshots/readme/libraries.png" alt="The Libraries modal with one enabled library" width="100%">
|
||||
<br><sub>Libraries modal: publish this file, enable libraries from the store.</sub>
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
<img src="docs/screenshots/readme/agent-review.png" alt="Agent run review: a list of changes on the left and green, yellow and red outlines on the canvas" width="100%">
|
||||
<br><sub>Review of an agent run, with the changes outlined on the canvas.</sub>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
You need Rust 1.95 or newer (`rust-version` in `Cargo.toml`; the latest stable is recommended). Install it with [rustup](https://rustup.rs).
|
||||
**Prototyping and review**
|
||||
* Prototype links between frames and a **Present** mode that follows them with a camera glide.
|
||||
* **Version history:** named and automatic saved versions per page; rename, restore, delete.
|
||||
* **Agent runs:** editing tool calls group into a run. PaperCraft saves an auto-version before the first edit, lists the run, and lets you review it (added, changed and removed layers, outlined on the canvas), revert one change, revert the whole run or accept it.
|
||||
* **Comments** on the canvas.
|
||||
|
||||
**Sharing and platforms**
|
||||
* **Shared projects** through an optional relay (`papercraft-relay`); concurrent edits to a page are merged. Without a relay nothing leaves your machine.
|
||||
* **Themes:** System, Light, Dark and the four Catppuccin flavours (Latte, Frappé, Macchiato, Mocha).
|
||||
* **Web build** that runs the editor in the browser (`sh web/build.sh`, served by `papercraft-relay --static web`).
|
||||
* **Import and export:** Figma `.fig` files, `.excalidraw` scenes and libraries, SVG and images in; PNG (1 to 4x), SVG and vector PDF out, for a selection, each frame, a page or the whole project.
|
||||
|
||||
Projects live in `~/Documents/papercraft/<name>/` (`project.json`, one JSON file per page in `pages/`, plus `versions/`, `runs/` and library files). Work autosaves with atomic writes and files are versioned and migrated on load. `PAPERCRAFT_HOME` points to another folder.
|
||||
|
||||
## Agents
|
||||
|
||||
PaperCraft exposes **61 tools** (`src/mcp/tools.rs`) three ways. They run the same code inside the app.
|
||||
|
||||
| Way | Notes |
|
||||
|---|---|
|
||||
| MCP over HTTP | Built into the app: `http://127.0.0.1:29980/mcp`. Loopback only; browser requests (with an `Origin` header) and foreign `Host` headers are rejected. `PAPERCRAFT_MCP_PORT` changes the port, `PAPERCRAFT_MCP=0` turns it off. |
|
||||
| MCP over stdio | `papercraft-mcp` relays stdio to the running app. It lists tools even when the app is closed. |
|
||||
| Shell | `papercraft-cli` calls the same tools, so an agent with a terminal needs no schemas in its context. |
|
||||
|
||||
```sh
|
||||
# Claude Code
|
||||
claude mcp add --transport http --scope user papercraft http://127.0.0.1:29980/mcp
|
||||
# Codex
|
||||
codex mcp add papercraft --url http://127.0.0.1:29980/mcp
|
||||
```
|
||||
|
||||
The main write tool is `write_html`: HTML with inline styles becomes layers (flexbox maps onto auto layout), and `update_styles` takes the same CSS as JSON. Other groups cover reading and screenshots, variables and bindings, components, libraries, icons, lint, diffs, export and agent-run bookkeeping. The full list is `papercraft-cli list`; each schema is `papercraft-cli schema <tool>`; the reference is [skills/papercraft/references/tools.md](skills/papercraft/references/tools.md).
|
||||
|
||||
### Without the app
|
||||
|
||||
`papercraft-cli` works with PaperCraft closed. When nothing answers on the port, or with `--offline`, tools run inside the CLI on the project store and every editing call is saved; the project opens normally in the app later. With the app open on a project, `--offline` on that same project is refused, so two writers never share a folder. Screenshots use the GPU, or the software adapter when there is none.
|
||||
|
||||
```sh
|
||||
papercraft-cli call create_file '{"name":"Demo"}' --offline
|
||||
papercraft-cli call get_screenshot '{"nodeId":"abc123:1"}' --project Demo -o card.png
|
||||
```
|
||||
|
||||
`papercraft-cli shell` keeps one session open and reads a script from stdin. `:watch on` re-renders the artboard last edited to `preview.png` after every editing call (and shows it inline on iTerm2, WezTerm and kitty).
|
||||
|
||||
```sh
|
||||
papercraft-cli shell --offline --project Demo <<'EOF'
|
||||
set_variables {"variables":{"bg":"#1e1e2e","surface":"#313244","text":"#cdd6f4","accent":"#cba6f7"}}
|
||||
:watch on
|
||||
write_html {
|
||||
"targetNodeId": "abc123:1",
|
||||
"mode": "insert-children",
|
||||
"html": "<div style='font-size:28px;color:var(--text)'>Welcome back</div>"
|
||||
}
|
||||
EOF
|
||||
```
|
||||
|
||||
<p align="center">
|
||||
<img src="docs/screenshots/readme/offline-shell.png" alt="preview.png written by the offline shell: a sign-in card with a heading, two fields and a button" width="240">
|
||||
<br>
|
||||
<sub><code>preview.png</code> from an offline shell script, with no app running.</sub>
|
||||
</p>
|
||||
|
||||
### Skills
|
||||
|
||||
[`skills/`](skills) holds agent skills: `papercraft` (the build, screenshot, lint, fix loop and tool cheat sheet), `papercraft-design` (design-quality rules) and `papercraft-critique`. [docs/agents.md](docs/agents.md) is the full guide: install, registering with agents, scripts, runs and review, safety. [docs/design-system.md](docs/design-system.md) covers variables, components and libraries.
|
||||
|
||||
## Get started
|
||||
|
||||
### Download
|
||||
|
||||
Releases are at [git.marcospaulo.dev.br/masi/papercraft/releases](https://git.marcospaulo.dev.br/masi/papercraft/releases).
|
||||
|
||||
| Build | File |
|
||||
|---|---|
|
||||
| macOS app (Apple silicon) | `papercraft-<version>-macos-aarch64.dmg`, containing PaperCraft.app |
|
||||
| Linux (x86_64) | `papercraft-<version>-linux-x86_64.tar.gz` |
|
||||
| CLI tools, macOS | `papercraft-cli-<version>-macos-aarch64.zip` (`papercraft-cli` and `papercraft-mcp`) |
|
||||
| CLI tools, Linux | `papercraft-cli-<version>-linux-x86_64.tar.gz` |
|
||||
|
||||
macOS builds are ad-hoc signed and not notarized: on another Mac, open the app with right-click, Open the first time. Other platforms: build from source.
|
||||
|
||||
### Build from source
|
||||
|
||||
You need Rust 1.95 or newer (see `rust-version` in `Cargo.toml`); install it with [rustup](https://rustup.rs).
|
||||
|
||||
```sh
|
||||
cargo build --release
|
||||
./target/release/paper-rs # projects home screen
|
||||
./target/release/paper-rs --demo # sample planning board (not saved)
|
||||
./target/release/paper-rs ~/Documents/paper-rs/Plan # open a project folder
|
||||
./target/release/paper-rs board.paper-rs # open a paper-rs 0.1 document
|
||||
./target/release/papercraft # projects home screen
|
||||
./target/release/papercraft ~/Documents/papercraft/Plan # open a project folder
|
||||
./target/release/papercraft --demo # sample board, not saved
|
||||
packaging/macos/package.sh # PaperCraft.app on a DMG, plus the CLI zip
|
||||
```
|
||||
|
||||
### macOS
|
||||
**macOS:** `xcode-select --install` for the linker. It renders with Metal through wgpu. **Linux:** install the runtime libraries (`sudo apt install libxkbcommon-x11-0 libxcb-xkb1 libvulkan1 mesa-vulkan-drivers` on Debian or Ubuntu); it runs on X11 and Wayland through Vulkan, with GL as a fallback, and file dialogs use the XDG desktop portal.
|
||||
|
||||
To run a test copy next to your own PaperCraft, give it its own folder and port: `PAPERCRAFT_HOME=/tmp/pc PAPERCRAFT_MCP_PORT=29998 ./target/release/papercraft`.
|
||||
|
||||
Headless rendering needs no display (wgpu renders offscreen, through Mesa lavapipe without a GPU):
|
||||
|
||||
```sh
|
||||
xcode-select --install # command line tools (linker)
|
||||
curl https://sh.rustup.rs -sSf | sh
|
||||
cargo build --release && ./target/release/paper-rs --demo
|
||||
papercraft --screenshot ui.png --demo --size 1440x900 --scale 2
|
||||
papercraft --export-png out.png PROJECT_DIR --page 0 --scale 2
|
||||
papercraft --export-pdf out.pdf PROJECT_DIR --frames
|
||||
papercraft --import board.excalidraw # new project, prints its folder
|
||||
```
|
||||
|
||||
It uses Metal through wgpu. Shortcuts use ⌘, and trackpad pinch zooms. The macOS target is
|
||||
type-checked in CI-style (`cargo check --target aarch64-apple-darwin`) but has not been run on
|
||||
Mac hardware yet (see Known gaps).
|
||||
|
||||
### Linux
|
||||
### Tests
|
||||
|
||||
```sh
|
||||
# Debian/Ubuntu runtime libraries (usually already present on desktops)
|
||||
sudo apt install libxkbcommon-x11-0 libxcb-xkb1 libvulkan1 mesa-vulkan-drivers
|
||||
cargo build --release && ./target/release/paper-rs --demo
|
||||
```
|
||||
|
||||
It runs on X11 and Wayland through Vulkan, or GL as a fallback. Shortcuts use Ctrl. File
|
||||
dialogs use the XDG desktop portal.
|
||||
|
||||
### Headless (servers, CI)
|
||||
|
||||
No display is needed. wgpu renders offscreen, through Mesa lavapipe when there is no GPU:
|
||||
|
||||
```sh
|
||||
paper-rs --screenshot ui.png --demo --size 1440x900 --scale 2 # full UI
|
||||
paper-rs --screenshot home.png --home # projects home screen
|
||||
paper-rs --export-png out.png PROJECT_DIR --page 0 --scale 2 [--transparent]
|
||||
paper-rs --export-svg out.svg PROJECT_DIR
|
||||
paper-rs --export-pdf out.pdf PROJECT_DIR --frames # one PDF page per frame
|
||||
paper-rs --export out_dir PROJECT_DIR --format png --scope frames # a folder of PNGs
|
||||
paper-rs --import board.excalidraw # new project, prints its folder
|
||||
```
|
||||
|
||||
## AI agents (MCP)
|
||||
|
||||

|
||||
|
||||
paper-rs serves the [Model Context Protocol](https://modelcontextprotocol.io) while it runs, so
|
||||
agents such as Claude Code and Codex can read and design on the open canvas, the way Paper's
|
||||
own MCP server works (behaviour notes: `analysis/paper-mcp.md`). Every tool call runs through
|
||||
the editor like a user edit: one undo step per call, and the window repaints immediately.
|
||||
|
||||
* **Streamable HTTP** (built into the app): `http://127.0.0.1:29980/mcp`. Paper uses 29979, so
|
||||
both can run. Loopback only; requests from browsers (with an `Origin` header) and foreign
|
||||
`Host` headers are rejected. `PAPER_RS_MCP_PORT=NNNN` changes the port; `PAPER_RS_MCP=0`
|
||||
turns the server off.
|
||||
* **stdio**: `paper-rs-mcp` (built next to `paper-rs`) relays stdio to the running app. It
|
||||
lists the tools even when the app is closed, and tells the agent to start paper-rs if a
|
||||
call can't reach it.
|
||||
|
||||
### Claude Code
|
||||
|
||||
```sh
|
||||
# HTTP (the app must be running)
|
||||
claude mcp add --transport http --scope user paper-rs http://127.0.0.1:29980/mcp
|
||||
# or stdio through the bridge
|
||||
claude mcp add --scope user paper-rs -- /path/to/paper-rs/target/release/paper-rs-mcp
|
||||
```
|
||||
|
||||
### Codex
|
||||
|
||||
```sh
|
||||
# HTTP
|
||||
codex mcp add paper-rs --url http://127.0.0.1:29980/mcp
|
||||
# or stdio
|
||||
codex mcp add paper-rs -- /path/to/paper-rs/target/release/paper-rs-mcp
|
||||
```
|
||||
|
||||
which writes this to `~/.codex/config.toml` (either form works):
|
||||
|
||||
```toml
|
||||
[mcp_servers.paper-rs]
|
||||
url = "http://127.0.0.1:29980/mcp"
|
||||
# command = "/path/to/paper-rs/target/release/paper-rs-mcp"
|
||||
```
|
||||
|
||||
Then ask the agent something like *"In paper-rs, create a 390×844 mobile artboard and design a
|
||||
sign-in screen"*, or *"draw a flowchart of our deploy process on a new page, hand-drawn
|
||||
style"*.
|
||||
|
||||
### Tools
|
||||
|
||||
Names and arguments follow Paper's MCP server where paper-rs has an equivalent, so prompts
|
||||
written for Paper work here too.
|
||||
|
||||
| Group | Tools |
|
||||
|---|---|
|
||||
| Projects & pages | `list_resources`, `open_file`, `create_file`, `create_page`, `rename_pages` |
|
||||
| Read | `get_basic_info`, `get_selection`, `get_node_info`, `get_children`, `get_tree_summary`, `get_computed_styles`, `get_jsx`, `find_nodes`, `get_fill_image`, `get_font_family_info`, `get_guide` |
|
||||
| See | `get_screenshot` (PNG image content of a node or the page), `export` (PNG/SVG/PDF files), `export_combined_pdf` |
|
||||
| Write | `create_artboard`, `write_html`, `update_styles`, `set_text_content`, `rename_nodes`, `duplicate_nodes`, `move_nodes`, `delete_nodes`, `finish_working_on_nodes` (saves) |
|
||||
| paper-rs extras | `create_shape` (rectangles, ellipses, diamonds, stars, stickies, text, lines, arrows bound to shapes), `select_nodes`, `undo`, `redo` |
|
||||
|
||||
`write_html` takes HTML with inline styles: flexbox (`display:flex`, direction, gap, padding,
|
||||
alignment, `flex-grow`, wrap) and block stacking map onto auto layout with CSS's stretch rules;
|
||||
text gets size, weight, italic, color, line height, letter spacing, alignment and rich-text
|
||||
runs (`<b>`, `<i>`, `<span style>`); boxes get backgrounds (colors, gradients, images),
|
||||
borders, radii, opacity and blend modes; `<img>` takes local paths or `data:` URIs and `<svg>`
|
||||
is imported as vectors. `update_styles` takes the same CSS as JSON, plus the hand-drawn keys
|
||||
`sketch`, `roughness`, `fillStyle`, `strokeStyle`. Node ids look like `3fa9c1:14` (page and
|
||||
node); `pageId` lets an agent work on another page without switching the user's view.
|
||||
|
||||
## Tests
|
||||
|
||||
```sh
|
||||
cargo test # ~140 tests: unit, scenario, headless GPU, CLI
|
||||
PAPER_RS_REQUIRE_GPU=1 cargo test # fail (instead of skip) when no GPU adapter exists
|
||||
cargo test --no-fail-fast
|
||||
PAPERCRAFT_REQUIRE_GPU=1 cargo test # fail instead of skip when there is no GPU adapter
|
||||
cargo test --release --test perf -- --nocapture # 10k-element frame timings
|
||||
```
|
||||
|
||||
* **Unit tests** cover geometry, vector paths, the rough.js port (compared with real
|
||||
rough.js 4.6.4 output), auto layout and constraints, booleans, rich text spans, the elbow
|
||||
router, formats and migrations, atomic writes, the project store, PDF structure, Excalidraw
|
||||
and SVG import, the palette's fuzzy matching and the shortcut table.
|
||||
* **Scenario tests** drive the editor with synthetic pointer and keyboard events:
|
||||
`src/editor/tests.rs` (core editing), `tests/projects.rs` (projects, autosave, pages),
|
||||
`tests/figma.rs` (groups, components, auto layout, constraints, pen, booleans, rich text,
|
||||
guides), `tests/excalidraw.rs` (hand-drawn style, arrows, quick-connect, stickies, laser,
|
||||
library), `tests/workflow.rs` (layers drag, palette, shortcuts), `tests/io.rs` (export,
|
||||
import, clipboard, CLI), `tests/mcp.rs` (every MCP tool on a headless session, then an rmcp
|
||||
client over HTTP and through the `paper-rs-mcp` stdio bridge).
|
||||
* **Headless GPU tests** render through wgpu, assert pixels and write the screenshots below.
|
||||
One rasterizes the SVG export with resvg and compares it with the GPU render; one renders
|
||||
the PDF export with pdftoppm when installed.
|
||||
The scenario tests drive the editor with synthetic pointer and keyboard events; `tests/mcp.rs` exercises every MCP tool on a headless session, then over HTTP and through the stdio bridge. `cargo check --lib --target wasm32-unknown-unknown` covers the web build.
|
||||
|
||||
| Milestone | Screenshot(s) in `docs/screenshots/` |
|
||||
|---|---|
|
||||
| 1. Local projects | `milestone1_home.png`, `milestone1_trash.png` |
|
||||
| 2. Pages | `milestone2_pages.png` |
|
||||
| 3. Figma core | `milestone3_figma_core.png`, `milestone3_canvas.png` |
|
||||
| 4. Excalidraw core | `milestone4_whiteboard.png` |
|
||||
| 5. Inspector, palette, shortcuts | `milestone5_inspector.png`, `milestone5_palette.png`, `milestone5_shortcuts.png` |
|
||||
| 6. Import / export | `milestone6_pdf_page.png` (PDF rasterized by pdftoppm), `milestone6_excalidraw_import.png`, `milestone6_svg_import.png` |
|
||||
| 7. MCP server | `milestone7_mcp.png` (a screen written through `write_html`, captured with `get_screenshot`), `milestone7_mcp_live_xvfb.png` (the live app after Claude Code drew into it over the stdio bridge) |
|
||||
| paper-rs 0.1 | `m1_*` … `m6_*`, `app_demo.png`, `x11_window_xvfb.png` |
|
||||
## Keyboard shortcuts
|
||||
|
||||
## Using it
|
||||
|
||||

|
||||
|
||||
The tools sit in the floating bar at the bottom of the canvas. Select a layer to edit it in
|
||||
the **Design** panel on the right. The **Layers** panel on the left shows the tree: click to
|
||||
select, Shift-click to add, double-click to rename, and use 👁 / 🔒 to hide or lock. The
|
||||
**Up/Down** buttons reorder.
|
||||
|
||||
* Draw a frame around existing shapes and it adopts them. Shapes drawn inside a frame become
|
||||
its children, and dragging a layer into or out of a frame re-parents it.
|
||||
* Top-level frames that contain content act as canvas regions. Drag from their body to
|
||||
marquee-select inside them, and drag the frame by its name label.
|
||||
* The pencil keeps a constant on-screen width at any zoom. With nothing selected, set width,
|
||||
smoothing and color in the Design panel.
|
||||
* Hold ⌘/Ctrl while dragging to suspend snapping.
|
||||
|
||||
### Keyboard shortcuts
|
||||
|
||||
⌘ on macOS, Ctrl on Linux and Windows. Press `?` or ⌘/ in the app for the full grouped list
|
||||
(100+ bindings), or ⌘K to search every command.
|
||||
⌘ on macOS, Ctrl on Linux. Press `?` or ⌘/ in the app for the full grouped list, or ⌘K to search every command.
|
||||
|
||||
| Keys | Action | Keys | Action |
|
||||
|---|---|---|---|
|
||||
| V / 1 | Select | ⌘K | Command palette |
|
||||
| H, or hold Space | Hand (pan) | ⌘Z / ⌘⇧Z | Undo / redo |
|
||||
| F or A | Frame | ⌘G / ⌘⇧G | Group / ungroup |
|
||||
| R / 2, O / 4, D / 3 | Rectangle, ellipse, diamond | ⌘⌥G | Frame selection |
|
||||
| ⇧Y, ⇧S | Polygon, star | ⌘⌥K / ⌘⌥B | Create component / detach |
|
||||
| R / 2, O / 4, D / 3 | Rectangle, ellipse, diamond | ⌘⌥G | Wrap selection in frame |
|
||||
| ⇧Y, ⇧S | Polygon, star | ⌘⌥K / ⌘⌥B | Create component / detach instance |
|
||||
| L / 6, ⇧L / 5 | Line, arrow | ⇧A / ⌥⇧A | Add / remove auto layout |
|
||||
| P, ⇧P / 7 | Pen, pencil | ⌥A ⌥H ⌥D / ⌥W ⌥V ⌥S | Align left/center/right, top/middle/bottom |
|
||||
| P, ⇧P / 7 | Pen, pencil | ⌥A ⌥H ⌥D / ⌥W ⌥V ⌥S | Align left, center, right / top, middle, bottom |
|
||||
| T / 8, S | Text, sticky note | ⌥⇧H / ⌥⇧V | Distribute spacing |
|
||||
| K | Laser pointer | ⌥⇧U S I E | Union, subtract, intersect, exclude |
|
||||
| E / 0 | Eraser | ⌘E | Flatten |
|
||||
| 9, ⌘⇧K | Place image | ⌘B / ⌘I / ⌘U / ⌘⇧X | Bold, italic, underline, strikethrough |
|
||||
| Enter / ⇧Enter | Edit (text, path) / select parent | ⌘⌥H | Hand-drawn style |
|
||||
| Enter / ⇧Enter | Edit / select parent | ⌘⌥H | Hand-drawn style |
|
||||
| Tab / ⇧Tab | Next / previous sibling | ⇧H / ⇧V | Flip |
|
||||
| ⌥-drag | Duplicate while dragging | ⌘⌥C / ⌘⌥V | Copy / paste properties |
|
||||
| ⌥ hover | Measure distances | ⌘R | Rename |
|
||||
| ⌘⌥⇧V | Variables | ⌘⌥C / ⌘⌥V | Copy / paste properties |
|
||||
| ⌘= / ⌘- / ⇧0 | Zoom in / out / 100% | ⇧1 / ⇧2 | Zoom to fit / selection |
|
||||
| PageUp / PageDown | Previous / next page | ⌘\\ | Show / hide UI |
|
||||
|
||||
## Feature parity: Paper / Figma / Excalidraw vs paper-rs
|
||||
Draw a frame around existing shapes and it adopts them; dragging a layer into or out of a frame re-parents it. Hold ⌘ while dragging to suspend snapping.
|
||||
|
||||
Columns 2–4 say whether each product has the feature (✓) and where the behavior was learned:
|
||||
Paper from its desktop shell and public docs (`analysis/PAPER_ARCHITECTURE.md`), Figma from
|
||||
public docs (`analysis/FIGMA_NOTES.md`), Excalidraw from its MIT source
|
||||
(`analysis/EXCALIDRAW_NOTES.md`). The last column is paper-rs: ✅ done, ⚠️ partial (see
|
||||
Known gaps), ⏳ planned in a later milestone, ❌ not planned.
|
||||
## Status and known limits
|
||||
|
||||
| Feature | Paper | Figma | Excalidraw | paper-rs |
|
||||
|---|---|---|---|---|
|
||||
| Local projects, recents grid, trash | (cloud dashboard) | ✓ (cloud) | (single file) | ✅ Folders in `~/Documents/paper-rs`, thumbnails, rename/duplicate/trash/restore |
|
||||
| Autosave, crash-safe, versioned files | ✓ (cloud) | ✓ (cloud) | ✓ (browser storage) | ✅ 1 s autosave, atomic writes, migration chain (page v1→v3) |
|
||||
| Pages, infinite canvas per page | ✓ | ✓ | – | ✅ Per-page history and camera, reorder/duplicate/delete |
|
||||
| Frames with clipping | ✓ | ✓ | ✓ | ✅ ⚠️ clip is rectangular (corner radius not clipped) |
|
||||
| Groups | ✓ | ✓ | ✓ | ✅ Bounds follow children, click selects group, double-click enters, scale on resize |
|
||||
| Components, instances, overrides | – | ✓ | (library only) | ✅ Live sync, per-property overrides, reset, detach, go to main |
|
||||
| Auto layout (direction, gap, padding, hug/fill/fixed, wrap) | ✓ (flexbox) | ✓ | – | ✅ Drag-reorder in flow, space-between, absolute children |
|
||||
| Constraints | – | ✓ | – | ✅ Left/right/stretch/center/scale per axis, ⌘ to ignore |
|
||||
| Pen tool, vector point editing | ✓ | ✓ | – | ✅ Corner/smooth points, handles (⌥ breaks), close, delete, toggle |
|
||||
| Boolean ops (union/subtract/intersect/exclude), flatten | (roadmap) | ✓ | – | ✅ ⚠️ destructive (result is a path, curves flattened) |
|
||||
| Gradients (linear, radial) | ✓ | ✓ | – | ✅ Multi-stop, angle, radius; ⚠️ no on-canvas gradient handles |
|
||||
| Image fills | ✓ | ✓ | ✓ (image element) | ✅ Fill/fit/stretch/tile, place image (⌘⇧K), drag-and-drop, stored in project |
|
||||
| Strokes: width, align, dash, caps, joins | ✓ | ✓ | ✓ | ✅ |
|
||||
| Corner radius (per corner), polygons, stars | ✓ | ✓ | – | ✅ |
|
||||
| Opacity, blend modes | ✓ | ✓ | ✓ (opacity) | ✅ ⚠️ canvas renders 5 modes exactly, all 16 exact in SVG |
|
||||
| Rich text (per-range bold/italic/size/colour) | ✓ | ✓ | – | ✅ Plus underline, strikethrough, line height, letter spacing |
|
||||
| Align / distribute | ✓ | ✓ | ✓ | ✅ ⌥A/D/W/S/H/V, ⌥⇧H/V |
|
||||
| Smart guides, spacing, measurement | ✓ | ✓ | – | ✅ Edge/center snap, equal spacing, ⌥-hover distances |
|
||||
| Hand-drawn (rough) style per element | – | – | ✓ | ✅ rough.js 4.6.4 port, verified against rough.js output; sloppiness, fill styles |
|
||||
| Bound arrows, elbow arrows, quick shapes, sticky notes | – | (FigJam) | ✓ | ✅ Orbit binding that follows shapes, straight/curved/elbow, 5 heads, diamond, quick-connect, stickies |
|
||||
| Laser pointer, shape library | – | (FigJam) | ✓ | ✅ Fading laser trail; shared library with starter items |
|
||||
| Inspector, layers drag-reorder, command palette (⌘K) | ✓ | ✓ | ✓ | ✅ Sectioned inspector, tree drag above/below/into, fuzzy palette over actions, pages, layers, library |
|
||||
| Export PNG / SVG / PDF of selection, frame, page | ✓ | ✓ | ✓ (PNG/SVG) | ✅ Selection, each frame, page or all pages; vector PDF with gradients, images, blend modes; copy as PNG/SVG |
|
||||
| Import .excalidraw / SVG, copy-paste across projects | – | ✓ (SVG) | ✓ | ✅ .excalidraw scenes, .excalidrawlib libraries, SVG (paths, gradients, images, text), system clipboard between pages, projects and apps |
|
||||
| Freehand ink with pressure | – | (pencil) | ✓ | ✅ Smoothing, pressure, eraser |
|
||||
| MCP server for AI agents | ✓ | ✓ (Dev Mode) | ✓ (community) | ✅ Streamable HTTP in the app + stdio bridge; Paper-compatible tool names, `write_html`, screenshots, whiteboard shapes |
|
||||
| Multiplayer, cloud sync, plugins | ✓ | ✓ | ✓ | ❌ local-first by design |
|
||||
> [!IMPORTANT]
|
||||
> PaperCraft is an alpha. [ROADMAP.md](ROADMAP.md) lists what is missing, in priority order; [PROGRESS.md](PROGRESS.md) is the milestone history.
|
||||
|
||||
## Known gaps
|
||||
|
||||
* **Paper's document model is HTML/CSS.** paper-rs uses geometric nodes with flexbox-like auto
|
||||
layout on frames; there are no variables, CSS export or code generation.
|
||||
* **Rendering approximations.** Frame clipping is a rectangle (scissor), so rounded frames
|
||||
don't clip their corners. Group opacity multiplies into children instead of compositing the
|
||||
group. Overlay, color dodge/burn, hard/soft light, difference, exclusion, hue, saturation,
|
||||
color and luminosity blend as Normal on the canvas (they are exact in SVG export).
|
||||
* **Booleans are destructive**: the result is a new vector path with flattened curves.
|
||||
Gradients are edited in the inspector only.
|
||||
* **Not run on macOS hardware yet.** The macOS build type-checks and uses only portable APIs
|
||||
(Metal via wgpu, winit, rfd), but it has not been launched on a Mac. On Linux, the real
|
||||
window was exercised under Xvfb; the screenshot is `x11_window_xvfb.png`.
|
||||
* **Pen pressure.** winit 0.30 does not expose tablet pressure for pen events that arrive as
|
||||
mouse input, which is common with macOS and Wacom tablets. Pressure comes from touch/pen
|
||||
`force` when the platform reports it. Otherwise it is simulated from stroke velocity.
|
||||
* **Text** uses Inter (regular, bold, italic, bold italic) with no shaping, so there are no
|
||||
ligatures, complex scripts or RTL, and no font picker. IME preedit is not displayed
|
||||
(committed text works).
|
||||
* **No rotation.** Nodes are axis-aligned boxes; rotated imports are baked into paths.
|
||||
* **Undo granularity.** Document renames from the Design panel are not undoable, and the
|
||||
selection is not part of history.
|
||||
* **Performance.** Nodes are tessellated once per zoom octave and cached; unchanged frames
|
||||
reuse the previous item list and GPU buffers, so panning uploads nothing. With 10k visible
|
||||
nodes a cached frame takes ~3 ms (release, `tests/perf.rs`); the first frame at a new zoom
|
||||
octave takes ~140 ms on a CPU. Not tuned for 100k+.
|
||||
* **PDF**: text is outlined (not selectable); gradient stop transparency uses the first
|
||||
stop's alpha; tiled image fills are drawn as repeated images.
|
||||
* **Import**: Excalidraw rotation is baked into paths (text rotation is dropped), bound text
|
||||
inside shapes stays a separate text layer (except sticky notes), and fonts map to Inter.
|
||||
SVG patterns, filters, masks and clip paths are not imported.
|
||||
* **MCP**: one project is open at a time, so `fileId` must name the open project (call
|
||||
`open_file` to switch; the user's window switches too). No design tokens, comments or AI
|
||||
image generation (Paper has them). Moving or duplicating layers between pages isn't
|
||||
supported. Remote `http(s)` images aren't fetched; pass a local path or a `data:` URI.
|
||||
CSS margin, grid, shadows and transforms are reported back as ignored styles.
|
||||
* **Linux file dialogs** need an XDG desktop portal. Without one, Save/Open dialogs return
|
||||
nothing. The headless CLI is unaffected.
|
||||
* **Text** is Inter only, with no shaping (no ligatures, complex scripts or RTL) and no font picker. IME preedit is not displayed.
|
||||
* **Rendering approximations.** Frame clipping is a rectangle, so rounded frames do not clip their corners. Overlay, dodge, burn, light, difference, exclusion and the HSL blend modes draw as Normal on the canvas (they are exact in SVG and PDF export). There is no layer or background blur yet.
|
||||
* **Variables:** gradients keep fixed colors; there are no text styles and no component variants or properties.
|
||||
* **Booleans are destructive:** the result is a new vector path with flattened curves.
|
||||
* **`write_html`** ignores margin, tables and transforms (it reports them as `ignoredStyles`) and does not fetch remote images; pass a local path or a `data:` URI.
|
||||
* **Agents:** one project is open at a time in the app, and `move_nodes` stays on one page. There is no in-app prompt box; agents run outside and connect over MCP or the CLI.
|
||||
* **Sharing** has no live presence (cursors, selections) yet.
|
||||
* **Pen pressure** is simulated from stroke velocity on macOS tablets, because winit 0.30 does not expose it for mouse-like pen events.
|
||||
* **Releases** cover macOS (Apple silicon) and Linux x86_64. Windows packaging scripts exist but are not part of releases.
|
||||
* **PDF** text is outlined, not selectable.
|
||||
|
||||
## Project layout
|
||||
|
||||
```
|
||||
src/geom.rs vectors, rects, camera
|
||||
src/vector.rs bezier paths: flatten, hit test, SVG data, shapes, dashes
|
||||
src/model/ Node / NodeKind / paints / Document arena
|
||||
src/history.rs transactions, undo/redo
|
||||
src/layout.rs auto layout, constraints, group bounds
|
||||
src/ink.rs stroke smoothing, pressure, outline
|
||||
src/text.rs rich text layout and glyph outlines
|
||||
src/assets.rs image registry (content-hashed)
|
||||
src/project/ project store, manifest/page formats, migrations
|
||||
src/session.rs open project, autosave, thumbnails
|
||||
src/editor/ tools, structure (groups/components), vector ops, pages, text editing
|
||||
src/render/ draw ops → cached meshes → wgpu; headless capture
|
||||
src/io/ PNG, SVG, PDF, export scopes, Excalidraw + SVG import, clipboard,
|
||||
atomic writes
|
||||
src/connector.rs arrow bindings, elbow router, arrowheads
|
||||
src/library.rs shared shape library
|
||||
src/ui/ home screen, pages, layers, inspector
|
||||
src/app.rs winit application
|
||||
src/mcp/ MCP server (rmcp): tools, HTML/CSS mapping, HTTP service
|
||||
src/bin/paper-rs-mcp.rs stdio bridge to the running app
|
||||
analysis/ reverse-engineering findings and design (raw dumps are gitignored)
|
||||
docs/screenshots/ headless renders produced by `cargo test`
|
||||
src/geom.rs vectors, rects, camera
|
||||
src/vector.rs bezier paths: flatten, hit test, SVG data, shapes, dashes
|
||||
src/model/ Node, paints, Document arena
|
||||
src/history.rs transactions, undo and redo
|
||||
src/layout.rs auto layout, constraints
|
||||
src/text.rs, ink.rs rich text layout, stroke smoothing
|
||||
src/project/ project store, manifest and page formats, migrations
|
||||
src/session.rs open project, autosave, thumbnails
|
||||
src/variables.rs collections, modes, groups, types, aliases, bindings
|
||||
src/libraries.rs publish, enable and update shared libraries
|
||||
src/design_system.rs design-system import and export
|
||||
src/versions.rs saved versions
|
||||
src/runs.rs agent runs, auto-versions, revert
|
||||
src/sync.rs, merge.rs relay file sync and page merge
|
||||
src/editor/ tools, structure, vector ops, pages, text editing, design bindings
|
||||
src/render/ draw ops, cached meshes, wgpu, headless capture
|
||||
src/io/ PNG, SVG, PDF, export, Figma, Excalidraw and SVG import
|
||||
src/mcp/ tools, HTML and CSS mapping, lint, diff, codegen, HTTP server
|
||||
src/cli.rs offline calls and the shell behind papercraft-cli
|
||||
src/ui/ home, panels, inspector, palette, Variables, Assets, Libraries, agent view
|
||||
src/lottie/ icon motion
|
||||
src/web/ browser build
|
||||
src/bin/ papercraft-cli, papercraft-mcp, papercraft-relay
|
||||
skills/ agent skills
|
||||
specs/ feature specs (agent runs, design libraries, offline CLI, ...)
|
||||
analysis/ behaviour studies and design notes
|
||||
docs/ guides and screenshots
|
||||
```
|
||||
|
||||
## License
|
||||
## License and credits
|
||||
|
||||
MIT OR Apache-2.0 for the code in this repository. Inter (Regular, Medium, SemiBold) is
|
||||
© The Inter Project Authors under the SIL Open Font License 1.1; see `assets/fonts/OFL.txt`.
|
||||
Dual-licensed under [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option.
|
||||
|
||||
Bundled fonts, icons and other assets keep their own licenses, listed in [ATTRIBUTION.md](ATTRIBUTION.md); Inter is © The Inter Project Authors under the SIL Open Font License 1.1. Some algorithms are ported from MIT-licensed projects (rough.js, hachure-fill, Excalidraw), with their notices in [THIRD_PARTY.md](THIRD_PARTY.md).
|
||||
|
||||
PaperCraft started as a fork of [storytold/paper-rs](https://git.marcospaulo.dev.br/storytold/paper-rs); thanks to its contributors.
|
||||
|
||||
PaperCraft is not affiliated with Paper or Figma. Only the behavior of other tools was studied (see `analysis/`); no code, shaders, icons, fonts or assets from them are used.
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
# Roadmap
|
||||
|
||||
PaperCraft is an early alpha: a local-first infinite-canvas design app that agents can drive. This
|
||||
file lists what is still missing, in priority order, with an honest status. Done items are checked
|
||||
against `src/mcp/tools.rs` and the UI code (2026-10-12); rows 7, 8, 12, 15, 23, 25, 32, 34, 39, 40, 45, 46 and section 6 were updated 2026-10-21. Milestone history is in
|
||||
[PROGRESS.md](PROGRESS.md); known rendering and import limits are in the README.
|
||||
|
||||
Status: **done** (works today), **partial** (some of it works), **todo**.
|
||||
|
||||
## 1. Design systems (the current focus)
|
||||
|
||||
Agents can already build a design system through the tools; people cannot yet manage one in the UI.
|
||||
|
||||
| # | Item | Status | Notes |
|
||||
|---|---|---|---|
|
||||
| 1 | Inspector UI for variables | **done** | Design tab lists/renames/adds/deletes variables & modes; Inspector binds/unlinks solid fills to variables. |
|
||||
| 2 | Inspector UI for components | **done** | Design tab searches components, inserts instances, swaps/resets/detaches instances; Inspector header swaps/resets instances. |
|
||||
| 3 | Design lint | **done** | `lint_design`: WCAG contrast, 4px grid, type scale, tiny text, 44px targets, default names, hard-coded colors. |
|
||||
| 4 | Lint auto-fix | **done** | `lint_design {fix: true}` and UI `Fix` / `Fix all`: snaps spacing to 4px grid, snaps type scale, enforces 44px targets, links matching colors to variables. |
|
||||
| 5 | Lint in the UI | **done** | Live Lint section in Design tab; click issue to select & zoom, or click `Fix` / `Fix all`. |
|
||||
| 6 | Variable modes | **done** | Mode selector + create/delete modes in Design tab and via `set_variables {mode}` / `set_variable_mode`. |
|
||||
| 7 | Number variables (spacing, radius, font size) | **done** | Typed number, string and boolean variables in collections with groups and aliases; fields bind (size, gap, padding, radius, font size, line height, opacity, visible) in the inspector and `bind_variable`. |
|
||||
| 8 | Stroke and gradient variables | partial | Strokes and text color bind to variables. Gradients keep fixed colors. |
|
||||
| 9 | Text styles | todo | Named type styles (Heading / L, Body / M) that update every text layer using them. |
|
||||
| 10 | Component variants and properties | todo | Variants are separate components named `Button / Primary`. No variant sets, boolean or text properties. |
|
||||
| 11 | Swap instance, detach by tool | **done** | `swap_instance` and `detach_instance` MCP tools + UI controls in Design tab and Inspector. |
|
||||
| 12 | Cross-page and shared libraries | **done** | Instances of a main on any page; publish a project as a library, enable, update and disable it in other projects (Libraries modal, `*_library` tools). |
|
||||
| 13 | Export design tokens | **done** | `get_variables` with `format: "css"`, `"json"` (W3C DTCG + modes), or `"tailwind"` (`@theme`), plus Copy CSS / Copy JSON in Design tab. |
|
||||
| 14 | Apply a design system to existing work | partial | `lint_design {fix: true}` links matching literal colors to variables and snaps spacing/type scale. |
|
||||
|
||||
## 2. Agent workflow
|
||||
|
||||
| # | Item | Status | Notes |
|
||||
|---|---|---|---|
|
||||
| 15 | MCP and CLI tool surface | **done** | 61 tools, one undo step per call, `papercraft-cli list / schema / call`. |
|
||||
| 16 | Agent skills | **done** | `skills/papercraft` and `skills/papercraft-design`. |
|
||||
| 17 | Accessibility annotations | todo | Reading order, roles and alt text on layers, checked by the linter. |
|
||||
| 18 | Code export from frames | **done** | `get_jsx` supports `format: "inline"`, `"tailwind"` (Tailwind utility classes), and `"html"` (HTML + CSS rules with `:root` variables). |
|
||||
| 19 | Plugin and skill marketplace | todo | Skills are copied by hand today. |
|
||||
| 20 | Screenshot diffing | **done** | `diff_frames` tool (`src/mcp/diff.rs`) for structural/property frame diffing + `diff_rgba` pixel diffing with highlight PNG. |
|
||||
| 21 | Moving nodes between pages | todo | `move_nodes` stays on one page. |
|
||||
| 22 | Remote images in `write_html` | todo | Only local paths and `data:` URIs. |
|
||||
| 46 | Design from the CLI without the app | **done** | `papercraft-cli call --offline` and `shell` run the tools in-process on the project store; screenshots use a GPU or the software adapter. |
|
||||
|
||||
## 3. Design features
|
||||
|
||||
| # | Item | Status | Notes |
|
||||
|---|---|---|---|
|
||||
| 23 | Prototyping links and flows | **done** | Prototype tab in the inspector; Present mode follows links with a camera glide. Smart transitions and hover states todo. |
|
||||
| 24 | Responsive constraints and breakpoint preview | partial | Constraints (left, right, stretch, center, scale) exist in the editor; there is no breakpoint preview or per-size variants. |
|
||||
| 25 | Shadows, blur and effects | partial | Drop shadow is an inspector effect. Layer and background blur todo (needs a renderer pass). |
|
||||
| 26 | Margin and grid layout | partial | Wrapped-line cross alignment, per-line fill/align, and `layout_grid` track layout (`src/layout.rs`) implemented; CSS margin still ignored. |
|
||||
| 27 | Font choice | todo | Inter only. |
|
||||
| 28 | Rotation | todo | Nodes are axis-aligned. |
|
||||
| 29 | Overlay, dodge, burn, light blend modes on the canvas | todo | Exact in SVG and PDF export, approximated as Normal on the canvas. |
|
||||
| 30 | Rounded frame clipping | todo | Clipping is a rectangle. |
|
||||
| 31 | Non-destructive booleans | todo | The result is a flattened path. |
|
||||
|
||||
## 4. Files and collaboration
|
||||
|
||||
| # | Item | Status | Notes |
|
||||
|---|---|---|---|
|
||||
| 32 | Version history | **done** | Named and automatic saved versions per page: rename, restore, delete (`src/versions.rs`). Restore now includes variables and tokens; compare todo. |
|
||||
| 33 | Figma import | **done** | `.fig` binary (Kiwi wire decoder + zip container) and Figma REST API JSON import in `src/io/fig.rs`. |
|
||||
| 34 | Multiplayer and cloud sync | partial | Optional shared projects through the relay, with merge of concurrent edits to one page. Presence (cursors, selections) todo. Stays optional. |
|
||||
| 35 | Release builds for Windows and Linux | todo | The code targets them (wgpu, winit); packaging today is the macOS DMG and the `papercraft-cli` zip. |
|
||||
|
||||
## 5. Quality
|
||||
|
||||
| # | Item | Status | Notes |
|
||||
|---|---|---|---|
|
||||
| 36 | Pen pressure on macOS tablets | todo | winit 0.30 does not expose pressure for mouse-like pen events. |
|
||||
| 37 | Text shaping, ligatures, RTL | todo | No shaping. IME preedit is not shown. |
|
||||
| 38 | Performance beyond 10k visible nodes | todo | Cached frames take about 3 ms at 10k nodes; not tuned for 100k. |
|
||||
|
||||
## 6. Agent runs (next)
|
||||
|
||||
Spec: [specs/agent-runs/spec.md](specs/agent-runs/spec.md), tasks: [specs/agent-runs/tasks.md](specs/agent-runs/tasks.md). Design: `PaperCraft` file, page `Agent runs`.
|
||||
|
||||
| # | Item | Status | Notes |
|
||||
|---|---|---|---|
|
||||
| 39 | Agent runs and auto-versions | **done** | Editing calls group into runs; edited pages get auto-versions; runs persist, revert per page, and prune to 50. |
|
||||
| 40 | Review agent changes | **done** | Id-paired diff, grouped review, canvas overlay, per-change revert and accept all; version compare UI remains todo. |
|
||||
| 41 | Agent presence on the canvas | todo | Outline the node a tool call touches, label it, pause or stop the run. |
|
||||
| 42 | `get_context` tool | todo | Selection, variables, nearby components and lint summary in one call, so an agent orients in one round trip. |
|
||||
| 43 | Comments assigned to agents | todo | `@agent` in a thread triggers an edit and a reply. Needs threaded comments. |
|
||||
| 44 | In-app prompt bar | todo | Run a prompt on the selection through the user's own key or local CLI. Largest scope: provider config, key storage, cost. |
|
||||
| 45 | Correct tool annotations | **done** | `lint_design` no longer sends `readOnlyHint`; `fix: true` edits are classified. |
|
||||
@@ -1,6 +1,6 @@
|
||||
# Third-party code and assets
|
||||
|
||||
paper-rs is MIT OR Apache-2.0. It ports a few algorithms from MIT-licensed projects (listed
|
||||
papercraft is MIT OR Apache-2.0. It ports a few algorithms from MIT-licensed projects (listed
|
||||
below with their copyright notices and license text) and bundles the Inter font (SIL OFL 1.1,
|
||||
`assets/fonts/OFL.txt`). Figma and Paper are proprietary: only their *behavior* was studied
|
||||
(`analysis/FIGMA_NOTES.md`, `analysis/PAPER_ARCHITECTURE.md`), and no code, shaders, icons or
|
||||
@@ -17,6 +17,12 @@ assets from them are used.
|
||||
|
||||
Each ported module starts with a comment naming its source.
|
||||
|
||||
## Reimplemented formats
|
||||
|
||||
| Project | License | What was reimplemented | Where |
|
||||
|---|---|---|---|
|
||||
| [OpenDesign](https://github.com/nexu-io/open-design) | Apache-2.0 | The design-system package format (`manifest.json` / `tokens.css` / `DESIGN.md`), written from the published format description; no file of that project is copied | `src/design_system.rs` |
|
||||
|
||||
## Dependencies
|
||||
|
||||
Rust crates are pulled from crates.io under their own licenses (see `Cargo.lock`); notable ones
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
# PaperCraft app icon
|
||||
|
||||
An original design: a sheet of paper with a folded corner inside a selection frame with handles, and a pen nib drawing on it. Catppuccin palette: Crust/Mantle gradient tile, Text `#cdd6f4` sheet, Mauve `#cba6f7` fold and nib, Blue `#89b4fa` frame.
|
||||
`papercraft.svg` is the source (macOS tile with Apple's margin, 824/1024 of the canvas); regenerate the PNGs with `resvg papercraft.svg papercraft-1024.png -w 1024`, then `iconutil` for the `.icns`. The `.ico` is the tile cropped edge to edge.
|
||||
License: original artwork, MIT OR Apache-2.0 like the rest of the repository.
|
||||
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 361 KiB |
@@ -0,0 +1,28 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024">
|
||||
<title>PaperCraft app icon</title>
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#313244"/><stop offset="1" stop-color="#181825"/></linearGradient>
|
||||
<linearGradient id="nib" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#d9bcfa"/><stop offset="1" stop-color="#b48ef0"/></linearGradient>
|
||||
<clipPath id="tile"><path d="M924.0,512.0 L923.9,608.0 L923.8,638.6 L923.5,660.9 L923.1,679.0 L922.6,694.5 L922.0,708.2 L921.2,720.5 L920.4,731.8 L919.4,742.2 L918.3,751.9 L917.1,761.0 L915.8,769.6 L914.4,777.6 L912.8,785.3 L911.2,792.6 L909.4,799.5 L907.5,806.1 L905.4,812.4 L903.3,818.5 L901.0,824.2 L898.5,829.8 L896.0,835.1 L893.3,840.2 L890.5,845.1 L887.6,849.8 L884.5,854.3 L881.2,858.7 L877.9,862.8 L874.3,866.8 L870.7,870.7 L866.8,874.3 L862.8,877.9 L858.7,881.2 L854.3,884.5 L849.8,887.6 L845.1,890.5 L840.2,893.3 L835.1,896.0 L829.8,898.5 L824.2,901.0 L818.5,903.3 L812.4,905.4 L806.1,907.5 L799.5,909.4 L792.6,911.2 L785.3,912.8 L777.6,914.4 L769.6,915.8 L761.0,917.1 L751.9,918.3 L742.2,919.4 L731.8,920.4 L720.5,921.2 L708.2,922.0 L694.5,922.6 L679.0,923.1 L660.9,923.5 L638.6,923.8 L608.0,923.9 L512.0,924.0 L416.0,923.9 L385.4,923.8 L363.1,923.5 L345.0,923.1 L329.5,922.6 L315.8,922.0 L303.5,921.2 L292.2,920.4 L281.8,919.4 L272.1,918.3 L263.0,917.1 L254.4,915.8 L246.4,914.4 L238.7,912.8 L231.4,911.2 L224.5,909.4 L217.9,907.5 L211.6,905.4 L205.5,903.3 L199.8,901.0 L194.2,898.5 L188.9,896.0 L183.8,893.3 L178.9,890.5 L174.2,887.6 L169.7,884.5 L165.3,881.2 L161.2,877.9 L157.2,874.3 L153.3,870.7 L149.7,866.8 L146.1,862.8 L142.8,858.7 L139.5,854.3 L136.4,849.8 L133.5,845.1 L130.7,840.2 L128.0,835.1 L125.5,829.8 L123.0,824.2 L120.7,818.5 L118.6,812.4 L116.5,806.1 L114.6,799.5 L112.8,792.6 L111.2,785.3 L109.6,777.6 L108.2,769.6 L106.9,761.0 L105.7,751.9 L104.6,742.2 L103.6,731.8 L102.8,720.5 L102.0,708.2 L101.4,694.5 L100.9,679.0 L100.5,660.9 L100.2,638.6 L100.1,608.0 L100.0,512.0 L100.1,416.0 L100.2,385.4 L100.5,363.1 L100.9,345.0 L101.4,329.5 L102.0,315.8 L102.8,303.5 L103.6,292.2 L104.6,281.8 L105.7,272.1 L106.9,263.0 L108.2,254.4 L109.6,246.4 L111.2,238.7 L112.8,231.4 L114.6,224.5 L116.5,217.9 L118.6,211.6 L120.7,205.5 L123.0,199.8 L125.5,194.2 L128.0,188.9 L130.7,183.8 L133.5,178.9 L136.4,174.2 L139.5,169.7 L142.8,165.3 L146.1,161.2 L149.7,157.2 L153.3,153.3 L157.2,149.7 L161.2,146.1 L165.3,142.8 L169.7,139.5 L174.2,136.4 L178.9,133.5 L183.8,130.7 L188.9,128.0 L194.2,125.5 L199.8,123.0 L205.5,120.7 L211.6,118.6 L217.9,116.5 L224.5,114.6 L231.4,112.8 L238.7,111.2 L246.4,109.6 L254.4,108.2 L263.0,106.9 L272.1,105.7 L281.8,104.6 L292.2,103.6 L303.5,102.8 L315.8,102.0 L329.5,101.4 L345.0,100.9 L363.1,100.5 L385.4,100.2 L416.0,100.1 L512.0,100.0 L608.0,100.1 L638.6,100.2 L660.9,100.5 L679.0,100.9 L694.5,101.4 L708.2,102.0 L720.5,102.8 L731.8,103.6 L742.2,104.6 L751.9,105.7 L761.0,106.9 L769.6,108.2 L777.6,109.6 L785.3,111.2 L792.6,112.8 L799.5,114.6 L806.1,116.5 L812.4,118.6 L818.5,120.7 L824.2,123.0 L829.8,125.5 L835.1,128.0 L840.2,130.7 L845.1,133.5 L849.8,136.4 L854.3,139.5 L858.7,142.8 L862.8,146.1 L866.8,149.7 L870.7,153.3 L874.3,157.2 L877.9,161.2 L881.2,165.3 L884.5,169.7 L887.6,174.2 L890.5,178.9 L893.3,183.8 L896.0,188.9 L898.5,194.2 L901.0,199.8 L903.3,205.5 L905.4,211.6 L907.5,217.9 L909.4,224.5 L911.2,231.4 L912.8,238.7 L914.4,246.4 L915.8,254.4 L917.1,263.0 L918.3,272.1 L919.4,281.8 L920.4,292.2 L921.2,303.5 L922.0,315.8 L922.6,329.5 L923.1,345.0 L923.5,363.1 L923.8,385.4 L923.9,416.0Z"/></clipPath>
|
||||
<filter id="sh" x="-20%" y="-20%" width="140%" height="150%"><feDropShadow dx="0" dy="14" stdDeviation="16" flood-color="#000" flood-opacity=".4"/></filter>
|
||||
</defs>
|
||||
<path d="M924.0,512.0 L923.9,608.0 L923.8,638.6 L923.5,660.9 L923.1,679.0 L922.6,694.5 L922.0,708.2 L921.2,720.5 L920.4,731.8 L919.4,742.2 L918.3,751.9 L917.1,761.0 L915.8,769.6 L914.4,777.6 L912.8,785.3 L911.2,792.6 L909.4,799.5 L907.5,806.1 L905.4,812.4 L903.3,818.5 L901.0,824.2 L898.5,829.8 L896.0,835.1 L893.3,840.2 L890.5,845.1 L887.6,849.8 L884.5,854.3 L881.2,858.7 L877.9,862.8 L874.3,866.8 L870.7,870.7 L866.8,874.3 L862.8,877.9 L858.7,881.2 L854.3,884.5 L849.8,887.6 L845.1,890.5 L840.2,893.3 L835.1,896.0 L829.8,898.5 L824.2,901.0 L818.5,903.3 L812.4,905.4 L806.1,907.5 L799.5,909.4 L792.6,911.2 L785.3,912.8 L777.6,914.4 L769.6,915.8 L761.0,917.1 L751.9,918.3 L742.2,919.4 L731.8,920.4 L720.5,921.2 L708.2,922.0 L694.5,922.6 L679.0,923.1 L660.9,923.5 L638.6,923.8 L608.0,923.9 L512.0,924.0 L416.0,923.9 L385.4,923.8 L363.1,923.5 L345.0,923.1 L329.5,922.6 L315.8,922.0 L303.5,921.2 L292.2,920.4 L281.8,919.4 L272.1,918.3 L263.0,917.1 L254.4,915.8 L246.4,914.4 L238.7,912.8 L231.4,911.2 L224.5,909.4 L217.9,907.5 L211.6,905.4 L205.5,903.3 L199.8,901.0 L194.2,898.5 L188.9,896.0 L183.8,893.3 L178.9,890.5 L174.2,887.6 L169.7,884.5 L165.3,881.2 L161.2,877.9 L157.2,874.3 L153.3,870.7 L149.7,866.8 L146.1,862.8 L142.8,858.7 L139.5,854.3 L136.4,849.8 L133.5,845.1 L130.7,840.2 L128.0,835.1 L125.5,829.8 L123.0,824.2 L120.7,818.5 L118.6,812.4 L116.5,806.1 L114.6,799.5 L112.8,792.6 L111.2,785.3 L109.6,777.6 L108.2,769.6 L106.9,761.0 L105.7,751.9 L104.6,742.2 L103.6,731.8 L102.8,720.5 L102.0,708.2 L101.4,694.5 L100.9,679.0 L100.5,660.9 L100.2,638.6 L100.1,608.0 L100.0,512.0 L100.1,416.0 L100.2,385.4 L100.5,363.1 L100.9,345.0 L101.4,329.5 L102.0,315.8 L102.8,303.5 L103.6,292.2 L104.6,281.8 L105.7,272.1 L106.9,263.0 L108.2,254.4 L109.6,246.4 L111.2,238.7 L112.8,231.4 L114.6,224.5 L116.5,217.9 L118.6,211.6 L120.7,205.5 L123.0,199.8 L125.5,194.2 L128.0,188.9 L130.7,183.8 L133.5,178.9 L136.4,174.2 L139.5,169.7 L142.8,165.3 L146.1,161.2 L149.7,157.2 L153.3,153.3 L157.2,149.7 L161.2,146.1 L165.3,142.8 L169.7,139.5 L174.2,136.4 L178.9,133.5 L183.8,130.7 L188.9,128.0 L194.2,125.5 L199.8,123.0 L205.5,120.7 L211.6,118.6 L217.9,116.5 L224.5,114.6 L231.4,112.8 L238.7,111.2 L246.4,109.6 L254.4,108.2 L263.0,106.9 L272.1,105.7 L281.8,104.6 L292.2,103.6 L303.5,102.8 L315.8,102.0 L329.5,101.4 L345.0,100.9 L363.1,100.5 L385.4,100.2 L416.0,100.1 L512.0,100.0 L608.0,100.1 L638.6,100.2 L660.9,100.5 L679.0,100.9 L694.5,101.4 L708.2,102.0 L720.5,102.8 L731.8,103.6 L742.2,104.6 L751.9,105.7 L761.0,106.9 L769.6,108.2 L777.6,109.6 L785.3,111.2 L792.6,112.8 L799.5,114.6 L806.1,116.5 L812.4,118.6 L818.5,120.7 L824.2,123.0 L829.8,125.5 L835.1,128.0 L840.2,130.7 L845.1,133.5 L849.8,136.4 L854.3,139.5 L858.7,142.8 L862.8,146.1 L866.8,149.7 L870.7,153.3 L874.3,157.2 L877.9,161.2 L881.2,165.3 L884.5,169.7 L887.6,174.2 L890.5,178.9 L893.3,183.8 L896.0,188.9 L898.5,194.2 L901.0,199.8 L903.3,205.5 L905.4,211.6 L907.5,217.9 L909.4,224.5 L911.2,231.4 L912.8,238.7 L914.4,246.4 L915.8,254.4 L917.1,263.0 L918.3,272.1 L919.4,281.8 L920.4,292.2 L921.2,303.5 L922.0,315.8 L922.6,329.5 L923.1,345.0 L923.5,363.1 L923.8,385.4 L923.9,416.0Z" fill="url(#bg)"/>
|
||||
<g clip-path="url(#tile)">
|
||||
<!-- selection frame -->
|
||||
<rect x="282" y="212" width="460" height="600" fill="none" stroke="#89b4fa" stroke-width="22"/>
|
||||
<!-- sheet -->
|
||||
<g filter="url(#sh)">
|
||||
<path d="M322 252H600L702 354V772H322Z" fill="#cdd6f4"/>
|
||||
</g>
|
||||
<path d="M600 252L702 354H600Z" fill="#cba6f7"/>
|
||||
<rect x="382" y="440" width="260" height="30" rx="15" fill="#9399b2" opacity=".6"/>
|
||||
<rect x="382" y="512" width="260" height="30" rx="15" fill="#9399b2" opacity=".6"/>
|
||||
<rect x="254" y="184" width="56" height="56" rx="6" fill="#1e1e2e" stroke="#89b4fa" stroke-width="22"/><rect x="714" y="184" width="56" height="56" rx="6" fill="#1e1e2e" stroke="#89b4fa" stroke-width="22"/><rect x="254" y="784" width="56" height="56" rx="6" fill="#1e1e2e" stroke="#89b4fa" stroke-width="22"/><rect x="714" y="784" width="56" height="56" rx="6" fill="#1e1e2e" stroke="#89b4fa" stroke-width="22"/>
|
||||
<!-- pen nib -->
|
||||
<g transform="translate(470 580) rotate(135) scale(1.0)" filter="url(#sh)">
|
||||
<path d="M0 0L-52 -120Q-70 -170 -44 -214H44Q70 -170 52 -120Z" fill="url(#nib)" stroke="#1e1e2e" stroke-width="22" stroke-linejoin="round"/>
|
||||
<path d="M0 0V-104" stroke="#1e1e2e" stroke-width="12" stroke-linecap="round"/>
|
||||
<circle cx="0" cy="-132" r="17" fill="#1e1e2e"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.1 KiB |
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"arrow-down","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,5.0],[12.0,19.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,12.0],[12.0,19.0],[5.0,12.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"arrow-up","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,12.0],[12.0,5.0],[19.0,12.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,19.0],[12.0,5.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"bold","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,12.0],[15.0,12.0],[17.82843,13.17157],[19.0,16.0],[17.82843,18.82843],[15.0,20.0],[7.0,20.0],[6.29289,19.70711],[6.0,19.0],[6.0,5.0],[6.29289,4.29289],[7.0,4.0],[14.0,4.0],[16.82843,5.17157],[18.0,8.0],[16.82843,10.82843],[14.0,12.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.74986,-0.74986],[0.0,-1.06046],[0.74986,-0.74986],[1.06046,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746],[-0.26511,0.0],[0.0,0.0],[-0.74986,-0.74986],[0.0,-1.06046],[0.74986,-0.74986],[1.06046,0.0]],"o":[[0.0,0.0],[1.06046,0.0],[0.74986,0.74986],[0.0,1.06046],[-0.74986,0.74986],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746],[0.0,0.0],[1.06046,0.0],[0.74986,0.74986],[0.0,1.06046],[-0.74986,0.74986],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"bookmark","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[17.0,3.0],[18.41421,3.58579],[19.0,5.0],[19.0,20.0],[18.76689,20.64145],[18.17657,20.98397],[17.504,20.868],[12.992,18.29],[12.0,18.02665],[11.008,18.29],[6.496,20.868],[5.82343,20.98397],[5.23311,20.64145],[5.0,20.0],[5.0,5.0],[5.58579,3.58579],[7.0,3.0]],"i":[[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.15048,-0.17982],[0.2308,-0.0414],[0.20361,0.1163],[0.0,0.0],[0.34792,0.0],[0.30211,-0.17257],[0.0,0.0],[0.2308,0.0414],[0.15048,0.17982],[8e-05,0.23448],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0]],"o":[[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[-8e-05,0.23448],[-0.15048,0.17982],[-0.2308,0.0414],[0.0,0.0],[-0.30211,-0.17257],[-0.34792,0.0],[0.0,0.0],[-0.20361,0.1163],[-0.2308,-0.0414],[-0.15048,-0.17982],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[17.0,3.0],[18.41421,3.58579],[19.0,5.0],[19.0,20.0],[18.76689,20.64145],[18.17657,20.98397],[17.504,20.868],[12.992,18.29],[12.0,18.02665],[11.008,18.29],[6.496,20.868],[5.82343,20.98397],[5.23311,20.64145],[5.0,20.0],[5.0,5.0],[5.58579,3.58579],[7.0,3.0]],"i":[[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.15048,-0.17982],[0.2308,-0.0414],[0.20361,0.1163],[0.0,0.0],[0.34792,0.0],[0.30211,-0.17257],[0.0,0.0],[0.2308,0.0414],[0.15048,0.17982],[8e-05,0.23448],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0]],"o":[[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[-8e-05,0.23448],[-0.15048,0.17982],[-0.2308,0.0414],[0.0,0.0],[-0.30211,-0.17257],[-0.34792,0.0],[0.0,0.0],[-0.20361,0.1163],[-0.2308,-0.0414],[-0.15048,-0.17982],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0]],"c":true}}},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":4,"s":[65],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":1},{"a":{"a":0,"k":[12,3]},"p":{"a":0,"k":[12,3]},"s":{"a":1,"k":[{"t":0,"s":[100.0,0.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[100.0,115.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"bug","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,20.0],[12.0,11.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,7.0],[16.82843,8.17157],[18.0,11.0],[18.0,14.0],[16.24264,18.24264],[12.0,20.0],[7.75736,18.24264],[6.0,14.0],[6.0,11.0],[7.17157,8.17157],[10.0,7.0]],"i":[[0.0,0.0],[-0.74986,-0.74986],[0.0,-1.06046],[0.0,0.0],[1.12479,-1.12479],[1.59069,0.0],[1.12479,1.12479],[0.0,1.59069],[0.0,0.0],[-0.74986,0.74986],[-1.06046,0.0]],"o":[[1.06046,0.0],[0.74986,0.74986],[0.0,0.0],[0.0,1.59069],[-1.12479,1.12479],[-1.59069,0.0],[-1.12479,-1.12479],[0.0,0.0],[0.0,-1.06046],[0.74986,-0.74986],[0.0,0.0]],"c":true}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[14.12,3.88],[16.0,2.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,21.0],[19.89638,18.23668],[17.19,17.0]],"i":[[0.0,0.0],[0.70929,0.74466],[1.02724,0.04885]],"o":[[0.00116,-1.0284],[-0.70929,-0.74466],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,5.0],[19.98175,7.66169],[17.45,8.97]],"i":[[0.0,0.0],[0.65449,-0.73193],[0.97564,-0.11046]],"o":[[-0.00113,0.98187],[-0.65449,0.73193],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,13.0],[18.0,13.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,21.0],[4.10362,18.23668],[6.81,17.0]],"i":[[0.0,0.0],[-0.70929,0.74466],[-1.02724,0.04885]],"o":[[-0.00116,-1.0284],[0.70929,-0.74466],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,5.0],[4.01825,7.66169],[6.55,8.97]],"i":[[0.0,0.0],[-0.65449,-0.73193],[-0.97564,-0.11046]],"o":[[0.00113,0.98187],[0.65449,0.73193],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,13.0],[2.0,13.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,2.0],[9.88,3.88]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,7.13],[9.0,6.0],[9.87868,3.87868],[12.0,3.0],[14.12132,3.87868],[15.0,6.0],[15.0,7.13]],"i":[[0.0,0.0],[0.0,0.0],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"calendar","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,2.0],[8.0,5.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,2.0],[16.0,5.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,9.0],[21.0,9.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"check","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,12.0],[9.0,17.0],[20.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":1,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":2,"s":[1],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":0},"m":1},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"chevron-down","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,9.0],[12.0,15.0],[18.0,9.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"chevron-left","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-2,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,18.0],[9.0,12.0],[15.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"chevron-right","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,18.0],[15.0,12.0],[9.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[98],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[90],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"chevron-up","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,15.0],[12.0,9.0],[6.0,15.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"circle-check","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,12.0],[19.07107,19.07107],[12.0,22.0],[4.92893,19.07107],[2.0,12.0],[4.92893,4.92893],[12.0,2.0],[19.07107,4.92893]],"i":[[0.0,-2.65115],[1.87464,-1.87464],[2.65115,0.0],[1.87464,1.87464],[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464]],"o":[[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464],[-0.0,-2.65115],[1.87464,-1.87464],[2.65115,-0.0],[1.87464,1.87464]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,12.0],[10.5,14.5],[16.0,9.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":1,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":2,"s":[1],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":0},"m":1},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"circle-question-mark","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,12.0],[19.07107,19.07107],[12.0,22.0],[4.92893,19.07107],[2.0,12.0],[4.92893,4.92893],[12.0,2.0],[19.07107,4.92893]],"i":[[0.0,-2.65115],[1.87464,-1.87464],[2.65115,0.0],[1.87464,1.87464],[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464]],"o":[[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464],[-0.0,-2.65115],[1.87464,-1.87464],[2.65115,-0.0],[1.87464,1.87464]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.09,9.0],[10.39995,7.40913],[12.42718,7.03871],[14.21508,8.06353],[14.92,10.0],[11.92,13.0]],"i":[[0.0,0.0],[-0.61065,0.35889],[-0.69811,-0.11974],[-0.45615,-0.54187],[0.00106,-0.70831],[0.0,0.0]],"o":[[0.23505,-0.66817],[0.61065,-0.35889],[0.69811,0.11974],[0.45615,0.54187],[0.0,2.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,17.0],[12.01,17.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"circle","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[112.0,112.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[95.8,95.8,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.44,101.44,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[0.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,12.0],[19.07107,19.07107],[12.0,22.0],[4.92893,19.07107],[2.0,12.0],[4.92893,4.92893],[12.0,2.0],[19.07107,4.92893]],"i":[[0.0,-2.65115],[1.87464,-1.87464],[2.65115,0.0],[1.87464,1.87464],[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464]],"o":[[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464],[-0.0,-2.65115],[1.87464,-1.87464],[2.65115,-0.0],[1.87464,1.87464]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"clipboard","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,2.0],[15.0,2.0],[15.70711,2.29289],[16.0,3.0],[16.0,5.0],[15.70711,5.70711],[15.0,6.0],[9.0,6.0],[8.29289,5.70711],[8.0,5.0],[8.0,3.0],[8.29289,2.29289]],"i":[[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.18746,-0.18746],[0.26511,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746]],"o":[[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[-0.18746,0.18746],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,4.0],[18.0,4.0],[19.41421,4.58579],[20.0,6.0],[20.0,20.0],[19.41421,21.41421],[18.0,22.0],[6.0,22.0],[4.58579,21.41421],[4.0,20.0],[4.0,6.0],[4.58579,4.58579],[6.0,4.0],[8.0,4.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"copy","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[10.0,8.0],[20.0,8.0],[21.41421,8.58579],[22.0,10.0],[22.0,20.0],[21.41421,21.41421],[20.0,22.0],[10.0,22.0],[8.58579,21.41421],[8.0,20.0],[8.0,10.0],[8.58579,8.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,16.0],[2.0,14.0],[2.0,4.0],[4.0,2.0],[14.0,2.0],[16.0,4.0]],"i":[[0.0,0.0],[0.0,1.1],[0.0,0.0],[-1.1,0.0],[0.0,0.0],[0.0,-1.1]],"o":[[-1.1,0.0],[0.0,0.0],[0.0,-1.1],[0.0,0.0],[1.1,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.7,-1.7],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"diamond","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[112.0,112.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[95.8,95.8,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.44,101.44,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-4.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.7,10.3],[2.07548,11.38085],[2.07548,12.62915],[2.7,13.71],[10.29,21.3],[11.37085,21.92452],[12.61915,21.92452],[13.7,21.3],[21.29,13.71],[21.91452,12.62915],[21.91452,11.38085],[21.29,10.3],[13.7,2.71],[12.61915,2.08548],[11.37085,2.08548],[10.29,2.71]],"i":[[0.0,0.0],[0.10963,-0.40885],[-0.10963,-0.40885],[-0.29947,-0.29916],[0.0,0.0],[-0.40885,-0.10963],[-0.40885,0.10963],[-0.29916,0.29947],[0.0,0.0],[-0.10963,0.40885],[0.10963,0.40885],[0.29947,0.29916],[0.0,0.0],[0.40885,0.10963],[0.40885,-0.10963],[0.29916,-0.29947]],"o":[[-0.29947,0.29916],[-0.10963,0.40885],[0.10963,0.40885],[0.0,0.0],[0.29916,0.29947],[0.40885,0.10963],[0.40885,-0.10963],[0.0,0.0],[0.29947,-0.29916],[0.10963,-0.40885],[-0.10963,-0.40885],[0.0,0.0],[-0.29916,-0.29947],[-0.40885,-0.10963],[-0.40885,0.10963],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"download","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,15.0],[12.0,3.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,15.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,15.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[7.0,10.0],[12.0,15.0],[17.0,10.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"eraser","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,21.0],[8.0,21.0],[7.23138,20.84831],[6.58,20.413],[2.586,16.414],[2.00043,15.0],[2.586,13.586],[12.586,3.586],[13.48273,3.06811],[14.51827,3.06811],[15.415,3.586],[21.414,9.586],[21.99957,11.0],[21.414,12.414],[12.834,21.0]],"i":[[0.0,0.0],[0.0,0.0],[0.2437,0.10074],[0.1863,0.18662],[0.0,0.0],[0.0,0.53013],[-0.3748,0.37491],[0.0,0.0],[-0.33917,0.0909],[-0.33917,-0.0909],[-0.24824,-0.24834],[0.0,0.0],[0.0,-0.53013],[0.3748,-0.37491],[0.0,0.0]],"o":[[0.0,0.0],[-0.2637,0.0006],[-0.2437,-0.10074],[0.0,0.0],[-0.3748,-0.37491],[0.0,-0.53013],[0.0,0.0],[0.24824,-0.24834],[0.33917,-0.0909],[0.33917,0.0909],[0.0,0.0],[0.3748,0.37491],[0.0,0.53013],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.082,11.09],[13.91,19.918]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"file-text","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,22.0],[4.58579,21.41421],[4.0,20.0],[4.0,4.0],[4.58579,2.58579],[6.0,2.0],[14.0,2.0],[14.92253,2.18277],[15.704,2.706],[19.292,6.294],[19.81669,7.07616],[20.0,8.0],[20.0,20.0],[19.41421,21.41421],[18.0,22.0]],"i":[[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[0.0,0.0],[-0.29244,-0.12116],[-0.22343,-0.22424],[0.0,0.0],[-0.12152,-0.29281],[0.00052,-0.31702],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0]],"o":[[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0],[0.31655,-0.00051],[0.29244,0.12116],[0.0,0.0],[0.22484,0.2235],[0.12152,0.29281],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,2.0],[14.0,7.0],[14.29289,7.70711],[15.0,8.0],[20.0,8.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.18746,-0.18746],[-0.26511,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.26511],[0.18746,0.18746],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[10.0,9.0],[8.0,9.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,13.0],[8.0,13.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,17.0],[8.0,17.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"flame","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[112.0,112.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[95.8,95.8,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.44,101.44,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[0.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,3.0],[16.0,9.5],[19.0,15.0],[16.94975,19.94975],[12.0,22.0],[7.05025,19.94975],[5.0,15.0],[6.0,12.0],[6.73223,13.76777],[8.5,14.5],[10.26777,13.76777],[11.0,12.0],[9.5,7.0]],"i":[[-1.66667,1.33333],[-2.0,-1.66667],[0.0,-2.0],[1.31225,-1.31225],[1.8558,0.0],[1.31225,1.31225],[0.0,1.8558],[-0.649,0.86533],[-0.46866,-0.46866],[-0.66279,0.0],[-0.46866,0.46866],[0.0,0.66279],[0.0,2.0]],"o":[[0.66667,2.66667],[2.0,1.66667],[0.0,1.8558],[-1.31225,1.31225],[-1.8558,0.0],[-1.31225,-1.31225],[0.0,-1.08167],[0.0,0.66279],[0.46866,0.46866],[0.66279,0.0],[0.46866,-0.46866],[0.0,-2.0],[0.0,-1.33333]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"folder","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,20.0],[2.58579,19.41421],[2.0,18.0],[2.0,5.0],[2.58579,3.58579],[4.0,3.0],[7.93,3.0],[8.8785,3.2394],[9.6,3.9],[10.41,5.1],[11.1403,5.76538],[12.1,6.0],[18.0,6.0]],"i":[[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[0.0,0.0],[-0.29146,-0.15707],[-0.1821,-0.27651],[0.0,0.0],[-0.29523,-0.15722],[-0.33447,0.00328],[0.0,0.0]],"o":[[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0],[0.33109,5e-05],[0.29146,0.15707],[0.0,0.0],[0.18395,0.27936],[0.29523,0.15722],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":1,"k":[{"t":0,"s":[{"v":[[6.0,3.0],[7.93,3.0],[8.8785,3.2394],[9.6,3.9],[10.41,5.1],[11.1403,5.76538],[12.1,6.0],[20.0,6.0],[21.41421,6.58579],[22.0,8.0],[22.0,18.0],[21.41421,19.41421],[20.0,20.0],[4.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.29146,-0.15707],[-0.1821,-0.27651],[0.0,0.0],[-0.29523,-0.15722],[-0.33447,0.00328],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.33109,5e-05],[0.29146,0.15707],[0.0,0.0],[0.18395,0.27936],[0.29523,0.15722],[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":10,"s":[{"v":[[6.0,14.0],[7.5,11.1],[8.21761,10.30895],[9.24,10.0],[14.62,10.0],[20.0,10.0],[21.14376,10.35688],[21.87829,11.30345],[21.94,12.5],[20.4,18.5],[19.68292,19.58529],[18.45,20.0],[11.225,20.0],[4.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.30646,0.19374],[-0.36247,0.0084],[-2.69,0.0],[0.0,0.0],[-0.33578,-0.23301],[-0.14234,-0.38312],[0.10218,-0.39573],[0.0,0.0],[0.35321,-0.2717],[0.44562,0.00301],[3.6125,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.16306,-0.32383],[0.30646,-0.19374],[0.0,0.0],[2.69,0.0],[0.40871,-0.00072],[0.33578,0.23301],[0.14234,0.38312],[0.0,0.0],[-0.1114,0.43148],[-0.35321,0.2717],[0.0,0.0],[-3.6125,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[{"v":[[6.0,14.0],[7.5,11.1],[8.21761,10.30895],[9.24,10.0],[14.62,10.0],[20.0,10.0],[21.14376,10.35688],[21.87829,11.30345],[21.94,12.5],[20.4,18.5],[19.68292,19.58529],[18.45,20.0],[11.225,20.0],[4.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.30646,0.19374],[-0.36247,0.0084],[-2.69,0.0],[0.0,0.0],[-0.33578,-0.23301],[-0.14234,-0.38312],[0.10218,-0.39573],[0.0,0.0],[0.35321,-0.2717],[0.44562,0.00301],[3.6125,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.16306,-0.32383],[0.30646,-0.19374],[0.0,0.0],[2.69,0.0],[0.40871,-0.00072],[0.33578,0.23301],[0.14234,0.38312],[0.0,0.0],[-0.1114,0.43148],[-0.35321,0.2717],[0.0,0.0],[-3.6125,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]}},{"ty":"tm","s":{"a":1,"k":[{"t":0,"s":[27.87664786438373],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":3,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"e":{"a":0,"k":100},"o":{"a":0,"k":0},"m":1},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,6.0],[19.41421,6.58579],[20.0,8.0],[20.0,10.0]],"i":[[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0]],"o":[[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":3,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"git-branch","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,6.0],[8.63604,8.63604],[6.0,15.0],[6.0,3.0]],"i":[[0.0,0.0],[1.68718,-1.68718],[0.0,-2.38603],[0.0,0.0]],"o":[[-2.38603,0.0],[-1.68718,1.68718],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,6.0],[20.12132,8.12132],[18.0,9.0],[15.87868,8.12132],[15.0,6.0],[15.87868,3.87868],[18.0,3.0],[20.12132,3.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[18.0,6.0]},"p":{"a":0,"k":[18.0,6.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,18.0],[8.12132,20.12132],[6.0,21.0],[3.87868,20.12132],[3.0,18.0],[3.87868,15.87868],[6.0,15.0],[8.12132,15.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[6.0,18.0]},"p":{"a":0,"k":[6.0,18.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":10,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":14.5,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.5,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"git-commit-horizontal","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,12.0],[14.12132,14.12132],[12.0,15.0],[9.87868,14.12132],[9.0,12.0],[9.87868,9.87868],[12.0,9.0],[14.12132,9.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12.0,12.0]},"p":{"a":0,"k":[12.0,12.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12.3,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":16.5,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,12.0],[9.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,12.0],[21.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"git-fork","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,18.0],[14.12132,20.12132],[12.0,21.0],[9.87868,20.12132],[9.0,18.0],[9.87868,15.87868],[12.0,15.0],[14.12132,15.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12.0,18.0]},"p":{"a":0,"k":[12.0,18.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12.3,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":16.5,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,6.0],[8.12132,8.12132],[6.0,9.0],[3.87868,8.12132],[3.0,6.0],[3.87868,3.87868],[6.0,3.0],[8.12132,3.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[6.0,6.0]},"p":{"a":0,"k":[6.0,6.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,6.0],[20.12132,8.12132],[18.0,9.0],[15.87868,8.12132],[15.0,6.0],[15.87868,3.87868],[18.0,3.0],[20.12132,3.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[18.0,6.0]},"p":{"a":0,"k":[18.0,6.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":10,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":14.5,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.5,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,9.0],[16.24264,13.24264],[12.0,15.0],[7.75736,13.24264],[6.0,9.0]],"i":[[0.0,0.0],[1.12479,-1.12479],[1.59069,0.0],[1.12479,1.12479],[0.0,1.59069]],"o":[[0.0,1.59069],[-1.12479,1.12479],[-1.59069,0.0],[-1.12479,-1.12479],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"grid-3x3","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,9.0],[21.0,9.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-1.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,15.0],[21.0,15.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,1.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,3.0],[9.0,21.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.8,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,3.0],[15.0,21.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.8,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"hand","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,11.0],[18.0,6.0],[17.41421,4.58579],[16.0,4.0],[14.58579,4.58579],[14.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0],[0.37493,-0.37493],[0.0,-0.53023]],"o":[[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,10.0],[14.0,4.0],[13.41421,2.58579],[12.0,2.0],[10.58579,2.58579],[10.0,4.0],[10.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[10.0,10.5],[10.0,6.0],[9.41421,4.58579],[8.0,4.0],[6.58579,4.58579],[6.0,6.0],[6.0,14.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,8.0],[18.58579,6.58579],[20.0,6.0],[21.41421,6.58579],[22.0,8.0],[22.0,14.0],[19.65685,19.65685],[14.0,22.0],[12.0,22.0],[6.01,19.66],[2.41,16.06],[1.89512,14.66694],[2.48272,13.30296],[3.84877,12.7202],[5.24,13.24],[7.0,15.0]],"i":[[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[1.49972,-1.49972],[2.12092,0.0],[0.0,0.0],[1.49,1.48],[0.0,0.0],[-0.01353,0.51305],[-0.36355,0.36227],[-0.5131,0.01172],[-0.37971,-0.34529],[0.0,0.0]],"o":[[0.0,-0.53023],[0.37493,-0.37493],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,2.12092],[-1.49972,1.49972],[0.0,0.0],[-2.8,0.0],[0.0,0.0],[-0.34395,-0.38093],[0.01353,-0.51305],[0.36355,-0.36227],[0.5131,-0.01172],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"highlighter","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,11.0],[3.0,17.0],[3.0,20.0],[12.0,20.0],[15.0,17.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,12.0],[17.4,16.6],[16.0,17.17171],[14.6,16.6],[9.4,11.4],[8.82829,10.0],[9.4,8.6],[14.0,4.0]],"i":[[0.0,0.0],[0.0,0.0],[0.52331,0.0],[0.37372,0.36632],[0.0,0.0],[0.0,0.52331],[-0.36632,0.37372],[0.0,0.0]],"o":[[0.0,0.0],[-0.37372,0.36632],[-0.52331,0.0],[0.0,0.0],[-0.36632,-0.37372],[0.0,-0.52331],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"image","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[11.0,9.0],[10.41421,10.41421],[9.0,11.0],[7.58579,10.41421],[7.0,9.0],[7.58579,7.58579],[9.0,7.0],[10.41421,7.58579]],"i":[[0.0,-0.53023],[0.37493,-0.37493],[0.53023,0.0],[0.37493,0.37493],[0.0,0.53023],[-0.37493,0.37493],[-0.53023,0.0],[-0.37493,-0.37493]],"o":[[0.0,0.53023],[-0.37493,0.37493],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.37493,-0.37493],[0.53023,0.0],[0.37493,0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":1,"k":[{"t":0,"s":[{"v":[[21.0,15.0],[17.914,11.914],[16.5,11.32843],[15.086,11.914],[6.0,21.0]],"i":[[0.0,0.0],[0.0,0.0],[0.53013,0.0],[0.37491,-0.3748],[0.0,0.0]],"o":[[0.0,0.0],[-0.37491,-0.3748],[-0.53013,0.0],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[{"v":[[21.0,15.0],[17.914,13.914],[16.5,13.32843],[15.086,13.914],[6.0,21.0]],"i":[[0.0,0.0],[0.0,0.0],[0.53013,0.0],[0.37491,-0.3748],[0.0,0.0]],"o":[[0.0,0.0],[-0.37491,-0.3748],[-0.53013,0.0],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[{"v":[[21.0,15.0],[17.914,11.914],[16.5,11.32843],[15.086,11.914],[6.0,21.0]],"i":[[0.0,0.0],[0.0,0.0],[0.53013,0.0],[0.37491,-0.3748],[0.0,0.0]],"o":[[0.0,0.0],[-0.37491,-0.3748],[-0.53013,0.0],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"toggle":["folder","chevron-right","panel-left","panel-right","star","bookmark","lock","sparkles","maximize"],"oneshot":["search","settings","plus","x","check","copy","trash-2","file-text","tag","layers","git-branch","link","list","download","upload","pencil","pen","eraser","hand","mouse-pointer-2","type","square","circle","diamond","move-up-right","slash","image","calendar","clipboard","quote","info","bug","triangle-alert","flame","zap","git-fork","git-commit-horizontal","undo-2","refresh-cw","notebook-pen","layout-dashboard","circle-check","circle-question-mark","bold","italic","strikethrough","highlighter","scissors","message-square-quote","arrow-up","arrow-down","chevron-up","chevron-down","chevron-left","grid-3x3"]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"info","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,12.0],[19.07107,19.07107],[12.0,22.0],[4.92893,19.07107],[2.0,12.0],[4.92893,4.92893],[12.0,2.0],[19.07107,4.92893]],"i":[[0.0,-2.65115],[1.87464,-1.87464],[2.65115,0.0],[1.87464,1.87464],[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464]],"o":[[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464],[-0.0,-2.65115],[1.87464,-1.87464],[2.65115,-0.0],[1.87464,1.87464]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,16.0],[12.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,8.0],[12.01,8.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"italic","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,4.0],[10.0,4.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,20.0],[5.0,20.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,4.0],[9.0,20.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"layers","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.83,2.18],[12.0,1.99964],[11.17,2.18],[2.6,6.08],[2.07672,6.61928],[2.07672,7.37072],[2.6,7.91],[11.18,11.82],[12.01,12.00036],[12.84,11.82],[21.42,7.92],[21.94328,7.38072],[21.94328,6.62928],[21.42,6.09]],"i":[[0.0,0.0],[0.28638,0.0],[0.26055,-0.11885],[0.0,0.0],[0.09765,-0.24087],[-0.09765,-0.24087],[-0.23782,-0.10486],[0.0,0.0],[-0.28638,0.0],[-0.26055,0.11885],[0.0,0.0],[-0.09765,0.24087],[0.09765,0.24087],[0.23782,0.10486]],"o":[[-0.26055,-0.11885],[-0.28638,0.0],[0.0,0.0],[-0.23782,0.10486],[-0.09765,0.24087],[0.09765,0.24087],[0.0,0.0],[0.26055,0.11885],[0.28638,0.0],[0.0,0.0],[0.23782,-0.10486],[0.09765,-0.24087],[-0.09765,-0.24087],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,12.0],[2.15672,12.53995],[2.58,12.91],[11.18,16.82],[12.005,16.99808],[12.83,16.82],[21.41,12.92],[21.8418,12.54773],[22.0,12.0]],"i":[[0.0,0.0],[-0.10279,-0.16128],[-0.17356,-0.08032],[0.0,0.0],[-0.28453,0.0],[-0.25919,0.11737],[0.0,0.0],[-0.10475,0.16334],[0.00153,0.19404]],"o":[[-0.00047,0.19125],[0.10279,0.16128],[0.0,0.0],[0.25919,0.11737],[0.28453,0.0],[0.0,0.0],[0.17699,-0.07955],[0.10475,-0.16334],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,17.0],[2.15672,17.53995],[2.58,17.91],[11.18,21.82],[12.005,21.99808],[12.83,21.82],[21.41,17.92],[21.8418,17.54773],[22.0,17.0]],"i":[[0.0,0.0],[-0.10279,-0.16128],[-0.17356,-0.08032],[0.0,0.0],[-0.28453,0.0],[-0.25919,0.11737],[0.0,0.0],[-0.10475,0.16334],[0.00153,0.19404]],"o":[[-0.00047,0.19125],[0.10279,0.16128],[0.0,0.0],[0.25919,0.11737],[0.28453,0.0],[0.0,0.0],[0.17699,-0.07955],[0.10475,-0.16334],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"layout-dashboard","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,3.0],[9.0,3.0],[9.70711,3.29289],[10.0,4.0],[10.0,11.0],[9.70711,11.70711],[9.0,12.0],[4.0,12.0],[3.29289,11.70711],[3.0,11.0],[3.0,4.0],[3.29289,3.29289]],"i":[[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.18746,-0.18746],[0.26511,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746]],"o":[[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[-0.18746,0.18746],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.5,-1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,3.0],[20.0,3.0],[20.70711,3.29289],[21.0,4.0],[21.0,7.0],[20.70711,7.70711],[20.0,8.0],[15.0,8.0],[14.29289,7.70711],[14.0,7.0],[14.0,4.0],[14.29289,3.29289]],"i":[[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.18746,-0.18746],[0.26511,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746]],"o":[[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[-0.18746,0.18746],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.5,-1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,12.0],[20.0,12.0],[20.70711,12.29289],[21.0,13.0],[21.0,20.0],[20.70711,20.70711],[20.0,21.0],[15.0,21.0],[14.29289,20.70711],[14.0,20.0],[14.0,13.0],[14.29289,12.29289]],"i":[[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.18746,-0.18746],[0.26511,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746]],"o":[[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[-0.18746,0.18746],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.5,1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,16.0],[9.0,16.0],[9.70711,16.29289],[10.0,17.0],[10.0,20.0],[9.70711,20.70711],[9.0,21.0],[4.0,21.0],[3.29289,20.70711],[3.0,20.0],[3.0,17.0],[3.29289,16.29289]],"i":[[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.18746,-0.18746],[0.26511,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746]],"o":[[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[-0.18746,0.18746],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.5,1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"link","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[10.0,13.0],[12.25562,14.68953],[15.06663,14.89085],[17.54,13.54],[20.54,10.54],[21.94337,7.02299],[20.47909,3.53091],[16.98701,2.06663],[13.47,3.47],[11.75,5.18]],"i":[[0.0,0.0],[-0.89822,-0.33521],[-0.93683,0.20379],[-0.67781,0.67805],[0.0,0.0],[0.01139,1.3105],[0.9267,0.9267],[1.3105,0.01139],[0.94267,-0.91046],[0.0,0.0]],"o":[[0.57426,0.76772],[0.89822,0.33521],[0.93683,-0.20379],[0.0,0.0],[0.91046,-0.94267],[-0.01139,-1.3105],[-0.9267,-0.9267],[-1.3105,-0.01139],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.6,-1.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,11.0],[11.74438,9.31047],[8.93337,9.10915],[6.46,10.46],[3.46,13.46],[2.05663,16.97701],[3.52091,20.46909],[7.01299,21.93337],[10.53,20.53],[12.24,18.82]],"i":[[0.0,0.0],[0.89822,0.33521],[0.93683,-0.20379],[0.67781,-0.67805],[0.0,0.0],[-0.01139,-1.3105],[-0.9267,-0.9267],[-1.3105,-0.01139],[-0.94267,0.91046],[0.0,0.0]],"o":[[-0.57426,-0.76772],[-0.89822,-0.33521],[-0.93683,0.20379],[0.0,0.0],[-0.91046,0.94267],[0.01139,1.3105],[0.9267,0.9267],[1.3105,0.01139],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.6,1.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"list","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,5.0],[3.01,5.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.6,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,12.0],[3.01,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[2,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,19.0],[3.01,19.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.6,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,5.0],[21.0,5.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[2,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,12.0],[21.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.6,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,19.0],[21.0,19.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[2,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"lock","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":10,"s":[0,1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,11.0],[19.0,11.0],[20.41421,11.58579],[21.0,13.0],[21.0,20.0],[20.41421,21.41421],[19.0,22.0],[5.0,22.0],[3.58579,21.41421],[3.0,20.0],[3.0,13.0],[3.58579,11.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":1,"k":[{"t":0,"s":[{"v":[[7.0,11.0],[7.0,7.0],[8.28937,3.64367],[11.4975,2.02029],[14.96547,2.96931],[16.9,6.0],[16.9,6.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.83085,0.91993],[-1.23331,0.12458],[-0.99803,-0.73519],[-0.24667,-1.2148],[0,0]],"o":[[0.0,0.0],[-0.00125,-1.23959],[0.83085,-0.91993],[1.23331,-0.12458],[0.99803,0.73519],[0.0,0.0],[0,0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[{"v":[[7.0,11.0],[7.0,7.0],[8.46447,3.46447],[12.0,2.0],[15.53553,3.46447],[17.0,7.0],[17.0,11.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.93732,0.93732],[-1.32557,0.0],[-0.93732,-0.93732],[0.0,-1.32557],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-1.32557],[0.93732,-0.93732],[1.32557,-0.0],[0.93732,0.93732],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[{"v":[[7.0,11.0],[7.0,7.0],[8.46447,3.46447],[12.0,2.0],[15.53553,3.46447],[17.0,7.0],[17.0,11.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.93732,0.93732],[-1.32557,0.0],[-0.93732,-0.93732],[0.0,-1.32557],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-1.32557],[0.93732,-0.93732],[1.32557,-0.0],[0.93732,0.93732],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"maximize","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,3.0],[5.0,3.0],[3.58579,3.58579],[3.0,5.0],[3.0,8.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0]],"o":[[0.0,0.0],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.875,-1.875],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[-1.5,-1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,8.0],[21.0,5.0],[20.41421,3.58579],[19.0,3.0],[16.0,3.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.875,-1.875],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[1.5,-1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,16.0],[3.0,19.0],[3.58579,20.41421],[5.0,21.0],[8.0,21.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.37493,-0.37493],[-0.53023,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.53023],[0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.875,1.875],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[-1.5,1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,21.0],[19.0,21.0],[20.41421,20.41421],[21.0,19.0],[21.0,16.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.37493,0.37493],[0.0,0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.875,1.875],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[1.5,1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"message-square-quote","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,14.0],[15.41421,13.41421],[16.0,12.0],[16.0,8.0],[14.0,8.0]],"i":[[0.0,0.0],[-0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[0.0,0.0]],"o":[[0.53023,0.0],[0.37493,-0.37493],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,17.0],[21.41421,18.41421],[20.0,19.0],[6.828,19.0],[5.414,19.586],[3.212,21.788],[2.70999,21.99591],[2.20798,21.78798],[2.0,21.286],[2.0,5.0],[2.58579,3.58579],[4.0,3.0],[20.0,3.0],[21.41421,3.58579],[22.0,5.0]],"i":[[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37484,-0.37495],[0.0,0.0],[0.18821,0.0],[0.13309,0.13308],[2e-05,0.18821],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023]],"o":[[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53019,0.00011],[0.0,0.0],[-0.1331,0.13307],[-0.18821,-0.0],[-0.13309,-0.13308],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,14.0],[9.41421,13.41421],[10.0,12.0],[10.0,8.0],[8.0,8.0]],"i":[[0.0,0.0],[-0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[0.0,0.0]],"o":[[0.53023,0.0],[0.37493,-0.37493],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"mouse-pointer-2","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.037,4.688],[4.00494,4.39856],[4.14118,4.14118],[4.39856,4.00494],[4.688,4.037],[20.688,10.537],[20.92331,10.73498],[20.99825,11.03324],[20.88446,11.31893],[20.625,11.484],[14.501,13.064],[13.58623,13.58533],[13.063,14.499],[11.484,20.625],[11.31893,20.88446],[11.03324,20.99825],[10.73498,20.92331],[10.537,20.688]],"i":[[0.0,0.0],[-0.01858,0.0975],[-0.07018,0.07018],[-0.0975,0.01858],[-0.09107,-0.03946],[0.0,0.0],[-0.05568,-0.08906],[0.00697,-0.1048],[0.06699,-0.0809],[0.10167,-0.0264],[0.0,0.0],[0.25287,-0.25234],[0.08967,-0.3458],[0.0,0.0],[0.0809,-0.06699],[0.1048,-0.00697],[0.08906,0.05568],[0.03963,0.09727]],"o":[[-0.03946,-0.09107],[0.01858,-0.0975],[0.07018,-0.07018],[0.0975,-0.01858],[0.0,0.0],[0.09727,0.03963],[0.05568,0.08906],[-0.00697,0.1048],[-0.06699,0.0809],[0.0,0.0],[-0.34598,0.08895],[-0.25287,0.25234],[0.0,0.0],[-0.0264,0.10167],[-0.0809,0.06699],[-0.1048,0.00697],[-0.08906,-0.05568],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"move-up-right","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.8,-1.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[13.0,5.0],[19.0,5.0],[19.0,11.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,5.0],[5.0,19.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"notebook-pen","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[13.4,2.0],[6.0,2.0],[4.58579,2.58579],[4.0,4.0],[4.0,20.0],[4.58579,21.41421],[6.0,22.0],[18.0,22.0],[19.41421,21.41421],[20.0,20.0],[20.0,12.6]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[-0.37493,-0.37493],[-0.53023,0.0],[0.0,0.0],[-0.37493,0.37493],[0.0,0.53023],[0.0,0.0]],"o":[[0.0,0.0],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[0.37493,0.37493],[0.0,0.0],[0.53023,0.0],[0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,6.0],[6.0,6.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,10.0],[6.0,10.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,14.0],[6.0,14.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,18.0],[6.0,18.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.378,5.626],[22.00015,4.124],[21.378,2.622],[19.876,1.99985],[18.374,2.622],[13.364,7.634],[12.858,8.488],[12.021,11.358],[12.04631,11.70598],[12.29302,11.95269],[12.641,11.978],[15.511,11.141],[16.365,10.635]],"i":[[0.0,0.0],[0.0,0.56314],[0.3982,0.3982],[0.56314,0.0],[0.3982,-0.3982],[0.0,0.0],[0.09421,-0.32265],[0.0,0.0],[-0.04993,-0.10916],[-0.10916,-0.04993],[-0.11524,0.03361],[0.0,0.0],[-0.23761,0.23774]],"o":[[0.3982,-0.3982],[0.0,-0.56314],[-0.3982,-0.3982],[-0.56314,0.0],[0.0,0.0],[-0.23774,0.23761],[0.0,0.0],[-0.03361,0.11524],[0.04993,0.10916],[0.10916,0.04993],[0.0,0.0],[0.32265,-0.09421],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"panel-left","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,3.0],[9.0,21.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[-4,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[-4,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,4.0],[5.0,4.0],[5.0,20.0],[3.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":true}}},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[32],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[32],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":1},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"panel-right","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,3.0],[15.0,21.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[4,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[4,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,4.0],[21.0,4.0],[21.0,20.0],[19.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":true}}},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[32],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[32],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":1},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"pen","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.174,6.812],[21.99988,4.81885],[21.1745,2.8255],[19.18135,1.99962],[17.188,2.825],[3.842,16.174],[3.342,17.004],[2.021,21.356],[2.04503,21.70639],[2.29357,21.95453],[2.644,21.978],[6.997,20.658],[7.827,20.161]],"i":[[0.0,0.0],[-9e-05,0.74733],[0.52837,0.52851],[0.74733,9e-05],[0.52851,-0.52837],[0.0,0.0],[0.09611,-0.31345],[0.0,0.0],[-0.0501,-0.11002],[-0.1101,-0.04993],[-0.11577,0.0348],[0.0,0.0],[-0.23181,0.23108]],"o":[[0.52851,-0.52837],[9e-05,-0.74733],[-0.52837,-0.52851],[-0.74733,-9e-05],[0.0,0.0],[-0.23217,0.23149],[0.0,0.0],[-0.03461,0.11583],[0.0501,0.11002],[0.1101,0.04993],[0.0,0.0],[0.31315,-0.09524],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"pencil","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.174,6.812],[21.99988,4.81885],[21.1745,2.8255],[19.18135,1.99962],[17.188,2.825],[3.842,16.174],[3.342,17.004],[2.021,21.356],[2.04503,21.70639],[2.29357,21.95453],[2.644,21.978],[6.997,20.658],[7.827,20.161]],"i":[[0.0,0.0],[-9e-05,0.74733],[0.52837,0.52851],[0.74733,9e-05],[0.52851,-0.52837],[0.0,0.0],[0.09611,-0.31345],[0.0,0.0],[-0.0501,-0.11002],[-0.1101,-0.04993],[-0.11577,0.0348],[0.0,0.0],[-0.23181,0.23108]],"o":[[0.52851,-0.52837],[9e-05,-0.74733],[-0.52837,-0.52851],[-0.74733,-9e-05],[0.0,0.0],[-0.23217,0.23149],[0.0,0.0],[-0.03461,0.11583],[0.0501,0.11002],[0.1101,0.04993],[0.0,0.0],[0.31315,-0.09524],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,5.0],[19.0,9.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"plus","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":8,"s":[50],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":14,"s":[-7],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":20,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,12.0],[19.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,5.0],[12.0,19.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"quote","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,3.0],[14.58579,3.58579],[14.0,5.0],[14.0,11.0],[14.58579,12.41421],[16.0,13.0],[16.70711,13.29289],[17.0,14.0],[17.0,15.0],[16.41421,16.41421],[15.0,17.0],[14.29289,17.29289],[14.0,18.0],[14.0,20.0],[14.29289,20.70711],[15.0,21.0],[19.24264,19.24264],[21.0,15.0],[21.0,5.0],[20.41421,3.58579],[19.0,3.0]],"i":[[0.0,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[-0.37493,-0.37493],[-0.53023,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[-0.18746,-0.18746],[-0.26511,0.0],[-1.12479,1.12479],[0.0,1.59069],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0]],"o":[[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[0.37493,0.37493],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[-0.26511,0.0],[-0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[0.18746,0.18746],[1.59069,0.0],[1.12479,-1.12479],[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[3.58579,3.58579],[3.0,5.0],[3.0,11.0],[3.58579,12.41421],[5.0,13.0],[5.70711,13.29289],[6.0,14.0],[6.0,15.0],[5.41421,16.41421],[4.0,17.0],[3.29289,17.29289],[3.0,18.0],[3.0,20.0],[3.29289,20.70711],[4.0,21.0],[8.24264,19.24264],[10.0,15.0],[10.0,5.0],[9.41421,3.58579],[8.0,3.0]],"i":[[0.0,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[-0.37493,-0.37493],[-0.53023,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[-0.18746,-0.18746],[-0.26511,0.0],[-1.12479,1.12479],[0.0,1.59069],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0]],"o":[[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[0.37493,0.37493],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[-0.26511,0.0],[-0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[0.18746,0.18746],[1.59069,0.0],[1.12479,-1.12479],[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"refresh-cw","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[360],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,12.0],[5.63604,5.63604],[12.0,3.0],[18.74,5.74],[21.0,8.0]],"i":[[0.0,0.0],[-1.68718,1.68718],[-2.38603,0.0],[-1.80835,-1.74817],[0.0,0.0]],"o":[[-0.0,-2.38603],[1.68718,-1.68718],[2.51518,0.00946],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,3.0],[21.0,8.0],[16.0,8.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,12.0],[18.36396,18.36396],[12.0,21.0],[5.26,18.26],[3.0,16.0]],"i":[[0.0,0.0],[1.68718,-1.68718],[2.38603,0.0],[1.80835,1.74817],[0.0,0.0]],"o":[[0.0,2.38603],[-1.68718,1.68718],[-2.51518,-0.00946],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,16.0],[3.0,16.0],[3.0,21.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"scissors","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,6.0],[8.12132,8.12132],[6.0,9.0],[3.87868,8.12132],[3.0,6.0],[3.87868,3.87868],[6.0,3.0],[8.12132,3.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[16],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.12,8.12],[12.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[16],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[20.0,4.0],[8.12,15.88]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-16],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,18.0],[8.12132,20.12132],[6.0,21.0],[3.87868,20.12132],[3.0,18.0],[3.87868,15.87868],[6.0,15.0],[8.12132,15.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-16],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.8,14.8],[20.0,20.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[16],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"search","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,21.0],[16.66,16.66]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,11.0],[16.65685,16.65685],[11.0,19.0],[5.34315,16.65685],[3.0,11.0],[5.34315,5.34315],[11.0,3.0],[16.65685,5.34315]],"i":[[0.0,-2.12092],[1.49972,-1.49972],[2.12092,0.0],[1.49972,1.49972],[0.0,2.12092],[-1.49972,1.49972],[-2.12092,0.0],[-1.49972,-1.49972]],"o":[[0.0,2.12092],[-1.49972,1.49972],[-2.12092,0.0],[-1.49972,-1.49972],[-0.0,-2.12092],[1.49972,-1.49972],[2.12092,-0.0],[1.49972,1.49972]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[11,11]},"p":{"a":1,"k":[{"t":0,"s":[11,11],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[9.2,11],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[11,11],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[110.0,110.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[96.5,96.5,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.2,101.2,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[10],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-6.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"settings","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[45],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.671,4.136],[10.4261,2.62628],[12.0005,2.01743],[13.5749,2.62628],[14.33,4.136],[14.91364,5.48635],[16.18784,6.22154],[17.649,6.051],[19.331,5.95349],[20.64252,7.0111],[20.90364,8.67557],[19.979,10.084],[19.10158,11.26419],[19.10158,12.73481],[19.979,13.915],[20.90364,15.32343],[20.64252,16.9879],[19.331,18.04551],[17.649,17.948],[16.18784,17.77746],[14.91364,18.51265],[14.33,19.863],[13.5749,21.37272],[12.0005,21.98157],[10.4261,21.37272],[9.671,19.863],[9.08728,18.51216],[7.81258,17.7769],[6.351,17.948],[4.669,18.04551],[3.35748,16.9879],[3.09636,15.32343],[4.021,13.915],[4.89842,12.73481],[4.89842,11.26419],[4.021,10.084],[3.0979,8.67598],[3.35898,7.01271],[4.66909,5.95524],[6.35,6.051],[7.81116,6.22154],[9.08536,5.48635],[9.669,4.136]],"i":[[0.0,0.0],[-0.43064,0.39165],[-0.5821,-0.0],[-0.43064,-0.39165],[-0.05508,-0.57949],[-0.3346,-0.37561],[-0.49264,-0.10169],[-0.45598,0.21241],[-0.55316,-0.17741],[-0.2906,-0.50301],[0.12261,-0.56783],[0.47226,-0.33828],[0.15802,-0.47739],[-0.15802,-0.47739],[-0.41164,-0.28883],[-0.12261,-0.56783],[0.2906,-0.50301],[0.55316,-0.17741],[0.52895,0.24015],[0.49264,-0.10169],[0.3346,-0.37561],[0.04432,-0.50107],[0.43064,-0.39165],[0.5821,0.0],[0.43064,0.39165],[0.05508,0.57949],[0.33472,0.37573],[0.49283,0.10161],[0.45604,-0.21269],[0.55316,0.17741],[0.2906,0.50301],[-0.12261,0.56783],[-0.47226,0.33828],[-0.15802,0.47739],[0.15802,0.47739],[0.41164,0.28883],[0.12231,0.56745],[-0.29029,0.50268],[-0.55261,0.17768],[-0.52886,-0.23929],[-0.49264,0.10169],[-0.3346,0.37561],[-0.04432,0.50107]],"o":[[0.05508,-0.57949],[0.43064,-0.39165],[0.5821,0.0],[0.43064,0.39165],[0.04432,0.50107],[0.3346,0.37561],[0.49264,0.10169],[0.52895,-0.24015],[0.55316,0.17741],[0.2906,0.50301],[-0.12261,0.56783],[-0.41164,0.28883],[-0.15802,0.47739],[0.15802,0.47739],[0.47226,0.33828],[0.12261,0.56783],[-0.2906,0.50301],[-0.55316,0.17741],[-0.45598,-0.21241],[-0.49264,0.10169],[-0.3346,0.37561],[-0.05508,0.57949],[-0.43064,0.39165],[-0.5821,0.0],[-0.43064,-0.39165],[-0.04423,-0.50125],[-0.33472,-0.37573],[-0.49283,-0.10161],[-0.52895,0.24015],[-0.55316,-0.17741],[-0.2906,-0.50301],[0.12261,-0.56783],[0.41164,-0.28883],[0.15802,-0.47739],[-0.15802,-0.47739],[-0.4716,-0.33845],[-0.12231,-0.56745],[0.29029,-0.50268],[0.55261,-0.17768],[0.45598,0.21241],[0.49264,-0.10169],[0.3346,-0.37561],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,12.0],[14.12132,14.12132],[12.0,15.0],[9.87868,14.12132],[9.0,12.0],[9.87868,9.87868],[12.0,9.0],[14.12132,9.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"slash","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,2.0],[2.0,22.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"sparkles","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[11.017,2.814],[11.3611,2.22832],[12.0,1.99761],[12.6389,2.22832],[12.983,2.814],[14.034,8.372],[14.58503,9.41497],[15.628,9.966],[21.186,11.017],[21.77168,11.3611],[22.00239,12.0],[21.77168,12.6389],[21.186,12.983],[15.628,14.034],[14.58503,14.58503],[14.034,15.628],[12.983,21.186],[12.6389,21.77168],[12.0,22.00239],[11.3611,21.77168],[11.017,21.186],[9.966,15.628],[9.41497,14.58503],[8.372,14.034],[2.814,12.983],[2.22832,12.6389],[1.99761,12.0],[2.22832,11.3611],[2.814,11.017],[8.372,9.966],[9.41497,9.41497],[9.966,8.372]],"i":[[0.0,0.0],[-0.17948,0.14906],[-0.23331,0.0],[-0.17948,-0.14906],[-0.04284,-0.22934],[0.0,0.0],[-0.28432,-0.28432],[-0.3951,-0.07464],[0.0,0.0],[-0.14906,-0.17948],[0.0,-0.23331],[0.14906,-0.17948],[0.22934,-0.04284],[0.0,0.0],[0.28432,-0.28432],[0.07464,-0.3951],[0.0,0.0],[0.17948,-0.14906],[0.23331,0.0],[0.17948,0.14906],[0.04284,0.22934],[0.0,0.0],[0.28432,0.28432],[0.3951,0.07464],[0.0,0.0],[0.14906,0.17948],[0.0,0.23331],[-0.14906,0.17948],[-0.22934,0.04284],[0.0,0.0],[-0.28432,0.28432],[-0.07464,0.3951]],"o":[[0.04284,-0.22934],[0.17948,-0.14906],[0.23331,0.0],[0.17948,0.14906],[0.0,0.0],[0.07464,0.3951],[0.28432,0.28432],[0.0,0.0],[0.22934,0.04284],[0.14906,0.17948],[0.0,0.23331],[-0.14906,0.17948],[0.0,0.0],[-0.3951,0.07464],[-0.28432,0.28432],[0.0,0.0],[-0.04284,0.22934],[-0.17948,0.14906],[-0.23331,0.0],[-0.17948,-0.14906],[0.0,0.0],[-0.07464,-0.3951],[-0.28432,-0.28432],[0.0,0.0],[-0.22934,-0.04284],[-0.14906,-0.17948],[0.0,-0.23331],[0.14906,-0.17948],[0.0,0.0],[0.3951,-0.07464],[0.28432,-0.28432],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":2,"s":[62.5,62.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":5,"s":[115.0,115.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[20.0,2.0],[20.0,6.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,4.0],[18.0,4.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[20,4]},"p":{"a":0,"k":[20,4]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":4,"s":[62.5,62.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":7,"s":[115.0,115.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,20.0],[5.41421,21.41421],[4.0,22.0],[2.58579,21.41421],[2.0,20.0],[2.58579,18.58579],[4.0,18.0],[5.41421,18.58579]],"i":[[0.0,-0.53023],[0.37493,-0.37493],[0.53023,0.0],[0.37493,0.37493],[0.0,0.53023],[-0.37493,0.37493],[-0.53023,0.0],[-0.37493,-0.37493]],"o":[[0.0,0.53023],[-0.37493,0.37493],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.37493,-0.37493],[0.53023,0.0],[0.37493,0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[4,20]},"p":{"a":0,"k":[4,20]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[62.5,62.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[115.0,115.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"square","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[112.0,112.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[95.8,95.8,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.44,101.44,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[0.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"star","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[11.525,2.295],[11.80815,2.03605],[12.19185,2.03605],[12.475,2.295],[14.785,6.974],[15.43962,7.75045],[16.38,8.134],[21.546,8.89],[21.88036,9.0791],[21.99916,9.4444],[21.84,9.794],[18.104,13.432],[17.56683,14.29563],[17.493,15.31],[18.375,20.45],[18.29924,20.82824],[17.98713,21.05494],[17.604,21.01],[12.986,18.582],[11.9995,18.33875],[11.013,18.582],[6.396,21.01],[6.01336,21.0542],[5.70185,20.82764],[5.626,20.45],[6.507,15.311],[6.43354,14.29605],[5.896,13.432],[2.16,9.795],[1.9991,9.44472],[2.11808,9.07807],[2.454,8.889],[7.619,8.134],[8.56058,7.75099],[9.216,6.974]],"i":[[0.0,0.0],[-0.12337,0.04791],[-0.12337,-0.04791],[-0.05871,-0.11862],[0.0,0.0],[-0.2778,-0.20203],[-0.33985,-0.04988],[0.0,0.0],[-0.08386,-0.10259],[0.00747,-0.1323],[0.09487,-0.0925],[0.0,0.0],[0.10643,-0.32713],[-0.05794,-0.33909],[0.0,0.0],[0.07185,-0.11205],[0.12878,-0.03367],[0.11749,0.06256],[0.0,0.0],[0.34366,0.0],[0.30427,-0.15977],[0.0,0.0],[0.12854,0.03377],[0.07173,0.11188],[-0.02297,0.1309],[0.0,0.0],[0.10644,0.32733],[0.2466,0.24014],[0.0,0.0],[0.00776,0.13278],[-0.08425,0.10292],[-0.13169,0.01862],[0.0,0.0],[-0.27818,0.20206],[-0.15229,0.30825]],"o":[[0.05871,-0.11862],[0.12337,-0.04791],[0.12337,0.04791],[0.0,0.0],[0.15217,0.30795],[0.2778,0.20203],[0.0,0.0],[0.13114,0.019],[0.08386,0.10259],[-0.00747,0.1323],[0.0,0.0],[-0.24637,0.24009],[-0.10643,0.32713],[0.0,0.0],[0.02315,0.13108],[-0.07185,0.11205],[-0.12878,0.03367],[0.0,0.0],[-0.30427,-0.15977],[-0.34366,0.0],[0.0,0.0],[-0.11745,0.06218],[-0.12854,-0.03377],[-0.07173,-0.11188],[0.0,0.0],[0.05819,-0.33925],[-0.10644,-0.32733],[0.0,0.0],[-0.09567,-0.0924],[-0.00776,-0.13278],[0.08425,-0.10292],[0.0,0.0],[0.34024,-0.0495],[0.27818,-0.20206],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[11.525,2.295],[11.80815,2.03605],[12.19185,2.03605],[12.475,2.295],[14.785,6.974],[15.43962,7.75045],[16.38,8.134],[21.546,8.89],[21.88036,9.0791],[21.99916,9.4444],[21.84,9.794],[18.104,13.432],[17.56683,14.29563],[17.493,15.31],[18.375,20.45],[18.29924,20.82824],[17.98713,21.05494],[17.604,21.01],[12.986,18.582],[11.9995,18.33875],[11.013,18.582],[6.396,21.01],[6.01336,21.0542],[5.70185,20.82764],[5.626,20.45],[6.507,15.311],[6.43354,14.29605],[5.896,13.432],[2.16,9.795],[1.9991,9.44472],[2.11808,9.07807],[2.454,8.889],[7.619,8.134],[8.56058,7.75099],[9.216,6.974]],"i":[[0.0,0.0],[-0.12337,0.04791],[-0.12337,-0.04791],[-0.05871,-0.11862],[0.0,0.0],[-0.2778,-0.20203],[-0.33985,-0.04988],[0.0,0.0],[-0.08386,-0.10259],[0.00747,-0.1323],[0.09487,-0.0925],[0.0,0.0],[0.10643,-0.32713],[-0.05794,-0.33909],[0.0,0.0],[0.07185,-0.11205],[0.12878,-0.03367],[0.11749,0.06256],[0.0,0.0],[0.34366,0.0],[0.30427,-0.15977],[0.0,0.0],[0.12854,0.03377],[0.07173,0.11188],[-0.02297,0.1309],[0.0,0.0],[0.10644,0.32733],[0.2466,0.24014],[0.0,0.0],[0.00776,0.13278],[-0.08425,0.10292],[-0.13169,0.01862],[0.0,0.0],[-0.27818,0.20206],[-0.15229,0.30825]],"o":[[0.05871,-0.11862],[0.12337,-0.04791],[0.12337,0.04791],[0.0,0.0],[0.15217,0.30795],[0.2778,0.20203],[0.0,0.0],[0.13114,0.019],[0.08386,0.10259],[-0.00747,0.1323],[0.0,0.0],[-0.24637,0.24009],[-0.10643,0.32713],[0.0,0.0],[0.02315,0.13108],[-0.07185,0.11205],[-0.12878,0.03367],[0.0,0.0],[-0.30427,-0.15977],[-0.34366,0.0],[0.0,0.0],[-0.11745,0.06218],[-0.12854,-0.03377],[-0.07173,-0.11188],[0.0,0.0],[0.05819,-0.33925],[-0.10644,-0.32733],[0.0,0.0],[-0.09567,-0.0924],[-0.00776,-0.13278],[0.08425,-0.10292],[0.0,0.0],[0.34024,-0.0495],[0.27818,-0.20206],[0.0,0.0]],"c":true}}},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":4,"s":[65],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":1},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[0.0,0.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[115.0,115.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"strikethrough","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,4.0],[9.0,4.0],[7.21521,4.58751],[6.12996,6.12142],[6.17,8.0]],"i":[[0.0,0.0],[0.0,0.0],[0.51659,-0.38184],[0.18813,-0.61422],[-0.21413,-0.60565]],"o":[[0.0,0.0],[-0.64239,-0.00034],[-0.51659,0.38184],[-0.18813,0.61422],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,12.0],[16.82843,13.17157],[18.0,16.0],[16.82843,18.82843],[14.0,20.0],[6.0,20.0]],"i":[[0.0,0.0],[-0.74986,-0.74986],[0.0,-1.06046],[0.74986,-0.74986],[1.06046,0.0],[0.0,0.0]],"o":[[1.06046,0.0],[0.74986,0.74986],[0.0,1.06046],[-0.74986,0.74986],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,12.0],[20.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"tag","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.586,2.586],[11.172,2.0],[4.0,2.0],[2.58579,2.58579],[2.0,4.0],[2.0,11.172],[2.586,12.586],[11.29,21.29],[13.0,21.99514],[14.71,21.29],[21.29,14.71],[21.99514,13.0],[21.29,11.29]],"i":[[0.0,0.0],[0.53019,0.00011],[0.0,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[-0.37495,-0.37484],[0.0,0.0],[-0.64051,0.0],[-0.45434,0.45147],[0.0,0.0],[0.0,0.64051],[0.45147,0.45434]],"o":[[-0.37484,-0.37495],[0.0,0.0],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.00011,0.53019],[0.0,0.0],[0.45434,0.45147],[0.64051,0.0],[0.0,0.0],[0.45147,-0.45434],[0.0,-0.64051],[0.0,0.0]],"c":true}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,7.5],[7.85355,7.85355],[7.5,8.0],[7.14645,7.85355],[7.0,7.5],[7.14645,7.14645],[7.5,7.0],[7.85355,7.14645]],"i":[[0.0,-0.13256],[0.09373,-0.09373],[0.13256,0.0],[0.09373,0.09373],[0.0,0.13256],[-0.09373,0.09373],[-0.13256,0.0],[-0.09373,-0.09373]],"o":[[0.0,0.13256],[-0.09373,0.09373],[-0.13256,0.0],[-0.09373,-0.09373],[0.0,-0.13256],[0.09373,-0.09373],[0.13256,0.0],[0.09373,0.09373]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"trash-2","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,6.0],[21.0,6.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[5,6]},"p":{"a":1,"k":[{"t":0,"s":[5,6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[5,3.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[5,6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[-10],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[6.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,6.0],[19.0,20.0],[18.41421,21.41421],[17.0,22.0],[7.0,22.0],[5.58579,21.41421],[5.0,20.0],[5.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,6.0],[8.0,4.0],[8.58579,2.58579],[10.0,2.0],[14.0,2.0],[15.41421,2.58579],[16.0,4.0],[16.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[5,6]},"p":{"a":1,"k":[{"t":0,"s":[5,6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[5,3.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[5,6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[-10],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[6.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[10.0,11.0],[10.0,17.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,11.0],[14.0,17.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"triangle-alert","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[9],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-5.3999999999999995],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.73,18.0],[13.73,4.0],[12.67905,3.10855],[11.30095,3.10855],[10.25,4.0],[2.25,18.0],[2.01343,19.35322],[2.70562,20.53983],[4.0,21.0],[20.0,21.0],[21.28457,20.53121],[21.96768,19.34662]],"i":[[0.23493,0.40691],[0.0,0.0],[0.44475,0.16322],[0.44475,-0.16322],[0.23359,-0.41217],[0.0,0.0],[-0.08337,-0.46475],[-0.36351,-0.30133],[-0.47214,0.00425],[0.0,0.0],[-0.35973,0.30227],[-0.08143,0.46275]],"o":[[0.0,0.0],[-0.23359,-0.41217],[-0.44475,-0.16322],[-0.44475,0.16322],[0.0,0.0],[-0.2361,0.40889],[0.08337,0.46475],[0.36351,0.30133],[0.0,0.0],[0.46986,-0.00048],[0.35973,-0.30227],[0.08143,-0.46275]],"c":true}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,9.0],[12.0,13.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,17.0],[12.01,17.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"type","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,4.0],[12.0,20.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,7.0],[4.0,5.0],[4.29289,4.29289],[5.0,4.0],[19.0,4.0],[19.70711,4.29289],[20.0,5.0],[20.0,7.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.18746,0.18746],[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746],[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,20.0],[15.0,20.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"undo-2","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-2,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,14.0],[4.0,9.0],[9.0,4.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,9.0],[14.5,9.0],[18.38909,10.61091],[20.0,14.5],[18.38909,18.38909],[14.5,20.0],[11.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[-1.03105,-1.03105],[0.0,-1.45813],[1.03105,-1.03105],[1.45813,0.0],[0.0,0.0]],"o":[[0.0,0.0],[1.45813,0.0],[1.03105,1.03105],[0.0,1.45813],[-1.03105,1.03105],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"upload","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,3.0],[12.0,15.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[17.0,8.0],[12.0,3.0],[7.0,8.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,15.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,15.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"x","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":8,"s":[50],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":14,"s":[-7],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":20,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,6.0],[6.0,18.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,6.0],[18.0,18.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"zap","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[112.0,112.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[95.8,95.8,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.44,101.44,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-4.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.914,4.0],[15.91644,3.00861],[15.29993,2.23224],[14.33377,2.01001],[13.44,2.439],[4.44,11.439],[4.02923,12.20693],[4.11435,13.07366],[4.66667,13.747],[5.5,14.0],[9.502,14.0],[9.79886,14.09813],[9.97939,14.35341],[9.973,14.666],[8.086,20.0],[8.08368,20.99172],[8.70067,21.76814],[9.66729,21.98987],[10.561,21.56],[19.561,12.56],[19.99968,11.49948],[19.56027,10.43927],[18.5,10.0],[14.503,10.0],[14.20523,9.90219],[14.02418,9.64635],[14.031,9.333]],"i":[[0.0,0.0],[0.11155,0.32112],[0.2875,0.1814],[0.33786,-0.03756],[0.24064,-0.24011],[0.0,0.0],[0.05796,-0.29093],[-0.11345,-0.2741],[-0.24662,-0.16487],[-0.29665,-6e-05],[0.0,0.0],[-0.0859,-0.06359],[-0.03134,-0.10218],[0.03548,-0.10082],[0.0,0.0],[-0.11166,-0.32121],[-0.28769,-0.18133],[-0.33796,0.03781],[-0.2405,0.24042],[0.0,0.0],[0.00014,0.39753],[0.28111,0.28108],[0.39753,8e-05],[0.0,0.0],[0.08619,0.06366],[0.03136,0.10246],[-0.03579,0.101]],"o":[[0.11313,-0.32057],[-0.11155,-0.32112],[-0.2875,-0.1814],[-0.33786,0.03756],[0.0,0.0],[-0.20983,0.2097],[-0.05796,0.29093],[0.11345,0.2741],[0.24662,0.16487],[0.0,0.0],[0.10688,0.00014],[0.0859,0.06359],[0.03134,0.10218],[0.0,0.0],[-0.11317,0.32068],[0.11166,0.32121],[0.28769,0.18133],[0.33796,-0.03781],[0.0,0.0],[0.28092,-0.28127],[-0.00014,-0.39753],[-0.28111,-0.28108],[0.0,0.0],[-0.10716,0.00015],[-0.08619,-0.06366],[-0.03136,-0.10246],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
|
||||
@@ -0,0 +1,33 @@
|
||||
//! Windows only: embed the app icon and version info (VERSIONINFO) into `papercraft.exe`, so it
|
||||
//! shows in Explorer, the taskbar, the Start menu and Alt-Tab.
|
||||
//!
|
||||
//! On every other target this does nothing. A missing resource compiler is a warning, so a
|
||||
//! cross-compile from macOS or Linux still links, unless `PAPERCRAFT_REQUIRE_WINRES=1` turns it
|
||||
//! into an error (for release builds).
|
||||
|
||||
fn main() {
|
||||
println!("cargo:rerun-if-changed=build.rs");
|
||||
println!("cargo:rerun-if-changed=assets/app-icon/papercraft.ico");
|
||||
println!("cargo:rerun-if-env-changed=PAPERCRAFT_REQUIRE_WINRES");
|
||||
if std::env::var("CARGO_CFG_TARGET_OS").as_deref() != Ok("windows") {
|
||||
return;
|
||||
}
|
||||
let mut res = winresource::WindowsResource::new();
|
||||
res.set_icon("assets/app-icon/papercraft.ico")
|
||||
.set("ProductName", "PaperCraft")
|
||||
.set("FileDescription", "PaperCraft infinite canvas")
|
||||
.set("CompanyName", "PaperCraft Authors")
|
||||
.set(
|
||||
"LegalCopyright",
|
||||
"Copyright (c) the PaperCraft authors. MIT OR Apache-2.0.",
|
||||
)
|
||||
.set("OriginalFilename", "papercraft.exe")
|
||||
.set("InternalName", "papercraft");
|
||||
if let Err(e) = res.compile() {
|
||||
if std::env::var_os("PAPERCRAFT_REQUIRE_WINRES").is_some() {
|
||||
eprintln!("embedding Windows resources failed: {e}");
|
||||
std::process::exit(1);
|
||||
}
|
||||
println!("cargo:warning=papercraft.exe built without icon/version resources: {e}");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
# Browser build + relay in one image: `papercraft-relay --static` serves web/ and the agent relay.
|
||||
# craft-libs is a private Gitea dependency, so vendor on the host (authenticated) and pass it in:
|
||||
# cargo vendor --locked /path/vendor/crates >/dev/null
|
||||
# docker build -f deploy/Dockerfile --build-context vendor=/path/vendor -t localhost:32000/papercraft-web:<tag> .
|
||||
FROM rust:slim AS build
|
||||
# Must match the wasm-bindgen crate in Cargo.lock.
|
||||
ARG WASM_BINDGEN=0.2.129
|
||||
RUN rustup target add wasm32-unknown-unknown \
|
||||
&& apt-get update && apt-get install -y --no-install-recommends binaryen pkg-config libssl-dev \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& cargo install wasm-bindgen-cli --version ${WASM_BINDGEN} --locked
|
||||
COPY --from=vendor crates /vendor
|
||||
RUN printf '%s\n' \
|
||||
'[source.crates-io]' 'replace-with = "vendored-sources"' \
|
||||
'[source."git+https://git.marcospaulo.dev.br/masi/craft-libs?rev=22544b6d619d4f16779b8bdfa3f0b642a86fc065"]' \
|
||||
'git = "https://git.marcospaulo.dev.br/masi/craft-libs"' \
|
||||
'rev = "22544b6d619d4f16779b8bdfa3f0b642a86fc065"' 'replace-with = "vendored-sources"' \
|
||||
'[source.vendored-sources]' 'directory = "/vendor"' > "$CARGO_HOME/config.toml"
|
||||
WORKDIR /src
|
||||
COPY . .
|
||||
RUN sh web/build.sh && cargo build --release --locked --bin papercraft-relay
|
||||
|
||||
FROM debian:stable-slim
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends libssl3 ca-certificates \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& useradd --system --uid 10001 papercraft
|
||||
COPY --from=build /src/target/release/papercraft-relay /usr/local/bin/papercraft-relay
|
||||
COPY --from=build /src/web/index.html /srv/web/index.html
|
||||
COPY --from=build /src/web/pkg /srv/web/pkg
|
||||
USER 10001
|
||||
EXPOSE 8787
|
||||
ENTRYPOINT ["papercraft-relay", "--static", "/srv/web", "--data", "/data"]
|
||||
@@ -0,0 +1,86 @@
|
||||
# Shared projects live in /data (`--data`) on the HDD: PV /srv/hdd/papercraft, class hdd-storage, Retain (same pattern as actual, kavita, ...).
|
||||
# --library: every project in /data is listed at /library and synced to every device that opens the site, with no link
|
||||
# needed. There are no accounts, so the Tailnet-only ingress is the whole access boundary; never expose this publicly.
|
||||
# Tailnet access (DNS, TLS, ingress) is added with `expose papercraft/papercraft papercraft`; see deploy/README.md.
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: papercraft
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: pv-hdd-papercraft
|
||||
spec:
|
||||
capacity: {storage: 5Gi}
|
||||
accessModes: [ReadWriteOnce]
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
storageClassName: hdd-storage
|
||||
volumeMode: Filesystem
|
||||
local: {path: /srv/hdd/papercraft}
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- {key: kubernetes.io/hostname, operator: In, values: [kubernets]}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: papercraft-data
|
||||
namespace: papercraft
|
||||
spec:
|
||||
accessModes: [ReadWriteOnce]
|
||||
storageClassName: hdd-storage
|
||||
volumeName: pv-hdd-papercraft
|
||||
resources:
|
||||
requests: {storage: 5Gi}
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: papercraft
|
||||
namespace: papercraft
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels: {app: papercraft}
|
||||
template:
|
||||
metadata:
|
||||
labels: {app: papercraft}
|
||||
spec:
|
||||
securityContext: {fsGroup: 10001}
|
||||
volumes:
|
||||
- name: data
|
||||
persistentVolumeClaim: {claimName: papercraft-data}
|
||||
containers:
|
||||
- name: web
|
||||
image: localhost:32000/papercraft-web:0.2.0-ea6f1b3
|
||||
args: ["--library", "--allow-origin", "https://papercraft.marcospaulo.dev.br"]
|
||||
volumeMounts:
|
||||
- {name: data, mountPath: /data}
|
||||
ports:
|
||||
- containerPort: 8787
|
||||
readinessProbe:
|
||||
httpGet: {path: /index.html, port: 8787}
|
||||
livenessProbe:
|
||||
httpGet: {path: /index.html, port: 8787}
|
||||
initialDelaySeconds: 10
|
||||
resources:
|
||||
requests: {cpu: 20m, memory: 32Mi}
|
||||
limits: {cpu: 500m, memory: 256Mi}
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
readOnlyRootFilesystem: true
|
||||
capabilities: {drop: [ALL]}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: papercraft
|
||||
namespace: papercraft
|
||||
spec:
|
||||
selector: {app: papercraft}
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 8787
|
||||
@@ -0,0 +1,128 @@
|
||||
# Driving PaperCraft with agents
|
||||
|
||||
PaperCraft exposes one set of 61 tools three ways. They all run the same code inside the app, so an agent sees what you see and every call is one undo step.
|
||||
|
||||
| Way | Use it when | Needs the app running |
|
||||
|---|---|---|
|
||||
| MCP over HTTP, `http://127.0.0.1:29980/mcp` | the agent client speaks MCP (Claude Code, Codex, pi) | yes |
|
||||
| MCP over stdio, `papercraft-mcp` | the client only starts stdio servers | for calls; `tools/list` works offline |
|
||||
| Shell, `papercraft-cli` | the agent has a terminal and you want no tool schemas in its context | for `call`; `list`, `schema` and `icons` work offline |
|
||||
|
||||
## Install
|
||||
|
||||
1. Get the app and the tools: the DMG and the `papercraft-cli` zip from the [releases](https://git.marcospaulo.dev.br/masi/papercraft/releases), or `cargo build --release` (binaries `papercraft`, `papercraft-cli`, `papercraft-mcp` in `target/release/`).
|
||||
2. Put `papercraft-cli` and `papercraft-mcp` on your `PATH` (for example in `~/.local/bin`).
|
||||
3. Start PaperCraft and open or create a project. The server starts with the app. `PAPERCRAFT_MCP_PORT` changes the port (the CLI and the bridge read it too); `PAPERCRAFT_MCP=0` turns the server off.
|
||||
|
||||
Check the connection:
|
||||
|
||||
```sh
|
||||
papercraft-cli call get_basic_info # project, page, artboards
|
||||
```
|
||||
|
||||
Exit status 1 with "isn't running" means the app is closed or the port differs.
|
||||
|
||||
## Register with an agent
|
||||
|
||||
Claude Code:
|
||||
|
||||
```sh
|
||||
claude mcp add --transport http --scope user papercraft http://127.0.0.1:29980/mcp
|
||||
# or through the stdio bridge
|
||||
claude mcp add --scope user papercraft -- /path/to/papercraft-mcp
|
||||
```
|
||||
|
||||
Codex:
|
||||
|
||||
```sh
|
||||
codex mcp add papercraft --url http://127.0.0.1:29980/mcp
|
||||
codex mcp add papercraft -- /path/to/papercraft-mcp # stdio alternative
|
||||
```
|
||||
|
||||
pi (and other agents without built-in MCP): use the shell. Tell the agent to run `papercraft-cli list`, then `papercraft-cli schema <tool>` for the tools it needs, and install the skills below.
|
||||
|
||||
Any other MCP client: point it at the HTTP URL, or run `papercraft-mcp` as a stdio server.
|
||||
|
||||
## Install the skills
|
||||
|
||||
Two agent skills in [`skills/`](../skills) teach the workflow and the design rules:
|
||||
|
||||
* `papercraft`: how to drive the tools (connection check, build, screenshot, lint, fix loop, naming, layout recipes, known limits).
|
||||
* `papercraft-design`: how to make the result look good (a direction first, 4/8pt spacing, a type scale, contrast, states, components and tokens).
|
||||
|
||||
Link them where your agent looks for skills, for example `ln -s "$PWD/skills/papercraft" ~/.agents/skills/papercraft` (same for `papercraft-design`).
|
||||
|
||||
## First prompts
|
||||
|
||||
* "In PaperCraft, create a 390×844 mobile artboard and design a sign-in screen. Use variables for every color, build the button as a component, and run `lint_design` before you finish."
|
||||
* "Add a dark mode to this project: define Light and Dark values for every variable and switch with `set_variable_mode`."
|
||||
* "Draw a flowchart of our deploy process on a new page, hand-drawn style."
|
||||
* "Lint this page and fix every warning."
|
||||
|
||||
## A session by hand
|
||||
|
||||
```sh
|
||||
export PATH="$PWD/target/release:$PATH"
|
||||
papercraft-cli call get_basic_info
|
||||
papercraft-cli call set_variables '{"variables":{"bg":"#1e1e2e","text":"#cdd6f4","accent":"#cba6f7"}}'
|
||||
papercraft-cli call create_artboard '{"name":"Hello","styles":{"width":"390px","height":"844px","backgroundColor":"var(--bg)","padding":"24px"}}'
|
||||
# -> {"id":"abc123:1",...}
|
||||
echo '{"targetNodeId":"abc123:1","mode":"insert-children","html":"<div layer-name=\"Title\" style=\"font-size:32px;font-weight:700;color:var(--text)\">Hello</div>"}' | papercraft-cli call write_html -
|
||||
papercraft-cli call lint_design '{"nodeId":"abc123:1"}'
|
||||
papercraft-cli call get_screenshot '{"nodeId":"abc123:1"}' --out hello.png
|
||||
papercraft-cli call finish_working_on_nodes '{"nodeIds":["abc123:1"]}'
|
||||
```
|
||||
|
||||
Pass JSON inline, or `-` to read it from stdin (best for HTML, which is full of quotes; `jq -Rs` can wrap a file into the right JSON). Text results go to stdout. Images are saved to `--out` (default `<tool>.png`) and the path is printed.
|
||||
|
||||
## Without the app
|
||||
|
||||
`papercraft-cli` also works with PaperCraft closed (a server, CI, a headless box). When nothing answers on the port, or with `--offline`, tools run inside the CLI on the project store (`$PAPERCRAFT_HOME`, else the default folder) and every editing call is saved. Projects made this way open normally in the app.
|
||||
|
||||
```sh
|
||||
papercraft-cli call create_file '{"name":"Demo"}' # -> fileId
|
||||
papercraft-cli call create_artboard '{"name":"Card"}' --project Demo
|
||||
papercraft-cli call get_screenshot '{"nodeId":"abc123:1"}' --project Demo -o card.png
|
||||
```
|
||||
|
||||
`--project <name|id|path>` opens that project first; without it the most recently modified one is used. With the app open on a project, plain `call` goes to the app, and `--offline` on that same project is refused ("PaperCraft has this project open") so two writers never share a folder. Screenshots need a GPU adapter; with none, the software adapter is tried, and if that fails the image tools return an error while all other tools work.
|
||||
|
||||
### Shell and scripts
|
||||
|
||||
`papercraft-cli shell [--project X] [--offline]` keeps one session open (offline, one in-process project; otherwise the app). A line is `<tool> <json>` (JSON may span lines until its braces close) or a command: `:help :tools :schema <tool> :open <project> :pages :page <name|id> :shot [nodeId] [file] :undo :redo :save :watch on|off :quit`. `:watch on` renders the artboard last edited to `preview.png` after each editing call, shown inline on iTerm2, WezTerm and kitty. Input is plain stdin (no line editing or history; use `rlwrap` for that). Piped input prints no prompt and exits 1 if any line failed, listing the line numbers on stderr.
|
||||
|
||||
```sh
|
||||
papercraft-cli shell --offline --project Demo <<'EOF'
|
||||
# build a card
|
||||
create_artboard {"name":"Card","styles":{"width":"320px","height":"180px","backgroundColor":"#1e1e2e"}}
|
||||
write_html {
|
||||
"targetNodeId": "abc123:1",
|
||||
"mode": "insert-children",
|
||||
"html": "<div style='font-size:28px;color:#cdd6f4'>Hello</div>"
|
||||
}
|
||||
:shot abc123:1 card.png
|
||||
EOF
|
||||
```
|
||||
|
||||
## Design-system tools
|
||||
|
||||
* Variables: `get_variables` and `set_variables` take collections, groups (`color/brand/primary`), types (`color`, `number`, `string`, `boolean`), `mode`, `alias`, `description` and `hidden`; the old `{"name":"#hex"}` call still works and lands in the first collection. `create_collection` makes a collection with modes, `delete_variables` removes by name (refuses aliased ones unless `force`), `bind_variable` binds or detaches a field of layers (`stroke`, `text-color`, `width`, `height`, `gap`, `padding`, `radius`, `font-size`, `line-height`, `opacity`, `visible`).
|
||||
* Components: `get_components` lists mains of every page and enabled library with a `componentKey`; `create_instance` and `swap_instance` accept a main from any page or library (`componentId` or `componentKey`).
|
||||
* Libraries: `publish_library`, `list_libraries`, `enable_library`, `update_library`, `disable_library`. They work offline too, on the project store.
|
||||
|
||||
## Safety
|
||||
|
||||
The server listens on loopback only, rejects requests that carry an `Origin` header (browsers) and foreign `Host` headers. Anything on your machine that can reach `127.0.0.1:29980` can edit the open project, so do not forward the port. Undo (⌘Z, or the `undo` tool) reverts any agent edit.
|
||||
|
||||
## Runs and review
|
||||
|
||||
Editing calls are grouped into an agent run. A run ends after 30 seconds without an editing call, when the project changes, or when `finish_working_on_nodes` is called. Before each page's first edit in a run, PaperCraft saves an auto-version named `Before agent run N`. Call `finish_working_on_nodes` at the end of your work so the run gets a useful title and ends right away.
|
||||
|
||||
The Agent view lists runs and lets you review changes, revert a whole run, undo one change, or accept all changes. Review also marks changes on the canvas; a toast offers Review and Revert when a run finishes. The command palette has `Review last agent run` and `Revert last agent run`. Run records live under `runs/` in the project folder; PaperCraft keeps the newest 50 runs.
|
||||
|
||||
## Reference
|
||||
|
||||
* [Tool reference](../skills/papercraft/references/tools.md), generated from `papercraft-cli schema`.
|
||||
* [Design systems](design-system.md): collections, variables and bindings, components, libraries, icons, lint.
|
||||
* [Design-system packages](design-system-packages.md): importing and exporting an OpenDesign package.
|
||||
* `papercraft-cli --help`-style usage: run `papercraft-cli` with no arguments.
|
||||
@@ -0,0 +1,143 @@
|
||||
# Design-system packages
|
||||
|
||||
PaperCraft can read and write **OpenDesign design-system packages**: a folder that holds a
|
||||
`manifest.json`, a `tokens.css` and (usually) a `DESIGN.md`. They are the exchange format for
|
||||
a design system — one design system in, the same design system out.
|
||||
|
||||
```text
|
||||
my-system/
|
||||
manifest.json what the package is
|
||||
tokens.css the colors, modes and tokens
|
||||
DESIGN.md the prose about the brand
|
||||
```
|
||||
|
||||
The two tools are `import_design_system` and `export_design_system`.
|
||||
|
||||
```sh
|
||||
papercraft-cli call import_design_system '{"path":"/path/to/my-system"}'
|
||||
papercraft-cli call export_design_system '{"path":"/path/to/my-system"}'
|
||||
```
|
||||
|
||||
## The format
|
||||
|
||||
### `manifest.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"schemaVersion": "od-design-system-project/v1",
|
||||
"id": "my-system",
|
||||
"name": "My System",
|
||||
"category": "product",
|
||||
"description": "A small system",
|
||||
"source": { "type": "github", "url": "https://example.com/system" },
|
||||
"files": { "design": "DESIGN.md", "tokens": "tokens.css" },
|
||||
"importMode": "hybrid"
|
||||
}
|
||||
```
|
||||
|
||||
| Key | Meaning |
|
||||
|---|---|
|
||||
| `schemaVersion` | `od-design-system-project/v1`. Another value is refused. |
|
||||
| `id` | The slug of the folder: lowercase letters, digits and dashes. |
|
||||
| `name`, `category`, `description` | What the system is. |
|
||||
| `source` | Where it came from: `bundled`, `local`, `github` or `shadcn`. |
|
||||
| `files` | The files of the package. `design` and `tokens` are required; `designTokens`, `tailwind` and `components` are optional. |
|
||||
| `assetsDir`, `previewDir`, `usage`, `componentsManifest`, `importMode`, `craft`, `fonts`, `preview`, `sourceFiles` | Optional extras; they are kept as they are. |
|
||||
|
||||
`importMode` is `normalized`, `hybrid` or `verbatim`.
|
||||
|
||||
### `tokens.css`
|
||||
|
||||
Plain CSS custom properties. The `:root` block holds the base values, every
|
||||
`[data-theme="name"]` block the values of one mode:
|
||||
|
||||
```css
|
||||
:root {
|
||||
--bg: #ffffff;
|
||||
--accent: #cba6f7;
|
||||
--spacing-md: 16px;
|
||||
}
|
||||
|
||||
[data-theme="Dark"] {
|
||||
--bg: #1e1e2e;
|
||||
--accent: #89b4fa;
|
||||
}
|
||||
```
|
||||
|
||||
### `DESIGN.md`
|
||||
|
||||
Prose about the brand. PaperCraft reads it (the import reports that a package has one) and
|
||||
writes a short summary of the variables, modes and tokens on export.
|
||||
|
||||
## What PaperCraft does with it
|
||||
|
||||
| Package | PaperCraft |
|
||||
|---|---|
|
||||
| a hex color in `:root` | a **variable** (`--bg`), the thing a fill follows |
|
||||
| any other value in `:root` | a **token** (`--spacing-md`), substituted into styles when they are written |
|
||||
| a hex color in `[data-theme="Dark"]` | the **mode** `Dark` |
|
||||
|
||||
The rules, in full:
|
||||
|
||||
* **Colors are hex only.** PaperCraft colors are `#rrggbb` / `#rrggbbaa`. A value PaperCraft
|
||||
cannot hold — an `oklch()`, an `rgb()`, a named color — is kept as a token with the value
|
||||
as it is, so nothing is lost.
|
||||
* **The import replaces** the variables, the modes and the tokens of the project, on every
|
||||
page, in one undo step (like `set_variables`). Undo brings the old ones back.
|
||||
* **The base theme stays live.** After an import no mode is active, so the `:root` values
|
||||
are the ones on the canvas. Pick another mode with `set_variable_mode`.
|
||||
* **Names are made CSS-safe**: letters, digits, `-` and `_`. Everything else becomes `-`, so
|
||||
`--Brand Color` is imported as `--Brand-Color`.
|
||||
* **A mode holds colors only.** A size inside a `[data-theme]` block cannot be stored per
|
||||
mode, so it becomes a plain token.
|
||||
* **A package is identified by its folder.** The `id` in the manifest must be the slug of the
|
||||
folder it lives in (`my-system`). The export writes the slug of the target folder as the
|
||||
id.
|
||||
|
||||
## The tools
|
||||
|
||||
### `import_design_system`
|
||||
|
||||
```sh
|
||||
papercraft-cli call import_design_system '{"path":"/path/to/my-system"}'
|
||||
```
|
||||
|
||||
| Argument | Type | Notes |
|
||||
|---|---|---|
|
||||
| `path` | string | The folder of the package. Required. |
|
||||
| `pageId` | string | Optional. The design system is project-wide, so it lands on every page. |
|
||||
|
||||
It answers with what came in:
|
||||
|
||||
```json
|
||||
{
|
||||
"package": { "id": "my-system", "name": "My System", "category": "product" },
|
||||
"variables": 2, "modes": 1, "tokens": 1,
|
||||
"pages": 3, "fillsUpdated": 4, "design": true
|
||||
}
|
||||
```
|
||||
|
||||
A malformed package is an error, never a crash: a broken `manifest.json`, a missing
|
||||
`tokens.css`, an id that is not a slug or a `schemaVersion` PaperCraft does not know all come
|
||||
back as a message.
|
||||
|
||||
### `export_design_system`
|
||||
|
||||
```sh
|
||||
papercraft-cli call export_design_system '{"path":"/path/to/my-system"}'
|
||||
```
|
||||
|
||||
| Argument | Type | Notes |
|
||||
|---|---|---|
|
||||
| `path` | string | The folder to write the package into. Created if it is not there. Required. |
|
||||
| `pageId` | string | Optional. The page whose design system is written. |
|
||||
|
||||
It writes `manifest.json`, `tokens.css` and `DESIGN.md` and answers with their paths. The
|
||||
`tokens.css` is the same shape the import reads, so a package survives the round trip.
|
||||
|
||||
## Attribution
|
||||
|
||||
The package format is the one published by
|
||||
[OpenDesign](https://github.com/nexu-io/open-design) (Apache-2.0). PaperCraft reimplements
|
||||
the format from its description; no file of that project is copied. See
|
||||
[THIRD_PARTY.md](../THIRD_PARTY.md).
|
||||
@@ -0,0 +1,124 @@
|
||||
# Design systems in PaperCraft
|
||||
|
||||
A PaperCraft project can hold a design system: collections of typed variables with modes, components usable from any page, icon sets, and libraries that other projects can enable. The editor has a Variables modal, a Libraries modal and an Assets view for them (see [ROADMAP.md](../ROADMAP.md)); the same things are available through the tools (MCP or `papercraft-cli`).
|
||||
|
||||
## Variables
|
||||
|
||||
Variables live in **collections**. A collection has one or more **modes** (`Light`, `Dark`) and each variable has one value per mode. The project stores them in `design.json` next to `project.json`; every page keeps a derived copy that the renderer, lint and exports read, rebuilt on every change. A change from the UI or a tool updates every page in one undo step per page.
|
||||
|
||||
```sh
|
||||
papercraft-cli call set_variables '{"variables":{"surface":"#313244","accent":"#cba6f7","on-accent":"#11111b"}}'
|
||||
papercraft-cli call set_variables '{"collection":"Spacing","type":"number","variables":{"space/md":16,"space/lg":{"value":24}}}'
|
||||
papercraft-cli call set_variables '{"variables":{"accent-hover":{"alias":"accent"}}}'
|
||||
```
|
||||
|
||||
* **Types.** `color`, `number`, `string`, `boolean`. Numbers have no unit and bind as px. Strings are substituted as text (a font family, a shadow). Booleans bind to layer visibility. An alias points at a variable of the same type, in any collection or enabled library, and resolves per mode. A cycle is refused.
|
||||
* **Groups.** A name is split on `/`: `color/brand/primary` sits in the group `color/brand`. Renaming a group in the Variables modal renames every variable under it and the bindings follow.
|
||||
* **CSS names.** The name's segments joined with `-`, sanitized: `--color-brand-primary`. Use `var(--color-brand-primary)` in `write_html`, `update_styles` and `create_artboard` for `background`, `backgroundColor` and `color`. Two variables with the same CSS name across the collections of a project (library ones included) are refused when written.
|
||||
* **Modes.** The active mode is chosen per page and per collection (Design tab), not per project; a new page inherits the active page's choice. `set_variables {"mode":"Dark", ...}` stores values for a mode, and the first mode you define is active. `set_variable_mode {"mode":"Light"}` switches the whole project. `create_collection {"name":"Brand","modes":["Light","Dark"]}` makes a collection with its modes up front.
|
||||
* **Reading and exporting.** `get_variables` returns the collections (id, groups, type, value per mode, aliases, description, hidden), `pageModes`, and the older `variables` and `tokens` maps. With `"format":"css"` it returns a `:root { --name: #hex }` block plus `[data-theme]` rules for modes, with `"json"` a design-tokens object where groups nest on `/` and aliases are `{group.name}`, with `"tailwind"` an `@theme` block. Copy CSS, JSON and Tailwind are in the Variables modal too.
|
||||
* **Deleting.** `delete_variables {"names":[...]}` refuses a variable that another one aliases and names the dependents; `"force":true` detaches them to the resolved value first. In the UI the same asks for confirmation. A removal affects every page.
|
||||
* **Hidden.** A variable marked `hidden` stays in the file and is left out of published libraries.
|
||||
|
||||
Naming that works: roles, not hues (`surface`, `text-muted`, `accent`, `on-accent`, `danger`), so a mode can change the value without changing the meaning.
|
||||
|
||||
### Bindings
|
||||
|
||||
A fill that was written with `var(--name)` stays linked. Other fields bind with `bind_variable {"nodeIds":[...],"field":"gap","variable":"space/md"}` or with the variable button next to the field in the inspector. A bound field shows the variable as a chip with a detach button; detaching keeps the current value. `variable` may be the name or the CSS name; `null` detaches.
|
||||
|
||||
| Field | Type | Applies to |
|
||||
|---|---|---|
|
||||
| `stroke`, `text-color` | color | stroke color, text color |
|
||||
| `width`, `height` | number | size in px |
|
||||
| `gap` | number | auto-layout gap |
|
||||
| `padding`, `padding-top`, `padding-right`, `padding-bottom`, `padding-left` | number | auto-layout padding (`padding` sets all four) |
|
||||
| `radius` | number | corner radius |
|
||||
| `font-size` | number | text size |
|
||||
| `line-height` | number | below 4 it is a multiplier (`1.5`), from 4 up it is px |
|
||||
| `opacity` | number | 0 to 1, values outside are clamped |
|
||||
| `visible` | boolean | layer visibility |
|
||||
|
||||
A bound field is applied again when the variable, an alias target or the page's mode changes. Instances take bindings from their main; changing a bound field on an instance is an override for that instance only. Gradients cannot be bound yet.
|
||||
|
||||
### Migration
|
||||
|
||||
Projects made before collections open as project version 2: the first page's colors and modes become the collection `Colors`, its tokens become `Tokens` (a `16px` value becomes a number, anything else, including a unitless `1.5`, stays a string). CSS names do not change, so existing fill bindings keep working. PaperCraft 0.4.0 does not know `design.json`, so it refuses a migrated project with "made by a newer PaperCraft" instead of writing pages that would drift from it. Update before opening such a project on another machine.
|
||||
|
||||
### Variables modal
|
||||
|
||||
Open it from the Design tab ("Open variables"), the command palette (`Variables…`) or ⌘⌥⇧V. Collections of this file are on the left, then each enabled library (read-only), each with its group tree. The table has one row per variable in the selected group and one column per mode; cells edit in place (swatch and hex, number, text, toggle) and an alias picker links to another variable. Add a variable (choose its type), a mode or a collection from the header; rename, delete, search and a details pane (description, hidden, CSS name, how many layers use it) are there too.
|
||||
|
||||
## Components and instances
|
||||
|
||||
```sh
|
||||
papercraft-cli call create_component '{"nodeId":"<frame>","name":"Button / Primary"}'
|
||||
papercraft-cli call create_instance '{"componentId":"<id>","parentId":"<frame>","name":"Button / Sign in"}'
|
||||
papercraft-cli call set_text_content '{"updates":[{"nodeId":"<label layer id from create_instance>","textContent":"Sign in"}]}'
|
||||
```
|
||||
|
||||
* Build the main component as a frame (usually its own artboard), then convert it. Name it `Component / Variant`.
|
||||
* `create_instance` returns the instance id and its layers, so you can set text and styles on them. Changes made through `set_text_content` or `update_styles` on an instance are recorded as overrides; everything else follows the main component.
|
||||
* In `write_html`, `<x-paper-instance component-id="<id>" layer-name="Button / Save"/>` places an instance inline.
|
||||
* `get_components` lists the main components of every page (and library components) with `componentKey`, page and how many instances each has.
|
||||
* **Across pages.** Instances can be placed from a main on any page: `create_instance` and `swap_instance` take a `componentId` (`pageId:num`) or a `componentKey` (stable, from `get_components`). Editing a main on page A updates its instances on every other page, one undo step per page. If the main is deleted its instances stay as they are, marked "Main missing" in Assets, where you can detach them. `import_components` still copies a main onto a page, but reuse no longer needs it.
|
||||
* **Limits.** No variants or properties: model variants as separate components (`Button / Primary`, `Button / Secondary`). `detach_instance` and `swap_instance` exist as tools; in the editor detach with ⌘⌥B.
|
||||
|
||||
## Icons
|
||||
|
||||
`papercraft-cli icons add phosphor lucide` downloads sets from the npm registry into the icons folder (`<data dir>/papercraft/icons/<set>/`, or `$PAPERCRAFT_ICONS`), each with its license file. Sets: Lucide (ISC), Tabler (MIT), Phosphor (MIT), Heroicons (MIT), Material Symbols (Apache-2.0). Find names with `papercraft-cli icons search arrow left` (offline) or the `search_icons` tool, then place one in `write_html`:
|
||||
|
||||
```html
|
||||
<x-paper-icon name="phosphor:gear" size="20" color="var(--accent)"/>
|
||||
```
|
||||
|
||||
Fill-based sets (Phosphor, Material) follow variables; Lucide is stroke-based and keeps a fixed color.
|
||||
|
||||
> **Known limitation.** An icon's *stroke* color is frozen at import time: the value of the
|
||||
> variable is baked into the stroke, so a stroke-based icon (Lucide, Tabler, Heroicons) does
|
||||
> not follow the variable when it changes later. A layer's `stroke` can follow a variable with
|
||||
> `bind_variable`; the icon's own stroke does not. A `var(--x)` that does not exist is reported as a warning
|
||||
> and the icon keeps the color it inherits.
|
||||
|
||||
## Lint
|
||||
|
||||
`lint_design` checks a subtree or the page and returns issues with a rule, a severity and a fix:
|
||||
|
||||
| Rule | Severity | Checks |
|
||||
|---|---|---|
|
||||
| `contrast` | error | WCAG 4.5:1 for text, 3:1 for large text (24px+, or 18.66px+ bold), against the nearest opaque fill behind it |
|
||||
| `text-size` | warning | text under 12px |
|
||||
| `type-scale` | info | font size not on the scale (default 12, 14, 16, 20, 24, 32, 40, 48, 64; pass `scale` to change) |
|
||||
| `spacing-grid` | warning | gap or padding not a multiple of 4 |
|
||||
| `touch-target` | warning | a frame named `Button…`, `Tab /…` or `Tab Bar /…` under 44px tall |
|
||||
| `layer-name` | warning | default names (Frame, Rectangle, Group...) on layers with children |
|
||||
| `hard-coded-color` | warning, info | a literal color that equals a variable (warning), or a literal used repeatedly when variables exist (info) |
|
||||
|
||||
Instances are skipped (their main component is linted). The rules are conventions, not law: pass `scale` to match your own type scale and ignore `info` items you disagree with. Lint does not judge taste; always look at `get_screenshot` too.
|
||||
|
||||
## Libraries
|
||||
|
||||
Any project can publish itself as a library, and other projects can enable it. This is a published snapshot, as in Figma, not a live link.
|
||||
|
||||
* **Publish.** Libraries modal, tab "This file", or `publish_library`. It writes `library.json` in the project folder with a version counter, the non-hidden variables, and every main component whose name does not start with `_` or `.`, each with its layers and a 256px preview. Before publishing the modal shows what changed since the last publish ("3 variables changed, 1 component added"); the tool returns the same list.
|
||||
* **Enable.** Every project in the store with a `library.json` is available (projects synced from other devices through the relay show up too). `enable_library {"libraryId":...}` or the toggle in the Libraries modal copies the snapshot into the project (`libraries/<id>.json`). Its variables show read-only in the Variables modal and can be bound and aliased; its components show in Assets and are placed with `create_instance {"componentKey":...}`. Enabling is refused if a CSS name already exists in the project.
|
||||
* **Updates.** When the published version is newer than the copy, the Libraries modal tab "Updates" and a dot on the Assets tab say so, and `list_libraries` reports `updateAvailable`. The review lists changed variables and components. `update_library` (or Update in the modal) replaces the snapshot, rebuilds every page and re-syncs the library's instances; instance overrides are kept. Updates are never applied by themselves.
|
||||
* **Missing source.** If the library's project is deleted or not in the store, the copy keeps working. The modal shows "Source not found" and `list_libraries` shows `sourceFound: false`.
|
||||
* **Disable.** `disable_library` or the toggle (after a confirm when it is in use) stops using a library: bindings to its variables are detached and keep the resolved value, local variables that aliased it keep the resolved value, its instances become plain frames, and its variables and components leave the project. One undo step per page.
|
||||
|
||||
Open the Libraries modal from the Share menu (`Libraries…`), the command palette, or the Assets header.
|
||||
|
||||
## Assets
|
||||
|
||||
The Assets view (side panel tab) replaces the old Library tab. It has a search box and sections for this file (by page), each enabled library, and My shapes (the personal shape library). Components are grouped by the part of the name before the first ` / ` (`Button / Primary` is in group `Button`) and shown as previews. Click one to place it at the viewport center, or drag it onto the canvas. Instances whose main was deleted are listed as "Main missing" with a detach action.
|
||||
|
||||
## Packages
|
||||
|
||||
A design system can travel as an **OpenDesign design-system package**: a folder with
|
||||
`manifest.json`, `tokens.css` and `DESIGN.md`. `import_design_system` reads one into the
|
||||
project (colors become variables, `[data-theme]` blocks become modes, everything else becomes
|
||||
a token) and `export_design_system` writes one back. The format, the rules and the tools are
|
||||
in [design-system-packages.md](design-system-packages.md).
|
||||
|
||||
## Worked example
|
||||
|
||||
[`examples/taskflow.py`](../examples/taskflow.py) builds an 8-screen app: a Catppuccin theme as variables (the only place hex appears), components for buttons, fields, chips, task rows, toggles and tab bars, Phosphor icons, and a design-system page of swatches. Run it against the running app after `papercraft-cli icons add phosphor`.
|
||||
@@ -0,0 +1,27 @@
|
||||
# Feature ideas
|
||||
|
||||
Ranked by value for the effort. Done items say where.
|
||||
|
||||
## Done
|
||||
* Prototype links: click a layer in Present mode to jump to a frame (inspector, Prototype tab).
|
||||
* Drop-shadow effect in the inspector.
|
||||
* Saved versions with rename, restore, delete (also in the browser).
|
||||
* Comments filters, reopen, delete; agent activity log with failures, copy agent URL.
|
||||
* Agent activity pill and canvas glow while an agent works; layers pop in.
|
||||
* Merge of concurrent edits to one shared page (`src/merge.rs`, `src/sync.rs`).
|
||||
* Interface scale in Settings and the command palette (native).
|
||||
* Export presets (inspector Export "+").
|
||||
* Shared libraries: publish a project as a library, enable and update it in others (`src/libraries.rs`, Libraries modal); cross-page components; number variables.
|
||||
* Design from the CLI with the app closed (`papercraft-cli --offline`, `shell`).
|
||||
* Auto versions before agent edits: each agent run snapshots edited pages and can be reviewed or reverted (`src/runs.rs`, Agent view).
|
||||
|
||||
## Next
|
||||
1. **Presence on shared projects**: show who else is in the file (coloured cursors and selection outlines). NotesCraft `crates/collab` already has rooms and presence; reuse once it is a shared crate.
|
||||
2. **Version compare**: pick two saved versions and show a diff overlay (added, changed, removed layers) using the id-paired `diff_pages` in `src/mcp/diff.rs`; compare UI is still todo.
|
||||
4. **Smart transitions in Present mode**: animate matching layers (same name) between frames instead of cutting.
|
||||
5. **Hover and pressed states for components**: variants (`Button / Primary / Hover`) switched in Present mode on pointer events.
|
||||
6. **Layer blur and background blur**: needs a renderer pass; unlocks glass effects and the Layer "+" in the design.
|
||||
7. **Comment threads with replies from people, mentions, and a canvas pin that opens the thread**.
|
||||
8. **Flatten menus into icon toolbars**: the Share menu and the folded Menu are flat lists; next is an icon rail for the most used actions with labels on hover.
|
||||
9. **Window**: Windows asks the system for rounded corners and keeps the shadow. On Linux the window manager (or the Wayland client-side frame) draws the frame, and it is round on GNOME and KDE. A frame drawn by the app needs three things that cannot be checked without a Linux desktop: a transparent surface, a paint callback that clears the four corners with replace blending (egui cannot erase pixels it has already drawn), and its own edge resizing through `drag_resize_window`. Not built for that reason.
|
||||
10. **One design-system package per brand** imported by every app's design file, plus a token export that generates the theme code (see `docs/shared-libs.md`). Publishing the brand project as a library covers the sharing; the generated theme code is still todo.
|
||||
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 528 KiB After Width: | Height: | Size: 700 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 406 KiB After Width: | Height: | Size: 619 KiB |
|
Before Width: | Height: | Size: 421 KiB After Width: | Height: | Size: 593 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |