@@ -20,6 +20,8 @@ import {
2020 AccordionTrigger ,
2121} from "@/components/ui/accordion" ;
2222import { Command , CommandInput } from "@/components/ui/command" ;
23+ import { ToggleGroup , ToggleGroupItem } from "@/components/ui/toggle-group" ;
24+ import { cn } from "@/lib/utils" ;
2325
2426import { HeartIcon , HomeIcon , UsersIcon } from "@heroicons/react/24/solid" ;
2527import { IconBabyCarriage , IconAdjustments } from "@tabler/icons-react" ;
@@ -40,6 +42,11 @@ const sort_filters = [
4042 { value : "hearts" , label : "Hearts" } ,
4143] ;
4244
45+ const bubbleColors : Record < string , string > = {
46+ "0" : "border-neutral-200 bg-white dark:border-neutral-800 dark:bg-neutral-950" , // incomplete
47+ "2" : "border-green-900 bg-green-500/20" , // completed
48+ } ;
49+
4350export default function Relationships ( ) {
4451 const { activePlayer } = usePlayers ( ) ;
4552
@@ -269,19 +276,35 @@ export default function Relationships() {
269276 All Villagers
270277 </ h2 >
271278 < div className = "grid grid-cols-1 justify-between gap-2 lg:flex" >
272- < div className = "grid grid-cols-2 gap-2 sm:flex sm:gap-3" >
273- < FilterButton
274- target = { "0" }
275- _filter = { _filter }
276- title = { "Incomplete" }
277- setFilter = { setFilter }
278- />
279- < FilterButton
280- target = { "2" }
281- _filter = { _filter }
282- title = "Completed"
283- setFilter = { setFilter }
284- />
279+ < div className = "flex flex-row items-center gap-2" >
280+ < ToggleGroup
281+ variant = "outline"
282+ type = "single"
283+ value = { _filter }
284+ onValueChange = { ( val ) =>
285+ setFilter ( val === _filter ? "all" : val )
286+ }
287+ className = "gap-2"
288+ >
289+ < ToggleGroupItem value = "0" aria-label = "Show Incomplete" >
290+ < span
291+ className = { cn (
292+ "inline-block h-4 w-4 rounded-full border align-middle" ,
293+ bubbleColors [ "0" ] ,
294+ ) }
295+ />
296+ < span className = "align-middle" > Incomplete</ span >
297+ </ ToggleGroupItem >
298+ < ToggleGroupItem value = "2" aria-label = "Show Completed" >
299+ < span
300+ className = { cn (
301+ "inline-block h-4 w-4 rounded-full border align-middle" ,
302+ bubbleColors [ "2" ] ,
303+ ) }
304+ />
305+ < span className = "align-middle" > Completed</ span >
306+ </ ToggleGroupItem >
307+ </ ToggleGroup >
285308 </ div >
286309 < div className = "grid grid-cols-1 items-stretch gap-2 sm:flex" >
287310 < FilterSearch
@@ -291,14 +314,17 @@ export default function Relationships() {
291314 setFilter = { setSort }
292315 icon = { IconAdjustments }
293316 />
294- < Command className = "max-w-xs border border-b-0 dark:border-neutral-800" >
295- < CommandInput
296- onValueChange = { ( v ) => setSearch ( v ) }
297- placeholder = "Search Villagers"
298- />
299- </ Command >
300317 </ div >
301318 </ div >
319+ { /* Search Bar Row */ }
320+ < div className = "mt-2 w-full" >
321+ < Command className = "w-full border border-b-0 dark:border-neutral-800" >
322+ < CommandInput
323+ onValueChange = { ( v ) => setSearch ( v ) }
324+ placeholder = "Search Villagers"
325+ />
326+ </ Command >
327+ </ div >
302328 < div className = "grid grid-cols-1 gap-4 xl:grid-cols-4" >
303329 { Object . values ( villagers )
304330 . filter ( ( v ) => {
0 commit comments