Skip to content

Commit 7a28666

Browse files
committed
Homerolled multi-select.
1 parent 92fb56d commit 7a28666

File tree

1 file changed

+43
-6
lines changed

1 file changed

+43
-6
lines changed

browser-extension/tests/playground/claude.tsx

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,18 @@ const statBadge = cva(
4444
time: 'bg-gray-50 text-gray-700',
4545
unsent: 'bg-amber-100 text-amber-700',
4646
},
47+
clickable: {
48+
true: 'cursor-pointer border border-transparent hover:border-blue-500 hover:border-opacity-50 transition-colors',
49+
false: '',
50+
},
51+
selected: {
52+
true: 'border-blue-500 border-opacity-100',
53+
false: '',
54+
},
55+
},
56+
defaultVariants: {
57+
clickable: false,
58+
selected: false,
4759
},
4860
},
4961
)
@@ -66,15 +78,27 @@ const typeIcons = {
6678
type BadgeProps = VariantProps<typeof statBadge> & {
6779
type: keyof typeof typeIcons
6880
text?: number | string
81+
onClick?: () => void
82+
isSelected?: boolean
6983
}
7084

71-
const Badge = ({ text, type }: BadgeProps) => {
85+
const Badge = ({ text, type, onClick, isSelected }: BadgeProps) => {
7286
const Icon = typeIcons[type]
87+
const Component = onClick ? 'button' : 'span'
88+
7389
return (
74-
<span className={statBadge({ type })}>
90+
<Component
91+
className={statBadge({
92+
type,
93+
clickable: !!onClick,
94+
selected: !!isSelected
95+
})}
96+
onClick={onClick}
97+
{...(onClick && { type: 'button' })}
98+
>
7599
{type === 'blank' || <Icon className='w-3 h-3' />}
76100
{text || type}
77-
</span>
101+
</Component>
78102
)
79103
}
80104

@@ -579,9 +603,22 @@ function filterControls(
579603
</label>
580604
</div>
581605
<div className='flex rounded-md overflow-hidden'>
582-
<Badge type='unsent' />
583-
<Badge type='blank' text='both' />
584-
<Badge type='sent' />
606+
<Badge
607+
type='unsent'
608+
onClick={() => updateFilter('sentFilter', 'unsent')}
609+
isSelected={filters.sentFilter === 'unsent'}
610+
/>
611+
<Badge
612+
type='blank'
613+
text='both'
614+
onClick={() => updateFilter('sentFilter', 'all')}
615+
isSelected={filters.sentFilter === 'all'}
616+
/>
617+
<Badge
618+
type='sent'
619+
onClick={() => updateFilter('sentFilter', 'sent')}
620+
isSelected={filters.sentFilter === 'sent'}
621+
/>
585622
</div>
586623
</div>
587624
</div>

0 commit comments

Comments
 (0)