import { cn } from '@gentleduck/libs/cn' import React from 'react' import { ChevronDown, ChevronRight, Search } from './icons' export function SplitView({ left, right }: { left: React.ReactNode; right: React.ReactNode }) { return (
{right}
) } export function ListShell({ title, count, toolbar, children, }: { title?: string count?: number toolbar?: React.ReactNode children: React.ReactNode }) { return (
{title && (

{title}

)} {typeof count === 'number' && ( {count} )}
{toolbar}
{children}
) } export function ListItem({ active, onClick, dot, primary, secondary, trailing, }: { active?: boolean onClick?: () => void dot?: string primary: React.ReactNode secondary?: React.ReactNode trailing?: React.ReactNode }) { return ( ) } export function Section({ title, defaultOpen = true, toolbar, children, }: { title: string defaultOpen?: boolean toolbar?: React.ReactNode children: React.ReactNode }) { const [open, setOpen] = React.useState(defaultOpen) return (
{toolbar}
{open &&
{children}
}
) } export function DetailEmpty({ message }: { message: string }) { return (
{message}
) } export function FilterBar({ value, onChange, placeholder = 'Filter', trailing, }: { value: string onChange: (v: string) => void placeholder?: string trailing?: React.ReactNode }) { return (
onChange(e.target.value)} placeholder={placeholder} className="flex h-7 w-full rounded-md border border-input bg-background pr-2 pl-7 text-[11px] outline-none transition-colors placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50" />
{trailing}
) }