diff --git a/.cargo/config.toml b/.cargo/config.toml
new file mode 100644
index 0000000000000000000000000000000000000000..35049cbcb13c204648d1f7897162492f05123199
--- /dev/null
+++ b/.cargo/config.toml
@@ -0,0 +1,2 @@
+[alias]
+xtask = "run --package xtask --"
diff --git a/.config/nextest.toml b/.config/nextest.toml
new file mode 100644
index 0000000000000000000000000000000000000000..b05d68911fb5f50afaa623649fd426f7eb1e7bbe
--- /dev/null
+++ b/.config/nextest.toml
@@ -0,0 +1,6 @@
+[test-groups]
+sequential-db-tests = { max-threads = 1 }
+
+[[profile.default.overrides]]
+filter = 'package(db)'
+test-group = 'sequential-db-tests'
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f1c16b2d4d2a540da2ff6bbd00f01323b820f12e..a906c8b82d6fd6fa77e68c66d83bfc2341cd422d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -51,6 +51,7 @@ jobs:
rustup set profile minimal
rustup update stable
rustup target add wasm32-wasi
+ cargo install cargo-nextest
- name: Install Node
uses: actions/setup-node@v2
@@ -70,7 +71,7 @@ jobs:
run: cargo check --workspace
- name: Run tests
- run: cargo test --workspace --no-fail-fast
+ run: cargo nextest run --workspace --no-fail-fast
- name: Build collab
run: cargo build -p collab
diff --git a/.gitignore b/.gitignore
index 30d0fcbf1c8e5786d4c6145c5ae6d7043d6d5590..dbffa0f829cffe77c976a95d13f339be367e8840 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,8 @@
/plugins/bin
/script/node_modules
/styles/node_modules
+/styles/src/types/zed.ts
+/crates/theme/schemas/theme.json
/crates/collab/static/styles.css
/vendor/bin
/assets/themes/*.json
diff --git a/Cargo.lock b/Cargo.lock
index 55e10ed32620816839622831db11168f2a11c004..a9b2e29ea02e186af4b2034db7ee2e4ceca51a78 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -109,6 +109,8 @@ dependencies = [
"isahc",
"language",
"menu",
+ "project",
+ "regex",
"schemars",
"search",
"serde",
@@ -190,6 +192,55 @@ dependencies = [
"libc",
]
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal 0.4.7",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
[[package]]
name = "anyhow"
version = "1.0.71"
@@ -1102,8 +1153,8 @@ checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
dependencies = [
"atty",
"bitflags",
- "clap_derive",
- "clap_lex",
+ "clap_derive 3.2.25",
+ "clap_lex 0.2.4",
"indexmap",
"once_cell",
"strsim",
@@ -1111,6 +1162,30 @@ dependencies = [
"textwrap",
]
+[[package]]
+name = "clap"
+version = "4.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2686c4115cb0810d9a984776e197823d08ec94f176549a89a9efded477c456dc"
+dependencies = [
+ "clap_builder",
+ "clap_derive 4.3.2",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e53afce1efce6ed1f633cf0e57612fe51db54a1ee4fd8f8503d078fe02d69ae"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags",
+ "clap_lex 0.5.0",
+ "strsim",
+]
+
[[package]]
name = "clap_derive"
version = "3.2.25"
@@ -1124,6 +1199,18 @@ dependencies = [
"syn 1.0.109",
]
+[[package]]
+name = "clap_derive"
+version = "4.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
[[package]]
name = "clap_lex"
version = "0.2.4"
@@ -1133,12 +1220,18 @@ dependencies = [
"os_str_bytes",
]
+[[package]]
+name = "clap_lex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
[[package]]
name = "cli"
version = "0.1.0"
dependencies = [
"anyhow",
- "clap",
+ "clap 3.2.25",
"core-foundation",
"core-services",
"dirs 3.0.2",
@@ -1240,7 +1333,7 @@ dependencies = [
[[package]]
name = "collab"
-version = "0.14.2"
+version = "0.15.0"
dependencies = [
"anyhow",
"async-tungstenite",
@@ -1248,7 +1341,7 @@ dependencies = [
"axum-extra",
"base64 0.13.1",
"call",
- "clap",
+ "clap 3.2.25",
"client",
"collections",
"ctor",
@@ -1326,8 +1419,10 @@ dependencies = [
"serde_derive",
"settings",
"theme",
+ "theme_selector",
"util",
"workspace",
+ "zed-actions",
]
[[package]]
@@ -1343,6 +1438,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
[[package]]
name = "command_palette"
version = "0.1.0"
@@ -6917,18 +7018,6 @@ dependencies = [
"workspace",
]
-[[package]]
-name = "theme_testbench"
-version = "0.1.0"
-dependencies = [
- "gpui",
- "project",
- "settings",
- "smallvec",
- "theme",
- "workspace",
-]
-
[[package]]
name = "thiserror"
version = "1.0.40"
@@ -8781,6 +8870,17 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9"
+[[package]]
+name = "xtask"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap 4.3.5",
+ "schemars",
+ "serde_json",
+ "theme",
+]
+
[[package]]
name = "yaml-rust"
version = "0.4.5"
@@ -8810,7 +8910,7 @@ dependencies = [
[[package]]
name = "zed"
-version = "0.92.0"
+version = "0.94.0"
dependencies = [
"activity_indicator",
"ai",
@@ -8889,7 +8989,6 @@ dependencies = [
"text",
"theme",
"theme_selector",
- "theme_testbench",
"thiserror",
"tiny_http",
"toml",
@@ -8921,6 +9020,14 @@ dependencies = [
"vim",
"welcome",
"workspace",
+ "zed-actions",
+]
+
+[[package]]
+name = "zed-actions"
+version = "0.1.0"
+dependencies = [
+ "gpui",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index fca735596489a222208e2f65874efc4fcd04ffd5..3f3953096eda1e0e05dad60b3507b1c0a0843295 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -61,12 +61,13 @@ members = [
"crates/text",
"crates/theme",
"crates/theme_selector",
- "crates/theme_testbench",
"crates/util",
"crates/vim",
"crates/workspace",
"crates/welcome",
+ "crates/xtask",
"crates/zed",
+ "crates/zed-actions"
]
default-members = ["crates/zed"]
resolver = "2"
@@ -118,3 +119,4 @@ split-debuginfo = "unpacked"
[profile.release]
debug = true
lto = "thin"
+codegen-units = 1
diff --git a/assets/icons/assist_15.svg b/assets/icons/assist_15.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3baf8df3e936347415749cf0667c04e32391f828
--- /dev/null
+++ b/assets/icons/assist_15.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/hamburger_15.svg b/assets/icons/hamburger_15.svg
new file mode 100644
index 0000000000000000000000000000000000000000..060caeecbfd58603530f253248a0c369ba329b4e
--- /dev/null
+++ b/assets/icons/hamburger_15.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/quote_15.svg b/assets/icons/quote_15.svg
new file mode 100644
index 0000000000000000000000000000000000000000..be5eabd9b019902a44c03ac5545441702b6d7925
--- /dev/null
+++ b/assets/icons/quote_15.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/radix/accessibility.svg b/assets/icons/radix/accessibility.svg
new file mode 100644
index 0000000000000000000000000000000000000000..32d78f2d8da1c317727810706a892a63f588463e
--- /dev/null
+++ b/assets/icons/radix/accessibility.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/activity-log.svg b/assets/icons/radix/activity-log.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8feab7d44942915ef6d49602e272b03125ee8ea4
--- /dev/null
+++ b/assets/icons/radix/activity-log.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-baseline.svg b/assets/icons/radix/align-baseline.svg
new file mode 100644
index 0000000000000000000000000000000000000000..07213dc1ae61fbf49d3f72b107082b07892fa0c1
--- /dev/null
+++ b/assets/icons/radix/align-baseline.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-bottom.svg b/assets/icons/radix/align-bottom.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7d11c0cd5a6e11be048bcfc04c782fcd3e61f2ee
--- /dev/null
+++ b/assets/icons/radix/align-bottom.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-center-horizontally.svg b/assets/icons/radix/align-center-horizontally.svg
new file mode 100644
index 0000000000000000000000000000000000000000..69509a7d097821d2c0169ae468efc8d74a7e90c9
--- /dev/null
+++ b/assets/icons/radix/align-center-horizontally.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-center-vertically.svg b/assets/icons/radix/align-center-vertically.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4f1b50cc4366775a792bef2b4475ec864856a3a7
--- /dev/null
+++ b/assets/icons/radix/align-center-vertically.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-center.svg b/assets/icons/radix/align-center.svg
new file mode 100644
index 0000000000000000000000000000000000000000..caaec36477fbbf2bcfef558aa682092d0bbd9a01
--- /dev/null
+++ b/assets/icons/radix/align-center.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-end.svg b/assets/icons/radix/align-end.svg
new file mode 100644
index 0000000000000000000000000000000000000000..18f1b6491233806086baf55ab67c5d7f4e10ff54
--- /dev/null
+++ b/assets/icons/radix/align-end.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-horizontal-centers.svg b/assets/icons/radix/align-horizontal-centers.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2d1d64ea4b82ef5e0d933b9bf0ec439c9998dd98
--- /dev/null
+++ b/assets/icons/radix/align-horizontal-centers.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-left.svg b/assets/icons/radix/align-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0d5dba095c7d0756d489d415276064a91d4fd3ce
--- /dev/null
+++ b/assets/icons/radix/align-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-right.svg b/assets/icons/radix/align-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1b6b3f0ffa9c649b005739baafa9d973013af076
--- /dev/null
+++ b/assets/icons/radix/align-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-start.svg b/assets/icons/radix/align-start.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ada50e1079e481cde5f0f9ee5884a7030ebb0bc6
--- /dev/null
+++ b/assets/icons/radix/align-start.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-stretch.svg b/assets/icons/radix/align-stretch.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3cb28605cbf1b1a8470fabd1257370d74b3e5682
--- /dev/null
+++ b/assets/icons/radix/align-stretch.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-top.svg b/assets/icons/radix/align-top.svg
new file mode 100644
index 0000000000000000000000000000000000000000..23db80f4dd0ebb04ee703fe74d4b535abbd01da1
--- /dev/null
+++ b/assets/icons/radix/align-top.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/align-vertical-centers.svg b/assets/icons/radix/align-vertical-centers.svg
new file mode 100644
index 0000000000000000000000000000000000000000..07eaee7bf7d9274c402bb3f4bfaa0dea486eb09b
--- /dev/null
+++ b/assets/icons/radix/align-vertical-centers.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/all-sides.svg b/assets/icons/radix/all-sides.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8ace7df03f4d17ba1e8f858b94d418eb63618ea6
--- /dev/null
+++ b/assets/icons/radix/all-sides.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/angle.svg b/assets/icons/radix/angle.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a0d93f3460ca940a1bf5e7ad94c46f56d40ccc7b
--- /dev/null
+++ b/assets/icons/radix/angle.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/archive.svg b/assets/icons/radix/archive.svg
new file mode 100644
index 0000000000000000000000000000000000000000..74063f1d1e2346c09ee2a6a5297c30ef7e0c74ad
--- /dev/null
+++ b/assets/icons/radix/archive.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/arrow-bottom-left.svg b/assets/icons/radix/arrow-bottom-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7a4511aa2d69b39c305cd80c291c868007cba491
--- /dev/null
+++ b/assets/icons/radix/arrow-bottom-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/arrow-bottom-right.svg b/assets/icons/radix/arrow-bottom-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2ba9fef1019774f1e5094f5654d89df848cdbb5b
--- /dev/null
+++ b/assets/icons/radix/arrow-bottom-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/arrow-down.svg b/assets/icons/radix/arrow-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5dc21a66890fb27f537b4400e96d48b7f7ce84a6
--- /dev/null
+++ b/assets/icons/radix/arrow-down.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/arrow-left.svg b/assets/icons/radix/arrow-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3a64c8394f0825b3708634c2d003a648877c35cd
--- /dev/null
+++ b/assets/icons/radix/arrow-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/arrow-right.svg b/assets/icons/radix/arrow-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e3d30988d5e7b4547393281c7bdad60c3006f4f3
--- /dev/null
+++ b/assets/icons/radix/arrow-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/arrow-top-left.svg b/assets/icons/radix/arrow-top-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..69fef41dee621d3f8cf681e630c0ce623d65124d
--- /dev/null
+++ b/assets/icons/radix/arrow-top-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/arrow-top-right.svg b/assets/icons/radix/arrow-top-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c1016376e3232ead02dde954379ce74b7bfb68f7
--- /dev/null
+++ b/assets/icons/radix/arrow-top-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/arrow-up.svg b/assets/icons/radix/arrow-up.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ba426119e901d0a1132d0e47b34c0beebaec22ce
--- /dev/null
+++ b/assets/icons/radix/arrow-up.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/aspect-ratio.svg b/assets/icons/radix/aspect-ratio.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0851f2e1e9f46d52cd2974b77a65e3a8b95b339e
--- /dev/null
+++ b/assets/icons/radix/aspect-ratio.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/avatar.svg b/assets/icons/radix/avatar.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cb229c77fe827f64054b6bfa05f2ad2aaf17c2d3
--- /dev/null
+++ b/assets/icons/radix/avatar.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/backpack.svg b/assets/icons/radix/backpack.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a5c9cedbd32dd589c825852f447e8c6125c2a8fb
--- /dev/null
+++ b/assets/icons/radix/backpack.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/badge.svg b/assets/icons/radix/badge.svg
new file mode 100644
index 0000000000000000000000000000000000000000..aa764d4726f449c163b00e1bd993d12c5aa95c24
--- /dev/null
+++ b/assets/icons/radix/badge.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/bar-chart.svg b/assets/icons/radix/bar-chart.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f8054781d9ec2ee79f0652ae20753e3e80752bff
--- /dev/null
+++ b/assets/icons/radix/bar-chart.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/bell.svg b/assets/icons/radix/bell.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ea1c6dd42e8821b632f6de97d143a7b9f4b97fd2
--- /dev/null
+++ b/assets/icons/radix/bell.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/blending-mode.svg b/assets/icons/radix/blending-mode.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bd58cf4ee38ee66e9860df11a9f4150899a9c8a8
--- /dev/null
+++ b/assets/icons/radix/blending-mode.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/bookmark-filled.svg b/assets/icons/radix/bookmark-filled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5b725cd88dbf9337d52095a7567a2bc12e15439a
--- /dev/null
+++ b/assets/icons/radix/bookmark-filled.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/bookmark.svg b/assets/icons/radix/bookmark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..90c4d827f13cd47a83a030c833a02e15492dc084
--- /dev/null
+++ b/assets/icons/radix/bookmark.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/border-all.svg b/assets/icons/radix/border-all.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3bfde7d59baa675eeae72eac6f7245eadbe10821
--- /dev/null
+++ b/assets/icons/radix/border-all.svg
@@ -0,0 +1,17 @@
+
diff --git a/assets/icons/radix/border-bottom.svg b/assets/icons/radix/border-bottom.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f2d3c3d554e09837c464ff425c3af74413db4eb6
--- /dev/null
+++ b/assets/icons/radix/border-bottom.svg
@@ -0,0 +1,29 @@
+
diff --git a/assets/icons/radix/border-dashed.svg b/assets/icons/radix/border-dashed.svg
new file mode 100644
index 0000000000000000000000000000000000000000..85fdcdfe5d7f3905f2056912a5bc56d229ca5ee0
--- /dev/null
+++ b/assets/icons/radix/border-dashed.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/border-dotted.svg b/assets/icons/radix/border-dotted.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5eb514ed2a60093e0c4eb904b4cc5c6d18b9a62f
--- /dev/null
+++ b/assets/icons/radix/border-dotted.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/border-left.svg b/assets/icons/radix/border-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5deb197da51a7db874b57e1a473d4287b2a3cd49
--- /dev/null
+++ b/assets/icons/radix/border-left.svg
@@ -0,0 +1,29 @@
+
diff --git a/assets/icons/radix/border-none.svg b/assets/icons/radix/border-none.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1ad3f59d7c9b93101657ad1523a2939d02f504d8
--- /dev/null
+++ b/assets/icons/radix/border-none.svg
@@ -0,0 +1,35 @@
+
diff --git a/assets/icons/radix/border-right.svg b/assets/icons/radix/border-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c939095ad78a75eeb5f8b2e31f57e56b201b8a4c
--- /dev/null
+++ b/assets/icons/radix/border-right.svg
@@ -0,0 +1,29 @@
+
diff --git a/assets/icons/radix/border-solid.svg b/assets/icons/radix/border-solid.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5c0d26a0583140b8ba0b47e937bc0dedc81e4fb5
--- /dev/null
+++ b/assets/icons/radix/border-solid.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/border-split.svg b/assets/icons/radix/border-split.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7fdf6cc34e73e6543fa34e9b52e22382130d6f1a
--- /dev/null
+++ b/assets/icons/radix/border-split.svg
@@ -0,0 +1,21 @@
+
diff --git a/assets/icons/radix/border-style.svg b/assets/icons/radix/border-style.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f729cb993babfa12140deabc9451eceee6b7885a
--- /dev/null
+++ b/assets/icons/radix/border-style.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/border-top.svg b/assets/icons/radix/border-top.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bde739d75539be17496a8ce65b875b4f4b943940
--- /dev/null
+++ b/assets/icons/radix/border-top.svg
@@ -0,0 +1,29 @@
+
diff --git a/assets/icons/radix/border-width.svg b/assets/icons/radix/border-width.svg
new file mode 100644
index 0000000000000000000000000000000000000000..37c270756ec4ec5a8a42b81b64bfbbe8e24f892a
--- /dev/null
+++ b/assets/icons/radix/border-width.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/box-model.svg b/assets/icons/radix/box-model.svg
new file mode 100644
index 0000000000000000000000000000000000000000..45d1a7ce415aa508a8a8f8d39f8032a22c2b4e5a
--- /dev/null
+++ b/assets/icons/radix/box-model.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/box.svg b/assets/icons/radix/box.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6e035c21ed8fd3ad1eca7297921da359262e8445
--- /dev/null
+++ b/assets/icons/radix/box.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/button.svg b/assets/icons/radix/button.svg
new file mode 100644
index 0000000000000000000000000000000000000000..31622bcf159a83dbf7dbc7960da3c490711a14ff
--- /dev/null
+++ b/assets/icons/radix/button.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/calendar.svg b/assets/icons/radix/calendar.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2adbe0bc2868392e36079a5860ddf706543b210e
--- /dev/null
+++ b/assets/icons/radix/calendar.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/camera.svg b/assets/icons/radix/camera.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d7cccf74c2e416dd8abcd45be121f73eccea3c12
--- /dev/null
+++ b/assets/icons/radix/camera.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/card-stack-minus.svg b/assets/icons/radix/card-stack-minus.svg
new file mode 100644
index 0000000000000000000000000000000000000000..04d8e51178a0a8ea38a5354aa421e20bd4091298
--- /dev/null
+++ b/assets/icons/radix/card-stack-minus.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/card-stack-plus.svg b/assets/icons/radix/card-stack-plus.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a184f4bc1aff9b3b212fc3cce7265cf58bba3948
--- /dev/null
+++ b/assets/icons/radix/card-stack-plus.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/card-stack.svg b/assets/icons/radix/card-stack.svg
new file mode 100644
index 0000000000000000000000000000000000000000..defea0e1654f9267fa91a8b66e2bf1191b95aadd
--- /dev/null
+++ b/assets/icons/radix/card-stack.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/caret-down.svg b/assets/icons/radix/caret-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ff8b8c3b88b8885b52a090eeca3f21526bb0a456
--- /dev/null
+++ b/assets/icons/radix/caret-down.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/caret-left.svg b/assets/icons/radix/caret-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..969bc3b95c2194b922c1858ddf89b5d2461f11d3
--- /dev/null
+++ b/assets/icons/radix/caret-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/caret-right.svg b/assets/icons/radix/caret-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..75c55d8676eebdc09961d63b870e12fc0a91c5c5
--- /dev/null
+++ b/assets/icons/radix/caret-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/caret-sort.svg b/assets/icons/radix/caret-sort.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a65e20b660481333e4e27e32203c9a5d12a5f150
--- /dev/null
+++ b/assets/icons/radix/caret-sort.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/caret-up.svg b/assets/icons/radix/caret-up.svg
new file mode 100644
index 0000000000000000000000000000000000000000..53026b83d8b36505b4b0f32c6e6d4a4c690c7beb
--- /dev/null
+++ b/assets/icons/radix/caret-up.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/chat-bubble.svg b/assets/icons/radix/chat-bubble.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5766f46de868ad91fc0ff057691a7dea474a0dae
--- /dev/null
+++ b/assets/icons/radix/chat-bubble.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/check-circled.svg b/assets/icons/radix/check-circled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..19ee22eb511b987dd3acfc5c7c833d6561a4662d
--- /dev/null
+++ b/assets/icons/radix/check-circled.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/check.svg b/assets/icons/radix/check.svg
new file mode 100644
index 0000000000000000000000000000000000000000..476a3baa18e42bb05edfd7ec0c3a2aef155cc003
--- /dev/null
+++ b/assets/icons/radix/check.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/checkbox.svg b/assets/icons/radix/checkbox.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d6bb3c7ef2f0e97b823bffb1d4ea1edd38609da9
--- /dev/null
+++ b/assets/icons/radix/checkbox.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/chevron-down.svg b/assets/icons/radix/chevron-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..175c1312fd37417cba0bbcd9230b4dffa24821e4
--- /dev/null
+++ b/assets/icons/radix/chevron-down.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/chevron-left.svg b/assets/icons/radix/chevron-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d7628202f29edf1642deb44bf93ff540aa728475
--- /dev/null
+++ b/assets/icons/radix/chevron-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/chevron-right.svg b/assets/icons/radix/chevron-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e3ebd73d9909a53e3fb721f2ea686f1dca0b477b
--- /dev/null
+++ b/assets/icons/radix/chevron-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/chevron-up.svg b/assets/icons/radix/chevron-up.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0e8e796dab46c9de345166aa4dba818305b68857
--- /dev/null
+++ b/assets/icons/radix/chevron-up.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/circle-backslash.svg b/assets/icons/radix/circle-backslash.svg
new file mode 100644
index 0000000000000000000000000000000000000000..40c4dd5398b454220d4d22dbbec08bcdb335be71
--- /dev/null
+++ b/assets/icons/radix/circle-backslash.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/circle.svg b/assets/icons/radix/circle.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ba4a8f22fe574008e076c7983dfc5f743d03f2df
--- /dev/null
+++ b/assets/icons/radix/circle.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/clipboard-copy.svg b/assets/icons/radix/clipboard-copy.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5293fdc493f5577936977562c9457bbfa809f012
--- /dev/null
+++ b/assets/icons/radix/clipboard-copy.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/clipboard.svg b/assets/icons/radix/clipboard.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e18b32943be09aca0c53294e8e65187564ba1224
--- /dev/null
+++ b/assets/icons/radix/clipboard.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/clock.svg b/assets/icons/radix/clock.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ac3b526fbbda03c5984d7c9dfaf937be520910a2
--- /dev/null
+++ b/assets/icons/radix/clock.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/code.svg b/assets/icons/radix/code.svg
new file mode 100644
index 0000000000000000000000000000000000000000..70fe381b68c5b95065275b5163af76dabaa5b22e
--- /dev/null
+++ b/assets/icons/radix/code.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/codesandbox-logo.svg b/assets/icons/radix/codesandbox-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4a3f549c2f6d7271e9a8fb225e18285d90312df8
--- /dev/null
+++ b/assets/icons/radix/codesandbox-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/color-wheel.svg b/assets/icons/radix/color-wheel.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2153b84428f354843aa7ffd3be174680440be90c
--- /dev/null
+++ b/assets/icons/radix/color-wheel.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/column-spacing.svg b/assets/icons/radix/column-spacing.svg
new file mode 100644
index 0000000000000000000000000000000000000000..aafcf555cb1ca06550c39419d20c257b02ea1934
--- /dev/null
+++ b/assets/icons/radix/column-spacing.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/columns.svg b/assets/icons/radix/columns.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e1607611b1a24957c7983041a540806b4275d289
--- /dev/null
+++ b/assets/icons/radix/columns.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/commit.svg b/assets/icons/radix/commit.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ac128a2b083d6b94f17ee065d88226ff7dc53da3
--- /dev/null
+++ b/assets/icons/radix/commit.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/component-1.svg b/assets/icons/radix/component-1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e3e9f38af1fba0b278ed2c48bfc76cb2a6783307
--- /dev/null
+++ b/assets/icons/radix/component-1.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/component-2.svg b/assets/icons/radix/component-2.svg
new file mode 100644
index 0000000000000000000000000000000000000000..df2091d1437ba51b4d1d6647dfa4d16ebd7dac53
--- /dev/null
+++ b/assets/icons/radix/component-2.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/component-boolean.svg b/assets/icons/radix/component-boolean.svg
new file mode 100644
index 0000000000000000000000000000000000000000..942e8832eb4e99cd3af0dc61a1bde6ea01574cb8
--- /dev/null
+++ b/assets/icons/radix/component-boolean.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/component-instance.svg b/assets/icons/radix/component-instance.svg
new file mode 100644
index 0000000000000000000000000000000000000000..048c40129134426ed628de6d386be9017b484d32
--- /dev/null
+++ b/assets/icons/radix/component-instance.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/component-none.svg b/assets/icons/radix/component-none.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a622c3ee960ac4b61d03f4d7b755d98576e37b0d
--- /dev/null
+++ b/assets/icons/radix/component-none.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/component-placeholder.svg b/assets/icons/radix/component-placeholder.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b8892d5d23632fd251938af55c0ae34a112ba058
--- /dev/null
+++ b/assets/icons/radix/component-placeholder.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/radix/container.svg b/assets/icons/radix/container.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1c2a4fd0e18cf47ee793eb6196f6b21e99bda6c0
--- /dev/null
+++ b/assets/icons/radix/container.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/cookie.svg b/assets/icons/radix/cookie.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8c165601a2a8af711ce771ea31b829405bccdfba
--- /dev/null
+++ b/assets/icons/radix/cookie.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/copy.svg b/assets/icons/radix/copy.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bf2b504ecfcb378b1a93cf893b4eb070da9471fb
--- /dev/null
+++ b/assets/icons/radix/copy.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/corner-bottom-left.svg b/assets/icons/radix/corner-bottom-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..26df9dbad8c28a6bd041e14bde9cb23624cf66ca
--- /dev/null
+++ b/assets/icons/radix/corner-bottom-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/corner-bottom-right.svg b/assets/icons/radix/corner-bottom-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..15e395712342d3f4d5625d6159f3c1a5ba78e108
--- /dev/null
+++ b/assets/icons/radix/corner-bottom-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/corner-top-left.svg b/assets/icons/radix/corner-top-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8fc1b84b825e7ed1d63ac0dee1b93c768ae42048
--- /dev/null
+++ b/assets/icons/radix/corner-top-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/corner-top-right.svg b/assets/icons/radix/corner-top-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..533ea6c678c2edb2355862ed4ab2712f2b338bab
--- /dev/null
+++ b/assets/icons/radix/corner-top-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/corners.svg b/assets/icons/radix/corners.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c41c4e01839621c0f3a3ec8c6a7c02d7345e97b2
--- /dev/null
+++ b/assets/icons/radix/corners.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/countdown-timer.svg b/assets/icons/radix/countdown-timer.svg
new file mode 100644
index 0000000000000000000000000000000000000000..58494bd416ab93113128a113c3dbaa5b5f268b2a
--- /dev/null
+++ b/assets/icons/radix/countdown-timer.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/counter-clockwise-clock.svg b/assets/icons/radix/counter-clockwise-clock.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0b3acbcebf2d7d71a23d9b89648df9ac532ae847
--- /dev/null
+++ b/assets/icons/radix/counter-clockwise-clock.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/crop.svg b/assets/icons/radix/crop.svg
new file mode 100644
index 0000000000000000000000000000000000000000..008457fff6861d102469ef46a234080e6fb0c634
--- /dev/null
+++ b/assets/icons/radix/crop.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/cross-1.svg b/assets/icons/radix/cross-1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..62135d27edf689ce7a06092a95248ffeb67b8f9e
--- /dev/null
+++ b/assets/icons/radix/cross-1.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/cross-2.svg b/assets/icons/radix/cross-2.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4c557009286712b14e716f7e69309b0eb197d768
--- /dev/null
+++ b/assets/icons/radix/cross-2.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/cross-circled.svg b/assets/icons/radix/cross-circled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..df3cb896c8f20de3614ce7adfd4a6774bead4ee5
--- /dev/null
+++ b/assets/icons/radix/cross-circled.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/crosshair-1.svg b/assets/icons/radix/crosshair-1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..05b22f8461a6d1a513b74aeb0ea976936e42f253
--- /dev/null
+++ b/assets/icons/radix/crosshair-1.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/crosshair-2.svg b/assets/icons/radix/crosshair-2.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f5ee0a92af713fb3bd8c366f7400194d291ee7b5
--- /dev/null
+++ b/assets/icons/radix/crosshair-2.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/crumpled-paper.svg b/assets/icons/radix/crumpled-paper.svg
new file mode 100644
index 0000000000000000000000000000000000000000..33e9b65581b6a35b7f8c687f1b9dbab9edbb32cf
--- /dev/null
+++ b/assets/icons/radix/crumpled-paper.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/cube.svg b/assets/icons/radix/cube.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b327158be4afc35744fe0c2e84b5f73662a93472
--- /dev/null
+++ b/assets/icons/radix/cube.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/cursor-arrow.svg b/assets/icons/radix/cursor-arrow.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b0227e4ded7aef4a78baebcf10a511e0c5659f6c
--- /dev/null
+++ b/assets/icons/radix/cursor-arrow.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/cursor-text.svg b/assets/icons/radix/cursor-text.svg
new file mode 100644
index 0000000000000000000000000000000000000000..05939503b8a5c4caed24fe8ab938fbef8406ffdd
--- /dev/null
+++ b/assets/icons/radix/cursor-text.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/dash.svg b/assets/icons/radix/dash.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d70daf7fed6ec8e6346e5800ef89249d7cf62984
--- /dev/null
+++ b/assets/icons/radix/dash.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/dashboard.svg b/assets/icons/radix/dashboard.svg
new file mode 100644
index 0000000000000000000000000000000000000000..38008c64e41e2addfea23f4c5f88bc04a2a49e86
--- /dev/null
+++ b/assets/icons/radix/dashboard.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/desktop-mute.svg b/assets/icons/radix/desktop-mute.svg
new file mode 100644
index 0000000000000000000000000000000000000000..83d249176fbf067a2732fa4379740cfa54bd018a
--- /dev/null
+++ b/assets/icons/radix/desktop-mute.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/icons/radix/desktop.svg b/assets/icons/radix/desktop.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ad252e64cf5c73d4cd6ae48dd0abede47d3323e6
--- /dev/null
+++ b/assets/icons/radix/desktop.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/dimensions.svg b/assets/icons/radix/dimensions.svg
new file mode 100644
index 0000000000000000000000000000000000000000..767d1d289641510dca8f75431192786f294be2a1
--- /dev/null
+++ b/assets/icons/radix/dimensions.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/disc.svg b/assets/icons/radix/disc.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6e19caab3504eef094cd4cffbe43b657dc1913ad
--- /dev/null
+++ b/assets/icons/radix/disc.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/discord-logo.svg b/assets/icons/radix/discord-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..50567c212eda4dca3f87df399dd0e6d0dc076c2b
--- /dev/null
+++ b/assets/icons/radix/discord-logo.svg
@@ -0,0 +1,13 @@
+
diff --git a/assets/icons/radix/divider-horizontal.svg b/assets/icons/radix/divider-horizontal.svg
new file mode 100644
index 0000000000000000000000000000000000000000..59e43649c93b1767739548a6bc8122886c6061ad
--- /dev/null
+++ b/assets/icons/radix/divider-horizontal.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/divider-vertical.svg b/assets/icons/radix/divider-vertical.svg
new file mode 100644
index 0000000000000000000000000000000000000000..95f5cc8f2f45dabe00fd376a8ac2db99155e686f
--- /dev/null
+++ b/assets/icons/radix/divider-vertical.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/dot-filled.svg b/assets/icons/radix/dot-filled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0c1a17b3bd8a904d7274a18b5a4432681fb867ca
--- /dev/null
+++ b/assets/icons/radix/dot-filled.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/radix/dot-solid.svg b/assets/icons/radix/dot-solid.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0c1a17b3bd8a904d7274a18b5a4432681fb867ca
--- /dev/null
+++ b/assets/icons/radix/dot-solid.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/radix/dot.svg b/assets/icons/radix/dot.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c553a1422dbd52775efacadede6863d2dc0256c9
--- /dev/null
+++ b/assets/icons/radix/dot.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/dots-horizontal.svg b/assets/icons/radix/dots-horizontal.svg
new file mode 100644
index 0000000000000000000000000000000000000000..347d1ae13d84eaef1bf4ab33d65a9dfcf11292d5
--- /dev/null
+++ b/assets/icons/radix/dots-horizontal.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/dots-vertical.svg b/assets/icons/radix/dots-vertical.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5ca1a181e3887e4b5459c899aedb25acf60d4bed
--- /dev/null
+++ b/assets/icons/radix/dots-vertical.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/double-arrow-down.svg b/assets/icons/radix/double-arrow-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8b86db2f8a0baa6350a0ad772c083b22fd520be9
--- /dev/null
+++ b/assets/icons/radix/double-arrow-down.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/double-arrow-left.svg b/assets/icons/radix/double-arrow-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0ef30ff9554c558469c75252ef56a828cad2c777
--- /dev/null
+++ b/assets/icons/radix/double-arrow-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/double-arrow-right.svg b/assets/icons/radix/double-arrow-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9997fdc40398d3cf1c6ce30c78ae4d5b4f319457
--- /dev/null
+++ b/assets/icons/radix/double-arrow-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/double-arrow-up.svg b/assets/icons/radix/double-arrow-up.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8d571fcd66980e46d4e26eaf96870df6ff469408
--- /dev/null
+++ b/assets/icons/radix/double-arrow-up.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/download.svg b/assets/icons/radix/download.svg
new file mode 100644
index 0000000000000000000000000000000000000000..49a05d5f47f7c07faa1403c5320268e6df2581a5
--- /dev/null
+++ b/assets/icons/radix/download.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/drag-handle-dots-1.svg b/assets/icons/radix/drag-handle-dots-1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fc046bb9d9b03b5bdd5ea49dc1bedab8aacab656
--- /dev/null
+++ b/assets/icons/radix/drag-handle-dots-1.svg
@@ -0,0 +1,26 @@
+
diff --git a/assets/icons/radix/drag-handle-dots-2.svg b/assets/icons/radix/drag-handle-dots-2.svg
new file mode 100644
index 0000000000000000000000000000000000000000..aed0e702d7635421fc6674e2daafbccb0573314c
--- /dev/null
+++ b/assets/icons/radix/drag-handle-dots-2.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/drag-handle-horizontal.svg b/assets/icons/radix/drag-handle-horizontal.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c1bb138a244147fc61333952ee898979ce67351f
--- /dev/null
+++ b/assets/icons/radix/drag-handle-horizontal.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/drag-handle-vertical.svg b/assets/icons/radix/drag-handle-vertical.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8d48c7894afcb4949b1784f93c062014dcd207c6
--- /dev/null
+++ b/assets/icons/radix/drag-handle-vertical.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/drawing-pin-filled.svg b/assets/icons/radix/drawing-pin-filled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e1894619c34441eb228587b9c50fc6af61193a44
--- /dev/null
+++ b/assets/icons/radix/drawing-pin-filled.svg
@@ -0,0 +1,14 @@
+
diff --git a/assets/icons/radix/drawing-pin-solid.svg b/assets/icons/radix/drawing-pin-solid.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e1894619c34441eb228587b9c50fc6af61193a44
--- /dev/null
+++ b/assets/icons/radix/drawing-pin-solid.svg
@@ -0,0 +1,14 @@
+
diff --git a/assets/icons/radix/drawing-pin.svg b/assets/icons/radix/drawing-pin.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5625e7588f1f33f057bf8ad15bc261c45072b1a9
--- /dev/null
+++ b/assets/icons/radix/drawing-pin.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/dropdown-menu.svg b/assets/icons/radix/dropdown-menu.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c938052be8e21698e89e8a0f57215c71410492c9
--- /dev/null
+++ b/assets/icons/radix/dropdown-menu.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/enter-full-screen.svg b/assets/icons/radix/enter-full-screen.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d368a6d415fc340db7595a06b5686cbb920ad48a
--- /dev/null
+++ b/assets/icons/radix/enter-full-screen.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/enter.svg b/assets/icons/radix/enter.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cc57d74ceae76b56074e8be073916301a280b9a2
--- /dev/null
+++ b/assets/icons/radix/enter.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/envelope-closed.svg b/assets/icons/radix/envelope-closed.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4b5e0378401cd9f8530355d84da28d7ca507d0a2
--- /dev/null
+++ b/assets/icons/radix/envelope-closed.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/envelope-open.svg b/assets/icons/radix/envelope-open.svg
new file mode 100644
index 0000000000000000000000000000000000000000..df1e3fea9515984d0207b80e3ab03b39511d52db
--- /dev/null
+++ b/assets/icons/radix/envelope-open.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/eraser.svg b/assets/icons/radix/eraser.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bb448d4d23511c57ab4216dd28af17232949c0b4
--- /dev/null
+++ b/assets/icons/radix/eraser.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/exclamation-triangle.svg b/assets/icons/radix/exclamation-triangle.svg
new file mode 100644
index 0000000000000000000000000000000000000000..210d4c45c666164985e0f1998201d444c9a5f2a7
--- /dev/null
+++ b/assets/icons/radix/exclamation-triangle.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/exit-full-screen.svg b/assets/icons/radix/exit-full-screen.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9b6439b043b367c5c300949f511ecb9866f2eaca
--- /dev/null
+++ b/assets/icons/radix/exit-full-screen.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/exit.svg b/assets/icons/radix/exit.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2cc6ce120dc9af17a642ac3bf2f2451209cb5e5e
--- /dev/null
+++ b/assets/icons/radix/exit.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/external-link.svg b/assets/icons/radix/external-link.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0ee7420162a88fa92afc958ec9a61242a9a8640c
--- /dev/null
+++ b/assets/icons/radix/external-link.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/eye-closed.svg b/assets/icons/radix/eye-closed.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f824fe55f9e2f45e7e12b77420eaeb24d6e9c913
--- /dev/null
+++ b/assets/icons/radix/eye-closed.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/eye-none.svg b/assets/icons/radix/eye-none.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d4beecd33a4a4a305407e1adfa2f4584c4359635
--- /dev/null
+++ b/assets/icons/radix/eye-none.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/eye-open.svg b/assets/icons/radix/eye-open.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d39d26b2c1bbc40af8548cafe219f7cef2373373
--- /dev/null
+++ b/assets/icons/radix/eye-open.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/face.svg b/assets/icons/radix/face.svg
new file mode 100644
index 0000000000000000000000000000000000000000..81b14dd8d7932f9db417843798c726422890b32e
--- /dev/null
+++ b/assets/icons/radix/face.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/figma-logo.svg b/assets/icons/radix/figma-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6c19276554908b11c8742deb0ab4e971bf6856a7
--- /dev/null
+++ b/assets/icons/radix/figma-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/file-minus.svg b/assets/icons/radix/file-minus.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bd1a841881c0cfa6a52364dfe57fd55e5a539fa0
--- /dev/null
+++ b/assets/icons/radix/file-minus.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/file-plus.svg b/assets/icons/radix/file-plus.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2396e20015984b69e2c194c2c9e8552b1a2cc3b5
--- /dev/null
+++ b/assets/icons/radix/file-plus.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/file-text.svg b/assets/icons/radix/file-text.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f341ab8abfdba5a9aaac3a81b709c75def92e46c
--- /dev/null
+++ b/assets/icons/radix/file-text.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/file.svg b/assets/icons/radix/file.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5f256b42e1fde343b8194d199f52921e8ad01b7c
--- /dev/null
+++ b/assets/icons/radix/file.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/font-bold.svg b/assets/icons/radix/font-bold.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7dc6caf3b052c956c9bb9ad4adc9ca245cfcf083
--- /dev/null
+++ b/assets/icons/radix/font-bold.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/radix/font-family.svg b/assets/icons/radix/font-family.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9134b9086dd5ddb9aa40a01875033392b2f92f89
--- /dev/null
+++ b/assets/icons/radix/font-family.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/radix/font-italic.svg b/assets/icons/radix/font-italic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6e6288d6bc3ffae240721c50c1a85c1a80270aa2
--- /dev/null
+++ b/assets/icons/radix/font-italic.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/font-roman.svg b/assets/icons/radix/font-roman.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c595b790fc5065d5e4b276d4e73be1ccdeba7be2
--- /dev/null
+++ b/assets/icons/radix/font-roman.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/font-size.svg b/assets/icons/radix/font-size.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e389a58d73bc4997d64b78426be26e964fd5b2b8
--- /dev/null
+++ b/assets/icons/radix/font-size.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/font-style.svg b/assets/icons/radix/font-style.svg
new file mode 100644
index 0000000000000000000000000000000000000000..31c3730130fad5367eb87f1b5ce52b243ee4c1f5
--- /dev/null
+++ b/assets/icons/radix/font-style.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/frame.svg b/assets/icons/radix/frame.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ec61a48efabfc82a55a749860976dd694aee7a83
--- /dev/null
+++ b/assets/icons/radix/frame.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/framer-logo.svg b/assets/icons/radix/framer-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..68be3b317b90d2fa990622857645bf21c1768c74
--- /dev/null
+++ b/assets/icons/radix/framer-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/gear.svg b/assets/icons/radix/gear.svg
new file mode 100644
index 0000000000000000000000000000000000000000..52f9e17312fb364b410edbcb21f3aa4b6f3c133c
--- /dev/null
+++ b/assets/icons/radix/gear.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/github-logo.svg b/assets/icons/radix/github-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e46612cf566f59ffc8d8b8b6f4a8bcecd8779b12
--- /dev/null
+++ b/assets/icons/radix/github-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/globe.svg b/assets/icons/radix/globe.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4728b827df862d2e4db3363d9d518cebc860986a
--- /dev/null
+++ b/assets/icons/radix/globe.svg
@@ -0,0 +1,26 @@
+
diff --git a/assets/icons/radix/grid.svg b/assets/icons/radix/grid.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5d9af3357295415ea824128b9806d1ca895e8bb6
--- /dev/null
+++ b/assets/icons/radix/grid.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/group.svg b/assets/icons/radix/group.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c3c91d211f47df42ad1c89911fc63e60499d3db6
--- /dev/null
+++ b/assets/icons/radix/group.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/half-1.svg b/assets/icons/radix/half-1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9890e26bb815242173bf8a60a01194a9130a361f
--- /dev/null
+++ b/assets/icons/radix/half-1.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/half-2.svg b/assets/icons/radix/half-2.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4db1d564cba5c32aae6260095811291c0614fdcf
--- /dev/null
+++ b/assets/icons/radix/half-2.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/hamburger-menu.svg b/assets/icons/radix/hamburger-menu.svg
new file mode 100644
index 0000000000000000000000000000000000000000..039168055b20d615f19400c4324857d0c038806e
--- /dev/null
+++ b/assets/icons/radix/hamburger-menu.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/hand.svg b/assets/icons/radix/hand.svg
new file mode 100644
index 0000000000000000000000000000000000000000..12afac8f5f9fdff743a7b628437ebfb4424fba2a
--- /dev/null
+++ b/assets/icons/radix/hand.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/heading.svg b/assets/icons/radix/heading.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0a5e2caaf1b10b271da7664dc3636528c6c00942
--- /dev/null
+++ b/assets/icons/radix/heading.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/heart-filled.svg b/assets/icons/radix/heart-filled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..94928accd7e353b655baf5840ca2be8fb4afd49c
--- /dev/null
+++ b/assets/icons/radix/heart-filled.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/heart.svg b/assets/icons/radix/heart.svg
new file mode 100644
index 0000000000000000000000000000000000000000..91cbc450fd0418c590a1519da9834b6cdb72ff5e
--- /dev/null
+++ b/assets/icons/radix/heart.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/height.svg b/assets/icons/radix/height.svg
new file mode 100644
index 0000000000000000000000000000000000000000..28424f4d51e008fafd30347e06e1deb8b3a6942f
--- /dev/null
+++ b/assets/icons/radix/height.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/hobby-knife.svg b/assets/icons/radix/hobby-knife.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c2ed3fb1ed89ef2b9ba74e1c94ec778af5dbc7cd
--- /dev/null
+++ b/assets/icons/radix/hobby-knife.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/home.svg b/assets/icons/radix/home.svg
new file mode 100644
index 0000000000000000000000000000000000000000..733bd791138444e03cb01f52b2e7428f93fbbc36
--- /dev/null
+++ b/assets/icons/radix/home.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/iconjar-logo.svg b/assets/icons/radix/iconjar-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c154b4e86413741786fa3d608f6e466e91c01aab
--- /dev/null
+++ b/assets/icons/radix/iconjar-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/id-card.svg b/assets/icons/radix/id-card.svg
new file mode 100644
index 0000000000000000000000000000000000000000..efde9ffa7e612179911c972a3c048fd389fe3276
--- /dev/null
+++ b/assets/icons/radix/id-card.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/image.svg b/assets/icons/radix/image.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0ff44752528fa0d4b31613a72446ed9164c419cb
--- /dev/null
+++ b/assets/icons/radix/image.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/info-circled.svg b/assets/icons/radix/info-circled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4ab1b260e3d35f9a6243e44ebf0f903add40b6b8
--- /dev/null
+++ b/assets/icons/radix/info-circled.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/inner-shadow.svg b/assets/icons/radix/inner-shadow.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1056a7bffc268fef67c209f4c81f606d40fa66d6
--- /dev/null
+++ b/assets/icons/radix/inner-shadow.svg
@@ -0,0 +1,78 @@
+
diff --git a/assets/icons/radix/input.svg b/assets/icons/radix/input.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4ed4605b2c60da836327a7064469425d5233858d
--- /dev/null
+++ b/assets/icons/radix/input.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/instagram-logo.svg b/assets/icons/radix/instagram-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5d7893796655c947c0e6bc0dba60c6e82c86bd65
--- /dev/null
+++ b/assets/icons/radix/instagram-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/justify-center.svg b/assets/icons/radix/justify-center.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7999a4ea468e87d9f0cd793e80c2a43454c4aeac
--- /dev/null
+++ b/assets/icons/radix/justify-center.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/justify-end.svg b/assets/icons/radix/justify-end.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bb52f493d75d79f91e3a6f34e103023e2cc8b87c
--- /dev/null
+++ b/assets/icons/radix/justify-end.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/justify-start.svg b/assets/icons/radix/justify-start.svg
new file mode 100644
index 0000000000000000000000000000000000000000..648ca0b60324f4b92a617f377d890b8f1e1adf13
--- /dev/null
+++ b/assets/icons/radix/justify-start.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/justify-stretch.svg b/assets/icons/radix/justify-stretch.svg
new file mode 100644
index 0000000000000000000000000000000000000000..83df0a8959381ef48a3bd97b53f63f8d9a8bba0f
--- /dev/null
+++ b/assets/icons/radix/justify-stretch.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/keyboard.svg b/assets/icons/radix/keyboard.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fc6f86bfc2b48bdd4fb7acf8e9e08422fed2e91e
--- /dev/null
+++ b/assets/icons/radix/keyboard.svg
@@ -0,0 +1,7 @@
+
diff --git a/assets/icons/radix/lap-timer.svg b/assets/icons/radix/lap-timer.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1de0b3be6ce99de994a905cfbaf5e342754bb651
--- /dev/null
+++ b/assets/icons/radix/lap-timer.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/laptop.svg b/assets/icons/radix/laptop.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6aff5d6d446ea46b131bdea1efbd183bc0010381
--- /dev/null
+++ b/assets/icons/radix/laptop.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/layers.svg b/assets/icons/radix/layers.svg
new file mode 100644
index 0000000000000000000000000000000000000000..821993fc70c13ebdb18a997d849db95424399d82
--- /dev/null
+++ b/assets/icons/radix/layers.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/layout.svg b/assets/icons/radix/layout.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8e4a352f5022fe33402bd5267f32f925958a2a01
--- /dev/null
+++ b/assets/icons/radix/layout.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/letter-case-capitalize.svg b/assets/icons/radix/letter-case-capitalize.svg
new file mode 100644
index 0000000000000000000000000000000000000000..16617ecf7e052db05c5bccfe1da0bb378835f686
--- /dev/null
+++ b/assets/icons/radix/letter-case-capitalize.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/letter-case-lowercase.svg b/assets/icons/radix/letter-case-lowercase.svg
new file mode 100644
index 0000000000000000000000000000000000000000..61aefb9aadd3c45a338e5c8048749d62c2c1bfe6
--- /dev/null
+++ b/assets/icons/radix/letter-case-lowercase.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/letter-case-toggle.svg b/assets/icons/radix/letter-case-toggle.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a021a2b9225d8eda5657a713b94f7145757206a3
--- /dev/null
+++ b/assets/icons/radix/letter-case-toggle.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/letter-case-uppercase.svg b/assets/icons/radix/letter-case-uppercase.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ccd2be04e7757db3050e7675f093288b6d9a5748
--- /dev/null
+++ b/assets/icons/radix/letter-case-uppercase.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/letter-spacing.svg b/assets/icons/radix/letter-spacing.svg
new file mode 100644
index 0000000000000000000000000000000000000000..073023e0f4df60364dede352b60fdc151e6f05d2
--- /dev/null
+++ b/assets/icons/radix/letter-spacing.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/lightning-bolt.svg b/assets/icons/radix/lightning-bolt.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7c35df9cfea2b54cfffa84161902126234ba3234
--- /dev/null
+++ b/assets/icons/radix/lightning-bolt.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/line-height.svg b/assets/icons/radix/line-height.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1c302d1ffc1f1b7e1abb1f4a7553b69be224aac2
--- /dev/null
+++ b/assets/icons/radix/line-height.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/link-1.svg b/assets/icons/radix/link-1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d5682b113ee37a34a42a65897f501af0ee04ffe3
--- /dev/null
+++ b/assets/icons/radix/link-1.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/link-2.svg b/assets/icons/radix/link-2.svg
new file mode 100644
index 0000000000000000000000000000000000000000..be8370606e7fe33fd9eda9e440433236cc3f6d68
--- /dev/null
+++ b/assets/icons/radix/link-2.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/link-break-1.svg b/assets/icons/radix/link-break-1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..05ae93e47a4f16ce18cbe2ca3a709b3abc62d15b
--- /dev/null
+++ b/assets/icons/radix/link-break-1.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/link-break-2.svg b/assets/icons/radix/link-break-2.svg
new file mode 100644
index 0000000000000000000000000000000000000000..78f28f98e815d7fdd822d4a8710d686ad314ccdd
--- /dev/null
+++ b/assets/icons/radix/link-break-2.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/link-none-1.svg b/assets/icons/radix/link-none-1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6ea56a386fa133bf983a3a7f06b70bd12189e05d
--- /dev/null
+++ b/assets/icons/radix/link-none-1.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/link-none-2.svg b/assets/icons/radix/link-none-2.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0b19d940d109bca37ade399a36b8b10c2812faf8
--- /dev/null
+++ b/assets/icons/radix/link-none-2.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/linkedin-logo.svg b/assets/icons/radix/linkedin-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0f0138bdf6cade2297362c820831a995f7a4e02f
--- /dev/null
+++ b/assets/icons/radix/linkedin-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/list-bullet.svg b/assets/icons/radix/list-bullet.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2630b95ef029e231be2a854efa2cf4c50dbeeb95
--- /dev/null
+++ b/assets/icons/radix/list-bullet.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/lock-closed.svg b/assets/icons/radix/lock-closed.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3871b5d5ada8020c7d7f56510158bd89c4ab5ff2
--- /dev/null
+++ b/assets/icons/radix/lock-closed.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/lock-open-1.svg b/assets/icons/radix/lock-open-1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8f6bfd5bbf82007be6d65ada0beb4914b450faf2
--- /dev/null
+++ b/assets/icons/radix/lock-open-1.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/lock-open-2.svg b/assets/icons/radix/lock-open-2.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ce69f67f2920b6890eb4446dd6b260484e68178d
--- /dev/null
+++ b/assets/icons/radix/lock-open-2.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/loop.svg b/assets/icons/radix/loop.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bfa90ed0841f6ca8d26c1eef72e00d893d5efe0c
--- /dev/null
+++ b/assets/icons/radix/loop.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/magic-wand.svg b/assets/icons/radix/magic-wand.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bbc9826aa54afbf202153a170e642bb64f235298
--- /dev/null
+++ b/assets/icons/radix/magic-wand.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/magnifying-glass.svg b/assets/icons/radix/magnifying-glass.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a3a89bfa5059192bdb481a043cdde6d7e42c2f24
--- /dev/null
+++ b/assets/icons/radix/magnifying-glass.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/margin.svg b/assets/icons/radix/margin.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1a513b37d6846849b260a409b9993d3c708bfe30
--- /dev/null
+++ b/assets/icons/radix/margin.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/mask-off.svg b/assets/icons/radix/mask-off.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5f847668e8986d4ba9be5cba4b6ddab65e61f0d2
--- /dev/null
+++ b/assets/icons/radix/mask-off.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/mask-on.svg b/assets/icons/radix/mask-on.svg
new file mode 100644
index 0000000000000000000000000000000000000000..684c1b934dce4e99b1485593bb8995576eae186b
--- /dev/null
+++ b/assets/icons/radix/mask-on.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/mic-mute.svg b/assets/icons/radix/mic-mute.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fe5f8201cc4da5e2cf6a1b770c538d421994e1c4
--- /dev/null
+++ b/assets/icons/radix/mic-mute.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/radix/mic.svg b/assets/icons/radix/mic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..01f4c9bf669ba253edaa43dc641fdb9a1b7c51d1
--- /dev/null
+++ b/assets/icons/radix/mic.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/radix/minus-circled.svg b/assets/icons/radix/minus-circled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2c6df4cebf1ea279fdc43598fff062ea5db72cb7
--- /dev/null
+++ b/assets/icons/radix/minus-circled.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/minus.svg b/assets/icons/radix/minus.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2b396029795aa7b9bcfb2f9dbb703cb491bf88f2
--- /dev/null
+++ b/assets/icons/radix/minus.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/mix.svg b/assets/icons/radix/mix.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9412a018438b79130fbba167176860d2cef38106
--- /dev/null
+++ b/assets/icons/radix/mix.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/mixer-horizontal.svg b/assets/icons/radix/mixer-horizontal.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f29ba25548a32eae3979249cd915f074444a0f51
--- /dev/null
+++ b/assets/icons/radix/mixer-horizontal.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/mixer-vertical.svg b/assets/icons/radix/mixer-vertical.svg
new file mode 100644
index 0000000000000000000000000000000000000000..dc85d3a9e7a3c3a5ba9d016bb88368b2b35cdcaa
--- /dev/null
+++ b/assets/icons/radix/mixer-vertical.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/mobile.svg b/assets/icons/radix/mobile.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b62b6506ff4f7838e025ea98f93caac228fdd88e
--- /dev/null
+++ b/assets/icons/radix/mobile.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/modulz-logo.svg b/assets/icons/radix/modulz-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..754b229db6b03264c0258553b18d5eea2473a316
--- /dev/null
+++ b/assets/icons/radix/modulz-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/moon.svg b/assets/icons/radix/moon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1dac2ca2120eb3deebf39e9fdf8a353d14e0fb1e
--- /dev/null
+++ b/assets/icons/radix/moon.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/move.svg b/assets/icons/radix/move.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3d0a0e56c9063858f9d71c0cad7c43cdf448c84d
--- /dev/null
+++ b/assets/icons/radix/move.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/notion-logo.svg b/assets/icons/radix/notion-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c2df1526195d99956c0edb1e8c01a5ac641cbaca
--- /dev/null
+++ b/assets/icons/radix/notion-logo.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/radix/opacity.svg b/assets/icons/radix/opacity.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a2d01bff82923948a67ac243df677fc3d7331706
--- /dev/null
+++ b/assets/icons/radix/opacity.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/open-in-new-window.svg b/assets/icons/radix/open-in-new-window.svg
new file mode 100644
index 0000000000000000000000000000000000000000..22baf82cff73662895c6aae20d426319b9ea32a4
--- /dev/null
+++ b/assets/icons/radix/open-in-new-window.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/icons/radix/outer-shadow.svg b/assets/icons/radix/outer-shadow.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b44e3d553c040d855204ac3d543cfa6539db7612
--- /dev/null
+++ b/assets/icons/radix/outer-shadow.svg
@@ -0,0 +1,43 @@
+
diff --git a/assets/icons/radix/overline.svg b/assets/icons/radix/overline.svg
new file mode 100644
index 0000000000000000000000000000000000000000..57262c76e6df8a60a11aa2dddde8a437824ef8e3
--- /dev/null
+++ b/assets/icons/radix/overline.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/padding.svg b/assets/icons/radix/padding.svg
new file mode 100644
index 0000000000000000000000000000000000000000..483a25a27ea1e7c94b21c91b15d929c5cd95ed81
--- /dev/null
+++ b/assets/icons/radix/padding.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/paper-plane.svg b/assets/icons/radix/paper-plane.svg
new file mode 100644
index 0000000000000000000000000000000000000000..37ad0703004b817ff2dd52dae5680dabdd5574db
--- /dev/null
+++ b/assets/icons/radix/paper-plane.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/pause.svg b/assets/icons/radix/pause.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b399fb2f5a7ba00e088e9fc2ac10042452879e46
--- /dev/null
+++ b/assets/icons/radix/pause.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/pencil-1.svg b/assets/icons/radix/pencil-1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..decf0122ef482aab10c213cad07a008e492b2e86
--- /dev/null
+++ b/assets/icons/radix/pencil-1.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/pencil-2.svg b/assets/icons/radix/pencil-2.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2559a393a9fc2368697619724887a7c7eb8b5a1e
--- /dev/null
+++ b/assets/icons/radix/pencil-2.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/person.svg b/assets/icons/radix/person.svg
new file mode 100644
index 0000000000000000000000000000000000000000..051abcc7033796d6ad5e65d2d0d5955b6bb51759
--- /dev/null
+++ b/assets/icons/radix/person.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/pie-chart.svg b/assets/icons/radix/pie-chart.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bb58e4727465e6c2cebb84e6c7a38b884b9ef13c
--- /dev/null
+++ b/assets/icons/radix/pie-chart.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/pilcrow.svg b/assets/icons/radix/pilcrow.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6996765fd60b2e1c09182156b2ba8e19b3cca5f5
--- /dev/null
+++ b/assets/icons/radix/pilcrow.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/pin-bottom.svg b/assets/icons/radix/pin-bottom.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ad0842054f082e24c4ab145471c302d00cb9fea6
--- /dev/null
+++ b/assets/icons/radix/pin-bottom.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/pin-left.svg b/assets/icons/radix/pin-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..eb89b2912f0735b57f655fe08a33d6efdb5340de
--- /dev/null
+++ b/assets/icons/radix/pin-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/pin-right.svg b/assets/icons/radix/pin-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..89a98bae4ea00e8562392aa2dda764d1d6203f40
--- /dev/null
+++ b/assets/icons/radix/pin-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/pin-top.svg b/assets/icons/radix/pin-top.svg
new file mode 100644
index 0000000000000000000000000000000000000000..edfeb64d5d87b0df6c25509d2077054613c4f543
--- /dev/null
+++ b/assets/icons/radix/pin-top.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/play.svg b/assets/icons/radix/play.svg
new file mode 100644
index 0000000000000000000000000000000000000000..92af9e1ae7f125fd9f36e1b67f43b9c71aa54296
--- /dev/null
+++ b/assets/icons/radix/play.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/plus-circled.svg b/assets/icons/radix/plus-circled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..808ddc4c2ce157903747ff88672425d9c39d5f71
--- /dev/null
+++ b/assets/icons/radix/plus-circled.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/plus.svg b/assets/icons/radix/plus.svg
new file mode 100644
index 0000000000000000000000000000000000000000..57ce90219bc6f72d92e55011f6dcb9f20ba320eb
--- /dev/null
+++ b/assets/icons/radix/plus.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/question-mark-circled.svg b/assets/icons/radix/question-mark-circled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..be99968787df16246e5fb2bbeee617b27393496f
--- /dev/null
+++ b/assets/icons/radix/question-mark-circled.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/question-mark.svg b/assets/icons/radix/question-mark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..577aae53496676a657164f0406c50e41566dae3a
--- /dev/null
+++ b/assets/icons/radix/question-mark.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/quote.svg b/assets/icons/radix/quote.svg
new file mode 100644
index 0000000000000000000000000000000000000000..50205479c300e789b302cb1dcd687aaf7f9353f8
--- /dev/null
+++ b/assets/icons/radix/quote.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/radiobutton.svg b/assets/icons/radix/radiobutton.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f0c3a60aee6f499a3dffd30d5d731612de3d90db
--- /dev/null
+++ b/assets/icons/radix/radiobutton.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/reader.svg b/assets/icons/radix/reader.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e893cfa68510377d91301e796366babcc2cbb7aa
--- /dev/null
+++ b/assets/icons/radix/reader.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/reload.svg b/assets/icons/radix/reload.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cf1dfb7fa20bd8233e8ea75c51061b11f73302f5
--- /dev/null
+++ b/assets/icons/radix/reload.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/reset.svg b/assets/icons/radix/reset.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f21a508514cac8c8da0626237726148ee8833953
--- /dev/null
+++ b/assets/icons/radix/reset.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/resume.svg b/assets/icons/radix/resume.svg
new file mode 100644
index 0000000000000000000000000000000000000000..79cdec2374c2e06a3f0afced560a27a9042cc63b
--- /dev/null
+++ b/assets/icons/radix/resume.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/rocket.svg b/assets/icons/radix/rocket.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2226aacb1a7e497f377fbbd607f125782b150f7e
--- /dev/null
+++ b/assets/icons/radix/rocket.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/rotate-counter-clockwise.svg b/assets/icons/radix/rotate-counter-clockwise.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c43c90b90ba001df326c83df80b7d25152782cc3
--- /dev/null
+++ b/assets/icons/radix/rotate-counter-clockwise.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/row-spacing.svg b/assets/icons/radix/row-spacing.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e155bd59479ceaf31dcde7155b0503aa6f305a34
--- /dev/null
+++ b/assets/icons/radix/row-spacing.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/rows.svg b/assets/icons/radix/rows.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fb4ca0f9e3acb960fdeba9d86c973736eda25573
--- /dev/null
+++ b/assets/icons/radix/rows.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/ruler-horizontal.svg b/assets/icons/radix/ruler-horizontal.svg
new file mode 100644
index 0000000000000000000000000000000000000000..db6f1ef488b20f66fe89538461b72ba0b7827b54
--- /dev/null
+++ b/assets/icons/radix/ruler-horizontal.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/ruler-square.svg b/assets/icons/radix/ruler-square.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7de70cc5dc1e852283f89a5048cc730e146ddd4a
--- /dev/null
+++ b/assets/icons/radix/ruler-square.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/scissors.svg b/assets/icons/radix/scissors.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2893b347123f0a29be96b52ee0886ba716f365a0
--- /dev/null
+++ b/assets/icons/radix/scissors.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/section.svg b/assets/icons/radix/section.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1e939e2b2f31f4eef53496154dc4e7c086b28162
--- /dev/null
+++ b/assets/icons/radix/section.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/sewing-pin-filled.svg b/assets/icons/radix/sewing-pin-filled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..97f6f1120d988746a9ad95d33e8d24b237bec58b
--- /dev/null
+++ b/assets/icons/radix/sewing-pin-filled.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/sewing-pin-solid.svg b/assets/icons/radix/sewing-pin-solid.svg
new file mode 100644
index 0000000000000000000000000000000000000000..97f6f1120d988746a9ad95d33e8d24b237bec58b
--- /dev/null
+++ b/assets/icons/radix/sewing-pin-solid.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/sewing-pin.svg b/assets/icons/radix/sewing-pin.svg
new file mode 100644
index 0000000000000000000000000000000000000000..068dfd7bdfca25e8ac4834f7011e96b377a3ca49
--- /dev/null
+++ b/assets/icons/radix/sewing-pin.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/shadow-inner.svg b/assets/icons/radix/shadow-inner.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4d073bf35f87e99198fc44258c8af746ff95e0b6
--- /dev/null
+++ b/assets/icons/radix/shadow-inner.svg
@@ -0,0 +1,78 @@
+
diff --git a/assets/icons/radix/shadow-none.svg b/assets/icons/radix/shadow-none.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b02d3466adeb08e3ddbf4ecc3b6c554f1dd5872d
--- /dev/null
+++ b/assets/icons/radix/shadow-none.svg
@@ -0,0 +1,78 @@
+
diff --git a/assets/icons/radix/shadow-outer.svg b/assets/icons/radix/shadow-outer.svg
new file mode 100644
index 0000000000000000000000000000000000000000..dc7ea840878699d22280f6edf481b7c8ea51fa64
--- /dev/null
+++ b/assets/icons/radix/shadow-outer.svg
@@ -0,0 +1,43 @@
+
diff --git a/assets/icons/radix/shadow.svg b/assets/icons/radix/shadow.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c991af6156cb38d143c574bcfb925364768c4f3f
--- /dev/null
+++ b/assets/icons/radix/shadow.svg
@@ -0,0 +1,78 @@
+
diff --git a/assets/icons/radix/share-1.svg b/assets/icons/radix/share-1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..58328e4d1ee1091b8f909ecdfb22b836cb167a93
--- /dev/null
+++ b/assets/icons/radix/share-1.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/share-2.svg b/assets/icons/radix/share-2.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1302ea5fbe198800c08b2abc0cb79a2f4136d3b0
--- /dev/null
+++ b/assets/icons/radix/share-2.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/shuffle.svg b/assets/icons/radix/shuffle.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8670e1a04898e130c357c933f7edac966e2cfac9
--- /dev/null
+++ b/assets/icons/radix/shuffle.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/size.svg b/assets/icons/radix/size.svg
new file mode 100644
index 0000000000000000000000000000000000000000..dece8c51820fb451e57bf6efd313a00ce6050e22
--- /dev/null
+++ b/assets/icons/radix/size.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/sketch-logo.svg b/assets/icons/radix/sketch-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6c54c4c8252e96ec9d762ffbbab596a72c163303
--- /dev/null
+++ b/assets/icons/radix/sketch-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/slash.svg b/assets/icons/radix/slash.svg
new file mode 100644
index 0000000000000000000000000000000000000000..aa7dac30c1af6717056c15f4abafe2b3a1bb09ef
--- /dev/null
+++ b/assets/icons/radix/slash.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/slider.svg b/assets/icons/radix/slider.svg
new file mode 100644
index 0000000000000000000000000000000000000000..66e0452bc0a0469ff6f7ff789f2db55a4fca4e17
--- /dev/null
+++ b/assets/icons/radix/slider.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/space-between-horizontally.svg b/assets/icons/radix/space-between-horizontally.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a71638d52b0c90597a696e4671ce17f1c342681f
--- /dev/null
+++ b/assets/icons/radix/space-between-horizontally.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/space-between-vertically.svg b/assets/icons/radix/space-between-vertically.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bae247222fac0ed744593dcc97befe6051483101
--- /dev/null
+++ b/assets/icons/radix/space-between-vertically.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/space-evenly-horizontally.svg b/assets/icons/radix/space-evenly-horizontally.svg
new file mode 100644
index 0000000000000000000000000000000000000000..70169492e4072dc561370d6185db255a229dd8e2
--- /dev/null
+++ b/assets/icons/radix/space-evenly-horizontally.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/space-evenly-vertically.svg b/assets/icons/radix/space-evenly-vertically.svg
new file mode 100644
index 0000000000000000000000000000000000000000..469b4c05d4eda8045d2534b0a5e8847d0b423851
--- /dev/null
+++ b/assets/icons/radix/space-evenly-vertically.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/speaker-loud.svg b/assets/icons/radix/speaker-loud.svg
new file mode 100644
index 0000000000000000000000000000000000000000..68982ee5e92a85f193d80c6f7aa285722d1d78d8
--- /dev/null
+++ b/assets/icons/radix/speaker-loud.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/speaker-moderate.svg b/assets/icons/radix/speaker-moderate.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0f1d1b4210991ec8d8718bef86c9959bec264c58
--- /dev/null
+++ b/assets/icons/radix/speaker-moderate.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/speaker-off.svg b/assets/icons/radix/speaker-off.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f60c35de7f3f5bb7eecf405c6370391aed6f3ae3
--- /dev/null
+++ b/assets/icons/radix/speaker-off.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/speaker-quiet.svg b/assets/icons/radix/speaker-quiet.svg
new file mode 100644
index 0000000000000000000000000000000000000000..eb68cefcee916e168d25a58be9c4015fe131ecf4
--- /dev/null
+++ b/assets/icons/radix/speaker-quiet.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/square.svg b/assets/icons/radix/square.svg
new file mode 100644
index 0000000000000000000000000000000000000000..82843f51c3b7c98cade0ed914ca18095e3d385fe
--- /dev/null
+++ b/assets/icons/radix/square.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/stack.svg b/assets/icons/radix/stack.svg
new file mode 100644
index 0000000000000000000000000000000000000000..92426ffb0d3aac123f647a9c3bcf07932de91407
--- /dev/null
+++ b/assets/icons/radix/stack.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/star-filled.svg b/assets/icons/radix/star-filled.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2b17b7f5792c663e533d3fbe8def8ed44f12b7ff
--- /dev/null
+++ b/assets/icons/radix/star-filled.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/radix/star.svg b/assets/icons/radix/star.svg
new file mode 100644
index 0000000000000000000000000000000000000000..23f09ad7b271cb11e9660901a5d9d819a40ec9a5
--- /dev/null
+++ b/assets/icons/radix/star.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/stitches-logo.svg b/assets/icons/radix/stitches-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..319a1481f3e89c5c24535ecc03fffa89c83de737
--- /dev/null
+++ b/assets/icons/radix/stitches-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/stop.svg b/assets/icons/radix/stop.svg
new file mode 100644
index 0000000000000000000000000000000000000000..57aac59cab28050f94d5cb93877e8d967f4661c5
--- /dev/null
+++ b/assets/icons/radix/stop.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/stopwatch.svg b/assets/icons/radix/stopwatch.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ce5661e5cc9b983676fc97ae0d9c08e78878ee74
--- /dev/null
+++ b/assets/icons/radix/stopwatch.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/stretch-horizontally.svg b/assets/icons/radix/stretch-horizontally.svg
new file mode 100644
index 0000000000000000000000000000000000000000..37977363b3046bc59bfd6eb74673a5a49d43d2f8
--- /dev/null
+++ b/assets/icons/radix/stretch-horizontally.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/stretch-vertically.svg b/assets/icons/radix/stretch-vertically.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c4b1fe79ce21f963ad70a17278be8bef7804e43c
--- /dev/null
+++ b/assets/icons/radix/stretch-vertically.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/strikethrough.svg b/assets/icons/radix/strikethrough.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b814ef420acc8a4a385eaf29d52a5a167171860f
--- /dev/null
+++ b/assets/icons/radix/strikethrough.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/sun.svg b/assets/icons/radix/sun.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1807a51b4c60c764a6af190dbd957b6c2ebd0d91
--- /dev/null
+++ b/assets/icons/radix/sun.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/switch.svg b/assets/icons/radix/switch.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6dea528ce9bd25a06962d5ecc64f1ca4b1c9d754
--- /dev/null
+++ b/assets/icons/radix/switch.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/symbol.svg b/assets/icons/radix/symbol.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b529b2b08b42a17027566a47d20f8ae93d61ae35
--- /dev/null
+++ b/assets/icons/radix/symbol.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/table.svg b/assets/icons/radix/table.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8ff059b847b30b73fc31577d88a9a5bc639e6371
--- /dev/null
+++ b/assets/icons/radix/table.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/target.svg b/assets/icons/radix/target.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d67989e01fb7b70c728fdcf85360ac41ac8f2ff5
--- /dev/null
+++ b/assets/icons/radix/target.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/text-align-bottom.svg b/assets/icons/radix/text-align-bottom.svg
new file mode 100644
index 0000000000000000000000000000000000000000..862a5aeb883e236e076caee3bec650d79b9b2cd4
--- /dev/null
+++ b/assets/icons/radix/text-align-bottom.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/text-align-center.svg b/assets/icons/radix/text-align-center.svg
new file mode 100644
index 0000000000000000000000000000000000000000..673cf8cd0aa97a1ffd39409152efd6fe5cc1ef12
--- /dev/null
+++ b/assets/icons/radix/text-align-center.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/text-align-justify.svg b/assets/icons/radix/text-align-justify.svg
new file mode 100644
index 0000000000000000000000000000000000000000..df877f95134803f7d07627ec1b22e6d076c6b595
--- /dev/null
+++ b/assets/icons/radix/text-align-justify.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/text-align-left.svg b/assets/icons/radix/text-align-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b7a64fbd439720429ebe73c82340619e3d950391
--- /dev/null
+++ b/assets/icons/radix/text-align-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/text-align-middle.svg b/assets/icons/radix/text-align-middle.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e739d04efabdf1edada6c848c14c0e3ad3f62832
--- /dev/null
+++ b/assets/icons/radix/text-align-middle.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/text-align-right.svg b/assets/icons/radix/text-align-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e7609908ff9436a9e9c4b366ad54b891c9868b64
--- /dev/null
+++ b/assets/icons/radix/text-align-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/text-align-top.svg b/assets/icons/radix/text-align-top.svg
new file mode 100644
index 0000000000000000000000000000000000000000..21660fe7d307f5e78cf997778d0bc68f9a83f705
--- /dev/null
+++ b/assets/icons/radix/text-align-top.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/text-none.svg b/assets/icons/radix/text-none.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2a87f9372a66fd9e3b56807d0adde8fbb29a568c
--- /dev/null
+++ b/assets/icons/radix/text-none.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/text.svg b/assets/icons/radix/text.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bd41d8ac191905eb40201c7779c247d86783bf67
--- /dev/null
+++ b/assets/icons/radix/text.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/thick-arrow-down.svg b/assets/icons/radix/thick-arrow-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..32923bec58192f66bcce7f067208103d768f5a74
--- /dev/null
+++ b/assets/icons/radix/thick-arrow-down.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/thick-arrow-left.svg b/assets/icons/radix/thick-arrow-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0cfd863903b3ae25d89ca93561d81ec245686913
--- /dev/null
+++ b/assets/icons/radix/thick-arrow-left.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/thick-arrow-right.svg b/assets/icons/radix/thick-arrow-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a0cb605693638380d37ad3b6ff09c07d5b7cf3c4
--- /dev/null
+++ b/assets/icons/radix/thick-arrow-right.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/thick-arrow-up.svg b/assets/icons/radix/thick-arrow-up.svg
new file mode 100644
index 0000000000000000000000000000000000000000..68687be28da3d3500c2ca98113578f65b9465b44
--- /dev/null
+++ b/assets/icons/radix/thick-arrow-up.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/timer.svg b/assets/icons/radix/timer.svg
new file mode 100644
index 0000000000000000000000000000000000000000..20c52dff95ae423ef3decf9f88b6e13d7c42cbcc
--- /dev/null
+++ b/assets/icons/radix/timer.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/tokens.svg b/assets/icons/radix/tokens.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2bbbc82030a9ebe9b9871ec1cd18a572e688ef25
--- /dev/null
+++ b/assets/icons/radix/tokens.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/track-next.svg b/assets/icons/radix/track-next.svg
new file mode 100644
index 0000000000000000000000000000000000000000..24fd40e36f3d1110f34a4ffb2cc5397f9aa6766a
--- /dev/null
+++ b/assets/icons/radix/track-next.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/track-previous.svg b/assets/icons/radix/track-previous.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d99e7ab53f45d3e749b7d37d76829d8c083979cc
--- /dev/null
+++ b/assets/icons/radix/track-previous.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/transform.svg b/assets/icons/radix/transform.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e913ccc9a7a4297c47e82f978e5a4bda03d1f319
--- /dev/null
+++ b/assets/icons/radix/transform.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/transparency-grid.svg b/assets/icons/radix/transparency-grid.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6559ef8c2b9e5ba003c6e3712f502a22416d6f04
--- /dev/null
+++ b/assets/icons/radix/transparency-grid.svg
@@ -0,0 +1,9 @@
+
diff --git a/assets/icons/radix/trash.svg b/assets/icons/radix/trash.svg
new file mode 100644
index 0000000000000000000000000000000000000000..18780e492c9a91b117148e72fd4fc0739f671d1e
--- /dev/null
+++ b/assets/icons/radix/trash.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/triangle-down.svg b/assets/icons/radix/triangle-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ebfd8f2a1236e39910eafb25a13e6466caa016db
--- /dev/null
+++ b/assets/icons/radix/triangle-down.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/radix/triangle-left.svg b/assets/icons/radix/triangle-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0014139716308461f550febfc71a83ec3f6506b3
--- /dev/null
+++ b/assets/icons/radix/triangle-left.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/radix/triangle-right.svg b/assets/icons/radix/triangle-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..aed1393b9c99cf654f3744bc92853c7b222725d4
--- /dev/null
+++ b/assets/icons/radix/triangle-right.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/radix/triangle-up.svg b/assets/icons/radix/triangle-up.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5eb1b416d389bfcc405056f1e5da510cbe4aa272
--- /dev/null
+++ b/assets/icons/radix/triangle-up.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/radix/twitter-logo.svg b/assets/icons/radix/twitter-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7dcf2f58eb1d15dbe19a53626496a1ef7d87f975
--- /dev/null
+++ b/assets/icons/radix/twitter-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/underline.svg b/assets/icons/radix/underline.svg
new file mode 100644
index 0000000000000000000000000000000000000000..334468509777c7ab550ea690cdc76f8627478e74
--- /dev/null
+++ b/assets/icons/radix/underline.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/update.svg b/assets/icons/radix/update.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b529b2b08b42a17027566a47d20f8ae93d61ae35
--- /dev/null
+++ b/assets/icons/radix/update.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/upload.svg b/assets/icons/radix/upload.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a7f6bddb2e818210222895de24e072736eef14a2
--- /dev/null
+++ b/assets/icons/radix/upload.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/value-none.svg b/assets/icons/radix/value-none.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a86c08be1a10c961aeb5a61412b891ad3bc9929d
--- /dev/null
+++ b/assets/icons/radix/value-none.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/value.svg b/assets/icons/radix/value.svg
new file mode 100644
index 0000000000000000000000000000000000000000..59dd7d9373ccdd355d3c6dc581bdfb18e6624072
--- /dev/null
+++ b/assets/icons/radix/value.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/vercel-logo.svg b/assets/icons/radix/vercel-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5466fd9f0ebd8ffa94382d899bb250d2cb405872
--- /dev/null
+++ b/assets/icons/radix/vercel-logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/video.svg b/assets/icons/radix/video.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e405396bef1c9898d024df78304034d0ad7d8212
--- /dev/null
+++ b/assets/icons/radix/video.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/view-grid.svg b/assets/icons/radix/view-grid.svg
new file mode 100644
index 0000000000000000000000000000000000000000..04825a870bb77b3179e51e2b7fedd7a7197ba9e5
--- /dev/null
+++ b/assets/icons/radix/view-grid.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/view-horizontal.svg b/assets/icons/radix/view-horizontal.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2ca7336b99efb11f67addcc31aca81f43f7078ae
--- /dev/null
+++ b/assets/icons/radix/view-horizontal.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/view-none.svg b/assets/icons/radix/view-none.svg
new file mode 100644
index 0000000000000000000000000000000000000000..71b08a46d2917d9057d7331131ef6849f9335867
--- /dev/null
+++ b/assets/icons/radix/view-none.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/view-vertical.svg b/assets/icons/radix/view-vertical.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0c8f8164b4016a6724945cff0fb76700c2bea724
--- /dev/null
+++ b/assets/icons/radix/view-vertical.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/width.svg b/assets/icons/radix/width.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3ae2b56e3dbd78152ed91966b6b3a2474fc7c1e4
--- /dev/null
+++ b/assets/icons/radix/width.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/zoom-in.svg b/assets/icons/radix/zoom-in.svg
new file mode 100644
index 0000000000000000000000000000000000000000..caac722ad07771ec72005752a124f1b86f080a70
--- /dev/null
+++ b/assets/icons/radix/zoom-in.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/radix/zoom-out.svg b/assets/icons/radix/zoom-out.svg
new file mode 100644
index 0000000000000000000000000000000000000000..62046a9e0f1f51239c1587aef16317d325ebef07
--- /dev/null
+++ b/assets/icons/radix/zoom-out.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/split_message_15.svg b/assets/icons/split_message_15.svg
new file mode 100644
index 0000000000000000000000000000000000000000..54d9e81224cbf55eca2a4f354f7fcfc8f98b6854
--- /dev/null
+++ b/assets/icons/split_message_15.svg
@@ -0,0 +1 @@
+
diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json
index a642697a3765e81c62b2c7808847c9be29535a88..6fc06198fe8b24bace855b005d6d113f26555304 100644
--- a/assets/keymaps/default.json
+++ b/assets/keymaps/default.json
@@ -40,7 +40,8 @@
"cmd-o": "workspace::Open",
"alt-cmd-o": "projects::OpenRecent",
"ctrl-~": "workspace::NewTerminal",
- "ctrl-`": "terminal_panel::ToggleFocus"
+ "ctrl-`": "terminal_panel::ToggleFocus",
+ "shift-escape": "workspace::ToggleZoom"
}
},
{
@@ -197,9 +198,17 @@
}
},
{
- "context": "AssistantEditor > Editor",
+ "context": "AssistantPanel",
+ "bindings": {
+ "cmd-g": "search::SelectNextMatch",
+ "cmd-shift-g": "search::SelectPrevMatch"
+ }
+ },
+ {
+ "context": "ConversationEditor > Editor",
"bindings": {
"cmd-enter": "assistant::Assist",
+ "cmd-s": "workspace::Save",
"cmd->": "assistant::QuoteSelection",
"shift-enter": "assistant::Split",
"ctrl-r": "assistant::CycleMessageRole"
@@ -234,8 +243,7 @@
"cmd-shift-g": "search::SelectPrevMatch",
"alt-cmd-c": "search::ToggleCaseSensitive",
"alt-cmd-w": "search::ToggleWholeWord",
- "alt-cmd-r": "search::ToggleRegex",
- "shift-escape": "workspace::ToggleZoom"
+ "alt-cmd-r": "search::ToggleRegex"
}
},
// Bindings from VS Code
@@ -400,6 +408,7 @@
"cmd-shift-p": "command_palette::Toggle",
"cmd-shift-m": "diagnostics::Deploy",
"cmd-shift-e": "project_panel::ToggleFocus",
+ "cmd-?": "assistant::ToggleFocus",
"cmd-alt-s": "workspace::SaveAll",
"cmd-k m": "language_selector::Toggle"
}
@@ -411,6 +420,7 @@
"ctrl-shift-k": "editor::DeleteLine",
"cmd-shift-d": "editor::DuplicateLine",
"cmd-shift-l": "editor::SplitSelectionIntoLines",
+ "ctrl-j": "editor::JoinLines",
"ctrl-cmd-up": "editor::MoveLineUp",
"ctrl-cmd-down": "editor::MoveLineDown",
"ctrl-alt-backspace": "editor::DeleteToPreviousSubwordStart",
diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json
index 47c5f8c45855ca757a2b4e28503c8663a80b683c..afee6fcd2e998500ba55e08230473e91e68dbb96 100644
--- a/assets/keymaps/vim.json
+++ b/assets/keymaps/vim.json
@@ -1,6 +1,6 @@
[
{
- "context": "Editor && VimControl && !VimWaiting",
+ "context": "Editor && VimControl && !VimWaiting && !menu",
"bindings": {
"g": [
"vim::PushOperator",
@@ -25,11 +25,15 @@
}
],
"h": "vim::Left",
+ "left": "vim::Left",
"backspace": "vim::Backspace",
"j": "vim::Down",
+ "down": "vim::Down",
"enter": "vim::NextLineStart",
"k": "vim::Up",
+ "up": "vim::Up",
"l": "vim::Right",
+ "right": "vim::Right",
"$": "vim::EndOfLine",
"shift-g": "vim::EndOfDocument",
"w": "vim::NextWordStart",
@@ -54,10 +58,6 @@
}
],
"%": "vim::Matching",
- "ctrl-y": [
- "vim::Scroll",
- "LineUp"
- ],
"f": [
"vim::PushOperator",
{
@@ -90,6 +90,8 @@
}
}
],
+ "ctrl-o": "pane::GoBack",
+ "ctrl-]": "editor::GoToDefinition",
"escape": "editor::Cancel",
"0": "vim::StartOfLine", // When no number operator present, use start of line motion
"1": [
@@ -131,7 +133,7 @@
}
},
{
- "context": "Editor && vim_mode == normal && vim_operator == none && !VimWaiting",
+ "context": "Editor && vim_mode == normal && (vim_operator == none || vim_operator == n) && !VimWaiting",
"bindings": {
"c": [
"vim::PushOperator",
@@ -143,6 +145,7 @@
"Delete"
],
"shift-d": "vim::DeleteToEndOfLine",
+ "shift-j": "editor::JoinLines",
"y": [
"vim::PushOperator",
"Yank"
@@ -165,6 +168,7 @@
"^": "vim::FirstNonWhitespace",
"o": "vim::InsertLineBelow",
"shift-o": "vim::InsertLineAbove",
+ "~": "vim::ChangeCase",
"v": [
"vim::SwitchMode",
{
@@ -184,37 +188,29 @@
"p": "vim::Paste",
"u": "editor::Undo",
"ctrl-r": "editor::Redo",
- "ctrl-o": "pane::GoBack",
"/": [
"buffer_search::Deploy",
{
"focus": true
}
],
- "ctrl-f": [
- "vim::Scroll",
- "PageDown"
- ],
- "ctrl-b": [
- "vim::Scroll",
- "PageUp"
- ],
- "ctrl-d": [
- "vim::Scroll",
- "HalfPageDown"
- ],
- "ctrl-u": [
- "vim::Scroll",
- "HalfPageUp"
- ],
- "ctrl-e": [
- "vim::Scroll",
- "LineDown"
- ],
+ "ctrl-f": "vim::PageDown",
+ "pagedown": "vim::PageDown",
+ "ctrl-b": "vim::PageUp",
+ "pageup": "vim::PageUp",
+ "ctrl-d": "vim::ScrollDown",
+ "ctrl-u": "vim::ScrollUp",
+ "ctrl-e": "vim::LineDown",
+ "ctrl-y": "vim::LineUp",
"r": [
"vim::PushOperator",
"Replace"
- ]
+ ],
+ "s": "vim::Substitute",
+ "> >": "editor::Indent",
+ "< <": "editor::Outdent",
+ "ctrl-pagedown": "pane::ActivateNextItem",
+ "ctrl-pageup": "pane::ActivatePrevItem"
}
},
{
@@ -231,6 +227,8 @@
"bindings": {
"g": "vim::StartOfDocument",
"h": "editor::Hover",
+ "t": "pane::ActivateNextItem",
+ "shift-t": "pane::ActivatePrevItem",
"escape": [
"vim::SwitchMode",
"Normal"
@@ -301,10 +299,14 @@
"x": "vim::VisualDelete",
"y": "vim::VisualYank",
"p": "vim::VisualPaste",
+ "s": "vim::Substitute",
+ "~": "vim::ChangeCase",
"r": [
"vim::PushOperator",
"Replace"
- ]
+ ],
+ "> >": "editor::Indent",
+ "< <": "editor::Outdent"
}
},
{
diff --git a/assets/settings/default.json b/assets/settings/default.json
index bd73bcbf08032946736159393e8385107f5873d1..c69d8089bc6e91e616da0c12bd90da277c78fefe 100644
--- a/assets/settings/default.json
+++ b/assets/settings/default.json
@@ -57,37 +57,37 @@
"show_whitespaces": "selection",
// Scrollbar related settings
"scrollbar": {
- // When to show the scrollbar in the editor.
- // This setting can take four values:
- //
- // 1. Show the scrollbar if there's important information or
- // follow the system's configured behavior (default):
- // "auto"
- // 2. Match the system's configured behavior:
- // "system"
- // 3. Always show the scrollbar:
- // "always"
- // 4. Never show the scrollbar:
- // "never"
- "show": "auto",
- // Whether to show git diff indicators in the scrollbar.
- "git_diff": true
+ // When to show the scrollbar in the editor.
+ // This setting can take four values:
+ //
+ // 1. Show the scrollbar if there's important information or
+ // follow the system's configured behavior (default):
+ // "auto"
+ // 2. Match the system's configured behavior:
+ // "system"
+ // 3. Always show the scrollbar:
+ // "always"
+ // 4. Never show the scrollbar:
+ // "never"
+ "show": "auto",
+ // Whether to show git diff indicators in the scrollbar.
+ "git_diff": true
},
"project_panel": {
- // Whether to show the git status in the project panel.
- "git_status": true,
- // Where to dock project panel. Can be 'left' or 'right'.
- "dock": "left",
- // Default width of the project panel.
- "default_width": 240
+ // Whether to show the git status in the project panel.
+ "git_status": true,
+ // Where to dock project panel. Can be 'left' or 'right'.
+ "dock": "left",
+ // Default width of the project panel.
+ "default_width": 240
},
"assistant": {
- // Where to dock the assistant. Can be 'left', 'right' or 'bottom'.
- "dock": "right",
- // Default width when the assistant is docked to the left or right.
- "default_width": 450,
- // Default height when the assistant is docked to the bottom.
- "default_height": 320
+ // Where to dock the assistant. Can be 'left', 'right' or 'bottom'.
+ "dock": "right",
+ // Default width when the assistant is docked to the left or right.
+ "default_width": 640,
+ // Default height when the assistant is docked to the bottom.
+ "default_height": 320
},
// Whether the screen sharing icon is shown in the os status bar.
"show_call_status_icon": true,
diff --git a/crates/activity_indicator/src/activity_indicator.rs b/crates/activity_indicator/src/activity_indicator.rs
index 9172b84f3c2cec4111777f8e1e974ea2a6d8f8a7..8b46d7cfc58cd18d3b5b91919338e4049f882f5b 100644
--- a/crates/activity_indicator/src/activity_indicator.rs
+++ b/crates/activity_indicator/src/activity_indicator.rs
@@ -321,7 +321,7 @@ impl View for ActivityIndicator {
let mut element = MouseEventHandler::::new(0, cx, |state, cx| {
let theme = &theme::current(cx).workspace.status_bar.lsp_status;
let style = if state.hovered() && on_click.is_some() {
- theme.hover.as_ref().unwrap_or(&theme.default)
+ theme.hovered.as_ref().unwrap_or(&theme.default)
} else {
&theme.default
};
diff --git a/crates/ai/Cargo.toml b/crates/ai/Cargo.toml
index 7f8954bb21ea88a0b14f7fd5bacf26743de3c6be..013565e14f449863f3b81be1d94bf4562b4323e0 100644
--- a/crates/ai/Cargo.toml
+++ b/crates/ai/Cargo.toml
@@ -22,9 +22,10 @@ util = { path = "../util" }
workspace = { path = "../workspace" }
anyhow.workspace = true
-chrono = "0.4"
+chrono = { version = "0.4", features = ["serde"] }
futures.workspace = true
isahc.workspace = true
+regex.workspace = true
schemars.workspace = true
serde.workspace = true
serde_json.workspace = true
@@ -33,3 +34,4 @@ tiktoken-rs = "0.4"
[dev-dependencies]
editor = { path = "../editor", features = ["test-support"] }
+project = { path = "../project", features = ["test-support"] }
diff --git a/crates/ai/src/ai.rs b/crates/ai/src/ai.rs
index b3b62c6a2422f0a354f27a34f0e28ffea23af95f..812fb051213f66fd8df1fb83d0b423b1f414effb 100644
--- a/crates/ai/src/ai.rs
+++ b/crates/ai/src/ai.rs
@@ -1,10 +1,22 @@
pub mod assistant;
mod assistant_settings;
+use anyhow::Result;
pub use assistant::AssistantPanel;
+use chrono::{DateTime, Local};
+use collections::HashMap;
+use fs::Fs;
+use futures::StreamExt;
use gpui::AppContext;
+use regex::Regex;
use serde::{Deserialize, Serialize};
-use std::fmt::{self, Display};
+use std::{
+ cmp::Reverse,
+ fmt::{self, Display},
+ path::PathBuf,
+ sync::Arc,
+};
+use util::paths::CONVERSATIONS_DIR;
// Data types for chat completion requests
#[derive(Debug, Serialize)]
@@ -14,6 +26,84 @@ struct OpenAIRequest {
stream: bool,
}
+#[derive(
+ Copy, Clone, Debug, Default, Eq, PartialEq, PartialOrd, Ord, Hash, Serialize, Deserialize,
+)]
+struct MessageId(usize);
+
+#[derive(Clone, Debug, Serialize, Deserialize)]
+struct MessageMetadata {
+ role: Role,
+ sent_at: DateTime,
+ status: MessageStatus,
+}
+
+#[derive(Clone, Debug, Serialize, Deserialize)]
+enum MessageStatus {
+ Pending,
+ Done,
+ Error(Arc),
+}
+
+#[derive(Serialize, Deserialize)]
+struct SavedMessage {
+ id: MessageId,
+ start: usize,
+}
+
+#[derive(Serialize, Deserialize)]
+struct SavedConversation {
+ zed: String,
+ version: String,
+ text: String,
+ messages: Vec,
+ message_metadata: HashMap,
+ summary: String,
+ model: String,
+}
+
+impl SavedConversation {
+ const VERSION: &'static str = "0.1.0";
+}
+
+struct SavedConversationMetadata {
+ title: String,
+ path: PathBuf,
+ mtime: chrono::DateTime,
+}
+
+impl SavedConversationMetadata {
+ pub async fn list(fs: Arc) -> Result> {
+ fs.create_dir(&CONVERSATIONS_DIR).await?;
+
+ let mut paths = fs.read_dir(&CONVERSATIONS_DIR).await?;
+ let mut conversations = Vec::::new();
+ while let Some(path) = paths.next().await {
+ let path = path?;
+
+ let pattern = r" - \d+.zed.json$";
+ let re = Regex::new(pattern).unwrap();
+
+ let metadata = fs.metadata(&path).await?;
+ if let Some((file_name, metadata)) = path
+ .file_name()
+ .and_then(|name| name.to_str())
+ .zip(metadata)
+ {
+ let title = re.replace(file_name, "");
+ conversations.push(Self {
+ title: title.into_owned(),
+ path,
+ mtime: metadata.mtime.into(),
+ });
+ }
+ }
+ conversations.sort_unstable_by_key(|conversation| Reverse(conversation.mtime));
+
+ Ok(conversations)
+ }
+}
+
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
struct RequestMessage {
role: Role,
diff --git a/crates/ai/src/assistant.rs b/crates/ai/src/assistant.rs
index ce816f147bac15db7a12ac2dbc7666303ff098b5..9ca54e661a74d935356bf52378613e9ffb1dcb0e 100644
--- a/crates/ai/src/assistant.rs
+++ b/crates/ai/src/assistant.rs
@@ -1,6 +1,7 @@
use crate::{
assistant_settings::{AssistantDockPosition, AssistantSettings},
- OpenAIRequest, OpenAIResponseStreamEvent, RequestMessage, Role,
+ MessageId, MessageMetadata, MessageStatus, OpenAIRequest, OpenAIResponseStreamEvent,
+ RequestMessage, Role, SavedConversation, SavedConversationMetadata, SavedMessage,
};
use anyhow::{anyhow, Result};
use chrono::{DateTime, Local};
@@ -23,17 +24,26 @@ use gpui::{
};
use isahc::{http::StatusCode, Request, RequestExt};
use language::{language_settings::SoftWrap, Buffer, LanguageRegistry, ToOffset as _};
+use search::BufferSearchBar;
use serde::Deserialize;
use settings::SettingsStore;
use std::{
- borrow::Cow, cell::RefCell, cmp, fmt::Write, io, iter, ops::Range, rc::Rc, sync::Arc,
+ cell::RefCell,
+ cmp, env,
+ fmt::Write,
+ io, iter,
+ ops::Range,
+ path::{Path, PathBuf},
+ rc::Rc,
+ sync::Arc,
time::Duration,
};
-use util::{channel::ReleaseChannel, post_inc, truncate_and_trailoff, ResultExt, TryFutureExt};
+use theme::AssistantStyle;
+use util::{paths::CONVERSATIONS_DIR, post_inc, ResultExt, TryFutureExt};
use workspace::{
dock::{DockPosition, Panel},
- item::Item,
- pane, Pane, Workspace,
+ searchable::Direction,
+ Save, ToggleZoom, Toolbar, Workspace,
};
const OPENAI_API_URL: &'static str = "https://api.openai.com/v1";
@@ -41,41 +51,39 @@ const OPENAI_API_URL: &'static str = "https://api.openai.com/v1";
actions!(
assistant,
[
- NewContext,
+ NewConversation,
Assist,
Split,
CycleMessageRole,
QuoteSelection,
ToggleFocus,
- ResetKey
+ ResetKey,
]
);
pub fn init(cx: &mut AppContext) {
- if *util::channel::RELEASE_CHANNEL == ReleaseChannel::Stable {
- cx.update_default_global::(move |filter, _cx| {
- filter.filtered_namespaces.insert("assistant");
- });
- }
-
settings::register::(cx);
cx.add_action(
- |workspace: &mut Workspace, _: &NewContext, cx: &mut ViewContext| {
- if let Some(this) = workspace.panel::(cx) {
- this.update(cx, |this, cx| this.add_context(cx))
- }
-
- workspace.focus_panel::(cx);
+ |this: &mut AssistantPanel,
+ _: &workspace::NewFile,
+ cx: &mut ViewContext| {
+ this.new_conversation(cx);
},
);
- cx.add_action(AssistantEditor::assist);
- cx.capture_action(AssistantEditor::cancel_last_assist);
- cx.add_action(AssistantEditor::quote_selection);
- cx.capture_action(AssistantEditor::copy);
- cx.capture_action(AssistantEditor::split);
- cx.capture_action(AssistantEditor::cycle_message_role);
+ cx.add_action(ConversationEditor::assist);
+ cx.capture_action(ConversationEditor::cancel_last_assist);
+ cx.capture_action(ConversationEditor::save);
+ cx.add_action(ConversationEditor::quote_selection);
+ cx.capture_action(ConversationEditor::copy);
+ cx.add_action(ConversationEditor::split);
+ cx.capture_action(ConversationEditor::cycle_message_role);
cx.add_action(AssistantPanel::save_api_key);
cx.add_action(AssistantPanel::reset_api_key);
+ cx.add_action(AssistantPanel::toggle_zoom);
+ cx.add_action(AssistantPanel::deploy);
+ cx.add_action(AssistantPanel::select_next_match);
+ cx.add_action(AssistantPanel::select_prev_match);
+ cx.add_action(AssistantPanel::handle_editor_cancel);
cx.add_action(
|workspace: &mut Workspace, _: &ToggleFocus, cx: &mut ViewContext| {
workspace.toggle_panel_focus::(cx);
@@ -83,6 +91,7 @@ pub fn init(cx: &mut AppContext) {
);
}
+#[derive(Debug)]
pub enum AssistantPanelEvent {
ZoomIn,
ZoomOut,
@@ -92,15 +101,24 @@ pub enum AssistantPanelEvent {
}
pub struct AssistantPanel {
+ workspace: WeakViewHandle,
width: Option,
height: Option,
- pane: ViewHandle,
+ active_editor_index: Option,
+ prev_active_editor_index: Option,
+ editors: Vec>,
+ saved_conversations: Vec,
+ saved_conversations_list_state: UniformListState,
+ zoomed: bool,
+ has_focus: bool,
+ toolbar: ViewHandle,
api_key: Rc>>,
api_key_editor: Option>,
has_read_credentials: bool,
languages: Arc,
fs: Arc,
subscriptions: Vec,
+ _watch_saved_conversations: Task>,
}
impl AssistantPanel {
@@ -109,66 +127,51 @@ impl AssistantPanel {
cx: AsyncAppContext,
) -> Task>> {
cx.spawn(|mut cx| async move {
+ let fs = workspace.read_with(&cx, |workspace, _| workspace.app_state().fs.clone())?;
+ let saved_conversations = SavedConversationMetadata::list(fs.clone())
+ .await
+ .log_err()
+ .unwrap_or_default();
+
// TODO: deserialize state.
+ let workspace_handle = workspace.clone();
workspace.update(&mut cx, |workspace, cx| {
cx.add_view::(|cx| {
- let weak_self = cx.weak_handle();
- let pane = cx.add_view(|cx| {
- let mut pane = Pane::new(
- workspace.weak_handle(),
- workspace.project().clone(),
- workspace.app_state().background_actions,
- Default::default(),
- cx,
- );
- pane.set_can_split(false, cx);
- pane.set_can_navigate(false, cx);
- pane.on_can_drop(move |_, _| false);
- pane.set_render_tab_bar_buttons(cx, move |pane, cx| {
- let weak_self = weak_self.clone();
- Flex::row()
- .with_child(Pane::render_tab_bar_button(
- 0,
- "icons/plus_12.svg",
- false,
- Some(("New Context".into(), Some(Box::new(NewContext)))),
- cx,
- move |_, cx| {
- let weak_self = weak_self.clone();
- cx.window_context().defer(move |cx| {
- if let Some(this) = weak_self.upgrade(cx) {
- this.update(cx, |this, cx| this.add_context(cx));
- }
- })
- },
- None,
- ))
- .with_child(Pane::render_tab_bar_button(
- 1,
- if pane.is_zoomed() {
- "icons/minimize_8.svg"
- } else {
- "icons/maximize_8.svg"
- },
- pane.is_zoomed(),
- Some((
- "Toggle Zoom".into(),
- Some(Box::new(workspace::ToggleZoom)),
- )),
- cx,
- move |pane, cx| pane.toggle_zoom(&Default::default(), cx),
- None,
- ))
- .into_any()
- });
- let buffer_search_bar = cx.add_view(search::BufferSearchBar::new);
- pane.toolbar()
- .update(cx, |toolbar, cx| toolbar.add_item(buffer_search_bar, cx));
- pane
+ const CONVERSATION_WATCH_DURATION: Duration = Duration::from_millis(100);
+ let _watch_saved_conversations = cx.spawn(move |this, mut cx| async move {
+ let mut events = fs
+ .watch(&CONVERSATIONS_DIR, CONVERSATION_WATCH_DURATION)
+ .await;
+ while events.next().await.is_some() {
+ let saved_conversations = SavedConversationMetadata::list(fs.clone())
+ .await
+ .log_err()
+ .unwrap_or_default();
+ this.update(&mut cx, |this, _| {
+ this.saved_conversations = saved_conversations
+ })
+ .ok();
+ }
+
+ anyhow::Ok(())
});
+ let toolbar = cx.add_view(|cx| {
+ let mut toolbar = Toolbar::new(None);
+ toolbar.set_can_navigate(false, cx);
+ toolbar.add_item(cx.add_view(|cx| BufferSearchBar::new(cx)), cx);
+ toolbar
+ });
let mut this = Self {
- pane,
+ workspace: workspace_handle,
+ active_editor_index: Default::default(),
+ prev_active_editor_index: Default::default(),
+ editors: Default::default(),
+ saved_conversations,
+ saved_conversations_list_state: Default::default(),
+ zoomed: false,
+ has_focus: false,
+ toolbar,
api_key: Rc::new(RefCell::new(None)),
api_key_editor: None,
has_read_credentials: false,
@@ -177,20 +180,18 @@ impl AssistantPanel {
width: None,
height: None,
subscriptions: Default::default(),
+ _watch_saved_conversations,
};
let mut old_dock_position = this.position(cx);
- this.subscriptions = vec![
- cx.observe(&this.pane, |_, _, cx| cx.notify()),
- cx.subscribe(&this.pane, Self::handle_pane_event),
- cx.observe_global::(move |this, cx| {
+ this.subscriptions =
+ vec![cx.observe_global::(move |this, cx| {
let new_dock_position = this.position(cx);
if new_dock_position != old_dock_position {
old_dock_position = new_dock_position;
cx.emit(AssistantPanelEvent::DockPositionChanged);
}
- }),
- ];
+ })];
this
})
@@ -198,40 +199,64 @@ impl AssistantPanel {
})
}
- fn handle_pane_event(
+ fn new_conversation(&mut self, cx: &mut ViewContext) -> ViewHandle {
+ let editor = cx.add_view(|cx| {
+ ConversationEditor::new(
+ self.api_key.clone(),
+ self.languages.clone(),
+ self.fs.clone(),
+ cx,
+ )
+ });
+ self.add_conversation(editor.clone(), cx);
+ editor
+ }
+
+ fn add_conversation(
&mut self,
- _pane: ViewHandle,
- event: &pane::Event,
+ editor: ViewHandle,
cx: &mut ViewContext,
) {
- match event {
- pane::Event::ZoomIn => cx.emit(AssistantPanelEvent::ZoomIn),
- pane::Event::ZoomOut => cx.emit(AssistantPanelEvent::ZoomOut),
- pane::Event::Focus => cx.emit(AssistantPanelEvent::Focus),
- pane::Event::Remove => cx.emit(AssistantPanelEvent::Close),
- _ => {}
- }
- }
+ self.subscriptions
+ .push(cx.subscribe(&editor, Self::handle_conversation_editor_event));
- fn add_context(&mut self, cx: &mut ViewContext) {
- let focus = self.has_focus(cx);
- let editor = cx
- .add_view(|cx| AssistantEditor::new(self.api_key.clone(), self.languages.clone(), cx));
+ let conversation = editor.read(cx).conversation.clone();
self.subscriptions
- .push(cx.subscribe(&editor, Self::handle_assistant_editor_event));
- self.pane.update(cx, |pane, cx| {
- pane.add_item(Box::new(editor), true, focus, None, cx)
- });
+ .push(cx.observe(&conversation, |_, _, cx| cx.notify()));
+
+ let index = self.editors.len();
+ self.editors.push(editor);
+ self.set_active_editor_index(Some(index), cx);
}
- fn handle_assistant_editor_event(
+ fn set_active_editor_index(&mut self, index: Option, cx: &mut ViewContext) {
+ self.prev_active_editor_index = self.active_editor_index;
+ self.active_editor_index = index;
+ if let Some(editor) = self.active_editor() {
+ let editor = editor.read(cx).editor.clone();
+ self.toolbar.update(cx, |toolbar, cx| {
+ toolbar.set_active_item(Some(&editor), cx);
+ });
+ if self.has_focus(cx) {
+ cx.focus(&editor);
+ }
+ } else {
+ self.toolbar.update(cx, |toolbar, cx| {
+ toolbar.set_active_item(None, cx);
+ });
+ }
+
+ cx.notify();
+ }
+
+ fn handle_conversation_editor_event(
&mut self,
- _: ViewHandle,
- event: &AssistantEditorEvent,
+ _: ViewHandle,
+ event: &ConversationEditorEvent,
cx: &mut ViewContext,
) {
match event {
- AssistantEditorEvent::TabContentChanged => self.pane.update(cx, |_, cx| cx.notify()),
+ ConversationEditorEvent::TabContentChanged => cx.notify(),
}
}
@@ -262,6 +287,287 @@ impl AssistantPanel {
cx.focus_self();
cx.notify();
}
+
+ fn toggle_zoom(&mut self, _: &workspace::ToggleZoom, cx: &mut ViewContext) {
+ if self.zoomed {
+ cx.emit(AssistantPanelEvent::ZoomOut)
+ } else {
+ cx.emit(AssistantPanelEvent::ZoomIn)
+ }
+ }
+
+ fn deploy(&mut self, action: &search::buffer_search::Deploy, cx: &mut ViewContext) {
+ if let Some(search_bar) = self.toolbar.read(cx).item_of_type::() {
+ if search_bar.update(cx, |search_bar, cx| search_bar.show(action.focus, true, cx)) {
+ return;
+ }
+ }
+ cx.propagate_action();
+ }
+
+ fn handle_editor_cancel(&mut self, _: &editor::Cancel, cx: &mut ViewContext) {
+ if let Some(search_bar) = self.toolbar.read(cx).item_of_type::() {
+ if !search_bar.read(cx).is_dismissed() {
+ search_bar.update(cx, |search_bar, cx| {
+ search_bar.dismiss(&Default::default(), cx)
+ });
+ return;
+ }
+ }
+ cx.propagate_action();
+ }
+
+ fn select_next_match(&mut self, _: &search::SelectNextMatch, cx: &mut ViewContext) {
+ if let Some(search_bar) = self.toolbar.read(cx).item_of_type::() {
+ search_bar.update(cx, |bar, cx| bar.select_match(Direction::Next, cx));
+ }
+ }
+
+ fn select_prev_match(&mut self, _: &search::SelectPrevMatch, cx: &mut ViewContext) {
+ if let Some(search_bar) = self.toolbar.read(cx).item_of_type::() {
+ search_bar.update(cx, |bar, cx| bar.select_match(Direction::Prev, cx));
+ }
+ }
+
+ fn active_editor(&self) -> Option<&ViewHandle> {
+ self.editors.get(self.active_editor_index?)
+ }
+
+ fn render_hamburger_button(cx: &mut ViewContext) -> impl Element {
+ enum History {}
+ let theme = theme::current(cx);
+ let tooltip_style = theme::current(cx).tooltip.clone();
+ MouseEventHandler::::new(0, cx, |state, _| {
+ let style = theme.assistant.hamburger_button.style_for(state);
+ Svg::for_style(style.icon.clone())
+ .contained()
+ .with_style(style.container)
+ })
+ .with_cursor_style(CursorStyle::PointingHand)
+ .on_click(MouseButton::Left, |_, this: &mut Self, cx| {
+ if this.active_editor().is_some() {
+ this.set_active_editor_index(None, cx);
+ } else {
+ this.set_active_editor_index(this.prev_active_editor_index, cx);
+ }
+ })
+ .with_tooltip::(1, "History".into(), None, tooltip_style, cx)
+ }
+
+ fn render_editor_tools(&self, cx: &mut ViewContext) -> Vec> {
+ if self.active_editor().is_some() {
+ vec![
+ Self::render_split_button(cx).into_any(),
+ Self::render_quote_button(cx).into_any(),
+ Self::render_assist_button(cx).into_any(),
+ ]
+ } else {
+ Default::default()
+ }
+ }
+
+ fn render_split_button(cx: &mut ViewContext) -> impl Element {
+ let theme = theme::current(cx);
+ let tooltip_style = theme::current(cx).tooltip.clone();
+ MouseEventHandler::::new(0, cx, |state, _| {
+ let style = theme.assistant.split_button.style_for(state);
+ Svg::for_style(style.icon.clone())
+ .contained()
+ .with_style(style.container)
+ })
+ .with_cursor_style(CursorStyle::PointingHand)
+ .on_click(MouseButton::Left, |_, this: &mut Self, cx| {
+ if let Some(active_editor) = this.active_editor() {
+ active_editor.update(cx, |editor, cx| editor.split(&Default::default(), cx));
+ }
+ })
+ .with_tooltip::(
+ 1,
+ "Split Message".into(),
+ Some(Box::new(Split)),
+ tooltip_style,
+ cx,
+ )
+ }
+
+ fn render_assist_button(cx: &mut ViewContext) -> impl Element {
+ let theme = theme::current(cx);
+ let tooltip_style = theme::current(cx).tooltip.clone();
+ MouseEventHandler::::new(0, cx, |state, _| {
+ let style = theme.assistant.assist_button.style_for(state);
+ Svg::for_style(style.icon.clone())
+ .contained()
+ .with_style(style.container)
+ })
+ .with_cursor_style(CursorStyle::PointingHand)
+ .on_click(MouseButton::Left, |_, this: &mut Self, cx| {
+ if let Some(active_editor) = this.active_editor() {
+ active_editor.update(cx, |editor, cx| editor.assist(&Default::default(), cx));
+ }
+ })
+ .with_tooltip::(
+ 1,
+ "Assist".into(),
+ Some(Box::new(Assist)),
+ tooltip_style,
+ cx,
+ )
+ }
+
+ fn render_quote_button(cx: &mut ViewContext) -> impl Element {
+ let theme = theme::current(cx);
+ let tooltip_style = theme::current(cx).tooltip.clone();
+ MouseEventHandler::::new(0, cx, |state, _| {
+ let style = theme.assistant.quote_button.style_for(state);
+ Svg::for_style(style.icon.clone())
+ .contained()
+ .with_style(style.container)
+ })
+ .with_cursor_style(CursorStyle::PointingHand)
+ .on_click(MouseButton::Left, |_, this: &mut Self, cx| {
+ if let Some(workspace) = this.workspace.upgrade(cx) {
+ cx.window_context().defer(move |cx| {
+ workspace.update(cx, |workspace, cx| {
+ ConversationEditor::quote_selection(workspace, &Default::default(), cx)
+ });
+ });
+ }
+ })
+ .with_tooltip::(
+ 1,
+ "Quote Selection".into(),
+ Some(Box::new(QuoteSelection)),
+ tooltip_style,
+ cx,
+ )
+ }
+
+ fn render_plus_button(cx: &mut ViewContext) -> impl Element {
+ let theme = theme::current(cx);
+ let tooltip_style = theme::current(cx).tooltip.clone();
+ MouseEventHandler::::new(0, cx, |state, _| {
+ let style = theme.assistant.plus_button.style_for(state);
+ Svg::for_style(style.icon.clone())
+ .contained()
+ .with_style(style.container)
+ })
+ .with_cursor_style(CursorStyle::PointingHand)
+ .on_click(MouseButton::Left, |_, this: &mut Self, cx| {
+ this.new_conversation(cx);
+ })
+ .with_tooltip::(
+ 1,
+ "New Conversation".into(),
+ Some(Box::new(NewConversation)),
+ tooltip_style,
+ cx,
+ )
+ }
+
+ fn render_zoom_button(&self, cx: &mut ViewContext) -> impl Element {
+ enum ToggleZoomButton {}
+
+ let theme = theme::current(cx);
+ let tooltip_style = theme::current(cx).tooltip.clone();
+ let style = if self.zoomed {
+ &theme.assistant.zoom_out_button
+ } else {
+ &theme.assistant.zoom_in_button
+ };
+
+ MouseEventHandler::::new(0, cx, |state, _| {
+ let style = style.style_for(state);
+ Svg::for_style(style.icon.clone())
+ .contained()
+ .with_style(style.container)
+ })
+ .with_cursor_style(CursorStyle::PointingHand)
+ .on_click(MouseButton::Left, |_, this, cx| {
+ this.toggle_zoom(&ToggleZoom, cx);
+ })
+ .with_tooltip::(
+ 0,
+ if self.zoomed {
+ "Zoom Out".into()
+ } else {
+ "Zoom In".into()
+ },
+ Some(Box::new(ToggleZoom)),
+ tooltip_style,
+ cx,
+ )
+ }
+
+ fn render_saved_conversation(
+ &mut self,
+ index: usize,
+ cx: &mut ViewContext,
+ ) -> impl Element {
+ let conversation = &self.saved_conversations[index];
+ let path = conversation.path.clone();
+ MouseEventHandler::::new(index, cx, move |state, cx| {
+ let style = &theme::current(cx).assistant.saved_conversation;
+ Flex::row()
+ .with_child(
+ Label::new(
+ conversation.mtime.format("%F %I:%M%p").to_string(),
+ style.saved_at.text.clone(),
+ )
+ .aligned()
+ .contained()
+ .with_style(style.saved_at.container),
+ )
+ .with_child(
+ Label::new(conversation.title.clone(), style.title.text.clone())
+ .aligned()
+ .contained()
+ .with_style(style.title.container),
+ )
+ .contained()
+ .with_style(*style.container.style_for(state))
+ })
+ .with_cursor_style(CursorStyle::PointingHand)
+ .on_click(MouseButton::Left, move |_, this, cx| {
+ this.open_conversation(path.clone(), cx)
+ .detach_and_log_err(cx)
+ })
+ }
+
+ fn open_conversation(&mut self, path: PathBuf, cx: &mut ViewContext) -> Task> {
+ if let Some(ix) = self.editor_index_for_path(&path, cx) {
+ self.set_active_editor_index(Some(ix), cx);
+ return Task::ready(Ok(()));
+ }
+
+ let fs = self.fs.clone();
+ let api_key = self.api_key.clone();
+ let languages = self.languages.clone();
+ cx.spawn(|this, mut cx| async move {
+ let saved_conversation = fs.load(&path).await?;
+ let saved_conversation = serde_json::from_str(&saved_conversation)?;
+ let conversation = cx.add_model(|cx| {
+ Conversation::deserialize(saved_conversation, path.clone(), api_key, languages, cx)
+ });
+ this.update(&mut cx, |this, cx| {
+ // If, by the time we've loaded the conversation, the user has already opened
+ // the same conversation, we don't want to open it again.
+ if let Some(ix) = this.editor_index_for_path(&path, cx) {
+ this.set_active_editor_index(Some(ix), cx);
+ } else {
+ let editor = cx
+ .add_view(|cx| ConversationEditor::for_conversation(conversation, fs, cx));
+ this.add_conversation(editor, cx);
+ }
+ })?;
+ Ok(())
+ })
+ }
+
+ fn editor_index_for_path(&self, path: &Path, cx: &AppContext) -> Option {
+ self.editors
+ .iter()
+ .position(|editor| editor.read(cx).conversation.read(cx).path.as_deref() == Some(path))
+ }
}
fn build_api_key_editor(cx: &mut ViewContext) -> ViewHandle {
@@ -285,7 +591,8 @@ impl View for AssistantPanel {
}
fn render(&mut self, cx: &mut ViewContext) -> AnyElement {
- let style = &theme::current(cx).assistant;
+ let theme = &theme::current(cx);
+ let style = &theme.assistant;
if let Some(api_key_editor) = self.api_key_editor.as_ref() {
Flex::column()
.with_child(
@@ -306,19 +613,81 @@ impl View for AssistantPanel {
.aligned()
.into_any()
} else {
- ChildView::new(&self.pane, cx).into_any()
+ let title = self.active_editor().map(|editor| {
+ Label::new(editor.read(cx).title(cx), style.title.text.clone())
+ .contained()
+ .with_style(style.title.container)
+ .aligned()
+ .left()
+ .flex(1., false)
+ });
+ let mut header = Flex::row()
+ .with_child(Self::render_hamburger_button(cx).aligned())
+ .with_children(title);
+ if self.has_focus {
+ header.add_children(
+ self.render_editor_tools(cx)
+ .into_iter()
+ .map(|tool| tool.aligned().flex_float()),
+ );
+ header.add_child(Self::render_plus_button(cx).aligned().flex_float());
+ header.add_child(self.render_zoom_button(cx).aligned());
+ }
+
+ Flex::column()
+ .with_child(
+ header
+ .contained()
+ .with_style(theme.workspace.tab_bar.container)
+ .expanded()
+ .constrained()
+ .with_height(theme.workspace.tab_bar.height),
+ )
+ .with_children(if self.toolbar.read(cx).hidden() {
+ None
+ } else {
+ Some(ChildView::new(&self.toolbar, cx).expanded())
+ })
+ .with_child(if let Some(editor) = self.active_editor() {
+ ChildView::new(editor, cx).flex(1., true).into_any()
+ } else {
+ UniformList::new(
+ self.saved_conversations_list_state.clone(),
+ self.saved_conversations.len(),
+ cx,
+ |this, range, items, cx| {
+ for ix in range {
+ items.push(this.render_saved_conversation(ix, cx).into_any());
+ }
+ },
+ )
+ .flex(1., true)
+ .into_any()
+ })
+ .into_any()
}
}
fn focus_in(&mut self, _: gpui::AnyViewHandle, cx: &mut ViewContext) {
+ self.has_focus = true;
+ self.toolbar
+ .update(cx, |toolbar, cx| toolbar.focus_changed(true, cx));
+ cx.notify();
if cx.is_self_focused() {
- if let Some(api_key_editor) = self.api_key_editor.as_ref() {
+ if let Some(editor) = self.active_editor() {
+ cx.focus(editor);
+ } else if let Some(api_key_editor) = self.api_key_editor.as_ref() {
cx.focus(api_key_editor);
- } else {
- cx.focus(&self.pane);
}
}
}
+
+ fn focus_out(&mut self, _: gpui::AnyViewHandle, cx: &mut ViewContext) {
+ self.has_focus = false;
+ self.toolbar
+ .update(cx, |toolbar, cx| toolbar.focus_changed(false, cx));
+ cx.notify();
+ }
}
impl Panel for AssistantPanel {
@@ -371,19 +740,22 @@ impl Panel for AssistantPanel {
matches!(event, AssistantPanelEvent::ZoomOut)
}
- fn is_zoomed(&self, cx: &WindowContext) -> bool {
- self.pane.read(cx).is_zoomed()
+ fn is_zoomed(&self, _: &WindowContext) -> bool {
+ self.zoomed
}
fn set_zoomed(&mut self, zoomed: bool, cx: &mut ViewContext) {
- self.pane.update(cx, |pane, cx| pane.set_zoomed(zoomed, cx));
+ self.zoomed = zoomed;
+ cx.notify();
}
fn set_active(&mut self, active: bool, cx: &mut ViewContext) {
if active {
if self.api_key.borrow().is_none() && !self.has_read_credentials {
self.has_read_credentials = true;
- let api_key = if let Some((_, api_key)) = cx
+ let api_key = if let Ok(api_key) = env::var("OPENAI_API_KEY") {
+ Some(api_key)
+ } else if let Some((_, api_key)) = cx
.platform()
.read_credentials(OPENAI_API_URL)
.log_err()
@@ -401,8 +773,8 @@ impl Panel for AssistantPanel {
}
}
- if self.pane.read(cx).items_len() == 0 {
- self.add_context(cx);
+ if self.editors.is_empty() {
+ self.new_conversation(cx);
}
}
}
@@ -427,12 +799,8 @@ impl Panel for AssistantPanel {
matches!(event, AssistantPanelEvent::Close)
}
- fn has_focus(&self, cx: &WindowContext) -> bool {
- self.pane.read(cx).has_focus()
- || self
- .api_key_editor
- .as_ref()
- .map_or(false, |editor| editor.is_focused(cx))
+ fn has_focus(&self, _: &WindowContext) -> bool {
+ self.has_focus
}
fn is_focus_event(event: &Self::Event) -> bool {
@@ -440,18 +808,24 @@ impl Panel for AssistantPanel {
}
}
-enum AssistantEvent {
+enum ConversationEvent {
MessagesEdited,
SummaryChanged,
StreamedCompletion,
}
-struct Assistant {
+#[derive(Default)]
+struct Summary {
+ text: String,
+ done: bool,
+}
+
+struct Conversation {
buffer: ModelHandle,
message_anchors: Vec,
messages_metadata: HashMap,
next_message_id: MessageId,
- summary: Option,
+ summary: Option,
pending_summary: Task