a866370
Paint lines
Antonio Scandurra created
a866370
Paint lines
Antonio Scandurra created
a7d52ee
Smoke test for event handling
Conrad Irwin created
8e799b6
Flesh out gpui2 test support
Conrad Irwin created
2afeb50
Try notarytool (#3239)
Try to use notarytool to fix build problems
Conrad Irwin created
85000eb
wip: picker
co-authored-by: nathan <nathan@zed.dev> co-authored-by: max <max@zed.dev>
Mikayla , nathan , and max created
3c93b58
Checkpoint
Mikayla created
ea6755b
Checkpoint
Mikayla created
99a57d9
Add theme importer (#3246)
[[PR Description]]
Thanks @maxdeviant for all the help with this one π«
- Adds the `theme_importer` crate
- Adds the ability to import themes in VSCode Format.
- Adds the `assets/themes/src` folder with source files for imported
themes
- Adds an initial set of themes: `andromeda`, `ayu`, `dracula`,
`gruvbox`, `night-owl`, `noctis`, `palenight`, `rose-pine`, `solarized`,
`synthwave-84`.
From the README:
## Usage
- `cargo run -p theme_importer` - Import the context of
`assets/themes/src`
---
## Troubleshooting
As the importer generates rust files, you may need to manually do some
cleanup in `registry.rs` and `themes/mod.rs` if you remove themes or
delete the `themes` folder in the theme crate.
---
## Required Structure
To import a theme or series of themes 3 things are required:
- `family.json`: A JSON file containing the theme family metadata and
list of theme variants
- `{theme_name}.json`: One theme json for each theme variant
- `LICENSE`: A license file for the theme family
### `family.json`
#### `name`
The name of the theme family. Avoid special characters.
This will be used for the theme family directory name (lowercased) and
the theme family name in the Zed UI.
Good:
- `Rose Pine`
- `Synthwave 84`
- `Monokai Solarized`
Bad:
- `RosΓ© Pine`
- `Synthwave '84`
- `Monokai (Solarized)`
#### `author`
The author of the theme family. This can be a name or a username.
This will be used for the theme family author in the Zed UI.
#### `themes`
A list of theme variants.
`appearance` can be either `light` or `dark`. This will impact which
default fallback colors are used, and where the theme shows up in the
Zed UI.
### `{theme_name}.json`
Each theme added to the family must have a corresponding JSON file. This
JSON file can be obtained from the VSCode extensions folder (once you
have installed it.) This is usually located at `~/.vscode/extensions`
(on macOS).
You can use `open ~/.vscode/extensions` to open the folder in Finder
directly.
Copy that json file into the theme family directory and tidy up the
filenames as needed.
### `LICENSE`
A LICENSE file is required to import a theme family. Failing to provide
a complete text license will cause it to be skipped when the import is
run.
If the theme only provices a license code (e.g. MIT, Apache 2.0, etc.)
then put that code into the LICENSE file.
If no license is provided, either contact the theme creator or don't add
the theme.
---
### Complete Example:
An example family with multiple variants:
```json
{
"name": "Ayu",
// When both name and username are available
// prefer the `username (name)` format
"author": "dempfi (Ike Ku)",
"themes": [
{
"name": "Ayu Light",
"file_name": "ayu-light.json",
"appearance": "light"
},
{
"name": "Ayu Mirage",
"file_name": "ayu-mirage.json",
"appearance": "dark"
},
{
"name": "Ayu Dark",
"file_name": "ayu-dark.json",
"appearance": "dark"
}
]
}
```
An example single variant family:
```json
{
"name": "Andromeda",
"author": "Eliver Lara (EliverLara)",
"themes": [
{
"name": "Andromeda",
"file_name": "andromeda.json",
"appearance": "dark"
},
{
"name": "Andromeda Bordered",
"file_name": "andromeda-bordered.json",
"appearance": "dark"
}
]
}
```
Release Notes:
- N/A
Nate Butler created
eac7c3c
Update Cargo.toml
Nate Butler created
2931d32
Add a README for `theme_importer`
Nate Butler created
3f7dc59
Snapshot for kirill
Mikayla created
3cb7261
Finish up initial themes
Nate Butler created
62981fc
Format themes
Nate Butler created
c47c641
Add additional themes, update theme importer
Nate Butler created
75a8081
WIP
Mikayla created
050d727
Use gpui instead of gpui2 consistently (#3245)
Release Notes: N/A
Conrad Irwin created
496518f
Use gpui instead of gpui2 consistenytly
Conrad Irwin created
eb325fb
editor2 rendering (#3244)
- Make tab bar visible - Fix tab text colors - Ensure panes cover the available space - Make the close button close - Fix bug when unsubscribe called after remove - WIP: start on editor element - Add hover behaviour to tabs - Add PointingHand on tabs - gpui2: Add on_hover events - Tooltip on tabs - MOAR TOOLTIPS - Use an `IconButton` for the tab close button - Remove unneeded type qualification - Tooltips in mouse event handler & fix executor timer - Move more tooltip logic into gpui2 & fix tooltip moving on paint - Update tooltip code a bit - Allow multiple subscriptions from one entity handle Release Notes: - N/A
Conrad Irwin created
3940e02
Add Nord Theme
Nate Butler created
d224f51
Add interactivity to `Checkbox` component (#3240)
This PR adds interactivity to the `Checkbox` component. They can now be checked and unchecked by clicking them. Release Notes: - N/A
Marshall Bowers created
d66ed43
WIP: change over background executor test helpers
Mikayla created
c59817c
Merge branch 'main' into editor2-rendering
Conrad Irwin created
d88dccf
Allow multiple subscriptions from one entity handle
Conrad Irwin created
e460f6a
WIP
Antonio Scandurra created
3afdeea
tooltip2 (#3237)
- Fix executor.timer() in gpui2 - Add support for tooltips [[PR Description]] Release Notes: - N/A
Conrad Irwin created
80f80df
Add Noctis Theme
Nate Butler created
4d88a32
Tidy up a bit better
Conrad Irwin created
254b369
Properly toggle diagnostics (#3243)
Follow-up of https://github.com/zed-industries/zed/pull/3236 that fixes a bug introduced in that PR: diagnostics warning toggle stopped working. Release Notes: - N/A
Kirill Bulatov created
bfb860c
Properly toggle diagnostics
Kirill Bulatov created
f8504c3
Merge branch 'main' into import-theme
Marshall Bowers created
bf80c1d
Rename fields in `ThemeColors` (#3242)
This PR applies a number of field renames in the `ThemeColors` struct from the `import-theme` branch. This will help prevent this branch from diverging too far from `main`. Release Notes: - N/A --------- Co-authored-by: Nate Butler <iamnbutler@gmail.com> Co-authored-by: Marshall Bowers <1486634+maxdeviant@users.noreply.github.com>
Marshall Bowers , Nate Butler , and Marshall Bowers created
f730982
Use notarytool to bundle
Conrad Irwin created
8bcf114
Actually find downloaded binary in Elixir cached binary method (#3183)
Language adapters 2.0 will systematically fix this kind of issue and cause world peace but until we do that let's be less broken Release Notes: - Fixed being unable to find already downloaded Elixir-LS binary on the file system.
Julia created
66b9675
zed2: Actually find downloaded binary in Elixir cached binary method
Julia created
ee28cc5
chore: Run multitarget build in script/bundle
This has a chance to speed up a build in case where e.g. we're single-threaded in aarch64 build; at that point the x86_64 codegen can take place. Also, MIR can probably be shared between the two architectures, further reducing build time.
Piotr Osiewicz created
dbdb5f6
Actually find downloaded binary in Elixir cached binary method
Julia created
230edeb
Add gruvbox source theme, strip comments
Nate Butler created
8192a52
Skip `.DS_Store` files when scanning themes folder
Nate Butler created
5d90396
Ignore generated themes
Nate Butler created
5c24c93
Remove unused file
Nate Butler created
b9d8e08
Add Andromeda source theme
Nate Butler created
9509153
chore: Update vue.js parser (fixes wonky HTML parsing) (#3238)
Vue.js defined a bunch of symbols in it's scanner that collided with those defined in HTML Tree-sitter grammar. I simply removed them as they were meant for consumption by the external parties interested in HTML parser with Vue support - since we handle that ourselves this is not really necessary to preserve anymore. cc was firing up a bunch of warnings about unused symbols when I've marked those functions as `static`, so yeah. Release Notes: - Fixed HTML highlighting breaking in presence of <!-- --> comments (fixes zed-industries/community#2166).
Piotr Osiewicz created
769526a
Paint editor background
Antonio Scandurra created
7374ca9
chore: Update vue.js parser (fixes wonky HTML parsing)
Vue.js defined a bunch of symbols in it's scanner that collided with those defined in HTML Tree-sitter grammar. I simply removed them as they were meant for consumption by the external parties interested in HTML parser with Vue support - since we handle that ourselves this is not really necessary to preserve anymore. cc was firing up a bunch of warnings about unused symbols, so yeah.
Piotr Osiewicz created
128d369
More heuristics for diagnostics updates (#3236)
Follow-up of https://github.com/zed-industries/zed/pull/3225 That PR enabled every `project::Event::DiskBasedDiagnosticsFinished` to update the diagnostics, which turned out to be bad, Zed does query for more diagnostics after every excerpt update, and that seems to be due to `Event::Edited` emitted by the multibuffers created in the diagnostics panel. * now, instead of eagerly updating the diagnostics every time, only do that if the panel has 0 or 1 caret placed and no changes were made in the panel yet. Otherwise, use previous approach and register the updated paths to defer their update later. * on every `update_excerpts` in the diagnostics panel, query the entire diagnostics summary (and store it for the future comparisons), compare old and new summaries and re-query diagnostics for every path that's not in both summaries. Also, query every path that was registered during the `DiskBasedDiagnosticsFinished` updates that were not eagerly updated before. This way we're supposed to get all new diagnostics (for new paths added) and re-check all old paths that might have stale diagnostics now. * do diagnostics rechecks concurrently for every path now, speeding the overall process Release Notes: - Fixed diagnostics triggering too eagerly during multicaret edits and certain stale diagnostics not being removed in time
Kirill Bulatov created
b2f744f
Add checkboxes and their stories (#3235)
[[PR Description]]
Adds checkboxes and their stories.
A checkbox can be created simply by passing an id:
~~~rust
#[derive(Component)]
pub struct Checkbox {
id: SharedString,
checked: Selected,
disabled: bool,
}
impl Checkbox {
pub fn new(id: impl Into<SharedString>) -> Self {
Self {
id: id.into(),
checked: Selected::Unselected,
disabled: false,
}
}
//...
}
~~~
I've documented this component rather thoroughly as an example of how
we've been thinking about building out UI elements:
~~~rs
pub fn render<V: 'static>(self, _view: &mut V, cx: &mut ViewContext<V>)
-> impl Component<V> {
let group_id = format!("checkbox_group_{}", self.id);
// The icon is different depending on the state of the checkbox.
//
// We need the match to return all the same type,
// so we wrap the eatch result in a div.
//
// We are still exploring the best way to handle this.
let icon = match self.checked {
// When selected, we show a checkmark.
Selected::Selected => {
div().child(
IconElement::new(Icon::Check)
.size(crate::IconSize::Small)
.color(
// If the checkbox is disabled we change the color of the icon.
if self.disabled {
IconColor::Disabled
} else {
IconColor::Selected
},
),
)
}
// In an indeterminate state, we show a dash.
Selected::Indeterminate => {
div().child(
IconElement::new(Icon::Dash)
.size(crate::IconSize::Small)
.color(
// If the checkbox is disabled we change the color of the icon.
if self.disabled {
IconColor::Disabled
} else {
IconColor::Selected
},
),
)
}
// When unselected, we show nothing.
Selected::Unselected => div(),
};
// A checkbox could be in an indeterminate state,
// for example the indeterminate state could represent:
// - a group of options of which only some are selected
// - an enabled option that is no longer available
// - a previously agreed to license that has been updated
//
// For the sake of styles we treat the indeterminate state as selected,
// but it's icon will be different.
let selected =
self.checked == Selected::Selected || self.checked ==
Selected::Indeterminate;
// We could use something like this to make the checkbox background when
selected:
//
// ~~~rust
// ...
// .when(selected, |this| {
// this.bg(cx.theme().colors().element_selected)
// })
// ~~~
//
// But we use a match instead here because the checkbox might be
disabled,
// and it could be disabled _while_ it is selected, as well as while it
is not selected.
let (bg_color, border_color) = match (self.disabled, selected) {
(true, _) => (
cx.theme().colors().ghost_element_disabled,
cx.theme().colors().border_disabled,
),
(false, true) => (
cx.theme().colors().element_selected,
cx.theme().colors().border,
),
(false, false) => (cx.theme().colors().element,
cx.theme().colors().border),
};
div()
// Rather than adding `px_1()` to add some space around the checkbox,
// we use a larger parent element to create a slightly larger
// click area for the checkbox.
.size_5()
// Because we've enlarged the click area, we need to create a
// `group` to pass down interaction events to the checkbox.
.group(group_id.clone())
.child(
div()
.flex()
// This prevent the flex element from growing
// or shrinking in response to any size changes
.flex_none()
// The combo of `justify_center()` and `items_center()`
// is used frequently to center elements in a flex container.
//
// We use this to center the icon in the checkbox.
.justify_center()
.items_center()
.m_1()
.size_4()
.rounded_sm()
.bg(bg_color)
.border()
.border_color(border_color)
// We only want the interaction states to fire when we
// are in a checkbox that isn't disabled.
.when(!self.disabled, |this| {
// Here instead of `hover()` we use `group_hover()`
// to pass it the group id.
this.group_hover(group_id.clone(), |el| {
el.bg(cx.theme().colors().element_hover)
})
})
.child(icon),
)
}
~~~
Release Notes:
- N/A
Nate Butler created
ad93d91
Correctly update old diagnostics
Kirill Bulatov created
fdcb907
Parallelize diagnostics filling, add more logs
Kirill Bulatov created
ff1d692
Restructure inner path data
Kirill Bulatov created
7145fab
Eagerly refresh diagnostics that do not intercept with user input
Kirill Bulatov created