diff --git a/Cargo.lock b/Cargo.lock index f48e24c8d8d41b82a06b9c1e95c99a05bde16234..ef89cf617a42ac10e1dc6d4d3e9c7c40a5f195f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,23 +77,6 @@ dependencies = [ "opaque-debug 0.3.0", ] -[[package]] -name = "ahash" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" - -[[package]] -name = "ahash" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "796540673305a66d127804eef19ad696f1f204b8c1025aaca4958c17eab32877" -dependencies = [ - "getrandom 0.2.2", - "once_cell", - "version_check", -] - [[package]] name = "ahash" version = "0.7.4" @@ -378,17 +361,6 @@ dependencies = [ "syn", ] -[[package]] -name = "async-rustls" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f38092e8f467f47aadaff680903c7cbfeee7926b058d7f40af2dd4c878fbdee" -dependencies = [ - "futures-lite", - "rustls 0.18.1", - "webpki", -] - [[package]] name = "async-rustls" version = "0.2.0" @@ -396,7 +368,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c86f33abd5a4f3e2d6d9251a9e0c6a7e52eb1113caf893dae8429bf4a53f378" dependencies = [ "futures-lite", - "rustls 0.19.1", + "rustls", "webpki", ] @@ -421,17 +393,6 @@ dependencies = [ "sha2 0.9.5", ] -[[package]] -name = "async-sqlx-session" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b66fb8c6ffbf26cdba6705c36f086b6f02f0b4778b6a348134302a2a00730bc" -dependencies = [ - "async-session", - "async-std", - "sqlx 0.4.2", -] - [[package]] name = "async-sse" version = "4.1.0" @@ -488,7 +449,7 @@ checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400" dependencies = [ "futures-core", "futures-io", - "rustls 0.19.1", + "rustls", "webpki", "webpki-roots", ] @@ -831,28 +792,6 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" -[[package]] -name = "cargo-platform" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0226944a63d1bf35a3b5f948dd7c59e263db83695c9e8bffc4037de02e30f1d7" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714a157da7991e23d90686b9524b9e12e0407a108647f52e9328f4b3d51ac7f" -dependencies = [ - "cargo-platform", - "semver 0.11.0", - "semver-parser 0.10.2", - "serde", - "serde_json", -] - [[package]] name = "cc" version = "1.0.67" @@ -1094,7 +1033,6 @@ version = "0.1.0" dependencies = [ "anyhow", "async-io", - "async-sqlx-session", "async-std", "async-trait", "async-tungstenite", @@ -1125,13 +1063,12 @@ dependencies = [ "project", "rand 0.8.3", "rpc", - "rust-embed", "scrypt", "serde", "serde_json", "settings", "sha-1 0.9.6", - "sqlx 0.5.5", + "sqlx", "surf", "theme", "tide", @@ -2467,9 +2404,6 @@ name = "hashbrown" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" -dependencies = [ - "ahash 0.4.7", -] [[package]] name = "hashbrown" @@ -2477,16 +2411,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "ahash 0.7.4", -] - -[[package]] -name = "hashlink" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d99cf782f0dc4372d26846bec3de7804ceb5df083c2d4462c0b8d2330e894fa8" -dependencies = [ - "hashbrown 0.9.1", + "ahash", ] [[package]] @@ -4408,20 +4333,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustls" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81" -dependencies = [ - "base64 0.12.3", - "log", - "ring", - "sct", - "webpki", + "semver", ] [[package]] @@ -4601,17 +4513,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser 0.7.0", -] - -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser 0.10.2", - "serde", + "semver-parser", ] [[package]] @@ -4620,15 +4522,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - [[package]] name = "serde" version = "1.0.125" @@ -5029,73 +4922,14 @@ dependencies = [ "unicode_categories", ] -[[package]] -name = "sqlx" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1a98f9bf17b690f026b6fec565293a995b46dfbd6293debcb654dcffd2d1b34" -dependencies = [ - "sqlx-core 0.4.2", - "sqlx-macros 0.4.2", -] - [[package]] name = "sqlx" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba82f79b31f30acebf19905bcd8b978f46891b9d0723f578447361a8910b6584" dependencies = [ - "sqlx-core 0.5.5", - "sqlx-macros 0.5.5", -] - -[[package]] -name = "sqlx-core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36bb6a2ca3345a86493bc3b71eabc2c6c16a8bb1aa476cf5303bee27f67627d7" -dependencies = [ - "ahash 0.6.3", - "atoi", - "base64 0.13.0", - "bitflags", - "byteorder", - "bytes 0.5.6", - "chrono", - "crc", - "crossbeam-channel 0.5.0", - "crossbeam-queue", - "crossbeam-utils 0.8.2", - "either", - "futures-channel", - "futures-core", - "futures-util", - "hashlink 0.6.0", - "hex", - "hmac 0.10.1", - "itoa 0.4.7", - "libc", - "log", - "md-5", - "memchr", - "once_cell", - "parking_lot", - "percent-encoding", - "rand 0.7.3", - "rustls 0.18.1", - "serde", - "serde_json", - "sha-1 0.9.6", - "sha2 0.9.5", - "smallvec", - "sqlformat", - "sqlx-rt 0.2.0", - "stringprep", - "thiserror", - "url", - "webpki", - "webpki-roots", - "whoami", + "sqlx-core", + "sqlx-macros", ] [[package]] @@ -5104,7 +4938,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f23af36748ec8ea8d49ef8499839907be41b0b1178a4e82b8cb45d29f531dc9" dependencies = [ - "ahash 0.7.4", + "ahash", "atoi", "base64 0.13.0", "bitflags", @@ -5119,7 +4953,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "hashlink 0.7.0", + "hashlink", "hex", "hmac 0.10.1", "itoa 0.4.7", @@ -5131,14 +4965,14 @@ dependencies = [ "parking_lot", "percent-encoding", "rand 0.8.3", - "rustls 0.19.1", + "rustls", "serde", "serde_json", "sha-1 0.9.6", "sha2 0.9.5", "smallvec", "sqlformat", - "sqlx-rt 0.5.5", + "sqlx-rt", "stringprep", "thiserror", "time 0.2.27", @@ -5149,28 +4983,6 @@ dependencies = [ "whoami", ] -[[package]] -name = "sqlx-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5ada8b3b565331275ce913368565a273a74faf2a34da58c4dc010ce3286844" -dependencies = [ - "cargo_metadata", - "dotenv", - "either", - "futures", - "heck 0.3.3", - "lazy_static", - "proc-macro2", - "quote", - "serde_json", - "sha2 0.9.5", - "sqlx-core 0.4.2", - "sqlx-rt 0.2.0", - "syn", - "url", -] - [[package]] name = "sqlx-macros" version = "0.5.5" @@ -5185,29 +4997,19 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.9.5", - "sqlx-core 0.5.5", - "sqlx-rt 0.5.5", + "sqlx-core", + "sqlx-rt", "syn", "url", ] -[[package]] -name = "sqlx-rt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63fc5454c9dd7aaea3a0eeeb65ca40d06d0d8e7413a8184f7c3a3ffa5056190b" -dependencies = [ - "async-rustls 0.1.2", - "async-std", -] - [[package]] name = "sqlx-rt" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8199b421ecf3493ee9ef3e7bc90c904844cfb2ea7ea2f57347a93f52bfd3e057" dependencies = [ - "async-rustls 0.2.0", + "async-rustls", "async-std", ] diff --git a/crates/collab/Cargo.toml b/crates/collab/Cargo.toml index 34047406a7028f610d5930caaca610839bf13601..22ba90936c573b6955744e28ac3fcd36c2ec3595 100644 --- a/crates/collab/Cargo.toml +++ b/crates/collab/Cargo.toml @@ -37,7 +37,6 @@ oauth2 = { version = "4.0.0", default_features = false } oauth2-surf = "0.1.1" parking_lot = "0.11.1" rand = "0.8" -rust-embed = { version = "6.3", features = ["include-exclude"] } scrypt = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" @@ -48,11 +47,6 @@ tide-compress = "0.9.0" time = "0.2" toml = "0.5.8" -[dependencies.async-sqlx-session] -version = "0.3.0" -features = ["pg", "rustls"] -default-features = false - [dependencies.sqlx] version = "0.5.2" features = ["runtime-async-std-rustls", "postgres", "time", "uuid"] diff --git a/crates/collab/README.md b/crates/collab/README.md index 031e0d024460478573a0f261c73ff75f32237ff6..d7663242558d493de2d7b310d9de07664e581cea 100644 --- a/crates/collab/README.md +++ b/crates/collab/README.md @@ -1,17 +1,5 @@ # Zed Server -This crate is what we run at https://zed.dev. +This crate is what we run at https://collab.zed.dev. -It contains our web presence as well as the backend logic for collaboration, to which we connect from the Zed client via a websocket. - -## Templates - -We use handlebars templates that are interpreted at runtime. When running in debug mode, you can change templates and see the latest content without restarting the server. This is enabled by the `rust-embed` crate, which we use to access the contents of the `/templates` folder at runtime. In debug mode it reads contents from the file system, but in release the templates will be embedded in the server binary. - -## Static assets - -We also use `rust-embed` to access the contents of the `/static` folder via the `/static/*` route. The app will pick up changes to the contents of this folder when running in debug mode. - -## CSS - -This site uses Tailwind CSS, which means our stylesheets don't need to change very frequently. We check `static/styles.css` into the repository, but it's actually compiled from `/styles.css` via `script/build-css`. This script runs the Tailwind compilation flow to regenerate `static/styles.css` via PostCSS. +It contains our back-end logic for collaboration, to which we connect from the Zed client via a websocket after authenticating via https://zed.dev, which is a separate repo running on Vercel. diff --git a/crates/collab/favicon.ico b/crates/collab/favicon.ico deleted file mode 100644 index 93bce503927b4aa4c3206261759da0b1dbb8f15f..0000000000000000000000000000000000000000 Binary files a/crates/collab/favicon.ico and /dev/null differ diff --git a/crates/collab/src/assets.rs b/crates/collab/src/assets.rs deleted file mode 100644 index ac0b261bd779e59faa26046f786f8149de96fe30..0000000000000000000000000000000000000000 --- a/crates/collab/src/assets.rs +++ /dev/null @@ -1,29 +0,0 @@ -use anyhow::anyhow; -use rust_embed::RustEmbed; -use tide::{http::mime, Server}; - -#[derive(RustEmbed)] -#[folder = "static"] -struct Static; - -pub fn add_routes(app: &mut Server<()>) { - app.at("/*path").get(get_static_asset); -} - -async fn get_static_asset(request: tide::Request<()>) -> tide::Result { - let path = request.param("path").unwrap(); - let content = Static::get(path).ok_or_else(|| anyhow!("asset not found at {}", path))?; - - let content_type = if path.starts_with("svg") { - mime::SVG - } else if path.starts_with("styles") { - mime::CSS - } else { - mime::BYTE_STREAM - }; - - Ok(tide::Response::builder(200) - .content_type(content_type) - .body(content.data.as_ref()) - .build()) -} diff --git a/crates/collab/src/db.rs b/crates/collab/src/db.rs index 222b06e6c4347da0a2dc76ad33c97a649cd5c0a2..c05152fe7af512f30b1932475e6232bbf070c68c 100644 --- a/crates/collab/src/db.rs +++ b/crates/collab/src/db.rs @@ -1,6 +1,5 @@ use anyhow::Context; use anyhow::Result; -pub use async_sqlx_session::PostgresSessionStore as SessionStore; use async_std::task::{block_on, yield_now}; use async_trait::async_trait; use serde::Serialize; diff --git a/crates/collab/src/expiring.rs b/crates/collab/src/expiring.rs deleted file mode 100644 index 8b137891791fe96927ad78e64b0aad7bded08bdc..0000000000000000000000000000000000000000 --- a/crates/collab/src/expiring.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/collab/src/github.rs b/crates/collab/src/github.rs index 09cedf90193fe0684ccc2827c896096ca8e73c19..047ae24f0f8c3a75710bbb9011b6e74339a511c1 100644 --- a/crates/collab/src/github.rs +++ b/crates/collab/src/github.rs @@ -1,26 +1,5 @@ use serde::{Deserialize, Serialize}; -#[derive(Debug, Deserialize, Serialize)] -pub struct Release { - pub tag_name: String, - pub name: String, - pub body: String, - pub draft: bool, - pub assets: Vec, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct Asset { - pub name: String, - pub url: String, -} - -#[derive(Deserialize)] -struct Installation { - #[allow(unused)] - id: usize, -} - #[derive(Clone, Debug, Deserialize, Serialize)] pub struct User { pub login: String, diff --git a/crates/collab/src/main.rs b/crates/collab/src/main.rs index 005175a6654558424692e46fc69f5fcd10273bf1..e4627427c009c3adae48d6596bc3d3d0c1aa8492 100644 --- a/crates/collab/src/main.rs +++ b/crates/collab/src/main.rs @@ -1,10 +1,8 @@ mod api; -mod assets; mod auth; mod db; mod env; mod errors; -mod expiring; mod github; mod rpc; @@ -12,36 +10,21 @@ use ::rpc::Peer; use async_std::net::TcpListener; use async_trait::async_trait; use db::{Db, PostgresDb}; -use handlebars::Handlebars; -use parking_lot::RwLock; -use rust_embed::RustEmbed; use serde::Deserialize; use std::sync::Arc; -use surf::http::cookies::SameSite; -use tide::sessions::SessionMiddleware; use tide_compress::CompressMiddleware; type Request = tide::Request>; -#[derive(RustEmbed)] -#[folder = "templates"] -struct Templates; - #[derive(Default, Deserialize)] pub struct Config { pub http_port: u16, pub database_url: String, - pub session_secret: String, - pub github_app_id: usize, - pub github_client_id: String, - pub github_client_secret: String, - pub github_private_key: String, pub api_token: String, } pub struct AppState { db: Arc, - handlebars: RwLock>, config: Config, } @@ -51,27 +34,10 @@ impl AppState { let this = Self { db: Arc::new(db), - handlebars: Default::default(), config, }; - this.register_partials(); Ok(Arc::new(this)) } - - fn register_partials(&self) { - for path in Templates::iter() { - if let Some(partial_name) = path - .strip_prefix("partials/") - .and_then(|path| path.strip_suffix(".hbs")) - { - let partial = Templates::get(path.as_ref()).unwrap(); - self.handlebars - .write() - .register_partial(partial_name, std::str::from_utf8(&partial.data).unwrap()) - .unwrap() - } - } - } } #[async_trait] @@ -120,26 +86,12 @@ pub async fn run_server( ) -> tide::Result<()> { let mut web = tide::with_state(state.clone()); web.with(CompressMiddleware::new()); - web.with( - SessionMiddleware::new( - db::SessionStore::new_with_table_name(&state.config.database_url, "sessions") - .await - .unwrap(), - state.config.session_secret.as_bytes(), - ) - .with_same_site_policy(SameSite::Lax), // Required obtain our session in /auth_callback - ); api::add_routes(&mut web); - let mut assets = tide::new(); - assets.with(CompressMiddleware::new()); - assets::add_routes(&mut assets); - let mut app = tide::with_state(state.clone()); rpc::add_routes(&mut app, &rpc); app.at("/").nest(web); - app.at("/static").nest(assets); app.listen(listener).await?; diff --git a/crates/collab/src/releases.rs b/crates/collab/src/releases.rs deleted file mode 100644 index f0a051fa42273daa186d18595a7b1e33f00e65d9..0000000000000000000000000000000000000000 --- a/crates/collab/src/releases.rs +++ /dev/null @@ -1,54 +0,0 @@ -use crate::{ - auth::RequestExt as _, github::Release, AppState, LayoutData, Request, RequestExt as _, -}; -use comrak::ComrakOptions; -use serde::Serialize; -use std::sync::Arc; -use tide::http::mime; - -pub fn add_routes(releases: &mut tide::Server>) { - releases.at("/releases").get(get_releases); -} - -async fn get_releases(mut request: Request) -> tide::Result { - #[derive(Serialize)] - struct ReleasesData { - #[serde(flatten)] - layout: Arc, - releases: Option>, - } - - let mut data = ReleasesData { - layout: request.layout_data().await?, - releases: None, - }; - - if let Some(user) = request.current_user().await? { - if user.is_insider { - data.releases = Some( - request - .state() - .repo_client - .releases() - .await? - .into_iter() - .filter_map(|mut release| { - if release.draft { - None - } else { - let mut options = ComrakOptions::default(); - options.render.unsafe_ = true; // Allow raw HTML in the markup. We control these release notes anyway. - release.body = comrak::markdown_to_html(&release.body, &options); - Some(release) - } - }) - .collect(), - ); - } - } - - Ok(tide::Response::builder(200) - .body(request.state().render_template("releases.hbs", &data)?) - .content_type(mime::HTML) - .build()) -} diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 8c363668612f1e24b5de432f3efc6d59cf22eda8..7f504ecedcb622700ed84e266c3e97ebd909ac40 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -5728,11 +5728,9 @@ mod tests { async fn build_app_state(test_db: &TestDb) -> Arc { let mut config = Config::default(); - config.session_secret = "a".repeat(32); config.database_url = test_db.url.clone(); Arc::new(AppState { db: test_db.db().clone(), - handlebars: Default::default(), config, }) } diff --git a/crates/collab/static/browserconfig.xml b/crates/collab/static/browserconfig.xml deleted file mode 100644 index 15a8331058027d2be873412a680d5047094a5546..0000000000000000000000000000000000000000 --- a/crates/collab/static/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #000000 - - - diff --git a/crates/collab/static/fonts/VisbyCF-Bold.eot b/crates/collab/static/fonts/VisbyCF-Bold.eot deleted file mode 100644 index 74eab1431ab793d2c1f2eb209e6c4d2541227628..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Bold.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Bold.woff b/crates/collab/static/fonts/VisbyCF-Bold.woff deleted file mode 100644 index d82871881ca2ee3355d0ee90365075997cd3cbc0..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Bold.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Bold.woff2 b/crates/collab/static/fonts/VisbyCF-Bold.woff2 deleted file mode 100644 index b0a74210a473925e6327c76353668253016dc018..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Bold.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-BoldOblique.eot b/crates/collab/static/fonts/VisbyCF-BoldOblique.eot deleted file mode 100644 index 65e87d4dd86728d3e321bb77989d872f7e3d70ef..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-BoldOblique.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-BoldOblique.woff b/crates/collab/static/fonts/VisbyCF-BoldOblique.woff deleted file mode 100644 index a7c88a46e45dcb928c5a8854087a0abbc25ae07e..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-BoldOblique.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-BoldOblique.woff2 b/crates/collab/static/fonts/VisbyCF-BoldOblique.woff2 deleted file mode 100644 index 7d41ec56d52d49cba604e986edacbb27b1bbf649..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-BoldOblique.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-DemiBold.eot b/crates/collab/static/fonts/VisbyCF-DemiBold.eot deleted file mode 100644 index a692e69a1994753cfcd965d752a00e462a78841b..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-DemiBold.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-DemiBold.woff b/crates/collab/static/fonts/VisbyCF-DemiBold.woff deleted file mode 100644 index da11fc410782ac9ca12f25f96e47b2a20ed41f55..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-DemiBold.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-DemiBold.woff2 b/crates/collab/static/fonts/VisbyCF-DemiBold.woff2 deleted file mode 100644 index 725279b90df763a3a1946338661d9f79a0aab43d..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-DemiBold.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-DemiBoldOblique.eot b/crates/collab/static/fonts/VisbyCF-DemiBoldOblique.eot deleted file mode 100644 index 87dc93e1004740020c46d86d604caa9fb0478d3e..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-DemiBoldOblique.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-DemiBoldOblique.woff b/crates/collab/static/fonts/VisbyCF-DemiBoldOblique.woff deleted file mode 100644 index c39d362b2a2bb310c9f9ac6ce0541f2ad243126a..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-DemiBoldOblique.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-DemiBoldOblique.woff2 b/crates/collab/static/fonts/VisbyCF-DemiBoldOblique.woff2 deleted file mode 100644 index c4e4969e8e583217a51594037e63e2a5b6ef7f14..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-DemiBoldOblique.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-ExtraBold.eot b/crates/collab/static/fonts/VisbyCF-ExtraBold.eot deleted file mode 100644 index d5d1ca31d8bb13504eba2d26d620308c67d12a8f..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-ExtraBold.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-ExtraBold.woff b/crates/collab/static/fonts/VisbyCF-ExtraBold.woff deleted file mode 100644 index 490769c8cb2f784183b2768798550861085667e1..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-ExtraBold.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-ExtraBold.woff2 b/crates/collab/static/fonts/VisbyCF-ExtraBold.woff2 deleted file mode 100644 index ccec4d68d94cfe2e9a21294c1c755b77412f8655..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-ExtraBold.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-ExtraBoldOblique.eot b/crates/collab/static/fonts/VisbyCF-ExtraBoldOblique.eot deleted file mode 100644 index c12bf4cead036ad53a7bde286ad37d1606e714ca..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-ExtraBoldOblique.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-ExtraBoldOblique.woff b/crates/collab/static/fonts/VisbyCF-ExtraBoldOblique.woff deleted file mode 100644 index f5fd18cc5958eae3853c6c6535db2c0f997134d4..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-ExtraBoldOblique.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-ExtraBoldOblique.woff2 b/crates/collab/static/fonts/VisbyCF-ExtraBoldOblique.woff2 deleted file mode 100644 index d11da0a31c1a3cafe13651bdefa7369195c409f5..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-ExtraBoldOblique.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Heavy.eot b/crates/collab/static/fonts/VisbyCF-Heavy.eot deleted file mode 100644 index edd568786396f98a79ad658fce21d55310c2cf26..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Heavy.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Heavy.woff b/crates/collab/static/fonts/VisbyCF-Heavy.woff deleted file mode 100644 index 59c7ce86564509f3d7ea99b148bf204321a890d7..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Heavy.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Heavy.woff2 b/crates/collab/static/fonts/VisbyCF-Heavy.woff2 deleted file mode 100644 index 49baf8e42a58ea9489e8cd42d75ca16da083a237..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Heavy.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-HeavyOblique.eot b/crates/collab/static/fonts/VisbyCF-HeavyOblique.eot deleted file mode 100644 index 3ce587fe2c0d33973fa5978e7eeba7ff793e85fe..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-HeavyOblique.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-HeavyOblique.woff b/crates/collab/static/fonts/VisbyCF-HeavyOblique.woff deleted file mode 100644 index f51d3f9433ea7d5d5a5a171027fe6f45a88cde7d..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-HeavyOblique.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-HeavyOblique.woff2 b/crates/collab/static/fonts/VisbyCF-HeavyOblique.woff2 deleted file mode 100644 index 2b477bea7065bafc39fb88817fce98f34bd57843..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-HeavyOblique.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Light.eot b/crates/collab/static/fonts/VisbyCF-Light.eot deleted file mode 100644 index d1e64eddefdfc3b61ece1f99bf4f4eb63f540885..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Light.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Light.woff b/crates/collab/static/fonts/VisbyCF-Light.woff deleted file mode 100644 index 06f8cc058c694ba33f3382db70b9951f8fe387d9..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Light.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Light.woff2 b/crates/collab/static/fonts/VisbyCF-Light.woff2 deleted file mode 100644 index 110303f496c486df6f6394d23a5ecc0105f539b9..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Light.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-LightOblique.eot b/crates/collab/static/fonts/VisbyCF-LightOblique.eot deleted file mode 100644 index 5f803f1c7235b8b060b956de78f704be0e1d8851..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-LightOblique.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-LightOblique.woff b/crates/collab/static/fonts/VisbyCF-LightOblique.woff deleted file mode 100644 index afdbb176a208bf9eec1640365e4ce6f71ad468fa..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-LightOblique.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-LightOblique.woff2 b/crates/collab/static/fonts/VisbyCF-LightOblique.woff2 deleted file mode 100644 index 7cc0d7fcc56b3eae57d108f3794abd03ec7311ca..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-LightOblique.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Medium.eot b/crates/collab/static/fonts/VisbyCF-Medium.eot deleted file mode 100644 index 3162546b322743cba1dbd7b21849e54b3be37076..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Medium.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Medium.woff b/crates/collab/static/fonts/VisbyCF-Medium.woff deleted file mode 100644 index 2ba79e63ab545eb3c8e4e9143352bb24e80b49ae..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Medium.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Medium.woff2 b/crates/collab/static/fonts/VisbyCF-Medium.woff2 deleted file mode 100644 index e02074269c170d70b47938838416ab2eccfa6ea8..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Medium.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-MediumOblique.eot b/crates/collab/static/fonts/VisbyCF-MediumOblique.eot deleted file mode 100644 index 9a40e3d154e85c3bf15c8bf33d4d3654d882618d..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-MediumOblique.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-MediumOblique.woff b/crates/collab/static/fonts/VisbyCF-MediumOblique.woff deleted file mode 100644 index 70610de8d63fd3e4a97f12672c17c6e2ab66e603..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-MediumOblique.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-MediumOblique.woff2 b/crates/collab/static/fonts/VisbyCF-MediumOblique.woff2 deleted file mode 100644 index b4a887af037769e2c37ad029c41829c476594b6e..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-MediumOblique.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Regular.eot b/crates/collab/static/fonts/VisbyCF-Regular.eot deleted file mode 100644 index 4984ee655b403dc05aa119956512f45b6b020e76..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Regular.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Regular.woff b/crates/collab/static/fonts/VisbyCF-Regular.woff deleted file mode 100644 index a064e5b39782846b53aab0487531515167ac1e4e..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Regular.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Regular.woff2 b/crates/collab/static/fonts/VisbyCF-Regular.woff2 deleted file mode 100644 index d11dcf1da939610a941319074105289e54f8f6b8..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Regular.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-RegularOblique.eot b/crates/collab/static/fonts/VisbyCF-RegularOblique.eot deleted file mode 100644 index 88b0b22daf2c48ae0b2543d326473422947eb92c..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-RegularOblique.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-RegularOblique.woff b/crates/collab/static/fonts/VisbyCF-RegularOblique.woff deleted file mode 100644 index 30edfb697fb08f627123ce4fcbddc3c7199513e5..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-RegularOblique.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-RegularOblique.woff2 b/crates/collab/static/fonts/VisbyCF-RegularOblique.woff2 deleted file mode 100644 index 254537fb1b094bf1f5c5d0b5316c89818ad8fb2b..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-RegularOblique.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Thin.eot b/crates/collab/static/fonts/VisbyCF-Thin.eot deleted file mode 100644 index 28910a2fa64433bd4fb63691fedaa01c2d941d19..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Thin.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Thin.woff b/crates/collab/static/fonts/VisbyCF-Thin.woff deleted file mode 100644 index 8c46eace0308f746cae195284591f5b0b30e6ba9..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Thin.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-Thin.woff2 b/crates/collab/static/fonts/VisbyCF-Thin.woff2 deleted file mode 100644 index a8efa01c036a2c7b57e5eff556ba432439b7d56f..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-Thin.woff2 and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-ThinOblique.eot b/crates/collab/static/fonts/VisbyCF-ThinOblique.eot deleted file mode 100644 index 566303e2f4b88239f89cf12f77ce1d177499bb3b..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-ThinOblique.eot and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-ThinOblique.woff b/crates/collab/static/fonts/VisbyCF-ThinOblique.woff deleted file mode 100644 index 82c946d60759ba0d25fcad9b40fd58b81d85883c..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-ThinOblique.woff and /dev/null differ diff --git a/crates/collab/static/fonts/VisbyCF-ThinOblique.woff2 b/crates/collab/static/fonts/VisbyCF-ThinOblique.woff2 deleted file mode 100644 index 9c92ce05cca008dad878e242d1218f5fd401ea78..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/fonts/VisbyCF-ThinOblique.woff2 and /dev/null differ diff --git a/crates/collab/static/images/android-chrome-192x192.png b/crates/collab/static/images/android-chrome-192x192.png deleted file mode 100644 index 2342d82c0b663bf671cf1426c6b57e4f826542a9..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/android-chrome-192x192.png and /dev/null differ diff --git a/crates/collab/static/images/android-chrome-512x512.png b/crates/collab/static/images/android-chrome-512x512.png deleted file mode 100644 index d25b64f77a0701dd1316ec7f26b807c7d6e1893c..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/android-chrome-512x512.png and /dev/null differ diff --git a/crates/collab/static/images/apple-touch-icon.png b/crates/collab/static/images/apple-touch-icon.png deleted file mode 100644 index f9ba99f40f188d557e37ca9cbfbc8f0af1d18d91..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/apple-touch-icon.png and /dev/null differ diff --git a/crates/collab/static/images/favicon-16x16.png b/crates/collab/static/images/favicon-16x16.png deleted file mode 100644 index 486c293a8248f03d74d09da2613bf90faba287bd..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/favicon-16x16.png and /dev/null differ diff --git a/crates/collab/static/images/favicon-32x32.png b/crates/collab/static/images/favicon-32x32.png deleted file mode 100644 index a34711800bd9138a465b76ebb91ad379baacac8e..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/favicon-32x32.png and /dev/null differ diff --git a/crates/collab/static/images/favicon.png b/crates/collab/static/images/favicon.png deleted file mode 100644 index 821698c28fe0047d22f09b94e1634ef00819d71f..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/favicon.png and /dev/null differ diff --git a/crates/collab/static/images/favicon.svg b/crates/collab/static/images/favicon.svg deleted file mode 100644 index fdd3fe4610b187a2eab5a433cb64596027793e5d..0000000000000000000000000000000000000000 --- a/crates/collab/static/images/favicon.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/crates/collab/static/images/mstile-144x144.png b/crates/collab/static/images/mstile-144x144.png deleted file mode 100644 index e70abaf8d20288ed4ea4966c7f19334657eae981..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/mstile-144x144.png and /dev/null differ diff --git a/crates/collab/static/images/mstile-150x150.png b/crates/collab/static/images/mstile-150x150.png deleted file mode 100644 index 545758300a14795d8875a43c907d2a994f3aaf4c..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/mstile-150x150.png and /dev/null differ diff --git a/crates/collab/static/images/mstile-310x150.png b/crates/collab/static/images/mstile-310x150.png deleted file mode 100644 index 73072f380d4b1c67bd55de6075dbfaa7ceb2ebf7..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/mstile-310x150.png and /dev/null differ diff --git a/crates/collab/static/images/mstile-310x310.png b/crates/collab/static/images/mstile-310x310.png deleted file mode 100644 index 2f8fc1c3a178d84a5b51c2871952a113db6f409b..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/mstile-310x310.png and /dev/null differ diff --git a/crates/collab/static/images/mstile-70x70.png b/crates/collab/static/images/mstile-70x70.png deleted file mode 100644 index c28ce9405c389400128457723df93f892e3ab821..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/mstile-70x70.png and /dev/null differ diff --git a/crates/collab/static/images/safari-pinned-tab.svg b/crates/collab/static/images/safari-pinned-tab.svg deleted file mode 100644 index 981cf3f1cb55f01d41197ae4743b3e4b9ac4ad03..0000000000000000000000000000000000000000 --- a/crates/collab/static/images/safari-pinned-tab.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - diff --git a/crates/collab/static/images/zed-og-image.png b/crates/collab/static/images/zed-og-image.png deleted file mode 100644 index 9410e705d8b9a2070f07e7dacc6898f3b5c26ce7..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/zed-og-image.png and /dev/null differ diff --git a/crates/collab/static/images/zed-twitter-image.png b/crates/collab/static/images/zed-twitter-image.png deleted file mode 100644 index 607d9bf9c6e9e6c9a8e81596c6e92a7e76a04ac0..0000000000000000000000000000000000000000 Binary files a/crates/collab/static/images/zed-twitter-image.png and /dev/null differ diff --git a/crates/collab/static/prism.js b/crates/collab/static/prism.js deleted file mode 100644 index b08aaf6c6a83165b7aef089d353a7a1c4ce68cbc..0000000000000000000000000000000000000000 --- a/crates/collab/static/prism.js +++ /dev/null @@ -1,12 +0,0 @@ -/* PrismJS 1.25.0 -https://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+bash+c+cpp+rust+scss */ -var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,e={},M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);y+=m.value.length,m=m.next){var b=m.value;if(t.length>n.length)return;if(!(b instanceof W)){var k,x=1;if(h){if(!(k=z(v,y,n,f)))break;var w=k.index,A=k.index+k[0].length,P=y;for(P+=m.value.length;P<=w;)m=m.next,P+=m.value.length;if(P-=m.value.length,y=P,m.value instanceof W)continue;for(var E=m;E!==t.tail&&(Pl.reach&&(l.reach=N);var j=m.prev;O&&(j=I(t,j,O),y+=O.length),q(t,j,x);var C=new W(o,g?M.tokenize(S,g):S,d,S);if(m=I(t,j,C),L&&I(t,m,L),1l.reach&&(l.reach=_.reach)}}}}}}(e,a,n,a.head,0),function(e){var n=[],t=e.head.next;for(;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=M.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=M.hooks.all[e];if(t&&t.length)for(var r,a=0;r=t[a++];)r(n)}},Token:W};function W(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||"").length}function z(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function I(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function q(e,n,t){for(var r=n.next,a=0;a"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var t=M.util.currentScript();function r(){M.manual||M.highlightAll()}if(t&&(M.filename=t.src,t.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var a=document.readyState;"loading"===a||"interactive"===a&&t&&t.defer?document.addEventListener("DOMContentLoaded",r):window.requestAnimationFrame?window.requestAnimationFrame(r):window.setTimeout(r,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); -Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; -!function(s){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism); -Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; -Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript; -!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=a.variable[1].inside,o=0;o>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c.boolean; -!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n="\\b(?!)\\w+(?:\\s*\\.\\s*\\w+)*\\b".replace(//g,function(){return t.source});e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(//g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp('(\\b(?:module|import)\\s+)(?:"(?:\\\\(?:\r\n|[^])|[^"\\\\\r\n])*"|<[^<>\r\n]*>|'+"(?:\\s*:\\s*)?|:\\s*".replace(//g,function(){return n})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism); -!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|)*\\*/",t=0;t<2;t++)a=a.replace(//g,function(){return a});a=a.replace(//g,function(){return"[^\\s\\S]"}),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0,alias:"string"},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|Self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:[ui](?:8|16|32|64|128|size)|f(?:32|64)|bool|char|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64|size)?|f32|f64))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism); -Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),Prism.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|forward|for|each|while|import|use|extend|debug|warn|mixin|include|function|return|content)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),Prism.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|with|show|hide)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.languages.scss; diff --git a/crates/collab/static/prose.css b/crates/collab/static/prose.css deleted file mode 100644 index 03bffb119684ed68b2f3c91f47b8cc5d2a84172f..0000000000000000000000000000000000000000 --- a/crates/collab/static/prose.css +++ /dev/null @@ -1,253 +0,0 @@ -article.prose { - margin-bottom: 2.5rem; -} - -article.prose, -.type-prose { - font-family: "Spectral", "Constantia", "Lucida Bright", "Lucidabright", "Lucida Serif", "Lucida", "DejaVu Serif", "Bitstream Vera Serif", "Liberation Serif", "Georgia", "serif", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", serif; - letter-spacing: -0.05rem; -} - -article.prose h1, -article.prose h2, -article.prose h3, -article.prose h4, -.type-prose h1, -.type-prose h2, -.type-prose h3, -.type-prose h4 { - margin: 3rem 0 1rem 0; -} - -article.prose h1, -.type-prose h1 { - font-size: 2.25rem; - line-height: 2.5rem; -} - -article.prose h2, -.type-prose h2 { - font-size: 1.875rem; - line-height: 2.25rem; -} - -article.prose h3, -.type-prose h3 { - font-size: 1.6rem; - line-height: 2rem; -} - -article.prose h4, -.type-prose h4 { - font-size: 1.4rem; - line-height: 1.75rem; -} - -article.prose p, -article.prose li, -article.prose a, -.type-prose p, -.type-prose li, -.type-prose a { - color: #eee; - font-size: 1.3rem; - line-height: 2.1rem; -} - -article.prose a:not(img), -.type-prose a:not(img) { - text-decoration: underline; - text-underline-offset: 4px; -} - -article.prose strong, -.type-prose strong { - font-weight: 600; -} - -article.prose i, -.type-prose i { - font-style: italic; -} - -article.prose p:not(:last-of-type), -.type-prose p:not(:last-of-type) { - margin-bottom: 1.5rem; -} - -article.prose img, -article.prose pre, -.type-prose img, -.type-prose pre { - margin: 1.5rem 0; -} - -article.prose ul, -.type-prose ul { - margin-left: 1.5rem; -} - -article.prose ul li, -.type-prose ul li { - list-style-type: disc; - list-style-position: outside; -} - -article.prose ul li:not(:last-of-type), -.type-prose ul li:not(:last-of-type) { - margin-bottom: 0.2rem; -} - -article.prose code, -.type-prose code { - font-family: "JetBrains Mono", "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", monospace; - font-size: 0.96rem; - letter-spacing: 0rem; -} - -article.prose :not(pre) > code, -.type-prose :not(pre) > code { - padding: 0.2rem 0.4rem; -} - -article.prose pre, -.type-prose pre { - padding: 0.8rem; -} - -article.prose pre, -article.prose :not(pre) > code, -.type-prose pre, -.type-prose :not(pre) > code { - border-radius: 4px; - background-color: rgba(255, 255, 255, 0.1); -} - -/* Code Highlighting Styles -/* Based on PrismJS 1.25.0 -https://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+bash+c+cpp+rust+scss */ -code[class*="language-"], -pre[class*="language-"] { - color: #ddd; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - -webkit-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -/* Code blocks */ -pre[class*="language-"]::-moz-selection { - /* Firefox */ - background: #3b57bc33; -} - -pre[class*="language-"]::selection { - /* Safari */ - background: #3b57bc33; -} - -/* Text Selection colour */ -pre[class*="language-"]::-moz-selection, -pre[class*="language-"] ::-moz-selection, -code[class*="language-"]::-moz-selection, -code[class*="language-"] ::-moz-selection { - text-shadow: none; - background: #3b57bc33; -} - -pre[class*="language-"]::selection, -pre[class*="language-"] ::selection, -code[class*="language-"]::selection, -code[class*="language-"] ::selection { - text-shadow: none; - background: #3b57bc33; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: #9cdcfe; -} - -.token.punctuation { - opacity: 0.7; -} - -.token.namespace { - opacity: 0.7; -} - -.token.tag, -.token.boolean, -.token.number, -.token.deleted { - color: #b5cea8; -} - -.token.keyword, -.token.property, -.token.selector, -.token.constant, -.token.symbol, -.token.builtin { - color: #0086c0; - /* #F9EE98 */ -} - -.token.attr-name, -.token.attr-value, -.token.string, -.token.char, -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string, -.token.variable, -.token.inserted { - color: #4e94ce; -} - -.token.atrule { - color: #4ec9b0; -} - -.token.regex, -.token.important { - color: #dcdcaa; -} - -.token.important, -.token.bold { - font-weight: bold; -} - -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} - -/* Markup */ -.language-markup .token.tag, -.language-markup .token.attr-name, -.language-markup .token.punctuation { - color: #4e94ce; -} - -/* Make the tokens sit above the line highlight so the colours don't look faded. */ -.token { - position: relative; - z-index: 1; -} -/*# sourceMappingURL=prose.css.map */ \ No newline at end of file diff --git a/crates/collab/static/prose.css.map b/crates/collab/static/prose.css.map deleted file mode 100644 index 0125373da822a173ec933781ade6d6a3a9d00876..0000000000000000000000000000000000000000 --- a/crates/collab/static/prose.css.map +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": 3, - "mappings": "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", - "sources": [ - "prose.scss" - ], - "names": [], - "file": "prose.css" -} \ No newline at end of file diff --git a/crates/collab/static/prose.scss b/crates/collab/static/prose.scss deleted file mode 100644 index e034fdd7a2218154472832248346aca7cca7a865..0000000000000000000000000000000000000000 --- a/crates/collab/static/prose.scss +++ /dev/null @@ -1,260 +0,0 @@ -// Style prose by hand -// add .prose to any
to activate prose styles -// or .type-prose to any element - -article.prose { - margin-bottom: 2.5rem; -} - -article.prose, -.type-prose { - font-family: "Spectral", "Constantia", "Lucida Bright", "Lucidabright", - "Lucida Serif", "Lucida", "DejaVu Serif", "Bitstream Vera Serif", - "Liberation Serif", "Georgia", "serif", "Apple Color Emoji", - "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", serif; - letter-spacing: -0.05rem; - - h1, - h2, - h3, - h4 { - margin: 3rem 0 1rem 0; - } - - h1 { - font-size: 2.25rem; - line-height: 2.5rem; - } - - h2 { - font-size: 1.875rem; - line-height: 2.25rem; - } - - h3 { - font-size: 1.6rem; - line-height: 2rem; - } - - h4 { - font-size: 1.4rem; - line-height: 1.75rem; - } - - p, - li, - a { - color: #eee; - font-size: 1.3rem; - line-height: 2.1rem; - } - - a:not(img) { - text-decoration: underline; - text-underline-offset: 4px; - } - - strong { - font-weight: 600; - } - - i { - font-style: italic; - } - - p:not(:last-of-type) { - margin-bottom: 1.5rem; - } - - img, - pre { - margin: 1.5rem 0; - } - - ul { - margin-left: 1.5rem; - } - - ul li { - list-style-type: disc; - list-style-position: outside; - &:not(:last-of-type) { - margin-bottom: 0.2rem; - } - } - - code { - font-family: "JetBrains Mono", "Andale Mono WT", "Andale Mono", - "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", - "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", - "Courier New", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", - "Noto Color Emoji", monospace; - font-size: 0.96rem; - letter-spacing: 0rem; - } - - :not(pre) > code { - padding: 0.2rem 0.4rem; - } - - pre { - padding: 0.8rem; - } - - pre, - :not(pre) > code { - border-radius: 4px; - background-color: rgba(255, 255, 255, 0.1); - } -} - -/* Code Highlighting Styles -/* Based on PrismJS 1.25.0 -https://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+bash+c+cpp+rust+scss */ - -code[class*="language-"], -pre[class*="language-"] { - color: #ddd; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -/* Code blocks */ -pre[class*="language-"] { - // Language specific code block styles -} - -pre[class*="language-"]::-moz-selection { - /* Firefox */ - background: #3b57bc33; -} - -pre[class*="language-"]::selection { - /* Safari */ - background: #3b57bc33; -} - -/* Text Selection colour */ -pre[class*="language-"]::-moz-selection, -pre[class*="language-"] ::-moz-selection, -code[class*="language-"]::-moz-selection, -code[class*="language-"] ::-moz-selection { - text-shadow: none; - background: #3b57bc33; -} - -pre[class*="language-"]::selection, -pre[class*="language-"] ::selection, -code[class*="language-"]::selection, -code[class*="language-"] ::selection { - text-shadow: none; - background: #3b57bc33; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: #9cdcfe; -} - -.token.punctuation { - opacity: 0.7; -} - -.token.namespace { - opacity: 0.7; -} - -.token.tag, -.token.boolean, -.token.number, -.token.deleted { - color: #b5cea8; -} - -.token.keyword, -.token.property, -.token.selector, -.token.constant, -.token.symbol, -.token.builtin { - color: #0086c0; /* #F9EE98 */ -} - -.token.attr-name, -.token.attr-value, -.token.string, -.token.char, -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string, -.token.variable, -.token.inserted { - color: #4e94ce; -} - -.token.atrule { - color: #4ec9b0; -} - -.token.regex, -.token.important { - color: #dcdcaa; -} - -.token.important, -.token.bold { - font-weight: bold; -} -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} - -/* Markup */ -.language-markup .token.tag, -.language-markup .token.attr-name, -.language-markup .token.punctuation { - color: #4e94ce; -} - -/* Make the tokens sit above the line highlight so the colours don't look faded. */ -.token { - position: relative; - z-index: 1; -} - -// TODO: Style line highlights - -// .line-highlight.line-highlight { -// background: hsla(0, 0%, 33%, 0.25); /* #545454 */ -// background: linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */ -// border-bottom: 1px dashed hsl(0, 0%, 33%); /* #545454 */ -// border-top: 1px dashed hsl(0, 0%, 33%); /* #545454 */ -// margin-top: 0.75em; /* Same as .prism’s padding-top */ -// z-index: 0; -// } - -// .line-highlight.line-highlight:before, -// .line-highlight.line-highlight[data-end]:after { -// background-color: hsl(215, 15%, 59%); /* #8794A6 */ -// color: hsl(24, 20%, 95%); /* #F5F2F0 */ -// } diff --git a/crates/collab/static/site.webmanifest b/crates/collab/static/site.webmanifest deleted file mode 100644 index f69ceec6eb1e85d5d9916fbae8c37544636c09e2..0000000000000000000000000000000000000000 --- a/crates/collab/static/site.webmanifest +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "Zed – a lightning fast, collaborative code editor written natively in Rust", - "short_name": "Zed", - "icons": [ - { - "src": "/static/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/static/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#000", - "background_color": "#000" -} diff --git a/crates/collab/static/svg/hero.svg b/crates/collab/static/svg/hero.svg deleted file mode 100644 index 0678b702635c988b51a407b6deda0f32c2d1a420..0000000000000000000000000000000000000000 --- a/crates/collab/static/svg/hero.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/crates/collab/styles.css b/crates/collab/styles.css deleted file mode 100644 index 33af3f1033a21ad7732fe6eda08b4c7fa8a764b8..0000000000000000000000000000000000000000 --- a/crates/collab/styles.css +++ /dev/null @@ -1,136 +0,0 @@ -/* This file is compiled to /assets/styles/tailwind.css via script/tailwind */ - -@import url("https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,200;0,300;1,200;1,300&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100;0,300;0,600;1,100;1,300;1,600&display=swap"); - -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer base { - html { - font-size: 110%; - text-rendering: geometricPrecision; - } - - @media screen and (min-width: 1024px) { - html { - font-size: 125%; - } - } - - h1 { - @apply text-4xl; - @apply tracking-tighter; - } - h2 { - @apply text-3xl; - @apply tracking-tighter; - } - h3 { - @apply text-2xl; - @apply tracking-tighter; - } - h4 { - @apply text-xl; - } - - .underline, - .hover\:underline:hover { - text-underline-offset: 6px; - } - - @media screen and (min-width: 1024px) { - .text-columns-2 { - column-count: 2; - column-gap: 3rem; - } - -} - .site-nav a:not(.active) .nav-active-arrow { - display: none; - } - - .site-nav a.active .nav-active-arrow { - display: flex; - } - - .site-mobile-nav a.active { - font-weight: bold; - } - - .text-columns-2 { - -webkit-column-break-inside: avoid; - page-break-inside: avoid; - break-inside: avoid; - } - - .text-columns-2 p { - break-inside: avoid; - } - - .alternate-bg:nth-of-type(even) { - background-color: rgba(255,255,255,0.06); - } - - /* div:not(.type-prose) code { - background-color: rgba(255,255,255,0.15); - padding: 0px 4px; - border-radius: 2px; - color: #eee; - } */ - - /* This fixes scrollbar jump */ - @media screen and (min-width: 960px) { - html { - margin-left: calc(100vw - 100%); - margin-right: 0; - } - } - - :root { - --color: white; - --disabled: #959495; - } - - .checkbox { - color: var(--color); - } - - .checkbox--disabled { - color: var(--disabled); - } - - .checkbox__control { - width: 30px; - height: 30px; - } - - .checkbox__control svg { - transform: scale(0); - transform-origin: center center; - } - - .checkbox__brackets { - left: -1px; - top: -1px; - } - - .checkbox__input input { - opacity: 0; - width: 30px; - height: 30px; - } - - .checkbox__input input:focus + .checkbox__control { - box-shadow: 0 0 0 2px #000, 0 0 0 4px #3b57bc99 - } - - .checkbox__input input:checked + .checkbox__control svg { - transform: scale(1); - } - - .checkbox__input input:disabled + .checkbox__control { - color: var(--disabled); - } -} diff --git a/crates/collab/templates/admin.hbs b/crates/collab/templates/admin.hbs deleted file mode 100644 index 6c3a4eba6ef7617eeb692791f3fa8a79d512bed3..0000000000000000000000000000000000000000 --- a/crates/collab/templates/admin.hbs +++ /dev/null @@ -1,105 +0,0 @@ -{{#> layout }} - - -
-
-

Admin

- -
- -

Users

- -
-
-

Github Username

-

Admin

-

-
-
-
-
-

-

-

-
-
-
-
- -
-
-

Github Username

-

Admin

-

-
- {{#each users}} -
-
-
-

{{github_login}}

-

-

-
-
-
- {{/each}} -
- -

Signups

- -
- -
-

Email

-

Github

-

Releases

-

Updates

-

Community

-

Remove

-
- {{#each signups}} -
-
-
-

{{email_address}}

-

{{github_login}}

-

{{#if wants_releases}}[✓]{{else}}[ ]{{/if}}

-

{{#if wants_updates}}[✓]{{else}}[ ]{{/if}}

-

{{#if wants_community}}[✓]{{else}}[ ]{{/if}}

-

-
-
-

{{about}}

-
- {{/each}} -
-
-{{/layout}} \ No newline at end of file diff --git a/crates/collab/templates/careers.hbs b/crates/collab/templates/careers.hbs deleted file mode 100644 index 4c6aaa6247415a203f45ac7698cf064372c69a67..0000000000000000000000000000000000000000 --- a/crates/collab/templates/careers.hbs +++ /dev/null @@ -1,20 +0,0 @@ -{{#> layout }} - -
-

- We think there's a better way to write code—and we've been working for more than a decade to bring it into existence. -

-

Zed is looking for a Rust engineer to help us advance the art of code editing. We're currently three engineers and a designer developing a new editor with a focus on performance, clean design, and collaboration.

-

We're working on exciting technologies, including a custom, GPU-accelerated UI framework, heavy use of parallelism and persistent data structures, conflict-free replicated data types, and an incremental parsing framework called Tree-sitter that was created by one of our founders.

-

Our codebase consists of about 60,000 lines of well-factored, thoroughly-tested Rust that compiles quickly. In addition to the Zed editor, we're also developing a server-side component to facilitate collaboration that tightly integrates with the client.

-

We'd love to hear from you if you're excited to build the world's best code editor and meet this description:

-
    -
  • You're experienced in Rust. You've developed a substantial piece of software or meaningfully contributed to an open source project.
  • -
  • You'd be excited to to pair program with us multiple times a week to learn the codebase.
  • -
  • You know how to maintain code quality while being pragmatic and prioritizing the needs of the customer.
  • -
  • You know how to write performant software, including algorithmic analysis and profile-driven optimization.
  • -
  • Bonus: You have experience working on code editors, compilers, distributed systems, CRDTs, or real-time graphics.
  • -
-
- -{{/layout}} diff --git a/crates/collab/templates/community.hbs b/crates/collab/templates/community.hbs deleted file mode 100644 index dfae551cdba8ccb49d39d5cfa4ac2099e7d67c23..0000000000000000000000000000000000000000 --- a/crates/collab/templates/community.hbs +++ /dev/null @@ -1,107 +0,0 @@ -{{#> layout }} - -
-

We’re building a community of passionate developers & advocates.

- -

If you would like to get involved early, sign up below and we will let you know when our developer community opens!

- -
-
    -
  • - - - - - - - - - - - - - -
    - -

    - We'll put you on the list to play with an early beta and let you know when Zed launches. -

    -
    -
  • -
  • - - - - - - - - - - - - - - -
    - -

    - We'll send you occasional updates about our progress and share what we're learning along the way. -

    -
    -
  • -
  • - - - - - - - - - - - - - - - -
    - -

    - We'll add you to the waitlist to receive early builds and ask you to help us by testing them out. -

    -
    -
  • -
-
- - - -
- - - - - -

- We're not gonna spam you—You can expect an email every 1 to 3 months from us if you sign up for updates, and occasional emails about beta releases. -

-
-
- -{{/layout}} diff --git a/crates/collab/templates/docs.hbs b/crates/collab/templates/docs.hbs deleted file mode 100644 index cb5f0410897fa1ab44c33855160e41d42bbb8c7c..0000000000000000000000000000000000000000 --- a/crates/collab/templates/docs.hbs +++ /dev/null @@ -1,41 +0,0 @@ -{{#> layout }} - -
-
-

Bypassing code signing restrictions

-
-
-

- We haven't yet applied to Apple for the required certificate to sign our application bundle, which - means there's a small speed bump when you run our app. -

-

- Instead of double-clicking the app, right click it and choose Open. -

-

- You need to attempt open the app twice. On the second attempt, you should see the option - to open the application anyway in the dialog. -

-
- Screen Shot 2021-06-02 at 2 38 12 PM - Screen Shot 2021-06-02 at 2 38 19 PM -
- -

Key bindings

-
-
-
-
cmd-shift-L
-
-
- Split selection into lines -
-
-
-
-
- -{{/layout}} \ No newline at end of file diff --git a/crates/collab/templates/error.hbs b/crates/collab/templates/error.hbs deleted file mode 100644 index 4d0a99d27b5dbd638f16bb9a6b9dd665ddea59af..0000000000000000000000000000000000000000 --- a/crates/collab/templates/error.hbs +++ /dev/null @@ -1,15 +0,0 @@ -{{#> layout }} - -
-
-

Sorry!

-

- Looks like we encountered a {{status}} error: {{reason}} -

-

- Try refreshing or going home. -

-
-
- -{{/layout}} \ No newline at end of file diff --git a/crates/collab/templates/home.hbs b/crates/collab/templates/home.hbs deleted file mode 100644 index 4d476da35e620bba57c2335302e7d378f2d6ceda..0000000000000000000000000000000000000000 --- a/crates/collab/templates/home.hbs +++ /dev/null @@ -1,110 +0,0 @@ -{{#> layout }} - -
-
-

Introducing Zed—A lightning-fast, collaborative code editor written in Rust.

-

- We think there's a better way to write code, and it starts with the following assumptions: -

- -

Mission-critical tools should be hyper-responsive.

- -

- When you move the cursor or type a character, you should see pixels on the next refresh of your display—every time. Even sub-perceptual pauses add up over the course of a day to create unnecessary stress. -

- -

- Joyful coding starts with an editor that stays out of your way. -

- -

Real-time collaboration produces better software.

- -

- Pull requests have their place, but sometimes you just want to code together. It's more fun than code review, builds trust between colleagues, and it's one of the best ways to distribute knowledge through a team. But it has to be easy. -

- -

- If you want someone's perspective on a piece of code, it should be as easy as sending a message to pull them into your working copy and start coding. -

- -

Conversations about software should happen close to the code.

- -

- If you want to talk about code on GitHub you have to commit and push it first, and pasting code into a chat application sucks. -

- -

- By treating keystrokes as the fundamental unit of change and integrating chat into the editor, we can make it easy to have a conversation about any line of code in any working copy–whether it was committed last year or just typed ten seconds ago. -

- -

Our goal is to make you as efficient as possible.

- -

- If you're living in a tool for hours every day, you want it to disappear. Every pixel must carry its weight, and the software you're creating should always be the focus. So we constantly ask ourselves how we can maximize signal and minimize noise. -

- -

- Do we need an icon? Do we need a gradient? We all want to achieve mastery. Our goal is to find the most efficient way to accomplish each coding task and make it accessible. We will never dumb things down. -

- -

———

- -

- We're looking to add another engineer to the team. Want to help us build the future? Join us. -

- -

———

- -

Under the hood

- -
-

Building in Rust

-

Rust offers expressivity and developer productivity rivaling languages that depend on a VM, while simultaneously offering the control required to fully utilize the underlying hardware.

- -

Rust's unique ownership model is a challenge at the beginning, but once you internalize it, you can write extremely efficient multi-core code without fear of invoking undefined behavior.

- -

It also makes it straightforward to call directly into the C-based APIs of the operating system. Rust makes it possible for a small team to build a complex product quickly, and Zed wouldn't have been possible without it.

- -

In the past, to write software with this performant you would need to use C++. Rust, for the first time, enables us to write software at that level as a very small team.

-
- -
-

A new GPU-powered UI framework

-

We originally planned to use Electron as a convenient means of delivering a cross-platform GUI for Zed, while building the core of the application in Rust. But at every turn, we found that web technology was the bottleneck in achieving amazing performance. Finally, we decided to take full control and simply build a GPU-powered UI framework that met our needs.

- -

We call it GPUI.

- -

We took a lot of inspiration from Mozilla's Webrender project. The key insight was that modern graphics hardware can render complex 3D graphics at high frame rates, so why not use it to render relatively simple 2D user interfaces with an immediate mode architecture?

- -

Rust's ownership model required us to rethink much of what we learned in other UI programming paradigms, but the result is a framework that's productive to use and remarkably easy to reason about.

- -

It's liberating to control every pixel, and it's a rush to push those pixels at lightning speed.

-
- -
-

Conflict-free replicated data types

- -

Real-time collaborative editing presents the illusion that multiple people are editing the same buffer. In reality, each collaborator maintains their own personal replica of the buffer to which they can apply local edits immediately without network latency.

- -

After being applied locally, edits are transmitted to collaborators over the network, whose copies may have also changed in the meantime. This means that as participants edit together, their replicas continuously diverge and reconverge. Turns out this is a tricky problem.

- -

To solve it, we're using conflict-free replicated data types, which have emerged in the last decade as a general framework for achieving eventual consistency in a variety of circumstances.

- -

Making Zed's buffers CRDTs allows for collaborative editing, but it also helps us reason about concurrent change so that we can push work into background threads and keep the UI thread responsive.

-
- -
-

Tree-sitter

- -

We plan to integrate with the Language Server Protocol to support advanced IDE features, but we also think it's important for a code editor to have a rich, native understanding of syntax.

- -

That's why we built Tree-sitter, a fast, general, incremental parsing library that can provide Zed with syntax trees for over 50 languages. Tree-sitter already powers production functionality on GitHub, and we'll use it to deliver syntactically-precise syntax highlighting, tree-based selection and cursor navigation, robust auto-indent support, symbolic navigation, and more.

-
- -

———

- -

Excited about what we are building? Sign up for updates to follow along in our development process.

-
-
- -{{/layout}} \ No newline at end of file diff --git a/crates/collab/templates/partials/layout.hbs b/crates/collab/templates/partials/layout.hbs deleted file mode 100644 index fe5d37d12afb27daaa1a9b8e195022ce4841d12b..0000000000000000000000000000000000000000 --- a/crates/collab/templates/partials/layout.hbs +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Zed - - - - -
- - - - -
- {{> @partial-block}} -
-
- - - - - - \ No newline at end of file diff --git a/crates/collab/templates/releases.hbs b/crates/collab/templates/releases.hbs deleted file mode 100644 index ab02c16822805c6d314768956bbc149a2a67f8f7..0000000000000000000000000000000000000000 --- a/crates/collab/templates/releases.hbs +++ /dev/null @@ -1,35 +0,0 @@ -{{#> layout }} - -
- {{#if current_user}} -

Releases

-

Zed is currently only available on macOS.

-

We are frequently shipping new versions, check back regularly to get the most recent version.

- - {{#if releases}} - - {{#each releases}} - - {{/each}} - {{/if}} - - {{else}} - -

Hold it!

-

You can't access this without logging in.

-

Try joining our community to get access to updates & releases.

- {{/if}} -
- -{{/layout}} diff --git a/crates/collab/templates/signup.hbs b/crates/collab/templates/signup.hbs deleted file mode 100644 index 5a032f457b2519cf0f85faa1cf76b39fd7fdbc74..0000000000000000000000000000000000000000 --- a/crates/collab/templates/signup.hbs +++ /dev/null @@ -1,18 +0,0 @@ -{{#> layout }} - -
-

Thanks for signing up!

-

- We'll add you to our list and let you know when we have something ready for you to try out. -

- -

- Thanks for your interest! -

- - - Back to Home - -
- -{{/layout}} diff --git a/crates/collab/templates/team.hbs b/crates/collab/templates/team.hbs deleted file mode 100644 index 82ac66ade3fb98d8db2d6cc991f41b28fb6825e7..0000000000000000000000000000000000000000 --- a/crates/collab/templates/team.hbs +++ /dev/null @@ -1,160 +0,0 @@ -{{#> layout }} - -
-

- We think there’s a better way to write code—and we've been working for more than a decade to bring it into existence. -

-

- Our first attempt was Atom, which we loved like a child but which ultimately fell short of our original vision. When we created Electron in 2012 to serve as Atom's runtime, there weren't a lot of great options for building cross-platform desktop apps. -

-

- Had we tried to write Atom in C or C++, it never would have shipped, and we loved the idea of developers extending their editor with the familiar tools of JavaScript, HTML, and CSS. -

-

- In the end, however, we reached the conclusion that the editor we wanted to use couldn't be built in a single-threaded scripting language. It was time to start over. Now we're back from the wilderness, this time with the knowledge and tools we need to execute without compromise. -

-

- We're leveraging Rust, conflict-free replicated data types, and every core of your CPU and GPU to deliver an editor that will make coding more productive, fun, and collaborative. We look forward to sharing our best with you! -

- -

The Team

-
-
-
-

Nathan Sobo

-
-

Nathan joined GitHub in late 2011 to build the Atom text editor, and he led the Atom team until 2018.

- -

He also co-led development of Teletype for Atom, pioneering one of the first production uses of conflict-free replicated data types for collaborative text editing.

- -

He's been dreaming about building the world’s best text editor since he graduated from college, and is excited to finally have the knowledge, tools, and resources to achieve this vision.

- - -
-

———

-
-
- -
-
-

Antonio Scandurra

-
-

Antonio joined the Atom team in 2014 while still in university after his outstanding open source contributions caught the attention of the team.

- -

He later joined Nathan in architecting Teletype for Atom and researching the foundations of what has turned into Zed.

- -

For the last two years, he’s become an expert in distributed systems and conflict-free replicated data types through the development of a real-time, distributed, conflict-free database implemented in Rust for Ditto.

- - -
-
-

———

-
- -
-
-

Max Brunsfeld

-
-

Max joined the Atom team in 2013 after working at Pivotal Labs.

- -

While driving Atom towards its 1.0 launch during the day, Max spent nights and weekends building Tree-sitter, a blazing-fast and expressive incremental parsing framework that currently powers all code analysis at GitHub.

- -

Before leaving to start Zed, Max helped GitHub's semantic analysis team integrate Tree-sitter to support syntax highlighting and code navigation on github.com.

- - -
-
-

———

-
- -
-
-

Nate Butler

-
-

Nate joined the Facebook team in 2015 as a product designer on News Feed, after spending the previous few years working on sites like Format.com and Lookbook.com.

- -

He spent three years shipping creative tools and projects like Facebook Avatars. He later moved on to working on dev tools and design systems, focused on developer efficiency.

- -

Before leaving to join Zed, Nate spent his last year at Facebook developing a future vision for Stories.

- - -
-
-

———

-
- -
-
-

Want to join us?

-
-

We hope to bring a few more staff-level engineers in the near future. Come join us in building the next generation of software.

- -

Drop us a line.

-
-
-
-
- - -
-{{/layout}}