Detailed changes
@@ -851,11 +851,13 @@ dependencies = [
"envy",
"futures",
"gpui",
+ "hyper",
"language",
"lazy_static",
"lipsum",
"log",
"lsp",
+ "nanoid",
"opentelemetry",
"opentelemetry-otlp",
"parking_lot",
@@ -934,6 +936,7 @@ checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7"
name = "contacts_panel"
version = "0.1.0"
dependencies = [
+ "anyhow",
"client",
"editor",
"futures",
@@ -2762,6 +2765,15 @@ version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+[[package]]
+name = "nanoid"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8"
+dependencies = [
+ "rand 0.8.3",
+]
+
[[package]]
name = "native-tls"
version = "0.2.10"
@@ -0,0 +1,1734 @@
+{
+ "picker": {
+ "background": "#26232a",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#3f3b45",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#332f38"
+ }
+ },
+ "border": {
+ "color": "#19171c",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#7e7887",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#19171c",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#7e7887",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "border": {
+ "color": "#26232a",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "workspace": {
+ "background": "#26232a",
+ "joining_project_avatar": {
+ "corner_radius": 40,
+ "width": 80
+ },
+ "joining_project_message": {
+ "padding": 12,
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 18
+ },
+ "leader_border_opacity": 0.7,
+ "leader_border_width": 2,
+ "tab": {
+ "height": 32,
+ "background": "#26232a",
+ "icon_close": "#8b8792",
+ "icon_close_active": "#efecf4",
+ "icon_conflict": "#a06e3b",
+ "icon_dirty": "#576ddb",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "left": true,
+ "bottom": true,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "active_tab": {
+ "height": 32,
+ "background": "#19171c",
+ "icon_close": "#8b8792",
+ "icon_close_active": "#efecf4",
+ "icon_conflict": "#a06e3b",
+ "icon_dirty": "#576ddb",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#efecf4",
+ "size": 14
+ },
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "left": true,
+ "bottom": false,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "modal": {
+ "margin": {
+ "bottom": 52,
+ "top": 52
+ },
+ "cursor": "Arrow"
+ },
+ "sidebar_resize_handle": {
+ "background": "#19171c",
+ "padding": {
+ "left": 1
+ }
+ },
+ "pane_divider": {
+ "color": "#26232a",
+ "width": 1
+ },
+ "status_bar": {
+ "height": 30,
+ "item_spacing": 8,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "top": true,
+ "overlay": true
+ },
+ "cursor_position": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "auto_update_progress_message": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "auto_update_done_message": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "lsp_status": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "icon_spacing": 4,
+ "icon_width": 14,
+ "height": 18,
+ "message": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "icon_color": "#8b8792",
+ "hover": {
+ "message": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "icon_color": "#e2dfe7",
+ "background": "#332f38"
+ }
+ },
+ "diagnostic_message": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ }
+ },
+ "diagnostic_summary": {
+ "height": 16,
+ "icon_width": 14,
+ "icon_spacing": 2,
+ "summary_spacing": 6,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "icon_color_ok": "#8b8792",
+ "icon_color_warning": "#a06e3b",
+ "icon_color_error": "#be4678",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ }
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#a06e3b26",
+ "border": {
+ "color": "#a06e3b26",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#be467826",
+ "border": {
+ "color": "#be467826",
+ "width": 1
+ }
+ },
+ "hover": {
+ "icon_color_ok": "#e2dfe7",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ },
+ "background": "#332f38"
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#a06e3b33",
+ "border": {
+ "color": "#a06e3b26",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#be467833",
+ "border": {
+ "color": "#be467826",
+ "width": 1
+ }
+ }
+ }
+ },
+ "sidebar_buttons": {
+ "group_left": {},
+ "group_right": {},
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 6,
+ "right": 6
+ },
+ "icon_size": 14,
+ "icon_color": "#8b8792",
+ "hover": {
+ "icon_color": "#e2dfe7",
+ "background": "#332f38"
+ },
+ "active": {
+ "icon_color": "#efecf4",
+ "background": "#3f3b45"
+ }
+ },
+ "badge": {
+ "corner_radius": 3,
+ "padding": 2,
+ "margin": {
+ "bottom": -1,
+ "right": -1
+ },
+ "border": {
+ "width": 1,
+ "color": "#26232a"
+ },
+ "background": "#576ddb"
+ }
+ }
+ },
+ "titlebar": {
+ "avatar_width": 18,
+ "avatar_margin": 8,
+ "height": 33,
+ "background": "#332f38",
+ "padding": {
+ "left": 80,
+ "right": 6
+ },
+ "title": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "avatar": {
+ "corner_radius": 10,
+ "border": {
+ "color": "#00000088",
+ "width": 1
+ }
+ },
+ "avatar_ribbon": {
+ "height": 3,
+ "width": 12
+ },
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "bottom": true,
+ "overlay": true
+ },
+ "sign_in_prompt": {
+ "border": {
+ "color": "#19171c",
+ "width": 1
+ },
+ "corner_radius": 6,
+ "margin": {
+ "top": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 12,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#efecf4",
+ "size": 12
+ }
+ },
+ "offline_icon": {
+ "color": "#8b8792",
+ "width": 16,
+ "padding": {
+ "right": 4
+ }
+ },
+ "share_icon": {
+ "corner_radius": 6,
+ "margin": {
+ "top": 3,
+ "bottom": 2,
+ "left": 6
+ },
+ "color": "#8b8792",
+ "hover": {
+ "background": "#3f3b45",
+ "color": "#8b8792"
+ },
+ "active": {
+ "background": "#4c4653",
+ "color": "#efecf4"
+ },
+ "active_hover": {
+ "background": "#3f3b45",
+ "color": "#efecf4"
+ }
+ },
+ "outdated_warning": {
+ "family": "Zed Sans",
+ "color": "#a06e3b",
+ "size": 12,
+ "background": "#a06e3b26",
+ "border": {
+ "color": "#a06e3b26",
+ "width": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "corner_radius": 6
+ }
+ },
+ "toolbar": {
+ "height": 34,
+ "background": "#19171c",
+ "border": {
+ "color": "#26232a",
+ "width": 1,
+ "bottom": true
+ },
+ "item_spacing": 8,
+ "padding": {
+ "left": 16,
+ "right": 8,
+ "top": 4,
+ "bottom": 4
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Mono",
+ "color": "#8b8792",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "disconnected_overlay": {
+ "family": "Zed Sans",
+ "color": "#efecf4",
+ "size": 14,
+ "background": "#000000aa"
+ },
+ "notification": {
+ "margin": {
+ "top": 10
+ },
+ "background": "#26232a",
+ "corner_radius": 6,
+ "padding": 12,
+ "border": {
+ "color": "#19171c",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "notifications": {
+ "width": 380,
+ "margin": {
+ "right": 10,
+ "bottom": 10
+ }
+ }
+ },
+ "editor": {
+ "text_color": "#efecf4",
+ "background": "#19171c",
+ "active_line_background": "#26232a",
+ "code_actions_indicator": "#8b8792",
+ "diff_background_deleted": "#be467826",
+ "diff_background_inserted": "#2a929226",
+ "document_highlight_read_background": "#5852603d",
+ "document_highlight_write_background": "#5852607a",
+ "error_color": "#be4678",
+ "gutter_background": "#19171c",
+ "gutter_padding_factor": 3.5,
+ "highlighted_line_background": "#332f38",
+ "line_number": "#7e7887",
+ "line_number_active": "#efecf4",
+ "rename_fade": 0.6,
+ "unnecessary_code_fade": 0.5,
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "guest_selections": [
+ {
+ "cursor": "#2a9292",
+ "selection": "#2a92923d"
+ },
+ {
+ "cursor": "#bf40bf",
+ "selection": "#bf40bf3d"
+ },
+ {
+ "cursor": "#aa573c",
+ "selection": "#aa573c3d"
+ },
+ {
+ "cursor": "#955ae7",
+ "selection": "#955ae73d"
+ },
+ {
+ "cursor": "#398bc6",
+ "selection": "#398bc63d"
+ },
+ {
+ "cursor": "#be4678",
+ "selection": "#be46783d"
+ },
+ {
+ "cursor": "#a06e3b",
+ "selection": "#a06e3b3d"
+ }
+ ],
+ "autocomplete": {
+ "background": "#19171c",
+ "corner_radius": 8,
+ "padding": 4,
+ "border": {
+ "color": "#26232a",
+ "width": 1
+ },
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ }
+ },
+ "hovered_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#1c1a20"
+ },
+ "margin": {
+ "left": -14
+ },
+ "match_highlight": {
+ "family": "Zed Mono",
+ "color": "#576ddb",
+ "size": 14
+ },
+ "selected_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#201d23"
+ }
+ },
+ "diagnostic_header": {
+ "background": "#26232a",
+ "icon_width_factor": 1.5,
+ "text_scale_factor": 0.857,
+ "border": {
+ "color": "#26232a",
+ "width": 1,
+ "bottom": true,
+ "top": true
+ },
+ "code": {
+ "family": "Zed Mono",
+ "color": "#8b8792",
+ "size": 14,
+ "margin": {
+ "left": 10
+ }
+ },
+ "message": {
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 14,
+ "weight": "bold"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ }
+ }
+ },
+ "diagnostic_path_header": {
+ "background": "#26232a",
+ "text_scale_factor": 0.857,
+ "filename": {
+ "family": "Zed Mono",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "path": {
+ "family": "Zed Mono",
+ "color": "#8b8792",
+ "size": 14,
+ "margin": {
+ "left": 12
+ }
+ }
+ },
+ "error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#be4678",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#be4678",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#a06e3b",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#a06e3b",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#19171c",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "syntax": {
+ "primary": {
+ "color": "#efecf4",
+ "weight": "normal"
+ },
+ "comment": {
+ "color": "#8b8792",
+ "weight": "normal"
+ },
+ "punctuation": {
+ "color": "#e2dfe7",
+ "weight": "normal"
+ },
+ "constant": {
+ "color": "#7e7887",
+ "weight": "normal"
+ },
+ "keyword": {
+ "color": "#576ddb",
+ "weight": "normal"
+ },
+ "function": {
+ "color": "#a06e3b",
+ "weight": "normal"
+ },
+ "type": {
+ "color": "#398bc6",
+ "weight": "normal"
+ },
+ "variant": {
+ "color": "#576ddb",
+ "weight": "normal"
+ },
+ "property": {
+ "color": "#576ddb",
+ "weight": "normal"
+ },
+ "enum": {
+ "color": "#aa573c",
+ "weight": "normal"
+ },
+ "operator": {
+ "color": "#aa573c",
+ "weight": "normal"
+ },
+ "string": {
+ "color": "#aa573c",
+ "weight": "normal"
+ },
+ "number": {
+ "color": "#2a9292",
+ "weight": "normal"
+ },
+ "boolean": {
+ "color": "#2a9292",
+ "weight": "normal"
+ },
+ "predictive": {
+ "color": "#8b8792",
+ "weight": "normal"
+ },
+ "title": {
+ "color": "#a06e3b",
+ "weight": "bold"
+ },
+ "emphasis": {
+ "color": "#576ddb",
+ "weight": "normal"
+ },
+ "emphasis.strong": {
+ "color": "#576ddb",
+ "weight": "bold"
+ },
+ "link_uri": {
+ "color": "#2a9292",
+ "weight": "normal",
+ "underline": true
+ },
+ "link_text": {
+ "color": "#aa573c",
+ "weight": "normal",
+ "italic": true
+ }
+ }
+ },
+ "project_diagnostics": {
+ "background": "#19171c",
+ "tab_icon_spacing": 4,
+ "tab_icon_width": 13,
+ "tab_summary_spacing": 10,
+ "empty_message": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 16
+ }
+ },
+ "command_palette": {
+ "keystroke_spacing": 8,
+ "key": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#8b8792",
+ "size": 12
+ },
+ "corner_radius": 4,
+ "background": "#19171c",
+ "border": {
+ "color": "#26232a",
+ "width": 1
+ },
+ "padding": {
+ "top": 2,
+ "bottom": 2,
+ "left": 8,
+ "right": 8
+ },
+ "margin": {
+ "left": 2
+ },
+ "active": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#efecf4",
+ "size": 12
+ }
+ }
+ }
+ },
+ "project_panel": {
+ "padding": {
+ "left": 12,
+ "right": 12,
+ "top": 6,
+ "bottom": 6
+ },
+ "indent_width": 20,
+ "entry": {
+ "height": 24,
+ "icon_color": "#8b8792",
+ "icon_size": 8,
+ "icon_spacing": 8,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "hover": {
+ "background": "#332f38",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#e2dfe7",
+ "size": 14
+ }
+ },
+ "active": {
+ "background": "#3f3b45",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#e2dfe7",
+ "size": 14
+ }
+ },
+ "active_hover": {
+ "background": "#332f38",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#efecf4",
+ "size": 14
+ }
+ }
+ },
+ "filename_editor": {
+ "background": "#201d23",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ }
+ }
+ },
+ "chat_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 12
+ },
+ "channel_name": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "weight": "bold",
+ "size": 14
+ },
+ "channel_name_hash": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "padding": {
+ "right": 8
+ }
+ },
+ "channel_select": {
+ "header": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 0
+ },
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#332f38",
+ "corner_radius": 6
+ },
+ "active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#332f38",
+ "corner_radius": 6
+ },
+ "menu": {
+ "background": "#19171c",
+ "corner_radius": 6,
+ "padding": 4,
+ "border": {
+ "color": "#19171c",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ }
+ },
+ "sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "underline": true,
+ "size": 14
+ },
+ "hovered_sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "underline": true,
+ "size": 14
+ },
+ "message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "pending_message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "input_editor": {
+ "background": "#19171c",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#7e7887",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "border": {
+ "color": "#26232a",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 8,
+ "right": 8,
+ "top": 7
+ }
+ }
+ },
+ "contacts_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 0
+ },
+ "user_query_editor": {
+ "background": "#19171c",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#7e7887",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "border": {
+ "color": "#26232a",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 8,
+ "right": 8,
+ "top": 4
+ },
+ "margin": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "user_query_editor_height": 32,
+ "add_contact_button": {
+ "margin": {
+ "left": 6,
+ "right": 12
+ },
+ "color": "#e2dfe7",
+ "button_width": 8,
+ "icon_width": 8
+ },
+ "row_height": 28,
+ "section_icon_size": 8,
+ "header_row": {
+ "family": "Zed Mono",
+ "color": "#8b8792",
+ "size": 14,
+ "margin": {
+ "top": 14
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#e2dfe7",
+ "size": 14,
+ "background": "#4c4653"
+ }
+ },
+ "contact_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "background": "#4c4653"
+ }
+ },
+ "tree_branch": {
+ "color": "#655f6d",
+ "width": 1,
+ "hover": {
+ "color": "#655f6d"
+ },
+ "active": {
+ "color": "#655f6d"
+ }
+ },
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "family": "Zed Mono",
+ "color": "#e2dfe7",
+ "size": 14,
+ "margin": {
+ "left": 8
+ }
+ },
+ "contact_button_spacing": 8,
+ "contact_button": {
+ "background": "#332f38",
+ "color": "#e2dfe7",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#3f3b45"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#332f38",
+ "color": "#8b8792",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ },
+ "project_row": {
+ "guest_avatar_spacing": 4,
+ "height": 24,
+ "guest_avatar": {
+ "corner_radius": 8,
+ "width": 14
+ },
+ "name": {
+ "family": "Zed Mono",
+ "color": "#8b8792",
+ "size": 14,
+ "margin": {
+ "left": 8,
+ "right": 6
+ }
+ },
+ "guests": {
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "background": "#26232a",
+ "hover": {
+ "background": "#332f38"
+ },
+ "active": {
+ "background": "#3f3b45"
+ }
+ },
+ "invite_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "border": {
+ "top": true,
+ "width": 1,
+ "color": "#19171c"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "hover": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 14,
+ "underline": true
+ }
+ }
+ }
+ },
+ "contact_finder": {
+ "background": "#26232a",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#3f3b45",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#332f38"
+ }
+ },
+ "border": {
+ "color": "#19171c",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#7e7887",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#19171c",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#7e7887",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#e2dfe7",
+ "size": 14
+ },
+ "border": {
+ "color": "#26232a",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ },
+ "row_height": 28,
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "padding": {
+ "left": 8
+ }
+ },
+ "contact_button": {
+ "background": "#332f38",
+ "color": "#e2dfe7",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#3f3b45"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#332f38",
+ "color": "#8b8792",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ }
+ },
+ "search": {
+ "match_background": "#3d1576",
+ "tab_icon_spacing": 8,
+ "tab_icon_width": 14,
+ "option_button": {
+ "family": "Zed Mono",
+ "color": "#8b8792",
+ "size": 14,
+ "background": "#332f38",
+ "corner_radius": 6,
+ "border": {
+ "color": "#26232a",
+ "width": 1
+ },
+ "margin": {
+ "right": 4
+ },
+ "padding": {
+ "bottom": 2,
+ "left": 10,
+ "right": 10,
+ "top": 2
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#efecf4",
+ "size": 14,
+ "background": "#4c4653",
+ "border": {
+ "color": "#655f6d",
+ "width": 1
+ }
+ },
+ "hover": {
+ "family": "Zed Mono",
+ "color": "#efecf4",
+ "size": 14,
+ "background": "#3f3b45",
+ "border": {
+ "color": "#655f6d",
+ "width": 1
+ }
+ }
+ },
+ "editor": {
+ "background": "#19171c",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#7e7887",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#efecf4",
+ "size": 14
+ },
+ "border": {
+ "color": "#26232a",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "invalid_editor": {
+ "background": "#19171c",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#7e7887",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#efecf4",
+ "size": 14
+ },
+ "border": {
+ "color": "#be467826",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "match_index": {
+ "family": "Zed Mono",
+ "color": "#8b8792",
+ "size": 14,
+ "padding": 6
+ },
+ "option_button_group": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "results_status": {
+ "family": "Zed Mono",
+ "color": "#e2dfe7",
+ "size": 18
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "contact_notification": {
+ "header_avatar": {
+ "height": 12,
+ "width": 12,
+ "corner_radius": 6
+ },
+ "header_message": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 12,
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "header_height": 18,
+ "body_message": {
+ "family": "Zed Sans",
+ "color": "#8b8792",
+ "size": 12,
+ "margin": {
+ "left": 20,
+ "top": 6,
+ "bottom": 6
+ }
+ },
+ "button": {
+ "family": "Zed Sans",
+ "color": "#e2dfe7",
+ "size": 12,
+ "background": "#19171c",
+ "padding": 4,
+ "corner_radius": 6,
+ "margin": {
+ "left": 6
+ },
+ "hover": {
+ "background": "#1c1a20"
+ }
+ },
+ "dismiss_button": {
+ "color": "#8b8792",
+ "icon_width": 8,
+ "icon_height": 8,
+ "button_width": 8,
+ "button_height": 8,
+ "hover": {
+ "color": "#e2dfe7"
+ }
+ }
+ }
+}
@@ -0,0 +1,1734 @@
+{
+ "picker": {
+ "background": "#e2dfe7",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#b7b3bd",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#ccc9d2"
+ }
+ },
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#655f6d",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#efecf4",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#655f6d",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#26232a",
+ "size": 14
+ },
+ "border": {
+ "color": "#ccc9d2",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "workspace": {
+ "background": "#e2dfe7",
+ "joining_project_avatar": {
+ "corner_radius": 40,
+ "width": 80
+ },
+ "joining_project_message": {
+ "padding": 12,
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 18
+ },
+ "leader_border_opacity": 0.7,
+ "leader_border_width": 2,
+ "tab": {
+ "height": 32,
+ "background": "#e2dfe7",
+ "icon_close": "#585260",
+ "icon_close_active": "#19171c",
+ "icon_conflict": "#a06e3b",
+ "icon_dirty": "#576ddb",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "left": true,
+ "bottom": true,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "active_tab": {
+ "height": 32,
+ "background": "#efecf4",
+ "icon_close": "#585260",
+ "icon_close_active": "#19171c",
+ "icon_conflict": "#a06e3b",
+ "icon_dirty": "#576ddb",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#19171c",
+ "size": 14
+ },
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "left": true,
+ "bottom": false,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "modal": {
+ "margin": {
+ "bottom": 52,
+ "top": 52
+ },
+ "cursor": "Arrow"
+ },
+ "sidebar_resize_handle": {
+ "background": "#b7b3bd",
+ "padding": {
+ "left": 1
+ }
+ },
+ "pane_divider": {
+ "color": "#ccc9d2",
+ "width": 1
+ },
+ "status_bar": {
+ "height": 30,
+ "item_spacing": 8,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "top": true,
+ "overlay": true
+ },
+ "cursor_position": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "auto_update_progress_message": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "auto_update_done_message": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "lsp_status": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "icon_spacing": 4,
+ "icon_width": 14,
+ "height": 18,
+ "message": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "icon_color": "#585260",
+ "hover": {
+ "message": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 14
+ },
+ "icon_color": "#26232a",
+ "background": "#ccc9d2"
+ }
+ },
+ "diagnostic_message": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ }
+ },
+ "diagnostic_summary": {
+ "height": 16,
+ "icon_width": 14,
+ "icon_spacing": 2,
+ "summary_spacing": 6,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 14
+ },
+ "icon_color_ok": "#585260",
+ "icon_color_warning": "#a06e3b",
+ "icon_color_error": "#be4678",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ }
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#a06e3b26",
+ "border": {
+ "color": "#a06e3b26",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#be467826",
+ "border": {
+ "color": "#be467826",
+ "width": 1
+ }
+ },
+ "hover": {
+ "icon_color_ok": "#26232a",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ },
+ "background": "#ccc9d2"
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#a06e3b33",
+ "border": {
+ "color": "#a06e3b26",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#be467833",
+ "border": {
+ "color": "#be467826",
+ "width": 1
+ }
+ }
+ }
+ },
+ "sidebar_buttons": {
+ "group_left": {},
+ "group_right": {},
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 6,
+ "right": 6
+ },
+ "icon_size": 14,
+ "icon_color": "#585260",
+ "hover": {
+ "icon_color": "#26232a",
+ "background": "#ccc9d2"
+ },
+ "active": {
+ "icon_color": "#19171c",
+ "background": "#b7b3bd"
+ }
+ },
+ "badge": {
+ "corner_radius": 3,
+ "padding": 2,
+ "margin": {
+ "bottom": -1,
+ "right": -1
+ },
+ "border": {
+ "width": 1,
+ "color": "#e2dfe7"
+ },
+ "background": "#576ddb"
+ }
+ }
+ },
+ "titlebar": {
+ "avatar_width": 18,
+ "avatar_margin": 8,
+ "height": 33,
+ "background": "#ccc9d2",
+ "padding": {
+ "left": 80,
+ "right": 6
+ },
+ "title": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 14
+ },
+ "avatar": {
+ "corner_radius": 10,
+ "border": {
+ "color": "#00000088",
+ "width": 1
+ }
+ },
+ "avatar_ribbon": {
+ "height": 3,
+ "width": 12
+ },
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "bottom": true,
+ "overlay": true
+ },
+ "sign_in_prompt": {
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1
+ },
+ "corner_radius": 6,
+ "margin": {
+ "top": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 12,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#19171c",
+ "size": 12
+ }
+ },
+ "offline_icon": {
+ "color": "#585260",
+ "width": 16,
+ "padding": {
+ "right": 4
+ }
+ },
+ "share_icon": {
+ "corner_radius": 6,
+ "margin": {
+ "top": 3,
+ "bottom": 2,
+ "left": 6
+ },
+ "color": "#585260",
+ "hover": {
+ "background": "#b7b3bd",
+ "color": "#585260"
+ },
+ "active": {
+ "background": "#a19da7",
+ "color": "#19171c"
+ },
+ "active_hover": {
+ "background": "#b7b3bd",
+ "color": "#19171c"
+ }
+ },
+ "outdated_warning": {
+ "family": "Zed Sans",
+ "color": "#a06e3b",
+ "size": 12,
+ "background": "#a06e3b26",
+ "border": {
+ "color": "#a06e3b26",
+ "width": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "corner_radius": 6
+ }
+ },
+ "toolbar": {
+ "height": 34,
+ "background": "#efecf4",
+ "border": {
+ "color": "#ccc9d2",
+ "width": 1,
+ "bottom": true
+ },
+ "item_spacing": 8,
+ "padding": {
+ "left": 16,
+ "right": 8,
+ "top": 4,
+ "bottom": 4
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Mono",
+ "color": "#585260",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "disconnected_overlay": {
+ "family": "Zed Sans",
+ "color": "#19171c",
+ "size": 14,
+ "background": "#000000aa"
+ },
+ "notification": {
+ "margin": {
+ "top": 10
+ },
+ "background": "#e2dfe7",
+ "corner_radius": 6,
+ "padding": 12,
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "notifications": {
+ "width": 380,
+ "margin": {
+ "right": 10,
+ "bottom": 10
+ }
+ }
+ },
+ "editor": {
+ "text_color": "#19171c",
+ "background": "#efecf4",
+ "active_line_background": "#e2dfe7",
+ "code_actions_indicator": "#585260",
+ "diff_background_deleted": "#be467826",
+ "diff_background_inserted": "#2a929226",
+ "document_highlight_read_background": "#8b87921f",
+ "document_highlight_write_background": "#8b87923d",
+ "error_color": "#be4678",
+ "gutter_background": "#efecf4",
+ "gutter_padding_factor": 3.5,
+ "highlighted_line_background": "#ccc9d2",
+ "line_number": "#655f6d",
+ "line_number_active": "#19171c",
+ "rename_fade": 0.6,
+ "unnecessary_code_fade": 0.5,
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "guest_selections": [
+ {
+ "cursor": "#2a9292",
+ "selection": "#2a92923d"
+ },
+ {
+ "cursor": "#bf40bf",
+ "selection": "#bf40bf3d"
+ },
+ {
+ "cursor": "#aa573c",
+ "selection": "#aa573c3d"
+ },
+ {
+ "cursor": "#955ae7",
+ "selection": "#955ae73d"
+ },
+ {
+ "cursor": "#398bc6",
+ "selection": "#398bc63d"
+ },
+ {
+ "cursor": "#be4678",
+ "selection": "#be46783d"
+ },
+ {
+ "cursor": "#a06e3b",
+ "selection": "#a06e3b3d"
+ }
+ ],
+ "autocomplete": {
+ "background": "#efecf4",
+ "corner_radius": 8,
+ "padding": 4,
+ "border": {
+ "color": "#ccc9d2",
+ "width": 1
+ },
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ }
+ },
+ "hovered_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#ece9f1"
+ },
+ "margin": {
+ "left": -14
+ },
+ "match_highlight": {
+ "family": "Zed Mono",
+ "color": "#576ddb",
+ "size": 14
+ },
+ "selected_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#e9e6ee"
+ }
+ },
+ "diagnostic_header": {
+ "background": "#e2dfe7",
+ "icon_width_factor": 1.5,
+ "text_scale_factor": 0.857,
+ "border": {
+ "color": "#ccc9d2",
+ "width": 1,
+ "bottom": true,
+ "top": true
+ },
+ "code": {
+ "family": "Zed Mono",
+ "color": "#585260",
+ "size": 14,
+ "margin": {
+ "left": 10
+ }
+ },
+ "message": {
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 14,
+ "weight": "bold"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ }
+ }
+ },
+ "diagnostic_path_header": {
+ "background": "#e2dfe7",
+ "text_scale_factor": 0.857,
+ "filename": {
+ "family": "Zed Mono",
+ "color": "#26232a",
+ "size": 14
+ },
+ "path": {
+ "family": "Zed Mono",
+ "color": "#585260",
+ "size": 14,
+ "margin": {
+ "left": 12
+ }
+ }
+ },
+ "error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#be4678",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#be4678",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#a06e3b",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#a06e3b",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "syntax": {
+ "primary": {
+ "color": "#19171c",
+ "weight": "normal"
+ },
+ "comment": {
+ "color": "#585260",
+ "weight": "normal"
+ },
+ "punctuation": {
+ "color": "#26232a",
+ "weight": "normal"
+ },
+ "constant": {
+ "color": "#655f6d",
+ "weight": "normal"
+ },
+ "keyword": {
+ "color": "#576ddb",
+ "weight": "normal"
+ },
+ "function": {
+ "color": "#a06e3b",
+ "weight": "normal"
+ },
+ "type": {
+ "color": "#398bc6",
+ "weight": "normal"
+ },
+ "variant": {
+ "color": "#576ddb",
+ "weight": "normal"
+ },
+ "property": {
+ "color": "#576ddb",
+ "weight": "normal"
+ },
+ "enum": {
+ "color": "#aa573c",
+ "weight": "normal"
+ },
+ "operator": {
+ "color": "#aa573c",
+ "weight": "normal"
+ },
+ "string": {
+ "color": "#aa573c",
+ "weight": "normal"
+ },
+ "number": {
+ "color": "#2a9292",
+ "weight": "normal"
+ },
+ "boolean": {
+ "color": "#2a9292",
+ "weight": "normal"
+ },
+ "predictive": {
+ "color": "#585260",
+ "weight": "normal"
+ },
+ "title": {
+ "color": "#a06e3b",
+ "weight": "bold"
+ },
+ "emphasis": {
+ "color": "#576ddb",
+ "weight": "normal"
+ },
+ "emphasis.strong": {
+ "color": "#576ddb",
+ "weight": "bold"
+ },
+ "link_uri": {
+ "color": "#2a9292",
+ "weight": "normal",
+ "underline": true
+ },
+ "link_text": {
+ "color": "#aa573c",
+ "weight": "normal",
+ "italic": true
+ }
+ }
+ },
+ "project_diagnostics": {
+ "background": "#efecf4",
+ "tab_icon_spacing": 4,
+ "tab_icon_width": 13,
+ "tab_summary_spacing": 10,
+ "empty_message": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 16
+ }
+ },
+ "command_palette": {
+ "keystroke_spacing": 8,
+ "key": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#585260",
+ "size": 12
+ },
+ "corner_radius": 4,
+ "background": "#efecf4",
+ "border": {
+ "color": "#ccc9d2",
+ "width": 1
+ },
+ "padding": {
+ "top": 2,
+ "bottom": 2,
+ "left": 8,
+ "right": 8
+ },
+ "margin": {
+ "left": 2
+ },
+ "active": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#19171c",
+ "size": 12
+ }
+ }
+ }
+ },
+ "project_panel": {
+ "padding": {
+ "left": 12,
+ "right": 12,
+ "top": 6,
+ "bottom": 6
+ },
+ "indent_width": 20,
+ "entry": {
+ "height": 24,
+ "icon_color": "#585260",
+ "icon_size": 8,
+ "icon_spacing": 8,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#585260",
+ "size": 14
+ },
+ "hover": {
+ "background": "#ccc9d2",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#26232a",
+ "size": 14
+ }
+ },
+ "active": {
+ "background": "#b7b3bd",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#26232a",
+ "size": 14
+ }
+ },
+ "active_hover": {
+ "background": "#ccc9d2",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#19171c",
+ "size": 14
+ }
+ }
+ },
+ "filename_editor": {
+ "background": "#e9e6ee",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#26232a",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ }
+ }
+ },
+ "chat_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 12
+ },
+ "channel_name": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "weight": "bold",
+ "size": 14
+ },
+ "channel_name_hash": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "padding": {
+ "right": 8
+ }
+ },
+ "channel_select": {
+ "header": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 0
+ },
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#ccc9d2",
+ "corner_radius": 6
+ },
+ "active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#ccc9d2",
+ "corner_radius": 6
+ },
+ "menu": {
+ "background": "#efecf4",
+ "corner_radius": 6,
+ "padding": 4,
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ }
+ },
+ "sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "underline": true,
+ "size": 14
+ },
+ "hovered_sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "underline": true,
+ "size": 14
+ },
+ "message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "pending_message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "input_editor": {
+ "background": "#efecf4",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#26232a",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#655f6d",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "border": {
+ "color": "#ccc9d2",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 8,
+ "right": 8,
+ "top": 7
+ }
+ }
+ },
+ "contacts_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 0
+ },
+ "user_query_editor": {
+ "background": "#efecf4",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#26232a",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#655f6d",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "border": {
+ "color": "#ccc9d2",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 8,
+ "right": 8,
+ "top": 4
+ },
+ "margin": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "user_query_editor_height": 32,
+ "add_contact_button": {
+ "margin": {
+ "left": 6,
+ "right": 12
+ },
+ "color": "#26232a",
+ "button_width": 8,
+ "icon_width": 8
+ },
+ "row_height": 28,
+ "section_icon_size": 8,
+ "header_row": {
+ "family": "Zed Mono",
+ "color": "#585260",
+ "size": 14,
+ "margin": {
+ "top": 14
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#26232a",
+ "size": 14,
+ "background": "#a19da7"
+ }
+ },
+ "contact_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "background": "#a19da7"
+ }
+ },
+ "tree_branch": {
+ "color": "#655f6d",
+ "width": 1,
+ "hover": {
+ "color": "#655f6d"
+ },
+ "active": {
+ "color": "#655f6d"
+ }
+ },
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "family": "Zed Mono",
+ "color": "#26232a",
+ "size": 14,
+ "margin": {
+ "left": 8
+ }
+ },
+ "contact_button_spacing": 8,
+ "contact_button": {
+ "background": "#ccc9d2",
+ "color": "#26232a",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#b7b3bd"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#ccc9d2",
+ "color": "#585260",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ },
+ "project_row": {
+ "guest_avatar_spacing": 4,
+ "height": 24,
+ "guest_avatar": {
+ "corner_radius": 8,
+ "width": 14
+ },
+ "name": {
+ "family": "Zed Mono",
+ "color": "#585260",
+ "size": 14,
+ "margin": {
+ "left": 8,
+ "right": 6
+ }
+ },
+ "guests": {
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "background": "#e2dfe7",
+ "hover": {
+ "background": "#ccc9d2"
+ },
+ "active": {
+ "background": "#b7b3bd"
+ }
+ },
+ "invite_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "border": {
+ "top": true,
+ "width": 1,
+ "color": "#b7b3bd"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 14
+ },
+ "hover": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 14,
+ "underline": true
+ }
+ }
+ }
+ },
+ "contact_finder": {
+ "background": "#e2dfe7",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#576ddb",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#b7b3bd",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#ccc9d2"
+ }
+ },
+ "border": {
+ "color": "#b7b3bd",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#655f6d",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#efecf4",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#655f6d",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#26232a",
+ "size": 14
+ },
+ "border": {
+ "color": "#ccc9d2",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ },
+ "row_height": 28,
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "padding": {
+ "left": 8
+ }
+ },
+ "contact_button": {
+ "background": "#ccc9d2",
+ "color": "#26232a",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#b7b3bd"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#ccc9d2",
+ "color": "#585260",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ }
+ },
+ "search": {
+ "match_background": "#d5bdfa",
+ "tab_icon_spacing": 8,
+ "tab_icon_width": 14,
+ "option_button": {
+ "family": "Zed Mono",
+ "color": "#585260",
+ "size": 14,
+ "background": "#ccc9d2",
+ "corner_radius": 6,
+ "border": {
+ "color": "#ccc9d2",
+ "width": 1
+ },
+ "margin": {
+ "right": 4
+ },
+ "padding": {
+ "bottom": 2,
+ "left": 10,
+ "right": 10,
+ "top": 2
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#19171c",
+ "size": 14,
+ "background": "#a19da7",
+ "border": {
+ "color": "#e2dfe7",
+ "width": 1
+ }
+ },
+ "hover": {
+ "family": "Zed Mono",
+ "color": "#19171c",
+ "size": 14,
+ "background": "#b7b3bd",
+ "border": {
+ "color": "#e2dfe7",
+ "width": 1
+ }
+ }
+ },
+ "editor": {
+ "background": "#efecf4",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#655f6d",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#19171c",
+ "size": 14
+ },
+ "border": {
+ "color": "#ccc9d2",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "invalid_editor": {
+ "background": "#efecf4",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#655f6d",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#576ddb",
+ "selection": "#576ddb3d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#19171c",
+ "size": 14
+ },
+ "border": {
+ "color": "#be467826",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "match_index": {
+ "family": "Zed Mono",
+ "color": "#585260",
+ "size": 14,
+ "padding": 6
+ },
+ "option_button_group": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "results_status": {
+ "family": "Zed Mono",
+ "color": "#26232a",
+ "size": 18
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "contact_notification": {
+ "header_avatar": {
+ "height": 12,
+ "width": 12,
+ "corner_radius": 6
+ },
+ "header_message": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 12,
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "header_height": 18,
+ "body_message": {
+ "family": "Zed Sans",
+ "color": "#585260",
+ "size": 12,
+ "margin": {
+ "left": 20,
+ "top": 6,
+ "bottom": 6
+ }
+ },
+ "button": {
+ "family": "Zed Sans",
+ "color": "#26232a",
+ "size": 12,
+ "background": "#efecf4",
+ "padding": 4,
+ "corner_radius": 6,
+ "margin": {
+ "left": 6
+ },
+ "hover": {
+ "background": "#ece9f1"
+ }
+ },
+ "dismiss_button": {
+ "color": "#585260",
+ "icon_width": 8,
+ "icon_height": 8,
+ "button_width": 8,
+ "button_height": 8,
+ "hover": {
+ "color": "#26232a"
+ }
+ }
+ }
+}
@@ -0,0 +1,1734 @@
+{
+ "picker": {
+ "background": "#073642",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#30525c",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#1b444f"
+ }
+ },
+ "border": {
+ "color": "#002b36",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#839496",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#002b36",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#839496",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "border": {
+ "color": "#073642",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "workspace": {
+ "background": "#073642",
+ "joining_project_avatar": {
+ "corner_radius": 40,
+ "width": 80
+ },
+ "joining_project_message": {
+ "padding": 12,
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 18
+ },
+ "leader_border_opacity": 0.7,
+ "leader_border_width": 2,
+ "tab": {
+ "height": 32,
+ "background": "#073642",
+ "icon_close": "#93a1a1",
+ "icon_close_active": "#fdf6e3",
+ "icon_conflict": "#b58900",
+ "icon_dirty": "#268bd2",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "left": true,
+ "bottom": true,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "active_tab": {
+ "height": 32,
+ "background": "#002b36",
+ "icon_close": "#93a1a1",
+ "icon_close_active": "#fdf6e3",
+ "icon_conflict": "#b58900",
+ "icon_dirty": "#268bd2",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#fdf6e3",
+ "size": 14
+ },
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "left": true,
+ "bottom": false,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "modal": {
+ "margin": {
+ "bottom": 52,
+ "top": 52
+ },
+ "cursor": "Arrow"
+ },
+ "sidebar_resize_handle": {
+ "background": "#002b36",
+ "padding": {
+ "left": 1
+ }
+ },
+ "pane_divider": {
+ "color": "#073642",
+ "width": 1
+ },
+ "status_bar": {
+ "height": 30,
+ "item_spacing": 8,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "top": true,
+ "overlay": true
+ },
+ "cursor_position": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "auto_update_progress_message": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "auto_update_done_message": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "lsp_status": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "icon_spacing": 4,
+ "icon_width": 14,
+ "height": 18,
+ "message": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "icon_color": "#93a1a1",
+ "hover": {
+ "message": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "icon_color": "#eee8d5",
+ "background": "#1b444f"
+ }
+ },
+ "diagnostic_message": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ }
+ },
+ "diagnostic_summary": {
+ "height": 16,
+ "icon_width": 14,
+ "icon_spacing": 2,
+ "summary_spacing": 6,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "icon_color_ok": "#93a1a1",
+ "icon_color_warning": "#b58900",
+ "icon_color_error": "#dc322f",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ }
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#b5890026",
+ "border": {
+ "color": "#b5890026",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#dc322f26",
+ "border": {
+ "color": "#dc322f26",
+ "width": 1
+ }
+ },
+ "hover": {
+ "icon_color_ok": "#eee8d5",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ },
+ "background": "#1b444f"
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#b5890033",
+ "border": {
+ "color": "#b5890026",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#dc322f33",
+ "border": {
+ "color": "#dc322f26",
+ "width": 1
+ }
+ }
+ }
+ },
+ "sidebar_buttons": {
+ "group_left": {},
+ "group_right": {},
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 6,
+ "right": 6
+ },
+ "icon_size": 14,
+ "icon_color": "#93a1a1",
+ "hover": {
+ "icon_color": "#eee8d5",
+ "background": "#1b444f"
+ },
+ "active": {
+ "icon_color": "#fdf6e3",
+ "background": "#30525c"
+ }
+ },
+ "badge": {
+ "corner_radius": 3,
+ "padding": 2,
+ "margin": {
+ "bottom": -1,
+ "right": -1
+ },
+ "border": {
+ "width": 1,
+ "color": "#073642"
+ },
+ "background": "#268bd2"
+ }
+ }
+ },
+ "titlebar": {
+ "avatar_width": 18,
+ "avatar_margin": 8,
+ "height": 33,
+ "background": "#1b444f",
+ "padding": {
+ "left": 80,
+ "right": 6
+ },
+ "title": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "avatar": {
+ "corner_radius": 10,
+ "border": {
+ "color": "#00000088",
+ "width": 1
+ }
+ },
+ "avatar_ribbon": {
+ "height": 3,
+ "width": 12
+ },
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "bottom": true,
+ "overlay": true
+ },
+ "sign_in_prompt": {
+ "border": {
+ "color": "#002b36",
+ "width": 1
+ },
+ "corner_radius": 6,
+ "margin": {
+ "top": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 12,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#fdf6e3",
+ "size": 12
+ }
+ },
+ "offline_icon": {
+ "color": "#93a1a1",
+ "width": 16,
+ "padding": {
+ "right": 4
+ }
+ },
+ "share_icon": {
+ "corner_radius": 6,
+ "margin": {
+ "top": 3,
+ "bottom": 2,
+ "left": 6
+ },
+ "color": "#93a1a1",
+ "hover": {
+ "background": "#30525c",
+ "color": "#93a1a1"
+ },
+ "active": {
+ "background": "#446068",
+ "color": "#fdf6e3"
+ },
+ "active_hover": {
+ "background": "#30525c",
+ "color": "#fdf6e3"
+ }
+ },
+ "outdated_warning": {
+ "family": "Zed Sans",
+ "color": "#b58900",
+ "size": 12,
+ "background": "#b5890026",
+ "border": {
+ "color": "#b5890026",
+ "width": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "corner_radius": 6
+ }
+ },
+ "toolbar": {
+ "height": 34,
+ "background": "#002b36",
+ "border": {
+ "color": "#073642",
+ "width": 1,
+ "bottom": true
+ },
+ "item_spacing": 8,
+ "padding": {
+ "left": 16,
+ "right": 8,
+ "top": 4,
+ "bottom": 4
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Mono",
+ "color": "#93a1a1",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "disconnected_overlay": {
+ "family": "Zed Sans",
+ "color": "#fdf6e3",
+ "size": 14,
+ "background": "#000000aa"
+ },
+ "notification": {
+ "margin": {
+ "top": 10
+ },
+ "background": "#073642",
+ "corner_radius": 6,
+ "padding": 12,
+ "border": {
+ "color": "#002b36",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "notifications": {
+ "width": 380,
+ "margin": {
+ "right": 10,
+ "bottom": 10
+ }
+ }
+ },
+ "editor": {
+ "text_color": "#fdf6e3",
+ "background": "#002b36",
+ "active_line_background": "#073642",
+ "code_actions_indicator": "#93a1a1",
+ "diff_background_deleted": "#dc322f26",
+ "diff_background_inserted": "#85990026",
+ "document_highlight_read_background": "#586e753d",
+ "document_highlight_write_background": "#586e757a",
+ "error_color": "#dc322f",
+ "gutter_background": "#002b36",
+ "gutter_padding_factor": 3.5,
+ "highlighted_line_background": "#1b444f",
+ "line_number": "#839496",
+ "line_number_active": "#fdf6e3",
+ "rename_fade": 0.6,
+ "unnecessary_code_fade": 0.5,
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "guest_selections": [
+ {
+ "cursor": "#859900",
+ "selection": "#8599003d"
+ },
+ {
+ "cursor": "#d33682",
+ "selection": "#d336823d"
+ },
+ {
+ "cursor": "#cb4b16",
+ "selection": "#cb4b163d"
+ },
+ {
+ "cursor": "#6c71c4",
+ "selection": "#6c71c43d"
+ },
+ {
+ "cursor": "#2aa198",
+ "selection": "#2aa1983d"
+ },
+ {
+ "cursor": "#dc322f",
+ "selection": "#dc322f3d"
+ },
+ {
+ "cursor": "#b58900",
+ "selection": "#b589003d"
+ }
+ ],
+ "autocomplete": {
+ "background": "#002b36",
+ "corner_radius": 8,
+ "padding": 4,
+ "border": {
+ "color": "#073642",
+ "width": 1
+ },
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ }
+ },
+ "hovered_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#022e39"
+ },
+ "margin": {
+ "left": -14
+ },
+ "match_highlight": {
+ "family": "Zed Mono",
+ "color": "#268bd2",
+ "size": 14
+ },
+ "selected_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#04313c"
+ }
+ },
+ "diagnostic_header": {
+ "background": "#073642",
+ "icon_width_factor": 1.5,
+ "text_scale_factor": 0.857,
+ "border": {
+ "color": "#073642",
+ "width": 1,
+ "bottom": true,
+ "top": true
+ },
+ "code": {
+ "family": "Zed Mono",
+ "color": "#93a1a1",
+ "size": 14,
+ "margin": {
+ "left": 10
+ }
+ },
+ "message": {
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 14,
+ "weight": "bold"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ }
+ }
+ },
+ "diagnostic_path_header": {
+ "background": "#073642",
+ "text_scale_factor": 0.857,
+ "filename": {
+ "family": "Zed Mono",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "path": {
+ "family": "Zed Mono",
+ "color": "#93a1a1",
+ "size": 14,
+ "margin": {
+ "left": 12
+ }
+ }
+ },
+ "error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#dc322f",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#dc322f",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#b58900",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#b58900",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#002b36",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "syntax": {
+ "primary": {
+ "color": "#fdf6e3",
+ "weight": "normal"
+ },
+ "comment": {
+ "color": "#93a1a1",
+ "weight": "normal"
+ },
+ "punctuation": {
+ "color": "#eee8d5",
+ "weight": "normal"
+ },
+ "constant": {
+ "color": "#839496",
+ "weight": "normal"
+ },
+ "keyword": {
+ "color": "#268bd2",
+ "weight": "normal"
+ },
+ "function": {
+ "color": "#b58900",
+ "weight": "normal"
+ },
+ "type": {
+ "color": "#2aa198",
+ "weight": "normal"
+ },
+ "variant": {
+ "color": "#268bd2",
+ "weight": "normal"
+ },
+ "property": {
+ "color": "#268bd2",
+ "weight": "normal"
+ },
+ "enum": {
+ "color": "#cb4b16",
+ "weight": "normal"
+ },
+ "operator": {
+ "color": "#cb4b16",
+ "weight": "normal"
+ },
+ "string": {
+ "color": "#cb4b16",
+ "weight": "normal"
+ },
+ "number": {
+ "color": "#859900",
+ "weight": "normal"
+ },
+ "boolean": {
+ "color": "#859900",
+ "weight": "normal"
+ },
+ "predictive": {
+ "color": "#93a1a1",
+ "weight": "normal"
+ },
+ "title": {
+ "color": "#b58900",
+ "weight": "bold"
+ },
+ "emphasis": {
+ "color": "#268bd2",
+ "weight": "normal"
+ },
+ "emphasis.strong": {
+ "color": "#268bd2",
+ "weight": "bold"
+ },
+ "link_uri": {
+ "color": "#859900",
+ "weight": "normal",
+ "underline": true
+ },
+ "link_text": {
+ "color": "#cb4b16",
+ "weight": "normal",
+ "italic": true
+ }
+ }
+ },
+ "project_diagnostics": {
+ "background": "#002b36",
+ "tab_icon_spacing": 4,
+ "tab_icon_width": 13,
+ "tab_summary_spacing": 10,
+ "empty_message": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 16
+ }
+ },
+ "command_palette": {
+ "keystroke_spacing": 8,
+ "key": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#93a1a1",
+ "size": 12
+ },
+ "corner_radius": 4,
+ "background": "#002b36",
+ "border": {
+ "color": "#073642",
+ "width": 1
+ },
+ "padding": {
+ "top": 2,
+ "bottom": 2,
+ "left": 8,
+ "right": 8
+ },
+ "margin": {
+ "left": 2
+ },
+ "active": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#fdf6e3",
+ "size": 12
+ }
+ }
+ }
+ },
+ "project_panel": {
+ "padding": {
+ "left": 12,
+ "right": 12,
+ "top": 6,
+ "bottom": 6
+ },
+ "indent_width": 20,
+ "entry": {
+ "height": 24,
+ "icon_color": "#93a1a1",
+ "icon_size": 8,
+ "icon_spacing": 8,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "hover": {
+ "background": "#1b444f",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#eee8d5",
+ "size": 14
+ }
+ },
+ "active": {
+ "background": "#30525c",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#eee8d5",
+ "size": 14
+ }
+ },
+ "active_hover": {
+ "background": "#1b444f",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#fdf6e3",
+ "size": 14
+ }
+ }
+ },
+ "filename_editor": {
+ "background": "#04313c",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ }
+ }
+ },
+ "chat_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 12
+ },
+ "channel_name": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "weight": "bold",
+ "size": 14
+ },
+ "channel_name_hash": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "padding": {
+ "right": 8
+ }
+ },
+ "channel_select": {
+ "header": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 0
+ },
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#1b444f",
+ "corner_radius": 6
+ },
+ "active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#1b444f",
+ "corner_radius": 6
+ },
+ "menu": {
+ "background": "#002b36",
+ "corner_radius": 6,
+ "padding": 4,
+ "border": {
+ "color": "#002b36",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ }
+ },
+ "sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "underline": true,
+ "size": 14
+ },
+ "hovered_sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "underline": true,
+ "size": 14
+ },
+ "message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "pending_message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "input_editor": {
+ "background": "#002b36",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#839496",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "border": {
+ "color": "#073642",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 8,
+ "right": 8,
+ "top": 7
+ }
+ }
+ },
+ "contacts_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 0
+ },
+ "user_query_editor": {
+ "background": "#002b36",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#839496",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "border": {
+ "color": "#073642",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 8,
+ "right": 8,
+ "top": 4
+ },
+ "margin": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "user_query_editor_height": 32,
+ "add_contact_button": {
+ "margin": {
+ "left": 6,
+ "right": 12
+ },
+ "color": "#eee8d5",
+ "button_width": 8,
+ "icon_width": 8
+ },
+ "row_height": 28,
+ "section_icon_size": 8,
+ "header_row": {
+ "family": "Zed Mono",
+ "color": "#93a1a1",
+ "size": 14,
+ "margin": {
+ "top": 14
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#eee8d5",
+ "size": 14,
+ "background": "#446068"
+ }
+ },
+ "contact_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "background": "#446068"
+ }
+ },
+ "tree_branch": {
+ "color": "#657b83",
+ "width": 1,
+ "hover": {
+ "color": "#657b83"
+ },
+ "active": {
+ "color": "#657b83"
+ }
+ },
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "family": "Zed Mono",
+ "color": "#eee8d5",
+ "size": 14,
+ "margin": {
+ "left": 8
+ }
+ },
+ "contact_button_spacing": 8,
+ "contact_button": {
+ "background": "#1b444f",
+ "color": "#eee8d5",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#30525c"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#1b444f",
+ "color": "#93a1a1",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ },
+ "project_row": {
+ "guest_avatar_spacing": 4,
+ "height": 24,
+ "guest_avatar": {
+ "corner_radius": 8,
+ "width": 14
+ },
+ "name": {
+ "family": "Zed Mono",
+ "color": "#93a1a1",
+ "size": 14,
+ "margin": {
+ "left": 8,
+ "right": 6
+ }
+ },
+ "guests": {
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "background": "#073642",
+ "hover": {
+ "background": "#1b444f"
+ },
+ "active": {
+ "background": "#30525c"
+ }
+ },
+ "invite_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "border": {
+ "top": true,
+ "width": 1,
+ "color": "#002b36"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "hover": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 14,
+ "underline": true
+ }
+ }
+ }
+ },
+ "contact_finder": {
+ "background": "#073642",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#30525c",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#1b444f"
+ }
+ },
+ "border": {
+ "color": "#002b36",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#839496",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#002b36",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#839496",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#eee8d5",
+ "size": 14
+ },
+ "border": {
+ "color": "#073642",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ },
+ "row_height": 28,
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "padding": {
+ "left": 8
+ }
+ },
+ "contact_button": {
+ "background": "#1b444f",
+ "color": "#eee8d5",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#30525c"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#1b444f",
+ "color": "#93a1a1",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ }
+ },
+ "search": {
+ "match_background": "#1b1f6b",
+ "tab_icon_spacing": 8,
+ "tab_icon_width": 14,
+ "option_button": {
+ "family": "Zed Mono",
+ "color": "#93a1a1",
+ "size": 14,
+ "background": "#1b444f",
+ "corner_radius": 6,
+ "border": {
+ "color": "#073642",
+ "width": 1
+ },
+ "margin": {
+ "right": 4
+ },
+ "padding": {
+ "bottom": 2,
+ "left": 10,
+ "right": 10,
+ "top": 2
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#fdf6e3",
+ "size": 14,
+ "background": "#446068",
+ "border": {
+ "color": "#657b83",
+ "width": 1
+ }
+ },
+ "hover": {
+ "family": "Zed Mono",
+ "color": "#fdf6e3",
+ "size": 14,
+ "background": "#30525c",
+ "border": {
+ "color": "#657b83",
+ "width": 1
+ }
+ }
+ },
+ "editor": {
+ "background": "#002b36",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#839496",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#fdf6e3",
+ "size": 14
+ },
+ "border": {
+ "color": "#073642",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "invalid_editor": {
+ "background": "#002b36",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#839496",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#fdf6e3",
+ "size": 14
+ },
+ "border": {
+ "color": "#dc322f26",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "match_index": {
+ "family": "Zed Mono",
+ "color": "#93a1a1",
+ "size": 14,
+ "padding": 6
+ },
+ "option_button_group": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "results_status": {
+ "family": "Zed Mono",
+ "color": "#eee8d5",
+ "size": 18
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "contact_notification": {
+ "header_avatar": {
+ "height": 12,
+ "width": 12,
+ "corner_radius": 6
+ },
+ "header_message": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 12,
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "header_height": 18,
+ "body_message": {
+ "family": "Zed Sans",
+ "color": "#93a1a1",
+ "size": 12,
+ "margin": {
+ "left": 20,
+ "top": 6,
+ "bottom": 6
+ }
+ },
+ "button": {
+ "family": "Zed Sans",
+ "color": "#eee8d5",
+ "size": 12,
+ "background": "#002b36",
+ "padding": 4,
+ "corner_radius": 6,
+ "margin": {
+ "left": 6
+ },
+ "hover": {
+ "background": "#022e39"
+ }
+ },
+ "dismiss_button": {
+ "color": "#93a1a1",
+ "icon_width": 8,
+ "icon_height": 8,
+ "button_width": 8,
+ "button_height": 8,
+ "hover": {
+ "color": "#eee8d5"
+ }
+ }
+ }
+}
@@ -0,0 +1,1734 @@
+{
+ "picker": {
+ "background": "#eee8d5",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#c1c5bb",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#d7d6c8"
+ }
+ },
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#657b83",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#fdf6e3",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#657b83",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#073642",
+ "size": 14
+ },
+ "border": {
+ "color": "#d7d6c8",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "workspace": {
+ "background": "#eee8d5",
+ "joining_project_avatar": {
+ "corner_radius": 40,
+ "width": 80
+ },
+ "joining_project_message": {
+ "padding": 12,
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 18
+ },
+ "leader_border_opacity": 0.7,
+ "leader_border_width": 2,
+ "tab": {
+ "height": 32,
+ "background": "#eee8d5",
+ "icon_close": "#586e75",
+ "icon_close_active": "#002b36",
+ "icon_conflict": "#b58900",
+ "icon_dirty": "#268bd2",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "left": true,
+ "bottom": true,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "active_tab": {
+ "height": 32,
+ "background": "#fdf6e3",
+ "icon_close": "#586e75",
+ "icon_close_active": "#002b36",
+ "icon_conflict": "#b58900",
+ "icon_dirty": "#268bd2",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#002b36",
+ "size": 14
+ },
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "left": true,
+ "bottom": false,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "modal": {
+ "margin": {
+ "bottom": 52,
+ "top": 52
+ },
+ "cursor": "Arrow"
+ },
+ "sidebar_resize_handle": {
+ "background": "#c1c5bb",
+ "padding": {
+ "left": 1
+ }
+ },
+ "pane_divider": {
+ "color": "#d7d6c8",
+ "width": 1
+ },
+ "status_bar": {
+ "height": 30,
+ "item_spacing": 8,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "top": true,
+ "overlay": true
+ },
+ "cursor_position": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "auto_update_progress_message": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "auto_update_done_message": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "lsp_status": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "icon_spacing": 4,
+ "icon_width": 14,
+ "height": 18,
+ "message": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "icon_color": "#586e75",
+ "hover": {
+ "message": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 14
+ },
+ "icon_color": "#073642",
+ "background": "#d7d6c8"
+ }
+ },
+ "diagnostic_message": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ }
+ },
+ "diagnostic_summary": {
+ "height": 16,
+ "icon_width": 14,
+ "icon_spacing": 2,
+ "summary_spacing": 6,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 14
+ },
+ "icon_color_ok": "#586e75",
+ "icon_color_warning": "#b58900",
+ "icon_color_error": "#dc322f",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ }
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#b5890026",
+ "border": {
+ "color": "#b5890026",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#dc322f26",
+ "border": {
+ "color": "#dc322f26",
+ "width": 1
+ }
+ },
+ "hover": {
+ "icon_color_ok": "#073642",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ },
+ "background": "#d7d6c8"
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#b5890033",
+ "border": {
+ "color": "#b5890026",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#dc322f33",
+ "border": {
+ "color": "#dc322f26",
+ "width": 1
+ }
+ }
+ }
+ },
+ "sidebar_buttons": {
+ "group_left": {},
+ "group_right": {},
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 6,
+ "right": 6
+ },
+ "icon_size": 14,
+ "icon_color": "#586e75",
+ "hover": {
+ "icon_color": "#073642",
+ "background": "#d7d6c8"
+ },
+ "active": {
+ "icon_color": "#002b36",
+ "background": "#c1c5bb"
+ }
+ },
+ "badge": {
+ "corner_radius": 3,
+ "padding": 2,
+ "margin": {
+ "bottom": -1,
+ "right": -1
+ },
+ "border": {
+ "width": 1,
+ "color": "#eee8d5"
+ },
+ "background": "#268bd2"
+ }
+ }
+ },
+ "titlebar": {
+ "avatar_width": 18,
+ "avatar_margin": 8,
+ "height": 33,
+ "background": "#d7d6c8",
+ "padding": {
+ "left": 80,
+ "right": 6
+ },
+ "title": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 14
+ },
+ "avatar": {
+ "corner_radius": 10,
+ "border": {
+ "color": "#00000088",
+ "width": 1
+ }
+ },
+ "avatar_ribbon": {
+ "height": 3,
+ "width": 12
+ },
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "bottom": true,
+ "overlay": true
+ },
+ "sign_in_prompt": {
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1
+ },
+ "corner_radius": 6,
+ "margin": {
+ "top": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 12,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#002b36",
+ "size": 12
+ }
+ },
+ "offline_icon": {
+ "color": "#586e75",
+ "width": 16,
+ "padding": {
+ "right": 4
+ }
+ },
+ "share_icon": {
+ "corner_radius": 6,
+ "margin": {
+ "top": 3,
+ "bottom": 2,
+ "left": 6
+ },
+ "color": "#586e75",
+ "hover": {
+ "background": "#c1c5bb",
+ "color": "#586e75"
+ },
+ "active": {
+ "background": "#aab3ae",
+ "color": "#002b36"
+ },
+ "active_hover": {
+ "background": "#c1c5bb",
+ "color": "#002b36"
+ }
+ },
+ "outdated_warning": {
+ "family": "Zed Sans",
+ "color": "#b58900",
+ "size": 12,
+ "background": "#b5890026",
+ "border": {
+ "color": "#b5890026",
+ "width": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "corner_radius": 6
+ }
+ },
+ "toolbar": {
+ "height": 34,
+ "background": "#fdf6e3",
+ "border": {
+ "color": "#d7d6c8",
+ "width": 1,
+ "bottom": true
+ },
+ "item_spacing": 8,
+ "padding": {
+ "left": 16,
+ "right": 8,
+ "top": 4,
+ "bottom": 4
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Mono",
+ "color": "#586e75",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "disconnected_overlay": {
+ "family": "Zed Sans",
+ "color": "#002b36",
+ "size": 14,
+ "background": "#000000aa"
+ },
+ "notification": {
+ "margin": {
+ "top": 10
+ },
+ "background": "#eee8d5",
+ "corner_radius": 6,
+ "padding": 12,
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "notifications": {
+ "width": 380,
+ "margin": {
+ "right": 10,
+ "bottom": 10
+ }
+ }
+ },
+ "editor": {
+ "text_color": "#002b36",
+ "background": "#fdf6e3",
+ "active_line_background": "#eee8d5",
+ "code_actions_indicator": "#586e75",
+ "diff_background_deleted": "#dc322f26",
+ "diff_background_inserted": "#85990026",
+ "document_highlight_read_background": "#93a1a11f",
+ "document_highlight_write_background": "#93a1a13d",
+ "error_color": "#dc322f",
+ "gutter_background": "#fdf6e3",
+ "gutter_padding_factor": 3.5,
+ "highlighted_line_background": "#d7d6c8",
+ "line_number": "#657b83",
+ "line_number_active": "#002b36",
+ "rename_fade": 0.6,
+ "unnecessary_code_fade": 0.5,
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "guest_selections": [
+ {
+ "cursor": "#859900",
+ "selection": "#8599003d"
+ },
+ {
+ "cursor": "#d33682",
+ "selection": "#d336823d"
+ },
+ {
+ "cursor": "#cb4b16",
+ "selection": "#cb4b163d"
+ },
+ {
+ "cursor": "#6c71c4",
+ "selection": "#6c71c43d"
+ },
+ {
+ "cursor": "#2aa198",
+ "selection": "#2aa1983d"
+ },
+ {
+ "cursor": "#dc322f",
+ "selection": "#dc322f3d"
+ },
+ {
+ "cursor": "#b58900",
+ "selection": "#b589003d"
+ }
+ ],
+ "autocomplete": {
+ "background": "#fdf6e3",
+ "corner_radius": 8,
+ "padding": 4,
+ "border": {
+ "color": "#d7d6c8",
+ "width": 1
+ },
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ }
+ },
+ "hovered_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#f9f3e0"
+ },
+ "margin": {
+ "left": -14
+ },
+ "match_highlight": {
+ "family": "Zed Mono",
+ "color": "#268bd2",
+ "size": 14
+ },
+ "selected_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#f6efdc"
+ }
+ },
+ "diagnostic_header": {
+ "background": "#eee8d5",
+ "icon_width_factor": 1.5,
+ "text_scale_factor": 0.857,
+ "border": {
+ "color": "#d7d6c8",
+ "width": 1,
+ "bottom": true,
+ "top": true
+ },
+ "code": {
+ "family": "Zed Mono",
+ "color": "#586e75",
+ "size": 14,
+ "margin": {
+ "left": 10
+ }
+ },
+ "message": {
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 14,
+ "weight": "bold"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ }
+ }
+ },
+ "diagnostic_path_header": {
+ "background": "#eee8d5",
+ "text_scale_factor": 0.857,
+ "filename": {
+ "family": "Zed Mono",
+ "color": "#073642",
+ "size": 14
+ },
+ "path": {
+ "family": "Zed Mono",
+ "color": "#586e75",
+ "size": 14,
+ "margin": {
+ "left": 12
+ }
+ }
+ },
+ "error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#dc322f",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#dc322f",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#b58900",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#b58900",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "syntax": {
+ "primary": {
+ "color": "#002b36",
+ "weight": "normal"
+ },
+ "comment": {
+ "color": "#586e75",
+ "weight": "normal"
+ },
+ "punctuation": {
+ "color": "#073642",
+ "weight": "normal"
+ },
+ "constant": {
+ "color": "#657b83",
+ "weight": "normal"
+ },
+ "keyword": {
+ "color": "#268bd2",
+ "weight": "normal"
+ },
+ "function": {
+ "color": "#b58900",
+ "weight": "normal"
+ },
+ "type": {
+ "color": "#2aa198",
+ "weight": "normal"
+ },
+ "variant": {
+ "color": "#268bd2",
+ "weight": "normal"
+ },
+ "property": {
+ "color": "#268bd2",
+ "weight": "normal"
+ },
+ "enum": {
+ "color": "#cb4b16",
+ "weight": "normal"
+ },
+ "operator": {
+ "color": "#cb4b16",
+ "weight": "normal"
+ },
+ "string": {
+ "color": "#cb4b16",
+ "weight": "normal"
+ },
+ "number": {
+ "color": "#859900",
+ "weight": "normal"
+ },
+ "boolean": {
+ "color": "#859900",
+ "weight": "normal"
+ },
+ "predictive": {
+ "color": "#586e75",
+ "weight": "normal"
+ },
+ "title": {
+ "color": "#b58900",
+ "weight": "bold"
+ },
+ "emphasis": {
+ "color": "#268bd2",
+ "weight": "normal"
+ },
+ "emphasis.strong": {
+ "color": "#268bd2",
+ "weight": "bold"
+ },
+ "link_uri": {
+ "color": "#859900",
+ "weight": "normal",
+ "underline": true
+ },
+ "link_text": {
+ "color": "#cb4b16",
+ "weight": "normal",
+ "italic": true
+ }
+ }
+ },
+ "project_diagnostics": {
+ "background": "#fdf6e3",
+ "tab_icon_spacing": 4,
+ "tab_icon_width": 13,
+ "tab_summary_spacing": 10,
+ "empty_message": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 16
+ }
+ },
+ "command_palette": {
+ "keystroke_spacing": 8,
+ "key": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#586e75",
+ "size": 12
+ },
+ "corner_radius": 4,
+ "background": "#fdf6e3",
+ "border": {
+ "color": "#d7d6c8",
+ "width": 1
+ },
+ "padding": {
+ "top": 2,
+ "bottom": 2,
+ "left": 8,
+ "right": 8
+ },
+ "margin": {
+ "left": 2
+ },
+ "active": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#002b36",
+ "size": 12
+ }
+ }
+ }
+ },
+ "project_panel": {
+ "padding": {
+ "left": 12,
+ "right": 12,
+ "top": 6,
+ "bottom": 6
+ },
+ "indent_width": 20,
+ "entry": {
+ "height": 24,
+ "icon_color": "#586e75",
+ "icon_size": 8,
+ "icon_spacing": 8,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#586e75",
+ "size": 14
+ },
+ "hover": {
+ "background": "#d7d6c8",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#073642",
+ "size": 14
+ }
+ },
+ "active": {
+ "background": "#c1c5bb",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#073642",
+ "size": 14
+ }
+ },
+ "active_hover": {
+ "background": "#d7d6c8",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#002b36",
+ "size": 14
+ }
+ }
+ },
+ "filename_editor": {
+ "background": "#f6efdc",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#073642",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ }
+ }
+ },
+ "chat_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 12
+ },
+ "channel_name": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "weight": "bold",
+ "size": 14
+ },
+ "channel_name_hash": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "padding": {
+ "right": 8
+ }
+ },
+ "channel_select": {
+ "header": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 0
+ },
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#d7d6c8",
+ "corner_radius": 6
+ },
+ "active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#d7d6c8",
+ "corner_radius": 6
+ },
+ "menu": {
+ "background": "#fdf6e3",
+ "corner_radius": 6,
+ "padding": 4,
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ }
+ },
+ "sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "underline": true,
+ "size": 14
+ },
+ "hovered_sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "underline": true,
+ "size": 14
+ },
+ "message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "pending_message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "input_editor": {
+ "background": "#fdf6e3",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#073642",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#657b83",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "border": {
+ "color": "#d7d6c8",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 8,
+ "right": 8,
+ "top": 7
+ }
+ }
+ },
+ "contacts_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 0
+ },
+ "user_query_editor": {
+ "background": "#fdf6e3",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#073642",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#657b83",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "border": {
+ "color": "#d7d6c8",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 8,
+ "right": 8,
+ "top": 4
+ },
+ "margin": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "user_query_editor_height": 32,
+ "add_contact_button": {
+ "margin": {
+ "left": 6,
+ "right": 12
+ },
+ "color": "#073642",
+ "button_width": 8,
+ "icon_width": 8
+ },
+ "row_height": 28,
+ "section_icon_size": 8,
+ "header_row": {
+ "family": "Zed Mono",
+ "color": "#586e75",
+ "size": 14,
+ "margin": {
+ "top": 14
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#073642",
+ "size": 14,
+ "background": "#aab3ae"
+ }
+ },
+ "contact_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "background": "#aab3ae"
+ }
+ },
+ "tree_branch": {
+ "color": "#657b83",
+ "width": 1,
+ "hover": {
+ "color": "#657b83"
+ },
+ "active": {
+ "color": "#657b83"
+ }
+ },
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "family": "Zed Mono",
+ "color": "#073642",
+ "size": 14,
+ "margin": {
+ "left": 8
+ }
+ },
+ "contact_button_spacing": 8,
+ "contact_button": {
+ "background": "#d7d6c8",
+ "color": "#073642",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#c1c5bb"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#d7d6c8",
+ "color": "#586e75",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ },
+ "project_row": {
+ "guest_avatar_spacing": 4,
+ "height": 24,
+ "guest_avatar": {
+ "corner_radius": 8,
+ "width": 14
+ },
+ "name": {
+ "family": "Zed Mono",
+ "color": "#586e75",
+ "size": 14,
+ "margin": {
+ "left": 8,
+ "right": 6
+ }
+ },
+ "guests": {
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "background": "#eee8d5",
+ "hover": {
+ "background": "#d7d6c8"
+ },
+ "active": {
+ "background": "#c1c5bb"
+ }
+ },
+ "invite_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "border": {
+ "top": true,
+ "width": 1,
+ "color": "#c1c5bb"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 14
+ },
+ "hover": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 14,
+ "underline": true
+ }
+ }
+ }
+ },
+ "contact_finder": {
+ "background": "#eee8d5",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#268bd2",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#c1c5bb",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#d7d6c8"
+ }
+ },
+ "border": {
+ "color": "#c1c5bb",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#657b83",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#fdf6e3",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#657b83",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#073642",
+ "size": 14
+ },
+ "border": {
+ "color": "#d7d6c8",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ },
+ "row_height": 28,
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "padding": {
+ "left": 8
+ }
+ },
+ "contact_button": {
+ "background": "#d7d6c8",
+ "color": "#073642",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#c1c5bb"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#d7d6c8",
+ "color": "#586e75",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ }
+ },
+ "search": {
+ "match_background": "#bcc0f6",
+ "tab_icon_spacing": 8,
+ "tab_icon_width": 14,
+ "option_button": {
+ "family": "Zed Mono",
+ "color": "#586e75",
+ "size": 14,
+ "background": "#d7d6c8",
+ "corner_radius": 6,
+ "border": {
+ "color": "#d7d6c8",
+ "width": 1
+ },
+ "margin": {
+ "right": 4
+ },
+ "padding": {
+ "bottom": 2,
+ "left": 10,
+ "right": 10,
+ "top": 2
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#002b36",
+ "size": 14,
+ "background": "#aab3ae",
+ "border": {
+ "color": "#eee8d5",
+ "width": 1
+ }
+ },
+ "hover": {
+ "family": "Zed Mono",
+ "color": "#002b36",
+ "size": 14,
+ "background": "#c1c5bb",
+ "border": {
+ "color": "#eee8d5",
+ "width": 1
+ }
+ }
+ },
+ "editor": {
+ "background": "#fdf6e3",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#657b83",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#002b36",
+ "size": 14
+ },
+ "border": {
+ "color": "#d7d6c8",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "invalid_editor": {
+ "background": "#fdf6e3",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#657b83",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#268bd2",
+ "selection": "#268bd23d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#002b36",
+ "size": 14
+ },
+ "border": {
+ "color": "#dc322f26",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "match_index": {
+ "family": "Zed Mono",
+ "color": "#586e75",
+ "size": 14,
+ "padding": 6
+ },
+ "option_button_group": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "results_status": {
+ "family": "Zed Mono",
+ "color": "#073642",
+ "size": 18
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "contact_notification": {
+ "header_avatar": {
+ "height": 12,
+ "width": 12,
+ "corner_radius": 6
+ },
+ "header_message": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 12,
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "header_height": 18,
+ "body_message": {
+ "family": "Zed Sans",
+ "color": "#586e75",
+ "size": 12,
+ "margin": {
+ "left": 20,
+ "top": 6,
+ "bottom": 6
+ }
+ },
+ "button": {
+ "family": "Zed Sans",
+ "color": "#073642",
+ "size": 12,
+ "background": "#fdf6e3",
+ "padding": 4,
+ "corner_radius": 6,
+ "margin": {
+ "left": 6
+ },
+ "hover": {
+ "background": "#f9f3e0"
+ }
+ },
+ "dismiss_button": {
+ "color": "#586e75",
+ "icon_width": 8,
+ "icon_height": 8,
+ "button_width": 8,
+ "button_height": 8,
+ "hover": {
+ "color": "#073642"
+ }
+ }
+ }
+}
@@ -0,0 +1,1734 @@
+{
+ "picker": {
+ "background": "#293256",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#444c6f",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#363f62"
+ }
+ },
+ "border": {
+ "color": "#202746",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#898ea4",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#202746",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#898ea4",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "border": {
+ "color": "#293256",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "workspace": {
+ "background": "#293256",
+ "joining_project_avatar": {
+ "corner_radius": 40,
+ "width": 80
+ },
+ "joining_project_message": {
+ "padding": 12,
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 18
+ },
+ "leader_border_opacity": 0.7,
+ "leader_border_width": 2,
+ "tab": {
+ "height": 32,
+ "background": "#293256",
+ "icon_close": "#979db4",
+ "icon_close_active": "#f5f7ff",
+ "icon_conflict": "#c08b30",
+ "icon_dirty": "#3d8fd1",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "left": true,
+ "bottom": true,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "active_tab": {
+ "height": 32,
+ "background": "#202746",
+ "icon_close": "#979db4",
+ "icon_close_active": "#f5f7ff",
+ "icon_conflict": "#c08b30",
+ "icon_dirty": "#3d8fd1",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#f5f7ff",
+ "size": 14
+ },
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "left": true,
+ "bottom": false,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "modal": {
+ "margin": {
+ "bottom": 52,
+ "top": 52
+ },
+ "cursor": "Arrow"
+ },
+ "sidebar_resize_handle": {
+ "background": "#202746",
+ "padding": {
+ "left": 1
+ }
+ },
+ "pane_divider": {
+ "color": "#293256",
+ "width": 1
+ },
+ "status_bar": {
+ "height": 30,
+ "item_spacing": 8,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "top": true,
+ "overlay": true
+ },
+ "cursor_position": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "auto_update_progress_message": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "auto_update_done_message": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "lsp_status": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "icon_spacing": 4,
+ "icon_width": 14,
+ "height": 18,
+ "message": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "icon_color": "#979db4",
+ "hover": {
+ "message": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "icon_color": "#dfe2f1",
+ "background": "#363f62"
+ }
+ },
+ "diagnostic_message": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ }
+ },
+ "diagnostic_summary": {
+ "height": 16,
+ "icon_width": 14,
+ "icon_spacing": 2,
+ "summary_spacing": 6,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "icon_color_ok": "#979db4",
+ "icon_color_warning": "#c08b30",
+ "icon_color_error": "#c94922",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ }
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#c08b3026",
+ "border": {
+ "color": "#c08b3026",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#c9492226",
+ "border": {
+ "color": "#c9492226",
+ "width": 1
+ }
+ },
+ "hover": {
+ "icon_color_ok": "#dfe2f1",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ },
+ "background": "#363f62"
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#c08b3033",
+ "border": {
+ "color": "#c08b3026",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#c9492233",
+ "border": {
+ "color": "#c9492226",
+ "width": 1
+ }
+ }
+ }
+ },
+ "sidebar_buttons": {
+ "group_left": {},
+ "group_right": {},
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 6,
+ "right": 6
+ },
+ "icon_size": 14,
+ "icon_color": "#979db4",
+ "hover": {
+ "icon_color": "#dfe2f1",
+ "background": "#363f62"
+ },
+ "active": {
+ "icon_color": "#f5f7ff",
+ "background": "#444c6f"
+ }
+ },
+ "badge": {
+ "corner_radius": 3,
+ "padding": 2,
+ "margin": {
+ "bottom": -1,
+ "right": -1
+ },
+ "border": {
+ "width": 1,
+ "color": "#293256"
+ },
+ "background": "#3d8fd1"
+ }
+ }
+ },
+ "titlebar": {
+ "avatar_width": 18,
+ "avatar_margin": 8,
+ "height": 33,
+ "background": "#363f62",
+ "padding": {
+ "left": 80,
+ "right": 6
+ },
+ "title": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "avatar": {
+ "corner_radius": 10,
+ "border": {
+ "color": "#00000088",
+ "width": 1
+ }
+ },
+ "avatar_ribbon": {
+ "height": 3,
+ "width": 12
+ },
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "bottom": true,
+ "overlay": true
+ },
+ "sign_in_prompt": {
+ "border": {
+ "color": "#202746",
+ "width": 1
+ },
+ "corner_radius": 6,
+ "margin": {
+ "top": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 12,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#f5f7ff",
+ "size": 12
+ }
+ },
+ "offline_icon": {
+ "color": "#979db4",
+ "width": 16,
+ "padding": {
+ "right": 4
+ }
+ },
+ "share_icon": {
+ "corner_radius": 6,
+ "margin": {
+ "top": 3,
+ "bottom": 2,
+ "left": 6
+ },
+ "color": "#979db4",
+ "hover": {
+ "background": "#444c6f",
+ "color": "#979db4"
+ },
+ "active": {
+ "background": "#51597b",
+ "color": "#f5f7ff"
+ },
+ "active_hover": {
+ "background": "#444c6f",
+ "color": "#f5f7ff"
+ }
+ },
+ "outdated_warning": {
+ "family": "Zed Sans",
+ "color": "#c08b30",
+ "size": 12,
+ "background": "#c08b3026",
+ "border": {
+ "color": "#c08b3026",
+ "width": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "corner_radius": 6
+ }
+ },
+ "toolbar": {
+ "height": 34,
+ "background": "#202746",
+ "border": {
+ "color": "#293256",
+ "width": 1,
+ "bottom": true
+ },
+ "item_spacing": 8,
+ "padding": {
+ "left": 16,
+ "right": 8,
+ "top": 4,
+ "bottom": 4
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Mono",
+ "color": "#979db4",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "disconnected_overlay": {
+ "family": "Zed Sans",
+ "color": "#f5f7ff",
+ "size": 14,
+ "background": "#000000aa"
+ },
+ "notification": {
+ "margin": {
+ "top": 10
+ },
+ "background": "#293256",
+ "corner_radius": 6,
+ "padding": 12,
+ "border": {
+ "color": "#202746",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "notifications": {
+ "width": 380,
+ "margin": {
+ "right": 10,
+ "bottom": 10
+ }
+ }
+ },
+ "editor": {
+ "text_color": "#f5f7ff",
+ "background": "#202746",
+ "active_line_background": "#293256",
+ "code_actions_indicator": "#979db4",
+ "diff_background_deleted": "#c9492226",
+ "diff_background_inserted": "#ac973926",
+ "document_highlight_read_background": "#5e66873d",
+ "document_highlight_write_background": "#5e66877a",
+ "error_color": "#c94922",
+ "gutter_background": "#202746",
+ "gutter_padding_factor": 3.5,
+ "highlighted_line_background": "#363f62",
+ "line_number": "#898ea4",
+ "line_number_active": "#f5f7ff",
+ "rename_fade": 0.6,
+ "unnecessary_code_fade": 0.5,
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "guest_selections": [
+ {
+ "cursor": "#ac9739",
+ "selection": "#ac97393d"
+ },
+ {
+ "cursor": "#9c637a",
+ "selection": "#9c637a3d"
+ },
+ {
+ "cursor": "#c76b29",
+ "selection": "#c76b293d"
+ },
+ {
+ "cursor": "#6679cc",
+ "selection": "#6679cc3d"
+ },
+ {
+ "cursor": "#22a2c9",
+ "selection": "#22a2c93d"
+ },
+ {
+ "cursor": "#c94922",
+ "selection": "#c949223d"
+ },
+ {
+ "cursor": "#c08b30",
+ "selection": "#c08b303d"
+ }
+ ],
+ "autocomplete": {
+ "background": "#202746",
+ "corner_radius": 8,
+ "padding": 4,
+ "border": {
+ "color": "#293256",
+ "width": 1
+ },
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ }
+ },
+ "hovered_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#222a4a"
+ },
+ "margin": {
+ "left": -14
+ },
+ "match_highlight": {
+ "family": "Zed Mono",
+ "color": "#3d8fd1",
+ "size": 14
+ },
+ "selected_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#252d4e"
+ }
+ },
+ "diagnostic_header": {
+ "background": "#293256",
+ "icon_width_factor": 1.5,
+ "text_scale_factor": 0.857,
+ "border": {
+ "color": "#293256",
+ "width": 1,
+ "bottom": true,
+ "top": true
+ },
+ "code": {
+ "family": "Zed Mono",
+ "color": "#979db4",
+ "size": 14,
+ "margin": {
+ "left": 10
+ }
+ },
+ "message": {
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 14,
+ "weight": "bold"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ }
+ }
+ },
+ "diagnostic_path_header": {
+ "background": "#293256",
+ "text_scale_factor": 0.857,
+ "filename": {
+ "family": "Zed Mono",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "path": {
+ "family": "Zed Mono",
+ "color": "#979db4",
+ "size": 14,
+ "margin": {
+ "left": 12
+ }
+ }
+ },
+ "error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#c94922",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#c94922",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#c08b30",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#c08b30",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#202746",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "syntax": {
+ "primary": {
+ "color": "#f5f7ff",
+ "weight": "normal"
+ },
+ "comment": {
+ "color": "#979db4",
+ "weight": "normal"
+ },
+ "punctuation": {
+ "color": "#dfe2f1",
+ "weight": "normal"
+ },
+ "constant": {
+ "color": "#898ea4",
+ "weight": "normal"
+ },
+ "keyword": {
+ "color": "#3d8fd1",
+ "weight": "normal"
+ },
+ "function": {
+ "color": "#c08b30",
+ "weight": "normal"
+ },
+ "type": {
+ "color": "#22a2c9",
+ "weight": "normal"
+ },
+ "variant": {
+ "color": "#3d8fd1",
+ "weight": "normal"
+ },
+ "property": {
+ "color": "#3d8fd1",
+ "weight": "normal"
+ },
+ "enum": {
+ "color": "#c76b29",
+ "weight": "normal"
+ },
+ "operator": {
+ "color": "#c76b29",
+ "weight": "normal"
+ },
+ "string": {
+ "color": "#c76b29",
+ "weight": "normal"
+ },
+ "number": {
+ "color": "#ac9739",
+ "weight": "normal"
+ },
+ "boolean": {
+ "color": "#ac9739",
+ "weight": "normal"
+ },
+ "predictive": {
+ "color": "#979db4",
+ "weight": "normal"
+ },
+ "title": {
+ "color": "#c08b30",
+ "weight": "bold"
+ },
+ "emphasis": {
+ "color": "#3d8fd1",
+ "weight": "normal"
+ },
+ "emphasis.strong": {
+ "color": "#3d8fd1",
+ "weight": "bold"
+ },
+ "link_uri": {
+ "color": "#ac9739",
+ "weight": "normal",
+ "underline": true
+ },
+ "link_text": {
+ "color": "#c76b29",
+ "weight": "normal",
+ "italic": true
+ }
+ }
+ },
+ "project_diagnostics": {
+ "background": "#202746",
+ "tab_icon_spacing": 4,
+ "tab_icon_width": 13,
+ "tab_summary_spacing": 10,
+ "empty_message": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 16
+ }
+ },
+ "command_palette": {
+ "keystroke_spacing": 8,
+ "key": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#979db4",
+ "size": 12
+ },
+ "corner_radius": 4,
+ "background": "#202746",
+ "border": {
+ "color": "#293256",
+ "width": 1
+ },
+ "padding": {
+ "top": 2,
+ "bottom": 2,
+ "left": 8,
+ "right": 8
+ },
+ "margin": {
+ "left": 2
+ },
+ "active": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#f5f7ff",
+ "size": 12
+ }
+ }
+ }
+ },
+ "project_panel": {
+ "padding": {
+ "left": 12,
+ "right": 12,
+ "top": 6,
+ "bottom": 6
+ },
+ "indent_width": 20,
+ "entry": {
+ "height": 24,
+ "icon_color": "#979db4",
+ "icon_size": 8,
+ "icon_spacing": 8,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#979db4",
+ "size": 14
+ },
+ "hover": {
+ "background": "#363f62",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#dfe2f1",
+ "size": 14
+ }
+ },
+ "active": {
+ "background": "#444c6f",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#dfe2f1",
+ "size": 14
+ }
+ },
+ "active_hover": {
+ "background": "#363f62",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#f5f7ff",
+ "size": 14
+ }
+ }
+ },
+ "filename_editor": {
+ "background": "#252d4e",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ }
+ }
+ },
+ "chat_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 12
+ },
+ "channel_name": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "weight": "bold",
+ "size": 14
+ },
+ "channel_name_hash": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "padding": {
+ "right": 8
+ }
+ },
+ "channel_select": {
+ "header": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 0
+ },
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#363f62",
+ "corner_radius": 6
+ },
+ "active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#363f62",
+ "corner_radius": 6
+ },
+ "menu": {
+ "background": "#202746",
+ "corner_radius": 6,
+ "padding": 4,
+ "border": {
+ "color": "#202746",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ }
+ },
+ "sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "underline": true,
+ "size": 14
+ },
+ "hovered_sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "underline": true,
+ "size": 14
+ },
+ "message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "pending_message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "input_editor": {
+ "background": "#202746",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#898ea4",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "border": {
+ "color": "#293256",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 8,
+ "right": 8,
+ "top": 7
+ }
+ }
+ },
+ "contacts_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 0
+ },
+ "user_query_editor": {
+ "background": "#202746",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#898ea4",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "border": {
+ "color": "#293256",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 8,
+ "right": 8,
+ "top": 4
+ },
+ "margin": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "user_query_editor_height": 32,
+ "add_contact_button": {
+ "margin": {
+ "left": 6,
+ "right": 12
+ },
+ "color": "#dfe2f1",
+ "button_width": 8,
+ "icon_width": 8
+ },
+ "row_height": 28,
+ "section_icon_size": 8,
+ "header_row": {
+ "family": "Zed Mono",
+ "color": "#979db4",
+ "size": 14,
+ "margin": {
+ "top": 14
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#dfe2f1",
+ "size": 14,
+ "background": "#51597b"
+ }
+ },
+ "contact_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "background": "#51597b"
+ }
+ },
+ "tree_branch": {
+ "color": "#6b7394",
+ "width": 1,
+ "hover": {
+ "color": "#6b7394"
+ },
+ "active": {
+ "color": "#6b7394"
+ }
+ },
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "family": "Zed Mono",
+ "color": "#dfe2f1",
+ "size": 14,
+ "margin": {
+ "left": 8
+ }
+ },
+ "contact_button_spacing": 8,
+ "contact_button": {
+ "background": "#363f62",
+ "color": "#dfe2f1",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#444c6f"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#363f62",
+ "color": "#979db4",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ },
+ "project_row": {
+ "guest_avatar_spacing": 4,
+ "height": 24,
+ "guest_avatar": {
+ "corner_radius": 8,
+ "width": 14
+ },
+ "name": {
+ "family": "Zed Mono",
+ "color": "#979db4",
+ "size": 14,
+ "margin": {
+ "left": 8,
+ "right": 6
+ }
+ },
+ "guests": {
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "background": "#293256",
+ "hover": {
+ "background": "#363f62"
+ },
+ "active": {
+ "background": "#444c6f"
+ }
+ },
+ "invite_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "border": {
+ "top": true,
+ "width": 1,
+ "color": "#202746"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "hover": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 14,
+ "underline": true
+ }
+ }
+ }
+ },
+ "contact_finder": {
+ "background": "#293256",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#444c6f",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#363f62"
+ }
+ },
+ "border": {
+ "color": "#202746",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#898ea4",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#202746",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#898ea4",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#dfe2f1",
+ "size": 14
+ },
+ "border": {
+ "color": "#293256",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000003d",
+ "offset": [
+ 0,
+ 2
+ ]
+ },
+ "row_height": 28,
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "padding": {
+ "left": 8
+ }
+ },
+ "contact_button": {
+ "background": "#363f62",
+ "color": "#dfe2f1",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#444c6f"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#363f62",
+ "color": "#979db4",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ }
+ },
+ "search": {
+ "match_background": "#1a2a6d",
+ "tab_icon_spacing": 8,
+ "tab_icon_width": 14,
+ "option_button": {
+ "family": "Zed Mono",
+ "color": "#979db4",
+ "size": 14,
+ "background": "#363f62",
+ "corner_radius": 6,
+ "border": {
+ "color": "#293256",
+ "width": 1
+ },
+ "margin": {
+ "right": 4
+ },
+ "padding": {
+ "bottom": 2,
+ "left": 10,
+ "right": 10,
+ "top": 2
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#f5f7ff",
+ "size": 14,
+ "background": "#51597b",
+ "border": {
+ "color": "#6b7394",
+ "width": 1
+ }
+ },
+ "hover": {
+ "family": "Zed Mono",
+ "color": "#f5f7ff",
+ "size": 14,
+ "background": "#444c6f",
+ "border": {
+ "color": "#6b7394",
+ "width": 1
+ }
+ }
+ },
+ "editor": {
+ "background": "#202746",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#898ea4",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#f5f7ff",
+ "size": 14
+ },
+ "border": {
+ "color": "#293256",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "invalid_editor": {
+ "background": "#202746",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#898ea4",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#f5f7ff",
+ "size": 14
+ },
+ "border": {
+ "color": "#c9492226",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "match_index": {
+ "family": "Zed Mono",
+ "color": "#979db4",
+ "size": 14,
+ "padding": 6
+ },
+ "option_button_group": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "results_status": {
+ "family": "Zed Mono",
+ "color": "#dfe2f1",
+ "size": 18
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "contact_notification": {
+ "header_avatar": {
+ "height": 12,
+ "width": 12,
+ "corner_radius": 6
+ },
+ "header_message": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 12,
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "header_height": 18,
+ "body_message": {
+ "family": "Zed Sans",
+ "color": "#979db4",
+ "size": 12,
+ "margin": {
+ "left": 20,
+ "top": 6,
+ "bottom": 6
+ }
+ },
+ "button": {
+ "family": "Zed Sans",
+ "color": "#dfe2f1",
+ "size": 12,
+ "background": "#202746",
+ "padding": 4,
+ "corner_radius": 6,
+ "margin": {
+ "left": 6
+ },
+ "hover": {
+ "background": "#222a4a"
+ }
+ },
+ "dismiss_button": {
+ "color": "#979db4",
+ "icon_width": 8,
+ "icon_height": 8,
+ "button_width": 8,
+ "button_height": 8,
+ "hover": {
+ "color": "#dfe2f1"
+ }
+ }
+ }
+}
@@ -0,0 +1,1734 @@
+{
+ "picker": {
+ "background": "#dfe2f1",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#bbc0d3",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#cdd1e2"
+ }
+ },
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#6b7394",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#f5f7ff",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#6b7394",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#293256",
+ "size": 14
+ },
+ "border": {
+ "color": "#cdd1e2",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "workspace": {
+ "background": "#dfe2f1",
+ "joining_project_avatar": {
+ "corner_radius": 40,
+ "width": 80
+ },
+ "joining_project_message": {
+ "padding": 12,
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 18
+ },
+ "leader_border_opacity": 0.7,
+ "leader_border_width": 2,
+ "tab": {
+ "height": 32,
+ "background": "#dfe2f1",
+ "icon_close": "#5e6687",
+ "icon_close_active": "#202746",
+ "icon_conflict": "#c08b30",
+ "icon_dirty": "#3d8fd1",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "left": true,
+ "bottom": true,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "active_tab": {
+ "height": 32,
+ "background": "#f5f7ff",
+ "icon_close": "#5e6687",
+ "icon_close_active": "#202746",
+ "icon_conflict": "#c08b30",
+ "icon_dirty": "#3d8fd1",
+ "icon_width": 8,
+ "spacing": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#202746",
+ "size": 14
+ },
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "left": true,
+ "bottom": false,
+ "overlay": true
+ },
+ "padding": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "modal": {
+ "margin": {
+ "bottom": 52,
+ "top": 52
+ },
+ "cursor": "Arrow"
+ },
+ "sidebar_resize_handle": {
+ "background": "#bbc0d3",
+ "padding": {
+ "left": 1
+ }
+ },
+ "pane_divider": {
+ "color": "#cdd1e2",
+ "width": 1
+ },
+ "status_bar": {
+ "height": 30,
+ "item_spacing": 8,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "top": true,
+ "overlay": true
+ },
+ "cursor_position": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "auto_update_progress_message": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "auto_update_done_message": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "lsp_status": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "icon_spacing": 4,
+ "icon_width": 14,
+ "height": 18,
+ "message": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "icon_color": "#5e6687",
+ "hover": {
+ "message": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 14
+ },
+ "icon_color": "#293256",
+ "background": "#cdd1e2"
+ }
+ },
+ "diagnostic_message": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ }
+ },
+ "diagnostic_summary": {
+ "height": 16,
+ "icon_width": 14,
+ "icon_spacing": 2,
+ "summary_spacing": 6,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 14
+ },
+ "icon_color_ok": "#5e6687",
+ "icon_color_warning": "#c08b30",
+ "icon_color_error": "#c94922",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ }
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#c08b3026",
+ "border": {
+ "color": "#c08b3026",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#c9492226",
+ "border": {
+ "color": "#c9492226",
+ "width": 1
+ }
+ },
+ "hover": {
+ "icon_color_ok": "#293256",
+ "container_ok": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 7,
+ "right": 7
+ },
+ "background": "#cdd1e2"
+ },
+ "container_warning": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#c08b3033",
+ "border": {
+ "color": "#c08b3026",
+ "width": 1
+ }
+ },
+ "container_error": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 1,
+ "bottom": 1,
+ "left": 6,
+ "right": 6
+ },
+ "background": "#c9492233",
+ "border": {
+ "color": "#c9492226",
+ "width": 1
+ }
+ }
+ }
+ },
+ "sidebar_buttons": {
+ "group_left": {},
+ "group_right": {},
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 6,
+ "right": 6
+ },
+ "icon_size": 14,
+ "icon_color": "#5e6687",
+ "hover": {
+ "icon_color": "#293256",
+ "background": "#cdd1e2"
+ },
+ "active": {
+ "icon_color": "#202746",
+ "background": "#bbc0d3"
+ }
+ },
+ "badge": {
+ "corner_radius": 3,
+ "padding": 2,
+ "margin": {
+ "bottom": -1,
+ "right": -1
+ },
+ "border": {
+ "width": 1,
+ "color": "#dfe2f1"
+ },
+ "background": "#3d8fd1"
+ }
+ }
+ },
+ "titlebar": {
+ "avatar_width": 18,
+ "avatar_margin": 8,
+ "height": 33,
+ "background": "#cdd1e2",
+ "padding": {
+ "left": 80,
+ "right": 6
+ },
+ "title": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 14
+ },
+ "avatar": {
+ "corner_radius": 10,
+ "border": {
+ "color": "#00000088",
+ "width": 1
+ }
+ },
+ "avatar_ribbon": {
+ "height": 3,
+ "width": 12
+ },
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "bottom": true,
+ "overlay": true
+ },
+ "sign_in_prompt": {
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1
+ },
+ "corner_radius": 6,
+ "margin": {
+ "top": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 12,
+ "hover": {
+ "family": "Zed Sans",
+ "color": "#202746",
+ "size": 12
+ }
+ },
+ "offline_icon": {
+ "color": "#5e6687",
+ "width": 16,
+ "padding": {
+ "right": 4
+ }
+ },
+ "share_icon": {
+ "corner_radius": 6,
+ "margin": {
+ "top": 3,
+ "bottom": 2,
+ "left": 6
+ },
+ "color": "#5e6687",
+ "hover": {
+ "background": "#bbc0d3",
+ "color": "#5e6687"
+ },
+ "active": {
+ "background": "#a9aec3",
+ "color": "#202746"
+ },
+ "active_hover": {
+ "background": "#bbc0d3",
+ "color": "#202746"
+ }
+ },
+ "outdated_warning": {
+ "family": "Zed Sans",
+ "color": "#c08b30",
+ "size": 12,
+ "background": "#c08b3026",
+ "border": {
+ "color": "#c08b3026",
+ "width": 1
+ },
+ "padding": {
+ "left": 6,
+ "right": 6
+ },
+ "corner_radius": 6
+ }
+ },
+ "toolbar": {
+ "height": 34,
+ "background": "#f5f7ff",
+ "border": {
+ "color": "#cdd1e2",
+ "width": 1,
+ "bottom": true
+ },
+ "item_spacing": 8,
+ "padding": {
+ "left": 16,
+ "right": 8,
+ "top": 4,
+ "bottom": 4
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Mono",
+ "color": "#5e6687",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "disconnected_overlay": {
+ "family": "Zed Sans",
+ "color": "#202746",
+ "size": 14,
+ "background": "#000000aa"
+ },
+ "notification": {
+ "margin": {
+ "top": 10
+ },
+ "background": "#dfe2f1",
+ "corner_radius": 6,
+ "padding": 12,
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ },
+ "notifications": {
+ "width": 380,
+ "margin": {
+ "right": 10,
+ "bottom": 10
+ }
+ }
+ },
+ "editor": {
+ "text_color": "#202746",
+ "background": "#f5f7ff",
+ "active_line_background": "#dfe2f1",
+ "code_actions_indicator": "#5e6687",
+ "diff_background_deleted": "#c9492226",
+ "diff_background_inserted": "#ac973926",
+ "document_highlight_read_background": "#979db41f",
+ "document_highlight_write_background": "#979db43d",
+ "error_color": "#c94922",
+ "gutter_background": "#f5f7ff",
+ "gutter_padding_factor": 3.5,
+ "highlighted_line_background": "#cdd1e2",
+ "line_number": "#6b7394",
+ "line_number_active": "#202746",
+ "rename_fade": 0.6,
+ "unnecessary_code_fade": 0.5,
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "guest_selections": [
+ {
+ "cursor": "#ac9739",
+ "selection": "#ac97393d"
+ },
+ {
+ "cursor": "#9c637a",
+ "selection": "#9c637a3d"
+ },
+ {
+ "cursor": "#c76b29",
+ "selection": "#c76b293d"
+ },
+ {
+ "cursor": "#6679cc",
+ "selection": "#6679cc3d"
+ },
+ {
+ "cursor": "#22a2c9",
+ "selection": "#22a2c93d"
+ },
+ {
+ "cursor": "#c94922",
+ "selection": "#c949223d"
+ },
+ {
+ "cursor": "#c08b30",
+ "selection": "#c08b303d"
+ }
+ ],
+ "autocomplete": {
+ "background": "#f5f7ff",
+ "corner_radius": 8,
+ "padding": 4,
+ "border": {
+ "color": "#cdd1e2",
+ "width": 1
+ },
+ "item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ }
+ },
+ "hovered_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#f0f2fc"
+ },
+ "margin": {
+ "left": -14
+ },
+ "match_highlight": {
+ "family": "Zed Mono",
+ "color": "#3d8fd1",
+ "size": 14
+ },
+ "selected_item": {
+ "corner_radius": 6,
+ "padding": {
+ "bottom": 2,
+ "left": 6,
+ "right": 6,
+ "top": 2
+ },
+ "background": "#eaedf8"
+ }
+ },
+ "diagnostic_header": {
+ "background": "#dfe2f1",
+ "icon_width_factor": 1.5,
+ "text_scale_factor": 0.857,
+ "border": {
+ "color": "#cdd1e2",
+ "width": 1,
+ "bottom": true,
+ "top": true
+ },
+ "code": {
+ "family": "Zed Mono",
+ "color": "#5e6687",
+ "size": 14,
+ "margin": {
+ "left": 10
+ }
+ },
+ "message": {
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 14,
+ "weight": "bold"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ }
+ }
+ },
+ "diagnostic_path_header": {
+ "background": "#dfe2f1",
+ "text_scale_factor": 0.857,
+ "filename": {
+ "family": "Zed Mono",
+ "color": "#293256",
+ "size": 14
+ },
+ "path": {
+ "family": "Zed Mono",
+ "color": "#5e6687",
+ "size": 14,
+ "margin": {
+ "left": 12
+ }
+ }
+ },
+ "error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#c94922",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#c94922",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#c08b30",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#c08b30",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_error_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_hint_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_information_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "invalid_warning_diagnostic": {
+ "text_scale_factor": 0.857,
+ "header": {
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1,
+ "top": true
+ }
+ },
+ "message": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "weight": "bold"
+ }
+ }
+ },
+ "syntax": {
+ "primary": {
+ "color": "#202746",
+ "weight": "normal"
+ },
+ "comment": {
+ "color": "#5e6687",
+ "weight": "normal"
+ },
+ "punctuation": {
+ "color": "#293256",
+ "weight": "normal"
+ },
+ "constant": {
+ "color": "#6b7394",
+ "weight": "normal"
+ },
+ "keyword": {
+ "color": "#3d8fd1",
+ "weight": "normal"
+ },
+ "function": {
+ "color": "#c08b30",
+ "weight": "normal"
+ },
+ "type": {
+ "color": "#22a2c9",
+ "weight": "normal"
+ },
+ "variant": {
+ "color": "#3d8fd1",
+ "weight": "normal"
+ },
+ "property": {
+ "color": "#3d8fd1",
+ "weight": "normal"
+ },
+ "enum": {
+ "color": "#c76b29",
+ "weight": "normal"
+ },
+ "operator": {
+ "color": "#c76b29",
+ "weight": "normal"
+ },
+ "string": {
+ "color": "#c76b29",
+ "weight": "normal"
+ },
+ "number": {
+ "color": "#ac9739",
+ "weight": "normal"
+ },
+ "boolean": {
+ "color": "#ac9739",
+ "weight": "normal"
+ },
+ "predictive": {
+ "color": "#5e6687",
+ "weight": "normal"
+ },
+ "title": {
+ "color": "#c08b30",
+ "weight": "bold"
+ },
+ "emphasis": {
+ "color": "#3d8fd1",
+ "weight": "normal"
+ },
+ "emphasis.strong": {
+ "color": "#3d8fd1",
+ "weight": "bold"
+ },
+ "link_uri": {
+ "color": "#ac9739",
+ "weight": "normal",
+ "underline": true
+ },
+ "link_text": {
+ "color": "#c76b29",
+ "weight": "normal",
+ "italic": true
+ }
+ }
+ },
+ "project_diagnostics": {
+ "background": "#f5f7ff",
+ "tab_icon_spacing": 4,
+ "tab_icon_width": 13,
+ "tab_summary_spacing": 10,
+ "empty_message": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 16
+ }
+ },
+ "command_palette": {
+ "keystroke_spacing": 8,
+ "key": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#5e6687",
+ "size": 12
+ },
+ "corner_radius": 4,
+ "background": "#f5f7ff",
+ "border": {
+ "color": "#cdd1e2",
+ "width": 1
+ },
+ "padding": {
+ "top": 2,
+ "bottom": 2,
+ "left": 8,
+ "right": 8
+ },
+ "margin": {
+ "left": 2
+ },
+ "active": {
+ "text": {
+ "family": "Zed Mono",
+ "color": "#202746",
+ "size": 12
+ }
+ }
+ }
+ },
+ "project_panel": {
+ "padding": {
+ "left": 12,
+ "right": 12,
+ "top": 6,
+ "bottom": 6
+ },
+ "indent_width": 20,
+ "entry": {
+ "height": 24,
+ "icon_color": "#5e6687",
+ "icon_size": 8,
+ "icon_spacing": 8,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "hover": {
+ "background": "#cdd1e2",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#293256",
+ "size": 14
+ }
+ },
+ "active": {
+ "background": "#bbc0d3",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#293256",
+ "size": 14
+ }
+ },
+ "active_hover": {
+ "background": "#cdd1e2",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#202746",
+ "size": 14
+ }
+ }
+ },
+ "filename_editor": {
+ "background": "#eaedf8",
+ "text": {
+ "family": "Zed Mono",
+ "color": "#293256",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ }
+ }
+ },
+ "chat_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 12
+ },
+ "channel_name": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "weight": "bold",
+ "size": 14
+ },
+ "channel_name_hash": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "padding": {
+ "right": 8
+ }
+ },
+ "channel_select": {
+ "header": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 0
+ },
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#cdd1e2",
+ "corner_radius": 6
+ },
+ "active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "corner_radius": 0
+ },
+ "hovered_active_item": {
+ "name": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 14
+ },
+ "padding": 4,
+ "hash": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ },
+ "background": "#cdd1e2",
+ "corner_radius": 6
+ },
+ "menu": {
+ "background": "#f5f7ff",
+ "corner_radius": 6,
+ "padding": 4,
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ }
+ }
+ },
+ "sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "underline": true,
+ "size": 14
+ },
+ "hovered_sign_in_prompt": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "underline": true,
+ "size": 14
+ },
+ "message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "pending_message": {
+ "body": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "timestamp": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 6
+ },
+ "sender": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "weight": "bold",
+ "size": 14,
+ "margin": {
+ "right": 8
+ }
+ }
+ },
+ "input_editor": {
+ "background": "#f5f7ff",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#293256",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#6b7394",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "border": {
+ "color": "#cdd1e2",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 8,
+ "right": 8,
+ "top": 7
+ }
+ }
+ },
+ "contacts_panel": {
+ "padding": {
+ "top": 12,
+ "bottom": 0
+ },
+ "user_query_editor": {
+ "background": "#f5f7ff",
+ "corner_radius": 6,
+ "text": {
+ "family": "Zed Mono",
+ "color": "#293256",
+ "size": 14
+ },
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#6b7394",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "border": {
+ "color": "#cdd1e2",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 8,
+ "right": 8,
+ "top": 4
+ },
+ "margin": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "user_query_editor_height": 32,
+ "add_contact_button": {
+ "margin": {
+ "left": 6,
+ "right": 12
+ },
+ "color": "#293256",
+ "button_width": 8,
+ "icon_width": 8
+ },
+ "row_height": 28,
+ "section_icon_size": 8,
+ "header_row": {
+ "family": "Zed Mono",
+ "color": "#5e6687",
+ "size": 14,
+ "margin": {
+ "top": 14
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#293256",
+ "size": 14,
+ "background": "#a9aec3"
+ }
+ },
+ "contact_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "active": {
+ "background": "#a9aec3"
+ }
+ },
+ "tree_branch": {
+ "color": "#6b7394",
+ "width": 1,
+ "hover": {
+ "color": "#6b7394"
+ },
+ "active": {
+ "color": "#6b7394"
+ }
+ },
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "family": "Zed Mono",
+ "color": "#293256",
+ "size": 14,
+ "margin": {
+ "left": 8
+ }
+ },
+ "contact_button_spacing": 8,
+ "contact_button": {
+ "background": "#cdd1e2",
+ "color": "#293256",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#bbc0d3"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#cdd1e2",
+ "color": "#5e6687",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ },
+ "project_row": {
+ "guest_avatar_spacing": 4,
+ "height": 24,
+ "guest_avatar": {
+ "corner_radius": 8,
+ "width": 14
+ },
+ "name": {
+ "family": "Zed Mono",
+ "color": "#5e6687",
+ "size": 14,
+ "margin": {
+ "left": 8,
+ "right": 6
+ }
+ },
+ "guests": {
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "background": "#dfe2f1",
+ "hover": {
+ "background": "#cdd1e2"
+ },
+ "active": {
+ "background": "#bbc0d3"
+ }
+ },
+ "invite_row": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ },
+ "border": {
+ "top": true,
+ "width": 1,
+ "color": "#bbc0d3"
+ },
+ "text": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 14
+ },
+ "hover": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 14,
+ "underline": true
+ }
+ }
+ }
+ },
+ "contact_finder": {
+ "background": "#dfe2f1",
+ "corner_radius": 8,
+ "padding": 8,
+ "item": {
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 4
+ },
+ "corner_radius": 8,
+ "text": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14
+ },
+ "highlight_text": {
+ "family": "Zed Sans",
+ "color": "#3d8fd1",
+ "weight": "bold",
+ "size": 14
+ },
+ "active": {
+ "background": "#bbc0d3",
+ "text": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 14
+ }
+ },
+ "hover": {
+ "background": "#cdd1e2"
+ }
+ },
+ "border": {
+ "color": "#bbc0d3",
+ "width": 1
+ },
+ "empty": {
+ "text": {
+ "family": "Zed Sans",
+ "color": "#6b7394",
+ "size": 14
+ },
+ "padding": {
+ "bottom": 4,
+ "left": 12,
+ "right": 12,
+ "top": 8
+ }
+ },
+ "input_editor": {
+ "background": "#f5f7ff",
+ "corner_radius": 8,
+ "placeholder_text": {
+ "family": "Zed Sans",
+ "color": "#6b7394",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#293256",
+ "size": 14
+ },
+ "border": {
+ "color": "#cdd1e2",
+ "width": 1
+ },
+ "padding": {
+ "bottom": 7,
+ "left": 16,
+ "right": 16,
+ "top": 7
+ }
+ },
+ "shadow": {
+ "blur": 16,
+ "color": "#0000001f",
+ "offset": [
+ 0,
+ 2
+ ]
+ },
+ "row_height": 28,
+ "contact_avatar": {
+ "corner_radius": 10,
+ "width": 18
+ },
+ "contact_username": {
+ "padding": {
+ "left": 8
+ }
+ },
+ "contact_button": {
+ "background": "#cdd1e2",
+ "color": "#293256",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8,
+ "hover": {
+ "background": "#bbc0d3"
+ }
+ },
+ "disabled_contact_button": {
+ "background": "#cdd1e2",
+ "color": "#5e6687",
+ "icon_width": 8,
+ "button_width": 16,
+ "corner_radius": 8
+ }
+ },
+ "search": {
+ "match_background": "#bcc6f7",
+ "tab_icon_spacing": 8,
+ "tab_icon_width": 14,
+ "option_button": {
+ "family": "Zed Mono",
+ "color": "#5e6687",
+ "size": 14,
+ "background": "#cdd1e2",
+ "corner_radius": 6,
+ "border": {
+ "color": "#cdd1e2",
+ "width": 1
+ },
+ "margin": {
+ "right": 4
+ },
+ "padding": {
+ "bottom": 2,
+ "left": 10,
+ "right": 10,
+ "top": 2
+ },
+ "active": {
+ "family": "Zed Mono",
+ "color": "#202746",
+ "size": 14,
+ "background": "#a9aec3",
+ "border": {
+ "color": "#dfe2f1",
+ "width": 1
+ }
+ },
+ "hover": {
+ "family": "Zed Mono",
+ "color": "#202746",
+ "size": 14,
+ "background": "#bbc0d3",
+ "border": {
+ "color": "#dfe2f1",
+ "width": 1
+ }
+ }
+ },
+ "editor": {
+ "background": "#f5f7ff",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#6b7394",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#202746",
+ "size": 14
+ },
+ "border": {
+ "color": "#cdd1e2",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "invalid_editor": {
+ "background": "#f5f7ff",
+ "corner_radius": 8,
+ "min_width": 200,
+ "max_width": 500,
+ "placeholder_text": {
+ "family": "Zed Mono",
+ "color": "#6b7394",
+ "size": 14
+ },
+ "selection": {
+ "cursor": "#3d8fd1",
+ "selection": "#3d8fd13d"
+ },
+ "text": {
+ "family": "Zed Mono",
+ "color": "#202746",
+ "size": 14
+ },
+ "border": {
+ "color": "#c9492226",
+ "width": 1
+ },
+ "margin": {
+ "right": 12
+ },
+ "padding": {
+ "top": 3,
+ "bottom": 3,
+ "left": 12,
+ "right": 8
+ }
+ },
+ "match_index": {
+ "family": "Zed Mono",
+ "color": "#5e6687",
+ "size": 14,
+ "padding": 6
+ },
+ "option_button_group": {
+ "padding": {
+ "left": 12,
+ "right": 12
+ }
+ },
+ "results_status": {
+ "family": "Zed Mono",
+ "color": "#293256",
+ "size": 18
+ }
+ },
+ "breadcrumbs": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 14,
+ "padding": {
+ "left": 6
+ }
+ },
+ "contact_notification": {
+ "header_avatar": {
+ "height": 12,
+ "width": 12,
+ "corner_radius": 6
+ },
+ "header_message": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 12,
+ "margin": {
+ "left": 8,
+ "right": 8
+ }
+ },
+ "header_height": 18,
+ "body_message": {
+ "family": "Zed Sans",
+ "color": "#5e6687",
+ "size": 12,
+ "margin": {
+ "left": 20,
+ "top": 6,
+ "bottom": 6
+ }
+ },
+ "button": {
+ "family": "Zed Sans",
+ "color": "#293256",
+ "size": 12,
+ "background": "#f5f7ff",
+ "padding": 4,
+ "corner_radius": 6,
+ "margin": {
+ "left": 6
+ },
+ "hover": {
+ "background": "#f0f2fc"
+ }
+ },
+ "dismiss_button": {
+ "color": "#5e6687",
+ "icon_width": 8,
+ "icon_height": 8,
+ "button_width": 8,
+ "button_height": 8,
+ "hover": {
+ "color": "#293256"
+ }
+ }
+ }
+}
@@ -65,6 +65,7 @@ pub struct UserStore {
incoming_contact_requests: Vec<Arc<User>>,
outgoing_contact_requests: Vec<Arc<User>>,
pending_contact_requests: HashMap<u64, usize>,
+ invite_info: Option<InviteInfo>,
client: Weak<Client>,
http: Arc<dyn HttpClient>,
_maintain_contacts: Task<()>,
@@ -72,9 +73,17 @@ pub struct UserStore {
}
#[derive(Clone)]
-pub struct ContactEvent {
- pub user: Arc<User>,
- pub kind: ContactEventKind,
+pub struct InviteInfo {
+ pub count: u32,
+ pub url: Arc<str>,
+}
+
+pub enum Event {
+ Contact {
+ user: Arc<User>,
+ kind: ContactEventKind,
+ },
+ ShowContacts,
}
#[derive(Clone, Copy)]
@@ -85,7 +94,7 @@ pub enum ContactEventKind {
}
impl Entity for UserStore {
- type Event = ContactEvent;
+ type Event = Event;
}
enum UpdateContacts {
@@ -101,19 +110,23 @@ impl UserStore {
) -> Self {
let (mut current_user_tx, current_user_rx) = watch::channel();
let (update_contacts_tx, mut update_contacts_rx) = mpsc::unbounded();
- let rpc_subscription =
- client.add_message_handler(cx.handle(), Self::handle_update_contacts);
+ let rpc_subscriptions = vec![
+ client.add_message_handler(cx.handle(), Self::handle_update_contacts),
+ client.add_message_handler(cx.handle(), Self::handle_update_invite_info),
+ client.add_message_handler(cx.handle(), Self::handle_show_contacts),
+ ];
Self {
users: Default::default(),
current_user: current_user_rx,
contacts: Default::default(),
incoming_contact_requests: Default::default(),
outgoing_contact_requests: Default::default(),
+ invite_info: None,
client: Arc::downgrade(&client),
update_contacts_tx,
http,
_maintain_contacts: cx.spawn_weak(|this, mut cx| async move {
- let _subscription = rpc_subscription;
+ let _subscriptions = rpc_subscriptions;
while let Some(message) = update_contacts_rx.next().await {
if let Some(this) = this.upgrade(&cx) {
this.update(&mut cx, |this, cx| this.update_contacts(message, cx))
@@ -154,15 +167,45 @@ impl UserStore {
}
}
+ async fn handle_update_invite_info(
+ this: ModelHandle<Self>,
+ message: TypedEnvelope<proto::UpdateInviteInfo>,
+ _: Arc<Client>,
+ mut cx: AsyncAppContext,
+ ) -> Result<()> {
+ this.update(&mut cx, |this, cx| {
+ this.invite_info = Some(InviteInfo {
+ url: Arc::from(message.payload.url),
+ count: message.payload.count,
+ });
+ cx.notify();
+ });
+ Ok(())
+ }
+
+ async fn handle_show_contacts(
+ this: ModelHandle<Self>,
+ _: TypedEnvelope<proto::ShowContacts>,
+ _: Arc<Client>,
+ mut cx: AsyncAppContext,
+ ) -> Result<()> {
+ this.update(&mut cx, |_, cx| cx.emit(Event::ShowContacts));
+ Ok(())
+ }
+
+ pub fn invite_info(&self) -> Option<&InviteInfo> {
+ self.invite_info.as_ref()
+ }
+
async fn handle_update_contacts(
this: ModelHandle<Self>,
- msg: TypedEnvelope<proto::UpdateContacts>,
+ message: TypedEnvelope<proto::UpdateContacts>,
_: Arc<Client>,
mut cx: AsyncAppContext,
) -> Result<()> {
this.update(&mut cx, |this, _| {
this.update_contacts_tx
- .unbounded_send(UpdateContacts::Update(msg.payload))
+ .unbounded_send(UpdateContacts::Update(message.payload))
.unwrap();
});
Ok(())
@@ -244,7 +287,7 @@ impl UserStore {
// Update existing contacts and insert new ones
for (updated_contact, should_notify) in updated_contacts {
if should_notify {
- cx.emit(ContactEvent {
+ cx.emit(Event::Contact {
user: updated_contact.user.clone(),
kind: ContactEventKind::Accepted,
});
@@ -261,7 +304,7 @@ impl UserStore {
// Remove incoming contact requests
this.incoming_contact_requests.retain(|user| {
if removed_incoming_requests.contains(&user.id) {
- cx.emit(ContactEvent {
+ cx.emit(Event::Contact {
user: user.clone(),
kind: ContactEventKind::Cancelled,
});
@@ -273,7 +316,7 @@ impl UserStore {
// Update existing incoming requests and insert new ones
for (user, should_notify) in incoming_requests {
if should_notify {
- cx.emit(ContactEvent {
+ cx.emit(Event::Contact {
user: user.clone(),
kind: ContactEventKind::Requested,
});
@@ -1,2 +1,9 @@
DATABASE_URL = "postgres://postgres@localhost/zed"
HTTP_PORT = 8080
+API_TOKEN = "secret"
+INVITE_LINK_PREFIX = "http://localhost:3000/invites/"
+
+# HONEYCOMB_API_KEY=
+# HONEYCOMB_DATASET=
+# RUST_LOG=info
+# LOG_JSON=true
@@ -25,8 +25,10 @@ base64 = "0.13"
clap = { version = "3.1", features = ["derive"], optional = true }
envy = "0.4.2"
futures = "0.3"
+hyper = "0.14"
lazy_static = "1.4"
lipsum = { version = "0.8", optional = true }
+nanoid = "0.4"
opentelemetry = { version = "0.17", features = ["rt-tokio"] }
opentelemetry-otlp = { version = "0.10", features = ["tls-roots"] }
parking_lot = "0.11.1"
@@ -1,2 +1,3 @@
ZED_ENVIRONMENT=production
RUST_LOG=info,rpc=debug
+INVITE_LINK_PREFIX=https://zed.dev/invites/
@@ -1,2 +1,3 @@
ZED_ENVIRONMENT=staging
RUST_LOG=info,rpc=debug
+INVITE_LINK_PREFIX=https://staging.zed.dev/invites/
@@ -81,6 +81,8 @@ spec:
secretKeyRef:
name: api
key: token
+ - name: INVITE_LINK_PREFIX
+ value: ${INVITE_LINK_PREFIX}
- name: RUST_LOG
value: ${RUST_LOG}
- name: LOG_JSON
@@ -0,0 +1,9 @@
+ALTER TABLE users
+ADD email_address VARCHAR(255) DEFAULT NULL,
+ADD invite_code VARCHAR(64),
+ADD invite_count INTEGER NOT NULL DEFAULT 0,
+ADD inviter_id INTEGER REFERENCES users (id),
+ADD connected_once BOOLEAN NOT NULL DEFAULT false,
+ADD created_at TIMESTAMP NOT NULL DEFAULT NOW();
+
+CREATE UNIQUE INDEX "index_invite_code_users" ON "users" ("invite_code");
@@ -0,0 +1,6 @@
+ALTER TABLE contacts DROP CONSTRAINT contacts_user_id_a_fkey;
+ALTER TABLE contacts DROP CONSTRAINT contacts_user_id_b_fkey;
+ALTER TABLE contacts ADD CONSTRAINT contacts_user_id_a_fkey FOREIGN KEY (user_id_a) REFERENCES users(id) ON DELETE CASCADE;
+ALTER TABLE contacts ADD CONSTRAINT contacts_user_id_b_fkey FOREIGN KEY (user_id_b) REFERENCES users(id) ON DELETE CASCADE;
+ALTER TABLE users DROP CONSTRAINT users_inviter_id_fkey;
+ALTER TABLE users ADD CONSTRAINT users_inviter_id_fkey FOREIGN KEY (inviter_id) REFERENCES users(id) ON DELETE SET NULL;
@@ -1,6 +1,7 @@
use crate::{
auth,
db::{User, UserId},
+ rpc::ResultExt,
AppState, Error, Result,
};
use anyhow::anyhow;
@@ -18,7 +19,7 @@ use std::sync::Arc;
use tower::ServiceBuilder;
use tracing::instrument;
-pub fn routes(state: Arc<AppState>) -> Router<Body> {
+pub fn routes(rpc_server: &Arc<crate::rpc::Server>, state: Arc<AppState>) -> Router<Body> {
Router::new()
.route("/users", get(get_users).post(create_user))
.route(
@@ -26,13 +27,14 @@ pub fn routes(state: Arc<AppState>) -> Router<Body> {
put(update_user).delete(destroy_user).get(get_user),
)
.route("/users/:id/access_tokens", post(create_access_token))
+ .route("/invite_codes/:code", get(get_user_for_invite_code))
.route("/panic", post(trace_panic))
.layer(
ServiceBuilder::new()
.layer(Extension(state))
+ .layer(Extension(rpc_server.clone()))
.layer(middleware::from_fn(validate_api_token)),
)
- // TODO: Compression on API routes?
}
pub async fn validate_api_token<B>(req: Request<B>, next: Next<B>) -> impl IntoResponse {
@@ -71,20 +73,44 @@ async fn get_users(Extension(app): Extension<Arc<AppState>>) -> Result<Json<Vec<
Ok(Json(users))
}
-#[derive(Deserialize)]
+#[derive(Deserialize, Debug)]
struct CreateUserParams {
github_login: String,
+ invite_code: Option<String>,
+ email_address: Option<String>,
admin: bool,
}
async fn create_user(
Json(params): Json<CreateUserParams>,
Extension(app): Extension<Arc<AppState>>,
+ Extension(rpc_server): Extension<Arc<crate::rpc::Server>>,
) -> Result<Json<User>> {
- let user_id = app
- .db
- .create_user(¶ms.github_login, params.admin)
- .await?;
+ println!("{:?}", params);
+
+ let user_id = if let Some(invite_code) = params.invite_code {
+ let invitee_id = app
+ .db
+ .redeem_invite_code(
+ &invite_code,
+ ¶ms.github_login,
+ params.email_address.as_deref(),
+ )
+ .await?;
+ rpc_server
+ .invite_code_redeemed(&invite_code, invitee_id)
+ .await
+ .trace_err();
+ invitee_id
+ } else {
+ app.db
+ .create_user(
+ ¶ms.github_login,
+ params.email_address.as_deref(),
+ params.admin,
+ )
+ .await?
+ };
let user = app
.db
@@ -97,7 +123,8 @@ async fn create_user(
#[derive(Deserialize)]
struct UpdateUserParams {
- admin: bool,
+ admin: Option<bool>,
+ invite_count: Option<u32>,
}
async fn update_user(
@@ -105,9 +132,16 @@ async fn update_user(
Json(params): Json<UpdateUserParams>,
Extension(app): Extension<Arc<AppState>>,
) -> Result<()> {
- app.db
- .set_user_is_admin(UserId(user_id), params.admin)
- .await?;
+ if let Some(admin) = params.admin {
+ app.db.set_user_is_admin(UserId(user_id), admin).await?;
+ }
+
+ if let Some(invite_count) = params.invite_count {
+ app.db
+ .set_invite_count(UserId(user_id), invite_count)
+ .await?;
+ }
+
Ok(())
}
@@ -127,7 +161,7 @@ async fn get_user(
.db
.get_user_by_github_login(&login)
.await?
- .ok_or_else(|| anyhow!("user not found"))?;
+ .ok_or_else(|| Error::Http(StatusCode::NOT_FOUND, "User not found".to_string()))?;
Ok(Json(user))
}
@@ -196,3 +230,10 @@ async fn create_access_token(
encrypted_access_token,
}))
}
+
+async fn get_user_for_invite_code(
+ Path(code): Path<String>,
+ Extension(app): Extension<Arc<AppState>>,
+) -> Result<Json<User>> {
+ Ok(Json(app.db.get_user_for_invite_code(&code).await?))
+}
@@ -1,8 +1,8 @@
use std::sync::Arc;
use super::db::{self, UserId};
-use crate::{AppState, Error};
-use anyhow::{anyhow, Context, Result};
+use crate::{AppState, Error, Result};
+use anyhow::{anyhow, Context};
use axum::{
http::{self, Request, StatusCode},
middleware::Next,
@@ -91,7 +91,8 @@ fn hash_access_token(token: &str) -> Result<String> {
None,
params,
&SaltString::generate(thread_rng()),
- )?
+ )
+ .map_err(anyhow::Error::new)?
.to_string())
}
@@ -105,6 +106,6 @@ pub fn encrypt_access_token(access_token: &str, public_key: String) -> Result<St
}
pub fn verify_access_token(token: &str, hash: &str) -> Result<bool> {
- let hash = PasswordHash::new(hash)?;
+ let hash = PasswordHash::new(hash).map_err(anyhow::Error::new)?;
Ok(Scrypt.verify_password(token.as_bytes(), &hash).is_ok())
}
@@ -1,6 +1,9 @@
-use anyhow::{anyhow, Context, Result};
+use crate::{Error, Result};
+use anyhow::{anyhow, Context};
use async_trait::async_trait;
+use axum::http::StatusCode;
use futures::StreamExt;
+use nanoid::nanoid;
use serde::Serialize;
pub use sqlx::postgres::PgPoolOptions as DbOptions;
use sqlx::{types::Uuid, FromRow};
@@ -8,15 +11,31 @@ use time::OffsetDateTime;
#[async_trait]
pub trait Db: Send + Sync {
- async fn create_user(&self, github_login: &str, admin: bool) -> Result<UserId>;
+ async fn create_user(
+ &self,
+ github_login: &str,
+ email_address: Option<&str>,
+ admin: bool,
+ ) -> Result<UserId>;
async fn get_all_users(&self) -> Result<Vec<User>>;
async fn fuzzy_search_users(&self, query: &str, limit: u32) -> Result<Vec<User>>;
async fn get_user_by_id(&self, id: UserId) -> Result<Option<User>>;
async fn get_users_by_ids(&self, ids: Vec<UserId>) -> Result<Vec<User>>;
async fn get_user_by_github_login(&self, github_login: &str) -> Result<Option<User>>;
async fn set_user_is_admin(&self, id: UserId, is_admin: bool) -> Result<()>;
+ async fn set_user_connected_once(&self, id: UserId, connected_once: bool) -> Result<()>;
async fn destroy_user(&self, id: UserId) -> Result<()>;
+ async fn set_invite_count(&self, id: UserId, count: u32) -> Result<()>;
+ async fn get_invite_code_for_user(&self, id: UserId) -> Result<Option<(String, u32)>>;
+ async fn get_user_for_invite_code(&self, code: &str) -> Result<User>;
+ async fn redeem_invite_code(
+ &self,
+ code: &str,
+ login: &str,
+ email_address: Option<&str>,
+ ) -> Result<UserId>;
+
async fn get_contacts(&self, id: UserId) -> Result<Vec<Contact>>;
async fn has_contact(&self, user_id_a: UserId, user_id_b: UserId) -> Result<bool>;
async fn send_contact_request(&self, requester_id: UserId, responder_id: UserId) -> Result<()>;
@@ -101,15 +120,21 @@ impl PostgresDb {
impl Db for PostgresDb {
// users
- async fn create_user(&self, github_login: &str, admin: bool) -> Result<UserId> {
+ async fn create_user(
+ &self,
+ github_login: &str,
+ email_address: Option<&str>,
+ admin: bool,
+ ) -> Result<UserId> {
let query = "
- INSERT INTO users (github_login, admin)
- VALUES ($1, $2)
+ INSERT INTO users (github_login, email_address, admin)
+ VALUES ($1, $2, $3)
ON CONFLICT (github_login) DO UPDATE SET github_login = excluded.github_login
RETURNING id
";
Ok(sqlx::query_scalar(query)
.bind(github_login)
+ .bind(email_address)
.bind(admin)
.fetch_one(&self.pool)
.await
@@ -174,6 +199,16 @@ impl Db for PostgresDb {
.map(drop)?)
}
+ async fn set_user_connected_once(&self, id: UserId, connected_once: bool) -> Result<()> {
+ let query = "UPDATE users SET connected_once = $1 WHERE id = $2";
+ Ok(sqlx::query(query)
+ .bind(connected_once)
+ .bind(id.0)
+ .execute(&self.pool)
+ .await
+ .map(drop)?)
+ }
+
async fn destroy_user(&self, id: UserId) -> Result<()> {
let query = "DELETE FROM access_tokens WHERE user_id = $1;";
sqlx::query(query)
@@ -189,6 +224,153 @@ impl Db for PostgresDb {
.map(drop)?)
}
+ // invite codes
+
+ async fn set_invite_count(&self, id: UserId, count: u32) -> Result<()> {
+ let mut tx = self.pool.begin().await?;
+ if count > 0 {
+ sqlx::query(
+ "
+ UPDATE users
+ SET invite_code = $1
+ WHERE id = $2 AND invite_code IS NULL
+ ",
+ )
+ .bind(nanoid!(16))
+ .bind(id)
+ .execute(&mut tx)
+ .await?;
+ }
+
+ sqlx::query(
+ "
+ UPDATE users
+ SET invite_count = $1
+ WHERE id = $2
+ ",
+ )
+ .bind(count)
+ .bind(id)
+ .execute(&mut tx)
+ .await?;
+ tx.commit().await?;
+ Ok(())
+ }
+
+ async fn get_invite_code_for_user(&self, id: UserId) -> Result<Option<(String, u32)>> {
+ let result: Option<(String, i32)> = sqlx::query_as(
+ "
+ SELECT invite_code, invite_count
+ FROM users
+ WHERE id = $1 AND invite_code IS NOT NULL
+ ",
+ )
+ .bind(id)
+ .fetch_optional(&self.pool)
+ .await?;
+ if let Some((code, count)) = result {
+ Ok(Some((code, count.try_into().map_err(anyhow::Error::new)?)))
+ } else {
+ Ok(None)
+ }
+ }
+
+ async fn get_user_for_invite_code(&self, code: &str) -> Result<User> {
+ sqlx::query_as(
+ "
+ SELECT *
+ FROM users
+ WHERE invite_code = $1
+ ",
+ )
+ .bind(code)
+ .fetch_optional(&self.pool)
+ .await?
+ .ok_or_else(|| {
+ Error::Http(
+ StatusCode::NOT_FOUND,
+ "that invite code does not exist".to_string(),
+ )
+ })
+ }
+
+ async fn redeem_invite_code(
+ &self,
+ code: &str,
+ login: &str,
+ email_address: Option<&str>,
+ ) -> Result<UserId> {
+ let mut tx = self.pool.begin().await?;
+
+ let inviter_id: Option<UserId> = sqlx::query_scalar(
+ "
+ UPDATE users
+ SET invite_count = invite_count - 1
+ WHERE
+ invite_code = $1 AND
+ invite_count > 0
+ RETURNING id
+ ",
+ )
+ .bind(code)
+ .fetch_optional(&mut tx)
+ .await?;
+
+ let inviter_id = match inviter_id {
+ Some(inviter_id) => inviter_id,
+ None => {
+ if sqlx::query_scalar::<_, i32>("SELECT 1 FROM users WHERE invite_code = $1")
+ .bind(code)
+ .fetch_optional(&mut tx)
+ .await?
+ .is_some()
+ {
+ Err(Error::Http(
+ StatusCode::UNAUTHORIZED,
+ "no invites remaining".to_string(),
+ ))?
+ } else {
+ Err(Error::Http(
+ StatusCode::NOT_FOUND,
+ "invite code not found".to_string(),
+ ))?
+ }
+ }
+ };
+
+ let invitee_id = sqlx::query_scalar(
+ "
+ INSERT INTO users
+ (github_login, email_address, admin, inviter_id)
+ VALUES
+ ($1, $2, 'f', $3)
+ RETURNING id
+ ",
+ )
+ .bind(login)
+ .bind(email_address)
+ .bind(inviter_id)
+ .fetch_one(&mut tx)
+ .await
+ .map(UserId)?;
+
+ sqlx::query(
+ "
+ INSERT INTO contacts
+ (user_id_a, user_id_b, a_to_b, should_notify, accepted)
+ VALUES
+ ($1, $2, 't', 't', 't')
+ ",
+ )
+ .bind(inviter_id)
+ .bind(invitee_id)
+ .execute(&mut tx)
+ .await?;
+
+ tx.commit().await?;
+ Ok(invitee_id)
+ }
+
// contacts
async fn get_contacts(&self, user_id: UserId) -> Result<Vec<Contact>> {
@@ -293,7 +475,7 @@ impl Db for PostgresDb {
if result.rows_affected() == 1 {
Ok(())
} else {
- Err(anyhow!("contact already requested"))
+ Err(anyhow!("contact already requested"))?
}
}
@@ -316,7 +498,7 @@ impl Db for PostgresDb {
if result.rows_affected() == 1 {
Ok(())
} else {
- Err(anyhow!("no such contact"))
+ Err(anyhow!("no such contact"))?
}
}
@@ -394,7 +576,7 @@ impl Db for PostgresDb {
if result.rows_affected() == 1 {
Ok(())
} else {
- Err(anyhow!("no such contact request"))
+ Err(anyhow!("no such contact request"))?
}
}
@@ -694,11 +876,15 @@ macro_rules! id_type {
}
id_type!(UserId);
-#[derive(Clone, Debug, FromRow, Serialize, PartialEq)]
+#[derive(Clone, Debug, Default, FromRow, Serialize, PartialEq)]
pub struct User {
pub id: UserId,
pub github_login: String,
+ pub email_address: Option<String>,
pub admin: bool,
+ pub invite_code: Option<String>,
+ pub invite_count: i32,
+ pub connected_once: bool,
}
id_type!(OrgId);
@@ -796,10 +982,10 @@ pub mod tests {
] {
let db = test_db.db();
- let user = db.create_user("user", false).await.unwrap();
- let friend1 = db.create_user("friend-1", false).await.unwrap();
- let friend2 = db.create_user("friend-2", false).await.unwrap();
- let friend3 = db.create_user("friend-3", false).await.unwrap();
+ let user = db.create_user("user", None, false).await.unwrap();
+ let friend1 = db.create_user("friend-1", None, false).await.unwrap();
+ let friend2 = db.create_user("friend-2", None, false).await.unwrap();
+ let friend3 = db.create_user("friend-3", None, false).await.unwrap();
assert_eq!(
db.get_users_by_ids(vec![user, friend1, friend2, friend3])
@@ -810,21 +996,25 @@ pub mod tests {
id: user,
github_login: "user".to_string(),
admin: false,
+ ..Default::default()
},
User {
id: friend1,
github_login: "friend-1".to_string(),
admin: false,
+ ..Default::default()
},
User {
id: friend2,
github_login: "friend-2".to_string(),
admin: false,
+ ..Default::default()
},
User {
id: friend3,
github_login: "friend-3".to_string(),
admin: false,
+ ..Default::default()
}
]
);
@@ -838,7 +1028,7 @@ pub mod tests {
TestDb::fake(Arc::new(gpui::executor::Background::new())),
] {
let db = test_db.db();
- let user = db.create_user("user", false).await.unwrap();
+ let user = db.create_user("user", None, false).await.unwrap();
let org = db.create_org("org", "org").await.unwrap();
let channel = db.create_org_channel(org, "channel").await.unwrap();
for i in 0..10 {
@@ -877,7 +1067,7 @@ pub mod tests {
TestDb::fake(Arc::new(gpui::executor::Background::new())),
] {
let db = test_db.db();
- let user = db.create_user("user", false).await.unwrap();
+ let user = db.create_user("user", None, false).await.unwrap();
let org = db.create_org("org", "org").await.unwrap();
let channel = db.create_org_channel(org, "channel").await.unwrap();
@@ -908,7 +1098,7 @@ pub mod tests {
async fn test_create_access_tokens() {
let test_db = TestDb::postgres().await;
let db = test_db.db();
- let user = db.create_user("the-user", false).await.unwrap();
+ let user = db.create_user("the-user", None, false).await.unwrap();
db.create_access_token_hash(user, "h1", 3).await.unwrap();
db.create_access_token_hash(user, "h2", 3).await.unwrap();
@@ -956,7 +1146,7 @@ pub mod tests {
"delaware",
"rhode-island",
] {
- db.create_user(github_login, false).await.unwrap();
+ db.create_user(github_login, None, false).await.unwrap();
}
assert_eq!(
@@ -986,9 +1176,9 @@ pub mod tests {
] {
let db = test_db.db();
- let user_1 = db.create_user("user1", false).await.unwrap();
- let user_2 = db.create_user("user2", false).await.unwrap();
- let user_3 = db.create_user("user3", false).await.unwrap();
+ let user_1 = db.create_user("user1", None, false).await.unwrap();
+ let user_2 = db.create_user("user2", None, false).await.unwrap();
+ let user_3 = db.create_user("user3", None, false).await.unwrap();
// User starts with no contacts
assert_eq!(
@@ -1198,6 +1388,159 @@ pub mod tests {
}
}
+ #[tokio::test(flavor = "multi_thread")]
+ async fn test_invite_codes() {
+ let postgres = TestDb::postgres().await;
+ let db = postgres.db();
+ let user1 = db.create_user("user-1", None, false).await.unwrap();
+
+ // Initially, user 1 has no invite code
+ assert_eq!(db.get_invite_code_for_user(user1).await.unwrap(), None);
+
+ // Setting invite count to 0 when no code is assigned does not assign a new code
+ db.set_invite_count(user1, 0).await.unwrap();
+ assert!(db.get_invite_code_for_user(user1).await.unwrap().is_none());
+
+ // User 1 creates an invite code that can be used twice.
+ db.set_invite_count(user1, 2).await.unwrap();
+ let (invite_code, invite_count) =
+ db.get_invite_code_for_user(user1).await.unwrap().unwrap();
+ assert_eq!(invite_count, 2);
+
+ // User 2 redeems the invite code and becomes a contact of user 1.
+ let user2 = db
+ .redeem_invite_code(&invite_code, "user-2", None)
+ .await
+ .unwrap();
+ let (_, invite_count) = db.get_invite_code_for_user(user1).await.unwrap().unwrap();
+ assert_eq!(invite_count, 1);
+ assert_eq!(
+ db.get_contacts(user1).await.unwrap(),
+ [
+ Contact::Accepted {
+ user_id: user1,
+ should_notify: false
+ },
+ Contact::Accepted {
+ user_id: user2,
+ should_notify: true
+ }
+ ]
+ );
+ assert_eq!(
+ db.get_contacts(user2).await.unwrap(),
+ [
+ Contact::Accepted {
+ user_id: user1,
+ should_notify: false
+ },
+ Contact::Accepted {
+ user_id: user2,
+ should_notify: false
+ }
+ ]
+ );
+
+ // User 3 redeems the invite code and becomes a contact of user 1.
+ let user3 = db
+ .redeem_invite_code(&invite_code, "user-3", None)
+ .await
+ .unwrap();
+ let (_, invite_count) = db.get_invite_code_for_user(user1).await.unwrap().unwrap();
+ assert_eq!(invite_count, 0);
+ assert_eq!(
+ db.get_contacts(user1).await.unwrap(),
+ [
+ Contact::Accepted {
+ user_id: user1,
+ should_notify: false
+ },
+ Contact::Accepted {
+ user_id: user2,
+ should_notify: true
+ },
+ Contact::Accepted {
+ user_id: user3,
+ should_notify: true
+ }
+ ]
+ );
+ assert_eq!(
+ db.get_contacts(user3).await.unwrap(),
+ [
+ Contact::Accepted {
+ user_id: user1,
+ should_notify: false
+ },
+ Contact::Accepted {
+ user_id: user3,
+ should_notify: false
+ },
+ ]
+ );
+
+ // Trying to reedem the code for the third time results in an error.
+ db.redeem_invite_code(&invite_code, "user-4", None)
+ .await
+ .unwrap_err();
+
+ // Invite count can be updated after the code has been created.
+ db.set_invite_count(user1, 2).await.unwrap();
+ let (latest_code, invite_count) =
+ db.get_invite_code_for_user(user1).await.unwrap().unwrap();
+ assert_eq!(latest_code, invite_code); // Invite code doesn't change when we increment above 0
+ assert_eq!(invite_count, 2);
+
+ // User 4 can now redeem the invite code and becomes a contact of user 1.
+ let user4 = db
+ .redeem_invite_code(&invite_code, "user-4", None)
+ .await
+ .unwrap();
+ let (_, invite_count) = db.get_invite_code_for_user(user1).await.unwrap().unwrap();
+ assert_eq!(invite_count, 1);
+ assert_eq!(
+ db.get_contacts(user1).await.unwrap(),
+ [
+ Contact::Accepted {
+ user_id: user1,
+ should_notify: false
+ },
+ Contact::Accepted {
+ user_id: user2,
+ should_notify: true
+ },
+ Contact::Accepted {
+ user_id: user3,
+ should_notify: true
+ },
+ Contact::Accepted {
+ user_id: user4,
+ should_notify: true
+ }
+ ]
+ );
+ assert_eq!(
+ db.get_contacts(user4).await.unwrap(),
+ [
+ Contact::Accepted {
+ user_id: user1,
+ should_notify: false
+ },
+ Contact::Accepted {
+ user_id: user4,
+ should_notify: false
+ },
+ ]
+ );
+
+ // An existing user cannot redeem invite codes.
+ db.redeem_invite_code(&invite_code, "user-2", None)
+ .await
+ .unwrap_err();
+ let (_, invite_count) = db.get_invite_code_for_user(user1).await.unwrap().unwrap();
+ assert_eq!(invite_count, 1);
+ }
+
pub struct TestDb {
pub db: Option<Arc<dyn Db>>,
pub url: String,
@@ -1290,7 +1633,12 @@ pub mod tests {
#[async_trait]
impl Db for FakeDb {
- async fn create_user(&self, github_login: &str, admin: bool) -> Result<UserId> {
+ async fn create_user(
+ &self,
+ github_login: &str,
+ email_address: Option<&str>,
+ admin: bool,
+ ) -> Result<UserId> {
self.background.simulate_random_delay().await;
let mut users = self.users.lock();
@@ -1306,7 +1654,11 @@ pub mod tests {
User {
id: user_id,
github_login: github_login.to_string(),
+ email_address: email_address.map(str::to_string),
admin,
+ invite_code: None,
+ invite_count: 0,
+ connected_once: false,
},
);
Ok(user_id)
@@ -1344,10 +1696,45 @@ pub mod tests {
unimplemented!()
}
+ async fn set_user_connected_once(&self, id: UserId, connected_once: bool) -> Result<()> {
+ self.background.simulate_random_delay().await;
+ let mut users = self.users.lock();
+ let mut user = users
+ .get_mut(&id)
+ .ok_or_else(|| anyhow!("user not found"))?;
+ user.connected_once = connected_once;
+ Ok(())
+ }
+
async fn destroy_user(&self, _id: UserId) -> Result<()> {
unimplemented!()
}
+ // invite codes
+
+ async fn set_invite_count(&self, _id: UserId, _count: u32) -> Result<()> {
+ unimplemented!()
+ }
+
+ async fn get_invite_code_for_user(&self, _id: UserId) -> Result<Option<(String, u32)>> {
+ Ok(None)
+ }
+
+ async fn get_user_for_invite_code(&self, _code: &str) -> Result<User> {
+ unimplemented!()
+ }
+
+ async fn redeem_invite_code(
+ &self,
+ _code: &str,
+ _login: &str,
+ _email_address: Option<&str>,
+ ) -> Result<UserId> {
+ unimplemented!()
+ }
+
+ // contacts
+
async fn get_contacts(&self, id: UserId) -> Result<Vec<Contact>> {
self.background.simulate_random_delay().await;
let mut contacts = vec![Contact::Accepted {
@@ -1457,7 +1844,7 @@ pub mod tests {
return Ok(());
}
}
- Err(anyhow!("no such notification"))
+ Err(anyhow!("no such notification"))?
}
async fn respond_to_contact_request(
@@ -1470,7 +1857,7 @@ pub mod tests {
for (ix, contact) in contacts.iter_mut().enumerate() {
if contact.requester_id == requester_id && contact.responder_id == responder_id {
if contact.accepted {
- return Err(anyhow!("contact already confirmed"));
+ Err(anyhow!("contact already confirmed"))?;
}
if accept {
contact.accepted = true;
@@ -1481,7 +1868,7 @@ pub mod tests {
return Ok(());
}
}
- Err(anyhow!("no such contact request"))
+ Err(anyhow!("no such contact request"))?
}
async fn create_access_token_hash(
@@ -1505,7 +1892,7 @@ pub mod tests {
self.background.simulate_random_delay().await;
let mut orgs = self.orgs.lock();
if orgs.values().any(|org| org.slug == slug) {
- Err(anyhow!("org already exists"))
+ Err(anyhow!("org already exists"))?
} else {
let org_id = OrgId(post_inc(&mut *self.next_org_id.lock()));
orgs.insert(
@@ -1528,10 +1915,10 @@ pub mod tests {
) -> Result<()> {
self.background.simulate_random_delay().await;
if !self.orgs.lock().contains_key(&org_id) {
- return Err(anyhow!("org does not exist"));
+ Err(anyhow!("org does not exist"))?;
}
if !self.users.lock().contains_key(&user_id) {
- return Err(anyhow!("user does not exist"));
+ Err(anyhow!("user does not exist"))?;
}
self.org_memberships
@@ -1544,7 +1931,7 @@ pub mod tests {
async fn create_org_channel(&self, org_id: OrgId, name: &str) -> Result<ChannelId> {
self.background.simulate_random_delay().await;
if !self.orgs.lock().contains_key(&org_id) {
- return Err(anyhow!("org does not exist"));
+ Err(anyhow!("org does not exist"))?;
}
let mut channels = self.channels.lock();
@@ -1603,10 +1990,10 @@ pub mod tests {
) -> Result<()> {
self.background.simulate_random_delay().await;
if !self.channels.lock().contains_key(&channel_id) {
- return Err(anyhow!("channel does not exist"));
+ Err(anyhow!("channel does not exist"))?;
}
if !self.users.lock().contains_key(&user_id) {
- return Err(anyhow!("user does not exist"));
+ Err(anyhow!("user does not exist"))?;
}
self.channel_memberships
@@ -1626,10 +2013,10 @@ pub mod tests {
) -> Result<MessageId> {
self.background.simulate_random_delay().await;
if !self.channels.lock().contains_key(&channel_id) {
- return Err(anyhow!("channel does not exist"));
+ Err(anyhow!("channel does not exist"))?;
}
if !self.users.lock().contains_key(&sender_id) {
- return Err(anyhow!("user does not exist"));
+ Err(anyhow!("user does not exist"))?;
}
let mut messages = self.channel_messages.lock();
@@ -20,6 +20,7 @@ pub struct Config {
pub http_port: u16,
pub database_url: String,
pub api_token: String,
+ pub invite_link_prefix: String,
pub honeycomb_api_key: Option<String>,
pub honeycomb_dataset: Option<String>,
pub rust_log: Option<String>,
@@ -29,6 +30,7 @@ pub struct Config {
pub struct AppState {
db: Arc<dyn Db>,
api_token: String,
+ invite_link_prefix: String,
}
impl AppState {
@@ -37,6 +39,7 @@ impl AppState {
let this = Self {
db: Arc::new(db),
api_token: config.api_token.clone(),
+ invite_link_prefix: config.invite_link_prefix.clone(),
};
Ok(Arc::new(this))
}
@@ -57,10 +60,11 @@ async fn main() -> Result<()> {
let listener = TcpListener::bind(&format!("0.0.0.0:{}", config.http_port))
.expect("failed to bind TCP listener");
+ let rpc_server = rpc::Server::new(state.clone(), None);
let app = Router::<Body>::new()
- .merge(api::routes(state.clone()))
- .merge(rpc::routes(state));
+ .merge(api::routes(&rpc_server, state.clone()))
+ .merge(rpc::routes(rpc_server));
axum::Server::from_tcp(listener)?
.serve(app.into_make_service_with_connect_info::<SocketAddr>())
@@ -76,11 +80,26 @@ pub enum Error {
Internal(anyhow::Error),
}
-impl<E> From<E> for Error
-where
- E: Into<anyhow::Error>,
-{
- fn from(error: E) -> Self {
+impl From<anyhow::Error> for Error {
+ fn from(error: anyhow::Error) -> Self {
+ Self::Internal(error)
+ }
+}
+
+impl From<sqlx::Error> for Error {
+ fn from(error: sqlx::Error) -> Self {
+ Self::Internal(error.into())
+ }
+}
+
+impl From<axum::Error> for Error {
+ fn from(error: axum::Error) -> Self {
+ Self::Internal(error.into())
+ }
+}
+
+impl From<hyper::Error> for Error {
+ fn from(error: hyper::Error) -> Self {
Self::Internal(error.into())
}
}
@@ -114,6 +133,8 @@ impl std::fmt::Display for Error {
}
}
+impl std::error::Error for Error {}
+
pub fn init_tracing(config: &Config) -> Option<()> {
use opentelemetry::KeyValue;
use opentelemetry_otlp::WithExportConfig;
@@ -23,7 +23,11 @@ use axum::{
Extension, Router, TypedHeader,
};
use collections::HashMap;
-use futures::{channel::mpsc, future::BoxFuture, FutureExt, SinkExt, StreamExt, TryStreamExt};
+use futures::{
+ channel::mpsc,
+ future::{self, BoxFuture},
+ FutureExt, SinkExt, StreamExt, TryStreamExt,
+};
use lazy_static::lazy_static;
use rpc::{
proto::{self, AnyTypedEnvelope, EntityMessage, EnvelopedMessage, RequestMessage},
@@ -276,12 +280,27 @@ impl Server {
let _ = send_connection_id.send(connection_id).await;
}
- let contacts = this.app_state.db.get_contacts(user_id).await?;
+ if !user.connected_once {
+ this.peer.send(connection_id, proto::ShowContacts {})?;
+ this.app_state.db.set_user_connected_once(user_id, true).await?;
+ }
+
+ let (contacts, invite_code) = future::try_join(
+ this.app_state.db.get_contacts(user_id),
+ this.app_state.db.get_invite_code_for_user(user_id)
+ ).await?;
{
let mut store = this.store_mut().await;
store.add_connection(connection_id, user_id);
this.peer.send(connection_id, store.build_initial_contacts_update(contacts))?;
+
+ if let Some((code, count)) = invite_code {
+ this.peer.send(connection_id, proto::UpdateInviteInfo {
+ url: format!("{}{}", this.app_state.invite_link_prefix, code),
+ count,
+ })?;
+ }
}
this.update_user_contacts(user_id).await?;
@@ -398,6 +417,23 @@ impl Server {
Ok(())
}
+ pub async fn invite_code_redeemed(self: &Arc<Self>, code: &str, invitee_id: UserId) -> Result<()> {
+ let user = self.app_state.db.get_user_for_invite_code(code).await?;
+ let store = self.store().await;
+ let invitee_contact = store.contact_for_user(invitee_id, true);
+ for connection_id in store.connection_ids_for_user(user.id) {
+ self.peer.send(connection_id, proto::UpdateContacts {
+ contacts: vec![invitee_contact.clone()],
+ ..Default::default()
+ })?;
+ self.peer.send(connection_id, proto::UpdateInviteInfo {
+ url: format!("{}{}", self.app_state.invite_link_prefix, code),
+ count: user.invite_count as u32,
+ })?;
+ }
+ Ok(())
+ }
+
async fn ping(
self: Arc<Server>,
_: TypedEnvelope<proto::Ping>,
@@ -1529,13 +1565,12 @@ impl Header for ProtocolVersion {
}
}
-pub fn routes(app_state: Arc<AppState>) -> Router<Body> {
- let server = Server::new(app_state.clone(), None);
+pub fn routes(server: Arc<Server>) -> Router<Body> {
Router::new()
.route("/rpc", get(handle_websocket_request))
.layer(
ServiceBuilder::new()
- .layer(Extension(app_state))
+ .layer(Extension(server.app_state.clone()))
.layer(middleware::from_fn(auth::validate_header))
.layer(Extension(server)),
)
@@ -6039,9 +6074,9 @@ mod tests {
let mut server = TestServer::start(cx.foreground(), cx.background()).await;
let db = server.app_state.db.clone();
- let host_user_id = db.create_user("host", false).await.unwrap();
+ let host_user_id = db.create_user("host", None, false).await.unwrap();
for username in ["guest-1", "guest-2", "guest-3", "guest-4"] {
- let guest_user_id = db.create_user(username, false).await.unwrap();
+ let guest_user_id = db.create_user(username, None, false).await.unwrap();
server
.app_state
.db
@@ -6556,7 +6591,7 @@ mod tests {
if let Ok(Some(user)) = self.app_state.db.get_user_by_github_login(name).await {
user.id
} else {
- self.app_state.db.create_user(name, false).await.unwrap()
+ self.app_state.db.create_user(name, None, false).await.unwrap()
};
let client_name = name.to_string();
let mut client = Client::new(http.clone());
@@ -6687,6 +6722,7 @@ mod tests {
Arc::new(AppState {
db: test_db.db().clone(),
api_token: Default::default(),
+ invite_link_prefix: Default::default(),
})
}
@@ -18,6 +18,7 @@ settings = { path = "../settings" }
theme = { path = "../theme" }
util = { path = "../util" }
workspace = { path = "../workspace" }
+anyhow = "1.0"
futures = "0.3"
log = "0.4"
postage = { version = "0.4.1", features = ["futures-traits"] }
@@ -1,5 +1,7 @@
+use std::sync::Arc;
+
use crate::notifications::render_user_notification;
-use client::{ContactEvent, ContactEventKind, UserStore};
+use client::{ContactEventKind, User, UserStore};
use gpui::{
elements::*, impl_internal_actions, Entity, ModelHandle, MutableAppContext, RenderContext,
View, ViewContext,
@@ -15,7 +17,8 @@ pub fn init(cx: &mut MutableAppContext) {
pub struct ContactNotification {
user_store: ModelHandle<UserStore>,
- event: ContactEvent,
+ user: Arc<User>,
+ kind: client::ContactEventKind,
}
#[derive(Clone)]
@@ -41,27 +44,27 @@ impl View for ContactNotification {
}
fn render(&mut self, cx: &mut RenderContext<Self>) -> ElementBox {
- match self.event.kind {
+ match self.kind {
ContactEventKind::Requested => render_user_notification(
- self.event.user.clone(),
+ self.user.clone(),
"wants to add you as a contact",
Some("They won't know if you decline."),
RespondToContactRequest {
- user_id: self.event.user.id,
+ user_id: self.user.id,
accept: false,
},
vec![
(
"Decline",
Box::new(RespondToContactRequest {
- user_id: self.event.user.id,
+ user_id: self.user.id,
accept: false,
}),
),
(
"Accept",
Box::new(RespondToContactRequest {
- user_id: self.event.user.id,
+ user_id: self.user.id,
accept: true,
}),
),
@@ -69,10 +72,10 @@ impl View for ContactNotification {
cx,
),
ContactEventKind::Accepted => render_user_notification(
- self.event.user.clone(),
+ self.user.clone(),
"accepted your contact request",
None,
- Dismiss(self.event.user.id),
+ Dismiss(self.user.id),
vec![],
cx,
),
@@ -89,30 +92,35 @@ impl Notification for ContactNotification {
impl ContactNotification {
pub fn new(
- event: ContactEvent,
+ user: Arc<User>,
+ kind: client::ContactEventKind,
user_store: ModelHandle<UserStore>,
cx: &mut ViewContext<Self>,
) -> Self {
cx.subscribe(&user_store, move |this, _, event, cx| {
- if let client::ContactEvent {
+ if let client::Event::Contact {
kind: ContactEventKind::Cancelled,
user,
} = event
{
- if user.id == this.event.user.id {
+ if user.id == this.user.id {
cx.emit(Event::Dismiss);
}
}
})
.detach();
- Self { event, user_store }
+ Self {
+ user,
+ kind,
+ user_store,
+ }
}
fn dismiss(&mut self, _: &Dismiss, cx: &mut ViewContext<Self>) {
self.user_store.update(cx, |store, cx| {
store
- .dismiss_contact_request(self.event.user.id, cx)
+ .dismiss_contact_request(self.user.id, cx)
.detach_and_log_err(cx);
});
cx.emit(Event::Dismiss);
@@ -12,8 +12,8 @@ use gpui::{
geometry::{rect::RectF, vector::vec2f},
impl_actions, impl_internal_actions,
platform::CursorStyle,
- AppContext, Element, ElementBox, Entity, LayoutContext, ModelHandle, MutableAppContext,
- RenderContext, Subscription, View, ViewContext, ViewHandle, WeakViewHandle,
+ AppContext, ClipboardItem, Element, ElementBox, Entity, LayoutContext, ModelHandle,
+ MutableAppContext, RenderContext, Subscription, View, ViewContext, ViewHandle, WeakViewHandle,
};
use join_project_notification::JoinProjectNotification;
use serde::Deserialize;
@@ -157,16 +157,28 @@ impl ContactsPanel {
if let Some((workspace, user_store)) =
workspace.upgrade(cx).zip(user_store.upgrade(cx))
{
- workspace.update(cx, |workspace, cx| match event.kind {
- ContactEventKind::Requested | ContactEventKind::Accepted => workspace
- .show_notification(event.user.id as usize, cx, |cx| {
- cx.add_view(|cx| {
- ContactNotification::new(event.clone(), user_store, cx)
- })
- }),
+ workspace.update(cx, |workspace, cx| match event {
+ client::Event::Contact { user, kind } => match kind {
+ ContactEventKind::Requested | ContactEventKind::Accepted => workspace
+ .show_notification(user.id as usize, cx, |cx| {
+ cx.add_view(|cx| {
+ ContactNotification::new(
+ user.clone(),
+ *kind,
+ user_store,
+ cx,
+ )
+ })
+ }),
+ _ => {}
+ },
_ => {}
});
}
+
+ if let client::Event::ShowContacts = event {
+ cx.emit(Event::Activate);
+ }
}
})
.detach();
@@ -793,6 +805,10 @@ impl SidebarItem for ContactsPanel {
fn contains_focused_view(&self, cx: &AppContext) -> bool {
self.filter_editor.is_focused(cx)
}
+
+ fn should_activate_item_on_event(&self, event: &Event, _: &AppContext) -> bool {
+ matches!(event, Event::Activate)
+ }
}
fn render_icon_button(style: &IconButton, svg_path: &'static str) -> impl Element {
@@ -808,7 +824,9 @@ fn render_icon_button(style: &IconButton, svg_path: &'static str) -> impl Elemen
.with_height(style.button_width)
}
-pub enum Event {}
+pub enum Event {
+ Activate,
+}
impl Entity for ContactsPanel {
type Event = Event;
@@ -855,6 +873,59 @@ impl View for ContactsPanel {
.boxed(),
)
.with_child(List::new(self.list_state.clone()).flex(1., false).boxed())
+ .with_children(
+ self.user_store
+ .read(cx)
+ .invite_info()
+ .cloned()
+ .and_then(|info| {
+ enum InviteLink {}
+
+ if info.count > 0 {
+ Some(
+ MouseEventHandler::new::<InviteLink, _, _>(
+ 0,
+ cx,
+ |state, cx| {
+ let style =
+ theme.invite_row.style_for(state, false).clone();
+
+ let copied =
+ cx.read_from_clipboard().map_or(false, |item| {
+ item.text().as_str() == info.url.as_ref()
+ });
+
+ Label::new(
+ format!(
+ "{} invite link ({} left)",
+ if copied { "Copied" } else { "Copy" },
+ info.count
+ ),
+ style.label.clone(),
+ )
+ .aligned()
+ .left()
+ .constrained()
+ .with_height(theme.row_height)
+ .contained()
+ .with_style(style.container)
+ .boxed()
+ },
+ )
+ .with_cursor_style(CursorStyle::PointingHand)
+ .on_click(move |_, cx| {
+ cx.write_to_clipboard(ClipboardItem::new(
+ info.url.to_string(),
+ ));
+ cx.notify();
+ })
+ .boxed(),
+ )
+ } else {
+ None
+ }
+ }),
+ )
.boxed(),
)
.with_style(theme.container)
@@ -87,18 +87,20 @@ message Envelope {
GetChannelMessagesResponse get_channel_messages_response = 75;
UpdateContacts update_contacts = 76;
-
- GetUsers get_users = 77;
- FuzzySearchUsers fuzzy_search_users = 78;
- UsersResponse users_response = 79;
- RequestContact request_contact = 80;
- RespondToContactRequest respond_to_contact_request = 81;
- RemoveContact remove_contact = 82;
-
- Follow follow = 83;
- FollowResponse follow_response = 84;
- UpdateFollowers update_followers = 85;
- Unfollow unfollow = 86;
+ UpdateInviteInfo update_invite_info = 77;
+ ShowContacts show_contacts = 78;
+
+ GetUsers get_users = 79;
+ FuzzySearchUsers fuzzy_search_users = 80;
+ UsersResponse users_response = 81;
+ RequestContact request_contact = 82;
+ RespondToContactRequest respond_to_contact_request = 83;
+ RemoveContact remove_contact = 84;
+
+ Follow follow = 85;
+ FollowResponse follow_response = 86;
+ UpdateFollowers update_followers = 87;
+ Unfollow unfollow = 88;
}
}
@@ -634,6 +636,13 @@ message UpdateContacts {
repeated uint64 remove_outgoing_requests = 6;
}
+message UpdateInviteInfo {
+ string url = 1;
+ uint32 count = 2;
+}
+
+message ShowContacts {}
+
message IncomingContactRequest {
uint64 requester_id = 1;
bool should_notify = 2;
@@ -145,6 +145,7 @@ messages!(
(SearchProjectResponse, Background),
(SendChannelMessage, Foreground),
(SendChannelMessageResponse, Foreground),
+ (ShowContacts, Foreground),
(StartLanguageServer, Foreground),
(Test, Foreground),
(Unfollow, Foreground),
@@ -155,6 +156,7 @@ messages!(
(UpdateContacts, Foreground),
(UpdateDiagnosticSummary, Foreground),
(UpdateFollowers, Foreground),
+ (UpdateInviteInfo, Foreground),
(UpdateLanguageServer, Foreground),
(UpdateWorktree, Foreground),
);
@@ -6,4 +6,4 @@ pub use conn::Connection;
pub use peer::*;
mod macros;
-pub const PROTOCOL_VERSION: u32 = 18;
+pub const PROTOCOL_VERSION: u32 = 19;
@@ -262,6 +262,16 @@ pub struct ContactsPanel {
pub disabled_contact_button: IconButton,
pub tree_branch: Interactive<TreeBranch>,
pub section_icon_size: f32,
+ pub invite_row: Interactive<ContainedLabel>,
+}
+
+#[derive(Deserialize, Default)]
+pub struct InviteLink {
+ #[serde(flatten)]
+ pub container: ContainerStyle,
+ #[serde(flatten)]
+ pub label: LabelStyle,
+ pub icon: Icon,
}
#[derive(Deserialize, Default, Clone, Copy)]
@@ -279,6 +289,15 @@ pub struct ContactFinder {
pub disabled_contact_button: IconButton,
}
+#[derive(Deserialize, Default)]
+pub struct Icon {
+ #[serde(flatten)]
+ pub container: ContainerStyle,
+ pub color: Color,
+ pub width: f32,
+ pub path: String,
+}
+
#[derive(Deserialize, Default)]
pub struct IconButton {
#[serde(flatten)]
@@ -9,6 +9,9 @@ use std::{cell::RefCell, rc::Rc};
use theme::Theme;
pub trait SidebarItem: View {
+ fn should_activate_item_on_event(&self, _: &Self::Event, _: &AppContext) -> bool {
+ false
+ }
fn should_show_badge(&self, cx: &AppContext) -> bool;
fn contains_focused_view(&self, _: &AppContext) -> bool {
false
@@ -16,6 +19,7 @@ pub trait SidebarItem: View {
}
pub trait SidebarItemHandle {
+ fn id(&self) -> usize;
fn should_show_badge(&self, cx: &AppContext) -> bool;
fn is_focused(&self, cx: &AppContext) -> bool;
fn to_any(&self) -> AnyViewHandle;
@@ -25,6 +29,10 @@ impl<T> SidebarItemHandle for ViewHandle<T>
where
T: SidebarItem,
{
+ fn id(&self) -> usize {
+ self.id()
+ }
+
fn should_show_badge(&self, cx: &AppContext) -> bool {
self.read(cx).should_show_badge(cx)
}
@@ -61,7 +69,7 @@ pub enum Side {
struct Item {
icon_path: &'static str,
view: Rc<dyn SidebarItemHandle>,
- _observation: Subscription,
+ _subscriptions: [Subscription; 2],
}
pub struct SidebarButtons {
@@ -99,11 +107,24 @@ impl Sidebar {
view: ViewHandle<T>,
cx: &mut ViewContext<Self>,
) {
- let subscription = cx.observe(&view, |_, _, cx| cx.notify());
+ let subscriptions = [
+ cx.observe(&view, |_, _, cx| cx.notify()),
+ cx.subscribe(&view, |this, view, event, cx| {
+ if view.read(cx).should_activate_item_on_event(event, cx) {
+ if let Some(ix) = this
+ .items
+ .iter()
+ .position(|item| item.view.id() == view.id())
+ {
+ this.activate_item(ix, cx);
+ }
+ }
+ }),
+ ];
self.items.push(Item {
icon_path,
view: Rc::new(view),
- _observation: subscription,
+ _subscriptions: subscriptions,
});
cx.notify()
}
@@ -0,0 +1,519 @@
+{
+ "meta": {
+ "themeName": "cave-dark"
+ },
+ "text": {
+ "primary": {
+ "value": "#e2dfe7",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#8b8792",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#8b8792",
+ "type": "color"
+ },
+ "placeholder": {
+ "value": "#7e7887",
+ "type": "color"
+ },
+ "active": {
+ "value": "#efecf4",
+ "type": "color"
+ },
+ "feature": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#2a9292",
+ "type": "color"
+ },
+ "error": {
+ "value": "#be4678",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#a06e3b",
+ "type": "color"
+ },
+ "info": {
+ "value": "#576ddb",
+ "type": "color"
+ }
+ },
+ "icon": {
+ "primary": {
+ "value": "#e2dfe7",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#8b8792",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#8b8792",
+ "type": "color"
+ },
+ "placeholder": {
+ "value": "#7e7887",
+ "type": "color"
+ },
+ "active": {
+ "value": "#efecf4",
+ "type": "color"
+ },
+ "feature": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#2a9292",
+ "type": "color"
+ },
+ "error": {
+ "value": "#be4678",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#a06e3b",
+ "type": "color"
+ },
+ "info": {
+ "value": "#576ddb",
+ "type": "color"
+ }
+ },
+ "background": {
+ "100": {
+ "base": {
+ "value": "#332f38",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#3f3b45",
+ "type": "color"
+ },
+ "active": {
+ "value": "#4c4653",
+ "type": "color"
+ }
+ },
+ "300": {
+ "base": {
+ "value": "#26232a",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#332f38",
+ "type": "color"
+ },
+ "active": {
+ "value": "#3f3b45",
+ "type": "color"
+ }
+ },
+ "500": {
+ "base": {
+ "value": "#19171c",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#1c1a20",
+ "type": "color"
+ },
+ "active": {
+ "value": "#201d23",
+ "type": "color"
+ }
+ },
+ "on300": {
+ "base": {
+ "value": "#19171c",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#1c1a20",
+ "type": "color"
+ },
+ "active": {
+ "value": "#201d23",
+ "type": "color"
+ }
+ },
+ "on500": {
+ "base": {
+ "value": "#332f38",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#3f3b45",
+ "type": "color"
+ },
+ "active": {
+ "value": "#4c4653",
+ "type": "color"
+ }
+ },
+ "ok": {
+ "base": {
+ "value": "#2a929226",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#2a929233",
+ "type": "color"
+ },
+ "active": {
+ "value": "#2a929240",
+ "type": "color"
+ }
+ },
+ "error": {
+ "base": {
+ "value": "#be467826",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#be467833",
+ "type": "color"
+ },
+ "active": {
+ "value": "#be467840",
+ "type": "color"
+ }
+ },
+ "warning": {
+ "base": {
+ "value": "#a06e3b26",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#a06e3b33",
+ "type": "color"
+ },
+ "active": {
+ "value": "#a06e3b40",
+ "type": "color"
+ }
+ },
+ "info": {
+ "base": {
+ "value": "#576ddb26",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#576ddb33",
+ "type": "color"
+ },
+ "active": {
+ "value": "#576ddb40",
+ "type": "color"
+ }
+ }
+ },
+ "border": {
+ "primary": {
+ "value": "#19171c",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#26232a",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#655f6d",
+ "type": "color"
+ },
+ "active": {
+ "value": "#655f6d",
+ "type": "color"
+ },
+ "onMedia": {
+ "value": "#19171c1a",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#2a929226",
+ "type": "color"
+ },
+ "error": {
+ "value": "#be467826",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#a06e3b26",
+ "type": "color"
+ },
+ "info": {
+ "value": "#576ddb26",
+ "type": "color"
+ }
+ },
+ "editor": {
+ "background": {
+ "value": "#19171c",
+ "type": "color"
+ },
+ "indent_guide": {
+ "value": "#655f6d",
+ "type": "color"
+ },
+ "indent_guide_active": {
+ "value": "#26232a",
+ "type": "color"
+ },
+ "line": {
+ "active": {
+ "value": "#26232a",
+ "type": "color"
+ },
+ "highlighted": {
+ "value": "#332f38",
+ "type": "color"
+ }
+ },
+ "highlight": {
+ "selection": {
+ "value": "#576ddb3d",
+ "type": "color"
+ },
+ "occurrence": {
+ "value": "#5852603d",
+ "type": "color"
+ },
+ "activeOccurrence": {
+ "value": "#5852607a",
+ "type": "color"
+ },
+ "matchingBracket": {
+ "value": "#201d23",
+ "type": "color"
+ },
+ "match": {
+ "value": "#3d1576",
+ "type": "color"
+ },
+ "activeMatch": {
+ "value": "#782edf7a",
+ "type": "color"
+ },
+ "related": {
+ "value": "#1c1a20",
+ "type": "color"
+ }
+ },
+ "gutter": {
+ "primary": {
+ "value": "#7e7887",
+ "type": "color"
+ },
+ "active": {
+ "value": "#efecf4",
+ "type": "color"
+ }
+ }
+ },
+ "syntax": {
+ "primary": {
+ "value": "#efecf4",
+ "type": "color"
+ },
+ "comment": {
+ "value": "#8b8792",
+ "type": "color"
+ },
+ "keyword": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "function": {
+ "value": "#a06e3b",
+ "type": "color"
+ },
+ "type": {
+ "value": "#398bc6",
+ "type": "color"
+ },
+ "variant": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "property": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "enum": {
+ "value": "#aa573c",
+ "type": "color"
+ },
+ "operator": {
+ "value": "#aa573c",
+ "type": "color"
+ },
+ "string": {
+ "value": "#aa573c",
+ "type": "color"
+ },
+ "number": {
+ "value": "#2a9292",
+ "type": "color"
+ },
+ "boolean": {
+ "value": "#2a9292",
+ "type": "color"
+ }
+ },
+ "player": {
+ "1": {
+ "baseColor": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#576ddb3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#576ddbcc",
+ "type": "color"
+ }
+ },
+ "2": {
+ "baseColor": {
+ "value": "#2a9292",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#2a9292",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#2a92923d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#2a9292cc",
+ "type": "color"
+ }
+ },
+ "3": {
+ "baseColor": {
+ "value": "#bf40bf",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#bf40bf",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#bf40bf3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#bf40bfcc",
+ "type": "color"
+ }
+ },
+ "4": {
+ "baseColor": {
+ "value": "#aa573c",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#aa573c",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#aa573c3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#aa573ccc",
+ "type": "color"
+ }
+ },
+ "5": {
+ "baseColor": {
+ "value": "#955ae7",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#955ae7",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#955ae73d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#955ae7cc",
+ "type": "color"
+ }
+ },
+ "6": {
+ "baseColor": {
+ "value": "#398bc6",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#398bc6",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#398bc63d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#398bc6cc",
+ "type": "color"
+ }
+ },
+ "7": {
+ "baseColor": {
+ "value": "#be4678",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#be4678",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#be46783d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#be4678cc",
+ "type": "color"
+ }
+ },
+ "8": {
+ "baseColor": {
+ "value": "#a06e3b",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#a06e3b",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#a06e3b3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#a06e3bcc",
+ "type": "color"
+ }
+ }
+ },
+ "shadowAlpha": {
+ "value": 0.24,
+ "type": "number"
+ }
+}
@@ -0,0 +1,519 @@
+{
+ "meta": {
+ "themeName": "cave-light"
+ },
+ "text": {
+ "primary": {
+ "value": "#26232a",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#585260",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#585260",
+ "type": "color"
+ },
+ "placeholder": {
+ "value": "#655f6d",
+ "type": "color"
+ },
+ "active": {
+ "value": "#19171c",
+ "type": "color"
+ },
+ "feature": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#2a9292",
+ "type": "color"
+ },
+ "error": {
+ "value": "#be4678",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#a06e3b",
+ "type": "color"
+ },
+ "info": {
+ "value": "#576ddb",
+ "type": "color"
+ }
+ },
+ "icon": {
+ "primary": {
+ "value": "#26232a",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#585260",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#585260",
+ "type": "color"
+ },
+ "placeholder": {
+ "value": "#655f6d",
+ "type": "color"
+ },
+ "active": {
+ "value": "#19171c",
+ "type": "color"
+ },
+ "feature": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#2a9292",
+ "type": "color"
+ },
+ "error": {
+ "value": "#be4678",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#a06e3b",
+ "type": "color"
+ },
+ "info": {
+ "value": "#576ddb",
+ "type": "color"
+ }
+ },
+ "background": {
+ "100": {
+ "base": {
+ "value": "#ccc9d2",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#b7b3bd",
+ "type": "color"
+ },
+ "active": {
+ "value": "#a19da7",
+ "type": "color"
+ }
+ },
+ "300": {
+ "base": {
+ "value": "#e2dfe7",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#ccc9d2",
+ "type": "color"
+ },
+ "active": {
+ "value": "#b7b3bd",
+ "type": "color"
+ }
+ },
+ "500": {
+ "base": {
+ "value": "#efecf4",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#ece9f1",
+ "type": "color"
+ },
+ "active": {
+ "value": "#e9e6ee",
+ "type": "color"
+ }
+ },
+ "on300": {
+ "base": {
+ "value": "#efecf4",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#ece9f1",
+ "type": "color"
+ },
+ "active": {
+ "value": "#e9e6ee",
+ "type": "color"
+ }
+ },
+ "on500": {
+ "base": {
+ "value": "#ccc9d2",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#b7b3bd",
+ "type": "color"
+ },
+ "active": {
+ "value": "#a19da7",
+ "type": "color"
+ }
+ },
+ "ok": {
+ "base": {
+ "value": "#2a929226",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#2a929233",
+ "type": "color"
+ },
+ "active": {
+ "value": "#2a929240",
+ "type": "color"
+ }
+ },
+ "error": {
+ "base": {
+ "value": "#be467826",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#be467833",
+ "type": "color"
+ },
+ "active": {
+ "value": "#be467840",
+ "type": "color"
+ }
+ },
+ "warning": {
+ "base": {
+ "value": "#a06e3b26",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#a06e3b33",
+ "type": "color"
+ },
+ "active": {
+ "value": "#a06e3b40",
+ "type": "color"
+ }
+ },
+ "info": {
+ "base": {
+ "value": "#576ddb26",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#576ddb33",
+ "type": "color"
+ },
+ "active": {
+ "value": "#576ddb40",
+ "type": "color"
+ }
+ }
+ },
+ "border": {
+ "primary": {
+ "value": "#b7b3bd",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#ccc9d2",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#e2dfe7",
+ "type": "color"
+ },
+ "active": {
+ "value": "#655f6d",
+ "type": "color"
+ },
+ "onMedia": {
+ "value": "#efecf41a",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#2a929226",
+ "type": "color"
+ },
+ "error": {
+ "value": "#be467826",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#a06e3b26",
+ "type": "color"
+ },
+ "info": {
+ "value": "#576ddb26",
+ "type": "color"
+ }
+ },
+ "editor": {
+ "background": {
+ "value": "#efecf4",
+ "type": "color"
+ },
+ "indent_guide": {
+ "value": "#e2dfe7",
+ "type": "color"
+ },
+ "indent_guide_active": {
+ "value": "#ccc9d2",
+ "type": "color"
+ },
+ "line": {
+ "active": {
+ "value": "#e2dfe7",
+ "type": "color"
+ },
+ "highlighted": {
+ "value": "#ccc9d2",
+ "type": "color"
+ }
+ },
+ "highlight": {
+ "selection": {
+ "value": "#576ddb3d",
+ "type": "color"
+ },
+ "occurrence": {
+ "value": "#8b87921f",
+ "type": "color"
+ },
+ "activeOccurrence": {
+ "value": "#8b87923d",
+ "type": "color"
+ },
+ "matchingBracket": {
+ "value": "#e9e6ee",
+ "type": "color"
+ },
+ "match": {
+ "value": "#d5bdfa",
+ "type": "color"
+ },
+ "activeMatch": {
+ "value": "#a775ee3d",
+ "type": "color"
+ },
+ "related": {
+ "value": "#ece9f1",
+ "type": "color"
+ }
+ },
+ "gutter": {
+ "primary": {
+ "value": "#655f6d",
+ "type": "color"
+ },
+ "active": {
+ "value": "#19171c",
+ "type": "color"
+ }
+ }
+ },
+ "syntax": {
+ "primary": {
+ "value": "#19171c",
+ "type": "color"
+ },
+ "comment": {
+ "value": "#585260",
+ "type": "color"
+ },
+ "keyword": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "function": {
+ "value": "#a06e3b",
+ "type": "color"
+ },
+ "type": {
+ "value": "#398bc6",
+ "type": "color"
+ },
+ "variant": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "property": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "enum": {
+ "value": "#aa573c",
+ "type": "color"
+ },
+ "operator": {
+ "value": "#aa573c",
+ "type": "color"
+ },
+ "string": {
+ "value": "#aa573c",
+ "type": "color"
+ },
+ "number": {
+ "value": "#2a9292",
+ "type": "color"
+ },
+ "boolean": {
+ "value": "#2a9292",
+ "type": "color"
+ }
+ },
+ "player": {
+ "1": {
+ "baseColor": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#576ddb",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#576ddb3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#576ddbcc",
+ "type": "color"
+ }
+ },
+ "2": {
+ "baseColor": {
+ "value": "#2a9292",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#2a9292",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#2a92923d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#2a9292cc",
+ "type": "color"
+ }
+ },
+ "3": {
+ "baseColor": {
+ "value": "#bf40bf",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#bf40bf",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#bf40bf3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#bf40bfcc",
+ "type": "color"
+ }
+ },
+ "4": {
+ "baseColor": {
+ "value": "#aa573c",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#aa573c",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#aa573c3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#aa573ccc",
+ "type": "color"
+ }
+ },
+ "5": {
+ "baseColor": {
+ "value": "#955ae7",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#955ae7",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#955ae73d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#955ae7cc",
+ "type": "color"
+ }
+ },
+ "6": {
+ "baseColor": {
+ "value": "#398bc6",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#398bc6",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#398bc63d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#398bc6cc",
+ "type": "color"
+ }
+ },
+ "7": {
+ "baseColor": {
+ "value": "#be4678",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#be4678",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#be46783d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#be4678cc",
+ "type": "color"
+ }
+ },
+ "8": {
+ "baseColor": {
+ "value": "#a06e3b",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#a06e3b",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#a06e3b3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#a06e3bcc",
+ "type": "color"
+ }
+ }
+ },
+ "shadowAlpha": {
+ "value": 0.12,
+ "type": "number"
+ }
+}
@@ -216,15 +216,15 @@
},
"border": {
"primary": {
- "value": "#93a1a1",
+ "value": "#c1c5bb",
"type": "color"
},
"secondary": {
- "value": "#93a1a1",
+ "value": "#d7d6c8",
"type": "color"
},
"muted": {
- "value": "#657b83",
+ "value": "#eee8d5",
"type": "color"
},
"active": {
@@ -258,11 +258,11 @@
"type": "color"
},
"indent_guide": {
- "value": "#657b83",
+ "value": "#eee8d5",
"type": "color"
},
"indent_guide_active": {
- "value": "#93a1a1",
+ "value": "#d7d6c8",
"type": "color"
},
"line": {
@@ -0,0 +1,519 @@
+{
+ "meta": {
+ "themeName": "sulphurpool-dark"
+ },
+ "text": {
+ "primary": {
+ "value": "#dfe2f1",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#979db4",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#979db4",
+ "type": "color"
+ },
+ "placeholder": {
+ "value": "#898ea4",
+ "type": "color"
+ },
+ "active": {
+ "value": "#f5f7ff",
+ "type": "color"
+ },
+ "feature": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#ac9739",
+ "type": "color"
+ },
+ "error": {
+ "value": "#c94922",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#c08b30",
+ "type": "color"
+ },
+ "info": {
+ "value": "#3d8fd1",
+ "type": "color"
+ }
+ },
+ "icon": {
+ "primary": {
+ "value": "#dfe2f1",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#979db4",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#979db4",
+ "type": "color"
+ },
+ "placeholder": {
+ "value": "#898ea4",
+ "type": "color"
+ },
+ "active": {
+ "value": "#f5f7ff",
+ "type": "color"
+ },
+ "feature": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#ac9739",
+ "type": "color"
+ },
+ "error": {
+ "value": "#c94922",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#c08b30",
+ "type": "color"
+ },
+ "info": {
+ "value": "#3d8fd1",
+ "type": "color"
+ }
+ },
+ "background": {
+ "100": {
+ "base": {
+ "value": "#363f62",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#444c6f",
+ "type": "color"
+ },
+ "active": {
+ "value": "#51597b",
+ "type": "color"
+ }
+ },
+ "300": {
+ "base": {
+ "value": "#293256",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#363f62",
+ "type": "color"
+ },
+ "active": {
+ "value": "#444c6f",
+ "type": "color"
+ }
+ },
+ "500": {
+ "base": {
+ "value": "#202746",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#222a4a",
+ "type": "color"
+ },
+ "active": {
+ "value": "#252d4e",
+ "type": "color"
+ }
+ },
+ "on300": {
+ "base": {
+ "value": "#202746",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#222a4a",
+ "type": "color"
+ },
+ "active": {
+ "value": "#252d4e",
+ "type": "color"
+ }
+ },
+ "on500": {
+ "base": {
+ "value": "#363f62",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#444c6f",
+ "type": "color"
+ },
+ "active": {
+ "value": "#51597b",
+ "type": "color"
+ }
+ },
+ "ok": {
+ "base": {
+ "value": "#ac973926",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#ac973933",
+ "type": "color"
+ },
+ "active": {
+ "value": "#ac973940",
+ "type": "color"
+ }
+ },
+ "error": {
+ "base": {
+ "value": "#c9492226",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#c9492233",
+ "type": "color"
+ },
+ "active": {
+ "value": "#c9492240",
+ "type": "color"
+ }
+ },
+ "warning": {
+ "base": {
+ "value": "#c08b3026",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#c08b3033",
+ "type": "color"
+ },
+ "active": {
+ "value": "#c08b3040",
+ "type": "color"
+ }
+ },
+ "info": {
+ "base": {
+ "value": "#3d8fd126",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#3d8fd133",
+ "type": "color"
+ },
+ "active": {
+ "value": "#3d8fd140",
+ "type": "color"
+ }
+ }
+ },
+ "border": {
+ "primary": {
+ "value": "#202746",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#293256",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#6b7394",
+ "type": "color"
+ },
+ "active": {
+ "value": "#6b7394",
+ "type": "color"
+ },
+ "onMedia": {
+ "value": "#2027461a",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#ac973926",
+ "type": "color"
+ },
+ "error": {
+ "value": "#c9492226",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#c08b3026",
+ "type": "color"
+ },
+ "info": {
+ "value": "#3d8fd126",
+ "type": "color"
+ }
+ },
+ "editor": {
+ "background": {
+ "value": "#202746",
+ "type": "color"
+ },
+ "indent_guide": {
+ "value": "#6b7394",
+ "type": "color"
+ },
+ "indent_guide_active": {
+ "value": "#293256",
+ "type": "color"
+ },
+ "line": {
+ "active": {
+ "value": "#293256",
+ "type": "color"
+ },
+ "highlighted": {
+ "value": "#363f62",
+ "type": "color"
+ }
+ },
+ "highlight": {
+ "selection": {
+ "value": "#3d8fd13d",
+ "type": "color"
+ },
+ "occurrence": {
+ "value": "#5e66873d",
+ "type": "color"
+ },
+ "activeOccurrence": {
+ "value": "#5e66877a",
+ "type": "color"
+ },
+ "matchingBracket": {
+ "value": "#252d4e",
+ "type": "color"
+ },
+ "match": {
+ "value": "#1a2a6d",
+ "type": "color"
+ },
+ "activeMatch": {
+ "value": "#3d56c47a",
+ "type": "color"
+ },
+ "related": {
+ "value": "#222a4a",
+ "type": "color"
+ }
+ },
+ "gutter": {
+ "primary": {
+ "value": "#898ea4",
+ "type": "color"
+ },
+ "active": {
+ "value": "#f5f7ff",
+ "type": "color"
+ }
+ }
+ },
+ "syntax": {
+ "primary": {
+ "value": "#f5f7ff",
+ "type": "color"
+ },
+ "comment": {
+ "value": "#979db4",
+ "type": "color"
+ },
+ "keyword": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "function": {
+ "value": "#c08b30",
+ "type": "color"
+ },
+ "type": {
+ "value": "#22a2c9",
+ "type": "color"
+ },
+ "variant": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "property": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "enum": {
+ "value": "#c76b29",
+ "type": "color"
+ },
+ "operator": {
+ "value": "#c76b29",
+ "type": "color"
+ },
+ "string": {
+ "value": "#c76b29",
+ "type": "color"
+ },
+ "number": {
+ "value": "#ac9739",
+ "type": "color"
+ },
+ "boolean": {
+ "value": "#ac9739",
+ "type": "color"
+ }
+ },
+ "player": {
+ "1": {
+ "baseColor": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#3d8fd13d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#3d8fd1cc",
+ "type": "color"
+ }
+ },
+ "2": {
+ "baseColor": {
+ "value": "#ac9739",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#ac9739",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#ac97393d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#ac9739cc",
+ "type": "color"
+ }
+ },
+ "3": {
+ "baseColor": {
+ "value": "#9c637a",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#9c637a",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#9c637a3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#9c637acc",
+ "type": "color"
+ }
+ },
+ "4": {
+ "baseColor": {
+ "value": "#c76b29",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#c76b29",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#c76b293d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#c76b29cc",
+ "type": "color"
+ }
+ },
+ "5": {
+ "baseColor": {
+ "value": "#6679cc",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#6679cc",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#6679cc3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#6679cccc",
+ "type": "color"
+ }
+ },
+ "6": {
+ "baseColor": {
+ "value": "#22a2c9",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#22a2c9",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#22a2c93d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#22a2c9cc",
+ "type": "color"
+ }
+ },
+ "7": {
+ "baseColor": {
+ "value": "#c94922",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#c94922",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#c949223d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#c94922cc",
+ "type": "color"
+ }
+ },
+ "8": {
+ "baseColor": {
+ "value": "#c08b30",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#c08b30",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#c08b303d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#c08b30cc",
+ "type": "color"
+ }
+ }
+ },
+ "shadowAlpha": {
+ "value": 0.24,
+ "type": "number"
+ }
+}
@@ -0,0 +1,519 @@
+{
+ "meta": {
+ "themeName": "sulphurpool-light"
+ },
+ "text": {
+ "primary": {
+ "value": "#293256",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#5e6687",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#5e6687",
+ "type": "color"
+ },
+ "placeholder": {
+ "value": "#6b7394",
+ "type": "color"
+ },
+ "active": {
+ "value": "#202746",
+ "type": "color"
+ },
+ "feature": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#ac9739",
+ "type": "color"
+ },
+ "error": {
+ "value": "#c94922",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#c08b30",
+ "type": "color"
+ },
+ "info": {
+ "value": "#3d8fd1",
+ "type": "color"
+ }
+ },
+ "icon": {
+ "primary": {
+ "value": "#293256",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#5e6687",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#5e6687",
+ "type": "color"
+ },
+ "placeholder": {
+ "value": "#6b7394",
+ "type": "color"
+ },
+ "active": {
+ "value": "#202746",
+ "type": "color"
+ },
+ "feature": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#ac9739",
+ "type": "color"
+ },
+ "error": {
+ "value": "#c94922",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#c08b30",
+ "type": "color"
+ },
+ "info": {
+ "value": "#3d8fd1",
+ "type": "color"
+ }
+ },
+ "background": {
+ "100": {
+ "base": {
+ "value": "#cdd1e2",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#bbc0d3",
+ "type": "color"
+ },
+ "active": {
+ "value": "#a9aec3",
+ "type": "color"
+ }
+ },
+ "300": {
+ "base": {
+ "value": "#dfe2f1",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#cdd1e2",
+ "type": "color"
+ },
+ "active": {
+ "value": "#bbc0d3",
+ "type": "color"
+ }
+ },
+ "500": {
+ "base": {
+ "value": "#f5f7ff",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#f0f2fc",
+ "type": "color"
+ },
+ "active": {
+ "value": "#eaedf8",
+ "type": "color"
+ }
+ },
+ "on300": {
+ "base": {
+ "value": "#f5f7ff",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#f0f2fc",
+ "type": "color"
+ },
+ "active": {
+ "value": "#eaedf8",
+ "type": "color"
+ }
+ },
+ "on500": {
+ "base": {
+ "value": "#cdd1e2",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#bbc0d3",
+ "type": "color"
+ },
+ "active": {
+ "value": "#a9aec3",
+ "type": "color"
+ }
+ },
+ "ok": {
+ "base": {
+ "value": "#ac973926",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#ac973933",
+ "type": "color"
+ },
+ "active": {
+ "value": "#ac973940",
+ "type": "color"
+ }
+ },
+ "error": {
+ "base": {
+ "value": "#c9492226",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#c9492233",
+ "type": "color"
+ },
+ "active": {
+ "value": "#c9492240",
+ "type": "color"
+ }
+ },
+ "warning": {
+ "base": {
+ "value": "#c08b3026",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#c08b3033",
+ "type": "color"
+ },
+ "active": {
+ "value": "#c08b3040",
+ "type": "color"
+ }
+ },
+ "info": {
+ "base": {
+ "value": "#3d8fd126",
+ "type": "color"
+ },
+ "hovered": {
+ "value": "#3d8fd133",
+ "type": "color"
+ },
+ "active": {
+ "value": "#3d8fd140",
+ "type": "color"
+ }
+ }
+ },
+ "border": {
+ "primary": {
+ "value": "#bbc0d3",
+ "type": "color"
+ },
+ "secondary": {
+ "value": "#cdd1e2",
+ "type": "color"
+ },
+ "muted": {
+ "value": "#dfe2f1",
+ "type": "color"
+ },
+ "active": {
+ "value": "#6b7394",
+ "type": "color"
+ },
+ "onMedia": {
+ "value": "#f5f7ff1a",
+ "type": "color"
+ },
+ "ok": {
+ "value": "#ac973926",
+ "type": "color"
+ },
+ "error": {
+ "value": "#c9492226",
+ "type": "color"
+ },
+ "warning": {
+ "value": "#c08b3026",
+ "type": "color"
+ },
+ "info": {
+ "value": "#3d8fd126",
+ "type": "color"
+ }
+ },
+ "editor": {
+ "background": {
+ "value": "#f5f7ff",
+ "type": "color"
+ },
+ "indent_guide": {
+ "value": "#dfe2f1",
+ "type": "color"
+ },
+ "indent_guide_active": {
+ "value": "#cdd1e2",
+ "type": "color"
+ },
+ "line": {
+ "active": {
+ "value": "#dfe2f1",
+ "type": "color"
+ },
+ "highlighted": {
+ "value": "#cdd1e2",
+ "type": "color"
+ }
+ },
+ "highlight": {
+ "selection": {
+ "value": "#3d8fd13d",
+ "type": "color"
+ },
+ "occurrence": {
+ "value": "#979db41f",
+ "type": "color"
+ },
+ "activeOccurrence": {
+ "value": "#979db43d",
+ "type": "color"
+ },
+ "matchingBracket": {
+ "value": "#eaedf8",
+ "type": "color"
+ },
+ "match": {
+ "value": "#bcc6f7",
+ "type": "color"
+ },
+ "activeMatch": {
+ "value": "#7b8ddc3d",
+ "type": "color"
+ },
+ "related": {
+ "value": "#f0f2fc",
+ "type": "color"
+ }
+ },
+ "gutter": {
+ "primary": {
+ "value": "#6b7394",
+ "type": "color"
+ },
+ "active": {
+ "value": "#202746",
+ "type": "color"
+ }
+ }
+ },
+ "syntax": {
+ "primary": {
+ "value": "#202746",
+ "type": "color"
+ },
+ "comment": {
+ "value": "#5e6687",
+ "type": "color"
+ },
+ "keyword": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "function": {
+ "value": "#c08b30",
+ "type": "color"
+ },
+ "type": {
+ "value": "#22a2c9",
+ "type": "color"
+ },
+ "variant": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "property": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "enum": {
+ "value": "#c76b29",
+ "type": "color"
+ },
+ "operator": {
+ "value": "#c76b29",
+ "type": "color"
+ },
+ "string": {
+ "value": "#c76b29",
+ "type": "color"
+ },
+ "number": {
+ "value": "#ac9739",
+ "type": "color"
+ },
+ "boolean": {
+ "value": "#ac9739",
+ "type": "color"
+ }
+ },
+ "player": {
+ "1": {
+ "baseColor": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#3d8fd1",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#3d8fd13d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#3d8fd1cc",
+ "type": "color"
+ }
+ },
+ "2": {
+ "baseColor": {
+ "value": "#ac9739",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#ac9739",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#ac97393d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#ac9739cc",
+ "type": "color"
+ }
+ },
+ "3": {
+ "baseColor": {
+ "value": "#9c637a",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#9c637a",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#9c637a3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#9c637acc",
+ "type": "color"
+ }
+ },
+ "4": {
+ "baseColor": {
+ "value": "#c76b29",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#c76b29",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#c76b293d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#c76b29cc",
+ "type": "color"
+ }
+ },
+ "5": {
+ "baseColor": {
+ "value": "#6679cc",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#6679cc",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#6679cc3d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#6679cccc",
+ "type": "color"
+ }
+ },
+ "6": {
+ "baseColor": {
+ "value": "#22a2c9",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#22a2c9",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#22a2c93d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#22a2c9cc",
+ "type": "color"
+ }
+ },
+ "7": {
+ "baseColor": {
+ "value": "#c94922",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#c94922",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#c949223d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#c94922cc",
+ "type": "color"
+ }
+ },
+ "8": {
+ "baseColor": {
+ "value": "#c08b30",
+ "type": "color"
+ },
+ "cursorColor": {
+ "value": "#c08b30",
+ "type": "color"
+ },
+ "selectionColor": {
+ "value": "#c08b303d",
+ "type": "color"
+ },
+ "borderColor": {
+ "value": "#c08b30cc",
+ "type": "color"
+ }
+ }
+ },
+ "shadowAlpha": {
+ "value": 0.12,
+ "type": "number"
+ }
+}
@@ -1917,15 +1917,15 @@
},
"border": {
"primary": {
- "value": "#8b8792",
+ "value": "#b7b3bd",
"type": "color"
},
"secondary": {
- "value": "#8b8792",
+ "value": "#ccc9d2",
"type": "color"
},
"muted": {
- "value": "#655f6d",
+ "value": "#e2dfe7",
"type": "color"
},
"active": {
@@ -1959,11 +1959,11 @@
"type": "color"
},
"indent_guide": {
- "value": "#655f6d",
+ "value": "#e2dfe7",
"type": "color"
},
"indent_guide_active": {
- "value": "#8b8792",
+ "value": "#ccc9d2",
"type": "color"
},
"line": {
@@ -2955,15 +2955,15 @@
},
"border": {
"primary": {
- "value": "#93a1a1",
+ "value": "#c1c5bb",
"type": "color"
},
"secondary": {
- "value": "#93a1a1",
+ "value": "#d7d6c8",
"type": "color"
},
"muted": {
- "value": "#657b83",
+ "value": "#eee8d5",
"type": "color"
},
"active": {
@@ -2997,11 +2997,11 @@
"type": "color"
},
"indent_guide": {
- "value": "#657b83",
+ "value": "#eee8d5",
"type": "color"
},
"indent_guide_active": {
- "value": "#93a1a1",
+ "value": "#d7d6c8",
"type": "color"
},
"line": {
@@ -3993,15 +3993,15 @@
},
"border": {
"primary": {
- "value": "#979db4",
+ "value": "#bbc0d3",
"type": "color"
},
"secondary": {
- "value": "#979db4",
+ "value": "#cdd1e2",
"type": "color"
},
"muted": {
- "value": "#6b7394",
+ "value": "#dfe2f1",
"type": "color"
},
"active": {
@@ -4035,11 +4035,11 @@
"type": "color"
},
"indent_guide": {
- "value": "#6b7394",
+ "value": "#dfe2f1",
"type": "color"
},
"indent_guide_active": {
- "value": "#979db4",
+ "value": "#cdd1e2",
"type": "color"
},
"line": {
@@ -42,6 +42,7 @@ export default function contactsPanel(theme: Theme) {
return {
...panel,
+ padding: { top: panel.padding.top, bottom: 0 },
userQueryEditor: {
background: backgroundColor(theme, 500),
cornerRadius: 6,
@@ -136,5 +137,16 @@ export default function contactsPanel(theme: Theme) {
background: backgroundColor(theme, 300, "active"),
}
},
+ inviteRow: {
+ padding: {
+ left: sidePadding,
+ right: sidePadding
+ },
+ border: { top: true, width: 1, color: borderColor(theme, "primary") },
+ text: text(theme, "sans", "primary", { size: "sm" }),
+ hover: {
+ text: text(theme, "sans", "primary", { size: "sm", underline: true })
+ }
+ }
}
}