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. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9b506e5d54
commit
62382f7e68
24 files changed
+1813
-31
No files matched your search
@@ -275,7 +275,6 @@ impl RenderOnce for FormField {
|
||||
.flex()
|
||||
.flex_col()
|
||||
.gap_1p5()
|
||||
.min_w_full()
|
||||
.child(self.label)
|
||||
.children(self.children)
|
||||
.children(note)
|
||||
|
||||
@@ -167,3 +167,31 @@ fn a_field_fills_a_column_its_block_measures_by_content(cx: &mut TestAppContext)
|
||||
"the field spans the card inside its padding"
|
||||
);
|
||||
}
|
||||
|
||||
/// A field in a card of a set width, inside its padding.
|
||||
struct Padded;
|
||||
|
||||
impl Render for Padded {
|
||||
fn render(&mut self, _: &mut Window, _: &mut Context<Self>) -> impl IntoElement {
|
||||
let control = div().debug_selector(|| "padded-control".into()).h_2();
|
||||
div()
|
||||
.w(px(400.))
|
||||
.p_5()
|
||||
.child(FormField::new("padded", "Name").child(control))
|
||||
}
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
fn a_field_keeps_inside_its_cards_padding(cx: &mut TestAppContext) {
|
||||
setup(cx);
|
||||
let (_, cx) = cx.add_window_view(|_, _| Padded);
|
||||
cx.run_until_parked();
|
||||
let control = cx
|
||||
.debug_bounds("padded-control")
|
||||
.expect("the control draws");
|
||||
assert_eq!(
|
||||
control.size.width,
|
||||
px(360.),
|
||||
"a percent min would take the card's outer width"
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user