Project · Issues and boards: a board, issue cards, a task's panel, labels

KanbanBoard lays columns of cards side by side. A card drags to a
place in any column: it rides raised at the pointer, a slot opens where
it would land, the other cards glide aside on motion::Flip, and the
drop asks the owner through on_move(card, column, index); a drop in its
own place asks nothing. Option with an arrow moves the focused card,
whose focus the board keys by card so it follows it across columns. A
press, Enter or Space opens it. Sprint Board is this board.

IssueCard shows an issue's status, name, assignee, title, priority,
labels and due day. TaskDetailPanel lays a task out in full: its title
edits in place, its status, priority, assignee and due day change where
they stand, and its notes and steps follow; each edit hands the whole
task on, and a blank title is not taken. LabelManager tends a team's
labels: a hue picked from a popover, a name edited in place, a delete,
and a field that makes a new one; names stay unique in any case, and a
refused name says why.

The fill rule changes: min_w_full, taken up in T30d, resolves against
a block's outer width in taffy 0.9, so a field in a padded card ran
past its padding. A component that fills now takes no width on its
root, which blocks and flex columns stretch; FormField and the new
roots do. The chart's hue names move to theme::HUE_NAMES, which the
event editor and the label manager share.
This commit is contained in:
ZacharyZhang-NY committed 2026-09-27 05:12:20 -04:00
1 parent 1633bc9293
commit 8cbd389d72
24 files changed
+1813 -31

No files matched your search

+3 -1
View File
@@ -5,6 +5,7 @@ mod generative;
mod media;
mod messaging;
mod palette;
mod project;
mod tokens;
use std::time::{Duration, Instant};
@@ -18,7 +19,8 @@ pub use files::FileSizes;
pub use generative::GenerativeSizes;
pub use media::MediaSizes;
pub use messaging::MessagingSizes;
pub use palette::{Mix, Palette, Syntax};
pub use palette::{HUE_NAMES, Mix, Palette, Syntax};
pub use project::ProjectSizes;
pub use tokens::{
AvatarSize, ContainerSize, ControlSize, Density, Elevation, IconSize, Radius, TextSize,
};
+5
View File
@@ -117,6 +117,11 @@ fn c8<const N: usize>(hex: [u32; N]) -> [Hsla; N] {
hex.map(c)
}
/// The chart's hues by name, for what wears one: an event, a label.
pub const HUE_NAMES: [&str; 8] = [
"Blue", "Teal", "Ochre", "Rose", "Violet", "Green", "Rust", "Cyan",
];
impl Palette {
/// The chart color at `hue`; a hue past the chart fails, naming `owner`.
pub fn hue(&self, hue: usize, owner: impl std::fmt::Display) -> Hsla {
+18
View File
@@ -0,0 +1,18 @@
use gpui::Rems;
use super::{Theme, tokens::px_to_rems};
/// Project's measures.
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct ProjectSizes {
/// A board's column, wide.
pub column: Rems,
}
impl Theme {
pub fn project(&self) -> ProjectSizes {
ProjectSizes {
column: px_to_rems(272.0),
}
}
}