diff --git a/.envrc b/.envrc index 7e800ba..826f5a6 100644 --- a/.envrc +++ b/.envrc @@ -1,2 +1 @@ export DATABASE_URL=sqlite://$(pwd)/test.db -use flake diff --git a/Cargo.lock b/Cargo.lock index 37b20ea..d3d0013 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,7 +8,7 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ - "gimli 0.29.0", + "gimli", ] [[package]] @@ -17,19 +17,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "getrandom 0.2.15", - "once_cell", - "version_check", - "zerocopy", -] - [[package]] name = "aho-corasick" version = "1.1.3" @@ -54,18 +41,6 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - -[[package]] -name = "ambient-authority" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b" - [[package]] name = "android-tzdata" version = "0.1.1" @@ -135,21 +110,6 @@ name = "anyhow" version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" -dependencies = [ - "backtrace", -] - -[[package]] -name = "arbitrary" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" - -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] name = "async-broadcast" @@ -157,23 +117,12 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" dependencies = [ - "event-listener 5.3.1", + "event-listener", "event-listener-strategy", "futures-core", "pin-project-lite", ] -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - [[package]] name = "async-channel" version = "2.3.1" @@ -210,28 +159,6 @@ dependencies = [ "futures-lite", ] -[[package]] -name = "async-imap" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98892ebee4c05fc66757e600a7466f0d9bfcde338f645d64add323789f26cb36" -dependencies = [ - "async-channel 2.3.1", - "base64 0.21.7", - "bytes", - "chrono", - "futures", - "imap-proto", - "log", - "nom", - "once_cell", - "pin-utils", - "self_cell", - "stop-token", - "thiserror", - "tokio", -] - [[package]] name = "async-io" version = "2.3.3" @@ -257,7 +184,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 5.3.1", + "event-listener", "event-listener-strategy", "pin-project-lite", ] @@ -268,14 +195,14 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7eda79bbd84e29c2b308d1dc099d7de8dcc7035e48f4bf5dc4a531a44ff5e2a" dependencies = [ - "async-channel 2.3.1", + "async-channel", "async-io", "async-lock", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener 5.3.1", + "event-listener", "futures-lite", "rustix", "tracing", @@ -351,21 +278,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "atoi" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" -dependencies = [ - "num-traits", -] - -[[package]] -name = "atomic" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" - [[package]] name = "atomic-waker" version = "1.1.2" @@ -378,75 +290,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" -[[package]] -name = "axum" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" -dependencies = [ - "async-trait", - "axum-core", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "itoa 1.0.11", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper 1.0.1", - "tokio", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-core" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper 0.1.2", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "backoff" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" -dependencies = [ - "futures-core", - "getrandom 0.2.15", - "instant", - "pin-project-lite", - "rand 0.8.5", - "tokio", -] - [[package]] name = "backtrace" version = "0.3.73" @@ -474,18 +317,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - -[[package]] -name = "bimap" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" - [[package]] name = "bitflags" version = "1.3.2" @@ -501,15 +332,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bitpacking" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c1d3e2bfd8d06048a179f7b17afc3188effa10385e7b00dc65af6aae732ea92" -dependencies = [ - "crunchy", -] - [[package]] name = "block" version = "0.1.6" @@ -540,7 +362,7 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel 2.3.1", + "async-channel", "async-task", "futures-io", "futures-lite", @@ -629,83 +451,6 @@ dependencies = [ "serde", ] -[[package]] -name = "cap-fs-ext" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc2d2954524be4866aaa720f008fba9995de54784957a1b0e0119992d6d5e52" -dependencies = [ - "cap-primitives", - "cap-std", - "io-lifetimes", - "windows-sys 0.52.0", -] - -[[package]] -name = "cap-net-ext" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799c81d79ea9c71a1438efd417c788214bc9e7986046d3710b6bbe60da4d8275" -dependencies = [ - "cap-primitives", - "cap-std", - "rustix", - "smallvec", -] - -[[package]] -name = "cap-primitives" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00172660727e2d7f808e7cc2bfffd093fdb3ea2ff2ef819289418a3c3ffab5ac" -dependencies = [ - "ambient-authority", - "fs-set-times", - "io-extras", - "io-lifetimes", - "ipnet", - "maybe-owned", - "rustix", - "windows-sys 0.52.0", - "winx", -] - -[[package]] -name = "cap-rand" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "270f1d341a2afc62604f8f688bee4e444d052b7a74c1458dd3aa7efb47d4077f" -dependencies = [ - "ambient-authority", - "rand 0.8.5", -] - -[[package]] -name = "cap-std" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd9187bb3f7478a4c135ea10473a41a5f029d2ac800c1adf64f35ec7d4c8603" -dependencies = [ - "cap-primitives", - "io-extras", - "io-lifetimes", - "rustix", -] - -[[package]] -name = "cap-time-ext" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91666f31e30c85b1d2ee8432c90987f752c45f5821f5638027b41e73e16a395b" -dependencies = [ - "ambient-authority", - "cap-primitives", - "iana-time-zone", - "once_cell", - "rustix", - "winx", -] - [[package]] name = "cargo-platform" version = "0.1.8" @@ -744,17 +489,6 @@ name = "cc" version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" -dependencies = [ - "jobserver", - "libc", - "once_cell", -] - -[[package]] -name = "census" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4c707c6a209cbe82d10abd08e1ea8995e9ea937d2550646e02798948992be0" [[package]] name = "cesu8" @@ -803,10 +537,8 @@ checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", - "js-sys", "num-traits", "serde", - "wasm-bindgen", "windows-targets 0.52.5", ] @@ -850,12 +582,6 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" -[[package]] -name = "cobs" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" - [[package]] name = "cocoa" version = "0.25.0" @@ -911,12 +637,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - [[package]] name = "convert_case" version = "0.4.0" @@ -1000,131 +720,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cranelift-bforest" -version = "0.109.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6b33d7e757a887989eb18b35712b2a67d96171ec3149d1bfb657b29b7b367c" -dependencies = [ - "cranelift-entity", -] - -[[package]] -name = "cranelift-codegen" -version = "0.109.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9acf15cb22be42d07c3b57d7856329cb228b7315d385346149df2566ad5e4aa" -dependencies = [ - "bumpalo", - "cranelift-bforest", - "cranelift-codegen-meta", - "cranelift-codegen-shared", - "cranelift-control", - "cranelift-entity", - "cranelift-isle", - "gimli 0.28.1", - "hashbrown 0.14.5", - "log", - "regalloc2", - "rustc-hash", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-codegen-meta" -version = "0.109.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e934d301392b73b3f8b0540391fb82465a0f179a3cee7c726482ac4727efcc97" -dependencies = [ - "cranelift-codegen-shared", -] - -[[package]] -name = "cranelift-codegen-shared" -version = "0.109.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb2a2566b3d54b854dfb288b3b187f6d3d17d6f762c92898207eba302931da" - -[[package]] -name = "cranelift-control" -version = "0.109.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0100f33b704cdacd01ad66ff41f8c5030d57cbff078e2a4e49ab1822591299fa" -dependencies = [ - "arbitrary", -] - -[[package]] -name = "cranelift-entity" -version = "0.109.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8cfdc315e5d18997093e040a8d234bea1ac1e118a716d3e30f40d449e78207b" -dependencies = [ - "serde", - "serde_derive", -] - -[[package]] -name = "cranelift-frontend" -version = "0.109.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f74b84f16af2e982b0c0c72233503d9d55cbfe3865dbe807ca28dc6642a28b5" -dependencies = [ - "cranelift-codegen", - "log", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-isle" -version = "0.109.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf306d3dde705fb94bd48082f01d38c4ededc74293a4c007805f610bf08bc6e" - -[[package]] -name = "cranelift-native" -version = "0.109.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea0ebdef7aff4a79bcbc8b6495f31315f16b3bf311152f472eaa8d679352581" -dependencies = [ - "cranelift-codegen", - "libc", - "target-lexicon", -] - -[[package]] -name = "cranelift-wasm" -version = "0.109.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d549108a1942065cdbac3bb96c2952afa0e1b9a3beff4b08c4308ac72257576d" -dependencies = [ - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "itertools 0.12.1", - "log", - "smallvec", - "wasmparser", - "wasmtime-types", -] - -[[package]] -name = "crc" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - [[package]] name = "crc32fast" version = "1.4.2" @@ -1143,46 +738,12 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - [[package]] name = "crypto-common" version = "0.1.6" @@ -1220,27 +781,6 @@ dependencies = [ "syn 2.0.67", ] -[[package]] -name = "csv" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" -dependencies = [ - "csv-core", - "itoa 1.0.11", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" -dependencies = [ - "memchr", -] - [[package]] name = "ctor" version = "0.2.8" @@ -1292,17 +832,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" -[[package]] -name = "der" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - [[package]] name = "deranged" version = "0.3.11" @@ -1344,18 +873,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", - "const-oid", "crypto-common", - "subtle", -] - -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys 0.3.7", ] [[package]] @@ -1364,7 +882,7 @@ version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "dirs-sys 0.4.1", + "dirs-sys", ] [[package]] @@ -1377,17 +895,6 @@ dependencies = [ "dirs-sys-next", ] -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "dirs-sys" version = "0.4.1" @@ -1449,18 +956,6 @@ dependencies = [ "syn 2.0.67", ] -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - [[package]] name = "dpi" version = "0.1.1" @@ -1497,15 +992,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" -[[package]] -name = "either" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" -dependencies = [ - "serde", -] - [[package]] name = "embed-resource" version = "2.4.2" @@ -1526,12 +1012,6 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" -[[package]] -name = "embedded-io" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" - [[package]] name = "encoding_rs" version = "0.8.34" @@ -1584,23 +1064,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "etcetera" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" -dependencies = [ - "cfg-if", - "home", - "windows-sys 0.48.0", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - [[package]] name = "event-listener" version = "5.3.1" @@ -1618,39 +1081,16 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener 5.3.1", + "event-listener", "pin-project-lite", ] -[[package]] -name = "fallible-iterator" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" - -[[package]] -name = "fastdivide" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59668941c55e5c186b8b58c391629af56774ec768f73c08bbcd56f09348eb00b" - [[package]] name = "fastrand" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" -[[package]] -name = "fd-lock" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" -dependencies = [ - "cfg-if", - "rustix", - "windows-sys 0.52.0", -] - [[package]] name = "fdeflate" version = "0.3.4" @@ -1680,17 +1120,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "flume" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" -dependencies = [ - "futures-core", - "futures-sink", - "spin 0.9.8", -] - [[package]] name = "fnv" version = "1.0.7" @@ -1733,27 +1162,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fs-set-times" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "033b337d725b97690d86893f9de22b67b80dcc4e9ad815f348254c38119db8fb" -dependencies = [ - "io-lifetimes", - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "fs4" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e180ac76c23b45e767bd7ae9579bc0bb458618c4bc71835926e098e61d15f8" -dependencies = [ - "rustix", - "windows-sys 0.52.0", -] - [[package]] name = "futf" version = "0.1.5" @@ -1764,21 +1172,6 @@ dependencies = [ "new_debug_unreachable", ] -[[package]] -name = "futures" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - [[package]] name = "futures-channel" version = "0.3.30" @@ -1786,7 +1179,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", - "futures-sink", ] [[package]] @@ -1806,17 +1198,6 @@ dependencies = [ "futures-util", ] -[[package]] -name = "futures-intrusive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" -dependencies = [ - "futures-core", - "lock_api", - "parking_lot", -] - [[package]] name = "futures-io" version = "0.3.30" @@ -1865,7 +1246,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ - "futures-channel", "futures-core", "futures-io", "futures-macro", @@ -2030,17 +1410,6 @@ dependencies = [ "wasi 0.11.0+wasi-snapshot-preview1", ] -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" -dependencies = [ - "fallible-iterator", - "indexmap 2.2.6", - "stable_deref_trait", -] - [[package]] name = "gimli" version = "0.29.0" @@ -2220,43 +1589,17 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", - "serde", -] - -[[package]] -name = "hashlink" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" -dependencies = [ - "hashbrown 0.14.5", -] [[package]] name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -dependencies = [ - "unicode-segmentation", -] [[package]] name = "heck" @@ -2282,33 +1625,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "html5ever" version = "0.26.0" @@ -2323,12 +1639,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "htmlescape" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" - [[package]] name = "http" version = "1.1.0" @@ -2369,12 +1679,6 @@ version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - [[package]] name = "hyper" version = "1.3.1" @@ -2388,7 +1692,6 @@ dependencies = [ "http", "http-body", "httparse", - "httpdate", "itoa 1.0.11", "pin-project-lite", "smallvec", @@ -2406,12 +1709,12 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls 0.23.10", + "rustls", "rustls-pki-types", "tokio", "tokio-rustls", "tower-service", - "webpki-roots 0.26.3", + "webpki-roots", ] [[package]] @@ -2467,12 +1770,6 @@ dependencies = [ "png", ] -[[package]] -name = "id-arena" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" - [[package]] name = "ident_case" version = "1.0.1" @@ -2499,15 +1796,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "imap-proto" -version = "0.16.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de555d9526462b6f9ece826a26fb7c67eca9a0245bd9ff84fa91972a5d5d8856" -dependencies = [ - "nom", -] - [[package]] name = "indexmap" version = "1.9.3" @@ -2546,27 +1834,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", ] -[[package]] -name = "io-extras" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9f046b9af244f13b3bd939f55d16830ac3a201e8a9ba9661bfcb03e2be72b9b" -dependencies = [ - "io-lifetimes", - "windows-sys 0.52.0", -] - -[[package]] -name = "io-lifetimes" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a611371471e98973dbcab4e0ec66c31a10bc356eeb4d54a0e05eac8158fe38c" - [[package]] name = "ipnet" version = "2.9.0" @@ -2598,24 +1867,6 @@ version = "1.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "0.4.8" @@ -2673,15 +1924,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" -[[package]] -name = "jobserver" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" -dependencies = [ - "libc", -] - [[package]] name = "js-sys" version = "0.3.69" @@ -2731,21 +1973,6 @@ name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -dependencies = [ - "spin 0.5.2", -] - -[[package]] -name = "leb128" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" - -[[package]] -name = "levenshtein_automata" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2cdeb66e45e9f36bfad5bbdb4d2384e70936afbee843c6f6543f0c551ebb25" [[package]] name = "libappindicator" @@ -2797,12 +2024,6 @@ dependencies = [ "windows-targets 0.52.5", ] -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - [[package]] name = "libredox" version = "0.1.3" @@ -2813,17 +2034,6 @@ dependencies = [ "libc", ] -[[package]] -name = "libsqlite3-sys" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - [[package]] name = "line-wrap" version = "0.2.0" @@ -2867,36 +2077,12 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "lru" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" -dependencies = [ - "hashbrown 0.14.5", -] - -[[package]] -name = "lz4_flex" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5" - [[package]] name = "mac" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" -[[package]] -name = "mach2" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" -dependencies = [ - "libc", -] - [[package]] name = "malloc_buf" version = "0.0.6" @@ -2935,62 +2121,12 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "maybe-owned" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" - -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest", -] - -[[package]] -name = "measure_time" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbefd235b0aadd181626f281e1d684e116972988c14c264e42069d5e8a5775cc" -dependencies = [ - "instant", - "log", -] - [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "memfd" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" -dependencies = [ - "rustix", -] - -[[package]] -name = "memmap2" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" -dependencies = [ - "libc", -] - [[package]] name = "memoffset" version = "0.9.1" @@ -3006,12 +2142,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.7.4" @@ -3052,12 +2182,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "murmurhash32" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2195bf6aa996a481483b29d62a7663eed3fe39600c460e323f8ff41e90bdd89b" - [[package]] name = "ndk" version = "0.7.0" @@ -3111,16 +2235,6 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -3131,49 +2245,12 @@ dependencies = [ "winapi", ] -[[package]] -name = "num-bigint-dig" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.5", - "smallvec", - "zeroize", -] - [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -3181,7 +2258,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -3349,9 +2425,6 @@ version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" dependencies = [ - "crc32fast", - "hashbrown 0.14.5", - "indexmap 2.2.6", "memchr", ] @@ -3361,12 +2434,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "oneshot" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e296cf87e61c9cfc1a61c3c63a0f7f286ed4554e0e22be84e8a38e1d264a2a29" - [[package]] name = "open" version = "5.1.4" @@ -3410,15 +2477,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "ownedbytes" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a059efb063b8f425b948e042e6b9bd85edfe60e913630ed727b23e2dfcc558" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "pango" version = "0.18.3" @@ -3449,7 +2507,6 @@ name = "panorama" version = "0.1.0" dependencies = [ "clap", - "panorama-daemon", "serde", "serde_json", "tauri", @@ -3462,71 +2519,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "panorama-codetrack" -version = "0.1.0" - -[[package]] -name = "panorama-core" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-imap", - "backoff", - "bimap", - "chrono", - "futures", - "itertools 0.13.0", - "schemars", - "serde", - "serde_json", - "serde_yaml", - "sqlx", - "sugars", - "tantivy", - "tokio", - "uuid", - "walkdir", - "wasmtime", - "wasmtime-wasi", -] - -[[package]] -name = "panorama-daemon" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-imap", - "axum", - "chrono", - "clap", - "csv", - "dirs 5.0.1", - "futures", - "itertools 0.13.0", - "panorama-core", - "schemars", - "serde", - "serde_json", - "sugars", - "tantivy", - "tokio", - "tower", - "tower-http", - "tracing-subscriber", - "utoipa", - "utoipa-scalar", - "uuid", -] - -[[package]] -name = "panorama-macros" -version = "0.1.0" - -[[package]] -name = "panorama-sync" -version = "0.1.0" - [[package]] name = "parking" version = "2.2.0" @@ -3551,32 +2543,17 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.2", + "redox_syscall", "smallvec", "windows-targets 0.52.5", ] -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - [[package]] name = "pathdiff" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.3.1" @@ -3760,27 +2737,6 @@ dependencies = [ "futures-io", ] -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - [[package]] name = "pkg-config" version = "0.3.30" @@ -3829,17 +2785,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "postcard" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" -dependencies = [ - "cobs", - "embedded-io", - "serde", -] - [[package]] name = "powerfmt" version = "0.2.0" @@ -3923,15 +2868,6 @@ version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" -[[package]] -name = "psm" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" -dependencies = [ - "cc", -] - [[package]] name = "publicsuffix" version = "2.2.3" @@ -3962,7 +2898,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.10", + "rustls", "thiserror", "tokio", "tracing", @@ -3978,7 +2914,7 @@ dependencies = [ "rand 0.8.5", "ring", "rustc-hash", - "rustls 0.23.10", + "rustls", "slab", "thiserror", "tinyvec", @@ -4070,16 +3006,6 @@ dependencies = [ "getrandom 0.2.15", ] -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - [[package]] name = "rand_hc" version = "0.2.0" @@ -4110,35 +3036,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.5.2" @@ -4159,19 +3056,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "regalloc2" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" -dependencies = [ - "hashbrown 0.13.2", - "log", - "rustc-hash", - "slice-group-by", - "smallvec", -] - [[package]] name = "regex" version = "1.10.5" @@ -4244,13 +3128,13 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.10", - "rustls-pemfile 2.1.2", + "rustls", + "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper", "system-configuration", "tokio", "tokio-rustls", @@ -4261,7 +3145,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.26.3", + "webpki-roots", "winreg", ] @@ -4275,41 +3159,11 @@ dependencies = [ "cfg-if", "getrandom 0.2.15", "libc", - "spin 0.9.8", + "spin", "untrusted", "windows-sys 0.52.0", ] -[[package]] -name = "rsa" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" -dependencies = [ - "const-oid", - "digest", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core 0.6.4", - "signature", - "spki", - "subtle", - "zeroize", -] - -[[package]] -name = "rust-stemmers" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" -dependencies = [ - "serde", - "serde_derive", -] - [[package]] name = "rustc-demangle" version = "0.1.24" @@ -4339,24 +3193,11 @@ checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ "bitflags 2.5.0", "errno", - "itoa 1.0.11", "libc", "linux-raw-sys", - "once_cell", "windows-sys 0.52.0", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "ring", - "rustls-webpki 0.101.7", - "sct", -] - [[package]] name = "rustls" version = "0.23.10" @@ -4366,20 +3207,11 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki", "subtle", "zeroize", ] -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - [[package]] name = "rustls-pemfile" version = "2.1.2" @@ -4396,16 +3228,6 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustls-webpki" version = "0.102.4" @@ -4476,16 +3298,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "selectors" version = "0.22.0" @@ -4506,12 +3318,6 @@ dependencies = [ "thin-slice", ] -[[package]] -name = "self_cell" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" - [[package]] name = "semver" version = "1.0.23" @@ -4563,16 +3369,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_path_to_error" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" -dependencies = [ - "itoa 1.0.11", - "serde", -] - [[package]] name = "serde_repr" version = "0.1.19" @@ -4635,19 +3431,6 @@ dependencies = [ "syn 2.0.67", ] -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap 2.2.6", - "itoa 1.0.11", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "serialize-to-javascript" version = "0.1.1" @@ -4721,15 +3504,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "shellexpand" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" -dependencies = [ - "dirs 4.0.0", -] - [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -4739,16 +3513,6 @@ dependencies = [ "libc", ] -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest", - "rand_core 0.6.4", -] - [[package]] name = "simd-adler32" version = "0.3.7" @@ -4761,15 +3525,6 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" -[[package]] -name = "sketches-ddsketch" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85636c14b73d81f541e525f585c0a2109e6744e1565b5c1668e31c70c10ed65c" -dependencies = [ - "serde", -] - [[package]] name = "slab" version = "0.4.9" @@ -4779,20 +3534,11 @@ dependencies = [ "autocfg", ] -[[package]] -name = "slice-group-by" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" - [[package]] name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -dependencies = [ - "serde", -] [[package]] name = "socket2" @@ -4821,7 +3567,7 @@ dependencies = [ "objc2-foundation", "objc2-quartz-core", "raw-window-handle 0.6.2", - "redox_syscall 0.5.2", + "redox_syscall", "wasm-bindgen", "wayland-sys", "web-sys", @@ -4854,252 +3600,11 @@ dependencies = [ "system-deps", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "sptr" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" - -[[package]] -name = "sqlformat" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f" -dependencies = [ - "nom", - "unicode_categories", -] - -[[package]] -name = "sqlx" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" -dependencies = [ - "sqlx-core", - "sqlx-macros", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", -] - -[[package]] -name = "sqlx-core" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" -dependencies = [ - "ahash", - "atoi", - "byteorder", - "bytes", - "chrono", - "crc", - "crossbeam-queue", - "either", - "event-listener 2.5.3", - "futures-channel", - "futures-core", - "futures-intrusive", - "futures-io", - "futures-util", - "hashlink", - "hex", - "indexmap 2.2.6", - "log", - "memchr", - "once_cell", - "paste", - "percent-encoding", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", - "serde", - "serde_json", - "sha2", - "smallvec", - "sqlformat", - "thiserror", - "tokio", - "tokio-stream", - "tracing", - "url", - "uuid", - "webpki-roots 0.25.4", -] - -[[package]] -name = "sqlx-macros" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" -dependencies = [ - "proc-macro2", - "quote", - "sqlx-core", - "sqlx-macros-core", - "syn 1.0.109", -] - -[[package]] -name = "sqlx-macros-core" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" -dependencies = [ - "dotenvy", - "either", - "heck 0.4.1", - "hex", - "once_cell", - "proc-macro2", - "quote", - "serde", - "serde_json", - "sha2", - "sqlx-core", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", - "syn 1.0.109", - "tempfile", - "tokio", - "url", -] - -[[package]] -name = "sqlx-mysql" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" -dependencies = [ - "atoi", - "base64 0.21.7", - "bitflags 2.5.0", - "byteorder", - "bytes", - "chrono", - "crc", - "digest", - "dotenvy", - "either", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "generic-array", - "hex", - "hkdf", - "hmac", - "itoa 1.0.11", - "log", - "md-5", - "memchr", - "once_cell", - "percent-encoding", - "rand 0.8.5", - "rsa", - "serde", - "sha1", - "sha2", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror", - "tracing", - "uuid", - "whoami", -] - -[[package]] -name = "sqlx-postgres" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" -dependencies = [ - "atoi", - "base64 0.21.7", - "bitflags 2.5.0", - "byteorder", - "chrono", - "crc", - "dotenvy", - "etcetera", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "hex", - "hkdf", - "hmac", - "home", - "itoa 1.0.11", - "log", - "md-5", - "memchr", - "once_cell", - "rand 0.8.5", - "serde", - "serde_json", - "sha2", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror", - "tracing", - "uuid", - "whoami", -] - -[[package]] -name = "sqlx-sqlite" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" -dependencies = [ - "atoi", - "chrono", - "flume", - "futures-channel", - "futures-core", - "futures-executor", - "futures-intrusive", - "futures-util", - "libsqlite3-sys", - "log", - "percent-encoding", - "regex", - "serde", - "sqlx-core", - "tracing", - "url", - "urlencoding", - "uuid", -] [[package]] name = "stable_deref_trait" @@ -5122,18 +3627,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "stop-token" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af91f480ee899ab2d9f8435bfdfc14d08a5754bd9d3fef1f1a1c23336aad6c8b" -dependencies = [ - "async-channel 1.9.0", - "cfg-if", - "futures-core", - "pin-project-lite", -] - [[package]] name = "string_cache" version = "0.8.7" @@ -5160,17 +3653,6 @@ dependencies = [ "quote", ] -[[package]] -name = "stringprep" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - [[package]] name = "strsim" version = "0.11.1" @@ -5183,12 +3665,6 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d0208408ba0c3df17ed26eb06992cb1a1268d41b2c0e12e65203fbe3972cee5" -[[package]] -name = "sugars" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc0db74f9ee706e039d031a560bd7d110c7022f016051b3d33eeff9583e3e67a" - [[package]] name = "swift-rs" version = "1.0.6" @@ -5222,12 +3698,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "sync_wrapper" version = "1.0.1" @@ -5268,164 +3738,6 @@ dependencies = [ "version-compare", ] -[[package]] -name = "system-interface" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b858526d22750088a9b3cf2e3c2aacebd5377f13adeec02860c30d09113010a6" -dependencies = [ - "bitflags 2.5.0", - "cap-fs-ext", - "cap-std", - "fd-lock", - "io-lifetimes", - "rustix", - "windows-sys 0.52.0", - "winx", -] - -[[package]] -name = "tantivy" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8d0582f186c0a6d55655d24543f15e43607299425c5ad8352c242b914b31856" -dependencies = [ - "aho-corasick", - "arc-swap", - "base64 0.22.1", - "bitpacking", - "byteorder", - "census", - "crc32fast", - "crossbeam-channel", - "downcast-rs", - "fastdivide", - "fnv", - "fs4", - "htmlescape", - "itertools 0.12.1", - "levenshtein_automata", - "log", - "lru", - "lz4_flex", - "measure_time", - "memmap2", - "num_cpus", - "once_cell", - "oneshot", - "rayon", - "regex", - "rust-stemmers", - "rustc-hash", - "serde", - "serde_json", - "sketches-ddsketch", - "smallvec", - "tantivy-bitpacker", - "tantivy-columnar", - "tantivy-common", - "tantivy-fst", - "tantivy-query-grammar", - "tantivy-stacker", - "tantivy-tokenizer-api", - "tempfile", - "thiserror", - "time", - "uuid", - "winapi", - "zstd", -] - -[[package]] -name = "tantivy-bitpacker" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284899c2325d6832203ac6ff5891b297fc5239c3dc754c5bc1977855b23c10df" -dependencies = [ - "bitpacking", -] - -[[package]] -name = "tantivy-columnar" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12722224ffbe346c7fec3275c699e508fd0d4710e629e933d5736ec524a1f44e" -dependencies = [ - "downcast-rs", - "fastdivide", - "itertools 0.12.1", - "serde", - "tantivy-bitpacker", - "tantivy-common", - "tantivy-sstable", - "tantivy-stacker", -] - -[[package]] -name = "tantivy-common" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8019e3cabcfd20a1380b491e13ff42f57bb38bf97c3d5fa5c07e50816e0621f4" -dependencies = [ - "async-trait", - "byteorder", - "ownedbytes", - "serde", - "time", -] - -[[package]] -name = "tantivy-fst" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d60769b80ad7953d8a7b2c70cdfe722bbcdcac6bccc8ac934c40c034d866fc18" -dependencies = [ - "byteorder", - "regex-syntax 0.8.4", - "utf8-ranges", -] - -[[package]] -name = "tantivy-query-grammar" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847434d4af57b32e309f4ab1b4f1707a6c566656264caa427ff4285c4d9d0b82" -dependencies = [ - "nom", -] - -[[package]] -name = "tantivy-sstable" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c69578242e8e9fc989119f522ba5b49a38ac20f576fc778035b96cc94f41f98e" -dependencies = [ - "tantivy-bitpacker", - "tantivy-common", - "tantivy-fst", - "zstd", -] - -[[package]] -name = "tantivy-stacker" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56d6ff5591fc332739b3ce7035b57995a3ce29a93ffd6012660e0949c956ea8" -dependencies = [ - "murmurhash32", - "rand_distr", - "tantivy-common", -] - -[[package]] -name = "tantivy-tokenizer-api" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0dcade25819a89cfe6f17d932c9cedff11989936bf6dd4f336d50392053b04" -dependencies = [ - "serde", -] - [[package]] name = "tao" version = "0.28.1" @@ -5930,22 +4242,11 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.10", + "rustls", "rustls-pki-types", "tokio", ] -[[package]] -name = "tokio-stream" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-util" version = "0.7.11" @@ -6031,24 +4332,6 @@ dependencies = [ "tokio", "tower-layer", "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" -dependencies = [ - "bitflags 2.5.0", - "bytes", - "http", - "http-body", - "http-body-util", - "pin-project-lite", - "tower-layer", - "tower-service", - "tracing", ] [[package]] @@ -6069,7 +4352,6 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -6134,7 +4416,7 @@ dependencies = [ "cocoa", "core-graphics", "crossbeam-channel", - "dirs 5.0.1", + "dirs", "libappindicator", "muda", "objc", @@ -6230,36 +4512,12 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-properties" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" - [[package]] name = "unicode-segmentation" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - [[package]] name = "untrusted" version = "0.9.0" @@ -6278,12 +4536,6 @@ dependencies = [ "serde", ] -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - [[package]] name = "urlpattern" version = "0.2.0" @@ -6303,62 +4555,19 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf8-ranges" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" - [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "utoipa" -version = "5.0.0-alpha.0" -source = "git+https://github.com/juhaku/utoipa#d020f92a0446adc7e99999aa9e1be63e95728fbb" -dependencies = [ - "indexmap 2.2.6", - "serde", - "serde_json", - "serde_yaml", - "utoipa-gen", -] - -[[package]] -name = "utoipa-gen" -version = "5.0.0-alpha.0" -source = "git+https://github.com/juhaku/utoipa#d020f92a0446adc7e99999aa9e1be63e95728fbb" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.67", - "uuid", -] - -[[package]] -name = "utoipa-scalar" -version = "0.2.0-alpha.0" -source = "git+https://github.com/juhaku/utoipa#d020f92a0446adc7e99999aa9e1be63e95728fbb" -dependencies = [ - "axum", - "serde", - "serde_json", - "utoipa", -] - [[package]] name = "uuid" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" dependencies = [ - "atomic", "getrandom 0.2.15", - "serde", ] [[package]] @@ -6367,12 +4576,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version-compare" version = "0.2.0" @@ -6436,12 +4639,6 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - [[package]] name = "wasm-bindgen" version = "0.2.92" @@ -6508,15 +4705,6 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" -[[package]] -name = "wasm-encoder" -version = "0.209.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4a05336882dae732ce6bd48b7e11fe597293cb72c13da4f35d7d5f8d53b2a7" -dependencies = [ - "leb128", -] - [[package]] name = "wasm-streams" version = "0.4.0" @@ -6530,279 +4718,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.209.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07035cc9a9b41e62d3bb3a3815a66ab87c993c06fe1cf6b2a3f2a18499d937db" -dependencies = [ - "ahash", - "bitflags 2.5.0", - "hashbrown 0.14.5", - "indexmap 2.2.6", - "semver", - "serde", -] - -[[package]] -name = "wasmprinter" -version = "0.209.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceca8ae6eaa8c7c87b33c25c53bdf299f8c2a764aee1179402ff7652ef3a6859" -dependencies = [ - "anyhow", - "wasmparser", -] - -[[package]] -name = "wasmtime" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786d8b5e7a4d54917c5ebe555b9667337e5f93383f49bddaaeec2eba68093b45" -dependencies = [ - "anyhow", - "async-trait", - "bumpalo", - "cc", - "cfg-if", - "encoding_rs", - "hashbrown 0.14.5", - "indexmap 2.2.6", - "libc", - "libm", - "log", - "mach2", - "memfd", - "memoffset", - "object", - "once_cell", - "paste", - "postcard", - "psm", - "rustix", - "semver", - "serde", - "serde_derive", - "smallvec", - "sptr", - "target-lexicon", - "wasmparser", - "wasmtime-asm-macros", - "wasmtime-component-macro", - "wasmtime-component-util", - "wasmtime-cranelift", - "wasmtime-environ", - "wasmtime-fiber", - "wasmtime-jit-icache-coherence", - "wasmtime-slab", - "wasmtime-versioned-export-macros", - "wasmtime-winch", - "windows-sys 0.52.0", -] - -[[package]] -name = "wasmtime-asm-macros" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d697d99c341d4a9ffb72f3af7a02124d233eeb59aee010f36d88e97cca553d5e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "wasmtime-component-macro" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b29b462b068e73b5b27fae092a27f47e5937cabf6b26be2779c978698a52feca" -dependencies = [ - "anyhow", - "proc-macro2", - "quote", - "syn 2.0.67", - "wasmtime-component-util", - "wasmtime-wit-bindgen", - "wit-parser", -] - -[[package]] -name = "wasmtime-component-util" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d2912c53d9054984b380dfbd7579f9c3681b2a73b903a56bd71a1c4f175f1e" - -[[package]] -name = "wasmtime-cranelift" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3975deafea000457ba84355c7c0fce0372937204f77026510b7b454f28a3a65" -dependencies = [ - "anyhow", - "cfg-if", - "cranelift-codegen", - "cranelift-control", - "cranelift-entity", - "cranelift-frontend", - "cranelift-native", - "cranelift-wasm", - "gimli 0.28.1", - "log", - "object", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-environ", - "wasmtime-versioned-export-macros", -] - -[[package]] -name = "wasmtime-environ" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f444e900e848b884d8a8a2949b6f5b92af642a3e663ff8fbe78731143a55be61" -dependencies = [ - "anyhow", - "cranelift-entity", - "gimli 0.28.1", - "indexmap 2.2.6", - "log", - "object", - "postcard", - "serde", - "serde_derive", - "target-lexicon", - "wasm-encoder", - "wasmparser", - "wasmprinter", - "wasmtime-component-util", - "wasmtime-types", -] - -[[package]] -name = "wasmtime-fiber" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ded58eb2d1bf0dcd2182d0ccd7055c4b10b50d711514f1d73f61515d0fa829d" -dependencies = [ - "anyhow", - "cc", - "cfg-if", - "rustix", - "wasmtime-asm-macros", - "wasmtime-versioned-export-macros", - "windows-sys 0.52.0", -] - -[[package]] -name = "wasmtime-jit-icache-coherence" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5afe2f0499542f9a4bcfa1b55bfdda803b6ade4e7c93c6b99e0f39dba44b0a91" -dependencies = [ - "anyhow", - "cfg-if", - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "wasmtime-slab" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7de1f2bec5bbb35d532e61c85c049dc84ae671df60492f90b954ecf21169e7" - -[[package]] -name = "wasmtime-types" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "412463e9000e14cf6856be48628d2213c20c153e29ffc22b036980c892ea6964" -dependencies = [ - "cranelift-entity", - "serde", - "serde_derive", - "smallvec", - "wasmparser", -] - -[[package]] -name = "wasmtime-versioned-export-macros" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de5a9bc4f44ceeb168e9e8e3be4e0b4beb9095b468479663a9e24c667e36826f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.67", -] - -[[package]] -name = "wasmtime-wasi" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8abb1301089ed8e0b4840f539cba316a73ac382090f1b25d22d8c8eed8df49c7" -dependencies = [ - "anyhow", - "async-trait", - "bitflags 2.5.0", - "bytes", - "cap-fs-ext", - "cap-net-ext", - "cap-rand", - "cap-std", - "cap-time-ext", - "fs-set-times", - "futures", - "io-extras", - "io-lifetimes", - "once_cell", - "rustix", - "system-interface", - "thiserror", - "tokio", - "tracing", - "url", - "wasmtime", - "wiggle", - "windows-sys 0.52.0", -] - -[[package]] -name = "wasmtime-winch" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed4db238a0241df2d15f79ad17b3a37a27f2ea6cb885894d81b42ae107544466" -dependencies = [ - "anyhow", - "cranelift-codegen", - "gimli 0.28.1", - "object", - "target-lexicon", - "wasmparser", - "wasmtime-cranelift", - "wasmtime-environ", - "winch-codegen", -] - -[[package]] -name = "wasmtime-wit-bindgen" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc077306b38288262e5ba01d4b21532a6987416cdc0aedf04bb06c22a68fdc" -dependencies = [ - "anyhow", - "heck 0.4.1", - "indexmap 2.2.6", - "wit-parser", -] - -[[package]] -name = "wast" -version = "35.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" -dependencies = [ - "leb128", -] - [[package]] name = "wayland-sys" version = "0.31.2" @@ -6868,12 +4783,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - [[package]] name = "webpki-roots" version = "0.26.3" @@ -6919,58 +4828,6 @@ dependencies = [ "windows-core 0.56.0", ] -[[package]] -name = "whoami" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" -dependencies = [ - "redox_syscall 0.4.1", - "wasite", -] - -[[package]] -name = "wiggle" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29830e5d01c182d24b94092c697aa7ab0ee97d22e78a2bf40ca91eae6ebca5c2" -dependencies = [ - "anyhow", - "async-trait", - "bitflags 2.5.0", - "thiserror", - "tracing", - "wasmtime", - "wiggle-macro", -] - -[[package]] -name = "wiggle-generate" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557567f2793508760cd855f7659b7a0b9dc4dbc451f53f1415d6943a15311ade" -dependencies = [ - "anyhow", - "heck 0.4.1", - "proc-macro2", - "quote", - "shellexpand", - "syn 2.0.67", - "witx", -] - -[[package]] -name = "wiggle-macro" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc26129a8aea20b62c961d1b9ab4a3c3b56b10042ed85d004f8678af0f21ba6e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.67", - "wiggle-generate", -] - [[package]] name = "winapi" version = "0.3.9" @@ -7002,23 +4859,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "winch-codegen" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c6915884e731b2db0d8cf08cb64474cb69221a161675fd3c135f91febc3daa" -dependencies = [ - "anyhow", - "cranelift-codegen", - "gimli 0.28.1", - "regalloc2", - "smallvec", - "target-lexicon", - "wasmparser", - "wasmtime-cranelift", - "wasmtime-environ", -] - [[package]] name = "window-vibrancy" version = "0.5.0" @@ -7380,46 +5220,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "winx" -version = "0.36.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9643b83820c0cd246ecabe5fa454dd04ba4fa67996369466d0747472d337346" -dependencies = [ - "bitflags 2.5.0", - "windows-sys 0.52.0", -] - -[[package]] -name = "wit-parser" -version = "0.209.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e79b9e3c0b6bb589dec46317e645851e0db2734c44e2be5e251b03ff4a51269" -dependencies = [ - "anyhow", - "id-arena", - "indexmap 2.2.6", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - -[[package]] -name = "witx" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" -dependencies = [ - "anyhow", - "log", - "thiserror", - "wast", -] - [[package]] name = "wry" version = "0.40.1" @@ -7511,7 +5311,7 @@ dependencies = [ "blocking", "derivative", "enumflags2", - "event-listener 5.3.1", + "event-listener", "futures-core", "futures-sink", "futures-util", @@ -7557,60 +5357,12 @@ dependencies = [ "zvariant", ] -[[package]] -name = "zerocopy" -version = "0.7.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.67", -] - [[package]] name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -[[package]] -name = "zstd" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d789b1514203a1120ad2429eae43a7bd32b90976a7bb8a05f7ec02fa88cc23a" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd99b45c6bc03a018c8b8a86025678c87e55526064e38f9df301989dce7ec0a" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.11+zstd.1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" -dependencies = [ - "cc", - "pkg-config", -] - [[package]] name = "zvariant" version = "4.0.0" diff --git a/Cargo.toml b/Cargo.toml index 6a6a41e..7b807af 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ workspace.resolver = "2" -workspace.members = ["apps/*", "crates/*", "ui/src-tauri"] +workspace.members = ["ui/src-tauri"] [profile.wasm-debug] inherits = "dev" diff --git a/bun.lockb b/bun.lockb old mode 100644 new mode 100755 index 4a14181..ccfe3b3 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/docs/src/content/docs/dream.md b/docs/src/content/docs/dream.md index 91d8fdb..eb6ba1a 100644 --- a/docs/src/content/docs/dream.md +++ b/docs/src/content/docs/dream.md @@ -23,6 +23,14 @@ This app takes inspiration from many similar apps, such as Anytype, Logseq, Noti - Multiuser - Google docs like interface for docs / typst +## Development Principles + +These are the goals for panorama development. + +- **Local first.** Everything is first committed to a local database. +- **Keyboard friendly.** +- **Gradual adoption.** + ## Custom Apps List - File Backup diff --git a/package.json b/package.json index 59151fa..1ccb2b0 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,13 @@ { - "name": "panorama", - "private": true, - "workspaces": [ - "packages/*", - "apps/*" - ] + "name": "panorama", + "private": true, + "workspaces": [ + "packages/*", + "apps/*" + ], + "trustedDependencies": [ + "electron", + "esbuild", + "sqlite3" + ] } \ No newline at end of file diff --git a/packages/panorama-daemon/package.json b/packages/panorama-daemon/package.json index c48912f..961ca93 100644 --- a/packages/panorama-daemon/package.json +++ b/packages/panorama-daemon/package.json @@ -6,6 +6,7 @@ "@biomejs/biome": "^1.8.3", "@types/bun": "latest", "@types/koa-json": "^2.0.23", + "@types/koa__cors": "^5.0.0", "@types/koa__router": "^12.0.4" }, "peerDependencies": { @@ -13,6 +14,7 @@ }, "dependencies": { "@koa/bodyparser": "^5.1.1", + "@koa/cors": "^5.0.0", "@koa/router": "^12.0.1", "koa": "^2.15.3", "koa-json": "^2.0.2", diff --git a/packages/panorama-daemon/src/index.ts b/packages/panorama-daemon/src/index.ts index a69cbd1..c016a5b 100644 --- a/packages/panorama-daemon/src/index.ts +++ b/packages/panorama-daemon/src/index.ts @@ -1,4 +1,5 @@ import Koa, { type Context } from "koa"; +import cors from "@koa/cors"; import json from "koa-json"; import Router from "@koa/router"; import { dataSource } from "./db"; @@ -10,11 +11,17 @@ import { bodyParser } from "@koa/bodyparser"; const app = new Koa(); const router = new Router(); +app.use(cors()); app.use(json()); app.use(bodyParser()); app.use(async (ctx, next) => { - console.log("Got a request from %s for %s", ctx.request.ip, ctx.method, ctx.path); + console.log( + "Got a request from %s for %s", + ctx.request.ip, + ctx.method, + ctx.path, + ); return next(); }); diff --git a/ui/.gitignore b/ui/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/ui/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/ui/.vscode/extensions.json b/ui/.vscode/extensions.json new file mode 100644 index 0000000..24d7cc6 --- /dev/null +++ b/ui/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"] +} diff --git a/ui/README.md b/ui/README.md new file mode 100644 index 0000000..102e366 --- /dev/null +++ b/ui/README.md @@ -0,0 +1,7 @@ +# Tauri + React + Typescript + +This template should help get you started developing with Tauri, React and Typescript in Vite. + +## Recommended IDE Setup + +- [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) diff --git a/ui/bun.lockb b/ui/bun.lockb new file mode 100755 index 0000000..e411667 Binary files /dev/null and b/ui/bun.lockb differ diff --git a/ui/index.html b/ui/index.html new file mode 100644 index 0000000..ff93803 --- /dev/null +++ b/ui/index.html @@ -0,0 +1,14 @@ + + + + + + + Tauri + React + Typescript + + + +
+ + + diff --git a/ui/package.json b/ui/package.json new file mode 100644 index 0000000..fd71271 --- /dev/null +++ b/ui/package.json @@ -0,0 +1,59 @@ +{ + "name": "panorama", + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "tauri": "tauri" + }, + "dependencies": { + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.5", + "@floating-ui/react": "^0.26.16", + "@fontsource/inter": "^5.0.18", + "@mui/icons-material": "^5.15.18", + "@mui/material": "^5.15.18", + "@react-spring/web": "^9.7.3", + "@remark-embedder/core": "^3.0.3", + "@tanstack/react-query": "^5.37.1", + "@tauri-apps/api": "^1", + "@tauri-apps/plugin-window-state": "2.0.0-beta.6", + "@uidotdev/usehooks": "^2.4.1", + "@uiw/react-md-editor": "^4.0.4", + "classnames": "^2.5.1", + "date-fns": "^3.6.0", + "formik": "^2.4.6", + "hast-util-to-jsx-runtime": "^2.3.0", + "hast-util-to-mdast": "^10.1.0", + "immutable": "^4.3.6", + "javascript-time-ago": "^2.5.10", + "jotai": "^2.8.1", + "katex": "^0.16.10", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-markdown": "^9.0.1", + "react-time-ago": "^7.3.3", + "rehype-katex": "^7.0.0", + "remark": "^15.0.1", + "remark-math": "^6.0.0", + "remark-rehype": "^11.1.0", + "use-debounce": "^10.0.1", + "uuidv7": "^1.0.0", + "vfile": "^6.0.1" + }, + "devDependencies": { + "@tauri-apps/cli": "2.0.0-beta.20", + "@types/mdast": "^4.0.4", + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@vitejs/plugin-react": "^4.2.1", + "rollup-plugin-visualizer": "^5.12.0", + "sass": "^1.77.2", + "typescript": "^5.0.2", + "vite": "^5.0.0" + } +} diff --git a/ui/public/tauri.svg b/ui/public/tauri.svg new file mode 100644 index 0000000..31b62c9 --- /dev/null +++ b/ui/public/tauri.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/ui/public/vite.svg b/ui/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/ui/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/src-tauri/.gitignore b/ui/src-tauri/.gitignore new file mode 100644 index 0000000..b21bd68 --- /dev/null +++ b/ui/src-tauri/.gitignore @@ -0,0 +1,7 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + +# Generated by Tauri +# will have schema files for capabilities auto-completion +/gen/schemas diff --git a/ui/src-tauri/Cargo.toml b/ui/src-tauri/Cargo.toml new file mode 100644 index 0000000..06b17ea --- /dev/null +++ b/ui/src-tauri/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "panorama" +version = "0.1.0" +description = "A Tauri App" +authors = ["you"] +edition = "2021" + +[lib] +name = "app_lib" +crate-type = [ + "staticlib", + "cdylib", + # "rlib", + "lib", +] + +[build-dependencies] +tauri-build = { version = "2.0.0-beta", features = [] } + +[dependencies] +clap = { version = "4.5.7", features = ["derive"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tauri = { version = "2.0.0-beta", features = [] } +tauri-build = { version = "2.0.0-beta.17", features = ["config-toml"] } +tauri-plugin-http = "2.0.0-beta.9" +tauri-plugin-shell = "2.0.0-beta.7" +tauri-plugin-single-instance = "2.0.0-beta.9" +tauri-plugin-window-state = "2.0.0-beta" +tokio = { version = "1.38.0", features = ["full"] } +tracing-subscriber = "0.3.18" + +[features] +# This feature is used for production builds or when a dev server is not specified, DO NOT REMOVE!! +custom-protocol = ["tauri/custom-protocol"] diff --git a/ui/src-tauri/build.rs b/ui/src-tauri/build.rs new file mode 100644 index 0000000..795b9b7 --- /dev/null +++ b/ui/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/ui/src-tauri/capabilities/migrated.json b/ui/src-tauri/capabilities/migrated.json new file mode 100644 index 0000000..f15afce --- /dev/null +++ b/ui/src-tauri/capabilities/migrated.json @@ -0,0 +1,31 @@ +{ + "identifier": "migrated", + "description": "permissions that were migrated from v1", + "local": true, + "windows": ["main"], + "permissions": [ + "path:default", + "event:default", + "window:default", + "app:default", + "resources:default", + "menu:default", + "tray:default", + "shell:allow-open", + { + "identifier": "http:default", + "allow": [ + { + "url": "http://localhost:5195/*" + }, + { + "url": "http://localhost:3000/*" + } + ] + }, + "app:allow-app-show", + "app:allow-app-hide", + "shell:default", + "http:default" + ] +} diff --git a/ui/src-tauri/icons/128x128.png b/ui/src-tauri/icons/128x128.png new file mode 100644 index 0000000..35270cb Binary files /dev/null and b/ui/src-tauri/icons/128x128.png differ diff --git a/ui/src-tauri/icons/128x128@2x.png b/ui/src-tauri/icons/128x128@2x.png new file mode 100644 index 0000000..977f127 Binary files /dev/null and b/ui/src-tauri/icons/128x128@2x.png differ diff --git a/ui/src-tauri/icons/32x32.png b/ui/src-tauri/icons/32x32.png new file mode 100644 index 0000000..c43f6ad Binary files /dev/null and b/ui/src-tauri/icons/32x32.png differ diff --git a/ui/src-tauri/icons/Square107x107Logo.png b/ui/src-tauri/icons/Square107x107Logo.png new file mode 100644 index 0000000..2fc3789 Binary files /dev/null and b/ui/src-tauri/icons/Square107x107Logo.png differ diff --git a/ui/src-tauri/icons/Square142x142Logo.png b/ui/src-tauri/icons/Square142x142Logo.png new file mode 100644 index 0000000..948d76e Binary files /dev/null and b/ui/src-tauri/icons/Square142x142Logo.png differ diff --git a/ui/src-tauri/icons/Square150x150Logo.png b/ui/src-tauri/icons/Square150x150Logo.png new file mode 100644 index 0000000..407bf1c Binary files /dev/null and b/ui/src-tauri/icons/Square150x150Logo.png differ diff --git a/ui/src-tauri/icons/Square284x284Logo.png b/ui/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000..c3a323c Binary files /dev/null and b/ui/src-tauri/icons/Square284x284Logo.png differ diff --git a/ui/src-tauri/icons/Square30x30Logo.png b/ui/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000..152ca34 Binary files /dev/null and b/ui/src-tauri/icons/Square30x30Logo.png differ diff --git a/ui/src-tauri/icons/Square310x310Logo.png b/ui/src-tauri/icons/Square310x310Logo.png new file mode 100644 index 0000000..714f276 Binary files /dev/null and b/ui/src-tauri/icons/Square310x310Logo.png differ diff --git a/ui/src-tauri/icons/Square44x44Logo.png b/ui/src-tauri/icons/Square44x44Logo.png new file mode 100644 index 0000000..3fed016 Binary files /dev/null and b/ui/src-tauri/icons/Square44x44Logo.png differ diff --git a/ui/src-tauri/icons/Square71x71Logo.png b/ui/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000..ba1cd58 Binary files /dev/null and b/ui/src-tauri/icons/Square71x71Logo.png differ diff --git a/ui/src-tauri/icons/Square89x89Logo.png b/ui/src-tauri/icons/Square89x89Logo.png new file mode 100644 index 0000000..46af11b Binary files /dev/null and b/ui/src-tauri/icons/Square89x89Logo.png differ diff --git a/ui/src-tauri/icons/StoreLogo.png b/ui/src-tauri/icons/StoreLogo.png new file mode 100644 index 0000000..60f4726 Binary files /dev/null and b/ui/src-tauri/icons/StoreLogo.png differ diff --git a/ui/src-tauri/icons/icon.icns b/ui/src-tauri/icons/icon.icns new file mode 100644 index 0000000..0821eef Binary files /dev/null and b/ui/src-tauri/icons/icon.icns differ diff --git a/ui/src-tauri/icons/icon.ico b/ui/src-tauri/icons/icon.ico new file mode 100644 index 0000000..987c040 Binary files /dev/null and b/ui/src-tauri/icons/icon.ico differ diff --git a/ui/src-tauri/icons/icon.png b/ui/src-tauri/icons/icon.png new file mode 100644 index 0000000..1fd567e Binary files /dev/null and b/ui/src-tauri/icons/icon.png differ diff --git a/ui/src-tauri/src/lib.rs b/ui/src-tauri/src/lib.rs new file mode 100644 index 0000000..d4d1e86 --- /dev/null +++ b/ui/src-tauri/src/lib.rs @@ -0,0 +1,30 @@ +use tauri::Manager; + +// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command +#[tauri::command] +fn greet(name: &str) -> String { + format!("Hello, {}! You've been greeted from Rust!", name) +} + +#[derive(Clone, serde::Serialize)] +struct Payload { + args: Vec, + cwd: String, +} + +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub fn run() { + tauri::Builder::default() + .plugin(tauri_plugin_http::init()) + .plugin(tauri_plugin_shell::init()) + .plugin(tauri_plugin_single_instance::init(|app, argv, cwd| { + println!("{}, {argv:?}, {cwd}", app.package_info().name); + app + .emit("single-instance", Payload { args: argv, cwd }) + .unwrap(); + })) + .plugin(tauri_plugin_window_state::Builder::default().build()) + .invoke_handler(tauri::generate_handler![greet]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} diff --git a/ui/src-tauri/src/main.rs b/ui/src-tauri/src/main.rs new file mode 100644 index 0000000..077928a --- /dev/null +++ b/ui/src-tauri/src/main.rs @@ -0,0 +1,25 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +use clap::{Parser, Subcommand}; + +#[derive(Parser, Debug)] +struct Opt { + #[clap(subcommand)] + command: Option, +} + +#[derive(Subcommand, Debug)] +enum Command {} + +#[tokio::main] +async fn main() { + tracing_subscriber::fmt::init(); + let opt = Opt::parse(); + + match opt.command { + Some(_) => {} + None => { + app_lib::run(); + } + } +} diff --git a/ui/src-tauri/tauri.conf.json b/ui/src-tauri/tauri.conf.json new file mode 100644 index 0000000..9132534 --- /dev/null +++ b/ui/src-tauri/tauri.conf.json @@ -0,0 +1,33 @@ +{ + "build": { + "beforeDevCommand": "pnpm dev", + "beforeBuildCommand": "pnpm build", + "frontendDist": "../dist", + "devUrl": "http://localhost:1420" + }, + "bundle": { + "active": true, + "targets": "all", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] + }, + "identifier": "io.mzhang.panorama", + "plugins": {}, + "app": { + "security": { + "csp": null + }, + "windows": [ + { + "title": "panorama", + "width": 800, + "height": 600 + } + ] + } +} diff --git a/ui/src/App.module.scss b/ui/src/App.module.scss new file mode 100644 index 0000000..ce1d4af --- /dev/null +++ b/ui/src/App.module.scss @@ -0,0 +1,33 @@ +.container { + display: flex; + flex-direction: column; + + min-height: 0; + + width: 100%; + height: 100%; +} + +.main { + flex-grow: 1; + display: flex; +} + +.nodeContainer { + display: flex; + justify-items: stretch; + + padding: 12px; + gap: 12px; + + min-width: 0; + flex-grow: 1; + flex-basis: auto; + overflow-x: scroll; + + // Cribbed from https://www.magicpattern.design/tools/css-backgrounds + background-color: #e5e5f7; + opacity: 0.8; + background-image: radial-gradient(#444cf7 0.5px, #e5e5f7 0.5px); + background-size: 10px 10px; +} \ No newline at end of file diff --git a/ui/src/App.tsx b/ui/src/App.tsx new file mode 100644 index 0000000..73debe1 --- /dev/null +++ b/ui/src/App.tsx @@ -0,0 +1,79 @@ +import Header from "./components/Header"; +import styles from "./App.module.scss"; + +import "@fontsource/inter"; +import "@fontsource/inter/700.css"; +import "./global.scss"; +import "katex/dist/katex.min.css"; +import { useEffect } from "react"; +import NodeDisplay from "./components/NodeDisplay"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import TimeAgo from "javascript-time-ago"; +import en from "javascript-time-ago/locale/en"; +import Sidebar from "./components/Sidebar"; +import { atom, useAtom, useAtomValue } from "jotai"; +import { OrderedSet } from "immutable"; +import { PANORAMA_DAEMON_URL } from "./lib/constants"; + +const queryClient = new QueryClient(); + +TimeAgo.addDefaultLocale(en); + +export const nodesOpenedAtom = atom>(OrderedSet()); + +function App() { + const nodesOpened = useAtomValue(nodesOpenedAtom); + const { openNode } = useNodeControls(); + + // Open today's journal entry if it's not already opened + useEffect(() => { + (async () => { + console.log("ndoes", nodesOpened); + if (nodesOpened.size === 0) { + console.log("Opening today's entry."); + const resp = await fetch( + `${PANORAMA_DAEMON_URL}/journal/get_todays_journal_id`, + ); + const data = await resp.json(); + console.log("resp", data); + openNode(data.node_id); + } + })(); + }, [nodesOpened, openNode]); + + const nodes = [...nodesOpened.reverse().values()].map((nodeId, idx) => ( + + )); + + return ( + +
+
+ +
+ +
{nodes}
+
+
+
+ ); +} + +export default App; + +export function useNodeControls() { + const [nodesOpened, setNodesOpened] = useAtom(nodesOpenedAtom); + return { + isOpen: (node_id: string) => nodesOpened.has(node_id), + toggleNode: (node_id: string) => { + if (nodesOpened.has(node_id)) setNodesOpened(nodesOpened.remove(node_id)); + else setNodesOpened(nodesOpened.remove(node_id).add(node_id)); + }, + openNode: (node_id: string) => { + setNodesOpened(nodesOpened.remove(node_id).add(node_id)); + }, + closeNode: (node_id: string) => { + setNodesOpened(nodesOpened.remove(node_id)); + }, + }; +} diff --git a/ui/src/assets/react.svg b/ui/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/ui/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/src/components/Header.module.scss b/ui/src/components/Header.module.scss new file mode 100644 index 0000000..2771b4b --- /dev/null +++ b/ui/src/components/Header.module.scss @@ -0,0 +1,60 @@ +.Header { + display: flex; + align-items: center; + + padding: 2px 12px; + gap: 12px; + + background: rgb(204, 201, 255); + background: linear-gradient(90deg, rgba(204, 201, 255, 1) 0%, rgba(255, 255, 255, 1) 100%); +} + +.headerBorder { + height: 1px; + background: rgb(170, 166, 255); + background: linear-gradient(90deg, rgba(170, 166, 255, 1) 0%, rgba(255, 255, 255, 1) 100%); +} + +.brand { + display: flex; + flex-direction: column; + text-align: right; + + .title { + font-size: 1.2em; + margin: 0; + } + + .version { + font-size: .6em; + color: rgb(0, 0, 0, 0.5); + margin: 0; + } +} + +.newNodeMenu { + background-color: rgba(255, 255, 255, 0.5); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(10px); + box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.25); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + + ul { + display: flex; + flex-direction: column; + padding: 0; + list-style-type: none; + + li { + display: flex; + flex-direction: column; + align-items: stretch; + + button { + cursor: pointer; + display: flex; + } + } + } +} \ No newline at end of file diff --git a/ui/src/components/Header.tsx b/ui/src/components/Header.tsx new file mode 100644 index 0000000..bbac0d7 --- /dev/null +++ b/ui/src/components/Header.tsx @@ -0,0 +1,134 @@ +import styles from "./Header.module.scss"; +import NoteAddIcon from "@mui/icons-material/NoteAdd"; +import SearchBar from "./SearchBar"; +import ListIcon from "@mui/icons-material/List"; +import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown"; +import { useSetAtom } from "jotai"; +import { sidebarExpandedAtom } from "./Sidebar"; +import { useNodeControls } from "../App"; +import { useCallback, useState } from "react"; +import { useQuery } from "@tanstack/react-query"; +import { getVersion } from "@tauri-apps/api/app"; +import { + FloatingOverlay, + FloatingPortal, + autoUpdate, + useDismiss, + useFloating, + useFocus, + useInteractions, +} from "@floating-ui/react"; +import { PANORAMA_DAEMON_URL } from "../lib/constants"; + +export default function Header() { + const { openNode } = useNodeControls(); + const setSidebarExpanded = useSetAtom(sidebarExpandedAtom); + const versionData = useQuery({ + queryKey: ["appVersion"], + queryFn: getVersion, + }); + const { data: version } = versionData; + console.log("version", version); + + const createNewJournalPage = useCallback(() => { + (async () => { + const resp = await fetch(`${PANORAMA_DAEMON_URL}/node`, { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + type: "panorama/journal/page", + extra_data: { + "panorama/journal/page/content": "", + }, + }), + }); + const data = await resp.json(); + openNode(data.node_id); + })(); + }, [openNode]); + + return ( + <> +
+ + +
+ + +
+
+
+ Panorama + v{version} +
+
+
+ + ); +} + +function NewNodeButton() { + const [showMenu, setShowMenu] = useState(false); + const { refs, context, floatingStyles } = useFloating({ + placement: "bottom-start", + open: showMenu, + onOpenChange: setShowMenu, + whileElementsMounted: autoUpdate, + // middleware: [offset(10)], + }); + const focus = useFocus(context); + const { getReferenceProps, getFloatingProps } = useInteractions([ + focus, + useDismiss(context), + ]); + + return ( + <> + + + {showMenu && ( + + +
+ +
+
+
+ )} + + ); +} + +function NewNodeMenu() { + return ( +
+
    +
  • + +
  • +
  • + +
  • +
+
+ ); +} diff --git a/ui/src/components/NodeDisplay.module.scss b/ui/src/components/NodeDisplay.module.scss new file mode 100644 index 0000000..9950d01 --- /dev/null +++ b/ui/src/components/NodeDisplay.module.scss @@ -0,0 +1,74 @@ +.container { + flex-shrink: 0; + + width: 500px; + overflow-wrap: break-word; + overflow-y: auto; + + border: 1px solid lightgray; + border-radius: 4px; + + display: flex; + align-items: stretch; + flex-direction: column; + + resize: horizontal; + + background-color: rgba(255, 255, 255, 0.5); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); +} + +.header { + color: rgb(106, 103, 160); + background: rgb(204, 201, 255); + background: linear-gradient(90deg, rgba(204, 201, 255, 1) 0%, rgba(255, 255, 255, 1) 100%); + + font-size: 0.6rem; + display: flex; + align-items: stretch; + padding: 0 6px; + + button { + background-color: transparent; + border: none; + display: flex; + justify-content: center; + cursor: pointer; + align-items: center; + + &:hover { + background-color: rgba(0, 0, 0, 0.25); + } + + &.closeButton:hover { + background-color: red; + color: white; + } + } + + span { + padding: 6px; + } +} + +.footer { + padding: 2px 12px; + font-size: 0.6rem; + align-self: flex-start; + + // For the resize handle + // TODO: Make the entire right side resize and then remove this + width: calc(100% - 20px); + // border: 1px solid red; + // box-sizing: border-box; +} + +.body { + flex-grow: 1; + + // padding: 12px; + + display: flex; + flex-direction: column; +} \ No newline at end of file diff --git a/ui/src/components/NodeDisplay.tsx b/ui/src/components/NodeDisplay.tsx new file mode 100644 index 0000000..3be2470 --- /dev/null +++ b/ui/src/components/NodeDisplay.tsx @@ -0,0 +1,89 @@ +import { useQuery } from "@tanstack/react-query"; +import styles from "./NodeDisplay.module.scss"; +import ReactTimeAgo from "react-time-ago"; +import { getNode } from "../lib/getNode"; +import FirstPageIcon from "@mui/icons-material/FirstPage"; +import MoreVertIcon from "@mui/icons-material/MoreVert"; +import CloseIcon from "@mui/icons-material/Close"; +import { useNodeControls } from "../App"; + +export interface NodeDisplayProps { + id: string; + idx?: number | undefined; +} + +export default function NodeDisplay({ id, idx }: NodeDisplayProps) { + const query = useQuery({ + queryKey: ["fetchNode", id], + queryFn: getNode, + }); + + const { isSuccess, status, data: nodeDescriptor } = query; + + let Component = undefined; + let data = undefined; + if (isSuccess) { + Component = nodeDescriptor.render; + data = nodeDescriptor.data; + } + + return ( +
+
+ {isSuccess ? ( + + ) : ( + <> + ID {id} ({status}) + + )} +
+ +
+ {Component && } +
+ +
{id}
+
+ ); +} + +function NodeDisplayHeaderLoaded({ idx, id, data }) { + const { openNode, closeNode } = useNodeControls(); + const updatedAt = data.updated_at && Date.parse(data.updated_at); + + return ( + <> + {idx === 0 || ( + + )} + + Type {data.type}{" "} + {updatedAt && ( + <> + · Last updated + + )} + +
+ + + + + + ); +} diff --git a/ui/src/components/SearchBar.module.scss b/ui/src/components/SearchBar.module.scss new file mode 100644 index 0000000..3bf84a0 --- /dev/null +++ b/ui/src/components/SearchBar.module.scss @@ -0,0 +1,54 @@ +.menu { + background-color: rgba(255, 255, 255, 0.5); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(10px); + box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.25); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + + width: 500px; + min-height: 200px; + + padding: 6px; + + text-wrap: wrap; + white-space: pre-wrap; + word-wrap: break-word; + overflow-wrap: break-word; +} + +.entry { + padding: 2px 6px; + font-size: 14pt; + border-radius: 4px; + border: none; + outline: none; +} + +.searchResults { + display: flex; + flex-direction: column; + align-items: stretch; +} + +.searchResult { + padding: 12px; + cursor: pointer; + border-radius: 4px; + text-align: left; + background-color: unset; + border: none; + + &:hover { + background-color: rgba(0, 0, 0, 0.05); + } + + .title { + font-size: 1rem; + } + + .subtitle { + font-size: .75rem; + color: rgba(0, 0, 0, 0.8); + } +} \ No newline at end of file diff --git a/ui/src/components/SearchBar.tsx b/ui/src/components/SearchBar.tsx new file mode 100644 index 0000000..57fbde7 --- /dev/null +++ b/ui/src/components/SearchBar.tsx @@ -0,0 +1,116 @@ +import styles from "./SearchBar.module.scss"; +import { + FloatingOverlay, + FloatingPortal, + autoUpdate, + offset, + useDismiss, + useFloating, + useFocus, + useInteractions, +} from "@floating-ui/react"; +import { useCallback, useEffect, useState } from "react"; +import { atom, useAtom, useSetAtom } from "jotai"; +import { useNodeControls } from "../App"; +import { useDebounce, useDebouncedCallback } from "use-debounce"; + +const searchQueryAtom = atom(""); +const showMenuAtom = atom(false); + +export default function SearchBar() { + const [showMenu, setShowMenu] = useAtom(showMenuAtom); + const [searchQuery, setSearchQuery] = useAtom(searchQueryAtom); + const [searchResults, setSearchResults] = useState([]); + + const { refs, context, floatingStyles } = useFloating({ + placement: "bottom-start", + open: showMenu, + onOpenChange: setShowMenu, + whileElementsMounted: autoUpdate, + middleware: [offset(10)], + }); + const focus = useFocus(context); + const { getReferenceProps, getFloatingProps } = useInteractions([ + focus, + useDismiss(context), + ]); + + const performSearch = useCallback(() => { + const trimmed = searchQuery.trim(); + if (trimmed === "") return; + + (async () => { + const params = new URLSearchParams(); + params.set("query", trimmed); + const resp = await fetch( + `http://localhost:5195/node/search?${params.toString()}`, + ); + const data = await resp.json(); + setSearchResults(data.results); + })(); + }, [searchQuery]); + + return ( + <> +
+ setShowMenu(true)} + ref={refs.setReference} + value={searchQuery} + onChange={(evt) => { + setSearchQuery(evt.target.value); + if (evt.target.value) performSearch(); + else setSearchResults([]); + }} + {...getReferenceProps()} + /> +
+ + {showMenu && ( + + +
+ +
+
+
+ )} + + ); +} + +function SearchMenu({ results }) { + const setSearchQuery = useSetAtom(searchQueryAtom); + const setShowMenu = useSetAtom(showMenuAtom); + const { openNode } = useNodeControls(); + + return ( +
+ {results.map((result) => { + return ( + + ); + })} +
+ ); +} diff --git a/ui/src/components/Sidebar.module.scss b/ui/src/components/Sidebar.module.scss new file mode 100644 index 0000000..37d0db5 --- /dev/null +++ b/ui/src/components/Sidebar.module.scss @@ -0,0 +1,39 @@ +.sidebar { + display: flex; + flex-direction: column; + gap: 6px; + + background-color: rgba(204, 201, 255); + padding: 12px 6px; + + &.expanded { + padding: 12px; + } + + .item { + display: flex; + align-items: center; + padding: 6px; + font-size: 0.95em; + border-radius: 4px; + border: none; + background-color: unset; + + &:hover { + background-color: rgba(255, 255, 255, 0.2); + cursor: pointer; + } + + &.active { + background-color: rgba(255, 255, 255, 0.75); + } + } + + &.expanded .item { + gap: 6px; + } + + &.collapsed .item .label { + display: none; + } +} \ No newline at end of file diff --git a/ui/src/components/Sidebar.tsx b/ui/src/components/Sidebar.tsx new file mode 100644 index 0000000..0c98878 --- /dev/null +++ b/ui/src/components/Sidebar.tsx @@ -0,0 +1,41 @@ +import { atom, useAtomValue } from "jotai"; +import styles from "./Sidebar.module.scss"; +import classNames from "classnames"; +import EmailIcon from "@mui/icons-material/Email"; +import SettingsIcon from "@mui/icons-material/Settings"; +import { useNodeControls } from "../App"; + +export const sidebarExpandedAtom = atom(false); + +export default function Sidebar() { + const sidebarExpanded = useAtomValue(sidebarExpandedAtom); + const { toggleNode, isOpen } = useNodeControls(); + + return ( +
+ + +
+ +
+ + Settings +
+
+ ); +} diff --git a/ui/src/components/nodes/JournalPage.module.scss b/ui/src/components/nodes/JournalPage.module.scss new file mode 100644 index 0000000..af4b3c3 --- /dev/null +++ b/ui/src/components/nodes/JournalPage.module.scss @@ -0,0 +1,61 @@ +.container { + flex-grow: 1; + display: flex; + flex-direction: column; +} + +.titleContainer, +.titleEditorForm { + display: flex; +} + +.title, +.titleEditor { + flex-grow: 1; + padding: 12px; + border: none; + border-bottom: 1px solid lightgray; + outline: none; + font-size: 1.2em; +} + +.untitled { + color: gray; +} + +.mdContent { + flex-grow: 1; + display: flex; + flex-direction: column; +} + +.mdEditor { + flex-grow: 1; + + border-radius: 0; +} + +.dayIndicator { + background-color: lavender; + padding: 2px 12px; + font-size: 0.8em; +} + +.block { + padding: 12px; + + &:not(.isEditing) { + user-select: none; + -webkit-user-select: none; + } + + &.isEditing { + background-color: rgb(235, 243, 246); + outline: 2px solid skyblue; + } + + &:hover { + background-color: rgb(235, 243, 246); + cursor: text; + } +} \ No newline at end of file diff --git a/ui/src/components/nodes/JournalPage.tsx b/ui/src/components/nodes/JournalPage.tsx new file mode 100644 index 0000000..e4c7665 --- /dev/null +++ b/ui/src/components/nodes/JournalPage.tsx @@ -0,0 +1,132 @@ +import { useCallback, useEffect, useRef, useState } from "react"; +import MDEditor, { PreviewType } from "@uiw/react-md-editor"; +import { usePrevious } from "@uidotdev/usehooks"; +import { useQueryClient } from "@tanstack/react-query"; +import styles from "./JournalPage.module.scss"; +import remarkMath from "remark-math"; +import rehypeKatex from "rehype-katex"; +import { parse as parseDate, format as formatDate } from "date-fns"; +import { useDebounce } from "use-debounce"; +import { + JOURNAL_PAGE_CONTENT_FIELD_NAME, + JOURNAL_PAGE_TITLE_FIELD_NAME, + NodeInfo, +} from "../../lib/data"; + +export interface JournalPageProps { + id: string; + data: NodeInfo; +} + +export default function JournalPage({ id, data }: JournalPageProps) { + const { day } = data; + const queryClient = useQueryClient(); + const [value, setValue] = useState( + () => data?.fields?.[JOURNAL_PAGE_CONTENT_FIELD_NAME], + ); + const [valueToSave] = useDebounce(value, 1000, { + leading: true, + trailing: true, + }); + const previous = usePrevious(valueToSave); + const changed = valueToSave !== previous; + const [mode, setMode] = useState("preview"); + const [title, setTitle] = useState( + () => data?.fields?.[JOURNAL_PAGE_TITLE_FIELD_NAME], + ); + const [isEditingTitle, setIsEditingTitle] = useState(false); + + const saveData = useCallback(async () => { + const extra_data = { + [JOURNAL_PAGE_TITLE_FIELD_NAME]: title, + [JOURNAL_PAGE_CONTENT_FIELD_NAME]: valueToSave, + }; + console.log("extra Data", extra_data); + const resp = await fetch(`http://localhost:5195/node/${id}`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ extra_data }), + }); + const data = await resp.text(); + console.log("result", data); + }, [title, valueToSave, id]); + + useEffect(() => { + if (changed) { + (async () => { + await saveData(); + queryClient.invalidateQueries({ queryKey: ["fetchNode", id] }); + })(); + } + }, [changed, queryClient, saveData]); + + const saveChangedTitle = useCallback(() => { + (async () => { + await saveData(); + setIsEditingTitle(false); + })(); + }, [saveData]); + + return ( + <> + {isEditingTitle ? ( +
{ + evt.preventDefault(); + saveChangedTitle(); + }} + > + { + let newTitle = evt.target.value; + if (newTitle.trim().length === 0) newTitle = null; + setTitle(newTitle); + }} + onBlur={() => saveChangedTitle()} + // biome-ignore lint/a11y/noAutofocus: + autoFocus + /> + + ) : ( +
+
setIsEditingTitle(true)} + > + {title ?? (untitled)} +
+
+ )} +
+ {day && } + + newValue !== undefined && setValue(newValue)} + preview={mode} + visibleDragbar={false} + onDoubleClick={() => setMode("live")} + previewOptions={{ + remarkPlugins: [remarkMath], + rehypePlugins: [rehypeKatex], + }} + /> +
+ + ); +} + +function DayIndicator({ day }) { + const parsedDate = parseDate(day, "yyyy-MM-dd", new Date()); + const formattedDate = formatDate(parsedDate, "PPPP"); + return ( +
+ Journal entry for {formattedDate} +
+ ); +} diff --git a/ui/src/components/nodes/Mail.module.scss b/ui/src/components/nodes/Mail.module.scss new file mode 100644 index 0000000..18d3395 --- /dev/null +++ b/ui/src/components/nodes/Mail.module.scss @@ -0,0 +1,25 @@ +.container { + display: flex; + flex-direction: column; +} + +.header { + display: flex; + align-items: center; + padding: 2px 12px; + + .title { + font-size: 1rem; + } +} + +.settings { + h2 { + margin: 0; + } +} + +.mailList { + flex-grow: 1; + border-top: 1px solid lightgray; +} \ No newline at end of file diff --git a/ui/src/components/nodes/Mail.tsx b/ui/src/components/nodes/Mail.tsx new file mode 100644 index 0000000..73f8fd5 --- /dev/null +++ b/ui/src/components/nodes/Mail.tsx @@ -0,0 +1,168 @@ +import { useCallback, useState } from "react"; +import styles from "./Mail.module.scss"; +import { Formik } from "formik"; +import SettingsIcon from "@mui/icons-material/Settings"; +import { useQuery, useQueryClient } from "@tanstack/react-query"; +import ReactTimeAgo from "react-time-ago"; +import { parseISO } from "date-fns"; + +export default function Mail() { + const [showSettings, setShowSettings] = useState(false); + const fetchedMail = useQuery({ + queryKey: ["mail"], + queryFn: fetchMail, + staleTime: 10000, + }); + + const { isSuccess, data } = fetchedMail; + + return ( +
+
+
+ {showSettings ? <>Settings : <>Mail} +
+
+ +
+ + {showSettings && ( +
+ +
+ )} + +
+ {isSuccess && ( +
    + {data.messages.map((message) => { + const date = parseISO(message.internal_date); + return ( +
  • +
    + + {message.subject} () + + + {message.body} +
    +
  • + ); + })} +
+ )} +
+
+ ); +} + +function MailConfig() { + const queryClient = useQueryClient(); + const config = useQuery({ + queryKey: ["mailConfigs"], + queryFn: fetchMailConfig, + }); + + const { isSuccess, data } = config; + + return ( + <> +
+ Add a new config + { + (async () => { + const resp = await fetch("http://localhost:5195/node", { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + type: "panorama/mail/config", + extra_data: { + "panorama/mail/config/imap_hostname": values.imapHostname, + "panorama/mail/config/imap_port": values.imapPort, + "panorama/mail/config/imap_username": values.imapUsername, + "panorama/mail/config/imap_password": values.imapPassword, + }, + }), + }); + const data = await resp.json(); + console.log("result", data); + queryClient.invalidateQueries({ queryKey: ["mailConfigs"] }); + })(); + }} + initialValues={{ + imapHostname: "", + imapPort: 993, + imapUsername: "", + imapPassword: "", + }} + > + {({ values, handleSubmit, handleChange, handleBlur }) => ( +
+ + +
+ + + +
+ )} +
+
+ +
+ {isSuccess && ( +
    + {data.map((config) => ( +
  • {JSON.stringify(config)}
  • + ))} +
+ )} +
+ + ); +} + +async function fetchMailConfig() { + const resp = await fetch("http://localhost:5195/mail/config"); + const data = await resp.json(); + return data.configs; +} + +async function fetchMail() { + const resp = await fetch("http://localhost:5195/mail"); + const data = await resp.json(); + return data; +} diff --git a/ui/src/global.scss b/ui/src/global.scss new file mode 100644 index 0000000..cb9ead2 --- /dev/null +++ b/ui/src/global.scss @@ -0,0 +1,23 @@ +body, +html { + padding: 0; + margin: 0; + overscroll-behavior: none; + + font-family: "Inter"; +} + +body, +html, +#root { + width: 100%; + height: 100%; +} + +.spacer { + flex-grow: 1; +} + +* { + box-sizing: border-box; +} \ No newline at end of file diff --git a/ui/src/lib/constants.ts b/ui/src/lib/constants.ts new file mode 100644 index 0000000..6f63009 --- /dev/null +++ b/ui/src/lib/constants.ts @@ -0,0 +1 @@ +export const PANORAMA_DAEMON_URL = "http://localhost:3000"; diff --git a/ui/src/lib/data.ts b/ui/src/lib/data.ts new file mode 100644 index 0000000..b94cef8 --- /dev/null +++ b/ui/src/lib/data.ts @@ -0,0 +1,11 @@ +export interface NodeInfo { + fields: Partial; +} + +export const JOURNAL_PAGE_CONTENT_FIELD_NAME = "panorama/journal/page/content"; +export const JOURNAL_PAGE_TITLE_FIELD_NAME = "panorama/journal/page/title"; + +export interface NodeFields { + [JOURNAL_PAGE_CONTENT_FIELD_NAME]: string; + [JOURNAL_PAGE_TITLE_FIELD_NAME]: string; +} diff --git a/ui/src/lib/getNode.ts b/ui/src/lib/getNode.ts new file mode 100644 index 0000000..6b9e905 --- /dev/null +++ b/ui/src/lib/getNode.ts @@ -0,0 +1,35 @@ +import { Component, type FC } from "react"; +import JournalPage from "../components/nodes/JournalPage"; +import Mail from "../components/nodes/Mail"; +import type { QueryFunctionContext } from "@tanstack/react-query"; +import { PANORAMA_DAEMON_URL } from "./constants"; + +export interface RenderProps { + id: string; + data: D; +} + +export interface NodeDescriptor { + render: FC>; + data: { + type: string; + } & D; +} + +export async function getNode({ + queryKey, +}: QueryFunctionContext): Promise> { + const [, node_id] = queryKey; + switch (node_id) { + case "panorama/mail": + return { data: { type: "panorama/mail" }, render: Mail }; + default: { + const resp = await fetch(`${PANORAMA_DAEMON_URL}/node/${node_id}`); + const data = await resp.json(); + return { + data: { ...data, type: "panorama/journal/page" }, + render: JournalPage, + }; + } + } +} diff --git a/ui/src/main.tsx b/ui/src/main.tsx new file mode 100644 index 0000000..2be325e --- /dev/null +++ b/ui/src/main.tsx @@ -0,0 +1,9 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App"; + +ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( + + + , +); diff --git a/ui/src/vite-env.d.ts b/ui/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/ui/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/ui/tsconfig.json b/ui/tsconfig.json new file mode 100644 index 0000000..a7fc6fb --- /dev/null +++ b/ui/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/ui/tsconfig.node.json b/ui/tsconfig.node.json new file mode 100644 index 0000000..42872c5 --- /dev/null +++ b/ui/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/ui/vite.config.ts b/ui/vite.config.ts new file mode 100644 index 0000000..58e738a --- /dev/null +++ b/ui/vite.config.ts @@ -0,0 +1,28 @@ +import { defineConfig, type PluginOption } from "vite"; +import react from "@vitejs/plugin-react"; +import { visualizer } from "rollup-plugin-visualizer"; + +// https://vitejs.dev/config/ +export default defineConfig(async () => ({ + plugins: [ + react(), + visualizer({ + emitFile: true, + filename: "stats.html", + }) as PluginOption, + ], + + // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` + // + // 1. prevent vite from obscuring rust errors + clearScreen: false, + // 2. tauri expects a fixed port, fail if that port is not available + server: { + port: 1420, + strictPort: true, + watch: { + // 3. tell vite to ignore watching `src-tauri` + ignored: ["**/src-tauri/**"], + }, + }, +}));