diff --git a/Cargo.lock b/Cargo.lock index 454db4c7b1..e9f385b173 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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" diff --git a/assets/themes/cave-dark.json b/assets/themes/cave-dark.json new file mode 100644 index 0000000000..8d4824e452 --- /dev/null +++ b/assets/themes/cave-dark.json @@ -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" + } + } + } +} \ No newline at end of file diff --git a/assets/themes/cave-light.json b/assets/themes/cave-light.json new file mode 100644 index 0000000000..227109be3d --- /dev/null +++ b/assets/themes/cave-light.json @@ -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" + } + } + } +} \ No newline at end of file diff --git a/assets/themes/solarized-dark.json b/assets/themes/solarized-dark.json new file mode 100644 index 0000000000..406787423f --- /dev/null +++ b/assets/themes/solarized-dark.json @@ -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" + } + } + } +} \ No newline at end of file diff --git a/assets/themes/solarized-light.json b/assets/themes/solarized-light.json new file mode 100644 index 0000000000..60ea14702f --- /dev/null +++ b/assets/themes/solarized-light.json @@ -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" + } + } + } +} \ No newline at end of file diff --git a/assets/themes/sulphurpool-dark.json b/assets/themes/sulphurpool-dark.json new file mode 100644 index 0000000000..58f4a8da7b --- /dev/null +++ b/assets/themes/sulphurpool-dark.json @@ -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" + } + } + } +} \ No newline at end of file diff --git a/assets/themes/sulphurpool-light.json b/assets/themes/sulphurpool-light.json new file mode 100644 index 0000000000..f14526f840 --- /dev/null +++ b/assets/themes/sulphurpool-light.json @@ -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" + } + } + } +} \ No newline at end of file diff --git a/crates/client/src/user.rs b/crates/client/src/user.rs index 08092f46f1..b8a320f524 100644 --- a/crates/client/src/user.rs +++ b/crates/client/src/user.rs @@ -65,6 +65,7 @@ pub struct UserStore { incoming_contact_requests: Vec>, outgoing_contact_requests: Vec>, pending_contact_requests: HashMap, + invite_info: Option, client: Weak, http: Arc, _maintain_contacts: Task<()>, @@ -72,9 +73,17 @@ pub struct UserStore { } #[derive(Clone)] -pub struct ContactEvent { - pub user: Arc, - pub kind: ContactEventKind, +pub struct InviteInfo { + pub count: u32, + pub url: Arc, +} + +pub enum Event { + Contact { + user: Arc, + 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, + message: TypedEnvelope, + _: Arc, + 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, + _: TypedEnvelope, + _: Arc, + 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, - msg: TypedEnvelope, + message: TypedEnvelope, _: Arc, 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, }); diff --git a/crates/collab/.env.template.toml b/crates/collab/.env.template.toml index fab50d3021..98198eb775 100644 --- a/crates/collab/.env.template.toml +++ b/crates/collab/.env.template.toml @@ -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 diff --git a/crates/collab/Cargo.toml b/crates/collab/Cargo.toml index db8386330a..5ebde4a37d 100644 --- a/crates/collab/Cargo.toml +++ b/crates/collab/Cargo.toml @@ -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" diff --git a/crates/collab/k8s/environments/production.sh b/crates/collab/k8s/environments/production.sh index 039c1f60a5..85fdf4ee62 100644 --- a/crates/collab/k8s/environments/production.sh +++ b/crates/collab/k8s/environments/production.sh @@ -1,2 +1,3 @@ ZED_ENVIRONMENT=production RUST_LOG=info,rpc=debug +INVITE_LINK_PREFIX=https://zed.dev/invites/ diff --git a/crates/collab/k8s/environments/staging.sh b/crates/collab/k8s/environments/staging.sh index ece0851ea1..460f14060a 100644 --- a/crates/collab/k8s/environments/staging.sh +++ b/crates/collab/k8s/environments/staging.sh @@ -1,2 +1,3 @@ ZED_ENVIRONMENT=staging RUST_LOG=info,rpc=debug +INVITE_LINK_PREFIX=https://staging.zed.dev/invites/ diff --git a/crates/collab/k8s/manifest.template.yml b/crates/collab/k8s/manifest.template.yml index 861bd5e783..9387f232d1 100644 --- a/crates/collab/k8s/manifest.template.yml +++ b/crates/collab/k8s/manifest.template.yml @@ -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 diff --git a/crates/collab/migrations/20220518151305_add_invites_to_users.sql b/crates/collab/migrations/20220518151305_add_invites_to_users.sql new file mode 100644 index 0000000000..2ac89b649e --- /dev/null +++ b/crates/collab/migrations/20220518151305_add_invites_to_users.sql @@ -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"); diff --git a/crates/collab/migrations/20220523232954_allow_user_deletes.sql b/crates/collab/migrations/20220523232954_allow_user_deletes.sql new file mode 100644 index 0000000000..ddf3f6f9bd --- /dev/null +++ b/crates/collab/migrations/20220523232954_allow_user_deletes.sql @@ -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; diff --git a/crates/collab/src/api.rs b/crates/collab/src/api.rs index 98c6ca6c84..67c56e78ee 100644 --- a/crates/collab/src/api.rs +++ b/crates/collab/src/api.rs @@ -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) -> Router { +pub fn routes(rpc_server: &Arc, state: Arc) -> Router { Router::new() .route("/users", get(get_users).post(create_user)) .route( @@ -26,13 +27,14 @@ pub fn routes(state: Arc) -> Router { 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(req: Request, next: Next) -> impl IntoResponse { @@ -71,20 +73,44 @@ async fn get_users(Extension(app): Extension>) -> Result, + email_address: Option, admin: bool, } async fn create_user( Json(params): Json, Extension(app): Extension>, + Extension(rpc_server): Extension>, ) -> Result> { - 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, + invite_count: Option, } async fn update_user( @@ -105,9 +132,16 @@ async fn update_user( Json(params): Json, Extension(app): Extension>, ) -> 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, + Extension(app): Extension>, +) -> Result> { + Ok(Json(app.db.get_user_for_invite_code(&code).await?)) +} diff --git a/crates/collab/src/auth.rs b/crates/collab/src/auth.rs index 686a07bbf5..b61043109b 100644 --- a/crates/collab/src/auth.rs +++ b/crates/collab/src/auth.rs @@ -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 { 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 Result { - 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()) } diff --git a/crates/collab/src/db.rs b/crates/collab/src/db.rs index 056f94ecfe..fc8c3f8d3e 100644 --- a/crates/collab/src/db.rs +++ b/crates/collab/src/db.rs @@ -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; + async fn create_user( + &self, + github_login: &str, + email_address: Option<&str>, + admin: bool, + ) -> Result; async fn get_all_users(&self) -> Result>; async fn fuzzy_search_users(&self, query: &str, limit: u32) -> Result>; async fn get_user_by_id(&self, id: UserId) -> Result>; async fn get_users_by_ids(&self, ids: Vec) -> Result>; async fn get_user_by_github_login(&self, github_login: &str) -> Result>; 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>; + async fn get_user_for_invite_code(&self, code: &str) -> Result; + async fn redeem_invite_code( + &self, + code: &str, + login: &str, + email_address: Option<&str>, + ) -> Result; + async fn get_contacts(&self, id: UserId) -> Result>; async fn has_contact(&self, user_id_a: UserId, user_id_b: UserId) -> Result; 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 { + async fn create_user( + &self, + github_login: &str, + email_address: Option<&str>, + admin: bool, + ) -> Result { 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> { + 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 { + 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 { + let mut tx = self.pool.begin().await?; + + let inviter_id: Option = 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> { @@ -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, pub admin: bool, + pub invite_code: Option, + 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>, 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 { + async fn create_user( + &self, + github_login: &str, + email_address: Option<&str>, + admin: bool, + ) -> Result { 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> { + Ok(None) + } + + async fn get_user_for_invite_code(&self, _code: &str) -> Result { + unimplemented!() + } + + async fn redeem_invite_code( + &self, + _code: &str, + _login: &str, + _email_address: Option<&str>, + ) -> Result { + unimplemented!() + } + + // contacts + async fn get_contacts(&self, id: UserId) -> Result> { 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 { 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 { 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(); diff --git a/crates/collab/src/main.rs b/crates/collab/src/main.rs index 36a902565f..617f1f273f 100644 --- a/crates/collab/src/main.rs +++ b/crates/collab/src/main.rs @@ -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, pub honeycomb_dataset: Option, pub rust_log: Option, @@ -29,6 +30,7 @@ pub struct Config { pub struct AppState { db: Arc, 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::::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::()) @@ -76,11 +80,26 @@ pub enum Error { Internal(anyhow::Error), } -impl From for Error -where - E: Into, -{ - fn from(error: E) -> Self { +impl From for Error { + fn from(error: anyhow::Error) -> Self { + Self::Internal(error) + } +} + +impl From for Error { + fn from(error: sqlx::Error) -> Self { + Self::Internal(error.into()) + } +} + +impl From for Error { + fn from(error: axum::Error) -> Self { + Self::Internal(error.into()) + } +} + +impl From 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; diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 083c6a0184..d882368438 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -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, 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, _: TypedEnvelope, @@ -1529,13 +1565,12 @@ impl Header for ProtocolVersion { } } -pub fn routes(app_state: Arc) -> Router { - let server = Server::new(app_state.clone(), None); +pub fn routes(server: Arc) -> Router { 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(), }) } diff --git a/crates/contacts_panel/Cargo.toml b/crates/contacts_panel/Cargo.toml index b6d7bf63fc..800bad497d 100644 --- a/crates/contacts_panel/Cargo.toml +++ b/crates/contacts_panel/Cargo.toml @@ -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"] } diff --git a/crates/contacts_panel/src/contact_notification.rs b/crates/contacts_panel/src/contact_notification.rs index 2d408da0c2..a1eeb365f5 100644 --- a/crates/contacts_panel/src/contact_notification.rs +++ b/crates/contacts_panel/src/contact_notification.rs @@ -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, - event: ContactEvent, + user: Arc, + kind: client::ContactEventKind, } #[derive(Clone)] @@ -41,27 +44,27 @@ impl View for ContactNotification { } fn render(&mut self, cx: &mut RenderContext) -> 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, + kind: client::ContactEventKind, user_store: ModelHandle, cx: &mut ViewContext, ) -> 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.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); diff --git a/crates/contacts_panel/src/contacts_panel.rs b/crates/contacts_panel/src/contacts_panel.rs index 51cf95f5ec..44aa0626c5 100644 --- a/crates/contacts_panel/src/contacts_panel.rs +++ b/crates/contacts_panel/src/contacts_panel.rs @@ -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::( + 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) diff --git a/crates/rpc/proto/zed.proto b/crates/rpc/proto/zed.proto index d2ab7d99ac..0fee451c0d 100644 --- a/crates/rpc/proto/zed.proto +++ b/crates/rpc/proto/zed.proto @@ -87,18 +87,20 @@ message Envelope { GetChannelMessagesResponse get_channel_messages_response = 75; UpdateContacts update_contacts = 76; + UpdateInviteInfo update_invite_info = 77; + ShowContacts show_contacts = 78; - 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; + 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 = 83; - FollowResponse follow_response = 84; - UpdateFollowers update_followers = 85; - Unfollow unfollow = 86; + 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; diff --git a/crates/rpc/src/proto.rs b/crates/rpc/src/proto.rs index a1b7425b69..67a12fcd87 100644 --- a/crates/rpc/src/proto.rs +++ b/crates/rpc/src/proto.rs @@ -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), ); diff --git a/crates/rpc/src/rpc.rs b/crates/rpc/src/rpc.rs index 1d4416d775..175661aacf 100644 --- a/crates/rpc/src/rpc.rs +++ b/crates/rpc/src/rpc.rs @@ -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; diff --git a/crates/theme/src/theme.rs b/crates/theme/src/theme.rs index a8b2dfbf4e..1295645c33 100644 --- a/crates/theme/src/theme.rs +++ b/crates/theme/src/theme.rs @@ -262,6 +262,16 @@ pub struct ContactsPanel { pub disabled_contact_button: IconButton, pub tree_branch: Interactive, pub section_icon_size: f32, + pub invite_row: Interactive, +} + +#[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)] diff --git a/crates/workspace/src/sidebar.rs b/crates/workspace/src/sidebar.rs index 685782a2d2..afdacc2a31 100644 --- a/crates/workspace/src/sidebar.rs +++ b/crates/workspace/src/sidebar.rs @@ -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 SidebarItemHandle for ViewHandle 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, - _observation: Subscription, + _subscriptions: [Subscription; 2], } pub struct SidebarButtons { @@ -99,11 +107,24 @@ impl Sidebar { view: ViewHandle, cx: &mut ViewContext, ) { - 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() } diff --git a/styles/dist/cave-dark.json b/styles/dist/cave-dark.json new file mode 100644 index 0000000000..21daaf9731 --- /dev/null +++ b/styles/dist/cave-dark.json @@ -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" + } +} \ No newline at end of file diff --git a/styles/dist/cave-light.json b/styles/dist/cave-light.json new file mode 100644 index 0000000000..93ad50e8da --- /dev/null +++ b/styles/dist/cave-light.json @@ -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" + } +} \ No newline at end of file diff --git a/styles/dist/solarized-light.json b/styles/dist/solarized-light.json index f21430dfa8..acd8d133df 100644 --- a/styles/dist/solarized-light.json +++ b/styles/dist/solarized-light.json @@ -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": { diff --git a/styles/dist/sulphurpool-dark.json b/styles/dist/sulphurpool-dark.json new file mode 100644 index 0000000000..a2a6273bb9 --- /dev/null +++ b/styles/dist/sulphurpool-dark.json @@ -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" + } +} \ No newline at end of file diff --git a/styles/dist/sulphurpool-light.json b/styles/dist/sulphurpool-light.json new file mode 100644 index 0000000000..779850149f --- /dev/null +++ b/styles/dist/sulphurpool-light.json @@ -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" + } +} \ No newline at end of file diff --git a/styles/dist/tokens.json b/styles/dist/tokens.json index 5874a9a7c1..29cec82032 100644 --- a/styles/dist/tokens.json +++ b/styles/dist/tokens.json @@ -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": { diff --git a/styles/src/styleTree/contactsPanel.ts b/styles/src/styleTree/contactsPanel.ts index d55487a97b..d52f7f92b2 100644 --- a/styles/src/styleTree/contactsPanel.ts +++ b/styles/src/styleTree/contactsPanel.ts @@ -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 }) + } + } } }