Skip to content

Commit e42af42

Browse files
committed
fix(web): refine tool card and jira chip states
- hide jira chip labels on smaller header layouts - animate tool card border and radius state changes - update tests for the new tool card classes
1 parent 34ec15f commit e42af42

3 files changed

Lines changed: 36 additions & 7 deletions

File tree

apps/web/src/components/GitActionsJiraChips.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,12 @@ export function GitActionsJiraChips({ implementingJiraTicketKeys }: GitActionsJi
4444
fill="#2684FF"
4545
/>
4646
</svg>
47-
<span className="font-mono">{primaryKey}</span>
48-
{remainingCount > 0 ? <span className="text-foreground/50">+{remainingCount}</span> : null}
47+
<span className="sr-only font-mono @3xl/header-actions:not-sr-only">{primaryKey}</span>
48+
{remainingCount > 0 ? (
49+
<span className="sr-only text-foreground/50 @3xl/header-actions:not-sr-only">
50+
+{remainingCount}
51+
</span>
52+
) : null}
4953
</PopoverTrigger>
5054
<PopoverPopup tooltipStyle side="bottom" align="end">
5155
<div className="text-xs">

apps/web/src/components/chat/_shared/ToolCard.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ describe("ToolCard", () => {
3232
expect(markup).toContain('data-slot="collapsible-panel"');
3333
expect(markup).toContain("transition-[opacity,translate]");
3434
expect(markup).toContain("data-starting-style:opacity-0");
35+
expect(markup).toContain("data-starting-style:[&amp;&gt;div]:border-t-transparent");
36+
expect(markup).toContain("transition-[border-color]");
37+
expect(markup).toContain("transition-[border-color,box-shadow]");
38+
expect(markup).toContain("data-[state=preview]:border-border/65");
39+
expect(markup).toContain("rounded-xl");
40+
expect(markup).toContain("transition-[background-color,border-radius]");
41+
expect(markup).toContain("data-[state=preview]:rounded-b-none");
42+
expect(markup).not.toContain("data-[state=preview]:rounded-lg");
3543
expect(markup).not.toContain("transition-[height]");
3644
});
3745
});

apps/web/src/components/chat/_shared/ToolCard.tsx

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,13 @@ export function ToolCard(props: ToolCardProps) {
122122
return (
123123
<div
124124
data-scroll-anchor-target
125-
className={cn("overflow-hidden rounded-xl border border-border/40 bg-card/25")}
125+
data-state={state}
126+
className={cn(
127+
"overflow-hidden rounded-xl border bg-card/25 transition-[border-color,box-shadow] duration-200 ease-out",
128+
"data-[state=collapsed]:border-border/35 data-[state=collapsed]:shadow-none",
129+
"data-[state=expanded]:border-border/65 data-[state=expanded]:shadow-sm/10",
130+
"data-[state=preview]:border-border/65 data-[state=preview]:shadow-sm/10",
131+
)}
126132
>
127133
<HeaderRow
128134
showChevron={showChevron}
@@ -156,9 +162,14 @@ export function ToolCard(props: ToolCardProps) {
156162
<Collapsible open={isOpen}>
157163
<CollapsiblePanel
158164
animated={false}
159-
className="transition-[opacity,translate] duration-150 ease-out will-change-[opacity,transform] data-ending-style:-translate-y-1 data-ending-style:opacity-0 data-starting-style:-translate-y-1 data-starting-style:opacity-0"
165+
className="transition-[opacity,translate] duration-150 ease-out will-change-[opacity,transform] data-ending-style:-translate-y-1 data-ending-style:opacity-0 data-starting-style:-translate-y-1 data-starting-style:opacity-0 data-ending-style:[&>div]:border-t-transparent data-starting-style:[&>div]:border-t-transparent"
160166
>
161-
<div className={cn("border-t border-border/20", bodyClassName)}>
167+
<div
168+
className={cn(
169+
"border-t border-border/35 transition-[border-color] duration-200 ease-out",
170+
bodyClassName,
171+
)}
172+
>
162173
{showPreview && bodyAvailable && (
163174
<div className="relative">
164175
<div
@@ -263,7 +274,7 @@ function HeaderRow(props: HeaderRowProps) {
263274
data-state={state}
264275
onClick={onClick}
265276
className={cn(
266-
"flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-left transition-colors duration-100 hover:bg-muted/20 focus-visible:bg-muted/20 focus-visible:outline-none",
277+
"flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-left transition-[background-color,border-radius] duration-200 hover:bg-muted/20 focus-visible:bg-muted/20 focus-visible:outline-none data-[state=collapsed]:rounded-xl data-[state=expanded]:rounded-b-none data-[state=preview]:rounded-b-none",
267278
headerClassName,
268279
)}
269280
>
@@ -273,7 +284,13 @@ function HeaderRow(props: HeaderRowProps) {
273284
}
274285

275286
return (
276-
<div data-state={state} className={cn("flex items-center gap-2 px-3 py-2", headerClassName)}>
287+
<div
288+
data-state={state}
289+
className={cn(
290+
"flex items-center gap-2 px-3 py-2 transition-[border-radius] duration-150 data-[state=collapsed]:rounded-xl data-[state=expanded]:rounded-b-none data-[state=preview]:rounded-b-none",
291+
headerClassName,
292+
)}
293+
>
277294
{children}
278295
</div>
279296
);

0 commit comments

Comments
 (0)