@dimaan/ui 0.0.9 → 0.0.11

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/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"]}
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/badge/badgeVariants.ts","../src/components/badge/Badge.tsx","../src/components/checkbox/Checkbox.tsx","../src/components/dropdown-menu/dropdownMenuVariants.ts","../src/components/dropdown-menu/DropdownMenu.tsx","../src/components/empty-state/emptyStateVariants.ts","../src/components/empty-state/EmptyState.tsx","../src/components/field/Field.tsx","../src/components/input/inputVariants.ts","../src/components/input/Input.tsx","../src/components/language-switcher/LanguageSwitcher.tsx","../src/components/page-header/pageHeaderVariants.ts","../src/components/page-header/PageHeader.tsx","../src/components/select/selectVariants.ts","../src/components/select/Select.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/list-page/ListPage.tsx","../src/components/radio-group/radioGroupVariants.ts","../src/components/radio-group/RadioGroup.tsx","../src/components/switch/switchVariants.ts","../src/components/switch/Switch.tsx","../src/components/textarea/textareaVariants.ts","../src/components/textarea/Textarea.tsx"],"names":["useState","jsx","Button","forwardRef","jsxs","useEffect","Fragment","useCallback","Badge","sizeClass","Checkbox","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuLabel","DropdownMenuShortcut","EmptyState","children","layout","useId","isValidElement","cloneElement","Input","PageHeader","Select","ChevronDown","SelectItem","Check","ChevronLeft","useMemo","ChevronUp","RadioGroup","RadioGroupItem","Switch","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","export type BadgeVariant =\n | 'default'\n | 'primary'\n | 'success'\n | 'warning'\n | 'destructive'\n | 'outline';\n\nexport type BadgeSize = 'sm' | 'md';\n\nexport const badgeVariantClass: Record<BadgeVariant, string> = {\n default: 'bg-muted text-foreground border-transparent',\n primary: 'bg-primary text-primary-foreground border-transparent',\n success: 'bg-success text-success-foreground border-transparent',\n warning: 'bg-warning text-warning-foreground border-transparent',\n destructive: 'bg-destructive text-destructive-foreground border-transparent',\n outline: 'border-border bg-transparent text-foreground',\n};\n\nexport const badgeSizeClass: Record<BadgeSize, string> = {\n sm: 'h-5 gap-1 px-2 text-[11px]',\n md: 'h-6 gap-1.5 px-2.5 text-xs',\n};\n\n/** The dot-indicator size for each badge size. */\nexport const badgeDotSizeClass: Record<BadgeSize, string> = {\n sm: 'size-1.5',\n md: 'size-2',\n};\n\nexport const badgeBaseClass =\n 'inline-flex shrink-0 items-center rounded-full border font-medium leading-none whitespace-nowrap select-none transition-colors';\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type BadgeSize,\n type BadgeVariant,\n badgeBaseClass,\n badgeDotSizeClass,\n badgeSizeClass,\n badgeVariantClass,\n} from './badgeVariants';\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n /** Render a small dot before the label (useful for online/status indicators). */\n dot?: boolean;\n}\n\n/**\n * Inline status pill. Most common use: status column in a table (Active /\n * Pending / Archived), category labels, or counts in nav items.\n *\n * @example Status pill in a table cell\n * ```tsx\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"warning\">Pending</Badge>\n * <Badge variant=\"default\">Archived</Badge>\n * ```\n *\n * @example With status dot\n * ```tsx\n * <Badge variant=\"success\" dot>Online</Badge>\n * ```\n *\n * @example Outline (border-only, no fill)\n * ```tsx\n * <Badge variant=\"outline\">Beta</Badge>\n * ```\n */\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { variant = 'default', size = 'md', dot = false, className, children, ...props },\n ref\n) {\n return (\n <span\n ref={ref}\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeBaseClass, badgeVariantClass[variant], badgeSizeClass[size], className)}\n {...props}\n >\n {dot ? (\n <span\n aria-hidden=\"true\"\n className={cn('inline-block rounded-full bg-current opacity-80', badgeDotSizeClass[size])}\n />\n ) : null}\n {children}\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","export type DropdownMenuItemVariant = 'default' | 'destructive';\n\nexport const dropdownMenuContentClass =\n 'z-50 min-w-32 overflow-hidden rounded-md border border-border bg-popover p-1 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 dropdownMenuItemBaseClass =\n 'relative flex w-full cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0';\n\nexport const dropdownMenuItemVariantClass: Record<DropdownMenuItemVariant, string> = {\n default: 'text-foreground data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground',\n destructive:\n 'text-destructive data-[highlighted]:bg-destructive data-[highlighted]:text-destructive-foreground',\n};\n\n/** Indent items without an icon so they align with items that have one. */\nexport const dropdownMenuItemInsetClass = 'ps-8';\n\nexport const dropdownMenuSeparatorClass = '-mx-1 my-1 h-px bg-border';\n\nexport const dropdownMenuLabelClass =\n 'px-2 py-1.5 text-xs font-semibold text-muted-foreground select-none';\n\nexport const dropdownMenuShortcutClass = 'ms-auto text-xs tracking-widest text-muted-foreground';\n","import * as RadixDropdown from '@radix-ui/react-dropdown-menu';\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type DropdownMenuItemVariant,\n dropdownMenuContentClass,\n dropdownMenuItemBaseClass,\n dropdownMenuItemInsetClass,\n dropdownMenuItemVariantClass,\n dropdownMenuLabelClass,\n dropdownMenuSeparatorClass,\n dropdownMenuShortcutClass,\n} from './dropdownMenuVariants';\n\n/**\n * Compound dropdown menu built on `@radix-ui/react-dropdown-menu`. Use for\n * row actions (⋯ menu in tables), header overflow menus, user avatar menus.\n *\n * @example Row actions in a table\n * ```tsx\n * <DropdownMenu>\n * <DropdownMenuTrigger asChild>\n * <Button variant=\"ghost\" size=\"icon\" aria-label=\"More actions\">\n * <MoreHorizontal />\n * </Button>\n * </DropdownMenuTrigger>\n * <DropdownMenuContent align=\"end\">\n * <DropdownMenuItem onSelect={() => edit(row)}>\n * <Pencil />\n * Edit\n * </DropdownMenuItem>\n * <DropdownMenuItem onSelect={() => archive(row)}>\n * <Archive />\n * Archive\n * </DropdownMenuItem>\n * <DropdownMenuSeparator />\n * <DropdownMenuItem variant=\"destructive\" onSelect={() => del(row)}>\n * <Trash2 />\n * Delete\n * </DropdownMenuItem>\n * </DropdownMenuContent>\n * </DropdownMenu>\n * ```\n *\n * @example With label, group, and keyboard shortcut\n * ```tsx\n * <DropdownMenu>\n * <DropdownMenuTrigger asChild>\n * <Button variant=\"outline\">Options</Button>\n * </DropdownMenuTrigger>\n * <DropdownMenuContent>\n * <DropdownMenuLabel>My account</DropdownMenuLabel>\n * <DropdownMenuItem>\n * Profile\n * <DropdownMenuShortcut>⌘P</DropdownMenuShortcut>\n * </DropdownMenuItem>\n * <DropdownMenuItem>\n * Settings\n * <DropdownMenuShortcut>⌘,</DropdownMenuShortcut>\n * </DropdownMenuItem>\n * </DropdownMenuContent>\n * </DropdownMenu>\n * ```\n */\nexport const DropdownMenu = RadixDropdown.Root;\n\nexport const DropdownMenuTrigger = RadixDropdown.Trigger;\n\nexport const DropdownMenuGroup = RadixDropdown.Group;\n\nexport const DropdownMenuPortal = RadixDropdown.Portal;\n\nexport interface DropdownMenuContentProps\n extends ComponentPropsWithoutRef<typeof RadixDropdown.Content> {}\n\nexport const DropdownMenuContent = forwardRef<\n React.ComponentRef<typeof RadixDropdown.Content>,\n DropdownMenuContentProps\n>(function DropdownMenuContent({ className, sideOffset = 4, ...props }, ref) {\n return (\n <RadixDropdown.Portal>\n <RadixDropdown.Content\n ref={ref}\n sideOffset={sideOffset}\n data-slot=\"dropdown-menu-content\"\n className={cn(dropdownMenuContentClass, className)}\n {...props}\n />\n </RadixDropdown.Portal>\n );\n});\n\nexport interface DropdownMenuItemProps extends ComponentPropsWithoutRef<typeof RadixDropdown.Item> {\n variant?: DropdownMenuItemVariant;\n /** Indent items without a leading icon so they align with iconed siblings. */\n inset?: boolean;\n}\n\nexport const DropdownMenuItem = forwardRef<\n React.ComponentRef<typeof RadixDropdown.Item>,\n DropdownMenuItemProps\n>(function DropdownMenuItem({ className, variant = 'default', inset = false, ...props }, ref) {\n return (\n <RadixDropdown.Item\n ref={ref}\n data-slot=\"dropdown-menu-item\"\n data-variant={variant}\n className={cn(\n dropdownMenuItemBaseClass,\n dropdownMenuItemVariantClass[variant],\n inset && dropdownMenuItemInsetClass,\n className\n )}\n {...props}\n />\n );\n});\n\nexport interface DropdownMenuSeparatorProps\n extends ComponentPropsWithoutRef<typeof RadixDropdown.Separator> {}\n\nexport const DropdownMenuSeparator = forwardRef<\n React.ComponentRef<typeof RadixDropdown.Separator>,\n DropdownMenuSeparatorProps\n>(function DropdownMenuSeparator({ className, ...props }, ref) {\n return (\n <RadixDropdown.Separator\n ref={ref}\n data-slot=\"dropdown-menu-separator\"\n className={cn(dropdownMenuSeparatorClass, className)}\n {...props}\n />\n );\n});\n\nexport interface DropdownMenuLabelProps\n extends ComponentPropsWithoutRef<typeof RadixDropdown.Label> {\n /** Indent to align with iconed items. */\n inset?: boolean;\n}\n\nexport const DropdownMenuLabel = forwardRef<\n React.ComponentRef<typeof RadixDropdown.Label>,\n DropdownMenuLabelProps\n>(function DropdownMenuLabel({ className, inset = false, ...props }, ref) {\n return (\n <RadixDropdown.Label\n ref={ref}\n data-slot=\"dropdown-menu-label\"\n className={cn(dropdownMenuLabelClass, inset && dropdownMenuItemInsetClass, className)}\n {...props}\n />\n );\n});\n\n/**\n * Visual hint for a keyboard shortcut, rendered at the trailing edge of an\n * item. Pure presentation — does **not** register a keyboard handler.\n */\nexport interface DropdownMenuShortcutProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n}\n\nexport const DropdownMenuShortcut = forwardRef<HTMLSpanElement, DropdownMenuShortcutProps>(\n function DropdownMenuShortcut({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(dropdownMenuShortcutClass, className)}\n {...props}\n />\n );\n }\n);\n","export type EmptyStateSize = 'sm' | 'md' | 'lg';\n\nexport const emptyStateContainerSizeClass: Record<EmptyStateSize, string> = {\n sm: 'py-8 gap-2',\n md: 'py-14 gap-3',\n lg: 'py-20 gap-4',\n};\n\nexport const emptyStateIconWrapperSizeClass: Record<EmptyStateSize, string> = {\n sm: 'size-10 [&_svg]:size-5',\n md: 'size-14 [&_svg]:size-7',\n lg: 'size-16 [&_svg]:size-8',\n};\n\nexport const emptyStateTitleSizeClass: Record<EmptyStateSize, string> = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n};\n\nexport const emptyStateDescriptionSizeClass: Record<EmptyStateSize, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-sm',\n};\n\nexport const emptyStateActionsSpacingClass: Record<EmptyStateSize, string> = {\n sm: 'mt-2',\n md: 'mt-4',\n lg: 'mt-6',\n};\n\nexport const emptyStateBaseClass = 'flex flex-col items-center justify-center text-center px-4';\n\nexport const emptyStateIconWrapperBaseClass =\n 'inline-flex items-center justify-center rounded-full bg-muted text-muted-foreground';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type EmptyStateSize,\n emptyStateActionsSpacingClass,\n emptyStateBaseClass,\n emptyStateContainerSizeClass,\n emptyStateDescriptionSizeClass,\n emptyStateIconWrapperBaseClass,\n emptyStateIconWrapperSizeClass,\n emptyStateTitleSizeClass,\n} from './emptyStateVariants';\n\nexport interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Optional icon rendered in a circular muted background. Sized via `size` prop. */\n icon?: ReactNode;\n /** Required title — what's missing or what state we're in. */\n title: ReactNode;\n /** Secondary text — explain why the state is empty, suggest next action. */\n description?: ReactNode;\n /** Slot for primary (and optional secondary) action buttons. Rendered below description. */\n action?: ReactNode;\n /** Visual size — `sm` for inline empties (e.g. inside a popover), `md` (default) for table cells, `lg` for full-page empties. */\n size?: EmptyStateSize;\n}\n\n/**\n * Inline empty-state placeholder. Use when a list, table, or section has no\n * data to show — either because the user hasn't created anything yet, or\n * because filters/search returned zero results.\n *\n * The most common dashboard pattern: render inside a table's `tbody` colspan\n * cell, or as a sibling to a list when the list is empty.\n *\n * @example No-results in a filtered table\n * ```tsx\n * <EmptyState\n * icon={<SearchX />}\n * title=\"No users match your filters\"\n * description=\"Try clearing the search or changing the status filter.\"\n * action={<Button variant=\"outline\" onClick={resetFilters}>Reset filters</Button>}\n * />\n * ```\n *\n * @example First-run empty (encourage creation)\n * ```tsx\n * <EmptyState\n * size=\"lg\"\n * icon={<Users />}\n * title=\"No users yet\"\n * description=\"Add your first team member to get started.\"\n * action={<Button onClick={openCreate}>Add user</Button>}\n * />\n * ```\n *\n * @example Compact (inline)\n * ```tsx\n * <EmptyState size=\"sm\" title=\"No notifications\" />\n * ```\n */\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\n { icon, title, description, action, size = 'md', className, ...props },\n ref\n) {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n data-slot=\"empty-state\"\n className={cn(emptyStateBaseClass, emptyStateContainerSizeClass[size], className)}\n {...props}\n >\n {icon ? (\n <span\n aria-hidden=\"true\"\n data-slot=\"empty-state-icon\"\n className={cn(emptyStateIconWrapperBaseClass, emptyStateIconWrapperSizeClass[size])}\n >\n {icon}\n </span>\n ) : null}\n\n <p\n data-slot=\"empty-state-title\"\n className={cn('font-semibold text-foreground', emptyStateTitleSizeClass[size])}\n >\n {title}\n </p>\n\n {description ? (\n <p\n data-slot=\"empty-state-description\"\n className={cn('max-w-sm text-muted-foreground', emptyStateDescriptionSizeClass[size])}\n >\n {description}\n </p>\n ) : null}\n\n {action ? (\n <div\n data-slot=\"empty-state-actions\"\n className={cn(\n 'flex flex-wrap items-center justify-center gap-2',\n emptyStateActionsSpacingClass[size]\n )}\n >\n {action}\n </div>\n ) : null}\n </div>\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 /** 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 /** Class applied to the outer wrapper that holds the icons + input. */\n wrapperClassName?: string;\n}\n\n/**\n * Bare text input — renders the wrapper + native `<input>` + optional leading /\n * trailing icons. **No label/helperText/error props by design** (per ADR-007:\n * Field owns all form layout). Wrap in `<Field label=\"…\">` for label, helper,\n * error rendering and full a11y wiring.\n *\n * @example Inside a Field (RHF + Zod)\n * ```tsx\n * <Field name=\"email\" label=\"Email\" description=\"…\" required>\n * <Input type=\"email\" />\n * </Field>\n * ```\n *\n * @example With icons\n * ```tsx\n * <Field label=\"Search\">\n * <Input\n * leadingIcon={<Search />}\n * trailingIcon={<X onClick={clear} />}\n * placeholder=\"Type to search…\"\n * />\n * </Field>\n * ```\n *\n * @example Bare in a filter bar (no Field)\n * ```tsx\n * <Input\n * value={search}\n * onChange={(e) => setSearch(e.target.value)}\n * placeholder=\"Search…\"\n * aria-label=\"Search products\"\n * />\n * ```\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n variant = 'default',\n inputSize = 'md',\n leadingIcon,\n trailingIcon,\n type = 'text',\n id,\n className,\n wrapperClassName,\n 'aria-invalid': ariaInvalid,\n 'aria-describedby': ariaDescribedBy,\n disabled,\n ...props\n },\n ref\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\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});\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 const pageHeaderBaseClass = 'flex w-full flex-col gap-3';\n\n/** Adds a bottom border separator below the header. */\nexport const pageHeaderBorderedClass = 'border-b border-border pb-4';\n\nexport const pageHeaderTitleRowClass = 'flex flex-wrap items-start justify-between gap-3 sm:gap-4';\n\nexport const pageHeaderTitleBlockClass = 'min-w-0 flex-1 space-y-1';\n\nexport const pageHeaderTitleClass = 'text-2xl font-semibold tracking-tight text-foreground';\n\nexport const pageHeaderDescriptionClass = 'text-sm text-muted-foreground';\n\nexport const pageHeaderActionsClass = 'flex shrink-0 flex-wrap items-center gap-2';\n\nexport const pageHeaderBackClass =\n 'inline-flex items-center gap-1.5 self-start text-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-md';\n\nexport const pageHeaderBackIconClass = 'size-4 shrink-0 rtl:rotate-180';\n\nexport const pageHeaderBreadcrumbsClass = 'text-xs text-muted-foreground';\n","import { ArrowLeft } from 'lucide-react';\nimport {\n createElement,\n forwardRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n pageHeaderActionsClass,\n pageHeaderBackClass,\n pageHeaderBackIconClass,\n pageHeaderBaseClass,\n pageHeaderBorderedClass,\n pageHeaderBreadcrumbsClass,\n pageHeaderDescriptionClass,\n pageHeaderTitleBlockClass,\n pageHeaderTitleClass,\n pageHeaderTitleRowClass,\n} from './pageHeaderVariants';\n\nexport type PageHeaderHeadingLevel = 'h1' | 'h2' | 'h3' | 'h4';\n\n/** Props passed to the routing-library `render` slot of the back button. */\nexport interface PageHeaderBackRenderProps {\n href?: string;\n className?: string;\n children: ReactNode;\n onClick?: () => void;\n}\n\nexport interface PageHeaderBackProps {\n /** Visible label next to the arrow. Defaults to `\"Back\"`. */\n label?: ReactNode;\n /** Target href — renders an `<a>`. */\n href?: string;\n /** Click handler — renders a `<button>` (or wraps the `render` element). */\n onClick?: () => void;\n /** Routing-library render prop (e.g. wrap React Router `<Link>`). Wins over `href`. */\n render?: (props: PageHeaderBackRenderProps) => ReactElement;\n}\n\nexport interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n /** Page title (required). */\n title: ReactNode;\n /** Optional secondary text under the title. */\n description?: ReactNode;\n /** Slot above the title for breadcrumbs (e.g. `<Breadcrumbs items={…} />` or your own JSX). */\n breadcrumbs?: ReactNode;\n /** Optional back button rendered above the title row. */\n back?: PageHeaderBackProps;\n /** Slot on the trailing side of the title row — buttons, dropdowns, etc. */\n actions?: ReactNode;\n /** Heading level for the title element. Defaults to `'h1'`. */\n as?: PageHeaderHeadingLevel;\n /** Add a bottom border separator. Default: `false`. */\n bordered?: boolean;\n}\n\n/**\n * Top-of-page header — title, optional description, breadcrumbs, back button,\n * and actions slot. The first thing a user sees on any list / detail / form\n * page in a dashboard.\n *\n * Designed to drop directly into `<DashboardContent>` (or any padded page\n * container). Has no outer padding of its own — the surrounding layout owns\n * spacing.\n *\n * @example List page header with primary action\n * ```tsx\n * <PageHeader\n * title=\"Users\"\n * description=\"Manage your team members and their roles.\"\n * actions={<Button onClick={openCreate}>Add user</Button>}\n * bordered\n * />\n * ```\n *\n * @example Detail page header with back button\n * ```tsx\n * <PageHeader\n * title={user.name}\n * description={user.email}\n * back={{\n * label: 'Users',\n * render: (props) => <Link to=\"/users\" {...props} />,\n * }}\n * actions={\n * <>\n * <Button variant=\"outline\">Edit</Button>\n * <Button variant=\"destructive\">Delete</Button>\n * </>\n * }\n * />\n * ```\n *\n * @example With breadcrumbs slot\n * ```tsx\n * <PageHeader\n * breadcrumbs={\n * <nav aria-label=\"Breadcrumb\">\n * <ol className=\"flex items-center gap-1\">\n * <li><Link to=\"/\">Home</Link></li>\n * <li>/</li>\n * <li>Users</li>\n * </ol>\n * </nav>\n * }\n * title=\"Users\"\n * />\n * ```\n */\nexport const PageHeader = forwardRef<HTMLElement, PageHeaderProps>(function PageHeader(\n {\n title,\n description,\n breadcrumbs,\n back,\n actions,\n as = 'h1',\n bordered = false,\n className,\n ...props\n },\n ref\n) {\n return (\n <header\n ref={ref}\n data-slot=\"page-header\"\n className={cn(pageHeaderBaseClass, bordered && pageHeaderBorderedClass, className)}\n {...props}\n >\n {breadcrumbs ? (\n <div data-slot=\"page-header-breadcrumbs\" className={pageHeaderBreadcrumbsClass}>\n {breadcrumbs}\n </div>\n ) : null}\n\n {back ? <PageHeaderBack {...back} /> : null}\n\n <div data-slot=\"page-header-row\" className={pageHeaderTitleRowClass}>\n <div className={pageHeaderTitleBlockClass}>\n {createElement(\n as,\n { 'data-slot': 'page-header-title', className: pageHeaderTitleClass },\n title\n )}\n {description ? (\n <p data-slot=\"page-header-description\" className={pageHeaderDescriptionClass}>\n {description}\n </p>\n ) : null}\n </div>\n\n {actions ? (\n <div data-slot=\"page-header-actions\" className={pageHeaderActionsClass}>\n {actions}\n </div>\n ) : null}\n </div>\n </header>\n );\n});\n\nfunction PageHeaderBack({ label = 'Back', href, onClick, render }: PageHeaderBackProps) {\n const inner = (\n <>\n <ArrowLeft className={pageHeaderBackIconClass} aria-hidden=\"true\" />\n <span>{label}</span>\n </>\n );\n\n if (render) {\n return render({\n href,\n onClick,\n className: pageHeaderBackClass,\n children: inner,\n });\n }\n\n if (href) {\n return (\n <a href={href} onClick={onClick} className={pageHeaderBackClass}>\n {inner}\n </a>\n );\n }\n\n return (\n <button type=\"button\" onClick={onClick} className={pageHeaderBackClass}>\n {inner}\n </button>\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","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","import { RefreshCw, Search } from 'lucide-react';\nimport { type ReactNode, useMemo, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../button';\nimport { EmptyState } from '../empty-state';\nimport { Input } from '../input';\nimport { PageHeader } from '../page-header';\nimport { Select, type SelectOption } from '../select';\nimport { type Column, Table } from '../table';\n\n/**\n * One filter dropdown definition for `<ListPage>`. ListPage manages each\n * filter's state internally — you provide options + accessor.\n */\nexport interface ListPageFilter<T> {\n /** Unique key for state tracking. */\n key: string;\n /** Aria-label on the Select trigger. */\n ariaLabel?: string;\n /** Returns the row value to match against the filter selection. */\n accessor: (row: T) => string;\n /** Options to choose from. The first option's value is treated as \"no filter / show all\". */\n options: SelectOption[];\n /** Override the \"no filter\" default. Defaults to the first option's `value`. */\n defaultValue?: string;\n /** Width of the Select. Defaults to `'default'` (~11rem). */\n width?: 'narrow' | 'default' | 'wide';\n}\n\nexport interface ListPageEmptyState {\n icon?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n /** Override the default \"Reset filters\" action button. Pass `null` to hide entirely. */\n action?: ReactNode | null;\n}\n\nexport interface ListPageLabels {\n /** Default search input placeholder. */\n searchPlaceholder?: string;\n /** Default search aria-label (falls back to placeholder). */\n searchAriaLabel?: string;\n /** Default \"Reset filters\" button label. */\n reset?: string;\n /** Default empty-state title (when filters return zero). */\n emptyTitle?: string;\n /** Default empty-state description. */\n emptyDescription?: string;\n}\n\nexport interface ListPageProps<T> {\n // Header\n title: ReactNode;\n description?: ReactNode;\n /** Page-header bordered separator. Defaults to `true` for list pages. */\n bordered?: boolean;\n /** Header action slot — primary \"Add\" button, etc. */\n actions?: ReactNode;\n\n // Data\n data: T[];\n columns: Column<T>[];\n getRowId: (row: T) => string;\n\n // Search\n /** Keys on `T` to search. Search input only renders when this is provided. */\n searchKeys?: Array<keyof T>;\n\n // Filters\n filters?: ListPageFilter<T>[];\n\n // Selection\n enableRowSelection?: boolean;\n bulkActions?: (selected: T[]) => ReactNode;\n\n // Empty state\n emptyState?: ListPageEmptyState;\n\n // Labels (for i18n)\n labels?: ListPageLabels;\n\n // Layout\n className?: string;\n}\n\nconst DEFAULT_LABELS: Required<ListPageLabels> = {\n searchPlaceholder: 'Search…',\n searchAriaLabel: 'Search',\n reset: 'Reset filters',\n emptyTitle: 'No results',\n emptyDescription: 'Try clearing the search or adjusting the filters.',\n};\n\nconst FILTER_WIDTH_CLASS: Record<NonNullable<ListPageFilter<unknown>['width']>, string> = {\n narrow: 'w-32',\n default: 'w-44',\n wide: 'w-56',\n};\n\n/**\n * Declarative list-page template — composes `PageHeader + search input +\n * filter selects + Table + EmptyState` into a single configurable component.\n *\n * **Owns state internally** for search and filter selections — you pass raw\n * `data` and ListPage filters it for you. For server-side data fetching or URL\n * sync, drop down to the underlying primitives directly (see the\n * `RecipeListPage` playground page for the manual composition pattern).\n *\n * @example Basic — Users list\n * ```tsx\n * <ListPage\n * title=\"Users\"\n * description=\"Manage your team members.\"\n * actions={<Button onClick={openCreate}>Add user</Button>}\n * data={users}\n * columns={USER_COLUMNS}\n * getRowId={(u) => u.id}\n * searchKeys={['name', 'email']}\n * filters={[\n * {\n * key: 'status',\n * ariaLabel: 'Status',\n * accessor: (u) => u.status,\n * options: [\n * { value: 'all', label: 'All statuses' },\n * { value: 'active', label: 'Active' },\n * { value: 'invited', label: 'Invited' },\n * ],\n * },\n * ]}\n * enableRowSelection\n * bulkActions={(rows) => <Button variant=\"destructive\">Delete ({rows.length})</Button>}\n * />\n * ```\n *\n * @example With localized labels\n * ```tsx\n * <ListPage\n * {...props}\n * labels={{\n * searchPlaceholder: 'ابحث…',\n * reset: 'إعادة الفلاتر',\n * emptyTitle: 'لا توجد نتائج',\n * emptyDescription: 'حاول مسح البحث أو تغيير الفلاتر.',\n * }}\n * />\n * ```\n */\nexport function ListPage<T>({\n title,\n description,\n bordered = true,\n actions,\n data,\n columns,\n getRowId,\n searchKeys,\n filters,\n enableRowSelection,\n bulkActions,\n emptyState,\n labels: labelsProp,\n className,\n}: ListPageProps<T>) {\n const labels = { ...DEFAULT_LABELS, ...labelsProp };\n\n const initialFilterValues = useMemo(() => {\n const init: Record<string, string> = {};\n for (const f of filters ?? []) {\n init[f.key] = f.defaultValue ?? f.options[0]?.value ?? '';\n }\n return init;\n }, [filters]);\n\n const [search, setSearch] = useState('');\n const [filterValues, setFilterValues] = useState<Record<string, string>>(initialFilterValues);\n\n const setFilter = (key: string, value: string) => {\n setFilterValues((prev) => ({ ...prev, [key]: value }));\n };\n\n const reset = () => {\n setSearch('');\n setFilterValues(initialFilterValues);\n };\n\n const hasActiveFilters = useMemo(() => {\n if (search.trim() !== '') return true;\n for (const f of filters ?? []) {\n const current = filterValues[f.key];\n const def = f.defaultValue ?? f.options[0]?.value ?? '';\n if (current !== def) return true;\n }\n return false;\n }, [search, filters, filterValues]);\n\n const filtered = useMemo(() => {\n return data.filter((row) => {\n // Search match\n if (search.trim() && searchKeys && searchKeys.length > 0) {\n const q = search.trim().toLowerCase();\n const matches = searchKeys.some((key) => {\n const val = row[key];\n return val != null && String(val).toLowerCase().includes(q);\n });\n if (!matches) return false;\n }\n\n // Filter matches\n for (const f of filters ?? []) {\n const value = filterValues[f.key];\n const def = f.defaultValue ?? f.options[0]?.value ?? '';\n if (value !== undefined && value !== def) {\n if (f.accessor(row) !== value) return false;\n }\n }\n\n return true;\n });\n }, [data, search, searchKeys, filters, filterValues]);\n\n const showFilterBar = Boolean(searchKeys?.length) || Boolean(filters?.length);\n\n return (\n <div data-slot=\"list-page\" className={cn('space-y-6', className)}>\n <PageHeader title={title} description={description} bordered={bordered} actions={actions} />\n\n {showFilterBar ? (\n <div data-slot=\"list-page-filter-bar\" className=\"flex flex-wrap items-center gap-3\">\n {searchKeys?.length ? (\n <Input\n type=\"search\"\n placeholder={labels.searchPlaceholder}\n aria-label={labels.searchAriaLabel || labels.searchPlaceholder}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n leadingIcon={<Search />}\n wrapperClassName=\"sm:max-w-xs\"\n />\n ) : null}\n\n {filters?.map((f) => (\n <Select\n key={f.key}\n aria-label={f.ariaLabel}\n value={filterValues[f.key]}\n onValueChange={(v) => setFilter(f.key, v)}\n options={f.options}\n className={FILTER_WIDTH_CLASS[f.width ?? 'default']}\n />\n ))}\n\n {hasActiveFilters ? (\n <Button variant=\"ghost\" onClick={reset}>\n <RefreshCw />\n {labels.reset}\n </Button>\n ) : null}\n </div>\n ) : null}\n\n {filtered.length > 0 ? (\n <Table<T>\n aria-label={typeof title === 'string' ? title : undefined}\n data={filtered}\n columns={columns}\n getRowId={getRowId}\n enableRowSelection={enableRowSelection}\n bulkActions={bulkActions}\n />\n ) : (\n <div data-slot=\"list-page-empty\" className=\"rounded-md border border-border\">\n <EmptyState\n icon={emptyState?.icon}\n title={emptyState?.title ?? labels.emptyTitle}\n description={emptyState?.description ?? labels.emptyDescription}\n action={\n emptyState?.action !== undefined ? (\n emptyState.action\n ) : hasActiveFilters ? (\n <Button variant=\"outline\" onClick={reset}>\n {labels.reset}\n </Button>\n ) : null\n }\n />\n </div>\n )}\n </div>\n );\n}\n","export type RadioGroupSize = 'sm' | 'md' | 'lg';\n\n/** Outer circle (radio button itself) — sized + bordered. */\nexport const radioItemSizeClass: Record<RadioGroupSize, string> = {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n};\n\n/** Inner indicator (the filled dot when selected). Centred via flex on the parent. */\nexport const radioIndicatorSizeClass: Record<RadioGroupSize, string> = {\n sm: 'size-1.5',\n md: 'size-2',\n lg: 'size-2.5',\n};\n\n/** Label text size that pairs naturally with each radio size. */\nexport const radioLabelSizeClass: Record<RadioGroupSize, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n};\n\nexport const radioItemBaseClass =\n 'aspect-square shrink-0 rounded-full border border-input bg-background text-primary outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background hover:border-ring disabled:cursor-not-allowed disabled:opacity-50 aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:ring-destructive/40 data-[state=checked]:border-primary';\n\nexport const radioIndicatorBaseClass = 'flex h-full w-full items-center justify-center';\n\nexport const radioIndicatorDotClass = 'rounded-full bg-primary';\n\n/** Each option row: radio + label + optional description. */\nexport const radioOptionRowClass =\n 'flex cursor-pointer items-start gap-2 has-[button:disabled]:cursor-not-allowed';\n\n/** The group container — vertical stack by default, horizontal row when orientation=\"horizontal\". */\nexport const radioGroupBaseClass = 'flex gap-3';\nexport const radioGroupOrientationClass = {\n vertical: 'flex-col',\n horizontal: 'flex-row flex-wrap',\n} as const;\n","import * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { type ChangeEvent, forwardRef, type ReactNode, type Ref, useCallback, useId } from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n type RadioGroupSize,\n radioGroupBaseClass,\n radioGroupOrientationClass,\n radioIndicatorBaseClass,\n radioIndicatorDotClass,\n radioIndicatorSizeClass,\n radioItemBaseClass,\n radioItemSizeClass,\n radioLabelSizeClass,\n radioOptionRowClass,\n} from './radioGroupVariants';\n\nexport interface RadioGroupOption {\n value: string;\n /** Visible label rendered next to the radio button. */\n label: ReactNode;\n /** Optional secondary text rendered below the label (e.g. plan description). */\n description?: ReactNode;\n disabled?: boolean;\n}\n\nexport type RadioGroupOrientation = 'vertical' | 'horizontal';\n\nexport interface RadioGroupProps {\n /** Visual size of each radio + label. */\n radioSize?: RadioGroupSize;\n /** Layout direction within the group. `'vertical'` (default) stacks options; `'horizontal'` lays them out in a row. */\n orientation?: RadioGroupOrientation;\n\n /** Controlled selected value (Radix-style). */\n value?: string;\n /** Initial selected value for uncontrolled usage. */\n defaultValue?: string;\n /** Radix-style change handler — receives the new value directly. */\n onValueChange?: (value: string) => void;\n /** Synthetic-event handler for `react-hook-form`'s `field.onChange` and other consumers. */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /** Called when focus leaves the group. */\n onBlur?: () => void;\n\n /** Form name (for native form submission). */\n name?: string;\n /** Disables the entire group. */\n disabled?: boolean;\n /** Marks the group as required. */\n required?: boolean;\n /** Override id (otherwise auto-generated via useId). */\n id?: string;\n\n /** Declarative options. When `children` is provided it wins (escape hatch for custom content). */\n options?: RadioGroupOption[];\n\n /** Class on the outer group container. */\n className?: string;\n\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean | 'true' | 'false';\n\n /** Radix children — used for advanced composition (custom RadioGroupItem layouts). */\n children?: ReactNode;\n}\n\n/**\n * Group of mutually-exclusive radio buttons built on `@radix-ui/react-radio-group`.\n * Use for **3–5 options** where Select would be overkill (pricing tier, privacy\n * level, single-choice settings). Bare component — wrap in `<Field label=\"…\">`\n * for the GROUP label, helper, and error rendering.\n *\n * Each option carries its own per-radio `label` (and optional `description`).\n * The Field's outer label names the group; the option labels name each choice.\n *\n * @example Inside a Field (RHF + Zod)\n * ```tsx\n * <Field name=\"plan\" label=\"Subscription plan\" description=\"You can change anytime.\">\n * <RadioGroup\n * options={[\n * { value: 'free', label: 'Free', description: 'Up to 3 projects' },\n * { value: 'pro', label: 'Pro', description: 'Unlimited projects' },\n * { value: 'enterprise', label: 'Enterprise', description: 'Custom limits' },\n * ]}\n * />\n * </Field>\n * ```\n *\n * @example Horizontal row in a settings card\n * ```tsx\n * <Field label=\"Visibility\" orientation=\"horizontal\">\n * <RadioGroup\n * orientation=\"horizontal\"\n * value={visibility}\n * onValueChange={setVisibility}\n * options={[\n * { value: 'public', label: 'Public' },\n * { value: 'private', label: 'Private' },\n * ]}\n * />\n * </Field>\n * ```\n */\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(function RadioGroup(\n {\n radioSize = 'md',\n orientation = 'vertical',\n value,\n defaultValue,\n onValueChange,\n onChange,\n onBlur,\n name,\n disabled,\n required,\n id,\n options,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n children,\n },\n ref\n) {\n const generatedId = useId();\n const groupId = 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<HTMLInputElement>;\n onChange(synthetic);\n }\n },\n [onValueChange, onChange, name]\n );\n\n return (\n <RadixRadioGroup.Root\n ref={ref as Ref<HTMLDivElement>}\n id={groupId}\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleValueChange}\n onBlur={onBlur}\n disabled={disabled}\n required={required}\n name={name}\n orientation={orientation}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n aria-invalid={ariaInvalid}\n data-slot=\"radio-group\"\n className={cn(radioGroupBaseClass, radioGroupOrientationClass[orientation], className)}\n >\n {children ??\n options?.map((opt) => (\n <RadioGroupOptionRow\n key={opt.value}\n option={opt}\n radioSize={radioSize}\n groupId={groupId}\n />\n ))}\n </RadixRadioGroup.Root>\n );\n});\n\ninterface RadioGroupOptionRowProps {\n option: RadioGroupOption;\n radioSize: RadioGroupSize;\n groupId: string;\n}\n\nfunction RadioGroupOptionRow({ option, radioSize, groupId }: RadioGroupOptionRowProps) {\n const itemId = `${groupId}-${option.value}`;\n\n return (\n <label htmlFor={itemId} className={radioOptionRowClass}>\n <RadixRadioGroup.Item\n id={itemId}\n value={option.value}\n disabled={option.disabled}\n data-slot=\"radio-item\"\n className={cn(radioItemBaseClass, radioItemSizeClass[radioSize], 'mt-0.5')}\n >\n <RadixRadioGroup.Indicator className={radioIndicatorBaseClass}>\n <span className={cn(radioIndicatorDotClass, radioIndicatorSizeClass[radioSize])} />\n </RadixRadioGroup.Indicator>\n </RadixRadioGroup.Item>\n\n <span className=\"min-w-0 flex-1 leading-tight\">\n <span className={cn('block font-medium text-foreground', radioLabelSizeClass[radioSize])}>\n {option.label}\n </span>\n {option.description ? (\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">{option.description}</span>\n ) : null}\n </span>\n </label>\n );\n}\n\n/**\n * `<RadioGroupItem>` — re-exported for consumers building custom option layouts\n * (icons, badges, etc.) via the `children` escape hatch.\n *\n * @example\n * ```tsx\n * <RadioGroup value={plan} onValueChange={setPlan}>\n * {plans.map((p) => (\n * <label key={p.value} htmlFor={p.value} className=\"flex items-center gap-2\">\n * <RadioGroupItem id={p.value} value={p.value} />\n * <PlanCard {...p} />\n * </label>\n * ))}\n * </RadioGroup>\n * ```\n */\nexport const RadioGroupItem = forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<typeof RadixRadioGroup.Item> & { radioSize?: RadioGroupSize }\n>(function RadioGroupItem({ className, radioSize = 'md', ...props }, ref) {\n return (\n <RadixRadioGroup.Item\n ref={ref}\n data-slot=\"radio-item\"\n className={cn(radioItemBaseClass, radioItemSizeClass[radioSize], className)}\n {...props}\n >\n <RadixRadioGroup.Indicator className={radioIndicatorBaseClass}>\n <span className={cn(radioIndicatorDotClass, radioIndicatorSizeClass[radioSize])} />\n </RadixRadioGroup.Indicator>\n </RadixRadioGroup.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","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 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 /** Class applied to the outer wrapper that frames the textarea. */\n wrapperClassName?: string;\n}\n\n/**\n * Bare multi-line text input — renders the wrapper + native `<textarea>`. **No\n * label/helperText/error props by design** (per ADR-007: Field owns all form\n * layout). Wrap in `<Field label=\"…\">` for label, helper, error rendering and\n * full a11y wiring.\n *\n * @example Inside a Field (RHF + Zod)\n * ```tsx\n * <Field name=\"bio\" label=\"Bio\" description=\"Up to 280 characters.\">\n * <Textarea rows={4} />\n * </Field>\n * ```\n *\n * @example Custom resize behaviour\n * ```tsx\n * <Field label=\"Notes\">\n * <Textarea resize=\"none\" rows={6} />\n * </Field>\n * ```\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n {\n variant = 'default',\n textareaSize = 'md',\n resize = 'vertical',\n rows = 4,\n id,\n className,\n wrapperClassName,\n 'aria-invalid': ariaInvalid,\n 'aria-describedby': ariaDescribedBy,\n disabled,\n ...props\n },\n ref\n) {\n const generatedId = useId();\n const textareaId = id ?? generatedId;\n\n return (\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});\n"]}