Commit graph

1486 commits

Author SHA1 Message Date
Jason Lee
76424dd0ae Bump v0.5.0 2025-12-08 10:54:12 +08:00
Duane Bester
3c23ee9be4 editor: Add InlineCompletion LSP support (#1736)
Closes [1729](https://github.com/longbridge/gpui-component/issues/1729)

## Description

Adds support for inline completions, which allows the editor to support
agentic "tab to complete" solutions. This works, (tested macOS), but not
sure of any gotchas or different approaches.

## Screenshot


https://github.com/user-attachments/assets/8e437f1e-9792-4417-b070-0a1dd8de6024

## How to Test

User implements the `inline_completion` method in CompletionsProvider.

Not implementing should have no effect. 

## Checklist

- [x] I have read the [CONTRIBUTING](../CONTRIBUTING.md) document and
followed the guidelines.
- [x] Reviewed the changes in this PR and confirmed AI generated code
(If any) is accurate.
- [x] Passed `cargo run` for story tests related to the changes.
- [ ] Tested macOS, Windows and Linux platforms performance (if the
change is platform-specific)

---------

Co-authored-by: Jason Lee <huacnlee@gmail.com>
2025-12-08 10:53:36 +08:00
John
3ecd9c7606 input: Fix text not in vertical center when masked text is empty. (#1753)
Closes #1724

## Screenshot

### Before                      
<img width="824" height="656" alt="CleanShot20251206132455"
src="https://github.com/user-attachments/assets/dc917dc2-1c48-4a7a-bc24-29f09f656d95"
/>

### After 
<img width="826" height="654" alt="CleanShot20251206132600"
src="https://github.com/user-attachments/assets/3a62e7fd-1f85-4165-84bf-7a9b25f5ef3d"
/>

---------

Co-authored-by: Jason Lee <huacnlee@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-08 10:53:23 +08:00
amiyzku
9b3b2802cc chart: Add candlestick chart (#1749)
## Description

Add `CandlestickChart` component for visualizing financial OHLC data
with candlestick patterns.

- Introduced a new CandlestickChart for displaying OHLC (Open, High,
Low, Close) values.
- Updated ChartStory to include stock price data and render multiple
candlestick chart variations.
- Enhanced theme with bullish and bearish colors for candlestick
representation.
- Updated documentation to include CandlestickChart examples and usage.

This addition enhances the charting library by providing a crucial tool
for visualizing stock market trends.

## Screenshot

<img width="1335" height="423" alt="image"
src="https://github.com/user-attachments/assets/5df7078e-a469-4262-b645-6434d08b7ccf"
/>

## How to Test

```bash
cargo run -p gpui-component-story
```

## Checklist

- [x] I have read the [CONTRIBUTING](../CONTRIBUTING.md) document and
followed the guidelines.
- [x] Reviewed the changes in this PR and confirmed AI generated code
(If any) is accurate.
- [x] Passed `cargo run` for story tests related to the changes.
- [ ] Tested macOS, Windows and Linux platforms performance (if the
change is platform-specific)
2025-12-08 10:53:16 +08:00
Floyd Wang
bc1092a6e1
context_menu: Prevent mouse events when menu popped out (#1750)
## Before

https://github.com/user-attachments/assets/6cb5a767-d888-43f1-b5cc-1f3c5748389d

## After

https://github.com/user-attachments/assets/0846d0e2-2311-47d1-8d5b-2e7bbc347fe3
2025-12-05 09:09:37 +00:00
Jason Lee
893155bcee
docs: Fix typo in notifications doc. (#1747)
Close #1745
2025-12-05 07:25:09 +00:00
Jason Lee
56fb93bca8
table: Add render_header method to support custom table header. (#1746)
Closes #1733

## Example

```rs
impl TableDelegate for MyTable {
    fn render_header(&mut self, _: &mut Window, _: &mut Context<TableState<Self>>) -> Stateful<Div> {
        div().id("header").h_10()
    }
}
```
2025-12-05 15:17:13 +08:00
Andreas Johansson
8fcf5f337d
input: Fix resetting highlighting for single line code editor (#1742)
## Description

When using `set_value` with a `code_editor("lang").multi_line(false)`
the highlighting and lsp will not be reset.

## Video

### Before

https://github.com/user-attachments/assets/5fef5b6e-478e-4233-a911-e087f889040a

### After

https://github.com/user-attachments/assets/3ea99060-8dba-4604-9d3f-c151b3aadcf2

## How to Test

`cargo run --release -- input`, enter some text in "Single line code
editor", click "Reset"

## Checklist

- [x] I have read the [CONTRIBUTING](../CONTRIBUTING.md) document and
followed the guidelines.
- [x] Reviewed the changes in this PR and confirmed AI generated code
(If any) is accurate.
- [x] Passed `cargo run` for story tests related to the changes.
- [ ] Tested macOS, Windows and Linux platforms performance (if the
change is platform-specific)
2025-12-05 09:53:07 +08:00
Ylin
3b2746e0ba
setting: Supplement subscription InputEvent for number_input (#1740) 2025-12-04 14:47:11 +08:00
Floyd Wang
13eceab1ac
webview: Public the raw wry webview handle (#1739) 2025-12-04 03:53:28 +00:00
Ylin
514aea00be
setting: Use precise subscripts for use_keyed_state (#1735) 2025-12-03 21:51:57 +08:00
Floyd Wang
a50b1e9341
dock: Fix tab panel first tab left border overlap issue (#1734)
| Before | After |
| - | - |
| <img width="811" height="424" alt="SCR-20251203-pzqr"
src="https://github.com/user-attachments/assets/9e0ad869-bb4b-451c-ad9a-1ca74204bb6d"
/> | <img width="811" height="424" alt="SCR-20251203-pzgw"
src="https://github.com/user-attachments/assets/ac6af899-d967-4d97-8818-b615ecd44b6b"
/> |
2025-12-03 18:32:48 +08:00
Duane Bester
31bab9dcc3
text_view: Adding optional code block actions to the TextView (#1725)
## Description

This PR Adds the ability for users of the library to provide code block
actions for code blocks rendered in markdown (or anything that uses the
TextViewStyle).

I tried to match the existing Fns:
```rs
pub fn heading_font_size<F>(mut self, f: F) -> Self
where
    F: Fn(u8, Pixels) -> Pixels + Send + Sync + 'static,
{
    self.heading_font_size = Some(Arc::new(f));
    self
}
```

New code in text_view:
```rs
pub fn code_block_actions<F, E>(mut self, f: F) -> Self
where
    F: Fn(SharedString, Option<SharedString>, &mut Window, &mut App) -> E
        + Send
        + Sync
        + 'static,
    E: IntoElement,
{
    self.code_block_actions = Some(Arc::new(move |code, lang, window, cx| {
        f(code, lang, window, cx).into_any_element()
    }));
    self
}
```

Example on adding a simple copy button:

```rs
TextView::markdown("preview", content, window, cx)
    .code_block_actions(|code, _lang, _window, _cx| {
        Clipboard::new("copy").value(code)
    })
```


## Screenshot

| Before                       | After                       |
| ---------------------------- | --------------------------- |
| <img width="630" height="527" alt="Screenshot 2025-12-01 at 8 37
50 PM"
src="https://github.com/user-attachments/assets/7ac3b8d9-da85-42f8-9d36-cc74848890ea"
/> | <img width="627" height="535" alt="Screenshot 2025-12-01 at 8 38
22 PM"
src="https://github.com/user-attachments/assets/cae67b43-bba8-4834-a060-4bd63d34aefd"
/> |


## How to Test

Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce.

## Checklist

- [x] I have read the [CONTRIBUTING](../CONTRIBUTING.md) document and
followed the guidelines.
- [x] Reviewed the changes in this PR and confirmed AI generated code
(If any) is accurate.
- [x] Passed `cargo run` for story tests related to the changes.
- [ ] Tested macOS, Windows and Linux platforms performance (if the
change is platform-specific)

---------

Co-authored-by: Jason Lee <huacnlee@gmail.com>
2025-12-03 10:21:47 +00:00
Jason Lee
b70a0633ab
dock: Simplify DockItem API. (#1732)
## Break Change

- The `DockItem::tabs` has removed `active_ix` argument, use
`.active_index()` method instead.

```diff
- DockItem::tabs(vec![panel], Some(1), &weak_self, window, cx)
+ DockItem::tabs(vec![panel], &weak_self, window, cx).active_index(1)
```
2025-12-03 17:53:37 +08:00
Floyd Wang
e2f022cb59
divider: Add support for dashed divider (#1730)
## Description

1. Add support for dashed divider.
2. Add divider story.

## Screenshot

<img width="1139" height="859" alt="SCR-20251203-nueg"
src="https://github.com/user-attachments/assets/3f2dafd9-f808-4315-bf58-c0380798eb66"
/>
2025-12-03 16:22:36 +08:00
Jason Lee
ec097ed406
docs: Fix footer display. (#1727) 2025-12-02 19:24:14 +08:00
Floyd Wang
e43662190a Bump v0.5.0-preview2 2025-12-02 17:12:49 +08:00
Jason Lee
8abaa82233
list: Fix list item may overflow. (#1726)
Closes #1692
2025-12-02 13:33:47 +08:00
Jason Lee
64aa975c77
title_bar: Remove window control bg color in normal mode. (#1720)
Fix #1710 introduced bug.
2025-12-01 13:56:15 +00:00
Jason Lee
43e1029b9f
dock: Improve Panel trait changed title to return impl IntoElement. (#1719) 2025-12-01 18:13:23 +08:00
Jason Lee
d92e3a3222
dock: Fix title method missed thing in PR #1716 (#1718)
Continue #1716
2025-12-01 18:03:29 +08:00
Jason Lee
4ded78ed30
dock: Refactor Panel trait to has &mut self and &mut Context<Self>. (#1716)
Continue #1712, #1713

## Description

Also change the `Panel` trait to has `&mut self` and `&mut
Context<Self>`.

## Break Changes

The methods `title`, `title_prefix`, `set_zoomed`, `set_active`,
`dropdown_menu`, `toolbar_buttons`, `on_added_to`, `on_removed` has
changed `&self` to `&mut self`, and `cx: &App` to `cx: &mut
Context<Self>`.

```diff
- fn title(&self, window: &Window, cx: &App) -> AnyElement
+ fn title(&mut self, window: &Window, cx: &mut Context<Self>) -> AnyElement
```
2025-12-01 17:57:18 +08:00
Jason Lee
c0f801dd8c
list: Refactor ListDelegate to easy access delegate. (#1713)
Continue #1712

## Break Changes

- The argument type of `render_item`, `render_section_header`,
`render_section_footer`, `render_empty`, `render_initial`,
`render_loading` in `ListDelegate` has been changed to has `&mut self`
and `&mut Context<ListState<Self>>`.

```diff
- fn render_item(&self, ix: IndexPath, window: &mut Window, cx: &mut App) -> Option<Self::Item>
+ fn render_item(&mut self, ix: IndexPath, window: &mut Window, cx: &mut Context<ListState<Self>>) -> Option<Self::Item>
```
2025-12-01 17:42:44 +08:00
Jason Lee
001b1795f1
table: Refactor TableDelegate to easy to access delegate. (#1712)
Closes #1610, #1583

Closes https://github.com/longbridge/gpui-component/discussions/1707

## Description

This change to improve the `TableDelegate` to have `&mut self` and
`Context<TableState<Self>>` to easy access delegate.

## Break Changes

- The argument types of `render_tr`, `render_td`, `render_th`,
`context_menu`, `render_loading`, `render_empty`,
`render_last_empty_col` in `TableDelegate` has been changed.

```diff
- fn render_th(&self, col_ix: usize, _: &mut Window, _: &mut App) -> impl IntoElement
+ fn render_th(&mut self, col_ix: usize, _: &mut Window, _: &mut Context<TableState<Self>>) -> impl IntoElement
```
2025-12-01 17:20:52 +08:00
Andreas Johansson
0126f1b036
input: Fix wrong font being used in Input. (#1706)
Closes #1665

## Description

When `Input::new().font_family("font")` is used, the font hasn't been
applied yet in `Input::render`, therefore the `text_wrapper` will
calculate using the wrong font. This is why it's working when the font
is added to the parent element.

The fix moves the state update to `element` prepaint, where
`window.text_style()` has the correct styles. The only downside is that
there are now one additional state update.

## Screenshot

| Before                       | After                       |
| ---------------------------- | --------------------------- |
| <img width="1125" height="246" alt="Screenshot From 2025-11-30
20-03-11"
src="https://github.com/user-attachments/assets/1fa798a7-0b9c-4386-8940-ad5f6734b8a0"
/> | <img width="1125" height="246" alt="Screenshot From 2025-11-30
20-00-23"
src="https://github.com/user-attachments/assets/e970e7bc-1bfa-4a55-a342-3381d1684526"
/> |

## How to Test

Use some wide font, like `IBM Plex Mono`. Apply it to
`Input::new(&some_state).font_family("IBM Plex Mono")` where the input
state has `soft_wrap`. Here is a diff for `textarea_story.rs`.

```diff
diff --git a/crates/story/src/textarea_story.rs b/crates/story/src/textarea_story.rs
index f2c63d44..bd5cbb31 100644
--- a/crates/story/src/textarea_story.rs
+++ b/crates/story/src/textarea_story.rs
@@ -77,9 +77,9 @@ impl TextareaStory {
 
         let textarea_no_wrap = cx.new(|cx| {
             InputState::new(window, cx)
-                .multi_line(true)
                 .rows(6)
-                .soft_wrap(false)
+                .multi_line(true)
+                .soft_wrap(true)
                 .default_value("This is a very long line of text to test if the horizontal scrolling function is working properly, and it should not wrap automatically but display a horizontal scrollbar.\nThe second line is also very long text, used to test the horizontal scrolling effect under multiple lines, and you can input more content to test.\nThe third line: Here you can input other long text content that requires horizontal scrolling.\n")
         });
 
@@ -195,7 +185,7 @@ impl Render for TextareaStory {
             .child(
                 section("Auto Grow")
                     .max_w_md()
-                    .child(Input::new(&self.textarea_auto_grow)),
+                    .child(Input::new(&self.textarea_auto_grow).font_family("IBM Plex Mono")),
             )
             .child(
                 section("Auto Grow with No Wrap")
```


## Checklist

- [x] I have read the [CONTRIBUTING](../CONTRIBUTING.md) document and
followed the guidelines.
- [x] Reviewed the changes in this PR and confirmed AI generated code
(If any) is accurate.
- [x] Passed `cargo run` for story tests related to the changes.
- [ ] Tested macOS, Windows and Linux platforms performance (if the
change is platform-specific)

---------

Co-authored-by: Jason Lee <huacnlee@gmail.com>
2025-12-01 09:05:34 +00:00
Jason Lee
0f655314c9
title_bar: Fix TitleBar drag area on macOS, and only handle show window menu when it supports. (#1710)
Closes #1528

- Fix the TitleBar drag area on macOS.
- Update Window Control Icon to use theme color.
2025-12-01 16:07:18 +08:00
Jason Lee
4e0f9af789
story: Use uniform_list for scroll example. (#1709)
Ref #1621

Update scrollable story to use `UniformList` to avoid performance issue
in story.

And also renamed it to `ScrollbarStory`.
2025-12-01 11:07:29 +08:00
FlyingYu
a792719dbe
editor: Fix cursor direction not resetting after mouse up (#1708)
## Description

This PR fixes an issue where the editor's "reverse cursor" state was not
reset
after completing a text selection. Because the flag remained `true`, the
cursor
could appear on the wrong side of the selection when the next
interaction
started.

## Screenshot

| Before | After |
|--------|--------|
| <video
src="https://github.com/user-attachments/assets/308c5119-52da-4bdb-9a94-36617d957c63"
controls width="360"></video> | <video
src="https://github.com/user-attachments/assets/bf9328b4-96d8-48df-9cc0-99fccaced7c5"
controls width="360"></video> |

## How to Test

`cargo run --example editor`

## Checklist

- [x] I have read the [CONTRIBUTING](../CONTRIBUTING.md) document and
followed the guidelines.
- [ ] Reviewed the changes in this PR and confirmed AI generated code
(If any) is accurate.
- [x] Passed `cargo run` for story tests related to the changes.
- [ ] Tested macOS, Windows and Linux platforms performance (if the
change is platform-specific)
2025-12-01 11:06:40 +08:00
Andreas Johansson
7e479aa7f2
input: Add to support CodeEditor as single line mode. (#1696)
## Screenshot

From `input_story`:

<img width="1069" height="122" alt="Screenshot From 2025-11-28 09-14-03"
src="https://github.com/user-attachments/assets/f14ef2fc-4939-4ceb-be3e-bede492f8602"
/>

## Breaking Changes

- `.multi_line()` was changed to `.multi_line(bool)`.  
- Removed pub `InputMode`, this should only for internal.

```diff
InputState::new(window, cx)
-    .multi_line()
+    .multi_line(true)
```

## Checklist

- [x] I have read the [CONTRIBUTING](../CONTRIBUTING.md) document and
followed the guidelines.
- [x] Reviewed the changes in this PR and confirmed AI generated code
(If any) is accurate.
- [x] Passed `cargo run` for story tests related to the changes.
- [ ] Tested macOS, Windows and Linux platforms performance (if the
change is platform-specific)

Use cases,

1) In my API client, I have a tree sitter language for the URL input,

<img width="1001" height="162" alt="Image"
src="https://github.com/user-attachments/assets/9771decf-b0b7-4230-8ed6-784a95b72af1"
/>

2) In my SQL editor I want to be able to allow JSON syntax highlighting
for inline editing of json columns,

<img width="501" height="130" alt="Image"
src="https://github.com/user-attachments/assets/f0f879cc-841f-49d2-a23a-2effc3747f38"
/>

---------

Co-authored-by: Jason Lee <huacnlee@gmail.com>
2025-11-28 19:51:40 +08:00
Jason Lee
1ce09cc1d1
sidebar: Fix Sidebar group and items gap. (#1705) 2025-11-28 09:56:39 +00:00
Jason Lee
df9655e80a
input: Adjust blink cursor height. (#1704) 2025-11-28 09:54:48 +00:00
Jason Lee
6505be409b
input: Change to input text size to smaller. (#1703)
Use `text_sm` for text size for Input.

Ref https://ui.shadcn.com/docs/components/input

## Screenshot

## Before

<img width="1143" height="1034" alt="image"
src="https://github.com/user-attachments/assets/17a8731e-9977-4beb-89d0-e2460f3823fd"
/>

## After

<img width="1218" height="974" alt="image"
src="https://github.com/user-attachments/assets/cca684d0-c86b-440f-bd30-cff7a4f444c4"
/>
2025-11-28 09:37:43 +00:00
Jason Lee
04abdbe771
theme: Fix some dropdown to use popover for bg, and improve macos-cla… (#1702)
<img width="1136" height="859" alt="image"
src="https://github.com/user-attachments/assets/16764390-2089-43b9-bb96-77912263f07e"
/>

<img width="1136" height="859" alt="image"
src="https://github.com/user-attachments/assets/c2cb7e4f-76d6-458e-8ff9-2734d4944008"
/>
2025-11-28 08:57:13 +00:00
Jason Lee
660c88cc21
docs: Add icons for page background to website. (#1701) 2025-11-28 07:14:43 +00:00
Jason Lee
11f4fe4176
docs: Remove outdated note on README (#1700) 2025-11-28 05:13:44 +00:00
Jason Lee
7a42e44c28
theme: Fix macos-classic theme details and fix theme schema. (#1699) 2025-11-28 04:10:51 +00:00
Floyd Wang
d7ff792cf4
dock: Use visible_panels method (#1698)
Improve #1697.
2025-11-28 03:18:09 +00:00
Floyd Wang
37326819af
dock: Render title bar based on visible panels (#1697)
Display the title when only one panel is visible.

## Breaking change
```diff
pub enum PanelStyle {
-   Default,
+   #[default]
+   Auto,
    TabBar,
}

- dock_area.panel_style(PanelStyle::Default)
+ dock_area.panel_style(PanelStyle::Auto)
```
2025-11-28 03:01:31 +00:00
Jason Lee
36b229068d
chore: Fix dialog scroll by #1694 change. (#1695) 2025-11-27 21:11:20 +08:00
Jason Lee
118a0f500e
scrollbar: Introduce overflow_scrollbar to adds Scrollbars to elements. (#1694)
## Description

1. Add `overflow_scrollbar`, `overflow_y_scrollbar`, `overflow_x_scroll`
to GPUI elements to let them has scrollbars. It is almost like the
`overscroll` but adds the Scrollbar.
2. And adjust the display scrollbar of margining 4px of the container.
3. Add `scrollbar`, `vertical_scrollbar`, `horizontal_scrollbar` with
your own scroll handle.

<img width="1181" height="911" alt="image"
src="https://github.com/user-attachments/assets/8b02cd54-d527-4f22-b9be-f762ede22122"
/>

## Break Changes

- There `Scrollable` trait and it `scrollable` method has been removed.

```diff
- div().id("contents").scrollable(Axis::Vertical)
+ div().id("contents").overflow_y_scrollbar()
```
2025-11-27 11:29:50 +00:00
Floyd Wang
0b1fab5b08 script: Push both change and tag to remote 2025-11-27 16:45:32 +08:00
Jason Lee
e38f784219
title_bar: Improve Styled support to TitleBar. (#1693) 2025-11-27 16:25:36 +08:00
Jason Lee
740d59d280 Bump v0.5.0-preview0 2025-11-27 14:49:36 +08:00
Jason Lee
4a3f520c5f
scrollbar: Manage ScrollbarState in Scrollbar internal. (#1690)
This PR to improve the Scrollbar API to manage the state in the
internal.

## Break Changes

Describe any breaking changes introduced by this pull request. If none,
remove this section.

- Removed `scrollbar_state` argument from `Scrollbar::new`,
`Scrollbar::both`, `Scrollbar::vertical` and `Scrollbar::horizontal`.

```diff
- Scrollbar::horizontal(&self.scrollbar_state, &self.scroll_handle)
+ Scrollbar::horizontal(&self.scroll_handle)

- Scrollbar::vertical(&self.scrollbar_state, &self.scroll_handle)
+ Scrollbar::vertical(&self.scroll_handle)
```

- Change `struct ScrollbarState` to private, we not need this not.

```diff
- pub struct ScrollbarState {
+ struct ScrollbarState {
```

- Renamed `trait ScrollHandleOffsetable` to `trait ScrollbarHanle`.

```diff
- pub trait ScrollHandleOffsetable {
+ pub trait ScrollbarHanle {
```

- Removed `Scrollbar::both`, now use `Scrollbar::new` instead.

```diff
- Scrollbar::both(&scroll_handle)
+ Scrollbar::new(&scroll_handle)
```
2025-11-27 11:39:58 +08:00
Jason Lee
7f956e0f55 ci: Update release crate CI. 2025-11-27 10:10:35 +08:00
Floyd Wang
0d167f61e5
plot: Add support for stacked chart (#1681)
## Description

- Add `stack` shape.
- Add `ordinal` scale.
- Add plot docs.

<img width="337" height="424" alt="SCR-20251126-puzm"
src="https://github.com/user-attachments/assets/eff9e2d0-c13a-449a-b717-9568e0c2f88d"
/>

## Breaking change
The bar shape `y0` value is now returned for each data item.

```diff
- Bar::new().y0(height)
+ Bar::new().y0(move |_| height)
+ Bar::new().y0(move |d| d.height)
```
2025-11-26 10:24:57 +00:00
Jason Lee
55da14edb2
theme: Use difference color like the window background for TitleBar. (#1686) 2025-11-26 11:54:28 +08:00
han
e5fa0709d1
theme: Add switch.thumb.background theme config support (#1685)
## Description:
This PR adds support for customizing the Switch component's thumb color.

- Changes:
•  Added switch_thumb field to ThemeColor and ThemeConfig.
•  Updated Switch component to use cx.theme().switch_thumb.
• Config key: switch.thumb.background (falls back to background color if
not set).

Co-authored-by: hl <hl@nmcsoft.com>
2025-11-26 10:25:35 +08:00
Floyd Wang
9d02133977
color_picker: Only change value when it's confirmed (#1682) 2025-11-25 10:05:43 +00:00
Jason Lee
e70d072b88
menu: Add check_side to PopupMenu to support display check at right side. (#1677)
<img width="507" height="511" alt="image"
src="https://github.com/user-attachments/assets/2d89381a-2acb-49d8-be69-8cb6ab211f41"
/>
2025-11-25 15:30:36 +08:00