@dimaan/ui 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/dashboard-layout/context.ts","../src/lib/utils.ts","../src/components/dashboard-layout/DashboardContent.tsx","../src/components/dashboard-layout/DashboardLayout.tsx","../src/components/dashboard-layout/DashboardMain.tsx","../src/components/header/DashboardHeader.tsx","../src/components/header/HeaderActions.tsx","../src/components/button/buttonVariants.ts","../src/components/button/Button.tsx","../src/components/header/HeaderCollapseTrigger.tsx","../src/components/header/HeaderMobileTrigger.tsx","../src/components/header/HeaderSearch.tsx","../src/components/header/HeaderTitle.tsx","../src/components/sidebar/Sidebar.tsx","../src/components/sidebar/SidebarFooter.tsx","../src/components/sidebar/SidebarGroup.tsx","../src/components/sidebar/SidebarHeader.tsx","../src/components/sidebar/SidebarNav.tsx","../src/components/sidebar/SidebarNavGroup.tsx","../src/components/sidebar/SidebarNavItem.tsx","../src/components/app-shell/AppShell.tsx","../src/components/avatar/Avatar.tsx","../src/components/checkbox/Checkbox.tsx","../src/components/field/Field.tsx","../src/components/input/inputVariants.ts","../src/components/input/Input.tsx","../src/components/language-switcher/LanguageSwitcher.tsx","../src/hooks/use-direction.ts","../src/components/table/components/Pagination.tsx","../src/components/table/components/Toolbar.tsx","../src/components/table/tableVariants.ts","../src/components/table/useTableState.ts","../src/components/table/Table.tsx","../src/components/textarea/textareaVariants.ts","../src/components/textarea/Textarea.tsx"],"names":["jsx","Button","forwardRef","jsxs","Fragment","useState","useCallback","useEffect","sizeClass","Checkbox","children","layout","useId","isValidElement","cloneElement","Input","ChevronLeft","useMemo","ChevronDown","Textarea"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from 'react';\n\nexport interface DashboardLayoutContextValue {\n collapsed: boolean;\n setCollapsed: (next: boolean) => void;\n toggleCollapsed: () => void;\n mobileOpen: boolean;\n setMobileOpen: (next: boolean) => void;\n toggleMobileOpen: () => void;\n}\n\nexport const DashboardLayoutContext = createContext<DashboardLayoutContextValue | null>(null);\n\nexport function useDashboardLayout(): DashboardLayoutContextValue {\n const ctx = useContext(DashboardLayoutContext);\n if (!ctx) {\n throw new Error('useDashboardLayout must be used within a <DashboardLayout> component.');\n }\n return ctx;\n}\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type DashboardContentProps = HTMLAttributes<HTMLElement>;\n\nexport function DashboardContent({ className, children, ...props }: DashboardContentProps) {\n return (\n <main\n className={cn(\n 'flex min-h-[calc(100vh-var(--header-height))] flex-1 flex-col gap-6 p-4 sm:p-6 lg:p-8',\n className\n )}\n {...props}\n >\n {children}\n </main>\n );\n}\n","import { type HTMLAttributes, type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { DashboardLayoutContext, type DashboardLayoutContextValue } from './context';\n\nexport interface DashboardLayoutProps extends HTMLAttributes<HTMLDivElement> {\n defaultCollapsed?: boolean;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n children: ReactNode;\n}\n\nexport function DashboardLayout({\n defaultCollapsed = false,\n collapsed: collapsedProp,\n onCollapsedChange,\n className,\n children,\n ...props\n}: DashboardLayoutProps) {\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);\n const [mobileOpen, setMobileOpenState] = useState(false);\n\n const isControlled = collapsedProp !== undefined;\n const collapsed = isControlled ? collapsedProp : internalCollapsed;\n\n const setCollapsed = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalCollapsed(next);\n onCollapsedChange?.(next);\n },\n [isControlled, onCollapsedChange]\n );\n\n const toggleCollapsed = useCallback(() => {\n setCollapsed(!collapsed);\n }, [collapsed, setCollapsed]);\n\n const setMobileOpen = useCallback((next: boolean) => {\n setMobileOpenState(next);\n }, []);\n\n const toggleMobileOpen = useCallback(() => {\n setMobileOpenState((prev) => !prev);\n }, []);\n\n const value = useMemo<DashboardLayoutContextValue>(\n () => ({\n collapsed,\n setCollapsed,\n toggleCollapsed,\n mobileOpen,\n setMobileOpen,\n toggleMobileOpen,\n }),\n [collapsed, setCollapsed, toggleCollapsed, mobileOpen, setMobileOpen, toggleMobileOpen]\n );\n\n return (\n <DashboardLayoutContext.Provider value={value}>\n <div\n data-collapsed={collapsed ? 'true' : 'false'}\n className={cn(\n 'relative flex min-h-screen w-full bg-background text-foreground font-sans antialiased',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </DashboardLayoutContext.Provider>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\nimport { useDashboardLayout } from './context';\n\nexport type DashboardMainProps = HTMLAttributes<HTMLDivElement>;\n\nexport function DashboardMain({ className, children, ...props }: DashboardMainProps) {\n const { collapsed } = useDashboardLayout();\n\n return (\n <div\n className={cn(\n 'flex min-h-screen flex-1 flex-col transition-[margin] duration-200 ease-out',\n // On desktop, push the main column past the fixed sidebar using logical margin.\n collapsed ? 'lg:ms-[var(--sidebar-width-collapsed)]' : 'lg:ms-[var(--sidebar-width)]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type DashboardHeaderProps = HTMLAttributes<HTMLElement>;\n\nexport function DashboardHeader({ className, children, ...props }: DashboardHeaderProps) {\n return (\n <header\n className={cn(\n 'sticky top-0 z-20 flex h-[var(--header-height)] shrink-0 items-center gap-3 border-b border-header-border bg-header/80 px-4 text-header-foreground backdrop-blur-md sm:px-6',\n className\n )}\n {...props}\n >\n {children}\n </header>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type HeaderActionsProps = HTMLAttributes<HTMLDivElement>;\n\nexport function HeaderActions({ className, children, ...props }: HeaderActionsProps) {\n return (\n <div className={cn('ms-auto flex items-center gap-1', className)} {...props}>\n {children}\n </div>\n );\n}\n","export type ButtonVariant =\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'destructive'\n | 'success'\n | 'warning'\n | 'link';\n\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'icon' | 'icon-sm';\n\nexport const buttonVariantClass: Record<ButtonVariant, string> = {\n primary:\n 'bg-primary text-primary-foreground shadow-sm hover:bg-primary/90 focus-visible:ring-primary/40',\n secondary: 'bg-muted text-foreground hover:bg-muted/80 focus-visible:ring-muted-foreground/30',\n outline:\n 'border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground focus-visible:ring-ring/40',\n ghost:\n 'bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground focus-visible:ring-ring/40',\n destructive:\n 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90 focus-visible:ring-destructive/40',\n success:\n 'bg-success text-success-foreground shadow-sm hover:bg-success/90 focus-visible:ring-success/40',\n warning:\n 'bg-warning text-warning-foreground shadow-sm hover:bg-warning/90 focus-visible:ring-warning/40',\n link: 'text-primary underline-offset-4 hover:underline focus-visible:ring-primary/40 px-0 shadow-none',\n};\n\nexport const buttonSizeClass: Record<ButtonSize, string> = {\n sm: 'h-8 gap-1.5 rounded-md px-3 text-sm',\n md: 'h-9 gap-2 rounded-md px-4 text-sm',\n lg: 'h-11 gap-2.5 rounded-md px-6 text-base',\n icon: 'h-9 w-9 shrink-0 rounded-md p-0',\n 'icon-sm': 'h-8 w-8 shrink-0 rounded-md p-0',\n};\n\nexport const buttonBaseClass =\n 'group/button relative inline-flex items-center justify-center font-medium select-none whitespace-nowrap outline-none transition-[background-color,color,box-shadow,opacity] focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0';\n","import { Loader2 } from 'lucide-react';\nimport {\n type ButtonHTMLAttributes,\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type ButtonSize,\n type ButtonVariant,\n buttonBaseClass,\n buttonSizeClass,\n buttonVariantClass,\n} from './buttonVariants';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Show a leading spinner and disable interaction. */\n loading?: boolean;\n /** Optional text shown beside the spinner while loading. Defaults to keeping `children` visible. */\n loadingText?: ReactNode;\n /** Element rendered before the label (auto-hidden while loading). */\n leadingIcon?: ReactNode;\n /** Element rendered after the label (auto-hidden while loading). */\n trailingIcon?: ReactNode;\n /** Stretch to fill the parent's inline width. */\n fullWidth?: boolean;\n /**\n * Render the button's classes onto the single child element instead of a `<button>`.\n * Useful for routing libraries — e.g. `<Button asChild><Link to=\"/x\">Go</Link></Button>`.\n */\n asChild?: boolean;\n}\n\ntype SlottableChild = ReactElement<{\n className?: string;\n children?: ReactNode;\n 'data-loading'?: 'true';\n 'aria-disabled'?: boolean | 'true' | 'false';\n}>;\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n loading = false,\n loadingText,\n leadingIcon,\n trailingIcon,\n fullWidth = false,\n asChild = false,\n type,\n disabled,\n className,\n children,\n ...props\n },\n ref\n) {\n const isDisabled = disabled || loading;\n\n const composedClass = cn(\n buttonBaseClass,\n buttonVariantClass[variant],\n buttonSizeClass[size],\n fullWidth && 'w-full',\n className\n );\n\n const content = (\n <>\n {loading ? <Spinner /> : leadingIcon ? <Slot>{leadingIcon}</Slot> : null}\n {loading && loadingText !== undefined ? loadingText : children}\n {!loading && trailingIcon ? <Slot>{trailingIcon}</Slot> : null}\n </>\n );\n\n if (asChild) {\n const child = Children.only(children) as SlottableChild;\n if (!isValidElement(child)) {\n throw new Error('Button: `asChild` requires a single valid React element as a child.');\n }\n\n const mergedClassName = cn(composedClass, child.props.className);\n\n return cloneElement(child, {\n ...child.props,\n className: mergedClassName,\n 'aria-disabled': isDisabled ? true : undefined,\n 'data-loading': loading ? 'true' : undefined,\n children: (\n <>\n {loading ? <Spinner /> : leadingIcon ? <Slot>{leadingIcon}</Slot> : null}\n {loading && loadingText !== undefined ? loadingText : child.props.children}\n {!loading && trailingIcon ? <Slot>{trailingIcon}</Slot> : null}\n </>\n ),\n });\n }\n\n return (\n <button\n ref={ref}\n type={type ?? 'button'}\n disabled={isDisabled}\n data-loading={loading ? 'true' : undefined}\n className={composedClass}\n {...props}\n >\n {content}\n </button>\n );\n});\n\nfunction Slot({ children }: { children: ReactNode }) {\n return (\n <span aria-hidden=\"true\" className=\"inline-flex h-4 w-4 items-center justify-center\">\n {children}\n </span>\n );\n}\n\nfunction Spinner() {\n return (\n <Loader2 aria-hidden=\"true\" className=\"h-4 w-4 animate-spin\" data-testid=\"button-spinner\" />\n );\n}\n","import { ChevronLeft } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { cn } from '../../lib/utils';\nimport { Button, type ButtonProps } from '../button';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport interface HeaderCollapseTriggerProps extends Omit<ButtonProps, 'aria-label' | 'children'> {\n 'aria-label'?: string;\n icon?: ReactNode;\n}\n\nexport function HeaderCollapseTrigger({\n icon,\n className,\n onClick,\n variant = 'ghost',\n size = 'icon',\n 'aria-label': ariaLabel = 'Toggle sidebar',\n ...props\n}: HeaderCollapseTriggerProps) {\n const { toggleCollapsed, collapsed } = useDashboardLayout();\n\n return (\n <Button\n aria-label={ariaLabel}\n aria-pressed={collapsed}\n variant={variant}\n size={size}\n onClick={(e) => {\n toggleCollapsed();\n onClick?.(e);\n }}\n className={cn('hidden lg:inline-flex', className)}\n {...props}\n >\n {icon ?? <ChevronIcon collapsed={collapsed} />}\n </Button>\n );\n}\n\nfunction ChevronIcon({ collapsed }: { collapsed: boolean }) {\n // Chevron points toward the inline-start edge; in RTL it flips automatically\n // because we use a CSS transform tied to dir.\n return (\n <ChevronLeft\n aria-hidden=\"true\"\n className={cn(\n 'h-[18px] w-[18px] transition-transform duration-200 rtl:-scale-x-100',\n collapsed && 'rotate-180'\n )}\n />\n );\n}\n","import { Menu } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Button, type ButtonProps } from '../button';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport interface HeaderMobileTriggerProps extends Omit<ButtonProps, 'aria-label' | 'children'> {\n 'aria-label'?: string;\n icon?: ReactNode;\n}\n\nexport function HeaderMobileTrigger({\n icon,\n className,\n onClick,\n variant = 'ghost',\n size = 'icon',\n 'aria-label': ariaLabel = 'Toggle navigation',\n ...props\n}: HeaderMobileTriggerProps) {\n const { toggleMobileOpen, mobileOpen } = useDashboardLayout();\n\n return (\n <Button\n aria-label={ariaLabel}\n aria-expanded={mobileOpen}\n variant={variant}\n size={size}\n onClick={(e) => {\n toggleMobileOpen();\n onClick?.(e);\n }}\n className={className ? `lg:hidden ${className}` : 'lg:hidden'}\n {...props}\n >\n {icon ?? <DefaultMenuIcon />}\n </Button>\n );\n}\n\nfunction DefaultMenuIcon() {\n return <Menu aria-hidden=\"true\" className=\"h-[18px] w-[18px]\" />;\n}\n","import { forwardRef, type InputHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport interface HeaderSearchProps extends InputHTMLAttributes<HTMLInputElement> {\n icon?: ReactNode;\n containerClassName?: string;\n}\n\nexport const HeaderSearch = forwardRef<HTMLInputElement, HeaderSearchProps>(\n ({ icon, containerClassName, className, type = 'search', ...props }, ref) => (\n <div\n className={cn('relative hidden h-9 w-full max-w-sm items-center md:flex', containerClassName)}\n >\n {icon ? (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute start-3 flex h-4 w-4 items-center justify-center text-muted-foreground\"\n >\n {icon}\n </span>\n ) : null}\n <input\n ref={ref}\n type={type}\n className={cn(\n 'h-9 w-full rounded-md border border-input bg-background text-sm transition-colors',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n icon ? 'ps-9 pe-3' : 'px-3',\n className\n )}\n {...props}\n />\n </div>\n )\n);\nHeaderSearch.displayName = 'HeaderSearch';\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type HeaderTitleProps = HTMLAttributes<HTMLDivElement>;\n\nexport function HeaderTitle({ className, children, ...props }: HeaderTitleProps) {\n return (\n <div\n className={cn('flex min-w-0 flex-1 items-center gap-2 text-base font-semibold', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import { type HTMLAttributes, useEffect } from 'react';\nimport { cn } from '../../lib/utils';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport type SidebarProps = HTMLAttributes<HTMLElement>;\n\nexport function Sidebar({ className, children, ...props }: SidebarProps) {\n const { collapsed, mobileOpen, setMobileOpen } = useDashboardLayout();\n\n useEffect(() => {\n if (!mobileOpen) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMobileOpen(false);\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [mobileOpen, setMobileOpen]);\n\n return (\n <>\n {/* Mobile backdrop */}\n <div\n aria-hidden=\"true\"\n onClick={() => setMobileOpen(false)}\n className={cn(\n 'fixed inset-0 z-30 bg-foreground/40 backdrop-blur-sm transition-opacity duration-200 lg:hidden',\n mobileOpen ? 'opacity-100' : 'pointer-events-none opacity-0'\n )}\n />\n\n <aside\n data-collapsed={collapsed ? 'true' : 'false'}\n data-mobile-open={mobileOpen ? 'true' : 'false'}\n className={cn(\n // Positioning\n 'fixed inset-y-0 start-0 z-40 flex flex-col',\n // Surface\n 'bg-sidebar text-sidebar-foreground border-e border-sidebar-border',\n // Sizing — width animates between full and collapsed\n collapsed ? 'w-[var(--sidebar-width-collapsed)]' : 'w-[var(--sidebar-width)]',\n // Motion\n 'transition-[transform,width] duration-200 ease-out',\n // Mobile slide: hidden by default, visible when mobileOpen.\n // Logical translate via rtl variant so it slides off the inline-start edge\n // in both LTR and RTL.\n mobileOpen\n ? 'translate-x-0'\n : '-translate-x-full rtl:translate-x-full lg:translate-x-0 lg:rtl:translate-x-0',\n className\n )}\n {...props}\n >\n {children}\n </aside>\n </>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type SidebarFooterProps = HTMLAttributes<HTMLDivElement>;\n\nexport function SidebarFooter({ className, children, ...props }: SidebarFooterProps) {\n return (\n <div\n className={cn(\n 'mt-auto flex shrink-0 items-center gap-2 border-t border-sidebar-border p-3',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../lib/utils';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport interface SidebarGroupProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n}\n\nexport function SidebarGroup({ label, className, children, ...props }: SidebarGroupProps) {\n const { collapsed } = useDashboardLayout();\n\n return (\n <div className={cn('flex flex-col gap-1 py-2', className)} {...props}>\n {label ? (\n <div\n className={cn(\n 'px-3 pb-1 text-xs font-medium uppercase tracking-wider text-muted-foreground transition-opacity',\n collapsed && 'pointer-events-none h-0 overflow-hidden opacity-0'\n )}\n >\n {label}\n </div>\n ) : null}\n <div className=\"flex flex-col gap-0.5\">{children}</div>\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type SidebarHeaderProps = HTMLAttributes<HTMLDivElement>;\n\nexport function SidebarHeader({ className, children, ...props }: SidebarHeaderProps) {\n return (\n <div\n className={cn(\n 'flex h-[var(--header-height)] shrink-0 items-center gap-2 border-b border-sidebar-border px-3',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type SidebarNavProps = HTMLAttributes<HTMLElement>;\n\nexport function SidebarNav({ className, children, ...props }: SidebarNavProps) {\n return (\n <nav className={cn('flex flex-1 flex-col gap-1 overflow-y-auto p-2', className)} {...props}>\n {children}\n </nav>\n );\n}\n","import { ChevronDown } from 'lucide-react';\nimport {\n type ButtonHTMLAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useState,\n} from 'react';\nimport { cn } from '../../lib/utils';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport interface SidebarNavGroupProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n icon?: ReactNode;\n label?: ReactNode;\n endSlot?: ReactNode;\n /** Highlight the parent (e.g. when one of its children is active). */\n active?: boolean;\n /** Uncontrolled initial state. */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: ReactNode;\n}\n\nexport function SidebarNavGroup({\n icon,\n label,\n endSlot,\n active = false,\n defaultOpen = false,\n open: openProp,\n onOpenChange,\n className,\n children,\n onClick,\n ...props\n}: SidebarNavGroupProps) {\n const { collapsed } = useDashboardLayout();\n const submenuId = useId();\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n // When the sidebar collapses to icon-only, force submenu shut so it doesn't\n // try to render in a 4rem-wide rail.\n useEffect(() => {\n if (collapsed && open) setOpen(false);\n }, [collapsed, open, setOpen]);\n\n const titleAttr = collapsed && typeof label === 'string' ? label : (props.title ?? undefined);\n\n // Hide children entirely when the sidebar is collapsed — flyout TBD.\n const showChildren = !collapsed;\n\n return (\n <div className=\"flex flex-col\">\n <button\n type=\"button\"\n aria-expanded={showChildren ? open : undefined}\n aria-controls={showChildren ? submenuId : undefined}\n data-active={active ? 'true' : undefined}\n title={titleAttr}\n onClick={(e) => {\n if (showChildren) setOpen(!open);\n onClick?.(e);\n }}\n className={cn(\n 'group relative flex h-9 w-full items-center gap-3 rounded-md px-3 text-sm font-medium outline-none transition-colors',\n 'text-sidebar-foreground/80 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-sidebar',\n active && 'bg-sidebar-accent text-sidebar-accent-foreground',\n collapsed && 'justify-center px-0',\n className\n )}\n {...props}\n >\n {icon ? (\n <span aria-hidden=\"true\" className=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n {icon}\n </span>\n ) : null}\n <span\n className={cn(\n 'flex-1 truncate text-start transition-[opacity,width]',\n collapsed && 'pointer-events-none w-0 opacity-0'\n )}\n >\n {label}\n </span>\n {endSlot && !collapsed ? (\n <span className=\"flex shrink-0 items-center\">{endSlot}</span>\n ) : null}\n {showChildren ? <ChevronCaret open={open} /> : null}\n </button>\n\n <div\n id={submenuId}\n hidden={!showChildren || !open}\n className={cn(\n 'grid transition-[grid-template-rows] duration-200 ease-out',\n showChildren && open ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"flex flex-col gap-0.5 ps-7 pt-1\">{children}</div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ChevronCaret({ open }: { open: boolean }) {\n return (\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n 'h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform duration-200',\n open && 'rotate-180'\n )}\n />\n );\n}\n","import type { AnchorHTMLAttributes, ReactElement, ReactNode } from 'react';\nimport { cn } from '../../lib/utils';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport type SidebarNavItemRenderProps = {\n className: string;\n children: ReactNode;\n title?: string;\n 'aria-current'?: 'page';\n 'data-active'?: 'true';\n};\n\nexport interface SidebarNavItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n icon?: ReactNode;\n active?: boolean;\n label?: ReactNode;\n endSlot?: ReactNode;\n /**\n * Override the rendered element. Use this to plug in routing-library link\n * components (e.g. react-router `<Link>`) while keeping the styling.\n */\n render?: (props: SidebarNavItemRenderProps) => ReactElement;\n}\n\nexport function SidebarNavItem({\n icon,\n active = false,\n label,\n endSlot,\n className,\n children,\n render,\n ...props\n}: SidebarNavItemProps) {\n const { collapsed } = useDashboardLayout();\n const labelContent = label ?? children;\n const titleAttr = collapsed && typeof labelContent === 'string' ? labelContent : props.title;\n\n const inner = (\n <>\n {icon ? (\n <span aria-hidden=\"true\" className=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n {icon}\n </span>\n ) : null}\n <span\n className={cn(\n 'flex-1 truncate text-start transition-[opacity,width]',\n collapsed && 'pointer-events-none w-0 opacity-0'\n )}\n >\n {labelContent}\n </span>\n {endSlot && !collapsed ? (\n <span className=\"ms-auto flex shrink-0 items-center\">{endSlot}</span>\n ) : null}\n </>\n );\n\n const computedClass = cn(\n 'group relative flex h-9 items-center gap-3 rounded-md px-3 text-sm font-medium outline-none transition-colors',\n 'text-sidebar-foreground/80 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-sidebar',\n active && 'bg-sidebar-accent text-sidebar-accent-foreground',\n collapsed && 'justify-center px-0',\n className\n );\n\n if (render) {\n return render({\n className: computedClass,\n children: inner,\n title: titleAttr,\n 'aria-current': active ? 'page' : undefined,\n 'data-active': active ? 'true' : undefined,\n });\n }\n\n return (\n <a\n aria-current={active ? 'page' : undefined}\n data-active={active ? 'true' : undefined}\n title={titleAttr}\n className={computedClass}\n {...props}\n >\n {inner}\n </a>\n );\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport {\n DashboardContent,\n DashboardLayout,\n type DashboardLayoutProps,\n DashboardMain,\n} from '../dashboard-layout';\nimport {\n DashboardHeader,\n HeaderActions,\n HeaderCollapseTrigger,\n HeaderMobileTrigger,\n HeaderSearch,\n HeaderTitle,\n} from '../header';\nimport {\n Sidebar,\n SidebarFooter,\n SidebarHeader,\n SidebarNav,\n SidebarNavGroup,\n SidebarNavItem,\n} from '../sidebar';\n\ntype RenderLink = (props: {\n href?: string;\n className?: string;\n children: ReactNode;\n 'aria-current'?: 'page';\n}) => ReactElement;\n\nexport interface AppShellNavItem {\n /** Optional stable key. Falls back to array index if omitted — only safe for static nav. */\n key?: string;\n label: ReactNode;\n href?: string;\n icon?: ReactNode;\n active?: boolean;\n endSlot?: ReactNode;\n /** Optional render prop for routing libraries (e.g. react-router <Link>). */\n render?: RenderLink;\n}\n\nexport interface AppShellNavGroup {\n /** Optional stable key. Falls back to array index if omitted — only safe for static nav. */\n key?: string;\n label: ReactNode;\n icon?: ReactNode;\n active?: boolean;\n defaultOpen?: boolean;\n items: AppShellNavItem[];\n}\n\nexport interface AppShellBrand {\n logo?: ReactNode;\n name?: ReactNode;\n href?: string;\n}\n\nexport interface AppShellProps\n extends Pick<DashboardLayoutProps, 'defaultCollapsed' | 'collapsed' | 'onCollapsedChange'> {\n brand?: AppShellBrand;\n /**\n * Flat list of nav entries: leaf items (with `href` or `render`) and/or\n * collapsible groups (with `items`). For more advanced layouts (sections,\n * dividers, custom structure), compose `Sidebar` + `SidebarNav` directly.\n */\n nav: Array<AppShellNavItem | AppShellNavGroup>;\n title?: ReactNode;\n searchPlaceholder?: string;\n onSearch?: (value: string) => void;\n /** Slot rendered after the search box (e.g. notifications, user menu). */\n headerActions?: ReactNode;\n /** Slot rendered at the bottom of the sidebar (e.g. user badge). */\n sidebarFooter?: ReactNode;\n children: ReactNode;\n}\n\nfunction isGroup(entry: AppShellNavItem | AppShellNavGroup): entry is AppShellNavGroup {\n return 'items' in entry && Array.isArray((entry as AppShellNavGroup).items);\n}\n\nfunction renderItem(item: AppShellNavItem, fallbackKey: string | number) {\n const key = item.key ?? fallbackKey;\n if (item.render) {\n return (\n <SidebarNavItem\n key={key}\n icon={item.icon}\n active={item.active}\n endSlot={item.endSlot}\n render={item.render}\n >\n {item.label}\n </SidebarNavItem>\n );\n }\n return (\n <SidebarNavItem\n key={key}\n href={item.href}\n icon={item.icon}\n active={item.active}\n endSlot={item.endSlot}\n >\n {item.label}\n </SidebarNavItem>\n );\n}\n\nexport function AppShell({\n brand,\n nav,\n title,\n searchPlaceholder,\n onSearch,\n headerActions,\n sidebarFooter,\n defaultCollapsed,\n collapsed,\n onCollapsedChange,\n children,\n}: AppShellProps) {\n return (\n <DashboardLayout\n defaultCollapsed={defaultCollapsed}\n collapsed={collapsed}\n onCollapsedChange={onCollapsedChange}\n >\n <Sidebar>\n {(brand?.logo || brand?.name) && (\n <SidebarHeader>\n {brand.logo}\n {brand.name ? (\n <span className=\"truncate text-sm font-semibold\">{brand.name}</span>\n ) : null}\n </SidebarHeader>\n )}\n\n <SidebarNav>\n {nav.map((entry, index) =>\n isGroup(entry) ? (\n <SidebarNavGroup\n key={entry.key ?? index}\n label={entry.label}\n icon={entry.icon}\n active={entry.active}\n defaultOpen={entry.defaultOpen ?? entry.items.some((i) => i.active)}\n >\n {entry.items.map((item, itemIndex) => renderItem(item, itemIndex))}\n </SidebarNavGroup>\n ) : (\n renderItem(entry, index)\n )\n )}\n </SidebarNav>\n\n {sidebarFooter ? <SidebarFooter>{sidebarFooter}</SidebarFooter> : null}\n </Sidebar>\n\n <DashboardMain>\n <DashboardHeader>\n <HeaderMobileTrigger />\n <HeaderCollapseTrigger />\n {title ? (\n <HeaderTitle>\n <span className=\"truncate\">{title}</span>\n </HeaderTitle>\n ) : null}\n {searchPlaceholder ? (\n <HeaderSearch\n placeholder={searchPlaceholder}\n onChange={onSearch ? (e) => onSearch(e.target.value) : undefined}\n />\n ) : null}\n {headerActions ? <HeaderActions>{headerActions}</HeaderActions> : null}\n </DashboardHeader>\n\n <DashboardContent>{children}</DashboardContent>\n </DashboardMain>\n </DashboardLayout>\n );\n}\n","import { type HTMLAttributes, useState } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n src?: string;\n alt?: string;\n fallback?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst sizeClass = {\n sm: 'h-7 w-7 text-xs',\n md: 'h-9 w-9 text-sm',\n lg: 'h-11 w-11 text-base',\n};\n\nexport function Avatar({ src, alt = '', fallback, size = 'md', className, ...props }: AvatarProps) {\n const [errored, setErrored] = useState(false);\n const showImage = Boolean(src) && !errored;\n\n return (\n <span\n className={cn(\n 'inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full bg-muted text-muted-foreground font-medium select-none',\n sizeClass[size],\n className\n )}\n {...props}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt}\n onError={() => setErrored(true)}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <span aria-hidden={!fallback}>{fallback ?? '?'}</span>\n )}\n </span>\n );\n}\n","import { Check, Minus } from 'lucide-react';\nimport {\n type ChangeEvent,\n forwardRef,\n type InputHTMLAttributes,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n} from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type CheckboxSize = 'sm' | 'md';\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'onChange'> {\n /** Tri-state visual: when true, renders a dash and sets `aria-checked=\"mixed\"`. */\n indeterminate?: boolean;\n /** Convenience handler that receives the new checked boolean. */\n onCheckedChange?: (checked: boolean) => void;\n /** Standard change handler. Fires alongside `onCheckedChange`. */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n size?: CheckboxSize;\n}\n\nconst sizeClass: Record<CheckboxSize, string> = {\n sm: 'h-3.5 w-3.5',\n md: 'h-4 w-4',\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n checked,\n defaultChecked,\n indeterminate = false,\n onCheckedChange,\n onChange,\n disabled,\n size = 'md',\n className,\n 'aria-checked': ariaCheckedProp,\n ...rest\n },\n forwardedRef\n) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n useImperativeHandle(forwardedRef, () => inputRef.current as HTMLInputElement, []);\n\n useLayoutEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const ariaChecked = ariaCheckedProp ?? (indeterminate ? 'mixed' : undefined);\n\n return (\n <span className={cn('relative inline-flex shrink-0', sizeClass[size], className)}>\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-checked={ariaChecked}\n onChange={(event) => {\n onChange?.(event);\n onCheckedChange?.(event.currentTarget.checked);\n }}\n className={cn(\n 'peer absolute inset-0 m-0 cursor-pointer appearance-none rounded-sm border border-input bg-background',\n 'transition-colors',\n 'checked:border-primary checked:bg-primary',\n 'indeterminate:border-primary indeterminate:bg-primary',\n 'hover:border-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background'\n )}\n {...rest}\n />\n <Check\n aria-hidden=\"true\"\n strokeWidth={3}\n className=\"pointer-events-none absolute inset-0 m-auto h-3 w-3 text-primary-foreground opacity-0 peer-checked:opacity-100 peer-indeterminate:opacity-0\"\n />\n <Minus\n aria-hidden=\"true\"\n strokeWidth={3}\n className=\"pointer-events-none absolute inset-0 m-auto h-3 w-3 text-primary-foreground opacity-0 peer-indeterminate:opacity-100\"\n />\n </span>\n );\n});\n","import {\n cloneElement,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type Ref,\n useId,\n} from 'react';\nimport {\n type Control,\n Controller,\n type FieldPath,\n type FieldValues,\n useFormContext,\n} from 'react-hook-form';\nimport { cn } from '../../lib/utils';\n\nexport interface FieldRHFProps<\n TValues extends FieldValues = FieldValues,\n TName extends FieldPath<TValues> = FieldPath<TValues>,\n> {\n /**\n * RHF `Control` returned from `useForm()`. Optional when `Field` is rendered\n * inside a `<FormProvider>` — the control is read from context automatically.\n */\n control?: Control<TValues>;\n /** Path to the field within the form values. */\n name: TName;\n}\n\ninterface FieldLayoutProps {\n /** Label rendered above the control. */\n label?: ReactNode;\n /** Helper text rendered under the control when there's no error. */\n description?: ReactNode;\n /** Marks the field as required (visual `*` + native `required`). */\n required?: boolean;\n /** Disables the wrapped control. */\n disabled?: boolean;\n /** Stretch the wrapper to fill its parent. Defaults to `true`. */\n fullWidth?: boolean;\n /** Class applied to the outer wrapper. */\n className?: string;\n /** The single control element to wrap. Receives id + aria + (in RHF mode) field props. */\n children: ReactElement;\n}\n\ninterface FieldManualProps extends FieldLayoutProps {\n control?: never;\n name?: never;\n /** Error message to display. Pass falsy when valid. */\n error?: ReactNode;\n /** Override `aria-invalid`. Defaults to `!!error` when omitted. */\n invalid?: boolean;\n}\n\ninterface FieldRHFOnlyProps<TValues extends FieldValues, TName extends FieldPath<TValues>>\n extends FieldLayoutProps,\n FieldRHFProps<TValues, TName> {\n error?: never;\n invalid?: never;\n}\n\nexport type FieldProps<\n TValues extends FieldValues = FieldValues,\n TName extends FieldPath<TValues> = FieldPath<TValues>,\n> = FieldManualProps | FieldRHFOnlyProps<TValues, TName>;\n\n/**\n * `Field` wraps a single form control with a label, description, and error\n * message. It works in three modes:\n *\n * 1. **FormProvider context mode** (recommended): pass only `name`. The\n * `control` is pulled from the surrounding `<FormProvider>`.\n * 2. **Explicit control mode**: pass both `control` and `name` (useful when you\n * don't want a `FormProvider`, or when you have multiple forms on the page).\n * 3. **Manual mode**: omit `name`. Provide `error` / `invalid` yourself.\n *\n * @example FormProvider mode\n * ```tsx\n * <FormProvider {...form}>\n * <form onSubmit={form.handleSubmit(onSubmit)}>\n * <Field name=\"email\" label=\"Email\" description=\"…\">\n * <Input type=\"email\" />\n * </Field>\n * </form>\n * </FormProvider>\n * ```\n *\n * @example Explicit control mode\n * ```tsx\n * <Field control={form.control} name=\"email\" label=\"Email\">\n * <Input type=\"email\" />\n * </Field>\n * ```\n *\n * @example Manual mode\n * ```tsx\n * <Field label=\"Email\" error={errorMessage}>\n * <Input value={email} onChange={(e) => setEmail(e.target.value)} />\n * </Field>\n * ```\n */\nexport function Field<\n TValues extends FieldValues = FieldValues,\n TName extends FieldPath<TValues> = FieldPath<TValues>,\n>(props: FieldProps<TValues, TName>): ReactElement {\n // Always call the hook (rules of hooks). Returns `null` when no provider.\n const formContext = useFormContext<TValues>();\n\n if (props.name !== undefined) {\n const { control: explicitControl, name, children, ...layout } = props;\n const control = explicitControl ?? formContext?.control;\n\n if (!control) {\n throw new Error(\n '<Field name=\"...\"> requires either a `control` prop OR being rendered inside ' +\n '<FormProvider>. Wrap your form with <FormProvider {...form}> from react-hook-form, ' +\n 'or pass `control={form.control}` explicitly.'\n );\n }\n\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, fieldState }) => (\n <FieldShell {...layout} error={fieldState.error?.message} invalid={fieldState.invalid}>\n {cloneFieldChild(children, {\n name: field.name,\n value: field.value ?? '',\n onChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n disabled: layout.disabled ?? field.disabled,\n })}\n </FieldShell>\n )}\n />\n );\n }\n\n const { children, error, invalid, ...layout } = props as FieldManualProps;\n return (\n <FieldShell {...layout} error={error} invalid={invalid ?? Boolean(error)}>\n {children}\n </FieldShell>\n );\n}\n\ninterface FieldShellProps extends FieldLayoutProps {\n error?: ReactNode;\n invalid?: boolean;\n}\n\nfunction FieldShell({\n label,\n description,\n error,\n invalid = false,\n required = false,\n disabled = false,\n fullWidth = true,\n className,\n children,\n}: FieldShellProps): ReactElement {\n const reactId = useId();\n\n if (!isValidElement(children)) {\n throw new Error('<Field> requires a single React element as its child.');\n }\n\n const childProps = (children as ReactElement<Record<string, unknown>>).props;\n const id = (childProps.id as string | undefined) ?? reactId;\n const descriptionId = `${id}-description`;\n const errorId = `${id}-error`;\n\n const showError = invalid && error !== undefined && error !== null && error !== false;\n const showDescription = !showError && description !== undefined && description !== null;\n\n const userDescribedBy = childProps['aria-describedby'] as string | undefined;\n const describedBy =\n [userDescribedBy, showDescription ? descriptionId : null, showError ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const enhancedChild = cloneFieldChild(children, {\n id,\n 'aria-invalid': (childProps['aria-invalid'] as boolean | undefined) ?? (invalid || undefined),\n 'aria-describedby': describedBy,\n disabled: (childProps.disabled as boolean | undefined) ?? disabled,\n required: (childProps.required as boolean | undefined) ?? required,\n });\n\n return (\n <div\n data-invalid={invalid || undefined}\n data-disabled={disabled || undefined}\n className={cn('flex flex-col gap-1.5', fullWidth && 'w-full', className)}\n >\n {label !== undefined && label !== null && (\n <label\n htmlFor={id}\n className={cn(\n 'text-sm font-medium select-none text-foreground',\n disabled && 'opacity-50',\n invalid && 'text-destructive'\n )}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"ms-0.5 text-destructive\">\n *\n </span>\n )}\n </label>\n )}\n\n {enhancedChild}\n\n {showError ? (\n <p\n id={errorId}\n role=\"alert\"\n aria-live=\"polite\"\n className=\"text-xs font-medium text-destructive\"\n >\n {error}\n </p>\n ) : showDescription ? (\n <p id={descriptionId} className=\"text-xs text-muted-foreground\">\n {description}\n </p>\n ) : null}\n </div>\n );\n}\n\n/**\n * Clone a child element merging the supplied props. User-provided props on the\n * child take precedence, so consumers can always override our defaults.\n */\nfunction cloneFieldChild(\n child: ReactElement,\n injected: Record<string, unknown> & { ref?: Ref<unknown> }\n): ReactElement {\n const childProps = (child as ReactElement<Record<string, unknown>>).props;\n const childRef = (child as ReactElement & { ref?: Ref<unknown> }).ref;\n const merged: Record<string, unknown> = { ...injected };\n\n for (const key of Object.keys(childProps)) {\n const value = childProps[key];\n if (value !== undefined) merged[key] = value;\n }\n\n if (injected.ref) {\n merged.ref = mergeRefs(injected.ref, childRef);\n } else if (childRef) {\n merged.ref = childRef;\n }\n\n return cloneElement(child, merged);\n}\n\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>): Ref<T> {\n return (instance: T) => {\n for (const ref of refs) {\n if (typeof ref === 'function') ref(instance);\n else if (ref && typeof ref === 'object') (ref as { current: T | null }).current = instance;\n }\n };\n}\n","export type InputVariant = 'default' | 'filled' | 'ghost';\n\nexport type InputSize = 'sm' | 'md' | 'lg';\n\nexport const inputVariantClass: Record<InputVariant, string> = {\n default: 'border border-input bg-background hover:border-ring',\n filled: 'border border-transparent bg-muted hover:bg-muted/80',\n ghost: 'border border-transparent bg-transparent hover:bg-accent',\n};\n\nexport const inputSizeClass: Record<InputSize, string> = {\n sm: 'h-8 rounded-md px-2.5 text-sm gap-1.5',\n md: 'h-9 rounded-md px-3 text-sm gap-2',\n lg: 'h-11 rounded-md px-4 text-base gap-2.5',\n};\n\nexport const inputBaseClass =\n 'group/input relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:ring-2 focus-within:ring-ring/40 focus-within:ring-offset-1 focus-within:ring-offset-background aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[input:disabled]:pointer-events-none has-[input:disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0';\n","import { forwardRef, type InputHTMLAttributes, type ReactNode, useId } from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type InputSize,\n type InputVariant,\n inputBaseClass,\n inputSizeClass,\n inputVariantClass,\n} from './inputVariants';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {\n variant?: InputVariant;\n inputSize?: InputSize;\n /** Optional label rendered above the field. */\n label?: ReactNode;\n /** Helper text rendered under the field when not in an error state. */\n helperText?: ReactNode;\n /** Error message — renders in destructive style and sets aria-invalid. */\n error?: ReactNode;\n /** Element rendered before the input (icon, prefix text, etc.). */\n leadingIcon?: ReactNode;\n /** Element rendered after the input (icon, suffix text, etc.). */\n trailingIcon?: ReactNode;\n /** Stretch the wrapper to fill the parent's inline width. Defaults to `true`. */\n fullWidth?: boolean;\n /** Class applied to the outer wrapper that holds the icons + input. */\n wrapperClassName?: string;\n /** Class applied to the field container (`<label>` block). */\n containerClassName?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n variant = 'default',\n inputSize = 'md',\n label,\n helperText,\n error,\n leadingIcon,\n trailingIcon,\n fullWidth = true,\n type = 'text',\n id,\n className,\n wrapperClassName,\n containerClassName,\n 'aria-invalid': ariaInvalidProp,\n 'aria-describedby': ariaDescribedByProp,\n disabled,\n ...props\n },\n ref\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const helperId = `${inputId}-helper`;\n const errorId = `${inputId}-error`;\n\n const hasError = error !== undefined && error !== null && error !== false;\n const ariaInvalid = ariaInvalidProp ?? (hasError ? true : undefined);\n\n const describedByIds = [\n ariaDescribedByProp,\n hasError ? errorId : null,\n !hasError && helperText ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n const ariaDescribedBy = describedByIds.length > 0 ? describedByIds : undefined;\n\n return (\n <div className={cn('flex flex-col gap-1.5', fullWidth && 'w-full', containerClassName)}>\n {label !== undefined && label !== null && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-foreground select-none\">\n {label}\n </label>\n )}\n\n <div\n data-slot=\"input-wrapper\"\n className={cn(\n inputBaseClass,\n inputVariantClass[variant],\n inputSizeClass[inputSize],\n wrapperClassName\n )}\n aria-invalid={ariaInvalid}\n data-disabled={disabled ? 'true' : undefined}\n >\n {leadingIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"inline-flex h-4 w-4 items-center justify-center text-muted-foreground\"\n >\n {leadingIcon}\n </span>\n ) : null}\n\n <input\n ref={ref}\n id={inputId}\n type={type}\n disabled={disabled}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n className={cn(\n 'h-full w-full min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed',\n className\n )}\n {...props}\n />\n\n {trailingIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"inline-flex h-4 w-4 items-center justify-center text-muted-foreground\"\n >\n {trailingIcon}\n </span>\n ) : null}\n </div>\n\n {hasError ? (\n <p id={errorId} className=\"text-xs text-destructive\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-muted-foreground\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n","import type { FieldsetHTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport interface LanguageOption<TCode extends string = string> {\n code: TCode;\n label?: string;\n}\n\nexport interface LanguageSwitcherProps<TCode extends string = string>\n extends Omit<FieldsetHTMLAttributes<HTMLFieldSetElement>, 'onChange'> {\n languages: ReadonlyArray<LanguageOption<TCode>>;\n value: TCode;\n onChange: (next: TCode) => void;\n /** Accessible label for the group. Defaults to \"Language\". */\n ariaLabel?: string;\n}\n\nexport function LanguageSwitcher<TCode extends string = string>({\n languages,\n value,\n onChange,\n ariaLabel = 'Language',\n className,\n ...props\n}: LanguageSwitcherProps<TCode>) {\n return (\n <fieldset\n aria-label={ariaLabel}\n className={cn(\n 'inline-flex items-center rounded-md border border-border bg-background p-0.5 text-xs',\n className\n )}\n {...props}\n >\n {languages.map((lang) => {\n const isActive = lang.code === value;\n return (\n <button\n key={lang.code}\n type=\"button\"\n onClick={() => onChange(lang.code)}\n aria-pressed={isActive}\n className={cn(\n 'rounded px-2 py-1 font-medium transition-colors',\n isActive\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {lang.label ?? lang.code.toUpperCase()}\n </button>\n );\n })}\n </fieldset>\n );\n}\n","import { useEffect, useState } from 'react';\n\nexport type Direction = 'ltr' | 'rtl';\n\nfunction readDocumentDirection(): Direction {\n if (typeof document === 'undefined') return 'ltr';\n const dir = document.documentElement.getAttribute('dir');\n return dir === 'rtl' ? 'rtl' : 'ltr';\n}\n\nexport function useDirection(): Direction {\n const [dir, setDir] = useState<Direction>(() => readDocumentDirection());\n\n useEffect(() => {\n setDir(readDocumentDirection());\n\n const observer = new MutationObserver(() => {\n setDir(readDocumentDirection());\n });\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['dir'],\n });\n\n return () => observer.disconnect();\n }, []);\n\n return dir;\n}\n","import { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { useDirection } from '../../../hooks/use-direction';\nimport { Button } from '../../button';\nimport type { PaginationState } from '../types';\n\ninterface PaginationProps {\n pageIndex: number;\n pageSize: number;\n pageCount: number;\n totalRowCount: number;\n pageSizeOptions: readonly number[];\n onChange: (next: PaginationState) => void;\n}\n\nexport function Pagination({\n pageIndex,\n pageSize,\n pageCount,\n totalRowCount,\n pageSizeOptions,\n onChange,\n}: PaginationProps) {\n const dir = useDirection();\n const isRtl = dir === 'rtl';\n\n const isFirst = pageIndex <= 0;\n const isLast = pageIndex >= pageCount - 1;\n\n const goPrev = () => {\n if (!isFirst) onChange({ pageIndex: pageIndex - 1, pageSize });\n };\n const goNext = () => {\n if (!isLast) onChange({ pageIndex: pageIndex + 1, pageSize });\n };\n\n const start = totalRowCount === 0 ? 0 : pageIndex * pageSize + 1;\n const end = Math.min(totalRowCount, (pageIndex + 1) * pageSize);\n\n return (\n <div className=\"flex flex-wrap items-center justify-between gap-3 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-2\">\n <label className=\"flex items-center gap-2\">\n <span>Rows per page</span>\n <select\n className=\"h-8 rounded-md border border-input bg-background px-2 text-sm text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n value={pageSize}\n onChange={(event) => {\n const nextSize = Number(event.target.value);\n onChange({ pageIndex: 0, pageSize: nextSize });\n }}\n >\n {pageSizeOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </label>\n </div>\n\n <div className=\"flex items-center gap-3\">\n <span aria-live=\"polite\">\n {start}–{end} of {totalRowCount}\n </span>\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={isFirst}\n onClick={goPrev}\n aria-label=\"Previous page\"\n >\n {isRtl ? (\n <ChevronRight aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronLeft aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n <span className=\"px-1 text-foreground\">\n {pageIndex + 1} / {pageCount}\n </span>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={isLast}\n onClick={goNext}\n aria-label=\"Next page\"\n >\n {isRtl ? (\n <ChevronLeft aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronRight aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Button } from '../../button';\n\ninterface ToolbarProps {\n count: number;\n onClear: () => void;\n renderLabel?: (count: number) => ReactNode;\n clearLabel?: ReactNode;\n children?: ReactNode;\n}\n\nexport function Toolbar({ count, onClear, renderLabel, clearLabel, children }: ToolbarProps) {\n return (\n <div\n role=\"toolbar\"\n aria-label=\"Bulk actions\"\n className=\"flex flex-wrap items-center gap-3 rounded-md border border-border bg-muted/40 px-3 py-2 text-sm\"\n >\n <span className=\"font-medium text-foreground\">\n {renderLabel ? renderLabel(count) : `${count} selected`}\n </span>\n <div className=\"ms-auto flex flex-wrap items-center gap-2\">\n {children}\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onClear}>\n {clearLabel ?? 'Clear'}\n </Button>\n </div>\n </div>\n );\n}\n","import type { ColumnAlign } from './types';\n\nexport type TableSize = 'sm' | 'md' | 'lg';\n\nexport interface TableSizeClasses {\n /** Applied to <tr> when needed (currently empty — present for symmetry). */\n row: string;\n /** Applied to <td>. */\n cell: string;\n /** Applied to <th>. */\n head: string;\n}\n\nexport const tableSizeClass: Record<TableSize, TableSizeClasses> = {\n sm: {\n row: '',\n cell: 'px-3 py-1.5 text-xs',\n head: 'px-3 py-2 text-xs font-medium',\n },\n md: {\n row: '',\n cell: 'px-4 py-2.5 text-sm',\n head: 'px-4 py-2.5 text-xs font-medium uppercase tracking-wide',\n },\n lg: {\n row: '',\n cell: 'px-5 py-3.5 text-sm',\n head: 'px-5 py-3 text-sm font-medium',\n },\n};\n\nexport const tableBaseClass = 'w-full caption-bottom border-collapse';\n\nexport const selectedRowClass = 'bg-muted/40';\n\nexport const sortIconClass = 'inline-flex h-3 w-3 shrink-0 items-center justify-center';\n\nexport const alignClass: Record<ColumnAlign, string> = {\n start: 'text-start',\n center: 'text-center',\n end: 'text-end',\n};\n","import { useCallback, useState } from 'react';\nimport type { PaginationState, RowSelectionState, SortState, TableProps } from './types';\n\ninterface UseTableStateResult {\n sort: SortState;\n setSort: (next: SortState) => void;\n pagination: PaginationState;\n setPagination: (next: PaginationState) => void;\n selected: RowSelectionState;\n setSelected: (next: RowSelectionState) => void;\n isServerSide: boolean;\n}\n\nconst EMPTY_SELECTION: RowSelectionState = new Set<string>();\nconst NO_SORT: SortState = { columnId: null, direction: 'asc' };\n\nexport function useTableState<T>(props: TableProps<T>): UseTableStateResult {\n const {\n defaultSort,\n sort: sortProp,\n onSortChange,\n defaultPagination,\n pagination: paginationProp,\n onPaginationChange,\n pageSizeOptions,\n defaultSelectedRowIds,\n selectedRowIds: selectedRowIdsProp,\n onSelectedRowIdsChange,\n totalCount,\n } = props;\n\n // ── Sort ───────────────────────────────────────────────────────────────────\n const [internalSort, setInternalSort] = useState<SortState>(defaultSort ?? NO_SORT);\n const isSortControlled = sortProp !== undefined;\n const sort = isSortControlled ? sortProp : internalSort;\n const setSort = useCallback(\n (next: SortState) => {\n if (!isSortControlled) setInternalSort(next);\n onSortChange?.(next);\n },\n [isSortControlled, onSortChange]\n );\n\n // ── Pagination ─────────────────────────────────────────────────────────────\n const [internalPagination, setInternalPagination] = useState<PaginationState>(\n defaultPagination ?? { pageIndex: 0, pageSize: pageSizeOptions?.[0] ?? 10 }\n );\n const isPaginationControlled = paginationProp !== undefined;\n const pagination = isPaginationControlled ? paginationProp : internalPagination;\n const setPagination = useCallback(\n (next: PaginationState) => {\n if (!isPaginationControlled) setInternalPagination(next);\n onPaginationChange?.(next);\n },\n [isPaginationControlled, onPaginationChange]\n );\n\n // ── Selection ──────────────────────────────────────────────────────────────\n const [internalSelected, setInternalSelected] = useState<RowSelectionState>(\n defaultSelectedRowIds ?? EMPTY_SELECTION\n );\n const isSelectionControlled = selectedRowIdsProp !== undefined;\n const selected = isSelectionControlled ? selectedRowIdsProp : internalSelected;\n const setSelected = useCallback(\n (next: RowSelectionState) => {\n if (!isSelectionControlled) setInternalSelected(next);\n onSelectedRowIdsChange?.(next);\n },\n [isSelectionControlled, onSelectedRowIdsChange]\n );\n\n return {\n sort,\n setSort,\n pagination,\n setPagination,\n selected,\n setSelected,\n isServerSide: totalCount !== undefined,\n };\n}\n","import { ChevronDown, ChevronsUpDown, ChevronUp } from 'lucide-react';\nimport type { MouseEvent, ReactNode } from 'react';\nimport { useMemo } from 'react';\nimport { cn } from '../../lib/utils';\nimport { Checkbox } from '../checkbox';\nimport { Pagination } from './components/Pagination';\nimport { Toolbar } from './components/Toolbar';\nimport { alignClass, selectedRowClass, tableBaseClass, tableSizeClass } from './tableVariants';\nimport type { Column, SortableValue, SortDirection, SortState, TableProps } from './types';\nimport { useTableState } from './useTableState';\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50] as const;\n\nexport function Table<T>(props: TableProps<T>) {\n const {\n data,\n columns,\n getRowId,\n enableRowSelection = false,\n isRowSelectable,\n bulkActions,\n renderSelectionLabel,\n clearSelectionLabel,\n loading = false,\n loadingRowCount,\n emptyState,\n size = 'md',\n className,\n tableClassName,\n maxHeight,\n striped = false,\n onRowClick,\n tableRef,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n showPagination,\n caption,\n } = props;\n\n const ariaLabel = props['aria-label'];\n const ariaLabelledBy = props['aria-labelledby'];\n\n const { sort, setSort, pagination, setPagination, selected, setSelected, isServerSide } =\n useTableState(props);\n\n // ── Data pipeline: sort → paginate ──────────────────────────────────────\n const sortedRows = useMemo<readonly T[]>(() => {\n if (isServerSide || sort.columnId === null) return data;\n const col = columns.find((c) => c.id === sort.columnId);\n if (!col) return data;\n const get = resolveSortGetter(col);\n if (!get) return data;\n const tagged = data.map((row, index) => ({ row, index }));\n tagged.sort((a, b) => {\n const cmp = compareValues(get(a.row), get(b.row));\n if (cmp !== 0) return sort.direction === 'asc' ? cmp : -cmp;\n return a.index - b.index;\n });\n return tagged.map((entry) => entry.row);\n }, [data, columns, sort, isServerSide]);\n\n const pagedRows = useMemo<readonly T[]>(() => {\n if (isServerSide) return sortedRows;\n const start = pagination.pageIndex * pagination.pageSize;\n return sortedRows.slice(start, start + pagination.pageSize);\n }, [sortedRows, pagination, isServerSide]);\n\n const totalRowCount = isServerSide ? (props.totalCount ?? 0) : data.length;\n const pageCount = Math.max(1, Math.ceil(totalRowCount / pagination.pageSize));\n\n // ── Selection helpers ────────────────────────────────────────────────────\n const selectableRowIds = useMemo<string[]>(() => {\n if (!enableRowSelection) return [];\n return pagedRows\n .map((row, index) => ({ row, index }))\n .filter(({ row }) => (isRowSelectable ? isRowSelectable(row) : true))\n .map(({ row, index }) => getRowId(row, index));\n }, [pagedRows, enableRowSelection, isRowSelectable, getRowId]);\n\n const selectedOnPageCount = selectableRowIds.reduce(\n (acc, id) => (selected.has(id) ? acc + 1 : acc),\n 0\n );\n const allOnPageSelected =\n selectableRowIds.length > 0 && selectedOnPageCount === selectableRowIds.length;\n const someOnPageSelected = selectedOnPageCount > 0 && !allOnPageSelected;\n\n const selectedRowsInData = useMemo<T[]>(() => {\n if (selected.size === 0) return [];\n return data.filter((row, index) => selected.has(getRowId(row, index)));\n }, [data, selected, getRowId]);\n\n const toggleHeader = (next: boolean) => {\n const updated = new Set(selected);\n if (next) {\n for (const id of selectableRowIds) updated.add(id);\n } else {\n for (const id of selectableRowIds) updated.delete(id);\n }\n setSelected(updated);\n };\n\n const toggleRow = (id: string, next: boolean) => {\n const updated = new Set(selected);\n if (next) updated.add(id);\n else updated.delete(id);\n setSelected(updated);\n };\n\n const clearSelection = () => setSelected(new Set<string>());\n\n const handleSortClick = (columnId: string) => {\n setSort(nextSort(sort, columnId));\n };\n\n const totalColumnCount = columns.length + (enableRowSelection ? 1 : 0);\n const paginationVisible = showPagination ?? totalRowCount > pagination.pageSize;\n const sizeClasses = tableSizeClass[size];\n const showToolbar = enableRowSelection && bulkActions !== undefined && selected.size > 0;\n const skeletonCount = loadingRowCount ?? pagination.pageSize;\n\n return (\n <div className={cn('flex w-full flex-col gap-3', className)}>\n {showToolbar && (\n <Toolbar\n count={selected.size}\n onClear={clearSelection}\n renderLabel={renderSelectionLabel}\n clearLabel={clearSelectionLabel}\n >\n {bulkActions(selectedRowsInData)}\n </Toolbar>\n )}\n\n <div\n className={cn(\n 'overflow-x-auto rounded-md border border-border bg-background',\n maxHeight !== undefined && 'overflow-y-auto'\n )}\n style={maxHeight !== undefined ? { maxHeight } : undefined}\n >\n <table\n ref={tableRef}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-rowcount={totalRowCount}\n className={cn(tableBaseClass, 'text-sm text-foreground', tableClassName)}\n >\n {caption ? <caption className=\"sr-only\">{caption}</caption> : null}\n <thead\n className={cn(\n 'bg-muted/40 text-muted-foreground',\n maxHeight !== undefined && 'sticky top-0 z-10'\n )}\n >\n <tr>\n {enableRowSelection ? (\n <th scope=\"col\" className={cn('w-10', sizeClasses.head)}>\n <Checkbox\n aria-label=\"Select all rows on this page\"\n checked={allOnPageSelected}\n indeterminate={someOnPageSelected}\n disabled={selectableRowIds.length === 0}\n onCheckedChange={toggleHeader}\n />\n </th>\n ) : null}\n {columns.map((column) => {\n const isSorted = sort.columnId === column.id;\n const ariaSort = isSorted\n ? sort.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n return (\n <th\n key={column.id}\n scope=\"col\"\n aria-sort={column.sortable ? ariaSort : undefined}\n className={cn(\n sizeClasses.head,\n alignClass[column.align ?? 'start'],\n column.className\n )}\n >\n {column.sortable ? (\n <button\n type=\"button\"\n onClick={() => handleSortClick(column.id)}\n className=\"inline-flex items-center gap-1.5 font-inherit uppercase tracking-inherit text-inherit hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background\"\n aria-label={sortAriaLabel(column, sort)}\n >\n <span>{renderHeader(column.header)}</span>\n <SortIndicator\n active={isSorted}\n direction={isSorted ? sort.direction : null}\n />\n </button>\n ) : (\n renderHeader(column.header)\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {loading ? (\n <SkeletonRows\n rowCount={skeletonCount}\n columnCount={totalColumnCount}\n cellClassName={sizeClasses.cell}\n />\n ) : pagedRows.length === 0 ? (\n <tr>\n <td\n colSpan={totalColumnCount}\n className={cn(sizeClasses.cell, 'py-10 text-center text-muted-foreground')}\n >\n {emptyState ?? 'No data'}\n </td>\n </tr>\n ) : (\n pagedRows.map((row, rowIndex) => {\n const id = getRowId(row, rowIndex);\n const isSelected = selected.has(id);\n const rowSelectable = isRowSelectable ? isRowSelectable(row) : true;\n return (\n <tr\n key={id}\n data-selected={isSelected ? 'true' : undefined}\n aria-selected={enableRowSelection ? isSelected : undefined}\n className={cn(\n 'border-t border-border transition-colors',\n 'hover:bg-accent',\n striped && rowIndex % 2 === 1 && 'bg-muted/20',\n isSelected && selectedRowClass,\n onRowClick && 'cursor-pointer'\n )}\n onClick={onRowClick ? () => onRowClick(row, rowIndex) : undefined}\n >\n {enableRowSelection ? (\n <td className={cn(sizeClasses.cell, 'w-10')}>\n <Checkbox\n aria-label={`Select row ${rowIndex + 1}`}\n checked={isSelected}\n disabled={!rowSelectable}\n onCheckedChange={(next) => toggleRow(id, next)}\n onClick={stopRowClickPropagation}\n />\n </td>\n ) : null}\n {columns.map((column) => (\n <td\n key={column.id}\n className={cn(\n sizeClasses.cell,\n alignClass[column.align ?? 'start'],\n column.className\n )}\n >\n {renderCell(column, row, rowIndex)}\n </td>\n ))}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {paginationVisible ? (\n <Pagination\n pageIndex={pagination.pageIndex}\n pageSize={pagination.pageSize}\n pageCount={pageCount}\n totalRowCount={totalRowCount}\n pageSizeOptions={pageSizeOptions}\n onChange={setPagination}\n />\n ) : null}\n </div>\n );\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction renderHeader(header: Column<unknown>['header']): ReactNode {\n return typeof header === 'function' ? header() : header;\n}\n\nfunction renderCell<T>(column: Column<T>, row: T, rowIndex: number): ReactNode {\n if (column.render) return column.render(row, rowIndex);\n if (column.accessor !== undefined) {\n const value = row[column.accessor];\n return value === null || value === undefined ? '' : String(value);\n }\n return null;\n}\n\nfunction resolveSortGetter<T>(column: Column<T>): ((row: T) => SortableValue) | null {\n if (column.sortAccessor) return column.sortAccessor;\n if (column.accessor !== undefined) {\n const key = column.accessor;\n return (row: T) => row[key] as SortableValue;\n }\n return null;\n}\n\nfunction compareValues(a: SortableValue, b: SortableValue): number {\n if (a === b) return 0;\n if (a === null || a === undefined) return 1;\n if (b === null || b === undefined) return -1;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : 1;\n if (typeof a === 'boolean' && typeof b === 'boolean') return a === b ? 0 : a ? 1 : -1;\n return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: 'base' });\n}\n\nfunction nextSort(current: SortState, columnId: string): SortState {\n if (current.columnId !== columnId) return { columnId, direction: 'asc' };\n if (current.direction === 'asc') return { columnId, direction: 'desc' };\n return { columnId: null, direction: 'asc' };\n}\n\nfunction sortAriaLabel<T>(column: Column<T>, sort: SortState): string {\n const headerText = typeof column.header === 'string' ? column.header : column.id;\n if (sort.columnId !== column.id) return `Sort by ${headerText}`;\n return sort.direction === 'asc'\n ? `Sort by ${headerText}, currently ascending`\n : `Sort by ${headerText}, currently descending`;\n}\n\nfunction stopRowClickPropagation(event: MouseEvent<HTMLInputElement>) {\n event.stopPropagation();\n}\n\ninterface SkeletonRowsProps {\n rowCount: number;\n columnCount: number;\n cellClassName: string;\n}\n\nfunction SkeletonRows({ rowCount, columnCount, cellClassName }: SkeletonRowsProps) {\n const rowKeys = Array.from({ length: Math.max(0, rowCount) }, (_, i) => `skeleton-row-${i}`);\n const colKeys = Array.from({ length: Math.max(1, columnCount) }, (_, i) => `skeleton-col-${i}`);\n return (\n <>\n {rowKeys.map((rowKey) => (\n <tr key={rowKey} className=\"border-t border-border\" data-testid=\"table-skeleton-row\">\n {colKeys.map((colKey) => (\n <td key={`${rowKey}-${colKey}`} className={cellClassName}>\n <span className=\"block h-3 w-full animate-pulse rounded bg-muted\" />\n </td>\n ))}\n </tr>\n ))}\n </>\n );\n}\n\ninterface SortIndicatorProps {\n active: boolean;\n direction: SortDirection | null;\n}\n\nfunction SortIndicator({ active, direction }: SortIndicatorProps) {\n const className = cn(\n 'h-3.5 w-3.5 shrink-0',\n active ? 'text-foreground' : 'text-muted-foreground'\n );\n if (!active) return <ChevronsUpDown aria-hidden=\"true\" className={className} />;\n return direction === 'asc' ? (\n <ChevronUp aria-hidden=\"true\" className={className} />\n ) : (\n <ChevronDown aria-hidden=\"true\" className={className} />\n );\n}\n","export type TextareaVariant = 'default' | 'filled' | 'ghost';\n\nexport type TextareaSize = 'sm' | 'md' | 'lg';\n\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\n\nexport const textareaVariantClass: Record<TextareaVariant, string> = {\n default: 'border border-input bg-background hover:border-ring',\n filled: 'border border-transparent bg-muted hover:bg-muted/80',\n ghost: 'border border-transparent bg-transparent hover:bg-accent',\n};\n\nexport const textareaSizeClass: Record<TextareaSize, string> = {\n sm: 'rounded-md px-2.5 py-1.5 text-sm',\n md: 'rounded-md px-3 py-2 text-sm',\n lg: 'rounded-md px-4 py-2.5 text-base',\n};\n\nexport const textareaResizeClass: Record<TextareaResize, string> = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n};\n\nexport const textareaBaseClass =\n 'group/textarea relative flex w-full text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:ring-2 focus-within:ring-ring/40 focus-within:ring-offset-1 focus-within:ring-offset-background aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[textarea:disabled]:pointer-events-none has-[textarea:disabled]:opacity-50';\n","import { forwardRef, type ReactNode, type TextareaHTMLAttributes, useId } from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type TextareaResize,\n type TextareaSize,\n type TextareaVariant,\n textareaBaseClass,\n textareaResizeClass,\n textareaSizeClass,\n textareaVariantClass,\n} from './textareaVariants';\n\nexport interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n variant?: TextareaVariant;\n textareaSize?: TextareaSize;\n /** Controls the native CSS `resize` behaviour. Defaults to `'vertical'`. */\n resize?: TextareaResize;\n /** Optional label rendered above the field. */\n label?: ReactNode;\n /** Helper text rendered under the field when not in an error state. */\n helperText?: ReactNode;\n /** Error message — renders in destructive style and sets aria-invalid. */\n error?: ReactNode;\n /** Stretch the wrapper to fill the parent's inline width. Defaults to `true`. */\n fullWidth?: boolean;\n /** Class applied to the outer wrapper that frames the textarea. */\n wrapperClassName?: string;\n /** Class applied to the field container (`<label>` block). */\n containerClassName?: string;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n {\n variant = 'default',\n textareaSize = 'md',\n resize = 'vertical',\n label,\n helperText,\n error,\n fullWidth = true,\n rows = 4,\n id,\n className,\n wrapperClassName,\n containerClassName,\n 'aria-invalid': ariaInvalidProp,\n 'aria-describedby': ariaDescribedByProp,\n disabled,\n ...props\n },\n ref\n) {\n const generatedId = useId();\n const textareaId = id ?? generatedId;\n const helperId = `${textareaId}-helper`;\n const errorId = `${textareaId}-error`;\n\n const hasError = error !== undefined && error !== null && error !== false;\n const ariaInvalid = ariaInvalidProp ?? (hasError ? true : undefined);\n\n const describedByIds = [\n ariaDescribedByProp,\n hasError ? errorId : null,\n !hasError && helperText ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n const ariaDescribedBy = describedByIds.length > 0 ? describedByIds : undefined;\n\n return (\n <div className={cn('flex flex-col gap-1.5', fullWidth && 'w-full', containerClassName)}>\n {label !== undefined && label !== null && (\n <label htmlFor={textareaId} className=\"text-sm font-medium text-foreground select-none\">\n {label}\n </label>\n )}\n\n <div\n data-slot=\"textarea-wrapper\"\n className={cn(\n textareaBaseClass,\n textareaVariantClass[variant],\n textareaSizeClass[textareaSize],\n wrapperClassName\n )}\n aria-invalid={ariaInvalid}\n data-disabled={disabled ? 'true' : undefined}\n >\n <textarea\n ref={ref}\n id={textareaId}\n rows={rows}\n disabled={disabled}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n className={cn(\n 'w-full min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed',\n textareaResizeClass[resize],\n className\n )}\n {...props}\n />\n </div>\n\n {hasError ? (\n <p id={errorId} className=\"text-xs text-destructive\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-muted-foreground\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n"]}
1
+ {"version":3,"sources":["../src/hooks/use-direction.ts","../src/components/dashboard-layout/context.ts","../src/lib/utils.ts","../src/components/dashboard-layout/DashboardContent.tsx","../src/components/dashboard-layout/DashboardLayout.tsx","../src/components/dashboard-layout/DashboardMain.tsx","../src/components/header/DashboardHeader.tsx","../src/components/header/HeaderActions.tsx","../src/components/button/buttonVariants.ts","../src/components/button/Button.tsx","../src/components/header/HeaderCollapseTrigger.tsx","../src/components/header/HeaderMobileTrigger.tsx","../src/components/header/HeaderSearch.tsx","../src/components/header/HeaderTitle.tsx","../src/components/sidebar/Sidebar.tsx","../src/components/sidebar/SidebarFooter.tsx","../src/components/sidebar/SidebarGroup.tsx","../src/components/sidebar/SidebarHeader.tsx","../src/components/sidebar/SidebarNav.tsx","../src/components/sidebar/SidebarNavGroup.tsx","../src/components/sidebar/SidebarNavItem.tsx","../src/components/app-shell/AppShell.tsx","../src/components/avatar/Avatar.tsx","../src/components/checkbox/Checkbox.tsx","../src/components/field/Field.tsx","../src/components/input/inputVariants.ts","../src/components/input/Input.tsx","../src/components/language-switcher/LanguageSwitcher.tsx","../src/components/select/selectVariants.ts","../src/components/select/Select.tsx","../src/components/switch/switchVariants.ts","../src/components/switch/Switch.tsx","../src/components/table/components/Pagination.tsx","../src/components/table/components/Toolbar.tsx","../src/components/table/tableVariants.ts","../src/components/table/useTableState.ts","../src/components/table/Table.tsx","../src/components/textarea/textareaVariants.ts","../src/components/textarea/Textarea.tsx"],"names":["useState","jsx","Button","forwardRef","jsxs","useEffect","Fragment","useCallback","sizeClass","Checkbox","children","layout","useId","isValidElement","cloneElement","Input","Select","ChevronDown","SelectItem","Check","Switch","ChevronLeft","useMemo","ChevronUp","Textarea"],"mappings":"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","file":"index.js","sourcesContent":["import { useEffect, useState } from 'react';\n\nexport type Direction = 'ltr' | 'rtl';\n\nfunction readDocumentDirection(): Direction {\n if (typeof document === 'undefined') return 'ltr';\n const dir = document.documentElement.getAttribute('dir');\n return dir === 'rtl' ? 'rtl' : 'ltr';\n}\n\nexport function useDirection(): Direction {\n const [dir, setDir] = useState<Direction>(() => readDocumentDirection());\n\n useEffect(() => {\n setDir(readDocumentDirection());\n\n const observer = new MutationObserver(() => {\n setDir(readDocumentDirection());\n });\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['dir'],\n });\n\n return () => observer.disconnect();\n }, []);\n\n return dir;\n}\n","import { createContext, useContext } from 'react';\n\nexport interface DashboardLayoutContextValue {\n collapsed: boolean;\n setCollapsed: (next: boolean) => void;\n toggleCollapsed: () => void;\n mobileOpen: boolean;\n setMobileOpen: (next: boolean) => void;\n toggleMobileOpen: () => void;\n}\n\nexport const DashboardLayoutContext = createContext<DashboardLayoutContextValue | null>(null);\n\nexport function useDashboardLayout(): DashboardLayoutContextValue {\n const ctx = useContext(DashboardLayoutContext);\n if (!ctx) {\n throw new Error('useDashboardLayout must be used within a <DashboardLayout> component.');\n }\n return ctx;\n}\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type DashboardContentProps = HTMLAttributes<HTMLElement>;\n\nexport function DashboardContent({ className, children, ...props }: DashboardContentProps) {\n return (\n <main\n className={cn(\n 'flex min-h-[calc(100vh-var(--header-height))] flex-1 flex-col gap-6 p-4 sm:p-6 lg:p-8',\n className\n )}\n {...props}\n >\n {children}\n </main>\n );\n}\n","import { type HTMLAttributes, type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { DashboardLayoutContext, type DashboardLayoutContextValue } from './context';\n\nexport interface DashboardLayoutProps extends HTMLAttributes<HTMLDivElement> {\n defaultCollapsed?: boolean;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n children: ReactNode;\n}\n\nexport function DashboardLayout({\n defaultCollapsed = false,\n collapsed: collapsedProp,\n onCollapsedChange,\n className,\n children,\n ...props\n}: DashboardLayoutProps) {\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);\n const [mobileOpen, setMobileOpenState] = useState(false);\n\n const isControlled = collapsedProp !== undefined;\n const collapsed = isControlled ? collapsedProp : internalCollapsed;\n\n const setCollapsed = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalCollapsed(next);\n onCollapsedChange?.(next);\n },\n [isControlled, onCollapsedChange]\n );\n\n const toggleCollapsed = useCallback(() => {\n setCollapsed(!collapsed);\n }, [collapsed, setCollapsed]);\n\n const setMobileOpen = useCallback((next: boolean) => {\n setMobileOpenState(next);\n }, []);\n\n const toggleMobileOpen = useCallback(() => {\n setMobileOpenState((prev) => !prev);\n }, []);\n\n const value = useMemo<DashboardLayoutContextValue>(\n () => ({\n collapsed,\n setCollapsed,\n toggleCollapsed,\n mobileOpen,\n setMobileOpen,\n toggleMobileOpen,\n }),\n [collapsed, setCollapsed, toggleCollapsed, mobileOpen, setMobileOpen, toggleMobileOpen]\n );\n\n return (\n <DashboardLayoutContext.Provider value={value}>\n <div\n data-collapsed={collapsed ? 'true' : 'false'}\n className={cn(\n 'relative flex min-h-screen w-full bg-background text-foreground font-sans antialiased',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </DashboardLayoutContext.Provider>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\nimport { useDashboardLayout } from './context';\n\nexport type DashboardMainProps = HTMLAttributes<HTMLDivElement>;\n\nexport function DashboardMain({ className, children, ...props }: DashboardMainProps) {\n const { collapsed } = useDashboardLayout();\n\n return (\n <div\n className={cn(\n 'flex min-h-screen flex-1 flex-col transition-[margin] duration-200 ease-out',\n // On desktop, push the main column past the fixed sidebar using logical margin.\n collapsed ? 'lg:ms-[var(--sidebar-width-collapsed)]' : 'lg:ms-[var(--sidebar-width)]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type DashboardHeaderProps = HTMLAttributes<HTMLElement>;\n\nexport function DashboardHeader({ className, children, ...props }: DashboardHeaderProps) {\n return (\n <header\n className={cn(\n 'sticky top-0 z-20 flex h-[var(--header-height)] shrink-0 items-center gap-3 border-b border-header-border bg-header/80 px-4 text-header-foreground backdrop-blur-md sm:px-6',\n className\n )}\n {...props}\n >\n {children}\n </header>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type HeaderActionsProps = HTMLAttributes<HTMLDivElement>;\n\nexport function HeaderActions({ className, children, ...props }: HeaderActionsProps) {\n return (\n <div className={cn('ms-auto flex items-center gap-1', className)} {...props}>\n {children}\n </div>\n );\n}\n","export type ButtonVariant =\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'destructive'\n | 'success'\n | 'warning'\n | 'link';\n\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'icon' | 'icon-sm';\n\nexport const buttonVariantClass: Record<ButtonVariant, string> = {\n primary:\n 'bg-primary text-primary-foreground shadow-sm hover:bg-primary/90 focus-visible:ring-primary/40',\n secondary: 'bg-muted text-foreground hover:bg-muted/80 focus-visible:ring-muted-foreground/30',\n outline:\n 'border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground focus-visible:ring-ring/40',\n ghost:\n 'bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground focus-visible:ring-ring/40',\n destructive:\n 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90 focus-visible:ring-destructive/40',\n success:\n 'bg-success text-success-foreground shadow-sm hover:bg-success/90 focus-visible:ring-success/40',\n warning:\n 'bg-warning text-warning-foreground shadow-sm hover:bg-warning/90 focus-visible:ring-warning/40',\n link: 'text-primary underline-offset-4 hover:underline focus-visible:ring-primary/40 px-0 shadow-none',\n};\n\nexport const buttonSizeClass: Record<ButtonSize, string> = {\n sm: 'h-8 gap-1.5 rounded-md px-3 text-sm',\n md: 'h-9 gap-2 rounded-md px-4 text-sm',\n lg: 'h-11 gap-2.5 rounded-md px-6 text-base',\n icon: 'h-9 w-9 shrink-0 rounded-md p-0',\n 'icon-sm': 'h-8 w-8 shrink-0 rounded-md p-0',\n};\n\nexport const buttonBaseClass =\n 'group/button relative inline-flex items-center justify-center font-medium select-none whitespace-nowrap outline-none transition-[background-color,color,box-shadow,opacity] focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0';\n","import { Loader2 } from 'lucide-react';\nimport {\n type ButtonHTMLAttributes,\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type ButtonSize,\n type ButtonVariant,\n buttonBaseClass,\n buttonSizeClass,\n buttonVariantClass,\n} from './buttonVariants';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Show a leading spinner and disable interaction. */\n loading?: boolean;\n /** Optional text shown beside the spinner while loading. Defaults to keeping `children` visible. */\n loadingText?: ReactNode;\n /** Element rendered before the label (auto-hidden while loading). */\n leadingIcon?: ReactNode;\n /** Element rendered after the label (auto-hidden while loading). */\n trailingIcon?: ReactNode;\n /** Stretch to fill the parent's inline width. */\n fullWidth?: boolean;\n /**\n * Render the button's classes onto the single child element instead of a `<button>`.\n * Useful for routing libraries — e.g. `<Button asChild><Link to=\"/x\">Go</Link></Button>`.\n */\n asChild?: boolean;\n}\n\ntype SlottableChild = ReactElement<{\n className?: string;\n children?: ReactNode;\n 'data-loading'?: 'true';\n 'aria-disabled'?: boolean | 'true' | 'false';\n}>;\n\n/**\n * Polymorphic button with 6 variants, 4 sizes, and a built-in loading state.\n * Supports the `asChild` slot pattern for routing-library `<Link>` integration.\n *\n * @example Default usage\n * ```tsx\n * <Button onClick={handleSave}>Save</Button>\n * ```\n *\n * @example Variant + size + loading\n * ```tsx\n * <Button variant=\"outline\" size=\"sm\" loading={isSubmitting}>\n * Cancel\n * </Button>\n * ```\n *\n * @example asChild — wrap a router Link without a wrapper element\n * ```tsx\n * <Button asChild variant=\"ghost\">\n * <Link to=\"/settings\">Open settings</Link>\n * </Button>\n * ```\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n loading = false,\n loadingText,\n leadingIcon,\n trailingIcon,\n fullWidth = false,\n asChild = false,\n type,\n disabled,\n className,\n children,\n ...props\n },\n ref\n) {\n const isDisabled = disabled || loading;\n\n const composedClass = cn(\n buttonBaseClass,\n buttonVariantClass[variant],\n buttonSizeClass[size],\n fullWidth && 'w-full',\n className\n );\n\n const content = (\n <>\n {loading ? <Spinner /> : leadingIcon ? <Slot>{leadingIcon}</Slot> : null}\n {loading && loadingText !== undefined ? loadingText : children}\n {!loading && trailingIcon ? <Slot>{trailingIcon}</Slot> : null}\n </>\n );\n\n if (asChild) {\n const child = Children.only(children) as SlottableChild;\n if (!isValidElement(child)) {\n throw new Error('Button: `asChild` requires a single valid React element as a child.');\n }\n\n const mergedClassName = cn(composedClass, child.props.className);\n\n return cloneElement(child, {\n ...child.props,\n className: mergedClassName,\n 'aria-disabled': isDisabled ? true : undefined,\n 'data-loading': loading ? 'true' : undefined,\n children: (\n <>\n {loading ? <Spinner /> : leadingIcon ? <Slot>{leadingIcon}</Slot> : null}\n {loading && loadingText !== undefined ? loadingText : child.props.children}\n {!loading && trailingIcon ? <Slot>{trailingIcon}</Slot> : null}\n </>\n ),\n });\n }\n\n return (\n <button\n ref={ref}\n type={type ?? 'button'}\n disabled={isDisabled}\n data-loading={loading ? 'true' : undefined}\n className={composedClass}\n {...props}\n >\n {content}\n </button>\n );\n});\n\nfunction Slot({ children }: { children: ReactNode }) {\n return (\n <span aria-hidden=\"true\" className=\"inline-flex h-4 w-4 items-center justify-center\">\n {children}\n </span>\n );\n}\n\nfunction Spinner() {\n return (\n <Loader2 aria-hidden=\"true\" className=\"h-4 w-4 animate-spin\" data-testid=\"button-spinner\" />\n );\n}\n","import { ChevronLeft } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { cn } from '../../lib/utils';\nimport { Button, type ButtonProps } from '../button';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport interface HeaderCollapseTriggerProps extends Omit<ButtonProps, 'aria-label' | 'children'> {\n 'aria-label'?: string;\n icon?: ReactNode;\n}\n\nexport function HeaderCollapseTrigger({\n icon,\n className,\n onClick,\n variant = 'ghost',\n size = 'icon',\n 'aria-label': ariaLabel = 'Toggle sidebar',\n ...props\n}: HeaderCollapseTriggerProps) {\n const { toggleCollapsed, collapsed } = useDashboardLayout();\n\n return (\n <Button\n aria-label={ariaLabel}\n aria-pressed={collapsed}\n variant={variant}\n size={size}\n onClick={(e) => {\n toggleCollapsed();\n onClick?.(e);\n }}\n className={cn('hidden lg:inline-flex', className)}\n {...props}\n >\n {icon ?? <ChevronIcon collapsed={collapsed} />}\n </Button>\n );\n}\n\nfunction ChevronIcon({ collapsed }: { collapsed: boolean }) {\n // Chevron points toward the inline-start edge; in RTL it flips automatically\n // because we use a CSS transform tied to dir.\n return (\n <ChevronLeft\n aria-hidden=\"true\"\n className={cn(\n 'h-[18px] w-[18px] transition-transform duration-200 rtl:-scale-x-100',\n collapsed && 'rotate-180'\n )}\n />\n );\n}\n","import { Menu } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Button, type ButtonProps } from '../button';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport interface HeaderMobileTriggerProps extends Omit<ButtonProps, 'aria-label' | 'children'> {\n 'aria-label'?: string;\n icon?: ReactNode;\n}\n\nexport function HeaderMobileTrigger({\n icon,\n className,\n onClick,\n variant = 'ghost',\n size = 'icon',\n 'aria-label': ariaLabel = 'Toggle navigation',\n ...props\n}: HeaderMobileTriggerProps) {\n const { toggleMobileOpen, mobileOpen } = useDashboardLayout();\n\n return (\n <Button\n aria-label={ariaLabel}\n aria-expanded={mobileOpen}\n variant={variant}\n size={size}\n onClick={(e) => {\n toggleMobileOpen();\n onClick?.(e);\n }}\n className={className ? `lg:hidden ${className}` : 'lg:hidden'}\n {...props}\n >\n {icon ?? <DefaultMenuIcon />}\n </Button>\n );\n}\n\nfunction DefaultMenuIcon() {\n return <Menu aria-hidden=\"true\" className=\"h-[18px] w-[18px]\" />;\n}\n","import { forwardRef, type InputHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport interface HeaderSearchProps extends InputHTMLAttributes<HTMLInputElement> {\n icon?: ReactNode;\n containerClassName?: string;\n}\n\nexport const HeaderSearch = forwardRef<HTMLInputElement, HeaderSearchProps>(\n ({ icon, containerClassName, className, type = 'search', ...props }, ref) => (\n <div\n className={cn('relative hidden h-9 w-full max-w-sm items-center md:flex', containerClassName)}\n >\n {icon ? (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute start-3 flex h-4 w-4 items-center justify-center text-muted-foreground\"\n >\n {icon}\n </span>\n ) : null}\n <input\n ref={ref}\n type={type}\n className={cn(\n 'h-9 w-full rounded-md border border-input bg-background text-sm transition-colors',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n icon ? 'ps-9 pe-3' : 'px-3',\n className\n )}\n {...props}\n />\n </div>\n )\n);\nHeaderSearch.displayName = 'HeaderSearch';\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type HeaderTitleProps = HTMLAttributes<HTMLDivElement>;\n\nexport function HeaderTitle({ className, children, ...props }: HeaderTitleProps) {\n return (\n <div\n className={cn('flex min-w-0 flex-1 items-center gap-2 text-base font-semibold', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import { type HTMLAttributes, useEffect } from 'react';\nimport { cn } from '../../lib/utils';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport type SidebarProps = HTMLAttributes<HTMLElement>;\n\nexport function Sidebar({ className, children, ...props }: SidebarProps) {\n const { collapsed, mobileOpen, setMobileOpen } = useDashboardLayout();\n\n useEffect(() => {\n if (!mobileOpen) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMobileOpen(false);\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [mobileOpen, setMobileOpen]);\n\n return (\n <>\n {/* Mobile backdrop */}\n <div\n aria-hidden=\"true\"\n onClick={() => setMobileOpen(false)}\n className={cn(\n 'fixed inset-0 z-30 bg-foreground/40 backdrop-blur-sm transition-opacity duration-200 lg:hidden',\n mobileOpen ? 'opacity-100' : 'pointer-events-none opacity-0'\n )}\n />\n\n <aside\n data-collapsed={collapsed ? 'true' : 'false'}\n data-mobile-open={mobileOpen ? 'true' : 'false'}\n className={cn(\n // Positioning\n 'fixed inset-y-0 start-0 z-40 flex flex-col',\n // Surface\n 'bg-sidebar text-sidebar-foreground border-e border-sidebar-border',\n // Sizing — width animates between full and collapsed\n collapsed ? 'w-[var(--sidebar-width-collapsed)]' : 'w-[var(--sidebar-width)]',\n // Motion\n 'transition-[transform,width] duration-200 ease-out',\n // Mobile slide: hidden by default, visible when mobileOpen.\n // Logical translate via rtl variant so it slides off the inline-start edge\n // in both LTR and RTL.\n mobileOpen\n ? 'translate-x-0'\n : '-translate-x-full rtl:translate-x-full lg:translate-x-0 lg:rtl:translate-x-0',\n className\n )}\n {...props}\n >\n {children}\n </aside>\n </>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type SidebarFooterProps = HTMLAttributes<HTMLDivElement>;\n\nexport function SidebarFooter({ className, children, ...props }: SidebarFooterProps) {\n return (\n <div\n className={cn(\n 'mt-auto flex shrink-0 items-center gap-2 border-t border-sidebar-border p-3',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../lib/utils';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport interface SidebarGroupProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n}\n\nexport function SidebarGroup({ label, className, children, ...props }: SidebarGroupProps) {\n const { collapsed } = useDashboardLayout();\n\n return (\n <div className={cn('flex flex-col gap-1 py-2', className)} {...props}>\n {label ? (\n <div\n className={cn(\n 'px-3 pb-1 text-xs font-medium uppercase tracking-wider text-muted-foreground transition-opacity',\n collapsed && 'pointer-events-none h-0 overflow-hidden opacity-0'\n )}\n >\n {label}\n </div>\n ) : null}\n <div className=\"flex flex-col gap-0.5\">{children}</div>\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type SidebarHeaderProps = HTMLAttributes<HTMLDivElement>;\n\nexport function SidebarHeader({ className, children, ...props }: SidebarHeaderProps) {\n return (\n <div\n className={cn(\n 'flex h-[var(--header-height)] shrink-0 items-center gap-2 border-b border-sidebar-border px-3',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type SidebarNavProps = HTMLAttributes<HTMLElement>;\n\nexport function SidebarNav({ className, children, ...props }: SidebarNavProps) {\n return (\n <nav className={cn('flex flex-1 flex-col gap-1 overflow-y-auto p-2', className)} {...props}>\n {children}\n </nav>\n );\n}\n","import { ChevronDown } from 'lucide-react';\nimport {\n type ButtonHTMLAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useState,\n} from 'react';\nimport { cn } from '../../lib/utils';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport interface SidebarNavGroupProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n icon?: ReactNode;\n label?: ReactNode;\n endSlot?: ReactNode;\n /** Highlight the parent (e.g. when one of its children is active). */\n active?: boolean;\n /** Uncontrolled initial state. */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: ReactNode;\n}\n\nexport function SidebarNavGroup({\n icon,\n label,\n endSlot,\n active = false,\n defaultOpen = false,\n open: openProp,\n onOpenChange,\n className,\n children,\n onClick,\n ...props\n}: SidebarNavGroupProps) {\n const { collapsed } = useDashboardLayout();\n const submenuId = useId();\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n // When the sidebar collapses to icon-only, force submenu shut so it doesn't\n // try to render in a 4rem-wide rail.\n useEffect(() => {\n if (collapsed && open) setOpen(false);\n }, [collapsed, open, setOpen]);\n\n const titleAttr = collapsed && typeof label === 'string' ? label : (props.title ?? undefined);\n\n // Hide children entirely when the sidebar is collapsed — flyout TBD.\n const showChildren = !collapsed;\n\n return (\n <div className=\"flex flex-col\">\n <button\n type=\"button\"\n aria-expanded={showChildren ? open : undefined}\n aria-controls={showChildren ? submenuId : undefined}\n data-active={active ? 'true' : undefined}\n title={titleAttr}\n onClick={(e) => {\n if (showChildren) setOpen(!open);\n onClick?.(e);\n }}\n className={cn(\n 'group relative flex h-9 w-full items-center gap-3 rounded-md px-3 text-sm font-medium outline-none transition-colors',\n 'text-sidebar-foreground/80 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-sidebar',\n active && 'bg-sidebar-accent text-sidebar-accent-foreground',\n collapsed && 'justify-center px-0',\n className\n )}\n {...props}\n >\n {icon ? (\n <span aria-hidden=\"true\" className=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n {icon}\n </span>\n ) : null}\n <span\n className={cn(\n 'flex-1 truncate text-start transition-[opacity,width]',\n collapsed && 'pointer-events-none w-0 opacity-0'\n )}\n >\n {label}\n </span>\n {endSlot && !collapsed ? (\n <span className=\"flex shrink-0 items-center\">{endSlot}</span>\n ) : null}\n {showChildren ? <ChevronCaret open={open} /> : null}\n </button>\n\n <div\n id={submenuId}\n hidden={!showChildren || !open}\n className={cn(\n 'grid transition-[grid-template-rows] duration-200 ease-out',\n showChildren && open ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"flex flex-col gap-0.5 ps-7 pt-1\">{children}</div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ChevronCaret({ open }: { open: boolean }) {\n return (\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n 'h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform duration-200',\n open && 'rotate-180'\n )}\n />\n );\n}\n","import type { AnchorHTMLAttributes, ReactElement, ReactNode } from 'react';\nimport { cn } from '../../lib/utils';\nimport { useDashboardLayout } from '../dashboard-layout/context';\n\nexport type SidebarNavItemRenderProps = {\n className: string;\n children: ReactNode;\n title?: string;\n 'aria-current'?: 'page';\n 'data-active'?: 'true';\n};\n\nexport interface SidebarNavItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n icon?: ReactNode;\n active?: boolean;\n label?: ReactNode;\n endSlot?: ReactNode;\n /**\n * Override the rendered element. Use this to plug in routing-library link\n * components (e.g. react-router `<Link>`) while keeping the styling.\n */\n render?: (props: SidebarNavItemRenderProps) => ReactElement;\n}\n\nexport function SidebarNavItem({\n icon,\n active = false,\n label,\n endSlot,\n className,\n children,\n render,\n ...props\n}: SidebarNavItemProps) {\n const { collapsed } = useDashboardLayout();\n const labelContent = label ?? children;\n const titleAttr = collapsed && typeof labelContent === 'string' ? labelContent : props.title;\n\n const inner = (\n <>\n {icon ? (\n <span aria-hidden=\"true\" className=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n {icon}\n </span>\n ) : null}\n <span\n className={cn(\n 'flex-1 truncate text-start transition-[opacity,width]',\n collapsed && 'pointer-events-none w-0 opacity-0'\n )}\n >\n {labelContent}\n </span>\n {endSlot && !collapsed ? (\n <span className=\"ms-auto flex shrink-0 items-center\">{endSlot}</span>\n ) : null}\n </>\n );\n\n const computedClass = cn(\n 'group relative flex h-9 items-center gap-3 rounded-md px-3 text-sm font-medium outline-none transition-colors',\n 'text-sidebar-foreground/80 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-sidebar',\n active && 'bg-sidebar-accent text-sidebar-accent-foreground',\n collapsed && 'justify-center px-0',\n className\n );\n\n if (render) {\n return render({\n className: computedClass,\n children: inner,\n title: titleAttr,\n 'aria-current': active ? 'page' : undefined,\n 'data-active': active ? 'true' : undefined,\n });\n }\n\n return (\n <a\n aria-current={active ? 'page' : undefined}\n data-active={active ? 'true' : undefined}\n title={titleAttr}\n className={computedClass}\n {...props}\n >\n {inner}\n </a>\n );\n}\n","import { DirectionProvider } from '@radix-ui/react-direction';\nimport type { ReactElement, ReactNode } from 'react';\nimport { useDirection } from '../../hooks';\nimport {\n DashboardContent,\n DashboardLayout,\n type DashboardLayoutProps,\n DashboardMain,\n} from '../dashboard-layout';\nimport {\n DashboardHeader,\n HeaderActions,\n HeaderCollapseTrigger,\n HeaderMobileTrigger,\n HeaderSearch,\n HeaderTitle,\n} from '../header';\nimport {\n Sidebar,\n SidebarFooter,\n SidebarHeader,\n SidebarNav,\n SidebarNavGroup,\n SidebarNavItem,\n} from '../sidebar';\n\ntype RenderLink = (props: {\n href?: string;\n className?: string;\n children: ReactNode;\n 'aria-current'?: 'page';\n}) => ReactElement;\n\nexport interface AppShellNavItem {\n /** Optional stable key. Falls back to array index if omitted — only safe for static nav. */\n key?: string;\n label: ReactNode;\n href?: string;\n icon?: ReactNode;\n active?: boolean;\n endSlot?: ReactNode;\n /** Optional render prop for routing libraries (e.g. react-router <Link>). */\n render?: RenderLink;\n}\n\nexport interface AppShellNavGroup {\n /** Optional stable key. Falls back to array index if omitted — only safe for static nav. */\n key?: string;\n label: ReactNode;\n icon?: ReactNode;\n active?: boolean;\n defaultOpen?: boolean;\n items: AppShellNavItem[];\n}\n\nexport interface AppShellBrand {\n logo?: ReactNode;\n name?: ReactNode;\n href?: string;\n}\n\nexport interface AppShellProps\n extends Pick<DashboardLayoutProps, 'defaultCollapsed' | 'collapsed' | 'onCollapsedChange'> {\n brand?: AppShellBrand;\n /**\n * Flat list of nav entries: leaf items (with `href` or `render`) and/or\n * collapsible groups (with `items`). For more advanced layouts (sections,\n * dividers, custom structure), compose `Sidebar` + `SidebarNav` directly.\n */\n nav: Array<AppShellNavItem | AppShellNavGroup>;\n title?: ReactNode;\n searchPlaceholder?: string;\n onSearch?: (value: string) => void;\n /** Slot rendered after the search box (e.g. notifications, user menu). */\n headerActions?: ReactNode;\n /** Slot rendered at the bottom of the sidebar (e.g. user badge). */\n sidebarFooter?: ReactNode;\n children: ReactNode;\n}\n\nfunction isGroup(entry: AppShellNavItem | AppShellNavGroup): entry is AppShellNavGroup {\n return 'items' in entry && Array.isArray((entry as AppShellNavGroup).items);\n}\n\nfunction renderItem(item: AppShellNavItem, fallbackKey: string | number) {\n const key = item.key ?? fallbackKey;\n if (item.render) {\n return (\n <SidebarNavItem\n key={key}\n icon={item.icon}\n active={item.active}\n endSlot={item.endSlot}\n render={item.render}\n >\n {item.label}\n </SidebarNavItem>\n );\n }\n return (\n <SidebarNavItem\n key={key}\n href={item.href}\n icon={item.icon}\n active={item.active}\n endSlot={item.endSlot}\n >\n {item.label}\n </SidebarNavItem>\n );\n}\n\n/**\n * Opinionated dashboard shell that combines `<DashboardLayout>` + `<Sidebar>` + `<Header>`\n * with a flat `nav` array. Hosts `<DirectionProvider>` so any Radix-based component\n * inside (Select, future Tooltip/Popover/etc.) auto-detects direction from `<html dir>`.\n *\n * For more complex layouts (custom sections, dividers, multi-row headers), compose\n * the underlying primitives (`Sidebar` + `SidebarNav` + `DashboardHeader`) directly.\n *\n * @example Basic usage\n * ```tsx\n * <AppShell\n * brand={{ logo: <Logo />, name: 'Acme' }}\n * nav={[\n * { key: 'home', label: 'Home', href: '/', icon: <Home /> },\n * {\n * key: 'settings',\n * label: 'Settings',\n * icon: <Settings />,\n * items: [\n * { key: 'profile', label: 'Profile', href: '/settings/profile' },\n * { key: 'team', label: 'Team', href: '/settings/team' },\n * ],\n * },\n * ]}\n * title=\"Dashboard\"\n * searchPlaceholder=\"Search…\"\n * headerActions={<UserMenu />}\n * sidebarFooter={<UserBadge />}\n * >\n * <Routes>...</Routes>\n * </AppShell>\n * ```\n *\n * @example With React Router Link integration via render prop\n * ```tsx\n * const nav = [{\n * key: 'home',\n * label: 'Home',\n * icon: <Home />,\n * render: ({ children, className, ...rest }) => (\n * <Link to=\"/\" className={className} {...rest}>{children}</Link>\n * ),\n * }];\n * ```\n */\nexport function AppShell({\n brand,\n nav,\n title,\n searchPlaceholder,\n onSearch,\n headerActions,\n sidebarFooter,\n defaultCollapsed,\n collapsed,\n onCollapsedChange,\n children,\n}: AppShellProps) {\n const dir = useDirection();\n\n return (\n <DirectionProvider dir={dir}>\n <DashboardLayout\n defaultCollapsed={defaultCollapsed}\n collapsed={collapsed}\n onCollapsedChange={onCollapsedChange}\n >\n <Sidebar>\n {(brand?.logo || brand?.name) && (\n <SidebarHeader>\n {brand.logo}\n {brand.name ? (\n <span className=\"truncate text-sm font-semibold\">{brand.name}</span>\n ) : null}\n </SidebarHeader>\n )}\n\n <SidebarNav>\n {nav.map((entry, index) =>\n isGroup(entry) ? (\n <SidebarNavGroup\n key={entry.key ?? index}\n label={entry.label}\n icon={entry.icon}\n active={entry.active}\n defaultOpen={entry.defaultOpen ?? entry.items.some((i) => i.active)}\n >\n {entry.items.map((item, itemIndex) => renderItem(item, itemIndex))}\n </SidebarNavGroup>\n ) : (\n renderItem(entry, index)\n )\n )}\n </SidebarNav>\n\n {sidebarFooter ? <SidebarFooter>{sidebarFooter}</SidebarFooter> : null}\n </Sidebar>\n\n <DashboardMain>\n <DashboardHeader>\n <HeaderMobileTrigger />\n <HeaderCollapseTrigger />\n {title ? (\n <HeaderTitle>\n <span className=\"truncate\">{title}</span>\n </HeaderTitle>\n ) : null}\n {searchPlaceholder ? (\n <HeaderSearch\n placeholder={searchPlaceholder}\n onChange={onSearch ? (e) => onSearch(e.target.value) : undefined}\n />\n ) : null}\n {headerActions ? <HeaderActions>{headerActions}</HeaderActions> : null}\n </DashboardHeader>\n\n <DashboardContent>{children}</DashboardContent>\n </DashboardMain>\n </DashboardLayout>\n </DirectionProvider>\n );\n}\n","import { type HTMLAttributes, useState } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n src?: string;\n alt?: string;\n fallback?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst sizeClass = {\n sm: 'h-7 w-7 text-xs',\n md: 'h-9 w-9 text-sm',\n lg: 'h-11 w-11 text-base',\n};\n\nexport function Avatar({ src, alt = '', fallback, size = 'md', className, ...props }: AvatarProps) {\n const [errored, setErrored] = useState(false);\n const showImage = Boolean(src) && !errored;\n\n return (\n <span\n className={cn(\n 'inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full bg-muted text-muted-foreground font-medium select-none',\n sizeClass[size],\n className\n )}\n {...props}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt}\n onError={() => setErrored(true)}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <span aria-hidden={!fallback}>{fallback ?? '?'}</span>\n )}\n </span>\n );\n}\n","import { Check, Minus } from 'lucide-react';\nimport {\n type ChangeEvent,\n forwardRef,\n type InputHTMLAttributes,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n} from 'react';\nimport { cn } from '../../lib/utils';\n\nexport type CheckboxSize = 'sm' | 'md';\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'onChange'> {\n /** Tri-state visual: when true, renders a dash and sets `aria-checked=\"mixed\"`. */\n indeterminate?: boolean;\n /** Convenience handler that receives the new checked boolean. */\n onCheckedChange?: (checked: boolean) => void;\n /** Standard change handler. Fires alongside `onCheckedChange`. */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n size?: CheckboxSize;\n}\n\nconst sizeClass: Record<CheckboxSize, string> = {\n sm: 'h-3.5 w-3.5',\n md: 'h-4 w-4',\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n checked,\n defaultChecked,\n indeterminate = false,\n onCheckedChange,\n onChange,\n disabled,\n size = 'md',\n className,\n 'aria-checked': ariaCheckedProp,\n ...rest\n },\n forwardedRef\n) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n useImperativeHandle(forwardedRef, () => inputRef.current as HTMLInputElement, []);\n\n useLayoutEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const ariaChecked = ariaCheckedProp ?? (indeterminate ? 'mixed' : undefined);\n\n return (\n <span className={cn('relative inline-flex shrink-0', sizeClass[size], className)}>\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-checked={ariaChecked}\n onChange={(event) => {\n onChange?.(event);\n onCheckedChange?.(event.currentTarget.checked);\n }}\n className={cn(\n 'peer absolute inset-0 m-0 cursor-pointer appearance-none rounded-sm border border-input bg-background',\n 'transition-colors',\n 'checked:border-primary checked:bg-primary',\n 'indeterminate:border-primary indeterminate:bg-primary',\n 'hover:border-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background'\n )}\n {...rest}\n />\n <Check\n aria-hidden=\"true\"\n strokeWidth={3}\n className=\"pointer-events-none absolute inset-0 m-auto h-3 w-3 text-primary-foreground opacity-0 peer-checked:opacity-100 peer-indeterminate:opacity-0\"\n />\n <Minus\n aria-hidden=\"true\"\n strokeWidth={3}\n className=\"pointer-events-none absolute inset-0 m-auto h-3 w-3 text-primary-foreground opacity-0 peer-indeterminate:opacity-100\"\n />\n </span>\n );\n});\n","import {\n cloneElement,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type Ref,\n useId,\n} from 'react';\nimport {\n type Control,\n Controller,\n type FieldPath,\n type FieldValues,\n useFormContext,\n} from 'react-hook-form';\nimport { cn } from '../../lib/utils';\n\nexport interface FieldRHFProps<\n TValues extends FieldValues = FieldValues,\n TName extends FieldPath<TValues> = FieldPath<TValues>,\n> {\n /**\n * RHF `Control` returned from `useForm()`. Optional when `Field` is rendered\n * inside a `<FormProvider>` — the control is read from context automatically.\n */\n control?: Control<TValues>;\n /** Path to the field within the form values. */\n name: TName;\n}\n\n/**\n * `vertical` (default) — label on top, control below, helper/error under.\n * `horizontal` — label on start, control on end (same row); helper/error below.\n *\n * Use `horizontal` for boolean controls (Switch, Checkbox) where the universal\n * pattern is \"label · toggle\" rather than \"label / toggle below\".\n */\nexport type FieldOrientation = 'vertical' | 'horizontal';\n\ninterface FieldLayoutProps {\n /** Label rendered with the control. Position depends on `orientation`. */\n label?: ReactNode;\n /** Helper text rendered under the control when there's no error. */\n description?: ReactNode;\n /** Marks the field as required (visual `*` + native `required`). */\n required?: boolean;\n /** Disables the wrapped control. */\n disabled?: boolean;\n /** Stretch the wrapper to fill its parent. Defaults to `true`. */\n fullWidth?: boolean;\n /** Layout direction. `vertical` (default) for inputs; `horizontal` for switches/checkboxes. */\n orientation?: FieldOrientation;\n /** Class applied to the outer wrapper. */\n className?: string;\n /** The single control element to wrap. Receives id + aria + (in RHF mode) field props. */\n children: ReactElement;\n}\n\ninterface FieldManualProps extends FieldLayoutProps {\n control?: never;\n name?: never;\n /** Error message to display. Pass falsy when valid. */\n error?: ReactNode;\n /** Override `aria-invalid`. Defaults to `!!error` when omitted. */\n invalid?: boolean;\n}\n\ninterface FieldRHFOnlyProps<TValues extends FieldValues, TName extends FieldPath<TValues>>\n extends FieldLayoutProps,\n FieldRHFProps<TValues, TName> {\n error?: never;\n invalid?: never;\n}\n\nexport type FieldProps<\n TValues extends FieldValues = FieldValues,\n TName extends FieldPath<TValues> = FieldPath<TValues>,\n> = FieldManualProps | FieldRHFOnlyProps<TValues, TName>;\n\n/**\n * `Field` wraps a single form control with a label, description, and error\n * message. It works in three modes:\n *\n * 1. **FormProvider context mode** (recommended): pass only `name`. The\n * `control` is pulled from the surrounding `<FormProvider>`.\n * 2. **Explicit control mode**: pass both `control` and `name` (useful when you\n * don't want a `FormProvider`, or when you have multiple forms on the page).\n * 3. **Manual mode**: omit `name`. Provide `error` / `invalid` yourself.\n *\n * @example FormProvider mode\n * ```tsx\n * <FormProvider {...form}>\n * <form onSubmit={form.handleSubmit(onSubmit)}>\n * <Field name=\"email\" label=\"Email\" description=\"…\">\n * <Input type=\"email\" />\n * </Field>\n * </form>\n * </FormProvider>\n * ```\n *\n * @example Explicit control mode\n * ```tsx\n * <Field control={form.control} name=\"email\" label=\"Email\">\n * <Input type=\"email\" />\n * </Field>\n * ```\n *\n * @example Manual mode\n * ```tsx\n * <Field label=\"Email\" error={errorMessage}>\n * <Input value={email} onChange={(e) => setEmail(e.target.value)} />\n * </Field>\n * ```\n */\nexport function Field<\n TValues extends FieldValues = FieldValues,\n TName extends FieldPath<TValues> = FieldPath<TValues>,\n>(props: FieldProps<TValues, TName>): ReactElement {\n // Always call the hook (rules of hooks). Returns `null` when no provider.\n const formContext = useFormContext<TValues>();\n\n if (props.name !== undefined) {\n const { control: explicitControl, name, children, ...layout } = props;\n const control = explicitControl ?? formContext?.control;\n\n if (!control) {\n throw new Error(\n '<Field name=\"...\"> requires either a `control` prop OR being rendered inside ' +\n '<FormProvider>. Wrap your form with <FormProvider {...form}> from react-hook-form, ' +\n 'or pass `control={form.control}` explicitly.'\n );\n }\n\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, fieldState }) => (\n <FieldShell {...layout} error={fieldState.error?.message} invalid={fieldState.invalid}>\n {cloneFieldChild(children, {\n name: field.name,\n value: field.value ?? '',\n onChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n disabled: layout.disabled ?? field.disabled,\n })}\n </FieldShell>\n )}\n />\n );\n }\n\n const { children, error, invalid, ...layout } = props as FieldManualProps;\n return (\n <FieldShell {...layout} error={error} invalid={invalid ?? Boolean(error)}>\n {children}\n </FieldShell>\n );\n}\n\ninterface FieldShellProps extends FieldLayoutProps {\n error?: ReactNode;\n invalid?: boolean;\n}\n\nfunction FieldShell({\n label,\n description,\n error,\n invalid = false,\n required = false,\n disabled = false,\n fullWidth = true,\n orientation = 'vertical',\n className,\n children,\n}: FieldShellProps): ReactElement {\n const reactId = useId();\n\n if (!isValidElement(children)) {\n throw new Error('<Field> requires a single React element as its child.');\n }\n\n const childProps = (children as ReactElement<Record<string, unknown>>).props;\n const id = (childProps.id as string | undefined) ?? reactId;\n const descriptionId = `${id}-description`;\n const errorId = `${id}-error`;\n\n const showError = invalid && error !== undefined && error !== null && error !== false;\n const showDescription = !showError && description !== undefined && description !== null;\n\n const userDescribedBy = childProps['aria-describedby'] as string | undefined;\n const describedBy =\n [userDescribedBy, showDescription ? descriptionId : null, showError ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const enhancedChild = cloneFieldChild(children, {\n id,\n 'aria-invalid': (childProps['aria-invalid'] as boolean | undefined) ?? (invalid || undefined),\n 'aria-describedby': describedBy,\n disabled: (childProps.disabled as boolean | undefined) ?? disabled,\n required: (childProps.required as boolean | undefined) ?? required,\n });\n\n const labelEl =\n label !== undefined && label !== null ? (\n <label\n htmlFor={id}\n className={cn(\n 'text-sm font-medium select-none text-foreground',\n disabled && 'opacity-50',\n invalid && 'text-destructive'\n )}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"ms-0.5 text-destructive\">\n *\n </span>\n )}\n </label>\n ) : null;\n\n const messageEl = showError ? (\n <p\n id={errorId}\n role=\"alert\"\n aria-live=\"polite\"\n className=\"text-xs font-medium text-destructive\"\n >\n {error}\n </p>\n ) : showDescription ? (\n <p id={descriptionId} className=\"text-xs text-muted-foreground\">\n {description}\n </p>\n ) : null;\n\n return (\n <div\n data-invalid={invalid || undefined}\n data-disabled={disabled || undefined}\n data-orientation={orientation}\n className={cn('flex flex-col gap-1.5', fullWidth && 'w-full', className)}\n >\n {orientation === 'horizontal' ? (\n <div className=\"flex items-center justify-between gap-3\">\n {labelEl}\n {enhancedChild}\n </div>\n ) : (\n <>\n {labelEl}\n {enhancedChild}\n </>\n )}\n {messageEl}\n </div>\n );\n}\n\n/**\n * Clone a child element merging the supplied props. User-provided props on the\n * child take precedence, so consumers can always override our defaults.\n */\nfunction cloneFieldChild(\n child: ReactElement,\n injected: Record<string, unknown> & { ref?: Ref<unknown> }\n): ReactElement {\n const childProps = (child as ReactElement<Record<string, unknown>>).props;\n const childRef = (child as ReactElement & { ref?: Ref<unknown> }).ref;\n const merged: Record<string, unknown> = { ...injected };\n\n for (const key of Object.keys(childProps)) {\n const value = childProps[key];\n if (value !== undefined) merged[key] = value;\n }\n\n if (injected.ref) {\n merged.ref = mergeRefs(injected.ref, childRef);\n } else if (childRef) {\n merged.ref = childRef;\n }\n\n return cloneElement(child, merged);\n}\n\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>): Ref<T> {\n return (instance: T) => {\n for (const ref of refs) {\n if (typeof ref === 'function') ref(instance);\n else if (ref && typeof ref === 'object') (ref as { current: T | null }).current = instance;\n }\n };\n}\n","export type InputVariant = 'default' | 'filled' | 'ghost';\n\nexport type InputSize = 'sm' | 'md' | 'lg';\n\nexport const inputVariantClass: Record<InputVariant, string> = {\n default: 'border border-input bg-background hover:border-ring',\n filled: 'border border-transparent bg-muted hover:bg-muted/80',\n ghost: 'border border-transparent bg-transparent hover:bg-accent',\n};\n\nexport const inputSizeClass: Record<InputSize, string> = {\n sm: 'h-8 rounded-md px-2.5 text-sm gap-1.5',\n md: 'h-9 rounded-md px-3 text-sm gap-2',\n lg: 'h-11 rounded-md px-4 text-base gap-2.5',\n};\n\nexport const inputBaseClass =\n 'group/input relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:ring-2 focus-within:ring-ring/40 focus-within:ring-offset-1 focus-within:ring-offset-background aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[input:disabled]:pointer-events-none has-[input:disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0';\n","import { forwardRef, type InputHTMLAttributes, type ReactNode, useId } from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type InputSize,\n type InputVariant,\n inputBaseClass,\n inputSizeClass,\n inputVariantClass,\n} from './inputVariants';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {\n variant?: InputVariant;\n inputSize?: InputSize;\n /** Optional label rendered above the field. */\n label?: ReactNode;\n /** Helper text rendered under the field when not in an error state. */\n helperText?: ReactNode;\n /** Error message — renders in destructive style and sets aria-invalid. */\n error?: ReactNode;\n /** Element rendered before the input (icon, prefix text, etc.). */\n leadingIcon?: ReactNode;\n /** Element rendered after the input (icon, suffix text, etc.). */\n trailingIcon?: ReactNode;\n /** Stretch the wrapper to fill the parent's inline width. Defaults to `true`. */\n fullWidth?: boolean;\n /** Class applied to the outer wrapper that holds the icons + input. */\n wrapperClassName?: string;\n /** Class applied to the field container (`<label>` block). */\n containerClassName?: string;\n}\n\n/**\n * Text input with optional label, helper text, error message, and leading/trailing icons.\n * Works standalone (uses `label`/`helperText`/`error` props) OR wrapped inside `<Field>`\n * (id and aria-* are injected by Field via `cloneElement`).\n *\n * @example Standalone with label + helper\n * ```tsx\n * <Input label=\"Email\" helperText=\"We'll never share it.\" type=\"email\" />\n * ```\n *\n * @example With icons\n * ```tsx\n * <Input\n * label=\"Search\"\n * leadingIcon={<Search />}\n * trailingIcon={<X onClick={clear} />}\n * />\n * ```\n *\n * @example Inside a Field (RHF + Zod)\n * ```tsx\n * <Field name=\"email\" label=\"Email\" required>\n * <Input type=\"email\" />\n * </Field>\n * ```\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n variant = 'default',\n inputSize = 'md',\n label,\n helperText,\n error,\n leadingIcon,\n trailingIcon,\n fullWidth = true,\n type = 'text',\n id,\n className,\n wrapperClassName,\n containerClassName,\n 'aria-invalid': ariaInvalidProp,\n 'aria-describedby': ariaDescribedByProp,\n disabled,\n ...props\n },\n ref\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const helperId = `${inputId}-helper`;\n const errorId = `${inputId}-error`;\n\n const hasError = error !== undefined && error !== null && error !== false;\n const ariaInvalid = ariaInvalidProp ?? (hasError ? true : undefined);\n\n const describedByIds = [\n ariaDescribedByProp,\n hasError ? errorId : null,\n !hasError && helperText ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n const ariaDescribedBy = describedByIds.length > 0 ? describedByIds : undefined;\n\n return (\n <div className={cn('flex flex-col gap-1.5', fullWidth && 'w-full', containerClassName)}>\n {label !== undefined && label !== null && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-foreground select-none\">\n {label}\n </label>\n )}\n\n <div\n data-slot=\"input-wrapper\"\n className={cn(\n inputBaseClass,\n inputVariantClass[variant],\n inputSizeClass[inputSize],\n wrapperClassName\n )}\n aria-invalid={ariaInvalid}\n data-disabled={disabled ? 'true' : undefined}\n >\n {leadingIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"inline-flex h-4 w-4 items-center justify-center text-muted-foreground\"\n >\n {leadingIcon}\n </span>\n ) : null}\n\n <input\n ref={ref}\n id={inputId}\n type={type}\n disabled={disabled}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n className={cn(\n 'h-full w-full min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed',\n className\n )}\n {...props}\n />\n\n {trailingIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"inline-flex h-4 w-4 items-center justify-center text-muted-foreground\"\n >\n {trailingIcon}\n </span>\n ) : null}\n </div>\n\n {hasError ? (\n <p id={errorId} className=\"text-xs text-destructive\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-muted-foreground\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n","import type { FieldsetHTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport interface LanguageOption<TCode extends string = string> {\n code: TCode;\n label?: string;\n}\n\nexport interface LanguageSwitcherProps<TCode extends string = string>\n extends Omit<FieldsetHTMLAttributes<HTMLFieldSetElement>, 'onChange'> {\n languages: ReadonlyArray<LanguageOption<TCode>>;\n value: TCode;\n onChange: (next: TCode) => void;\n /** Accessible label for the group. Defaults to \"Language\". */\n ariaLabel?: string;\n}\n\nexport function LanguageSwitcher<TCode extends string = string>({\n languages,\n value,\n onChange,\n ariaLabel = 'Language',\n className,\n ...props\n}: LanguageSwitcherProps<TCode>) {\n return (\n <fieldset\n aria-label={ariaLabel}\n className={cn(\n 'inline-flex items-center rounded-md border border-border bg-background p-0.5 text-xs',\n className\n )}\n {...props}\n >\n {languages.map((lang) => {\n const isActive = lang.code === value;\n return (\n <button\n key={lang.code}\n type=\"button\"\n onClick={() => onChange(lang.code)}\n aria-pressed={isActive}\n className={cn(\n 'rounded px-2 py-1 font-medium transition-colors',\n isActive\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {lang.label ?? lang.code.toUpperCase()}\n </button>\n );\n })}\n </fieldset>\n );\n}\n","export type SelectVariant = 'default' | 'filled' | 'ghost';\n\nexport type SelectSize = 'sm' | 'md' | 'lg';\n\nexport const selectVariantClass: Record<SelectVariant, string> = {\n default: 'border border-input bg-background hover:border-ring',\n filled: 'border border-transparent bg-muted hover:bg-muted/80',\n ghost: 'border border-transparent bg-transparent hover:bg-accent',\n};\n\n/**\n * `pe-*` is wider than `ps-*` to leave room for the chevron icon. Logical\n * properties keep RTL working free.\n */\nexport const selectSizeClass: Record<SelectSize, string> = {\n sm: 'h-8 rounded-md ps-2.5 pe-8 text-sm',\n md: 'h-9 rounded-md ps-3 pe-9 text-sm',\n lg: 'h-11 rounded-md ps-4 pe-10 text-base',\n};\n\nexport const selectBaseClass =\n 'group/select relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus:ring-2 focus:ring-ring/40 focus:ring-offset-1 focus:ring-offset-background aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-destructive/40 disabled:pointer-events-none disabled:opacity-50 cursor-pointer data-[placeholder]:text-muted-foreground';\n\n/** Popup content (the open dropdown panel). */\nexport const selectContentClass =\n 'z-50 max-h-(--radix-select-content-available-height) min-w-(--radix-select-trigger-width) overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95';\n\nexport const selectViewportClass = 'p-1';\n\n/** Individual option item. */\nexport const selectItemClass =\n 'relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 ps-8 pe-2 text-sm outline-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50';\n\n/** Selected check indicator on the start side of each item. */\nexport const selectItemIndicatorClass =\n 'absolute start-2 inline-flex h-3.5 w-3.5 items-center justify-center [&_svg]:h-3.5 [&_svg]:w-3.5';\n\n/** Group label (when using <Select.Group> + <Select.Label>). */\nexport const selectGroupLabelClass = 'px-2 py-1.5 text-xs font-semibold text-muted-foreground';\n\n/** Separator between groups. */\nexport const selectSeparatorClass = '-mx-1 my-1 h-px bg-border';\n","import * as RadixSelect from '@radix-ui/react-select';\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react';\nimport { type ChangeEvent, forwardRef, type ReactNode, type Ref, useCallback, useId } from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type SelectSize,\n type SelectVariant,\n selectBaseClass,\n selectContentClass,\n selectGroupLabelClass,\n selectItemClass,\n selectItemIndicatorClass,\n selectSeparatorClass,\n selectSizeClass,\n selectVariantClass,\n selectViewportClass,\n} from './selectVariants';\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectGroup {\n label: string;\n options: SelectOption[];\n}\n\n/**\n * `options` accepts either a flat list of options OR a list of groups.\n * Use `children` for full Radix composition (Select.Item, Select.Separator…).\n */\nexport type SelectOptions = SelectOption[] | SelectGroup[];\n\nexport interface SelectProps {\n variant?: SelectVariant;\n /** Visual size. Named `selectSize` to mirror Input's `inputSize`. */\n selectSize?: SelectSize;\n\n /** Declarative options (flat or grouped). When `children` is provided it wins. */\n options?: SelectOptions;\n /** Placeholder shown when no value is selected. */\n placeholder?: string;\n\n /** Controlled value. */\n value?: string;\n /** Initial value for uncontrolled usage. */\n defaultValue?: string;\n /** Radix-style change handler — receives the new value directly. */\n onValueChange?: (value: string) => void;\n /**\n * Synthetic-event handler for compatibility with `react-hook-form`'s\n * `field.onChange` and other consumers that expect a `ChangeEvent`-shaped\n * object. Both this and `onValueChange` fire on selection.\n */\n onChange?: (event: ChangeEvent<HTMLSelectElement>) => void;\n /** Called when focus leaves the trigger. */\n onBlur?: () => void;\n\n /** Form name (for native form submission). */\n name?: string;\n /** Disables the trigger. */\n disabled?: boolean;\n /** Marks the underlying form input as required. */\n required?: boolean;\n /** Override id (otherwise auto-generated via useId). */\n id?: string;\n\n /** Class applied to the trigger button. */\n className?: string;\n\n 'aria-invalid'?: boolean | 'true' | 'false';\n 'aria-describedby'?: string;\n 'aria-label'?: string;\n\n /** Radix children — used for advanced composition (Select.Group, etc.). */\n children?: ReactNode;\n}\n\nfunction isGroupedOptions(options: SelectOptions): options is SelectGroup[] {\n const first = options[0];\n return first !== undefined && 'options' in first;\n}\n\n/**\n * Dropdown select built on `@radix-ui/react-select`. Renders only the trigger\n * button + Radix popup — wrap it in `<Field label=\"…\">` to add a label, helper\n * text, error, and aria wiring.\n *\n * @example Inside a Field (RHF + Zod)\n * ```tsx\n * <Field name=\"country\" label=\"Country\" required>\n * <Select options={COUNTRIES} placeholder=\"Pick one\" />\n * </Field>\n * ```\n *\n * @example Bare in a filter bar (no label)\n * ```tsx\n * <Select\n * value={status}\n * onValueChange={setStatus}\n * options={STATUS_OPTIONS}\n * placeholder=\"Status\"\n * aria-label=\"Status filter\"\n * />\n * ```\n *\n * @example Grouped options\n * ```tsx\n * <Select options={[\n * { label: 'GCC', options: [{ value: 'sa', label: 'Saudi Arabia' }] },\n * { label: 'Levant', options: [{ value: 'jo', label: 'Jordan' }] },\n * ]} />\n * ```\n */\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(function Select(\n {\n variant = 'default',\n selectSize = 'md',\n options,\n placeholder,\n value,\n defaultValue,\n onValueChange,\n onChange,\n onBlur,\n name,\n disabled,\n required,\n id,\n className,\n 'aria-invalid': ariaInvalid,\n 'aria-describedby': ariaDescribedBy,\n 'aria-label': ariaLabel,\n children,\n },\n ref\n) {\n const generatedId = useId();\n const triggerId = id ?? generatedId;\n\n const handleValueChange = useCallback(\n (next: string) => {\n onValueChange?.(next);\n if (onChange) {\n const synthetic = {\n target: { value: next, name },\n currentTarget: { value: next, name },\n type: 'change',\n } as unknown as ChangeEvent<HTMLSelectElement>;\n onChange(synthetic);\n }\n },\n [onValueChange, onChange, name]\n );\n\n return (\n <RadixSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleValueChange}\n disabled={disabled}\n required={required}\n name={name}\n >\n <RadixSelect.Trigger\n ref={ref as Ref<HTMLButtonElement>}\n id={triggerId}\n aria-label={ariaLabel}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n onBlur={onBlur}\n data-slot=\"select-trigger\"\n className={cn(\n selectBaseClass,\n selectVariantClass[variant],\n selectSizeClass[selectSize],\n className\n )}\n >\n <RadixSelect.Value placeholder={placeholder} />\n <RadixSelect.Icon asChild>\n <ChevronDown className=\"pointer-events-none absolute end-3 top-1/2 size-4 shrink-0 -translate-y-1/2 text-muted-foreground\" />\n </RadixSelect.Icon>\n </RadixSelect.Trigger>\n\n <RadixSelect.Portal>\n <RadixSelect.Content\n position=\"popper\"\n sideOffset={4}\n data-slot=\"select-content\"\n className={selectContentClass}\n >\n <RadixSelect.ScrollUpButton className=\"flex h-6 cursor-default items-center justify-center bg-popover text-muted-foreground\">\n <ChevronUp className=\"size-4\" />\n </RadixSelect.ScrollUpButton>\n\n <RadixSelect.Viewport className={selectViewportClass}>\n {children ?? (options ? renderOptions(options) : null)}\n </RadixSelect.Viewport>\n\n <RadixSelect.ScrollDownButton className=\"flex h-6 cursor-default items-center justify-center bg-popover text-muted-foreground\">\n <ChevronDown className=\"size-4\" />\n </RadixSelect.ScrollDownButton>\n </RadixSelect.Content>\n </RadixSelect.Portal>\n </RadixSelect.Root>\n );\n});\n\nfunction renderOptions(options: SelectOptions): ReactNode {\n if (isGroupedOptions(options)) {\n const lastIndex = options.length - 1;\n return options.map((group, idx) => (\n <RadixSelect.Group key={group.label}>\n <RadixSelect.Label className={selectGroupLabelClass}>{group.label}</RadixSelect.Label>\n {group.options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </SelectItem>\n ))}\n {idx < lastIndex && <RadixSelect.Separator className={selectSeparatorClass} />}\n </RadixSelect.Group>\n ));\n }\n\n return options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </SelectItem>\n ));\n}\n\n/**\n * `<SelectItem>` — re-exported for consumers building custom option content\n * (icons, descriptions, etc.) via the `children` escape hatch.\n */\nexport const SelectItem = forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof RadixSelect.Item>\n>(function SelectItem({ className, children, ...props }, ref) {\n return (\n <RadixSelect.Item ref={ref} className={cn(selectItemClass, className)} {...props}>\n <RadixSelect.ItemIndicator className={selectItemIndicatorClass}>\n <Check />\n </RadixSelect.ItemIndicator>\n <RadixSelect.ItemText>{children}</RadixSelect.ItemText>\n </RadixSelect.Item>\n );\n});\n","export type SwitchSize = 'sm' | 'md' | 'lg';\n\n/**\n * Each size is a tuple: track dimensions + thumb size + thumb travel distance.\n * Track is `w` x `h`; thumb is `w/h size-X`; travel is the translation distance\n * when checked (= track width − thumb size − padding).\n */\nexport const switchTrackClass: Record<SwitchSize, string> = {\n sm: 'h-4 w-7',\n md: 'h-5 w-9',\n lg: 'h-6 w-11',\n};\n\nexport const switchThumbClass: Record<SwitchSize, string> = {\n sm: 'size-3 data-[state=checked]:translate-x-3 data-[state=checked]:rtl:-translate-x-3',\n md: 'size-4 data-[state=checked]:translate-x-4 data-[state=checked]:rtl:-translate-x-4',\n lg: 'size-5 data-[state=checked]:translate-x-5 data-[state=checked]:rtl:-translate-x-5',\n};\n\nexport const switchTrackBaseClass =\n 'relative inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent bg-input transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary aria-[invalid=true]:ring-2 aria-[invalid=true]:ring-destructive/40';\n\nexport const switchThumbBaseClass =\n 'pointer-events-none block rounded-full bg-background shadow-sm ring-0 transition-transform';\n","import * as RadixSwitch from '@radix-ui/react-switch';\nimport { type ChangeEvent, forwardRef, type Ref, useCallback, useId } from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type SwitchSize,\n switchThumbBaseClass,\n switchThumbClass,\n switchTrackBaseClass,\n switchTrackClass,\n} from './switchVariants';\n\nexport interface SwitchProps {\n /** Visual size. */\n switchSize?: SwitchSize;\n\n /** Controlled checked state (Radix-style). */\n checked?: boolean;\n /** Initial checked state for uncontrolled usage. */\n defaultChecked?: boolean;\n /** Radix-style change handler — receives the new boolean directly. */\n onCheckedChange?: (checked: boolean) => void;\n\n /**\n * Form-library compatibility props. `value` mirrors what `<Field>` injects\n * (RHF passes `field.value` as a boolean). `onChange` fires alongside\n * `onCheckedChange` with a synthetic event so `field.onChange` works too.\n */\n value?: boolean | string | number;\n onChange?: (event: ChangeEvent<HTMLButtonElement>) => void;\n onBlur?: () => void;\n\n /** Form name for native form submission. */\n name?: string;\n /** Disable interaction. */\n disabled?: boolean;\n /** Mark required for form validation. */\n required?: boolean;\n /** Override id (otherwise auto-generated via useId). */\n id?: string;\n /** Class on the track (the switch itself). */\n className?: string;\n\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean | 'true' | 'false';\n}\n\n/**\n * Boolean toggle built on `@radix-ui/react-switch`. Renders only the track +\n * thumb — wrap it in `<Field orientation=\"horizontal\" label=\"…\">` to add a\n * label, helper text, error, and aria wiring without duplicating that logic\n * inside every form control.\n *\n * @example Inside a Field (RHF + Zod)\n * ```tsx\n * <Field name=\"darkMode\" label=\"Dark mode\" orientation=\"horizontal\">\n * <Switch />\n * </Field>\n * ```\n *\n * @example Bare in a settings list (custom layout)\n * ```tsx\n * <ul className=\"divide-y divide-border\">\n * <li className=\"flex items-center justify-between py-3\">\n * <span>Email digest</span>\n * <Switch checked={digest} onCheckedChange={setDigest} aria-label=\"Email digest\" />\n * </li>\n * </ul>\n * ```\n *\n * @example Standalone controlled\n * ```tsx\n * <Switch\n * checked={enabled}\n * onCheckedChange={setEnabled}\n * aria-label=\"Enable notifications\"\n * />\n * ```\n */\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(function Switch(\n {\n switchSize = 'md',\n checked,\n defaultChecked,\n onCheckedChange,\n value,\n onChange,\n onBlur,\n name,\n disabled,\n required,\n id,\n className,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n },\n ref\n) {\n const generatedId = useId();\n const switchId = id ?? generatedId;\n\n // Field passes `value` (RHF's `field.value`); coerce to boolean if `checked` not set.\n const resolvedChecked = checked ?? (value === undefined ? undefined : Boolean(value));\n\n const handleCheckedChange = useCallback(\n (next: boolean) => {\n onCheckedChange?.(next);\n if (onChange) {\n const synthetic = {\n target: { checked: next, value: next, name },\n currentTarget: { checked: next, value: next, name },\n type: 'change',\n } as unknown as ChangeEvent<HTMLButtonElement>;\n onChange(synthetic);\n }\n },\n [onCheckedChange, onChange, name]\n );\n\n return (\n <RadixSwitch.Root\n ref={ref as Ref<HTMLButtonElement>}\n id={switchId}\n checked={resolvedChecked}\n defaultChecked={defaultChecked}\n onCheckedChange={handleCheckedChange}\n onBlur={onBlur}\n disabled={disabled}\n required={required}\n name={name}\n aria-label={ariaLabel}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n data-slot=\"switch-track\"\n className={cn(switchTrackBaseClass, switchTrackClass[switchSize], className)}\n >\n <RadixSwitch.Thumb\n data-slot=\"switch-thumb\"\n className={cn(switchThumbBaseClass, switchThumbClass[switchSize])}\n />\n </RadixSwitch.Root>\n );\n});\n","import { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { useDirection } from '../../../hooks/use-direction';\nimport { Button } from '../../button';\nimport type { PaginationState } from '../types';\n\ninterface PaginationProps {\n pageIndex: number;\n pageSize: number;\n pageCount: number;\n totalRowCount: number;\n pageSizeOptions: readonly number[];\n onChange: (next: PaginationState) => void;\n}\n\nexport function Pagination({\n pageIndex,\n pageSize,\n pageCount,\n totalRowCount,\n pageSizeOptions,\n onChange,\n}: PaginationProps) {\n const dir = useDirection();\n const isRtl = dir === 'rtl';\n\n const isFirst = pageIndex <= 0;\n const isLast = pageIndex >= pageCount - 1;\n\n const goPrev = () => {\n if (!isFirst) onChange({ pageIndex: pageIndex - 1, pageSize });\n };\n const goNext = () => {\n if (!isLast) onChange({ pageIndex: pageIndex + 1, pageSize });\n };\n\n const start = totalRowCount === 0 ? 0 : pageIndex * pageSize + 1;\n const end = Math.min(totalRowCount, (pageIndex + 1) * pageSize);\n\n return (\n <div className=\"flex flex-wrap items-center justify-between gap-3 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-2\">\n <label className=\"flex items-center gap-2\">\n <span>Rows per page</span>\n <select\n className=\"h-8 rounded-md border border-input bg-background px-2 text-sm text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n value={pageSize}\n onChange={(event) => {\n const nextSize = Number(event.target.value);\n onChange({ pageIndex: 0, pageSize: nextSize });\n }}\n >\n {pageSizeOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </label>\n </div>\n\n <div className=\"flex items-center gap-3\">\n <span aria-live=\"polite\">\n {start}–{end} of {totalRowCount}\n </span>\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={isFirst}\n onClick={goPrev}\n aria-label=\"Previous page\"\n >\n {isRtl ? (\n <ChevronRight aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronLeft aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n <span className=\"px-1 text-foreground\">\n {pageIndex + 1} / {pageCount}\n </span>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={isLast}\n onClick={goNext}\n aria-label=\"Next page\"\n >\n {isRtl ? (\n <ChevronLeft aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronRight aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Button } from '../../button';\n\ninterface ToolbarProps {\n count: number;\n onClear: () => void;\n renderLabel?: (count: number) => ReactNode;\n clearLabel?: ReactNode;\n children?: ReactNode;\n}\n\nexport function Toolbar({ count, onClear, renderLabel, clearLabel, children }: ToolbarProps) {\n return (\n <div\n role=\"toolbar\"\n aria-label=\"Bulk actions\"\n className=\"flex flex-wrap items-center gap-3 rounded-md border border-border bg-muted/40 px-3 py-2 text-sm\"\n >\n <span className=\"font-medium text-foreground\">\n {renderLabel ? renderLabel(count) : `${count} selected`}\n </span>\n <div className=\"ms-auto flex flex-wrap items-center gap-2\">\n {children}\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onClear}>\n {clearLabel ?? 'Clear'}\n </Button>\n </div>\n </div>\n );\n}\n","import type { ColumnAlign } from './types';\n\nexport type TableSize = 'sm' | 'md' | 'lg';\n\nexport interface TableSizeClasses {\n /** Applied to <tr> when needed (currently empty — present for symmetry). */\n row: string;\n /** Applied to <td>. */\n cell: string;\n /** Applied to <th>. */\n head: string;\n}\n\nexport const tableSizeClass: Record<TableSize, TableSizeClasses> = {\n sm: {\n row: '',\n cell: 'px-3 py-1.5 text-xs',\n head: 'px-3 py-2 text-xs font-medium',\n },\n md: {\n row: '',\n cell: 'px-4 py-2.5 text-sm',\n head: 'px-4 py-2.5 text-xs font-medium uppercase tracking-wide',\n },\n lg: {\n row: '',\n cell: 'px-5 py-3.5 text-sm',\n head: 'px-5 py-3 text-sm font-medium',\n },\n};\n\nexport const tableBaseClass = 'w-full caption-bottom border-collapse';\n\nexport const selectedRowClass = 'bg-muted/40';\n\nexport const sortIconClass = 'inline-flex h-3 w-3 shrink-0 items-center justify-center';\n\nexport const alignClass: Record<ColumnAlign, string> = {\n start: 'text-start',\n center: 'text-center',\n end: 'text-end',\n};\n","import { useCallback, useState } from 'react';\nimport type { PaginationState, RowSelectionState, SortState, TableProps } from './types';\n\ninterface UseTableStateResult {\n sort: SortState;\n setSort: (next: SortState) => void;\n pagination: PaginationState;\n setPagination: (next: PaginationState) => void;\n selected: RowSelectionState;\n setSelected: (next: RowSelectionState) => void;\n isServerSide: boolean;\n}\n\nconst EMPTY_SELECTION: RowSelectionState = new Set<string>();\nconst NO_SORT: SortState = { columnId: null, direction: 'asc' };\n\nexport function useTableState<T>(props: TableProps<T>): UseTableStateResult {\n const {\n defaultSort,\n sort: sortProp,\n onSortChange,\n defaultPagination,\n pagination: paginationProp,\n onPaginationChange,\n pageSizeOptions,\n defaultSelectedRowIds,\n selectedRowIds: selectedRowIdsProp,\n onSelectedRowIdsChange,\n totalCount,\n } = props;\n\n // ── Sort ───────────────────────────────────────────────────────────────────\n const [internalSort, setInternalSort] = useState<SortState>(defaultSort ?? NO_SORT);\n const isSortControlled = sortProp !== undefined;\n const sort = isSortControlled ? sortProp : internalSort;\n const setSort = useCallback(\n (next: SortState) => {\n if (!isSortControlled) setInternalSort(next);\n onSortChange?.(next);\n },\n [isSortControlled, onSortChange]\n );\n\n // ── Pagination ─────────────────────────────────────────────────────────────\n const [internalPagination, setInternalPagination] = useState<PaginationState>(\n defaultPagination ?? { pageIndex: 0, pageSize: pageSizeOptions?.[0] ?? 10 }\n );\n const isPaginationControlled = paginationProp !== undefined;\n const pagination = isPaginationControlled ? paginationProp : internalPagination;\n const setPagination = useCallback(\n (next: PaginationState) => {\n if (!isPaginationControlled) setInternalPagination(next);\n onPaginationChange?.(next);\n },\n [isPaginationControlled, onPaginationChange]\n );\n\n // ── Selection ──────────────────────────────────────────────────────────────\n const [internalSelected, setInternalSelected] = useState<RowSelectionState>(\n defaultSelectedRowIds ?? EMPTY_SELECTION\n );\n const isSelectionControlled = selectedRowIdsProp !== undefined;\n const selected = isSelectionControlled ? selectedRowIdsProp : internalSelected;\n const setSelected = useCallback(\n (next: RowSelectionState) => {\n if (!isSelectionControlled) setInternalSelected(next);\n onSelectedRowIdsChange?.(next);\n },\n [isSelectionControlled, onSelectedRowIdsChange]\n );\n\n return {\n sort,\n setSort,\n pagination,\n setPagination,\n selected,\n setSelected,\n isServerSide: totalCount !== undefined,\n };\n}\n","import { ChevronDown, ChevronsUpDown, ChevronUp } from 'lucide-react';\nimport type { MouseEvent, ReactNode } from 'react';\nimport { useMemo } from 'react';\nimport { cn } from '../../lib/utils';\nimport { Checkbox } from '../checkbox';\nimport { Pagination } from './components/Pagination';\nimport { Toolbar } from './components/Toolbar';\nimport { alignClass, selectedRowClass, tableBaseClass, tableSizeClass } from './tableVariants';\nimport type { Column, SortableValue, SortDirection, SortState, TableProps } from './types';\nimport { useTableState } from './useTableState';\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50] as const;\n\nexport function Table<T>(props: TableProps<T>) {\n const {\n data,\n columns,\n getRowId,\n enableRowSelection = false,\n isRowSelectable,\n bulkActions,\n renderSelectionLabel,\n clearSelectionLabel,\n loading = false,\n loadingRowCount,\n emptyState,\n size = 'md',\n className,\n tableClassName,\n maxHeight,\n striped = false,\n onRowClick,\n tableRef,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n showPagination,\n caption,\n } = props;\n\n const ariaLabel = props['aria-label'];\n const ariaLabelledBy = props['aria-labelledby'];\n\n const { sort, setSort, pagination, setPagination, selected, setSelected, isServerSide } =\n useTableState(props);\n\n // ── Data pipeline: sort → paginate ──────────────────────────────────────\n const sortedRows = useMemo<readonly T[]>(() => {\n if (isServerSide || sort.columnId === null) return data;\n const col = columns.find((c) => c.id === sort.columnId);\n if (!col) return data;\n const get = resolveSortGetter(col);\n if (!get) return data;\n const tagged = data.map((row, index) => ({ row, index }));\n tagged.sort((a, b) => {\n const cmp = compareValues(get(a.row), get(b.row));\n if (cmp !== 0) return sort.direction === 'asc' ? cmp : -cmp;\n return a.index - b.index;\n });\n return tagged.map((entry) => entry.row);\n }, [data, columns, sort, isServerSide]);\n\n const pagedRows = useMemo<readonly T[]>(() => {\n if (isServerSide) return sortedRows;\n const start = pagination.pageIndex * pagination.pageSize;\n return sortedRows.slice(start, start + pagination.pageSize);\n }, [sortedRows, pagination, isServerSide]);\n\n const totalRowCount = isServerSide ? (props.totalCount ?? 0) : data.length;\n const pageCount = Math.max(1, Math.ceil(totalRowCount / pagination.pageSize));\n\n // ── Selection helpers ────────────────────────────────────────────────────\n const selectableRowIds = useMemo<string[]>(() => {\n if (!enableRowSelection) return [];\n return pagedRows\n .map((row, index) => ({ row, index }))\n .filter(({ row }) => (isRowSelectable ? isRowSelectable(row) : true))\n .map(({ row, index }) => getRowId(row, index));\n }, [pagedRows, enableRowSelection, isRowSelectable, getRowId]);\n\n const selectedOnPageCount = selectableRowIds.reduce(\n (acc, id) => (selected.has(id) ? acc + 1 : acc),\n 0\n );\n const allOnPageSelected =\n selectableRowIds.length > 0 && selectedOnPageCount === selectableRowIds.length;\n const someOnPageSelected = selectedOnPageCount > 0 && !allOnPageSelected;\n\n const selectedRowsInData = useMemo<T[]>(() => {\n if (selected.size === 0) return [];\n return data.filter((row, index) => selected.has(getRowId(row, index)));\n }, [data, selected, getRowId]);\n\n const toggleHeader = (next: boolean) => {\n const updated = new Set(selected);\n if (next) {\n for (const id of selectableRowIds) updated.add(id);\n } else {\n for (const id of selectableRowIds) updated.delete(id);\n }\n setSelected(updated);\n };\n\n const toggleRow = (id: string, next: boolean) => {\n const updated = new Set(selected);\n if (next) updated.add(id);\n else updated.delete(id);\n setSelected(updated);\n };\n\n const clearSelection = () => setSelected(new Set<string>());\n\n const handleSortClick = (columnId: string) => {\n setSort(nextSort(sort, columnId));\n };\n\n const totalColumnCount = columns.length + (enableRowSelection ? 1 : 0);\n const paginationVisible = showPagination ?? totalRowCount > pagination.pageSize;\n const sizeClasses = tableSizeClass[size];\n const showToolbar = enableRowSelection && bulkActions !== undefined && selected.size > 0;\n const skeletonCount = loadingRowCount ?? pagination.pageSize;\n\n return (\n <div className={cn('flex w-full flex-col gap-3', className)}>\n {showToolbar && (\n <Toolbar\n count={selected.size}\n onClear={clearSelection}\n renderLabel={renderSelectionLabel}\n clearLabel={clearSelectionLabel}\n >\n {bulkActions(selectedRowsInData)}\n </Toolbar>\n )}\n\n <div\n className={cn(\n 'overflow-x-auto rounded-md border border-border bg-background',\n maxHeight !== undefined && 'overflow-y-auto'\n )}\n style={maxHeight !== undefined ? { maxHeight } : undefined}\n >\n <table\n ref={tableRef}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-rowcount={totalRowCount}\n className={cn(tableBaseClass, 'text-sm text-foreground', tableClassName)}\n >\n {caption ? <caption className=\"sr-only\">{caption}</caption> : null}\n <thead\n className={cn(\n 'bg-muted/40 text-muted-foreground',\n maxHeight !== undefined && 'sticky top-0 z-10'\n )}\n >\n <tr>\n {enableRowSelection ? (\n <th scope=\"col\" className={cn('w-10', sizeClasses.head)}>\n <Checkbox\n aria-label=\"Select all rows on this page\"\n checked={allOnPageSelected}\n indeterminate={someOnPageSelected}\n disabled={selectableRowIds.length === 0}\n onCheckedChange={toggleHeader}\n />\n </th>\n ) : null}\n {columns.map((column) => {\n const isSorted = sort.columnId === column.id;\n const ariaSort = isSorted\n ? sort.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n return (\n <th\n key={column.id}\n scope=\"col\"\n aria-sort={column.sortable ? ariaSort : undefined}\n className={cn(\n sizeClasses.head,\n alignClass[column.align ?? 'start'],\n column.className\n )}\n >\n {column.sortable ? (\n <button\n type=\"button\"\n onClick={() => handleSortClick(column.id)}\n className=\"inline-flex items-center gap-1.5 font-inherit uppercase tracking-inherit text-inherit hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background\"\n aria-label={sortAriaLabel(column, sort)}\n >\n <span>{renderHeader(column.header)}</span>\n <SortIndicator\n active={isSorted}\n direction={isSorted ? sort.direction : null}\n />\n </button>\n ) : (\n renderHeader(column.header)\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {loading ? (\n <SkeletonRows\n rowCount={skeletonCount}\n columnCount={totalColumnCount}\n cellClassName={sizeClasses.cell}\n />\n ) : pagedRows.length === 0 ? (\n <tr>\n <td\n colSpan={totalColumnCount}\n className={cn(sizeClasses.cell, 'py-10 text-center text-muted-foreground')}\n >\n {emptyState ?? 'No data'}\n </td>\n </tr>\n ) : (\n pagedRows.map((row, rowIndex) => {\n const id = getRowId(row, rowIndex);\n const isSelected = selected.has(id);\n const rowSelectable = isRowSelectable ? isRowSelectable(row) : true;\n return (\n <tr\n key={id}\n data-selected={isSelected ? 'true' : undefined}\n aria-selected={enableRowSelection ? isSelected : undefined}\n className={cn(\n 'border-t border-border transition-colors',\n 'hover:bg-accent',\n striped && rowIndex % 2 === 1 && 'bg-muted/20',\n isSelected && selectedRowClass,\n onRowClick && 'cursor-pointer'\n )}\n onClick={onRowClick ? () => onRowClick(row, rowIndex) : undefined}\n >\n {enableRowSelection ? (\n <td className={cn(sizeClasses.cell, 'w-10')}>\n <Checkbox\n aria-label={`Select row ${rowIndex + 1}`}\n checked={isSelected}\n disabled={!rowSelectable}\n onCheckedChange={(next) => toggleRow(id, next)}\n onClick={stopRowClickPropagation}\n />\n </td>\n ) : null}\n {columns.map((column) => (\n <td\n key={column.id}\n className={cn(\n sizeClasses.cell,\n alignClass[column.align ?? 'start'],\n column.className\n )}\n >\n {renderCell(column, row, rowIndex)}\n </td>\n ))}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {paginationVisible ? (\n <Pagination\n pageIndex={pagination.pageIndex}\n pageSize={pagination.pageSize}\n pageCount={pageCount}\n totalRowCount={totalRowCount}\n pageSizeOptions={pageSizeOptions}\n onChange={setPagination}\n />\n ) : null}\n </div>\n );\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction renderHeader(header: Column<unknown>['header']): ReactNode {\n return typeof header === 'function' ? header() : header;\n}\n\nfunction renderCell<T>(column: Column<T>, row: T, rowIndex: number): ReactNode {\n if (column.render) return column.render(row, rowIndex);\n if (column.accessor !== undefined) {\n const value = row[column.accessor];\n return value === null || value === undefined ? '' : String(value);\n }\n return null;\n}\n\nfunction resolveSortGetter<T>(column: Column<T>): ((row: T) => SortableValue) | null {\n if (column.sortAccessor) return column.sortAccessor;\n if (column.accessor !== undefined) {\n const key = column.accessor;\n return (row: T) => row[key] as SortableValue;\n }\n return null;\n}\n\nfunction compareValues(a: SortableValue, b: SortableValue): number {\n if (a === b) return 0;\n if (a === null || a === undefined) return 1;\n if (b === null || b === undefined) return -1;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : 1;\n if (typeof a === 'boolean' && typeof b === 'boolean') return a === b ? 0 : a ? 1 : -1;\n return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: 'base' });\n}\n\nfunction nextSort(current: SortState, columnId: string): SortState {\n if (current.columnId !== columnId) return { columnId, direction: 'asc' };\n if (current.direction === 'asc') return { columnId, direction: 'desc' };\n return { columnId: null, direction: 'asc' };\n}\n\nfunction sortAriaLabel<T>(column: Column<T>, sort: SortState): string {\n const headerText = typeof column.header === 'string' ? column.header : column.id;\n if (sort.columnId !== column.id) return `Sort by ${headerText}`;\n return sort.direction === 'asc'\n ? `Sort by ${headerText}, currently ascending`\n : `Sort by ${headerText}, currently descending`;\n}\n\nfunction stopRowClickPropagation(event: MouseEvent<HTMLInputElement>) {\n event.stopPropagation();\n}\n\ninterface SkeletonRowsProps {\n rowCount: number;\n columnCount: number;\n cellClassName: string;\n}\n\nfunction SkeletonRows({ rowCount, columnCount, cellClassName }: SkeletonRowsProps) {\n const rowKeys = Array.from({ length: Math.max(0, rowCount) }, (_, i) => `skeleton-row-${i}`);\n const colKeys = Array.from({ length: Math.max(1, columnCount) }, (_, i) => `skeleton-col-${i}`);\n return (\n <>\n {rowKeys.map((rowKey) => (\n <tr key={rowKey} className=\"border-t border-border\" data-testid=\"table-skeleton-row\">\n {colKeys.map((colKey) => (\n <td key={`${rowKey}-${colKey}`} className={cellClassName}>\n <span className=\"block h-3 w-full animate-pulse rounded bg-muted\" />\n </td>\n ))}\n </tr>\n ))}\n </>\n );\n}\n\ninterface SortIndicatorProps {\n active: boolean;\n direction: SortDirection | null;\n}\n\nfunction SortIndicator({ active, direction }: SortIndicatorProps) {\n const className = cn(\n 'h-3.5 w-3.5 shrink-0',\n active ? 'text-foreground' : 'text-muted-foreground'\n );\n if (!active) return <ChevronsUpDown aria-hidden=\"true\" className={className} />;\n return direction === 'asc' ? (\n <ChevronUp aria-hidden=\"true\" className={className} />\n ) : (\n <ChevronDown aria-hidden=\"true\" className={className} />\n );\n}\n","export type TextareaVariant = 'default' | 'filled' | 'ghost';\n\nexport type TextareaSize = 'sm' | 'md' | 'lg';\n\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\n\nexport const textareaVariantClass: Record<TextareaVariant, string> = {\n default: 'border border-input bg-background hover:border-ring',\n filled: 'border border-transparent bg-muted hover:bg-muted/80',\n ghost: 'border border-transparent bg-transparent hover:bg-accent',\n};\n\nexport const textareaSizeClass: Record<TextareaSize, string> = {\n sm: 'rounded-md px-2.5 py-1.5 text-sm',\n md: 'rounded-md px-3 py-2 text-sm',\n lg: 'rounded-md px-4 py-2.5 text-base',\n};\n\nexport const textareaResizeClass: Record<TextareaResize, string> = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n};\n\nexport const textareaBaseClass =\n 'group/textarea relative flex w-full text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:ring-2 focus-within:ring-ring/40 focus-within:ring-offset-1 focus-within:ring-offset-background aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[textarea:disabled]:pointer-events-none has-[textarea:disabled]:opacity-50';\n","import { forwardRef, type ReactNode, type TextareaHTMLAttributes, useId } from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type TextareaResize,\n type TextareaSize,\n type TextareaVariant,\n textareaBaseClass,\n textareaResizeClass,\n textareaSizeClass,\n textareaVariantClass,\n} from './textareaVariants';\n\nexport interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n variant?: TextareaVariant;\n textareaSize?: TextareaSize;\n /** Controls the native CSS `resize` behaviour. Defaults to `'vertical'`. */\n resize?: TextareaResize;\n /** Optional label rendered above the field. */\n label?: ReactNode;\n /** Helper text rendered under the field when not in an error state. */\n helperText?: ReactNode;\n /** Error message — renders in destructive style and sets aria-invalid. */\n error?: ReactNode;\n /** Stretch the wrapper to fill the parent's inline width. Defaults to `true`. */\n fullWidth?: boolean;\n /** Class applied to the outer wrapper that frames the textarea. */\n wrapperClassName?: string;\n /** Class applied to the field container (`<label>` block). */\n containerClassName?: string;\n}\n\n/**\n * Multi-line text input with the same label/helper/error/aria contract as `<Input>`.\n * Works standalone OR wrapped inside `<Field>`.\n *\n * @example Standalone\n * ```tsx\n * <Textarea label=\"Bio\" helperText=\"Up to 280 characters.\" rows={4} />\n * ```\n *\n * @example With error + custom resize\n * ```tsx\n * <Textarea\n * label=\"Notes\"\n * error={errors.notes?.message}\n * resize=\"vertical\"\n * />\n * ```\n *\n * @example Inside a Field (RHF + Zod)\n * ```tsx\n * <Field name=\"bio\" label=\"Bio\">\n * <Textarea rows={4} />\n * </Field>\n * ```\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n {\n variant = 'default',\n textareaSize = 'md',\n resize = 'vertical',\n label,\n helperText,\n error,\n fullWidth = true,\n rows = 4,\n id,\n className,\n wrapperClassName,\n containerClassName,\n 'aria-invalid': ariaInvalidProp,\n 'aria-describedby': ariaDescribedByProp,\n disabled,\n ...props\n },\n ref\n) {\n const generatedId = useId();\n const textareaId = id ?? generatedId;\n const helperId = `${textareaId}-helper`;\n const errorId = `${textareaId}-error`;\n\n const hasError = error !== undefined && error !== null && error !== false;\n const ariaInvalid = ariaInvalidProp ?? (hasError ? true : undefined);\n\n const describedByIds = [\n ariaDescribedByProp,\n hasError ? errorId : null,\n !hasError && helperText ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n const ariaDescribedBy = describedByIds.length > 0 ? describedByIds : undefined;\n\n return (\n <div className={cn('flex flex-col gap-1.5', fullWidth && 'w-full', containerClassName)}>\n {label !== undefined && label !== null && (\n <label htmlFor={textareaId} className=\"text-sm font-medium text-foreground select-none\">\n {label}\n </label>\n )}\n\n <div\n data-slot=\"textarea-wrapper\"\n className={cn(\n textareaBaseClass,\n textareaVariantClass[variant],\n textareaSizeClass[textareaSize],\n wrapperClassName\n )}\n aria-invalid={ariaInvalid}\n data-disabled={disabled ? 'true' : undefined}\n >\n <textarea\n ref={ref}\n id={textareaId}\n rows={rows}\n disabled={disabled}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n className={cn(\n 'w-full min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed',\n textareaResizeClass[resize],\n className\n )}\n {...props}\n />\n </div>\n\n {hasError ? (\n <p id={errorId} className=\"text-xs text-destructive\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-muted-foreground\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n"]}