diff --git a/Cargo.lock b/Cargo.lock index f48e24c8d8..ef89cf617a 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 34047406a7..22ba90936c 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 031e0d0244..d766324255 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 93bce50392..0000000000 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 ac0b261bd7..0000000000 --- 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 222b06e6c4..c05152fe7a 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 8b13789179..0000000000 --- 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 09cedf9019..047ae24f0f 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 005175a665..e4627427c0 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 f0a051fa42..0000000000 --- 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 8c36366861..7f504ecedc 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 15a8331058..0000000000 --- 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 74eab1431a..0000000000 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 d82871881c..0000000000 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 b0a74210a4..0000000000 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 65e87d4dd8..0000000000 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 a7c88a46e4..0000000000 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 7d41ec56d5..0000000000 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 a692e69a19..0000000000 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 da11fc4107..0000000000 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 725279b90d..0000000000 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 87dc93e100..0000000000 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 c39d362b2a..0000000000 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 c4e4969e8e..0000000000 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 d5d1ca31d8..0000000000 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 490769c8cb..0000000000 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 ccec4d68d9..0000000000 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 c12bf4cead..0000000000 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 f5fd18cc59..0000000000 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 d11da0a31c..0000000000 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 edd5687863..0000000000 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 59c7ce8656..0000000000 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 49baf8e42a..0000000000 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 3ce587fe2c..0000000000 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 f51d3f9433..0000000000 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 2b477bea70..0000000000 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 d1e64eddef..0000000000 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 06f8cc058c..0000000000 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 110303f496..0000000000 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 5f803f1c72..0000000000 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 afdbb176a2..0000000000 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 7cc0d7fcc5..0000000000 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 3162546b32..0000000000 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 2ba79e63ab..0000000000 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 e02074269c..0000000000 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 9a40e3d154..0000000000 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 70610de8d6..0000000000 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 b4a887af03..0000000000 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 4984ee655b..0000000000 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 a064e5b397..0000000000 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 d11dcf1da9..0000000000 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 88b0b22daf..0000000000 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 30edfb697f..0000000000 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 254537fb1b..0000000000 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 28910a2fa6..0000000000 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 8c46eace03..0000000000 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 a8efa01c03..0000000000 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 566303e2f4..0000000000 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 82c946d607..0000000000 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 9c92ce05cc..0000000000 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 2342d82c0b..0000000000 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 d25b64f77a..0000000000 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 f9ba99f40f..0000000000 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 486c293a82..0000000000 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 a34711800b..0000000000 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 821698c28f..0000000000 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 fdd3fe4610..0000000000 --- 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 e70abaf8d2..0000000000 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 545758300a..0000000000 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 73072f380d..0000000000 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 2f8fc1c3a1..0000000000 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 c28ce9405c..0000000000 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 981cf3f1cb..0000000000 --- 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 9410e705d8..0000000000 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 607d9bf9c6..0000000000 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 b08aaf6c6a..0000000000 --- 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 03bffb1196..0000000000 --- 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 0125373da8..0000000000 --- a/crates/collab/static/prose.css.map +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": 3, - "mappings": "AAIA,AAAA,OAAO,AAAA,MAAM,CAAC;EACZ,aAAa,EAAE,MAAM;CACtB;;AAED,AAAA,OAAO,AAAA,MAAM;AACb,WAAW,CAAC;EACV,WAAW,EAAE,wPAGmD;EAChE,cAAc,EAAE,QAAQ;CA8FzB;;AApGD,AAQE,OARK,AAAA,MAAM,CAQX,EAAE;AARJ,OAAO,AAAA,MAAM,CASX,EAAE;AATJ,OAAO,AAAA,MAAM,CAUX,EAAE;AAVJ,OAAO,AAAA,MAAM,CAWX,EAAE;AAVJ,WAAW,CAOT,EAAE;AAPJ,WAAW,CAQT,EAAE;AARJ,WAAW,CAST,EAAE;AATJ,WAAW,CAUT,EAAE,CAAC;EACD,MAAM,EAAE,aAAa;CACtB;;AAbH,AAeE,OAfK,AAAA,MAAM,CAeX,EAAE;AAdJ,WAAW,CAcT,EAAE,CAAC;EACD,SAAS,EAAE,OAAO;EAClB,WAAW,EAAE,MAAM;CACpB;;AAlBH,AAoBE,OApBK,AAAA,MAAM,CAoBX,EAAE;AAnBJ,WAAW,CAmBT,EAAE,CAAC;EACD,SAAS,EAAE,QAAQ;EACnB,WAAW,EAAE,OAAO;CACrB;;AAvBH,AAyBE,OAzBK,AAAA,MAAM,CAyBX,EAAE;AAxBJ,WAAW,CAwBT,EAAE,CAAC;EACD,SAAS,EAAE,MAAM;EACjB,WAAW,EAAE,IAAI;CAClB;;AA5BH,AA8BE,OA9BK,AAAA,MAAM,CA8BX,EAAE;AA7BJ,WAAW,CA6BT,EAAE,CAAC;EACD,SAAS,EAAE,MAAM;EACjB,WAAW,EAAE,OAAO;CACrB;;AAjCH,AAmCE,OAnCK,AAAA,MAAM,CAmCX,CAAC;AAnCH,OAAO,AAAA,MAAM,CAoCX,EAAE;AApCJ,OAAO,AAAA,MAAM,CAqCX,CAAC;AApCH,WAAW,CAkCT,CAAC;AAlCH,WAAW,CAmCT,EAAE;AAnCJ,WAAW,CAoCT,CAAC,CAAC;EACA,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,MAAM;EACjB,WAAW,EAAE,MAAM;CACpB;;AAzCH,AA2CE,OA3CK,AAAA,MAAM,CA2CX,CAAC,AAAA,IAAK,CAAA,GAAG;AA1CX,WAAW,CA0CT,CAAC,AAAA,IAAK,CAAA,GAAG,EAAE;EACT,eAAe,EAAE,SAAS;EAC1B,qBAAqB,EAAE,GAAG;CAC3B;;AA9CH,AAgDE,OAhDK,AAAA,MAAM,CAgDX,MAAM;AA/CR,WAAW,CA+CT,MAAM,CAAC;EACL,WAAW,EAAE,GAAG;CACjB;;AAlDH,AAoDE,OApDK,AAAA,MAAM,CAoDX,CAAC;AAnDH,WAAW,CAmDT,CAAC,CAAC;EACA,UAAU,EAAE,MAAM;CACnB;;AAtDH,AAwDE,OAxDK,AAAA,MAAM,CAwDX,CAAC,AAAA,IAAK,CAAA,aAAa;AAvDrB,WAAW,CAuDT,CAAC,AAAA,IAAK,CAAA,aAAa,EAAE;EACnB,aAAa,EAAE,MAAM;CACtB;;AA1DH,AA4DE,OA5DK,AAAA,MAAM,CA4DX,GAAG;AA5DL,OAAO,AAAA,MAAM,CA6DX,GAAG;AA5DL,WAAW,CA2DT,GAAG;AA3DL,WAAW,CA4DT,GAAG,CAAC;EACF,MAAM,EAAE,QAAQ;CACjB;;AA/DH,AAiEE,OAjEK,AAAA,MAAM,CAiEX,EAAE;AAhEJ,WAAW,CAgET,EAAE,CAAC;EACD,WAAW,EAAE,MAAM;CACpB;;AAnEH,AAqEE,OArEK,AAAA,MAAM,CAqEX,EAAE,CAAC,EAAE;AApEP,WAAW,CAoET,EAAE,CAAC,EAAE,CAAC;EACJ,eAAe,EAAE,IAAI;EACrB,mBAAmB,EAAE,OAAO;CAI7B;;AA3EH,AAwEI,OAxEG,AAAA,MAAM,CAqEX,EAAE,CAAC,EAAE,AAGF,IAAK,CAAA,aAAa;AAvEvB,WAAW,CAoET,EAAE,CAAC,EAAE,AAGF,IAAK,CAAA,aAAa,EAAE;EACnB,aAAa,EAAE,MAAM;CACtB;;AA1EL,AA6EE,OA7EK,AAAA,MAAM,CA6EX,IAAI;AA5EN,WAAW,CA4ET,IAAI,CAAC;EACH,WAAW,EAAE,yRAIkB;EAC/B,SAAS,EAAE,OAAO;EAClB,cAAc,EAAE,IAAI;CACrB;;AArFH,AAuFE,OAvFK,AAAA,MAAM,CAuFX,IAAK,CAAA,GAAG,IAAI,IAAI;AAtFlB,WAAW,CAsFT,IAAK,CAAA,GAAG,IAAI,IAAI,CAAC;EACf,OAAO,EAAE,aAAa;CACvB;;AAzFH,AA2FE,OA3FK,AAAA,MAAM,CA2FX,GAAG;AA1FL,WAAW,CA0FT,GAAG,CAAC;EACF,OAAO,EAAE,MAAM;CAChB;;AA7FH,AA+FE,OA/FK,AAAA,MAAM,CA+FX,GAAG;AA/FL,OAAO,AAAA,MAAM,CAgGX,IAAK,CAAA,GAAG,IAAI,IAAI;AA/FlB,WAAW,CA8FT,GAAG;AA9FL,WAAW,CA+FT,IAAK,CAAA,GAAG,IAAI,IAAI,CAAC;EACf,aAAa,EAAE,GAAG;EAClB,gBAAgB,EAAE,wBAAwB;CAC3C;;AAGH;;qHAEqH;AAErH,AAAA,IAAI,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB;AACL,GAAG,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,EAAoB;EACtB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,IAAI;EAChB,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,MAAM;EACpB,UAAU,EAAE,MAAM;EAClB,SAAS,EAAE,MAAM;EAEjB,aAAa,EAAE,CAAC;EAChB,WAAW,EAAE,CAAC;EACd,QAAQ,EAAE,CAAC;EAEX,eAAe,EAAE,IAAI;EACrB,YAAY,EAAE,IAAI;EAClB,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,IAAI;CACd;;AAED,iBAAiB;AAKjB,AAAA,GAAG,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,CAAmB,gBAAgB,CAAC;EACtC,aAAa;EACb,UAAU,EAAE,SAAS;CACtB;;AAED,AAAA,GAAG,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,CAAmB,WAAW,CAAC;EACjC,YAAY;EACZ,UAAU,EAAE,SAAS;CACtB;;AAED,2BAA2B;AAC3B,AAAA,GAAG,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,CAAmB,gBAAgB;AACvC,GAAG,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,EAAoB,gBAAgB;AACxC,IAAI,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,CAAmB,gBAAgB;AACxC,IAAI,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,EAAoB,gBAAgB,CAAC;EACxC,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,SAAS;CACtB;;AAED,AAAA,GAAG,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,CAAmB,WAAW;AAClC,GAAG,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,EAAoB,WAAW;AACnC,IAAI,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,CAAmB,WAAW;AACnC,IAAI,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,EAAoB,WAAW,CAAC;EACnC,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,SAAS;CACtB;;AAED,AAAA,MAAM,AAAA,QAAQ;AACd,MAAM,AAAA,OAAO;AACb,MAAM,AAAA,QAAQ;AACd,MAAM,AAAA,MAAM,CAAC;EACX,KAAK,EAAE,OAAO;CACf;;AAED,AAAA,MAAM,AAAA,YAAY,CAAC;EACjB,OAAO,EAAE,GAAG;CACb;;AAED,AAAA,MAAM,AAAA,UAAU,CAAC;EACf,OAAO,EAAE,GAAG;CACb;;AAED,AAAA,MAAM,AAAA,IAAI;AACV,MAAM,AAAA,QAAQ;AACd,MAAM,AAAA,OAAO;AACb,MAAM,AAAA,QAAQ,CAAC;EACb,KAAK,EAAE,OAAO;CACf;;AAED,AAAA,MAAM,AAAA,QAAQ;AACd,MAAM,AAAA,SAAS;AACf,MAAM,AAAA,SAAS;AACf,MAAM,AAAA,SAAS;AACf,MAAM,AAAA,OAAO;AACb,MAAM,AAAA,QAAQ,CAAC;EACb,KAAK,EAAE,OAAO;EAAE,aAAa;CAC9B;;AAED,AAAA,MAAM,AAAA,UAAU;AAChB,MAAM,AAAA,WAAW;AACjB,MAAM,AAAA,OAAO;AACb,MAAM,AAAA,KAAK;AACX,MAAM,AAAA,SAAS;AACf,MAAM,AAAA,OAAO;AACb,MAAM,AAAA,IAAI;AACV,aAAa,CAAC,MAAM,AAAA,OAAO;AAC3B,MAAM,CAAC,MAAM,AAAA,OAAO;AACpB,MAAM,AAAA,SAAS;AACf,MAAM,AAAA,SAAS,CAAC;EACd,KAAK,EAAE,OAAO;CACf;;AAED,AAAA,MAAM,AAAA,OAAO,CAAC;EACZ,KAAK,EAAE,OAAO;CACf;;AAED,AAAA,MAAM,AAAA,MAAM;AACZ,MAAM,AAAA,UAAU,CAAC;EACf,KAAK,EAAE,OAAO;CACf;;AAED,AAAA,MAAM,AAAA,UAAU;AAChB,MAAM,AAAA,KAAK,CAAC;EACV,WAAW,EAAE,IAAI;CAClB;;AACD,AAAA,MAAM,AAAA,OAAO,CAAC;EACZ,UAAU,EAAE,MAAM;CACnB;;AAED,AAAA,MAAM,AAAA,OAAO,CAAC;EACZ,MAAM,EAAE,IAAI;CACb;;AAED,YAAY;AACZ,AAAA,gBAAgB,CAAC,MAAM,AAAA,IAAI;AAC3B,gBAAgB,CAAC,MAAM,AAAA,UAAU;AACjC,gBAAgB,CAAC,MAAM,AAAA,YAAY,CAAC;EAClC,KAAK,EAAE,OAAO;CACf;;AAED,mFAAmF;AACnF,AAAA,MAAM,CAAC;EACL,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,CAAC;CACX", - "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 e034fdd7a2..0000000000 --- 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 f69ceec6eb..0000000000 --- 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 0678b70263..0000000000 --- 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 33af3f1033..0000000000 --- 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 6c3a4eba6e..0000000000 --- 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 4c6aaa6247..0000000000 --- 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 dfae551cdb..0000000000 --- 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 cb5f041089..0000000000 --- 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 4d0a99d27b..0000000000 --- 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 4d476da35e..0000000000 --- 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 fe5d37d12a..0000000000 --- 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 ab02c16822..0000000000 --- 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 5a032f457b..0000000000 --- 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 82ac66ade3..0000000000 --- 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}}