@bizapps/design-system-testing 1.10.1 → 1.12.0

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/main.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/components/ui/Alert/alert.tsx","../src/components/ui/Avatar/avatar.tsx","../src/components/ui/Status/badge.tsx","../src/components/ui/Status/status.tsx","../src/components/ui/Badge/badge.tsx","../src/components/ui/Breadcrumb/breadcrumb.tsx","../src/components/ui/Button/button.tsx","../src/components/ui/MiniCalendar/mini-calendar.tsx","../src/components/ui/Card/card.tsx","../src/components/ui/Carousel/carousel.tsx","../src/components/compounds/Form/form.tsx","../src/components/ui/Input/input.tsx","../src/components/ui/Label/label.tsx","../src/utils/urlSecurity.ts","../src/components/ui/Link/link.tsx","../src/lib/phone.ts","../src/components/ui/Popover/popover.tsx","../src/components/ui/PhoneField/phone-field.tsx","../src/components/ui/PinInput/pin-input.tsx","../src/components/ui/Toggle/toggle.tsx","../src/components/compounds/SegmentedControl/segmented-control.tsx","../src/components/ui/Select/select.tsx","../src/components/ui/Separator/separator.tsx","../src/components/ui/Progress/progress.tsx","../src/components/ui/Skeleton/skeleton.tsx","../src/components/ui/Slider/slider.tsx","../src/components/ui/Switch/switch.tsx","../src/tokens/animation.ts","../src/components/ui/Tabs/tabs.tsx","../src/components/ui/Toast/toast.tsx","../src/components/ui/ToggleGroup/toggle-group.tsx","../src/components/ui/Tooltip/tooltip.tsx","../src/components/ui/Text/text.tsx","../src/components/ui/Dialog/dialog.tsx","../src/components/ui/AlertDialog/alert-dialog.tsx","../src/components/ui/Accordion/accordion.tsx","../src/components/ui/Combobox/combobox.tsx","../src/components/ui/DropdownMenu/dropdown-menu.tsx","../src/components/ui/Dropzone/dropzone.tsx","../src/components/ui/Empty/empty.tsx","../src/components/ui/Item/item.tsx","../src/components/ui/Radio/radio-group.tsx","../src/components/ui/Spinner/spinner.tsx","../src/components/compounds/ColorPicker/button.tsx","../src/components/compounds/ColorPicker/input.tsx","../src/components/compounds/ColorPicker/select.tsx","../src/components/compounds/ColorPicker/color-picker.tsx","../src/components/ui/Calendar/calendar.tsx","../src/components/compounds/DatePicker/date-picker.tsx","../src/components/compounds/NavBar/navbar.tsx","../src/components/compounds/NavBar/navigation-menu.tsx","../src/components/authorization/policy.ts","../src/components/authorization/Can/ability-context.tsx","../src/components/authorization/permissions.generated.ts","../src/components/authorization/permission-catalog.ts","../src/components/authorization/Can/can.tsx","../src/lib/use-media-query.ts","../src/hooks/use-mobile.ts","../src/components/ui/Sheet/sheet.tsx","../src/components/ui/Sidebar/sidebar.tsx","../src/components/compounds/AppShell/app-shell.tsx","../src/components/compounds/TextArea/textarea.tsx","../src/components/compounds/EventCalendar/event-calendar-context.ts","../src/components/compounds/EventCalendar/event-calendar.styles.ts","../src/components/compounds/EventCalendar/hooks/use-event-calendar.ts","../src/components/compounds/EventCalendar/event-calendar.tsx","../src/lib/form.ts","../src/lib/cdn.ts","../src/lib/confetti.ts","../src/components/ui/Table/table.tsx","../src/components/ui/Checkbox/checkbox.tsx","../src/components/compounds/Pagination/pagination.tsx","../src/components/compounds/Table/data-table-context.ts","../src/components/compounds/Table/cell-size-class.ts","../src/components/compounds/Table/data-table-card-view.tsx","../src/components/compounds/Table/utils/filter-utils.ts","../src/components/compounds/Table/data-table-column-filter.tsx","../src/components/compounds/Table/hooks/use-column-filter.ts","../src/components/compounds/Table/data-table-header-cell.tsx","../src/components/compounds/Table/data-table-skeleton.tsx","../src/components/compounds/Table/hooks/use-table-sorting.ts","../src/components/compounds/Table/hooks/use-table-filtering.ts","../src/components/compounds/Table/hooks/use-table-selection.ts","../src/components/compounds/Table/hooks/use-table-global-filter.ts","../src/components/compounds/Table/hooks/use-table-visibility.ts","../src/components/compounds/Table/hooks/use-table-sizing.ts","../src/components/compounds/Table/hooks/use-table-persistence.ts","../src/components/compounds/Table/data-table.tsx","../src/components/compounds/Table/hooks/use-table-data.ts","../src/components/compounds/Table/utils/sorting-transform.ts","../src/components/compounds/Table/utils/filtering-transform.ts","../src/components/compounds/Table/data-table-row-actions.tsx","../src/components/compounds/Table/data-table-footer.tsx","../src/components/compounds/Table/data-table-toolbar.tsx","../src/components/compounds/Table/data-table-search.tsx","../src/components/compounds/BottomNav/bottom-nav.tsx","../src/components/compounds/BottomNav/bottom-nav-tabs.tsx","../src/components/ui/Drawer/drawer.tsx","../src/components/ui/SignaturePad/signature-pad.tsx","../src/components/providers/tcce-provider.tsx"],"names":["twMerge","clsx","cva","jsx","jsxs","X","AvatarPrimitive","Slot","Fragment","badgeVariants","Badge","ChevronRightIcon","MoreHorizontalIcon","LoaderCircle","useState","useRef","useEffect","useCallback","createContext","useContext","addDays","format","ChevronLeftIcon","isSameDay","isToday","useEmblaCarousel","api","ChevronLeft","ChevronRight","LabelPrimitive","ExternalLinkIcon","isValidPhoneNumber","validatePhoneNumberLength","PopoverPrimitive","parsePhoneNumberFromString","countryFlags","useId","AsYouType","useLayoutEffect","parsed","ChevronsUpDownIcon","Command","SearchIcon","CheckIcon","TogglePrimitive","ToggleGroup","motion","SelectPrimitive","ChevronDownIcon","ChevronUpIcon","SeparatorPrimitive","ProgressPrimitive","useMemo","SliderPrimitive","SwitchPrimitive","TabsPrimitive","AnimatePresence","CircleCheckIcon","OctagonXIcon","TriangleAlertIcon","InfoIcon","Loader2Icon","XIcon","ToggleGroupPrimitive","TooltipPrimitive","DialogPrimitive","AlertDialogPrimitive","AccordionPrimitive","DropdownMenuPrimitive","useDropzone","UploadIcon","RadioGroupPrimitive","LoaderIcon","buttonVariants","Button","Input","Select","SelectValue","SelectTrigger","SelectContent","SelectScrollUpButton","SelectScrollDownButton","SelectItem","Color","memo","Slider","hue","alpha","PipetteIcon","getDefaultClassNames","className","DayPicker","CalendarIcon","forwardRef","BellIcon","CircleHelpIcon","NavigationMenuPrimitive","can","cloneElement","isValidElement","SheetPrimitive","open","MenuIcon","House","Plane","Wallet","LayoutDashboardIcon","Temporal","eventsService","createEventsServicePlugin","eventModal","createEventModalPlugin","calendarControls","createCalendarControlsPlugin","createCalendar","viewMonthGrid","viewWeek","viewDay","viewMonthAgenda","ScheduleXCalendar","Pencil","Clock","useForm","zodResolver","confetti","CheckboxPrimitive","MinusIcon","flexRender","FilterOption","Funnel","ArrowUp","ArrowDown","ArrowUpDown","_","table","useReactTable","getCoreRowModel","getSortedRowModel","getFilteredRowModel","Ellipsis","hasActiveFilters","Rows2","Eye","Search","DrawerPrimitive","SignaturePadLib","useImperativeHandle","BrushCleaning"],"mappings":"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AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;A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","file":"main.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { X } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport type { HTMLAttributes, ReactNode } from 'react';\n\nconst alertVariants = cva('relative w-full rounded-lg border border-l-[3px] p-4', {\n variants: {\n variant: {\n default: 'border-border border-l-border bg-card text-card-foreground',\n info: 'border-blue-200 border-l-blue-400 bg-blue-50 text-blue-700',\n success: 'border-emerald-200 border-l-emerald-400 bg-emerald-50 text-emerald-700',\n warning: 'border-amber-200 border-l-amber-400 bg-amber-50 text-amber-700',\n error: 'border-red-200 border-l-red-500 bg-red-50 text-red-700',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\ninterface AlertProps\n extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {\n icon?: ReactNode;\n onDismiss?: () => void;\n}\n\ntype AlertTitleProps = HTMLAttributes<HTMLHeadingElement>;\n\ntype AlertDescriptionProps = HTMLAttributes<HTMLParagraphElement>;\n\nfunction Alert({ className, variant, icon, onDismiss, children, ...props }: AlertProps) {\n return (\n <div\n data-slot='alert'\n data-variant={variant ?? 'default'}\n role='alert'\n className={cn(alertVariants({ variant }), className)}\n {...props}>\n <div className='flex items-start gap-3'>\n {icon && (\n <div data-slot='alert-icon' className='mt-0.5 shrink-0'>\n {icon}\n </div>\n )}\n <div data-slot='alert-content' className='min-w-0 flex-1'>\n {children}\n </div>\n {onDismiss && (\n <button\n type='button'\n aria-label='Dismiss'\n onClick={onDismiss}\n className='focus-visible:ring-ring -mt-1 -mr-1 ml-auto shrink-0 rounded p-1 opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:outline-none'>\n <X className='size-4' />\n </button>\n )}\n </div>\n </div>\n );\n}\n\nfunction AlertTitle({ className, ...props }: AlertTitleProps) {\n return (\n <h5\n data-slot='alert-title'\n className={cn('mb-1 leading-tight font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: AlertDescriptionProps) {\n return (\n <p\n data-slot='alert-description'\n className={cn('text-sm opacity-90', className)}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription, alertVariants };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Avatar as AvatarPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst avatarVariants = cva('group/avatar relative flex shrink-0 overflow-hidden rounded-full', {\n variants: {\n size: {\n sm: 'size-6 text-[10px]',\n md: 'size-8 text-xs',\n lg: 'size-10 text-sm',\n xl: 'size-12 text-base',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\nfunction Avatar({\n className,\n size = 'md',\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Root> & VariantProps<typeof avatarVariants>) {\n return (\n <AvatarPrimitive.Root\n data-slot='avatar'\n data-size={size}\n className={cn(avatarVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot='avatar-image'\n className={cn('aspect-square size-full object-cover', className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot='avatar-fallback'\n className={cn(\n 'bg-primary text-primary-foreground flex size-full items-center justify-center rounded-full font-medium uppercase',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarBadge({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='avatar-badge'\n className={cn(\n 'bg-primary text-primary-foreground ring-background absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=md]/avatar:size-2.5 group-data-[size=md]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n 'group-data-[size=xl]/avatar:size-3.5 group-data-[size=xl]/avatar:[&>svg]:size-2.5',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='avatar-group'\n className={cn(\n 'group/avatar-group *:data-[slot=avatar]:ring-background flex -space-x-2 *:data-[slot=avatar]:ring-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroupCount({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='avatar-group-count'\n className={cn(\n 'bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-xs ring-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n avatarVariants,\n};\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst badgeVariants = cva(\n 'group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-3xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',\n secondary: 'bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80',\n destructive:\n 'bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20',\n outline:\n 'border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground',\n ghost: 'hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction Badge({\n className,\n variant = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'span';\n\n return (\n <Comp\n data-slot='badge'\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\n","import type { ComponentProps, HTMLAttributes } from 'react';\nimport { Badge } from '@/components/ui/Status/badge';\nimport { cn } from '@/lib/utils';\n\nexport type StatusProps = ComponentProps<typeof Badge> & {\n status: 'online' | 'offline' | 'maintenance' | 'degraded';\n};\n\nexport const Status = ({ className, status, ...props }: StatusProps) => (\n <Badge\n className={cn('flex items-center gap-2', 'group', status, className)}\n variant='outline'\n {...props}\n />\n);\n\nexport type StatusIndicatorProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const StatusIndicator = ({ className, ...props }: StatusIndicatorProps) => (\n <span className={cn('relative flex h-2 w-2', className)} {...props}>\n <span\n className={cn(\n 'absolute inline-flex h-full w-full animate-ping rounded-full opacity-75',\n 'group-[.online]:bg-emerald-500',\n 'group-[.offline]:bg-red-500',\n 'group-[.maintenance]:bg-blue-500',\n 'group-[.degraded]:bg-amber-500',\n )}\n />\n <span\n className={cn(\n 'relative inline-flex h-2 w-2 rounded-full',\n 'group-[.online]:bg-emerald-500',\n 'group-[.offline]:bg-red-500',\n 'group-[.maintenance]:bg-blue-500',\n 'group-[.degraded]:bg-amber-500',\n )}\n />\n </span>\n);\n\nexport type StatusLabelProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const StatusLabel = ({ className, children, ...props }: StatusLabelProps) => (\n <span className={cn('text-muted-foreground', className)} {...props}>\n {children ?? (\n <>\n <span className='hidden group-[.online]:block'>Online</span>\n <span className='hidden group-[.offline]:block'>Offline</span>\n <span className='hidden group-[.maintenance]:block'>Maintenance</span>\n <span className='hidden group-[.degraded]:block'>Degraded</span>\n </>\n )}\n </span>\n);\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst badgeVariants = cva(\n 'group/badge inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!',\n {\n variants: {\n variant: {\n default: 'bg-muted text-muted-foreground',\n info: 'bg-blue-100 text-blue-500',\n success: 'bg-green-100 text-green-800',\n warning: 'bg-yellow-200 text-yellow-900',\n error: 'bg-red-100 text-red-800',\n },\n size: {\n sm: 'h-4 text-xs px-1.5 py-0.5 rounded-md',\n md: 'h-5 text-xs px-2 py-0.5 rounded-3xl',\n lg: 'h-6 text-sm px-2.5 py-1.5 rounded-3xl',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nfunction Badge({\n className,\n variant = 'default',\n size = 'md',\n asChild = false,\n ...props\n}: ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'span';\n\n return (\n <Comp\n data-slot='badge'\n data-variant={variant}\n data-size={size}\n className={cn(badgeVariants({ variant, size }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\n","import { type ComponentProps } from 'react';\nimport { Slot } from 'radix-ui';\nimport { ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\n/**\n * Root landmark for a breadcrumb trail. Renders a `<nav aria-label=\"breadcrumb\">`\n * and wraps a single {@link BreadcrumbList}.\n */\nfunction Breadcrumb({ className, ...props }: ComponentProps<'nav'>) {\n return (\n <nav aria-label='breadcrumb' data-slot='breadcrumb' className={cn(className)} {...props} />\n );\n}\n\n/**\n * Ordered list (`<ol>`) holding the trail. Lays the items out in a wrapping,\n * gapped flex row and sets the default `text-main-grey` color and `text-sm` scale.\n */\nfunction BreadcrumbList({ className, ...props }: ComponentProps<'ol'>) {\n return (\n <ol\n data-slot='breadcrumb-list'\n className={cn(\n 'text-main-grey flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * A single segment (`<li>`) of the trail. Wraps a {@link BreadcrumbLink},\n * {@link BreadcrumbPage}, or {@link BreadcrumbEllipsis}.\n */\nfunction BreadcrumbItem({ className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='breadcrumb-item'\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n );\n}\n\n/**\n * Navigable ancestor in the trail. Renders an `<a>` by default; pass `asChild`\n * to delegate to a router link (e.g. React Router / Next.js `Link`) while keeping\n * the hover and focus styles.\n *\n * @param asChild - Render the child element instead of an `<a>` (Radix `Slot`).\n */\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: ComponentProps<'a'> & {\n asChild?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'a';\n\n return (\n <Comp\n data-slot='breadcrumb-link'\n className={cn(\n 'hover:text-main-blue-primary focus-visible:ring-ring rounded-sm transition-colors duration-150 outline-none focus-visible:ring-2 focus-visible:ring-offset-1',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * The current page — the last, non-interactive segment. Renders a `<span>` with\n * `aria-current=\"page\"` and emphasized `text-main-blue-primary` color.\n */\nfunction BreadcrumbPage({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='breadcrumb-page'\n role='link'\n aria-disabled='true'\n aria-current='page'\n className={cn('text-main-blue-primary font-medium', className)}\n {...props}\n />\n );\n}\n\n/**\n * Visual divider between items. Defaults to a `ChevronRight` icon; pass any node\n * as children to override it. Always `aria-hidden`, so overrides never reach\n * assistive tech.\n */\nfunction BreadcrumbSeparator({ children, className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='breadcrumb-separator'\n role='presentation'\n aria-hidden='true'\n className={cn('text-main-grey [&>svg]:size-3.5', className)}\n {...props}>\n {children ?? <ChevronRightIcon />}\n </li>\n );\n}\n\n/**\n * Truncation marker (`…`) that collapses hidden middle segments of a long trail.\n * Pair it with a `DropdownMenu` to make the collapsed segments navigable.\n */\nfunction BreadcrumbEllipsis({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='breadcrumb-ellipsis'\n role='presentation'\n aria-hidden='true'\n className={cn(\n 'text-main-grey flex size-5 items-center justify-center [&>svg]:size-4',\n className,\n )}\n {...props}>\n <MoreHorizontalIcon />\n <span className='sr-only'>More</span>\n </span>\n );\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","import { type ComponentProps, type MouseEvent } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport {LoaderCircle} from 'lucide-react'\n\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n 'group/button inline-flex shrink-0 items-center justify-center gap-2 rounded-lg border border-transparent bg-clip-padding text-sm font-semibold whitespace-nowrap transition-all duration-150 outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 data-[loading]:cursor-not-allowed data-[loading]:opacity-80 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary:\n 'cursor-pointer bg-primary text-primary-foreground hover:bg-primary/80 focus-visible:ring-primary/30',\n secondary:\n 'cursor-pointer bg-secondary text-secondary-foreground hover:bg-[var(--color-orange-700)] focus-visible:ring-secondary/30',\n cancel: 'cursor-pointer bg-destructive text-secondary-foreground hover:bg-[var(--color-red-600)] focus-visible:ring-destructive/30',\n outline:\n 'border border-foreground/50 bg-transparent text-muted-foreground hover:bg-foreground/50 hover:text-white',\n ghost: 'cursor-pointer bg-transparent text-muted-foreground hover:bg-foreground/10 hover:text-primary focus-visible:ring-ring/30 border-none',\n cancelGhost:\n 'cursor-pointer bg-destructive/10 text-red-600 hover:bg-destructive/15 hover:text-red-600 focus-visible:ring-ring/30',\n },\n size: {\n sm: 'h-8 px-3 text-xs',\n md: 'h-9 px-4 text-sm',\n lg: 'h-10 px-6 text-sm',\n 'icon-sm': 'size-8 rounded-full p-0',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n },\n);\n\n/**\n * Interactive button with 6 variants and 4 sizes. Use `asChild` to render as any element via Radix Slot.\n * When `isLoading` is true, a spinner is shown and clicks are blocked while keeping the not-allowed cursor.\n */\nfunction Button({\n className,\n variant = 'primary',\n size = 'md',\n asChild = false,\n isLoading = false,\n children,\n onClick,\n ...props\n}: ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n isLoading?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n if (isLoading) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n }\n\n return (\n <Comp\n data-slot='button'\n data-variant={variant}\n data-size={size}\n data-loading={isLoading || undefined}\n aria-busy={isLoading || undefined}\n className={cn(buttonVariants({ variant, size, className }))}\n onClick={handleClick}\n {...props}>\n {isLoading && <LoaderCircle size={16} className='animate-spin' aria-hidden='true' />}\n {children}\n </Comp>\n );\n}\n\nexport { Button, buttonVariants };\n","import { Slot } from 'radix-ui';\nimport { addDays, format, isSameDay, isToday } from 'date-fns';\nimport { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport {\n type ButtonHTMLAttributes,\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n type MouseEventHandler,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\n\n// Local controlled/uncontrolled state hook. Avoids coupling to the mangled\n// `useControllableState` export only reachable via `radix-ui/internal`.\nfunction useControllableState<T>({\n prop,\n defaultProp,\n onChange,\n}: {\n prop?: T;\n defaultProp?: T;\n onChange?: (value: T) => void;\n}): [T | undefined, (next: T) => void] {\n const [uncontrolled, setUncontrolled] = useState<T | undefined>(defaultProp);\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolled;\n\n const onChangeRef = useRef(onChange);\n useEffect(() => {\n onChangeRef.current = onChange;\n });\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [value, setValue];\n}\n\n// Context for sharing state between components\ninterface MiniCalendarContextType {\n selectedDate: Date | null | undefined;\n onDateSelect: (date: Date) => void;\n startDate: Date;\n onNavigate: (direction: 'prev' | 'next') => void;\n days: number;\n}\n\nconst MiniCalendarContext = createContext<MiniCalendarContextType | null>(null);\n\nconst useMiniCalendar = () => {\n const context = useContext(MiniCalendarContext);\n\n if (!context) {\n throw new Error('MiniCalendar components must be used within MiniCalendar');\n }\n\n return context;\n};\n\n// Helper function to get array of consecutive dates\nconst getDays = (startDate: Date, count: number): Date[] => {\n const days: Date[] = [];\n for (let i = 0; i < count; i++) {\n days.push(addDays(startDate, i));\n }\n return days;\n};\n\n// Helper function to format date\nconst formatDate = (date: Date) => {\n const month = format(date, 'MMM');\n const day = format(date, 'd');\n\n return { month, day };\n};\n\nexport type MiniCalendarProps = HTMLAttributes<HTMLDivElement> & {\n value?: Date;\n defaultValue?: Date;\n onValueChange?: (date: Date | undefined) => void;\n startDate?: Date;\n defaultStartDate?: Date;\n onStartDateChange?: (date: Date | undefined) => void;\n days?: number;\n};\n\nexport const MiniCalendar = ({\n value,\n defaultValue,\n onValueChange,\n startDate,\n defaultStartDate = new Date(),\n onStartDateChange,\n days = 5,\n className,\n children,\n ...props\n}: MiniCalendarProps) => {\n const [selectedDate, setSelectedDate] = useControllableState<Date | undefined>({\n prop: value,\n defaultProp: defaultValue,\n onChange: onValueChange,\n });\n\n const [currentStartDate, setCurrentStartDate] = useControllableState({\n prop: startDate,\n defaultProp: defaultStartDate,\n onChange: onStartDateChange,\n });\n\n const handleDateSelect = (date: Date) => {\n setSelectedDate(date);\n };\n\n const handleNavigate = (direction: 'prev' | 'next') => {\n const newStartDate = addDays(\n currentStartDate || new Date(),\n direction === 'next' ? days : -days,\n );\n setCurrentStartDate(newStartDate);\n };\n\n const contextValue: MiniCalendarContextType = {\n selectedDate: selectedDate || null,\n onDateSelect: handleDateSelect,\n startDate: currentStartDate || new Date(),\n onNavigate: handleNavigate,\n days,\n };\n\n return (\n <MiniCalendarContext.Provider value={contextValue}>\n <div\n className={cn('flex items-center gap-2 rounded-lg border p-2', className)}\n {...props}>\n {children}\n </div>\n </MiniCalendarContext.Provider>\n );\n};\n\nexport type MiniCalendarNavigationProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n direction: 'prev' | 'next';\n asChild?: boolean;\n};\n\nexport const MiniCalendarNavigation = ({\n direction,\n asChild = false,\n children,\n onClick,\n ...props\n}: MiniCalendarNavigationProps) => {\n const { onNavigate } = useMiniCalendar();\n const Icon = direction === 'prev' ? ChevronLeftIcon : ChevronRightIcon;\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n onNavigate(direction);\n onClick?.(event);\n };\n\n if (asChild) {\n return (\n <Slot.Root onClick={handleClick} {...props}>\n {children}\n </Slot.Root>\n );\n }\n\n return (\n <Button\n onClick={handleClick}\n size={asChild ? undefined : 'icon-sm'}\n type='button'\n variant={asChild ? undefined : 'ghost'}\n className={cn(asChild ? 'p-2' : 'p-2')}\n {...props}>\n {children ?? <Icon className='size-4' />}\n </Button>\n );\n};\n\nexport type MiniCalendarDaysProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n children: (date: Date) => ReactNode;\n};\n\nexport const MiniCalendarDays = ({ className, children, ...props }: MiniCalendarDaysProps) => {\n const { startDate, days: dayCount } = useMiniCalendar();\n const days = getDays(startDate, dayCount);\n\n return (\n <div className={cn('flex items-center gap-1', className)} {...props}>\n {days.map((date) => children(date))}\n </div>\n );\n};\n\nexport type MiniCalendarDayProps = ComponentProps<typeof Button> & {\n date: Date;\n};\n\nexport const MiniCalendarDay = ({ date, className, ...props }: MiniCalendarDayProps) => {\n const { selectedDate, onDateSelect } = useMiniCalendar();\n const { month, day } = formatDate(date);\n const isSelected = selectedDate && isSameDay(date, selectedDate);\n const isTodayDate = isToday(date);\n\n return (\n <Button\n className={cn(\n 'h-auto min-w-[3rem] flex-col gap-0 p-2 text-xs',\n isTodayDate && !isSelected && 'bg-primary/10 text-primary',\n className,\n )}\n onClick={() => onDateSelect(date)}\n size='sm'\n type='button'\n variant={isSelected ? 'primary' : 'ghost'}\n {...props}>\n <span\n className={cn(\n 'text-muted-foreground text-[10px] font-medium',\n isSelected && 'text-white',\n )}>\n {month}\n </span>\n <span className='text-sm font-semibold'>{day}</span>\n </Button>\n );\n};\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Card({\n className,\n size = 'default',\n ...props\n}: ComponentProps<'div'> & { size?: 'default' | 'sm' }) {\n return (\n <div\n data-slot='card'\n data-size={size}\n className={cn(\n 'group/card bg-card text-card-foreground ring-foreground/5 dark:ring-foreground/10 flex flex-col gap-6 overflow-hidden rounded-4xl py-6 text-sm shadow-md ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-4xl *:[img:last-child]:rounded-b-4xl',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-header'\n className={cn(\n 'group/card-header @container/card-header grid auto-rows-min items-start gap-1.5 rounded-t-4xl px-6 group-data-[size=sm]/card:px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-action]:flex-row has-data-[slot=card-action]:items-start has-data-[slot=card-action]:justify-between has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-title'\n className={cn('font-heading text-primary text-lg font-bold', className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-description'\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction CardAction({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-action'\n className={cn(\n 'col-start-2 row-span-2 row-start-1 self-start justify-self-end',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-content'\n className={cn('px-6 group-data-[size=sm]/card:px-4', className)}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-footer'\n className={cn(\n 'flex items-center rounded-b-4xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent };\n","import { createContext, useCallback, useContext, useEffect, useState, type ComponentProps, type KeyboardEvent } from 'react';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: 'horizontal' | 'vertical';\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = useContext(CarouselContext);\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />');\n }\n\n return context;\n}\n\n/**\n * Carousel root. Wraps Embla Carousel with keyboard navigation, scroll state, and context.\n * Use `orientation` for vertical mode and `opts` to pass Embla options directly.\n */\nfunction Carousel({\n orientation = 'horizontal',\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: ComponentProps<'div'> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = useState(false);\n const [canScrollNext, setCanScrollNext] = useState(false);\n\n const onSelect = useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on('reInit', onSelect);\n api.on('select', onSelect);\n\n return () => {\n api?.off('select', onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}>\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role='region'\n aria-roledescription='carousel'\n data-slot='carousel'\n {...props}>\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\n/**\n * Scrollable track wrapper. Direct child of `Carousel`. Wraps `CarouselItem` children.\n */\nfunction CarouselContent({ className, ...props }: ComponentProps<'div'>) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className='overflow-hidden' data-slot='carousel-content'>\n <div\n className={cn(\n 'flex',\n orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\n/**\n * Individual slide. Use `className` with `basis-*` utilities to control how many slides are visible.\n */\nfunction CarouselItem({ className, ...props }: ComponentProps<'div'>) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role='group'\n aria-roledescription='slide'\n data-slot='carousel-item'\n className={cn(\n 'min-w-0 shrink-0 grow-0 basis-full',\n orientation === 'horizontal' ? 'pl-4' : 'pt-4',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Previous-slide button. Positioned absolutely to the left (horizontal) or top (vertical).\n * Disabled automatically when there are no previous slides.\n */\nfunction CarouselPrevious({\n className,\n variant = 'outline',\n size = 'icon-sm',\n ...props\n}: ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot='carousel-previous'\n variant={variant}\n size={size}\n className={cn(\n 'cursor-pointer hover:bg-foreground/5 hover:text-foreground font-border border-solid border-foreground/10 absolute touch-manipulation',\n orientation === 'horizontal'\n ? 'top-1/2 -left-12 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n aria-label='Previous slide'\n {...props}>\n <ChevronLeft className='size-4' aria-hidden='true' />\n <span className='sr-only'>Previous slide</span>\n </Button>\n );\n}\n\n/**\n * Next-slide button. Positioned absolutely to the right (horizontal) or bottom (vertical).\n * Disabled automatically when there are no next slides.\n */\nfunction CarouselNext({\n className,\n variant = 'outline',\n size = 'icon-sm',\n ...props\n}: ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot='carousel-next'\n variant={variant}\n size={size}\n className={cn(\n 'cursor-pointer hover:bg-foreground/5 hover:text-foreground border border-solid border-foreground/10 absolute touch-manipulation',\n orientation === 'horizontal'\n ? 'top-1/2 -right-12 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n aria-label='Next slide'\n {...props}>\n <ChevronRight className='size-4' aria-hidden='true' />\n <span className='sr-only'>Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n useCarousel,\n};\n","import { type ComponentProps } from 'react';\nimport { cn } from '@/lib/utils';\n\n// Field — wrapper container for a single form field\nfunction Field({ className, ...props }: ComponentProps<'div'>) {\n return <div data-slot='field' className={cn('flex flex-col gap-1.5', className)} {...props} />;\n}\n\n// FieldLabel — label for a form field\nfunction FieldLabel({ className, ...props }: ComponentProps<'label'>) {\n return (\n <label\n data-slot='field-label'\n className={cn(\n 'text-foreground text-sm leading-none font-medium',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n className,\n )}\n {...props}\n />\n );\n}\n\n// FieldDescription — helper text below a field\nfunction FieldDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='field-description'\n className={cn('text-muted-foreground text-xs', className)}\n {...props}\n />\n );\n}\n\n// FieldError — validation error message\nfunction FieldError({ errors, className }: { errors?: unknown[]; className?: string }) {\n if (!errors || errors.length === 0) return null;\n\n return (\n <p\n data-slot='field-error'\n className={cn('text-destructive text-xs font-medium', className)}>\n {errors\n .map((e) =>\n typeof e === 'string' ? e : e instanceof Error ? e.message : String(e),\n )\n .join(', ')}\n </p>\n );\n}\n\n// FieldGroup — groups multiple fields together vertically\nfunction FieldGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div data-slot='field-group' className={cn('flex flex-col gap-4', className)} {...props} />\n );\n}\n\nexport { Field, FieldLabel, FieldDescription, FieldError, FieldGroup };\n","import { type ComponentProps } from 'react';\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot='input'\n className={cn(\n 'border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[border-color,box-shadow] outline-hidden md:text-sm',\n 'placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground',\n 'file:text-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n 'dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { type ComponentProps } from 'react';\nimport { Label as LabelPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Label({ className, ...props }: ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot='label'\n className={cn(\n 'text-foreground text-sm leading-6 font-medium transition-colors select-none',\n 'group-has-disabled/field:cursor-not-allowed group-has-disabled/field:opacity-50',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n 'aria-invalid:text-destructive dark:aria-invalid:text-destructive/90',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","const SAFE_EXTERNAL_PROTOCOLS = new Set(['https:', 'http:']);\nconst SAFE_HREF_PROTOCOLS = new Set(['https:', 'http:', 'mailto:', 'tel:']);\n\n/**\n * Returns true only for http/https URLs. Blocks javascript: and all other protocols.\n * Use before window.location.href or window.open with consumer-supplied paths.\n */\nexport function isSafeExternalUrl(url: string): boolean {\n try {\n return SAFE_EXTERNAL_PROTOCOLS.has(new URL(url).protocol);\n } catch {\n return false;\n }\n}\n\n/**\n * Sanitizes an anchor href. Passes through relative paths and safe protocols.\n * Returns '#' for javascript: or any other unsafe protocol.\n */\nexport function sanitizeHref(href: string | undefined): string | undefined {\n if (!href) return href;\n if (\n (href.startsWith('/') && !href.startsWith('//')) ||\n href.startsWith('#') ||\n href.startsWith('./') ||\n href.startsWith('../')\n ) {\n return href;\n }\n try {\n return SAFE_HREF_PROTOCOLS.has(new URL(href).protocol) ? href : '#';\n } catch {\n return '#';\n }\n}\n","import { type ComponentProps, type MouseEvent, type MouseEventHandler } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport { ExternalLinkIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { sanitizeHref } from '@/utils/urlSecurity';\n\nconst linkVariants = cva(\n 'group/link inline-flex items-center rounded-sm outline-none transition-colors duration-150 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:opacity-50',\n {\n variants: {\n variant: {\n underlined:\n 'underline underline-offset-2 decoration-[1px] text-main-grey hover:text-main-blue-primary active:translate-y-px active:text-main-orange-primary visited:text-main-orange-primary visited:underline focus-visible:outline-main-blue-primary',\n plain: 'no-underline text-main-grey hover:text-main-blue-primary hover:underline hover:underline-offset-2 hover:decoration-[1px] active:translate-y-px active:text-main-orange-primary active:underline focus-visible:outline-main-blue-primary',\n },\n size: {\n xs: 'gap-1 text-xs',\n sm: 'gap-1 text-sm',\n md: 'gap-1.5 text-base',\n lg: 'gap-2 text-lg',\n },\n },\n defaultVariants: {\n variant: 'underlined',\n size: 'md',\n },\n },\n);\n\nfunction Link({\n className,\n variant = 'underlined',\n size = 'md',\n asChild = false,\n disabled = false,\n target,\n rel,\n href,\n truncate = false,\n children,\n onClick,\n ...props\n}: Omit<ComponentProps<'a'>, 'onClick'> &\n VariantProps<typeof linkVariants> & {\n asChild?: boolean;\n disabled?: boolean;\n truncate?: boolean;\n onClick?: MouseEventHandler<HTMLElement>;\n }) {\n const Comp = asChild && !disabled ? Slot.Root : 'a';\n const isExternal = target === '_blank';\n const resolvedRel = rel || (target === '_blank' ? 'noopener noreferrer' : undefined);\n\n function handleClick(e: MouseEvent<HTMLElement>) {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n }\n\n const externalIconSize = size === 'lg' ? 16 : size === 'xs' ? 10 : 12;\n\n return (\n <Comp\n data-slot='link'\n data-variant={variant}\n data-size={size}\n href={disabled ? undefined : sanitizeHref(href)}\n target={target}\n rel={resolvedRel}\n tabIndex={disabled ? -1 : undefined}\n aria-disabled={disabled || undefined}\n onClick={handleClick}\n className={cn(\n linkVariants({ variant, size, className }),\n truncate && 'max-w-full overflow-hidden',\n )}\n {...props}>\n {truncate ? (\n <span className='min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap'>\n {children}\n </span>\n ) : (\n children\n )}\n {isExternal && !disabled && (\n <>\n <ExternalLinkIcon\n aria-hidden='true'\n size={externalIconSize}\n className='shrink-0'\n />\n <span className='sr-only'>(opens in new tab)</span>\n </>\n )}\n </Comp>\n );\n}\n\nexport { Link, linkVariants };\n","import { isValidPhoneNumber, validatePhoneNumberLength } from 'libphonenumber-js';\n\n/**\n * Why a value is not a valid phone number. Mirrors `libphonenumber-js`'\n * `validatePhoneNumberLength` result, plus `'INVALID'` for a value whose length\n * IS possible for its calling code but which is not a real number (e.g. an\n * 8-digit Colombian value: 8 is a possible fixed-line length, yet `3008...` is\n * not an assignable fixed-line prefix).\n *\n * The design system emits this code, never a message: the copy belongs to the\n * consumer's i18n catalog.\n */\nexport type PhoneFieldProblem =\n | 'TOO_SHORT'\n | 'TOO_LONG'\n | 'INVALID_LENGTH'\n | 'INVALID_COUNTRY'\n | 'NOT_A_NUMBER'\n | 'INVALID';\n\nexport interface PhoneFieldValidity {\n /** True only when the value is a valid, assignable number. */\n isValid: boolean;\n /** Why it is invalid. Absent for a valid value AND for an empty one. */\n problem?: PhoneFieldProblem;\n}\n\n/**\n * Validates an E.164 phone value. Pure and stateless — safe to share between\n * the field, a Zod schema and a server route handler so the rule is written\n * once.\n *\n * An empty value reports `{ isValid: false }` with no `problem`: emptiness is\n * the consumer's `required` rule, not a phone problem.\n */\nexport function validatePhone(value: string): PhoneFieldValidity {\n if (!value) {\n return { isValid: false };\n }\n if (isValidPhoneNumber(value)) {\n return { isValid: true };\n }\n return { isValid: false, problem: validatePhoneNumberLength(value) ?? 'INVALID' };\n}\n","import { type ComponentProps } from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Popover({ ...props }: ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot='popover' {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot='popover-trigger' {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n container,\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Content> & {\n /**\n * Portal target for the popover content. Pass the Dialog content node when\n * the popover lives inside a modal Dialog so the content stays within the\n * Dialog's scroll-lock shard — otherwise wheel/touch scrolling is blocked.\n */\n container?: ComponentProps<typeof PopoverPrimitive.Portal>['container'];\n}) {\n return (\n <PopoverPrimitive.Portal container={container}>\n <PopoverPrimitive.Content\n data-slot='popover-content'\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-1 rounded-3xl p-4 text-sm shadow-lg ring-1 outline-hidden duration-100',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot='popover-anchor' {...props} />;\n}\n\nfunction PopoverHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='popover-header'\n className={cn('flex flex-col gap-1 text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction PopoverTitle({ className, ...props }: ComponentProps<'h2'>) {\n return (\n <div\n data-slot='popover-title'\n className={cn('text-base font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction PopoverDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='popover-description'\n className={cn('text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n};\n","import {\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type ComponentProps,\n type ComponentType,\n} from 'react';\nimport {\n AsYouType,\n parsePhoneNumberFromString,\n validatePhoneNumberLength,\n} from 'libphonenumber-js';\nimport type { CountryCode } from 'libphonenumber-js';\nimport { Command } from 'cmdk';\nimport { CheckIcon, ChevronsUpDownIcon, SearchIcon } from 'lucide-react';\nimport * as countryFlags from 'country-flag-icons/react/3x2';\n\nimport { cn } from '@/lib/utils';\nimport { validatePhone, type PhoneFieldValidity } from '@/lib/phone';\nimport { Input } from '@/components/ui/Input/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface PhoneFieldCountry {\n /** ISO 3166-1 alpha-2 code, e.g. \"CO\". */\n code: string;\n /** Country name, e.g. \"Colombia\". */\n name: string;\n /** International dial code, e.g. \"+57\". */\n dialCode: string;\n /** Optional override for the flag. When omitted the flag is derived from `code` via country-flag-icons. */\n flagUrl?: string;\n}\n\nexport interface PhoneFieldProps\n extends Omit<\n ComponentProps<'input'>,\n 'value' | 'defaultValue' | 'onChange' | 'type' | 'disabled' | 'placeholder' | 'className'\n > {\n /** Country list. Data-agnostic — the source of truth is the consumer's backend. */\n countries: PhoneFieldCountry[];\n /**\n * Controlled E.164 value, e.g. \"+573001234567\" or \"\". Omit `value` to run\n * uncontrolled — the field manages its own value and `onValueChange` still\n * fires on every change.\n */\n value?: string;\n /** Emits the E.164 form whenever the national number changes; emits \"\" when empty. */\n onValueChange?: (value: string) => void;\n /**\n * Emits whether the current value is a valid number, and why it is not when\n * it fails. Fires on mount and on every change of the verdict — including\n * changes caused by picking another country, which do not always change the\n * value. It emits STATE, never copy: the message belongs to the consumer's\n * i18n catalog. For the same rule outside React (Zod schema, route handler)\n * import `validatePhone` from `@bizapps/design-system-testing/phone`.\n */\n onValidityChange?: (validity: PhoneFieldValidity) => void;\n /** ISO code preselected when `value` is empty, e.g. \"CO\". Falls back to the first country. */\n defaultCountry?: string;\n /** Placeholder for the number input. */\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n /** Portal target for the dropdown. Pass the Dialog content node when used inside a modal Dialog. */\n container?: HTMLElement | null;\n /**\n * Form field name for native form submits. The visible input shows the\n * FORMATTED national number (e.g. \"300 123 4567\"); when `name` is set, a\n * hidden input carries the canonical E.164 value so the browser submits\n * the machine-readable form. For react-hook-form, drive the field via\n * `value`/`onValueChange` (controlled component) instead of `name`.\n */\n name?: string;\n}\n\n// country-flag-icons types its components with HTMLAttributes & SVGAttributes\n// over its own HTMLSVGElement type, which is not assignable to\n// ComponentType<SVGProps<SVGSVGElement>>. The flags are only ever rendered\n// with `aria-hidden` and `className`, so the map is typed with exactly those\n// props — a narrower contract that stays assignable both ways without casts.\ntype FlagComponentType = ComponentType<{\n 'aria-hidden'?: boolean | 'true' | 'false';\n className?: string;\n}>;\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\n// Returns the national part of an unambiguously international input (one that\n// starts with `+`), preferring libphonenumber's own parse so a national number\n// that merely begins with the dial-code digits is never corrupted (e.g.\n// Kazakhstan `+77001234567` under `+7` → `7001234567`). `+`-prefixed partials\n// that do not parse yet (e.g. `+573` while typing) fall back to stripping the\n// selected country's dial code — safe, because the leading `+` already proves\n// the digits are a dial code. A bare input without `+` is never stripped:\n// dial-code digits are then indistinguishable from genuine leading digits\n// (e.g. Brazil `553512345678` under `+55`), and stripping would corrupt the\n// number — the documented trade-off for a `+`-less paste.\nfunction stripLeadingDialCode(raw: string, dialCode: string): string {\n if (!raw.startsWith('+')) {\n return raw.replace(/\\D/g, '');\n }\n const parsed = parsePhoneNumberFromString(raw);\n if (parsed) {\n return parsed.nationalNumber;\n }\n const digits = raw.replace(/\\D/g, '');\n const code = dialCode.replace(/\\D/g, '');\n // A bare dial code (e.g. \"+57\" with nothing after it) has no national\n // part: strip it entirely so a pasted code is never re-prefixed into a\n // double prefix (e.g. \"+5757\").\n return code && digits.startsWith(code)\n ? digits.length > code.length\n ? digits.slice(code.length)\n : ''\n : digits;\n}\n\n// Every ISO code `country-flag-icons` ships (267 in `3x2`), looked up at\n// runtime. The indexed access defeats tree-shaking, so all flags land in the\n// bundle: measured with esbuild --minify, PhoneField goes from 258.9 kB / 68.4\n// kB gzip to 473.7 kB / 116.2 kB gzip (+214.7 kB, +47.8 kB gzip). That cost is\n// paid ONLY by consumers that import PhoneField — the namespace import is\n// reachable from nowhere else, so a bundle without PhoneField still drops it.\n// The previous 28-entry curated map was cheaper but wrong: `countries` is\n// consumer-provided (backend-sourced), so any curated subset renders the grey\n// placeholder for countries the consumer legitimately offers.\nconst flagByCode = countryFlags as unknown as Record<string, FlagComponentType | undefined>;\n\n// ─── Country flag ─────────────────────────────────────────────────────────────\n\nfunction CountryFlag({\n code,\n flagUrl,\n className,\n}: {\n code: string;\n flagUrl?: string;\n className?: string;\n}) {\n const isoCode = (code || '').toUpperCase();\n const FlagComponent = flagByCode[isoCode];\n\n // A wrapper carries the `data-slot`/`data-country` contract: the flag\n // components come from country-flag-icons typed with their own props, so\n // annotating them directly would mean widening `FlagComponentType` past\n // what those components declare.\n const flag = flagUrl ? (\n <img src={flagUrl} alt='' aria-hidden='true' className='size-full object-cover' />\n ) : FlagComponent ? (\n <FlagComponent aria-hidden='true' className='size-full' />\n ) : null;\n\n return (\n <span\n data-slot='phone-field-country-flag'\n data-country={isoCode || undefined}\n data-fallback={flag ? undefined : 'true'}\n aria-hidden='true'\n className={cn(\n 'size-4 shrink-0 overflow-hidden rounded-[2px]',\n !flag && 'bg-muted rounded-full',\n className,\n )}>\n {flag}\n </span>\n );\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction PhoneField({\n countries,\n value,\n onValueChange,\n onValidityChange,\n defaultCountry,\n placeholder = 'Phone number',\n disabled = false,\n className,\n container,\n name,\n ...inputProps\n}: PhoneFieldProps) {\n const [open, setOpen] = useState(false);\n const [pickedCode, setPickedCode] = useState<string | undefined>(\n (defaultCountry ?? countries[0]?.code)?.toUpperCase(),\n );\n const [internalValue, setInternalValue] = useState('');\n const listRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const caretRef = useRef<{ raw: string; start: number; end: number } | null>(null);\n const lastValidityRef = useRef<PhoneFieldValidity | null>(null);\n const listId = `${useId()}-countries-list`;\n\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const parsed = currentValue ? parsePhoneNumberFromString(currentValue) : undefined;\n\n // A value libphonenumber can attribute to a specific ISO country is the\n // source of truth: that country wins over any manual pick, so the number is\n // never re-interpreted under a different country's dial code.\n const parsedCountry = parsed?.country;\n const parsedCallingCode = parsed?.countryCallingCode;\n\n const countryInList =\n parsedCountry !== undefined &&\n countries.some((country) => country.code.toUpperCase() === parsedCountry);\n const callingCodeInList =\n parsedCallingCode !== undefined &&\n countries.some(\n (country) => country.dialCode.replace(/\\D/g, '') === parsedCallingCode,\n );\n\n // Countries sharing a calling code (+1 → US/CA/DO, +7 → RU/KZ) are\n // indistinguishable to libphonenumber until enough digits are typed, and a\n // half-typed number is NEVER attributable. Deriving the country from the\n // calling code alone therefore resolved to whichever entry came first in\n // `countries`, silently overwriting the user's pick. An explicit pick wins\n // over that fallback for exactly as long as it still matches the value's\n // calling code; once the value moves to another code the pick is stale and\n // the value takes over again.\n const pickedCountry = pickedCode\n ? countries.find((country) => country.code.toUpperCase() === pickedCode.toUpperCase())\n : undefined;\n const pickMatchesValue =\n pickedCountry !== undefined &&\n pickedCountry.dialCode.replace(/\\D/g, '') === parsedCallingCode;\n\n const representedCode = countryInList\n ? parsedCountry\n : pickMatchesValue\n ? pickedCountry.code\n : callingCodeInList\n ? countries.find(\n (country) =>\n country.dialCode.replace(/\\D/g, '') === parsedCallingCode,\n )?.code\n : undefined;\n\n const selectedCode = representedCode ?? pickedCode ?? defaultCountry ?? countries[0]?.code;\n const selectedCountry =\n countries.find(\n (country) => country.code.toUpperCase() === selectedCode?.toUpperCase(),\n ) ?? countries[0];\n\n const dialCode = selectedCountry ? selectedCountry.dialCode.replace(/\\D/g, '') : '';\n\n // Re-emit with the parsed calling code when the value's country is not in\n // the list, so the next keystroke never silently switches to another\n // country's dial code (e.g. a British number must keep \"+44\", not \"+57\").\n const emitDialCode = parsedCallingCode ?? dialCode;\n\n const nationalDigits = parsed\n ? parsed.nationalNumber\n : currentValue\n ? stripLeadingDialCode(currentValue, dialCode)\n : '';\n\n // Format the national number under the selected country only when that\n // country actually represents the value. A value whose country the list\n // cannot represent (matched neither by ISO code nor by calling code) keeps\n // its raw digits: formatting it under any listed country would show wrong\n // grouping, and re-emitting under that country's dial code would destroy it.\n const canFormat =\n selectedCountry !== undefined && (!parsed || countryInList || callingCodeInList);\n\n const inputValue =\n selectedCountry && canFormat && nationalDigits\n ? new AsYouType((selectedCountry.code || '').toUpperCase() as CountryCode).input(\n nationalDigits,\n )\n : nationalDigits;\n\n const isInvalid =\n inputProps['aria-invalid'] === true || inputProps['aria-invalid'] === 'true';\n\n // Validity is derived from the VALUE, not from the selected country: the\n // value carries its own calling code, so it stays the single source of\n // truth even while a shared calling code keeps the country ambiguous.\n const { isValid, problem } = validatePhone(currentValue);\n\n // Emit only on an actual verdict change: consumers pass inline callbacks,\n // so the effect re-runs on every render and would otherwise spam a state\n // setter on the consumer side.\n useEffect(() => {\n const last = lastValidityRef.current;\n if (last && last.isValid === isValid && last.problem === problem) {\n return;\n }\n lastValidityRef.current = { isValid, problem };\n onValidityChange?.({ isValid, problem });\n }, [isValid, problem, onValidityChange]);\n\n // The formatted `inputValue` replaces the DOM value on every keystroke,\n // which moves the caret to the end. Restore it right after commit: count\n // the digits before the old caret in the raw string and place the caret\n // after the same number of digits in the new formatted string, preserving\n // any selection length. Only runs when the user actually typed (caretRef\n // set) and the input is still focused.\n useLayoutEffect(() => {\n const input = inputRef.current;\n const caret = caretRef.current;\n if (!input || !caret || document.activeElement !== input) {\n return;\n }\n const digitsBefore = caret.raw.slice(0, caret.start).replace(/\\D/g, '').length;\n let position = 0;\n if (digitsBefore > 0) {\n let digitsSeen = 0;\n for (let i = 0; i < inputValue.length; i++) {\n if (/\\d/.test(inputValue[i])) {\n digitsSeen += 1;\n }\n position = i + 1;\n if (digitsSeen >= digitsBefore) {\n break;\n }\n }\n }\n input.setSelectionRange(position, position + (caret.end - caret.start));\n caretRef.current = null;\n }, [inputValue]);\n\n // On each search change cmdk reorders matches but never resets the list's\n // scroll position, so a previously scrolled list keeps the top match hidden.\n // Snap back to the top once cmdk has committed the new order (rAF runs\n // after its layout effects).\n const handleSearchChange = () => {\n requestAnimationFrame(() => listRef.current?.scrollTo({ top: 0 }));\n };\n\n function handleCountrySelect(code: string) {\n setPickedCode(code);\n setOpen(false);\n const nextCountry = countries.find(\n (country) => country.code.toUpperCase() === code.toUpperCase(),\n );\n // Keep the existing national number and re-emit it under the newly\n // selected country's dial code.\n if (nextCountry && nationalDigits) {\n const next = `+${nextCountry.dialCode.replace(/\\D/g, '')}${nationalDigits}`;\n onValueChange?.(next);\n if (!isControlled) {\n setInternalValue(next);\n }\n }\n }\n\n // Parses a pasted or typed E.164 and resolves the calling code plus the\n // synced country pick. Returns undefined when the input has no derivable\n // national number yet (e.g. a bare or partial dial code).\n function deriveFromE164(e164: string) {\n const parsed = parsePhoneNumberFromString(e164);\n if (!parsed?.nationalNumber) {\n return undefined;\n }\n const countryMatch = parsed.country\n ? countries.find((country) => country.code.toUpperCase() === parsed.country)\n : undefined;\n const nextPickedCode = countryMatch\n ? countryMatch.code\n : parsed.countryCallingCode\n ? countries.find(\n (country) =>\n country.dialCode.replace(/\\D/g, '') === parsed.countryCallingCode,\n )?.code\n : undefined;\n return {\n nationalNumber: parsed.nationalNumber,\n emitCode: parsed.countryCallingCode,\n nextPickedCode,\n };\n }\n\n function handleInputChange(raw: string, nativeEvent?: InputEvent) {\n const input = inputRef.current;\n if (input) {\n caretRef.current = {\n raw,\n start: input.selectionStart ?? raw.length,\n end: input.selectionEnd ?? raw.length,\n };\n }\n if (!selectedCountry) return;\n let national = stripLeadingDialCode(raw, dialCode);\n let emitCode = emitDialCode;\n let nextPickedCode: string | undefined;\n\n // A '+' anywhere in the raw value means an E.164 landed in the field,\n // almost always a paste. The calling code must come from THAT input,\n // never from the selected country, or a pasted foreign number gets\n // re-prefixed with the local dial code.\n const plusIndex = raw.indexOf('+');\n\n if (plusIndex === 0) {\n // The whole field is a new international input.\n const derived = deriveFromE164(raw);\n if (derived) {\n emitCode = derived.emitCode || emitDialCode;\n nextPickedCode = derived.nextPickedCode;\n } else if (nativeEvent?.inputType === 'insertFromPaste') {\n // Pasting a bare or partial E.164 (e.g. just \"+57\") has no\n // national number: emit nothing rather than a double prefix.\n national = '';\n }\n // Typed partial \"+...\" input keeps stripLeadingDialCode's lenient\n // fallback so manual \"+57 3...\" entry never blanks the field.\n } else if (plusIndex > 0) {\n // The '+' sits mid-string: a paste inserted an E.164 inside an\n // existing number. Rebuild the national digits from the parts\n // around the paste using the paste event's data.\n const pasted =\n nativeEvent?.inputType === 'insertFromPaste' &&\n nativeEvent.data?.startsWith('+')\n ? nativeEvent.data\n : undefined;\n if (pasted) {\n const derived = deriveFromE164(pasted);\n const prefixDigits = raw.slice(0, plusIndex).replace(/\\D/g, '');\n const suffixDigits = raw.slice(plusIndex + pasted.length).replace(/\\D/g, '');\n if (derived) {\n national = prefixDigits + derived.nationalNumber + suffixDigits;\n emitCode = derived.emitCode || emitDialCode;\n nextPickedCode = derived.nextPickedCode;\n } else {\n // The pasted E.164 has no derivable national number (e.g.\n // a partial code): drop the paste and keep the pre-paste\n // digits instead of swallowing the '+' into the number.\n national = prefixDigits + suffixDigits;\n }\n }\n }\n\n const next = national ? `+${emitCode}${national}` : '';\n\n // Typing a digit past every possible length for the calling code cannot\n // produce a real number, so the keystroke is discarded instead of\n // committed. Two carve-outs:\n // - only when the number GREW: a deletion must always land, otherwise\n // an already-too-long value (a paste, a country switch) traps the\n // user with no way to shorten it.\n // - never on paste: bulk input is interpreted first (the branches\n // above already resolved its calling code) and shown back as\n // invalid. Swallowing a whole paste is worse than displaying it.\n const grew = national.replace(/\\D/g, '').length > nationalDigits.length;\n const isPaste = nativeEvent?.inputType === 'insertFromPaste';\n if (grew && !isPaste && validatePhoneNumberLength(next) === 'TOO_LONG') {\n // Nothing re-renders when the value does not change, so the DOM\n // keeps the rejected character: put the committed value back and\n // leave the caret where the keystroke came from.\n if (input) {\n const caret = Math.max(0, (input.selectionStart ?? inputValue.length) - 1);\n input.value = inputValue;\n input.setSelectionRange(caret, caret);\n }\n caretRef.current = null;\n return;\n }\n\n if (nextPickedCode) {\n setPickedCode(nextPickedCode);\n }\n\n onValueChange?.(next);\n if (!isControlled) {\n setInternalValue(next);\n }\n }\n\n return (\n <div\n data-slot='phone-field'\n data-invalid={isInvalid || undefined}\n className={cn(\n 'border-input flex h-9 w-full min-w-0 items-center overflow-hidden rounded-md border bg-transparent shadow-xs transition-[color,box-shadow]',\n 'focus-within:border-ring focus-within:ring-ring/30 focus-within:ring-3',\n 'data-[invalid=true]:border-destructive data-[invalid=true]:ring-destructive/20 data-[invalid=true]:ring-3',\n 'dark:data-[invalid=true]:border-destructive/50 dark:data-[invalid=true]:ring-destructive/40',\n className,\n )}>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type='button'\n data-slot='phone-field-country-select'\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup='listbox'\n aria-controls={open ? listId : undefined}\n aria-label={\n selectedCountry\n ? `${selectedCountry.name} ${selectedCountry.dialCode}`\n : undefined\n }\n className={cn(\n 'flex h-full shrink-0 cursor-pointer items-center gap-1.5 border-r border-input px-2.5 text-sm font-medium outline-none select-none',\n 'hover:bg-muted',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n )}>\n {selectedCountry && (\n <>\n <CountryFlag\n code={selectedCountry.code}\n flagUrl={selectedCountry.flagUrl}\n />\n <span className='tabular-nums'>{selectedCountry.dialCode}</span>\n <ChevronsUpDownIcon size={14} className='text-muted-foreground shrink-0' />\n </>\n )}\n </button>\n </PopoverTrigger>\n <PopoverContent\n className='w-72 rounded-xl p-0'\n align='start'\n container={container}>\n <Command className='rounded-xl' label='Search countries'>\n <div className='border-border flex items-center gap-2 border-b px-3'>\n <SearchIcon size={14} className='text-muted-foreground shrink-0' />\n <Command.Input\n placeholder='Search country...'\n onValueChange={handleSearchChange}\n className='placeholder:text-muted-foreground flex h-9 w-full bg-transparent py-2 text-sm outline-none'\n />\n </div>\n {/*\n cmdk owns Command.List's id (it wires the listbox to\n its own search input), so the trigger's aria-controls\n references this wrapper div instead — it exists in the\n DOM exactly while the popover is open.\n */}\n <div id={listId}>\n <Command.List ref={listRef} className='max-h-56 overflow-y-auto p-1'>\n <Command.Empty className='text-muted-foreground py-4 text-center text-sm'>\n No country found.\n </Command.Empty>\n {countries.map((country) => (\n <Command.Item\n key={country.code}\n value={country.code}\n keywords={[country.name, country.dialCode]}\n data-slot='phone-field-country-item'\n onSelect={() => handleCountrySelect(country.code)}\n className={cn(\n 'flex cursor-pointer items-center justify-between gap-2 rounded-md px-2 py-1.5 text-sm outline-none select-none',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'hover:bg-accent hover:text-accent-foreground',\n )}>\n <span className='flex min-w-0 items-center gap-2'>\n <CountryFlag code={country.code} flagUrl={country.flagUrl} />\n <span className='truncate'>{country.name}</span>\n </span>\n <span className='flex items-center gap-2'>\n <span className='text-muted-foreground tabular-nums'>\n {country.dialCode}\n </span>\n {selectedCode?.toUpperCase() ===\n country.code.toUpperCase() && (\n <CheckIcon\n size={14}\n className='text-[var(--color-main-blue-primary)] shrink-0'\n />\n )}\n </span>\n </Command.Item>\n ))}\n </Command.List>\n </div>\n </Command>\n </PopoverContent>\n </Popover>\n <Input\n ref={inputRef}\n {...inputProps}\n data-slot='phone-field-input'\n type='tel'\n value={inputValue}\n onChange={(event) => handleInputChange(event.target.value, event.nativeEvent as InputEvent)}\n placeholder={placeholder}\n disabled={disabled}\n autoComplete={inputProps.autoComplete ?? 'tel'}\n className={cn(\n 'h-full flex-1 rounded-none border-0 bg-transparent shadow-none',\n 'px-3 focus-visible:border-transparent focus-visible:ring-0',\n )}\n />\n {name !== undefined && (\n <input type='hidden' name={name} value={currentValue} data-slot='phone-field-hidden-input' />\n )}\n </div>\n );\n}\n\nexport { PhoneField };\n","import { useRef, type ClipboardEvent, type KeyboardEvent } from 'react';\nimport { cn } from '@/lib/utils';\n\ninterface PinInputProps {\n length?: number;\n value?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n invalid?: boolean;\n mask?: boolean;\n className?: string;\n inputClassName?: string;\n}\n\nfunction PinInput({\n length = 6,\n value = '',\n onChange,\n disabled = false,\n invalid = false,\n mask = false,\n className,\n inputClassName,\n}: PinInputProps) {\n const inputs = useRef<(HTMLInputElement | null)[]>([]);\n const pins = value.split('').slice(0, length);\n\n const focusAt = (index: number) => {\n inputs.current[Math.max(0, Math.min(index, length - 1))]?.focus();\n };\n\n const handleChange = (index: number, char: string) => {\n const digit = char.replace(/\\D/g, '').slice(-1);\n const next = pins.slice();\n next[index] = digit;\n const newVal = next.join('').slice(0, length);\n onChange?.(newVal);\n if (digit && index < length - 1) focusAt(index + 1);\n };\n\n const handleKeyDown = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault();\n if (pins[index]) {\n const next = pins.slice();\n next[index] = '';\n onChange?.(next.join(''));\n } else {\n focusAt(index - 1);\n }\n } else if (e.key === 'ArrowLeft') {\n focusAt(index - 1);\n } else if (e.key === 'ArrowRight') {\n focusAt(index + 1);\n }\n };\n\n const handlePaste = (e: ClipboardEvent) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length);\n onChange?.(pasted);\n focusAt(Math.min(pasted.length, length - 1));\n };\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n {Array.from({ length }).map((_, i) => (\n <input\n key={i}\n ref={(el) => {\n inputs.current[i] = el;\n }}\n type={mask ? 'password' : 'text'}\n inputMode='numeric'\n maxLength={1}\n value={pins[i] ?? ''}\n disabled={disabled}\n aria-invalid={invalid}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n onFocus={(e) => e.target.select()}\n className={cn(\n 'border-input flex h-10 w-10 rounded-md border bg-transparent text-center text-sm font-semibold shadow-xs transition-[color,box-shadow] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n inputClassName,\n )}\n />\n ))}\n </div>\n );\n}\n\nexport { PinInput };\nexport type { PinInputProps };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Toggle as TogglePrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\n\nconst toggleVariants = cva(\n 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n {\n variants: {\n variant: {\n default: 'bg-foreground/5',\n outline:\n 'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n sm: 'h-8 min-w-8 px-1.5',\n md: 'h-9 min-w-9 px-2',\n lg: 'h-10 min-w-10 px-2.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot='toggle'\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n","import { createContext, useContext, useEffect, useId, useState, type ComponentProps, type ReactNode } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { ToggleGroup } from 'radix-ui';\nimport { motion } from 'motion/react';\nimport { cn } from '@/lib/utils';\nimport { toggleVariants } from '@/components/ui/Toggle/toggle';\n\ntype SegmentedControlContextValue = VariantProps<typeof toggleVariants> & {\n type: 'single' | 'multiple';\n currentSingleValue?: string;\n pillLayoutId: string;\n};\n\nconst SegmentedControlContext = createContext<SegmentedControlContextValue>({\n size: 'md',\n type: 'single',\n currentSingleValue: undefined,\n pillLayoutId: '',\n});\n\ntype SegmentedControlSingleProps = {\n type: 'single';\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n};\n\ntype SegmentedControlMultipleProps = {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n};\n\ntype SegmentedControlProps = (SegmentedControlSingleProps | SegmentedControlMultipleProps) &\n VariantProps<typeof toggleVariants> & {\n disabled?: boolean;\n className?: string;\n children?: ReactNode;\n };\n\nfunction SegmentedControl({ className, size = 'md', children, ...props }: SegmentedControlProps) {\n const pillLayoutId = useId();\n const isSingle = props.type === 'single';\n const singleProps = isSingle ? (props as SegmentedControlSingleProps) : null;\n\n const [activeValue, setActiveValue] = useState<string | undefined>(\n singleProps?.value ?? singleProps?.defaultValue,\n );\n\n useEffect(() => {\n if (singleProps?.value !== undefined) {\n setActiveValue(singleProps.value);\n }\n }, [singleProps?.value]);\n\n const rootProps = {\n ...(props as ComponentProps<typeof ToggleGroup.Root>),\n ...(isSingle && {\n onValueChange: (val: string) => {\n setActiveValue(val);\n singleProps?.onValueChange?.(val);\n },\n }),\n };\n\n return (\n <ToggleGroup.Root\n data-slot='segmented-control'\n className={cn('flex w-full items-center gap-1 rounded-lg bg-[#e8e8ed] p-1', className)}\n {...(rootProps as ComponentProps<typeof ToggleGroup.Root>)}>\n <SegmentedControlContext.Provider\n value={{\n size,\n type: props.type,\n currentSingleValue: activeValue,\n pillLayoutId,\n }}>\n {children}\n </SegmentedControlContext.Provider>\n </ToggleGroup.Root>\n );\n}\n\nfunction SegmentedControlItem({\n className,\n children,\n value,\n ...props\n}: ComponentProps<typeof ToggleGroup.Item> & VariantProps<typeof toggleVariants>) {\n const { size, type, currentSingleValue, pillLayoutId } =\n useContext(SegmentedControlContext);\n const isActive = type === 'single' && currentSingleValue === value;\n\n return (\n <ToggleGroup.Item\n data-slot='segmented-control-item'\n value={value}\n className={cn(\n toggleVariants({ variant: 'default', size }),\n 'relative h-7 flex-1 cursor-pointer rounded-md border-0 bg-transparent px-4 py-0',\n 'text-muted-foreground text-sm font-medium',\n 'hover:text-foreground transition-colors duration-150',\n 'focus:z-10 focus-visible:z-10',\n 'data-[state=on]:text-[var(--color-main-blue-primary)]',\n type === 'multiple' && [\n 'data-[state=on]:bg-white',\n 'data-[state=on]:shadow-sm',\n 'data-[state=on]:hover:bg-white',\n ],\n className,\n )}\n {...props}>\n {isActive && (\n <motion.span\n layoutId={pillLayoutId}\n className='absolute inset-0 rounded-md bg-white shadow-sm'\n transition={{ type: 'spring', duration: 0.5, bounce: 0.1 }}\n />\n )}\n <span className='relative z-10'>{children}</span>\n </ToggleGroup.Item>\n );\n}\n\nexport { SegmentedControl, SegmentedControlItem };\nexport type { SegmentedControlProps };\n","import { type ComponentProps } from 'react';\nimport { Select as SelectPrimitive } from 'radix-ui';\nimport { ChevronDownIcon, ChevronUpIcon, CheckIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nfunction Select({ ...props }: ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot='select' {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Trigger>) {\n return (\n <SelectPrimitive.Trigger\n data-slot='select-trigger'\n className={cn(\n 'border-input flex h-9 w-full items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none',\n 'placeholder:text-muted-foreground',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n '[&>span]:truncate',\n className,\n )}\n {...props}>\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className='text-muted-foreground size-4 shrink-0' />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\ntype SelectContentProps = ComponentProps<typeof SelectPrimitive.Content> & {\n /**\n * Maximum height of the dropdown panel. Accepts any CSS length\n * (e.g. `240px`, `15rem`) or a number interpreted as pixels.\n * The panel is always additionally capped by the space available\n * on screen, and its list scrolls once the content exceeds it.\n */\n maxHeight?: number | string;\n};\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n maxHeight,\n style,\n ...props\n}: SelectContentProps) {\n const resolvedMaxHeight = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot='select-content'\n className={cn(\n 'border-border bg-popover text-popover-foreground relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-hidden rounded-md border shadow-md',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1',\n position === 'popper' && 'w-(--radix-select-trigger-width)',\n className,\n )}\n position={position}\n style={{\n ...(resolvedMaxHeight\n ? {\n maxHeight: `min(${resolvedMaxHeight}, var(--radix-select-content-available-height))`,\n }\n : null),\n ...style,\n }}\n {...props}>\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn('scroll-my-1 p-1', position === 'popper' && 'w-full')}>\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n className={cn(\n 'relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none',\n 'focus:bg-accent focus:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}>\n <span className='absolute right-2 flex size-3.5 items-center justify-center'>\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className='size-4' />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectLabel({ className, ...props }: ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot='select-label'\n className={cn('text-muted-foreground px-2 py-1.5 text-xs font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot='select-separator'\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}>\n <ChevronUpIcon className='size-4' />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}>\n <ChevronDownIcon className='size-4' />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nfunction SelectValue({ ...props }: ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot='select-value' {...props} />;\n}\n\nfunction SelectGroup({ ...props }: ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot='select-group' {...props} />;\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import { type ComponentProps } from 'react';\nimport { Separator as SeparatorPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n}: ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot='separator'\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'bg-foreground/20 shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import { type ComponentProps } from 'react';\nimport { Progress as ProgressPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst progressVariants = cva('relative flex w-full items-center overflow-x-hidden rounded-full', {\n variants: {\n variant: {\n default: 'bg-[var(--color-dark-100)]',\n success: 'bg-[var(--color-green-100)]',\n warning: 'bg-[var(--color-yellow-100)]',\n danger: 'bg-[var(--color-red-100)]',\n orange: 'bg-[var(--color-orange-100)]',\n },\n size: {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n});\n\nconst progressIndicatorVariants = cva('size-full flex-1 transition-all rounded-[5px]', {\n variants: {\n variant: {\n default: 'bg-[var(--color-main-blue-primary)]',\n success: 'bg-[var(--color-main-positive-state)]',\n warning: 'bg-[var(--color-main-yellow-primary)]',\n danger: 'bg-[var(--color-main-warning-state)]',\n orange: 'bg-[var(--color-main-orange-primary)]',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface ProgressProps\n extends\n ComponentProps<typeof ProgressPrimitive.Root>,\n VariantProps<typeof progressVariants> {}\n\nfunction Progress({ className, value, variant = 'default', size = 'md', ...props }: ProgressProps) {\n return (\n <ProgressPrimitive.Root\n data-slot='progress'\n data-variant={variant}\n data-size={size}\n className={cn(progressVariants({ variant, size }), className)}\n {...props}>\n <ProgressPrimitive.Indicator\n data-slot='progress-indicator'\n className={cn(progressIndicatorVariants({ variant }))}\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n );\n}\n\nexport { Progress, progressVariants, progressIndicatorVariants };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst skeletonVariants = cva('animate-pulse bg-foreground/10', {\n variants: {\n variant: {\n default: 'rounded-md',\n text: 'h-4 rounded-full',\n avatar: 'rounded-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nfunction Skeleton({\n className,\n variant,\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof skeletonVariants>) {\n return (\n <div\n data-slot='skeleton'\n data-variant={variant}\n aria-hidden='true'\n className={cn(skeletonVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nexport { Skeleton, skeletonVariants };\n","import { useMemo, type ComponentProps } from 'react';\nimport { Slider as SliderPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = useMemo(\n () =>\n Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],\n [value, defaultValue, min, max],\n );\n\n return (\n <SliderPrimitive.Root\n data-slot='slider'\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n 'relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col',\n className,\n )}\n {...props}>\n <SliderPrimitive.Track\n data-slot='slider-track'\n className='bg-input/90 relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-2 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-2'>\n <SliderPrimitive.Range\n data-slot='slider-range'\n className='bg-primary absolute select-none data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full'\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot='slider-thumb'\n key={index}\n className='hover:ring-ring/30 focus-visible:ring-ring/30 block size-4 shrink-0 rounded-full bg-white shadow-md ring-1 ring-black/10 transition-[color,box-shadow,background-color] select-none hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50'\n />\n ))}\n </SliderPrimitive.Root>\n );\n}\n\nexport { Slider };\n","import { type ComponentProps } from 'react';\nimport { Switch as SwitchPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot='switch'\n data-size={size}\n className={cn(\n 'peer group/switch inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[size=default]:h-[1.15rem] data-[size=default]:w-8',\n 'data-[size=sm]:h-3.5 data-[size=sm]:w-6',\n 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n 'dark:data-[state=unchecked]:bg-input/80',\n className,\n )}\n {...props}>\n <SwitchPrimitive.Thumb\n data-slot='switch-thumb'\n className={cn(\n 'bg-background pointer-events-none block rounded-full ring-0 transition-transform',\n 'group-data-[size=default]/switch:size-4',\n 'group-data-[size=sm]/switch:size-3',\n 'data-[state=checked]:translate-x-[calc(100%-2px)]',\n 'data-[state=unchecked]:translate-x-0',\n 'dark:data-[state=checked]:bg-primary-foreground',\n 'dark:data-[state=unchecked]:bg-foreground',\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","// ─────────────────────────────────────────────\n// tcce-design-system · animation tokens\n// Motion (ex Framer Motion) — sutil y profesional\n// ─────────────────────────────────────────────\n\n// ── Durations ────────────────────────────────\n// Usa la escala más corta posible para cada caso.\n// instant → feedback táctil (hover, active, focus ring)\n// fast → elementos pequeños que entran/salen (badge, tooltip, switch)\n// normal → componentes de tamaño medio (dropdown, toast, input state)\n// slow → overlays y transiciones de página (modal backdrop, sidebar)\nexport const duration = {\n instant: 0.1,\n fast: 0.15,\n normal: 0.25,\n slow: 0.4,\n} as const;\n\n// ── Easings ──────────────────────────────────\n// Curvas estándar de Material Design adaptadas para uso profesional.\n// smooth → entrada y salida equilibrada (la más usada)\n// enter → aceleración suave al entrar (elementos que aparecen)\n// exit → desaceleración al salir (elementos que desaparecen)\n// linear → progreso, loaders, skeleton shimmer\nexport const ease = {\n smooth: [0.4, 0, 0.2, 1] as const,\n enter: [0.0, 0, 0.2, 1] as const,\n exit: [0.4, 0, 1.0, 1] as const,\n linear: [0.0, 0, 1.0, 1] as const,\n drawer: [0.22, 1, 0.36, 1] as const,\n} as const;\n\n// ── Spring configs ────────────────────────────\n// Solo para componentes que necesitan sensación física ligera.\n// gentle → modales, drawers, paneles deslizantes\n// snappy → switches, toggles, checkboxes\n// NO usar spring en: toasts, tooltips, dropdowns (demasiado movimiento)\nexport const spring = {\n gentle: { type: 'spring', stiffness: 260, damping: 28 } as const,\n snappy: { type: 'spring', stiffness: 400, damping: 30 } as const,\n} as const;\n\n// ── Transitions predefinidas ──────────────────\n// Combinaciones listas para usar en cada tipo de componente.\n// Importa la que corresponda en lugar de armar la config cada vez.\n\nexport const transition = {\n // Botones — feedback instantáneo en hover/tap\n button: {\n duration: duration.instant,\n ease: ease.smooth,\n },\n\n // Switch / toggle / checkbox\n toggle: {\n ...spring.snappy,\n },\n\n // Inputs — cambio de borde en focus, estados de error\n input: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n\n // Dropdown / select / popover\n dropdown: {\n duration: duration.fast,\n ease: ease.enter,\n },\n\n // Toast / notification — entra rápido, sale más rápido aún\n toast: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n\n // Modal / dialog — más lento para dar peso al overlay\n modal: {\n ...spring.gentle,\n },\n\n // Sidebar / navigation drawer\n sidebar: {\n duration: duration.slow,\n ease: ease.smooth,\n },\n\n // Cards — hover sutil, sin spring\n card: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n\n // Drawer / slide panel — smooth enter, fast exit\n drawer: {\n duration: 0.3,\n ease: ease.drawer,\n },\n drawerExit: {\n duration: 0.2,\n ease: ease.exit,\n },\n} as const;\n\n// ── Variants Motion reutilizables ─────────────\n// Úsalos directamente en <motion.div variants={fadeIn}>\n\nexport const fadeIn = {\n hidden: { opacity: 0 },\n visible: { opacity: 1, transition: transition.dropdown },\n exit: { opacity: 0, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\nexport const slideUp = {\n hidden: { opacity: 0, y: 8 },\n visible: { opacity: 1, y: 0, transition: transition.dropdown },\n exit: { opacity: 0, y: 4, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\nexport const slideRight = {\n hidden: { opacity: 0, x: -12 },\n visible: { opacity: 1, x: 0, transition: transition.sidebar },\n exit: { opacity: 0, x: -12, transition: { duration: duration.normal, ease: ease.exit } },\n} as const;\n\nexport const scaleIn = {\n hidden: { opacity: 0, scale: 0.97 },\n visible: { opacity: 1, scale: 1, transition: transition.modal },\n exit: { opacity: 0, scale: 0.97, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\n// ── Stagger (para listas y grids) ─────────────\n// Úsalo en el contenedor padre con variants + staggerChildren\nexport const stagger = {\n container: {\n hidden: {},\n visible: { transition: { staggerChildren: 0.06, delayChildren: 0.05 } },\n },\n item: {\n hidden: { opacity: 0, y: 6 },\n visible: { opacity: 1, y: 0, transition: transition.card },\n },\n} as const;\n\n// ── Export agrupado ───────────────────────────\nexport const animation = {\n duration,\n ease,\n spring,\n transition,\n variants: { fadeIn, slideUp, slideRight, scaleIn, stagger },\n} as const;\n\nexport type AnimationTokens = typeof animation;\n","import { createContext, useContext, useId, useState, type ComponentProps } from 'react';\nimport { Tabs as TabsPrimitive } from 'radix-ui';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { cn } from '@/lib/utils';\nimport { spring, duration, ease } from '@/tokens/animation';\n\ninterface TabsContextValue {\n activeValue: string;\n listId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue>({\n activeValue: '',\n listId: '',\n});\n\nfunction useTabsContext() {\n return useContext(TabsContext);\n}\n\nfunction Tabs({\n defaultValue,\n value: controlledValue,\n onValueChange,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Root>) {\n const [internalValue, setInternalValue] = useState(controlledValue ?? defaultValue ?? '');\n const activeValue = controlledValue ?? internalValue;\n const listId = useId();\n\n const handleValueChange = (v: string) => {\n if (controlledValue === undefined) setInternalValue(v);\n onValueChange?.(v);\n };\n\n return (\n <TabsContext.Provider value={{ activeValue, listId }}>\n <TabsPrimitive.Root\n data-slot='tabs'\n value={activeValue}\n onValueChange={handleValueChange}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nfunction TabsList({ className, ...props }: ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot='tabs-list'\n className={cn(\n 'text-muted-foreground inline-flex h-9 items-center justify-center gap-1 rounded-lg bg-[#e8e8ed] p-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n value,\n children,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { activeValue, listId } = useTabsContext();\n const isActive = activeValue === value;\n\n return (\n <TabsPrimitive.Trigger\n data-slot='tabs-trigger'\n value={value}\n className={cn(\n 'relative inline-flex items-center justify-center rounded-md px-4 py-1 text-sm font-medium whitespace-nowrap',\n 'ring-offset-background transition-colors',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'data-[state=inactive]:text-muted-foreground hover:text-foreground transition-all duration-150 data-[state=active]:text-[var(--color-main-blue-primary)]',\n className,\n )}\n {...props}>\n <AnimatePresence initial={false}>\n {isActive && (\n <motion.span\n data-slot='tabs-trigger-pill'\n layoutId={`${listId}-pill`}\n className='absolute inset-0 z-0 rounded-md bg-white shadow-sm'\n transition={spring.snappy}\n />\n )}\n </AnimatePresence>\n <span className='relative z-10 flex items-center gap-1.5'>{children}</span>\n </TabsPrimitive.Trigger>\n );\n}\n\nfunction TabsContent({\n className,\n value,\n children,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Content>) {\n const { activeValue } = useTabsContext();\n const isActive = activeValue === value;\n\n return (\n <TabsPrimitive.Content\n data-slot='tabs-content'\n value={value}\n forceMount\n className={cn(\n 'ring-offset-background focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',\n className,\n )}\n {...props}>\n <AnimatePresence mode='popLayout' initial={false}>\n {isActive && (\n <motion.div\n key={value}\n className='mt-2'\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n transition={{ duration: duration.fast, ease: ease.smooth }}>\n {children}\n </motion.div>\n )}\n </AnimatePresence>\n </TabsPrimitive.Content>\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { createContext, useContext, useEffect, useState, type ReactNode } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n CircleCheckIcon,\n InfoIcon,\n TriangleAlertIcon,\n OctagonXIcon,\n Loader2Icon,\n XIcon,\n} from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { transition } from '@/tokens/animation';\n\n// ─── Tipos ────────────────────────────────────────────────────────────────────\n\nexport type ToastType = 'default' | 'success' | 'error' | 'warning' | 'info' | 'loading';\n\nexport interface ToastAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface ToastItem {\n id: string;\n type: ToastType;\n title: string;\n description?: string;\n duration: number;\n action?: ToastAction;\n}\n\n// ─── Store por instancia ──────────────────────────────────────────────────────\n// Cada Toaster crea su propio store — no hay singleton global.\n// La función toast() imperativa se conecta al store del Toaster\n// más cercano via contexto.\n\ntype Listener = (toasts: ToastItem[]) => void;\n\ninterface Store {\n toasts: ToastItem[];\n listeners: Listener[];\n add: (item: Omit<ToastItem, 'id'>, id?: string) => string;\n remove: (id: string) => void;\n subscribe: (l: Listener) => () => void;\n}\n\nconst DEFAULT_DURATION = 3000;\nconst MAX_TOASTS = 5;\n\nfunction createStore(): Store {\n const timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n const store: Store = {\n toasts: [],\n listeners: [],\n\n add(item, id) {\n const toastId = id ?? Math.random().toString(36).slice(2);\n const exists = store.toasts.find((t) => t.id === toastId);\n\n if (exists) {\n store.toasts = store.toasts.map((t) =>\n t.id === toastId ? { ...t, ...item, id: toastId } : t,\n );\n } else {\n store.toasts = [{ id: toastId, ...item }, ...store.toasts].slice(0, MAX_TOASTS);\n }\n\n store.listeners.forEach((l) => l([...store.toasts]));\n if (item.duration > 0) {\n clearTimeout(timers.get(toastId));\n timers.set(toastId, setTimeout(() => store.remove(toastId), item.duration));\n }\n return toastId;\n },\n\n remove(id) {\n clearTimeout(timers.get(id));\n timers.delete(id);\n store.toasts = store.toasts.filter((t) => t.id !== id);\n store.listeners.forEach((l) => l([...store.toasts]));\n },\n\n subscribe(listener) {\n store.listeners.push(listener);\n return () => {\n store.listeners = store.listeners.filter((l) => l !== listener);\n };\n },\n };\n return store;\n}\n\n// ─── Contexto ─────────────────────────────────────────────────────────────────\n\nconst ToastStoreContext = createContext<Store | null>(null);\n\nfunction useStore(): Store {\n const store = useContext(ToastStoreContext);\n if (!store) throw new Error('<Toaster /> must be mounted to use toast()');\n return store;\n}\n\n// ─── Hook público ─────────────────────────────────────────────────────────────\n\ntype ToastOptions = Partial<Omit<ToastItem, 'id' | 'title' | 'type'>> & { id?: string };\n\ninterface PromiseMessages<T> {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((err: unknown) => string);\n}\n\nexport function useToast() {\n const store = useStore();\n\n function create(title: string, options?: ToastOptions) {\n return store.add(\n { type: 'default', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n );\n }\n\n return Object.assign(create, {\n success: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'success', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n error: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'error', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n warning: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'warning', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n info: (title: string, options?: ToastOptions) =>\n store.add({ type: 'info', duration: DEFAULT_DURATION, title, ...options }, options?.id),\n\n loading: (title: string, options?: ToastOptions) =>\n store.add({ type: 'loading', duration: 0, title, ...options }, options?.id),\n\n dismiss: (id: string) => store.remove(id),\n\n promise: <T,>(promise: Promise<T>, messages: PromiseMessages<T>) => {\n const id = store.add({ type: 'loading', duration: 0, title: messages.loading });\n promise\n .then((data) => {\n const title =\n typeof messages.success === 'function'\n ? messages.success(data)\n : messages.success;\n store.add({ type: 'success', duration: DEFAULT_DURATION, title }, id);\n })\n .catch((err) => {\n const title =\n typeof messages.error === 'function' ? messages.error(err) : messages.error;\n store.add({ type: 'error', duration: DEFAULT_DURATION, title }, id);\n });\n return id;\n },\n });\n}\n\n// ─── Icono por tipo ───────────────────────────────────────────────────────────\n\nconst icons: Record<ToastType, ReactNode> = {\n default: null,\n success: <CircleCheckIcon className='size-4' />,\n error: <OctagonXIcon className='size-4' />,\n warning: <TriangleAlertIcon className='size-4' />,\n info: <InfoIcon className='size-4' />,\n loading: <Loader2Icon className='size-4 animate-spin' />,\n};\n\nconst iconWrapperStyles: Record<ToastType, string> = {\n default: '',\n success: 'rounded-lg bg-emerald-50 p-1.5 text-emerald-600',\n error: 'rounded-lg bg-red-50 p-1.5 text-red-600',\n warning: 'rounded-lg bg-amber-50 p-1.5 text-amber-600',\n info: 'rounded-lg bg-blue-50 p-1.5 text-blue-600',\n loading: 'rounded-lg bg-muted p-1.5 text-muted-foreground',\n};\n\nconst cardAccentStyles: Record<ToastType, string> = {\n default: '',\n success: 'border-l-[3px] border-l-emerald-400',\n error: 'border-l-[3px] border-l-red-500',\n warning: 'border-l-[3px] border-l-amber-400',\n info: 'border-l-[3px] border-l-blue-400',\n loading: 'border-l-[3px] border-l-muted-foreground/40',\n};\n\n// ─── ToastCard ────────────────────────────────────────────────────────────────\n\nfunction ToastCard({ id, type, title, description, action }: ToastItem) {\n const store = useStore();\n const icon = icons[type];\n\n return (\n <motion.li\n layout\n initial={{ opacity: 0, y: 16, scale: 0.96 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: -8, scale: 0.96 }}\n transition={transition.toast}\n className={cn(\n 'border-border bg-popover text-popover-foreground relative flex w-full max-w-[400px] min-w-[300px] items-start gap-3 overflow-hidden rounded-xl border px-4 py-3.5 shadow-lg',\n cardAccentStyles[type],\n )}>\n {icon && <span className={cn('shrink-0', iconWrapperStyles[type])}>{icon}</span>}\n\n <div className='flex min-w-0 flex-1 flex-col gap-1'>\n <p className='text-sm leading-snug font-semibold'>{title}</p>\n {description && (\n <p className='text-muted-foreground text-xs leading-snug'>{description}</p>\n )}\n {action && (\n <button\n onClick={action.onClick}\n className='bg-muted text-foreground hover:bg-muted/70 mt-1 self-start rounded-md px-2.5 py-1 text-xs font-medium transition-colors'>\n {action.label}\n </button>\n )}\n </div>\n\n <button\n onClick={() => store.remove(id)}\n aria-label='Dismiss'\n className='text-muted-foreground/60 hover:bg-muted hover:text-foreground shrink-0 rounded-full p-1 transition-colors'>\n <XIcon className='size-3.5' />\n </button>\n </motion.li>\n );\n}\n\n// ─── Toaster ──────────────────────────────────────────────────────────────────\n\nexport type ToasterPosition =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n\nconst positionStyles: Record<ToasterPosition, string> = {\n 'top-right': 'top-4 right-4 items-end',\n 'top-left': 'top-4 left-4 items-start',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2 items-center',\n 'bottom-right': 'bottom-4 right-4 items-end',\n 'bottom-left': 'bottom-4 left-4 items-start',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2 items-center',\n};\n\nexport interface ToasterProps {\n position?: ToasterPosition;\n richColors?: boolean;\n closeButton?: boolean;\n duration?: number;\n children?: ReactNode;\n}\n\nfunction Toaster({ position = 'bottom-right', children }: ToasterProps) {\n const [store] = useState<Store>(createStore);\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n useEffect(() => store.subscribe(setToasts), [store]);\n\n return (\n <ToastStoreContext.Provider value={store}>\n {children}\n <ol\n aria-live='polite'\n aria-label='Notifications'\n className={cn(\n 'pointer-events-none fixed z-[100] flex flex-col gap-2',\n positionStyles[position],\n )}>\n <AnimatePresence mode='sync' initial={false}>\n {toasts.map((t) => (\n <div key={t.id} className='pointer-events-auto'>\n <ToastCard {...t} />\n </div>\n ))}\n </AnimatePresence>\n </ol>\n </ToastStoreContext.Provider>\n );\n}\n\nexport { Toaster };\n","import { createContext, useContext, type CSSProperties, type ComponentProps } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { toggleVariants } from '../Toggle/toggle';\n\nconst ToggleGroupContext = createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n }\n>({\n size: 'md',\n variant: 'default',\n spacing: 2,\n orientation: 'horizontal',\n});\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 2,\n orientation = 'horizontal',\n children,\n ...props\n}: ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot='toggle-group'\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ '--gap': spacing } as CSSProperties}\n className={cn(\n 'group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch data-[spacing=0]:data-[variant=outline]:rounded-md',\n className,\n )}\n {...props}>\n <ToggleGroupContext.Provider value={{ variant, size, spacing, orientation }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant = 'default',\n size = 'md',\n ...props\n}: ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>) {\n const context = useContext(ToggleGroupContext);\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot='toggle-group-item'\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n 'shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-3 group-data-[spacing=0]/toggle-group:shadow-none focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-2.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-2.5 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:last:rounded-b-md group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t',\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className,\n )}\n {...props}>\n {children}\n </ToggleGroupPrimitive.Item>\n );\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst tooltipContentVariants = cva(\n 'z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-xl text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-lg data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n {\n variants: {\n variant: {\n default: 'bg-foreground text-background',\n primary: 'bg-primary text-primary-foreground',\n },\n size: {\n sm: 'px-2 py-1',\n md: 'px-3 py-1.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nconst tooltipArrowVariants = cva(\n 'z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] data-[side=left]:translate-x-[-1.5px] data-[side=right]:translate-x-[1.5px]',\n {\n variants: {\n variant: {\n default: 'bg-foreground fill-foreground',\n primary: 'bg-primary fill-primary',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nfunction TooltipProvider({\n delayDuration = 100,\n ...props\n}: ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot='tooltip-provider'\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\nfunction Tooltip({ ...props }: ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot='tooltip' {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot='tooltip-trigger' {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 6,\n variant = 'default',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof TooltipPrimitive.Content> &\n VariantProps<typeof tooltipContentVariants>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot='tooltip-content'\n data-variant={variant}\n data-size={size}\n sideOffset={sideOffset}\n className={cn(tooltipContentVariants({ variant, size }), className)}\n {...props}>\n {children}\n <TooltipPrimitive.Arrow className={cn(tooltipArrowVariants({ variant }))} />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, tooltipContentVariants };\n","import { type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nconst TEXT_SIZES = [12, 14, 16, 18, 20, 24, 28, 32, 40, 48] as const;\nconst TEXT_WEIGHTS = [100, 200, 300, 400, 500, 700, 800, 900] as const;\n\nexport type TextSize = (typeof TEXT_SIZES)[number];\nexport type TextWeight = (typeof TEXT_WEIGHTS)[number];\nexport type TextAs = 'p' | 'span' | 'label' | 'small' | 'strong' | 'em';\n\nexport interface TextProps extends Omit<HTMLAttributes<HTMLElement>, 'color'> {\n /** HTML element to render */\n as?: TextAs;\n /** Font size in pixels */\n size?: TextSize;\n /** Font weight */\n weight?: TextWeight;\n /** Italic style */\n italic?: boolean;\n /** Optional CSS color value */\n color?: string;\n /** Text content */\n children: ReactNode;\n}\n\nfunction Text({\n as: Tag = 'p',\n size = 16,\n weight = 400,\n italic = false,\n color,\n className,\n style,\n children,\n ...props\n}: TextProps) {\n return (\n <Tag\n data-slot='text'\n className={cn('leading-normal', className)}\n style={{\n fontFamily: \"'Helvetica Neue', sans-serif\",\n fontSize: `${size}px`,\n fontWeight: weight,\n fontStyle: italic ? 'italic' : 'normal',\n ...(color ? { color } : {}),\n ...style,\n }}\n {...(props as HTMLAttributes<HTMLElement>)}>\n {children}\n </Tag>\n );\n}\n\nexport { Text, TEXT_SIZES, TEXT_WEIGHTS };\n","import { createContext, useContext, useState, type ComponentProps } from 'react';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { XIcon } from 'lucide-react';\nimport { transition, ease, duration } from '@/tokens/animation';\n\n// ─── Contexto interno ─────────────────────────────────────────────────────────\n\nconst DialogContext = createContext(false);\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nfunction Dialog({ children, ...props }: ComponentProps<typeof DialogPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = useState(props.defaultOpen ?? false);\n\n const isOpen = props.open !== undefined ? props.open : internalOpen;\n\n return (\n <DialogContext.Provider value={isOpen}>\n <DialogPrimitive.Root\n data-slot='dialog'\n open={isOpen}\n onOpenChange={(v) => {\n setInternalOpen(v);\n props.onOpenChange?.(v);\n }}\n {...props}>\n {children}\n </DialogPrimitive.Root>\n </DialogContext.Provider>\n );\n}\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\nfunction DialogTrigger({ ...props }: ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot='dialog-trigger' {...props} />;\n}\n\n// ─── Portal — AnimatePresence vive aquí ──────────────────────────────────────\n\nfunction DialogPortal({ children, ...props }: ComponentProps<typeof DialogPrimitive.Portal>) {\n const isOpen = useContext(DialogContext);\n\n return (\n <DialogPrimitive.Portal data-slot='dialog-portal' forceMount {...props}>\n <AnimatePresence mode='sync'>{isOpen && children}</AnimatePresence>\n </DialogPrimitive.Portal>\n );\n}\n\n// ─── Close ───────────────────────────────────────────────────────────────────\n\nfunction DialogClose({ ...props }: ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot='dialog-close' {...props} />;\n}\n\n// ─── Overlay — fade independiente ────────────────────────────────────────────\n\nfunction DialogOverlay({ className, ...props }: ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay data-slot='dialog-overlay' asChild forceMount {...props}>\n <motion.div\n className={cn(\n 'fixed inset-0 isolate z-50 bg-black/30 supports-backdrop-filter:backdrop-blur-sm',\n className,\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: duration.normal, ease: ease.smooth }}\n />\n </DialogPrimitive.Overlay>\n );\n}\n\n// ─── Content — scale + fade + slideUp con spring ─────────────────────────────\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = false,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal>\n <DialogOverlay key='dialog-overlay' />\n <DialogPrimitive.Content\n key='dialog-content'\n data-slot='dialog-content'\n asChild\n forceMount\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 fixed top-1/2 left-1/2 z-50 flex max-h-[85vh] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-lg text-sm shadow-xl ring-1 outline-none sm:max-w-sm',\n className,\n )}\n {...props}>\n <motion.div\n className='flex max-h-[85vh] flex-col'\n initial={{ opacity: 0, scale: 0.96, y: 8 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.96, y: 4 }}\n transition={transition.modal}>\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot='dialog-close' asChild>\n <Button\n variant='ghost'\n className='absolute top-4 right-4'\n size='icon-sm'>\n <XIcon />\n <span className='sr-only'>Close</span>\n </Button>\n </DialogPrimitive.Close>\n )}\n </motion.div>\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nfunction DialogHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='dialog-header'\n className={cn('flex shrink-0 flex-col gap-3 px-6 pt-6', className)}\n {...props}\n />\n );\n}\n\nfunction DialogBody({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='dialog-body'\n className={cn('flex-1 overflow-y-auto px-6 pb-6', className)}\n {...props}\n />\n );\n}\n\n// ─── Footer ──────────────────────────────────────────────────────────────────\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: ComponentProps<'div'> & {\n showCloseButton?: boolean;\n}) {\n return (\n <div\n data-slot='dialog-footer'\n className={cn(\n 'border-border bg-muted/40 flex shrink-0 flex-wrap items-center justify-end gap-2 rounded-b-lg border-t px-6 pt-4 pb-4',\n className,\n )}\n {...props}>\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant='secondary'>Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n );\n}\n\n// ─── Title ───────────────────────────────────────────────────────────────────\n\nfunction DialogTitle({ className, ...props }: ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot='dialog-title'\n className={cn('font-heading text-lg leading-none font-bold', className)}\n {...props}\n />\n );\n}\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nfunction DialogDescription({\n className,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot='dialog-description'\n className={cn(\n 'text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogBody,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import { createContext, useContext, useState, type ComponentProps } from 'react';\nimport { AlertDialog as AlertDialogPrimitive } from 'radix-ui';\nimport { XIcon } from 'lucide-react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { transition, ease, duration } from '@/tokens/animation';\n\n// ─── Contexto interno — comparte isOpen con el Portal sin tocar el Trigger ───\n\nconst AlertDialogContext = createContext(false);\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nfunction AlertDialog({\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = useState(props.defaultOpen ?? false);\n\n const isOpen = props.open !== undefined ? props.open : internalOpen;\n\n return (\n <AlertDialogContext.Provider value={isOpen}>\n <AlertDialogPrimitive.Root\n data-slot='alert-dialog'\n open={isOpen}\n onOpenChange={(v) => {\n setInternalOpen(v);\n props.onOpenChange?.(v);\n }}\n {...props}>\n {children}\n </AlertDialogPrimitive.Root>\n </AlertDialogContext.Provider>\n );\n}\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\nfunction AlertDialogTrigger({\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot='alert-dialog-trigger' {...props} />;\n}\n\n// ─── Portal — AnimatePresence vive aquí, no en el root ───────────────────────\n\nfunction AlertDialogPortal({\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n const isOpen = useContext(AlertDialogContext);\n\n return (\n <AlertDialogPrimitive.Portal data-slot='alert-dialog-portal' forceMount {...props}>\n <AnimatePresence mode='sync'>{isOpen && children}</AnimatePresence>\n </AlertDialogPrimitive.Portal>\n );\n}\n\n// ─── Overlay — fade independiente ────────────────────────────────────────────\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot='alert-dialog-overlay'\n asChild\n forceMount\n {...props}>\n <motion.div\n className={cn(\n 'fixed inset-0 z-50 bg-black/30 supports-backdrop-filter:backdrop-blur-sm',\n className,\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: duration.normal, ease: ease.smooth }}\n />\n </AlertDialogPrimitive.Overlay>\n );\n}\n\n// ─── Content — scale + fade + slideUp con spring ─────────────────────────────\n\nfunction AlertDialogContent({\n className,\n size = 'default',\n variant = 'default',\n showClose = false,\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: 'default' | 'sm';\n variant?: 'default' | 'dark-glass';\n showClose?: boolean;\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay\n key='alert-dialog-overlay'\n className={cn(variant === 'dark-glass' && 'bg-primary/60 backdrop-blur-md')}\n />\n <AlertDialogPrimitive.Content\n key='alert-dialog-content'\n data-slot='alert-dialog-content'\n data-size={size}\n data-variant={variant}\n asChild\n forceMount\n className={cn(\n 'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg p-6 shadow-xl outline-none',\n 'data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md',\n variant === 'default' &&\n 'bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 ring-1',\n variant === 'dark-glass' &&\n 'bg-primary/80 text-white ring-1 ring-white/10 backdrop-blur-xl',\n className,\n )}\n {...props}>\n <motion.div\n initial={{ opacity: 0, scale: 0.96, y: 8 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.96, y: 4 }}\n transition={transition.modal}>\n {showClose && (\n <AlertDialogPrimitive.Cancel asChild>\n <button className='text-muted-foreground hover:bg-muted hover:text-foreground absolute top-4 right-4 inline-flex size-6 items-center justify-center rounded-full transition-colors focus:outline-none'>\n <XIcon className='size-3.5' />\n <span className='sr-only'>Close</span>\n </button>\n </AlertDialogPrimitive.Cancel>\n )}\n {children}\n </motion.div>\n </AlertDialogPrimitive.Content>\n </AlertDialogPortal>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-header'\n className={cn(\n 'flex flex-col items-center gap-2 text-center has-data-[slot=alert-dialog-media]:items-center sm:group-data-[size=default]/alert-dialog-content:items-start sm:group-data-[size=default]/alert-dialog-content:text-left',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Footer ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-footer'\n className={cn(\n 'flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Media ───────────────────────────────────────────────────────────────────\n\nfunction AlertDialogMedia({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-media'\n className={cn(\n \"bg-muted inline-flex size-16 items-center justify-center rounded-xl sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Title ───────────────────────────────────────────────────────────────────\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot='alert-dialog-title'\n className={cn('font-heading text-lg font-bold', className)}\n {...props}\n />\n );\n}\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot='alert-dialog-description'\n className={cn(\n 'text-muted-foreground *:[a]:hover:text-foreground text-xs text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Action ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogAction({\n className,\n variant = 'cancel',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <AlertDialogPrimitive.Action data-slot='alert-dialog-action' asChild {...props}>\n <Button variant={variant} size={size} className={cn(className)}>\n {children}\n </Button>\n </AlertDialogPrimitive.Action>\n );\n}\n\n// ─── Cancel ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogCancel({\n className,\n variant = 'ghost',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <AlertDialogPrimitive.Cancel data-slot='alert-dialog-cancel' asChild {...props}>\n <Button variant={variant} size={size} className={cn(className)}>\n {children}\n </Button>\n </AlertDialogPrimitive.Cancel>\n );\n}\n\n// ─── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n","import { type ComponentProps } from 'react';\nimport { Accordion as AccordionPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon } from 'lucide-react';\n\nfunction Accordion({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Root>) {\n return (\n <AccordionPrimitive.Root\n data-slot='accordion'\n className={cn(\n 'divide-foreground/20 flex w-full flex-col divide-y overflow-hidden rounded-2xl border',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot='accordion-item'\n className={cn('data-[state=open]:bg-muted/50 overflow-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className='flex'>\n <AccordionPrimitive.Trigger\n data-slot='accordion-trigger'\n className={cn(\n 'flex flex-1 items-center justify-between gap-4 px-4 py-4 text-left text-sm font-medium transition-all outline-none hover:underline disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}>\n {children}\n <ChevronDownIcon className='text-muted-foreground size-4 shrink-0 transition-transform duration-200' />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot='accordion-content'\n className='text-muted-foreground data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm'\n {...props}>\n <div\n className={cn(\n '[&_a]:hover:text-foreground px-4 pt-0 pb-4 [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4',\n className,\n )}>\n {children}\n </div>\n </AccordionPrimitive.Content>\n );\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import { useRef, useState } from 'react';\nimport { CheckIcon, ChevronsUpDownIcon, SearchIcon } from 'lucide-react';\nimport { Command } from 'cmdk';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Search matching strategy:\n * - `fuzzy` — cmdk's default subsequence scoring (typo-tolerant; `205` also\n * matches `2005`, `1205`, etc.).\n * - `substring` — option matches when its value or label contains the query.\n * - `prefix` — option matches when its value/label, or any word within them,\n * starts with the query. Best for numeric/alphanumeric codes.\n */\nexport type ComboboxMatchMode = 'fuzzy' | 'substring' | 'prefix';\n\n// cmdk filter: receives the item `value` and its `keywords` (here the label).\n// Returns a score > 0 to keep the item, 0 to filter it out.\nfunction createMatchFilter(mode: Exclude<ComboboxMatchMode, 'fuzzy'>) {\n return (value: string, search: string, keywords: string[] = []): number => {\n const query = search.toLowerCase().trim();\n if (!query) return 1;\n\n const haystacks = [value, ...keywords].map((s) => s.toLowerCase());\n const matched =\n mode === 'substring'\n ? haystacks.some((h) => h.includes(query))\n : haystacks.some(\n (h) =>\n h.startsWith(query) || h.split(/\\s+/).some((word) => word.startsWith(query)),\n );\n\n return matched ? 1 : 0;\n };\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyMessage?: string;\n disabled?: boolean;\n className?: string;\n /**\n * Portal target for the dropdown. Pass the Dialog content node when the\n * Combobox is rendered inside a modal Dialog so the list stays within the\n * Dialog's scroll-lock shard — otherwise wheel/touch scrolling is blocked.\n */\n container?: HTMLElement | null;\n /**\n * Search matching strategy. Defaults to `fuzzy` (cmdk's built-in behavior).\n * Use `prefix` or `substring` for numeric/alphanumeric codes where fuzzy\n * subsequence matching surfaces unexpected results.\n */\n matchMode?: ComboboxMatchMode;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction Combobox({\n options,\n value,\n onValueChange,\n placeholder = 'Select an option...',\n searchPlaceholder = 'Search...',\n emptyMessage = 'No results found.',\n disabled = false,\n className,\n container,\n matchMode = 'fuzzy',\n}: ComboboxProps) {\n const [open, setOpen] = useState(false);\n const listRef = useRef<HTMLDivElement>(null);\n\n const selected = options.find((opt) => opt.value === value);\n\n // `undefined` lets cmdk fall back to its default fuzzy filter.\n const filter = matchMode === 'fuzzy' ? undefined : createMatchFilter(matchMode);\n\n // On each query change cmdk reorders matches (best first) but never resets\n // the list's scroll position, so a list previously scrolled down keeps the\n // top match hidden. Snap back to the top once cmdk has committed the new\n // order (rAF runs after its layout effects).\n const handleSearchChange = () => {\n requestAnimationFrame(() => listRef.current?.scrollTo({ top: 0 }));\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant='secondary'\n disabled={disabled}\n aria-expanded={open}\n className={cn(\n 'border-input w-64 justify-between border bg-transparent text-sm font-normal shadow-xs',\n 'hover:text-foreground focus-visible:ring-ring/30 hover:bg-transparent',\n selected ? 'text-foreground' : 'text-muted-foreground',\n className,\n )}>\n <span className='truncate'>{selected ? selected.label : placeholder}</span>\n <ChevronsUpDownIcon size={14} className='text-muted-foreground shrink-0' />\n </Button>\n </PopoverTrigger>\n <PopoverContent className='w-64 rounded-lg p-0' align='start' container={container}>\n <Command className='rounded-lg' filter={filter}>\n <div className='border-border flex items-center gap-2 border-b px-3'>\n <SearchIcon size={14} className='text-muted-foreground shrink-0' />\n <Command.Input\n placeholder={searchPlaceholder}\n onValueChange={handleSearchChange}\n className='placeholder:text-muted-foreground flex h-9 w-full bg-transparent py-2 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50'\n />\n </div>\n <Command.List ref={listRef} className='max-h-56 overflow-y-auto p-1'>\n <Command.Empty className='text-muted-foreground py-4 text-center text-sm'>\n {emptyMessage}\n </Command.Empty>\n {options.map((option) => (\n <Command.Item\n key={option.value}\n value={option.value}\n keywords={[option.label]}\n disabled={option.disabled}\n onSelect={() => {\n onValueChange?.(option.value === value ? '' : option.value);\n setOpen(false);\n }}\n className={cn(\n 'relative flex cursor-pointer items-center justify-between rounded-md px-2 py-1.5 text-sm outline-none select-none',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n 'hover:bg-accent hover:text-accent-foreground',\n )}>\n <span>{option.label}</span>\n {value === option.value && (\n <CheckIcon\n size={14}\n className='text-[var(--color-main-blue-primary)]'\n />\n )}\n </Command.Item>\n ))}\n </Command.List>\n </Command>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { Combobox };\n","import { type ComponentProps } from 'react';\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { CheckIcon, ChevronRightIcon } from 'lucide-react';\n\nfunction DropdownMenu({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root {...props} />;\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal {...props} />;\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot='dropdown-menu-trigger' {...props} />;\n}\n\nfunction DropdownMenuContent({\n className,\n align = 'start',\n sideOffset = 4,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot='dropdown-menu-content'\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-48 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-3xl p-1.5 shadow-lg ring-1 duration-100 data-[state=closed]:overflow-hidden',\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot='dropdown-menu-group' {...props} />;\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot='dropdown-menu-item'\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:*:[svg]:text-destructive relative flex cursor-default items-center gap-2.5 rounded-2xl px-3 py-2 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot='dropdown-menu-checkbox-item'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground relative flex cursor-default items-center gap-2.5 rounded-2xl py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}>\n <span\n className='pointer-events-none absolute right-2 flex items-center justify-center'\n data-slot='dropdown-menu-checkbox-item-indicator'>\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon aria-hidden='true' />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot='dropdown-menu-radio-group' {...props} />;\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot='dropdown-menu-radio-item'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground relative flex cursor-default items-center gap-2.5 rounded-2xl py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <span\n className='pointer-events-none absolute right-2 flex items-center justify-center'\n data-slot='dropdown-menu-radio-item-indicator'>\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon aria-hidden='true' />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot='dropdown-menu-label'\n data-inset={inset}\n className={cn('text-muted-foreground px-3 py-2.5 text-xs data-inset:pl-9.5', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot='dropdown-menu-separator'\n className={cn('bg-border/50 -mx-1.5 my-1.5 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='dropdown-menu-shortcut'\n className={cn(\n 'text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSub({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot='dropdown-menu-sub' {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot='dropdown-menu-sub-trigger'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center gap-2 rounded-2xl px-3 py-2 text-sm font-medium outline-hidden select-none data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n {children}\n <ChevronRightIcon className='ml-auto' aria-hidden='true' />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot='dropdown-menu-sub-content'\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 min-w-36 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-3xl p-1.5 shadow-lg ring-1 duration-100',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","import { UploadIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext } from 'react';\nimport type { DropEvent, DropzoneOptions, FileRejection } from 'react-dropzone';\nimport { useDropzone } from 'react-dropzone';\nimport { cva } from 'class-variance-authority';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\n\ninterface DropzoneContextType {\n src?: File[];\n accept?: DropzoneOptions['accept'];\n maxSize?: DropzoneOptions['maxSize'];\n minSize?: DropzoneOptions['minSize'];\n maxFiles?: DropzoneOptions['maxFiles'];\n}\n\nconst renderBytes = (bytes: number) => {\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n let size = bytes;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(2)}${units[unitIndex]}`;\n};\n\nconst DropzoneContext = createContext<DropzoneContextType | undefined>(undefined);\n\nconst dropzoneVariants = cva('', {\n variants: {\n border: {\n default: 'border border-solid border-foreground/15',\n dashed: 'border-dashed border-foreground/50',\n },\n },\n defaultVariants: {\n border: 'default',\n },\n});\n\nexport type DropzoneProps = Omit<DropzoneOptions, 'onDrop'> & {\n src?: File[];\n className?: string;\n border?: 'default' | 'dashed';\n onDrop?: (acceptedFiles: File[], fileRejections: FileRejection[], event: DropEvent) => void;\n children?: ReactNode;\n};\n\nexport const Dropzone = ({\n accept,\n maxFiles = 1,\n maxSize,\n minSize,\n onDrop,\n onError,\n disabled,\n src,\n className,\n children,\n border,\n ...props\n}: DropzoneProps) => {\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n accept,\n maxFiles,\n maxSize,\n minSize,\n onError,\n disabled,\n onDrop: (acceptedFiles, fileRejections, event) => {\n if (fileRejections.length > 0) {\n const message = fileRejections.at(0)?.errors.at(0)?.message;\n onError?.(new Error(message));\n }\n if (acceptedFiles.length > 0) {\n onDrop?.(acceptedFiles, fileRejections, event);\n }\n },\n ...props,\n });\n\n return (\n <DropzoneContext.Provider\n key={JSON.stringify(src)}\n value={{ src, accept, maxSize, minSize, maxFiles }}>\n <Button\n data-slot='dropzone'\n data-border={border ?? 'default'}\n className={cn(\n 'cursor-auto relative h-auto w-full flex-col overflow-hidden p-8',\n dropzoneVariants({ border }),\n isDragActive && 'bg-foreground/10 outline-none',\n className,\n )}\n disabled={disabled}\n type='button'\n variant='ghost'\n {...getRootProps()}>\n <input {...getInputProps()} disabled={disabled} />\n {children}\n </Button>\n </DropzoneContext.Provider>\n );\n};\n\nconst useDropzoneContext = () => {\n const context = useContext(DropzoneContext);\n\n if (!context) {\n throw new Error('useDropzoneContext must be used within a Dropzone');\n }\n\n return context;\n};\n\nexport interface DropzoneContentProps {\n children?: ReactNode;\n className?: string;\n}\n\nconst maxLabelItems = 3;\n\nexport const DropzoneContent = ({ children, className }: DropzoneContentProps) => {\n const { src } = useDropzoneContext();\n\n if (!src) {\n return null;\n }\n\n if (children) {\n return children;\n }\n\n return (\n <div className={cn('flex flex-col items-center justify-center', className)}>\n <div className='bg-muted text-muted-foreground flex size-8 items-center justify-center rounded-md'>\n <UploadIcon size={16} />\n </div>\n <p className='text-foreground my-2 w-full truncate text-sm font-medium'>\n {src.length > maxLabelItems\n ? `${new Intl.ListFormat('en').format(\n src.slice(0, maxLabelItems).map((file) => file.name),\n )} and ${src.length - maxLabelItems} more`\n : new Intl.ListFormat('en').format(src.map((file) => file.name))}\n </p>\n <p className='text-muted-foreground w-full text-xs font-normal text-wrap'>\n Drag and drop or click to replace\n </p>\n </div>\n );\n};\n\nexport interface DropzoneEmptyStateProps {\n children?: ReactNode;\n className?: string;\n}\n\nexport const DropzoneEmptyState = ({ children, className }: DropzoneEmptyStateProps) => {\n const { src, accept, maxSize, minSize, maxFiles } = useDropzoneContext();\n\n if (src) {\n return null;\n }\n\n if (children) {\n return children;\n }\n\n let caption = '';\n\n if (accept) {\n caption += 'Accepts ';\n caption += new Intl.ListFormat('en').format(Object.keys(accept));\n }\n\n if (minSize && maxSize) {\n caption += ` between ${renderBytes(minSize)} and ${renderBytes(maxSize)}`;\n } else if (minSize) {\n caption += ` at least ${renderBytes(minSize)}`;\n } else if (maxSize) {\n caption += ` less than ${renderBytes(maxSize)}`;\n }\n\n return (\n <div className={cn('flex flex-col items-center justify-center', className)}>\n <div className='bg-muted text-muted-foreground flex size-8 items-center justify-center rounded-md'>\n <UploadIcon size={16} />\n </div>\n <p className='text-foreground my-2 w-full text-center text-sm font-medium text-wrap'>\n Upload {maxFiles === 1 ? 'a file' : 'files'}\n </p>\n <p className='text-muted-foreground text-center text-xs font-normal text-wrap'>\n Drag and drop or click to upload\n </p>\n\n {caption && (\n <p className='text-muted-foreground text-xs font-normal text-wrap'>{caption}.</p>\n )}\n </div>\n );\n};\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nfunction Empty({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty'\n className={cn(\n 'flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-header'\n className={cn('flex max-w-sm flex-col items-center gap-2', className)}\n {...props}\n />\n );\n}\n\nconst emptyMediaVariants = cva(\n 'mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"flex size-9 shrink-0 items-center justify-center rounded-lg bg-foreground/10 text-muted-foreground [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction EmptyMedia({\n className,\n variant = 'default',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot='empty-icon'\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-title'\n className={cn('cn-font-heading text-sm font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return (\n <div\n data-slot='empty-description'\n className={cn(\n 'text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-content'\n className={cn(\n 'flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Empty, EmptyHeader, EmptyTitle, EmptyDescription, EmptyContent, EmptyMedia };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { Separator } from '@/components/ui/Separator/separator';\n\nfunction ItemGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n role='list'\n data-slot='item-group'\n className={cn(\n 'group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemSeparator({ className, ...props }: ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot='item-separator'\n orientation='horizontal'\n className={cn('my-2', className)}\n {...props}\n />\n );\n}\n\nconst itemVariants = cva(\n 'group/item flex w-full flex-wrap items-center rounded-2xl border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted',\n {\n variants: {\n variant: {\n default: 'border-foreground/5 bg-foreground/5',\n outline: 'border-foreground/30',\n muted: 'border-transparent bg-background dark:text-black',\n highlighted: 'border-orange-500 bg-orange-50 dark:bg-orange-500/10',\n },\n size: {\n default: 'gap-3.5 px-4 py-3.5',\n sm: 'gap-3.5 px-3.5 py-3',\n xs: 'gap-2.5 px-3 py-2.5 in-data-[slot=dropdown-menu-content]:p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Item({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof itemVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'div';\n return (\n <Comp\n data-slot='item'\n data-variant={variant}\n data-size={size}\n className={cn(itemVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nconst itemMediaVariants = cva(\n 'flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"[&_svg:not([class*='size-'])]:size-4\",\n image: 'size-10 overflow-hidden rounded-xl group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 group-data-[size=xs]/item:rounded-lg [&_img]:size-full [&_img]:object-cover',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction ItemMedia({\n className,\n variant = 'default',\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof itemMediaVariants>) {\n return (\n <div\n data-slot='item-media'\n data-variant={variant}\n className={cn(itemMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction ItemContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-content'\n className={cn(\n 'flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0.5 [&+[data-slot=item-content]]:flex-none',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemTitle({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-title'\n className={cn(\n 'line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='item-description'\n className={cn(\n 'text-muted-foreground [&>a:hover]:text-primary line-clamp-2 text-left text-sm font-normal [&>a]:underline [&>a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemActions({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-actions'\n className={cn('flex items-center gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction ItemHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-header'\n className={cn('flex basis-full items-center justify-between gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction ItemFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-footer'\n className={cn('flex basis-full items-center justify-between gap-2', className)}\n {...props}\n />\n );\n}\n\nexport {\n Item,\n ItemMedia,\n ItemContent,\n ItemActions,\n ItemGroup,\n ItemSeparator,\n ItemTitle,\n ItemDescription,\n ItemHeader,\n ItemFooter,\n};\n","import { type ComponentProps } from 'react';\nimport { RadioGroup as RadioGroupPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction RadioGroup({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot='radio-group'\n className={cn('grid w-full gap-3', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot='radio-group-item'\n className={cn(\n 'group/radio-group-item peer border-input/60 bg-input/20 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary relative flex aspect-square size-4 shrink-0 rounded-full border outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3',\n className,\n )}\n {...props}>\n <RadioGroupPrimitive.Indicator\n data-slot='radio-group-indicator'\n className='flex size-4 items-center justify-center'>\n <span className='bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full dark:size-2.5' />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from '@/lib/variants';\nimport { cn } from '@/lib/utils';\nimport { Loader2Icon, LoaderIcon } from 'lucide-react';\n\n// ---------------------------------------------------------------------------\n// Shared size map — reutilizado por los tres componentes\n// ---------------------------------------------------------------------------\n\nconst spinnerSizes = {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-6',\n xl: 'size-8',\n} as const;\n\n// ---------------------------------------------------------------------------\n// Spinner — Loader2Icon (círculo con corte)\n// ---------------------------------------------------------------------------\n\nconst spinnerVariants = cva('animate-spin shrink-0', {\n variants: {\n size: spinnerSizes,\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerProps\n extends Omit<ComponentProps<'svg'>, 'color'>, VariantProps<typeof spinnerVariants> {}\n\nfunction Spinner({ className, size, color, ...props }: SpinnerProps) {\n return (\n <Loader2Icon\n data-slot='spinner'\n role='status'\n aria-label='Loading'\n className={cn(spinnerVariants({ size, color }), className)}\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// SpinnerLoader — LoaderIcon (líneas rotatorias)\n// ---------------------------------------------------------------------------\n\nconst spinnerLoaderVariants = cva('animate-spin shrink-0', {\n variants: {\n size: spinnerSizes,\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerLoaderProps\n extends\n Omit<ComponentProps<'svg'>, 'color'>,\n VariantProps<typeof spinnerLoaderVariants> {}\n\nfunction SpinnerLoader({ className, size, color, ...props }: SpinnerLoaderProps) {\n return (\n <LoaderIcon\n data-slot='spinner-loader'\n role='status'\n aria-label='Loading'\n className={cn(spinnerLoaderVariants({ size, color }), className)}\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// SpinnerDots — tres puntos con animación de ola\n// ---------------------------------------------------------------------------\n\nconst spinnerDotsVariants = cva('flex items-center', {\n variants: {\n size: {\n sm: 'gap-[2px] [&>span]:size-1.5',\n md: 'gap-[3px] [&>span]:size-2',\n lg: 'gap-1 [&>span]:size-2.5',\n xl: 'gap-1.5 [&>span]:size-3',\n },\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerDotsProps extends VariantProps<typeof spinnerDotsVariants> {\n className?: string;\n}\n\nfunction SpinnerDots({ className, size, color }: SpinnerDotsProps) {\n return (\n <span\n data-slot='spinner-dots'\n role='status'\n aria-label='Loading'\n className={cn(spinnerDotsVariants({ size, color }), className)}>\n {[0, 1, 2].map((i) => (\n <span\n key={i}\n className='rounded-full bg-current'\n style={{\n animation: 'dotWave 1.2s ease-in-out infinite',\n animationDelay: `${i * 0.2}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes dotWave {\n 0%, 60%, 100% { transform: translateY(0); opacity: 0.3; }\n 30% { transform: translateY(-4px); opacity: 1; }\n }\n `}</style>\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n\nexport {\n Spinner,\n SpinnerLoader,\n SpinnerDots,\n spinnerVariants,\n spinnerLoaderVariants,\n spinnerDotsVariants,\n};\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-4xl border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/80',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:bg-transparent dark:hover:bg-input/30',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',\n ghost: 'hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50',\n destructive:\n 'bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40',\n link: 'text-primary underline-offset-4 hover:underline',\n\n },\n size: {\n default:\n 'h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5',\n xs: \"h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3\",\n sm: 'h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n lg: 'h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',\n icon: 'size-9',\n 'icon-xs': \"size-6 [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-8',\n 'icon-lg': 'size-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot='button'\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot='input'\n className={cn(\n 'bg-input/50 file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 h-9 w-full min-w-0 rounded-3xl border border-transparent px-3 py-1 text-base transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { type ComponentProps } from 'react';\nimport { Select as SelectPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon, CheckIcon, ChevronUpIcon } from 'lucide-react';\n\nfunction Select({ ...props }: ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot='select' {...props} />;\n}\n\nfunction SelectGroup({ className, ...props }: ComponentProps<typeof SelectPrimitive.Group>) {\n return (\n <SelectPrimitive.Group\n data-slot='select-group'\n className={cn('scroll-my-1.5 p-1.5', className)}\n {...props}\n />\n );\n}\n\nfunction SelectValue({ ...props }: ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot='select-value' {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot='select-trigger'\n data-size={size}\n className={cn(\n \"bg-input/50 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 flex w-fit items-center justify-between gap-1.5 rounded-3xl border border-transparent px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow,background-color] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className='text-muted-foreground pointer-events-none size-4' />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'item-aligned',\n align = 'center',\n ...props\n}: ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot='select-content'\n data-align-trigger={position === 'item-aligned'}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-3xl shadow-lg ring-1 duration-100 data-[align-trigger=true]:animate-none',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className,\n )}\n position={position}\n align={align}\n {...props}>\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n data-position={position}\n className={cn(\n 'data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)',\n position === 'popper' && '',\n )}>\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot='select-label'\n className={cn('text-muted-foreground px-3 py-2.5 text-xs', className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n className={cn(\n \"rounded-2x3 focus:bg-muted not-data-[variant=destructive]:focus:**:text-accent-muted-foreground relative flex w-full cursor-default items-center gap-2 py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}>\n <span className='pointer-events-none absolute right-2 flex size-4 items-center justify-center'>\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className='pointer-events-none' />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot='select-separator'\n className={cn('bg-border pointer-events-none -mx-1.5 my-1.5 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot='select-scroll-up-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <ChevronUpIcon />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot='select-scroll-down-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <ChevronDownIcon />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import Color from 'color';\nimport { PipetteIcon } from 'lucide-react';\nimport { Slider } from 'radix-ui';\nimport {\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Button } from '@/components/compounds/ColorPicker/button';\nimport { Input } from '@/components/compounds/ColorPicker/input';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/compounds/ColorPicker/select';\nimport { cn } from '@/lib/utils';\n\ninterface ColorPickerContextValue {\n hue: number;\n saturation: number;\n lightness: number;\n alpha: number;\n mode: string;\n setHue: (hue: number) => void;\n setSaturation: (saturation: number) => void;\n setLightness: (lightness: number) => void;\n setAlpha: (alpha: number) => void;\n setMode: (mode: string) => void;\n}\n\nconst ColorPickerContext = createContext<ColorPickerContextValue | undefined>(undefined);\n\nexport const useColorPicker = () => {\n const context = useContext(ColorPickerContext);\n\n if (!context) {\n throw new Error('useColorPicker must be used within a ColorPickerProvider');\n }\n\n return context;\n};\n\nexport type ColorPickerProps = Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n value?: Parameters<typeof Color>[0];\n defaultValue?: Parameters<typeof Color>[0];\n onChange?: (value: [number, number, number, number]) => void;\n};\n\nexport const ColorPicker = ({\n value,\n defaultValue = '#000000',\n onChange,\n className,\n ...props\n}: ColorPickerProps) => {\n const baseColor = value !== undefined ? Color(value) : Color(defaultValue);\n\n const [hue, setHue] = useState(baseColor.hue());\n const [saturation, setSaturation] = useState(baseColor.saturationl());\n const [lightness, setLightness] = useState(baseColor.lightness());\n const [alpha, setAlpha] = useState(baseColor.alpha() * 100);\n const [mode, setMode] = useState('hex');\n\n const onChangeRef = useRef(onChange);\n const mounted = useRef(false);\n useEffect(() => {\n onChangeRef.current = onChange;\n });\n\n // Update color when controlled value changes\n useEffect(() => {\n if (value) {\n const color = Color(value);\n\n setHue(color.hue());\n setSaturation(color.saturationl());\n setLightness(color.lightness());\n setAlpha(color.alpha() * 100);\n }\n }, [value]);\n\n // Notify parent of changes — onChange ref avoids infinite loop when caller passes inline arrow fn\n useEffect(() => {\n if (!mounted.current) {\n mounted.current = true;\n return;\n }\n if (onChangeRef.current) {\n const color = Color.hsl(hue, saturation, lightness).alpha(alpha / 100);\n const rgba = color.rgb().array();\n\n onChangeRef.current([rgba[0], rgba[1], rgba[2], alpha / 100]);\n }\n }, [hue, saturation, lightness, alpha]);\n\n return (\n <ColorPickerContext.Provider\n value={{\n hue,\n saturation,\n lightness,\n alpha,\n mode,\n setHue,\n setSaturation,\n setLightness,\n setAlpha,\n setMode,\n }}>\n <div className={cn('flex size-full flex-col gap-4', className)} {...props} />\n </ColorPickerContext.Provider>\n );\n};\n\nexport type ColorPickerSelectionProps = HTMLAttributes<HTMLDivElement>;\n\nexport const ColorPickerSelection = memo(({ className, ...props }: ColorPickerSelectionProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [positionX, setPositionX] = useState(0);\n const [positionY, setPositionY] = useState(0);\n const { hue, setSaturation, setLightness } = useColorPicker();\n\n const backgroundGradient = useMemo(() => {\n return `linear-gradient(0deg, rgba(0,0,0,1), rgba(0,0,0,0)),\n linear-gradient(90deg, rgba(255,255,255,1), rgba(255,255,255,0)),\n hsl(${hue}, 100%, 50%)`;\n }, [hue]);\n\n const handlePointerMove = useCallback(\n (event: PointerEvent) => {\n if (!(isDragging && containerRef.current)) {\n return;\n }\n const rect = containerRef.current.getBoundingClientRect();\n const x = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));\n const y = Math.max(0, Math.min(1, (event.clientY - rect.top) / rect.height));\n setPositionX(x);\n setPositionY(y);\n setSaturation(x * 100);\n const topLightness = x < 0.01 ? 100 : 50 + 50 * (1 - x);\n const lightness = topLightness * (1 - y);\n\n setLightness(lightness);\n },\n [isDragging, setSaturation, setLightness],\n );\n\n useEffect(() => {\n const handlePointerUp = () => setIsDragging(false);\n\n if (isDragging) {\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n }\n\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n };\n }, [isDragging, handlePointerMove]);\n\n return (\n <div\n className={cn('relative size-full cursor-crosshair rounded', className)}\n onPointerDown={(e) => {\n e.preventDefault();\n setIsDragging(true);\n handlePointerMove(e.nativeEvent);\n }}\n ref={containerRef}\n style={{\n background: backgroundGradient,\n }}\n {...props}>\n <div\n className='pointer-events-none absolute h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white'\n style={{\n left: `${positionX * 100}%`,\n top: `${positionY * 100}%`,\n boxShadow: '0 0 0 1px rgba(0,0,0,0.5)',\n }}\n />\n </div>\n );\n});\n\nColorPickerSelection.displayName = 'ColorPickerSelection';\n\nexport type ColorPickerHueProps = ComponentProps<typeof Slider.Root>;\n\nexport const ColorPickerHue = ({ className, ...props }: ColorPickerHueProps) => {\n const { hue, setHue } = useColorPicker();\n\n return (\n <Slider.Root\n className={cn('relative flex h-4 w-full touch-none', className)}\n max={360}\n onValueChange={([hue]) => setHue(hue)}\n step={1}\n value={[hue]}\n {...props}>\n <Slider.Track className='relative my-0.5 h-3 w-full grow rounded-full bg-[linear-gradient(90deg,#FF0000,#FFFF00,#00FF00,#00FFFF,#0000FF,#FF00FF,#FF0000)]'>\n <Slider.Range className='absolute h-full' />\n </Slider.Track>\n <Slider.Thumb className='border-primary/50 bg-background focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50' />\n </Slider.Root>\n );\n};\n\nexport type ColorPickerAlphaProps = ComponentProps<typeof Slider.Root>;\n\nexport const ColorPickerAlpha = ({ className, ...props }: ColorPickerAlphaProps) => {\n const { alpha, setAlpha, hue, saturation, lightness } = useColorPicker();\n const solidColor = Color.hsl(hue, saturation, lightness).hex();\n\n return (\n <Slider.Root\n className={cn('relative flex h-4 w-full touch-none', className)}\n max={100}\n onValueChange={([alpha]) => setAlpha(alpha)}\n step={1}\n value={[alpha]}\n {...props}>\n <Slider.Track\n className='relative my-0.5 h-3 w-full grow rounded-full'\n style={{\n background:\n 'url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==\") left center',\n }}>\n <div\n className='absolute inset-0 rounded-full'\n style={{ background: `linear-gradient(to right, transparent, ${solidColor})` }}\n />\n <Slider.Range className='absolute h-full rounded-full bg-transparent' />\n </Slider.Track>\n <Slider.Thumb\n className='border-primary/50 focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50'\n style={{ backgroundColor: solidColor }}\n />\n </Slider.Root>\n );\n};\n\nexport type ColorPickerEyeDropperProps = ComponentProps<typeof Button>;\n\nexport const ColorPickerEyeDropper = ({ className, ...props }: ColorPickerEyeDropperProps) => {\n const { setHue, setSaturation, setLightness, setAlpha } = useColorPicker();\n\n const handleEyeDropper = async () => {\n try {\n // @ts-expect-error - EyeDropper API is experimental\n const eyeDropper = new EyeDropper();\n const result = await eyeDropper.open();\n const color = Color(result.sRGBHex);\n const [h, s, l] = color.hsl().array();\n\n setHue(h);\n setSaturation(s);\n setLightness(l);\n setAlpha(100);\n } catch (error) {\n console.error('EyeDropper failed:', error);\n }\n };\n\n return (\n <Button\n className={cn('text-muted-foreground shrink-0', className)}\n onClick={handleEyeDropper}\n size='icon'\n type='button'\n variant='outline'\n {...props}>\n <PipetteIcon size={16} />\n </Button>\n );\n};\n\nexport type ColorPickerOutputProps = ComponentProps<typeof SelectTrigger>;\n\nconst formats = ['hex', 'css'];\n\nexport const ColorPickerOutput = ({ ...props }: ColorPickerOutputProps) => {\n const { mode, setMode } = useColorPicker();\n\n return (\n <Select onValueChange={setMode} value={mode}>\n <SelectTrigger\n className='bg-background h-4 w-19 shrink-0 rounded-sm text-xs'\n {...props}>\n <SelectValue placeholder='Mode' />\n </SelectTrigger>\n <SelectContent>\n {formats.map((format) => (\n <SelectItem\n className='bg-background rounded-none text-xs'\n key={format}\n value={format}>\n {format.toUpperCase()}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n};\n\ntype PercentageInputProps = Omit<ComponentProps<typeof Input>, 'onChange' | 'value'> & {\n value: number;\n onChange: (value: number) => void;\n};\n\nconst PercentageInput = ({ value, onChange, className, ...props }: PercentageInputProps) => {\n const [localValue, setLocalValue] = useState(String(value));\n\n useEffect(() => {\n setLocalValue(String(value));\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n\n if (!/^\\d*\\.?\\d*$/.test(raw)) return;\n\n const num = parseFloat(raw);\n\n if (num > 100) {\n setLocalValue('100');\n onChange(100);\n return;\n }\n\n setLocalValue(raw);\n if (!isNaN(num)) {\n onChange(num);\n }\n };\n\n return (\n <div className='relative'>\n <Input\n type='text'\n inputMode='decimal'\n value={localValue}\n onChange={handleChange}\n {...props}\n className={cn(\n 'bg-muted h-8 w-[3.5rem] [appearance:textfield] rounded-md px-2 text-xs shadow-none [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none',\n className,\n )}\n />\n <span className='text-muted-foreground absolute top-1/2 right-2 -translate-y-1/2 text-xs'>\n %\n </span>\n </div>\n );\n};\n\nexport type ColorPickerFormatProps = HTMLAttributes<HTMLDivElement>;\n\nexport const ColorPickerFormat = ({ className, ...props }: ColorPickerFormatProps) => {\n const { hue, saturation, lightness, alpha, setAlpha, mode } = useColorPicker();\n const color = Color.hsl(hue, saturation, lightness, alpha / 100);\n\n if (mode === 'hex') {\n const hex = color.hex();\n const alphaHex = Math.round((alpha / 100) * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase();\n const displayHex = alpha < 100 ? `${hex}${alphaHex}` : hex;\n\n return (\n <div\n className={cn(\n 'relative flex w-full items-center gap-1 -space-x-px rounded-md',\n className,\n )}\n {...props}>\n <Input\n className='bg-muted h-8 w-[5rem] rounded-md px-2 text-xs'\n readOnly\n type='text'\n value={displayHex}\n />\n <PercentageInput value={alpha} onChange={setAlpha} />\n </div>\n );\n }\n\n if (mode === 'css') {\n const rgb = color\n .rgb()\n .array()\n .map((value) => Math.round(value));\n\n return (\n <div className={cn('w-full rounded-md', className)} {...props}>\n <Input\n className='bg-muted h-8 w-full rounded-md px-2 text-xs shadow-none'\n readOnly\n type='text'\n value={`rgba(${rgb.join(', ')}, ${alpha}%)`}\n {...props}\n />\n </div>\n );\n }\n return null;\n};\n\nexport type ColorPickerPresetsProps = HTMLAttributes<HTMLDivElement> & {\n colors: string[];\n};\n\nexport const ColorPickerPresets = ({ colors, className, ...props }: ColorPickerPresetsProps) => {\n const { hue, saturation, lightness, alpha, setHue, setSaturation, setLightness, setAlpha } =\n useColorPicker();\n const currentHex = Color.hsl(hue, saturation, lightness, alpha / 100).hex();\n\n return (\n <div className={cn('flex flex-wrap gap-1.5', className)} {...props}>\n {colors.map((hex) => {\n const isActive = Color(hex).hex().toUpperCase() === currentHex.toUpperCase();\n\n return (\n <button\n key={hex}\n type='button'\n className={cn(\n 'size-5 cursor-pointer rounded-[3px] border transition-all',\n 'hover:scale-110 hover:shadow-md',\n isActive && 'ring-ring ring-offset-background ring-2 ring-offset-1',\n )}\n style={{ backgroundColor: hex }}\n onClick={() => {\n const color = Color(hex);\n const [h, s, l] = color.hsl().array();\n\n setHue(h);\n setSaturation(s);\n setLightness(l);\n setAlpha(100);\n }}\n aria-label={hex}\n title={hex}\n />\n );\n })}\n </div>\n );\n};\n\nColorPickerPresets.displayName = 'ColorPickerPresets';\n","import { useEffect, useMemo, useRef, type ComponentProps } from 'react';\nimport { DayPicker, getDefaultClassNames, type DayButton, type Locale } from 'react-day-picker';\n\nimport { cn } from '@/lib/utils';\nimport { Button, buttonVariants } from '@/components/ui/Button/button';\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from 'lucide-react';\n\nfunction Calendar({\n className,\n classNames,\n modifiersClassNames,\n showOutsideDays = true,\n captionLayout = 'dropdown',\n buttonVariant = 'ghost',\n locale,\n formatters,\n components,\n fromYear,\n toYear,\n ...props\n}: ComponentProps<typeof DayPicker> & {\n buttonVariant?: ComponentProps<typeof Button>['variant'];\n fromYear?: number;\n toYear?: number;\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n // These overrides must keep a stable identity across renders. React compares\n // component types by reference, so recreating the arrow components on every\n // render remounts the whole day grid: focus is stolen back to the focused\n // day by CalendarDayButton's effect, and a click in progress is lost because\n // the button node it started on no longer exists.\n const resolvedComponents = useMemo<ComponentProps<typeof DayPicker>['components']>(\n () => ({\n Root: ({ className, rootRef, ...rootProps }) => {\n return (\n <div\n data-slot='calendar'\n ref={rootRef}\n className={cn(className)}\n {...rootProps}\n />\n );\n },\n Chevron: ({ className, orientation, ...chevronProps }) => {\n if (orientation === 'left') {\n return (\n <ChevronLeftIcon className={cn('size-4', className)} {...chevronProps} />\n );\n }\n\n if (orientation === 'right') {\n return (\n <ChevronRightIcon className={cn('size-4', className)} {...chevronProps} />\n );\n }\n\n return <ChevronDownIcon className={cn('size-4', className)} {...chevronProps} />;\n },\n DayButton: (dayButtonProps) => (\n <CalendarDayButton locale={locale} {...dayButtonProps} />\n ),\n WeekNumber: ({ children, ...weekNumberProps }) => {\n return (\n <td {...weekNumberProps}>\n <div className='flex size-(--cell-size) items-center justify-center text-center'>\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }),\n [locale, components],\n );\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'group/calendar bg-background p-3 font-sans [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className,\n )}\n captionLayout={captionLayout}\n startMonth={new Date(fromYear ?? 1900, 0)}\n endMonth={new Date(toYear ?? 2100, 11)}\n locale={locale}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(locale?.code, { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('relative flex flex-col gap-3 md:flex-row', defaultClassNames.months),\n month: cn('flex w-full flex-col gap-3', defaultClassNames.month),\n nav: cn(\n 'absolute inset-x-0 top-0 flex w-full items-center justify-between gap-2',\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100',\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100',\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n 'flex h-(--cell-size) w-full items-center justify-center px-(--cell-size) tracking-tight',\n defaultClassNames.month_caption,\n ),\n dropdowns: cn(\n 'flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-semibold',\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n 'relative rounded-(--cell-radius)',\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn('absolute inset-0 bg-popover opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'font-semibold select-none',\n captionLayout === 'label'\n ? 'text-sm'\n : 'flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground',\n defaultClassNames.caption_label,\n ),\n weekdays: cn('flex gap-1', defaultClassNames.weekdays),\n weekday: cn(\n 'flex-1 rounded-(--cell-radius) text-[0.75rem] font-semibold text-muted-foreground/70 select-none tracking-wide',\n defaultClassNames.weekday,\n ),\n week: cn('mt-2 flex w-full gap-1', defaultClassNames.week),\n week_number_header: cn(\n 'w-(--cell-size) select-none',\n defaultClassNames.week_number_header,\n ),\n week_number: cn(\n 'text-[0.75rem] text-muted-foreground/50 select-none',\n defaultClassNames.week_number,\n ),\n day: cn(\n 'group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)',\n props.showWeekNumber\n ? '[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)'\n : '[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)',\n defaultClassNames.day,\n ),\n range_start: cn(\n 'relative isolate z-0 rounded-l-md bg-primary/8 after:absolute after:inset-y-0 after:right-0 after:w-3 after:bg-primary/8',\n defaultClassNames.range_start,\n ),\n range_middle: cn('rounded-none bg-primary/8', defaultClassNames.range_middle),\n range_end: cn(\n 'relative isolate z-0 rounded-r-md bg-primary/8 after:absolute after:inset-y-0 after:left-0 after:w-3 after:bg-primary/8',\n defaultClassNames.range_end,\n ),\n today: cn('rounded-md bg-accent text-accent-foreground', defaultClassNames.today),\n outside: cn(\n 'text-muted-foreground/50 aria-selected:text-muted-foreground/50',\n defaultClassNames.outside,\n ),\n disabled: cn('text-muted-foreground/40 opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n // Preview of the range that is still being picked. `preview_*` are\n // custom modifiers, so they can only be styled through\n // `modifiersClassNames` (the typed `classNames` map only accepts\n // react-day-picker's own element and selection keys). The fill\n // deliberately mirrors `range_*` so the shape on screen is exactly\n // what a click would commit; the tentative days are told apart by\n // their text colour and outline, applied on the day button below.\n modifiersClassNames={{\n preview_start:\n 'relative isolate z-0 rounded-l-md bg-primary/8 after:absolute after:inset-y-0 after:right-0 after:w-3 after:bg-primary/8',\n preview_middle: 'rounded-none bg-primary/8',\n preview_end:\n 'relative isolate z-0 rounded-r-md bg-primary/8 after:absolute after:inset-y-0 after:left-0 after:w-3 after:bg-primary/8',\n ...modifiersClassNames,\n }}\n components={resolvedComponents}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n locale,\n ...props\n}: ComponentProps<typeof DayButton> & { locale?: Partial<Locale> }) {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n // Tentative end of the range being picked: the preview edge the pointer or\n // keyboard focus currently sits on. The already-committed start is also a\n // preview edge, but it is selected, so it keeps its solid filled styling.\n const isPreviewEdge = Boolean(\n (modifiers.preview_start || modifiers.preview_end) && !modifiers.selected,\n );\n\n return (\n <Button\n ref={ref}\n variant='ghost'\n size='icon-sm'\n data-day={day.date.toLocaleDateString(locale?.code)}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n data-preview-middle={Boolean(modifiers.preview_middle)}\n data-preview-edge={isPreviewEdge}\n className={cn(\n 'group-data-[focused=true]/day:ring-primary/40 data-[preview-edge=true]:ring-primary/50 data-[preview-edge=true]:text-primary data-[preview-middle=true]:text-primary data-[range-end=true]:!bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:!bg-primary/8 data-[range-middle=true]:text-foreground data-[range-start=true]:!bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:!bg-primary data-[selected-single=true]:text-primary-foreground relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 !rounded-md border-0 !bg-transparent leading-none font-normal transition-colors duration-150 group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:rounded-md group-data-[focused=true]/day:ring-[2px] hover:!bg-transparent data-[preview-edge=true]:rounded-md data-[preview-edge=true]:font-medium data-[preview-edge=true]:ring-[2px] data-[preview-middle=true]:font-medium data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md data-[selected-single=true]:rounded-md [&>span]:text-xs [&>span]:font-medium [&>span]:opacity-75',\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","import { useMemo, useState } from 'react';\nimport { format, isSameDay } from 'date-fns';\nimport { CalendarIcon } from 'lucide-react';\nimport type { DateRange, Matcher, Modifiers } from 'react-day-picker';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { Calendar } from '@/components/ui/Calendar/calendar';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\n\n/** Options that mean the same thing whichever selection mode is active. */\ninterface DatePickerBaseProps {\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n /** Earliest selectable date. Earlier days are disabled and unreachable. */\n fromDate?: Date;\n /** Latest selectable date. Later days are disabled and unreachable. */\n toDate?: Date;\n /** Months rendered side by side. Defaults to 1. */\n numberOfMonths?: number;\n}\n\ninterface DatePickerSingleProps extends DatePickerBaseProps {\n mode?: 'single';\n selected?: Date;\n onSelect?: (date: Date | undefined) => void;\n}\n\ninterface DatePickerRangeProps extends DatePickerBaseProps {\n mode: 'range';\n selected?: DateRange;\n onSelect?: (range: DateRange | undefined) => void;\n}\n\n/**\n * Discriminated on `mode`, so `selected` and `onSelect` are always the pair that\n * belongs to it. A flat union would accept `mode='range'` with a single `Date`,\n * which only fails at runtime once the popover is opened.\n */\ntype DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;\n\nfunction DatePicker(props: DatePickerProps) {\n // Only the mode-independent options are destructured. `mode`, `selected` and\n // `onSelect` stay on `props` because destructuring them would break the\n // discriminant and force casts back into every read.\n const {\n placeholder = 'Pick a date',\n disabled = false,\n className,\n fromDate,\n toDate,\n numberOfMonths = 1,\n } = props;\n\n const [open, setOpen] = useState(false);\n // In range mode react-day-picker completes the range on the very first\n // click (it returns `{ from: day, to: day }`), so the value alone cannot\n // tell a start pick apart from an end pick. This flag tracks the step so\n // the popover stays open until the user actually picks the end date.\n const [awaitingRangeEnd, setAwaitingRangeEnd] = useState(false);\n // Day the pointer or keyboard focus is currently on. Only meaningful while\n // waiting for the range end, where it drives the preview of the range a\n // click would commit.\n const [previewDate, setPreviewDate] = useState<Date | undefined>(undefined);\n\n const label = useMemo(() => {\n if (props.mode === 'range') {\n const range = props.selected;\n if (!range?.from) return placeholder;\n if (!range.to) return `${format(range.from, 'MMM d, yyyy')} – …`;\n return `${format(range.from, 'MMM d, yyyy')} – ${format(range.to, 'MMM d, yyyy')}`;\n }\n return props.selected ? format(props.selected, 'MMM d, yyyy') : placeholder;\n }, [props.mode, props.selected, placeholder]);\n\n const handleOpenChange = (nextOpen: boolean) => {\n setOpen(nextOpen);\n // Every time the popover is dismissed the next session starts over\n // from the range start.\n if (!nextOpen) {\n setAwaitingRangeEnd(false);\n setPreviewDate(undefined);\n }\n };\n\n const handleRangeSelect = (range: DateRange | undefined, triggerDate: Date) => {\n // Only ever wired to the range calendar; the guard is what lets the\n // discriminant narrow `onSelect` to the range signature.\n if (props.mode !== 'range') return;\n const emit = props.onSelect;\n\n // The first pick of a session always starts a brand new range, so\n // `range` from react-day-picker is discarded here. Left alone, it\n // adjusts the previously committed range instead: on a stored 10–28,\n // clicking 12 yields 10–12 (`addToRange` moves whichever end the date\n // sits after), so 12–28 would be unreachable. Forcing an open range\n // also makes single-day ranges selectable, which the adjust path\n // turns into a clear.\n if (!awaitingRangeEnd) {\n setAwaitingRangeEnd(true);\n emit?.({ from: triggerDate, to: undefined });\n return;\n }\n\n emit?.(range);\n\n // Second pick did not complete the range (it was cleared): stay open\n // and wait for a valid end date.\n if (!range?.from || !range.to) {\n setAwaitingRangeEnd(!!range?.from);\n return;\n }\n\n setAwaitingRangeEnd(false);\n setPreviewDate(undefined);\n setOpen(false);\n };\n\n const rangeFrom = props.mode === 'range' ? props.selected?.from : undefined;\n\n // Custom modifiers that paint the range still being picked. `preview_middle`\n // uses a DateInterval, which excludes both ends, so the two endpoints keep\n // their own start/end styling. Emitted as `undefined` when there is nothing\n // to preview so no stale modifier reaches the calendar.\n const previewModifiers = useMemo(() => {\n if (!awaitingRangeEnd || !rangeFrom || !previewDate) return undefined;\n // Hovering the start itself would preview an empty range.\n if (isSameDay(rangeFrom, previewDate)) return undefined;\n\n // The pointer can move to either side of the committed start, so the\n // preview endpoints are ordered rather than assumed.\n const [start, end] =\n previewDate < rangeFrom ? [previewDate, rangeFrom] : [rangeFrom, previewDate];\n\n return {\n preview_start: start,\n preview_middle: { after: start, before: end },\n preview_end: end,\n };\n }, [awaitingRangeEnd, rangeFrom, previewDate]);\n\n const handleDayPreview = (day: Date, dayModifiers: Modifiers) => {\n // Outside the second-pick step there is nothing to preview, and storing\n // the day anyway would re-render the calendar on every focus event.\n if (!awaitingRangeEnd) return;\n // A day that cannot be picked must not be previewed as an endpoint.\n if (dayModifiers.disabled || dayModifiers.hidden) return;\n // The calendar rebuilds its days on every render, so `day` is a fresh\n // Date instance each time. Keeping the current value when it points at\n // the same day stops that identity churn from re-rendering the calendar,\n // which would make the focus scope refocus and fire this handler again.\n setPreviewDate((current) => (current && isSameDay(current, day) ? current : day));\n };\n\n // react-day-picker v10 dropped `fromDate`/`toDate`. Bounds are now expressed\n // as `disabled` matchers (which days can be picked) plus `startMonth`/\n // `endMonth` (which months can be navigated to). Each key is only emitted\n // when it has a value, because the Calendar wrapper spreads these last and\n // an explicit `undefined` would wipe its own month defaults.\n const dateConstraints = useMemo(() => {\n const disabledMatchers: Matcher[] = [];\n if (fromDate) disabledMatchers.push({ before: fromDate });\n if (toDate) disabledMatchers.push({ after: toDate });\n\n return {\n ...(disabledMatchers.length > 0 && { disabled: disabledMatchers }),\n ...(fromDate && { startMonth: fromDate }),\n ...(toDate && { endMonth: toDate }),\n };\n }, [fromDate, toDate]);\n\n const hasValue = props.mode === 'range' ? !!props.selected?.from : !!props.selected;\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n data-slot='date-picker-trigger'\n variant='primary'\n disabled={disabled}\n className={cn(\n 'w-60 justify-start gap-2 font-normal',\n !hasValue && 'text-white',\n className,\n )}>\n <CalendarIcon className='size-4 shrink-0' />\n <span className='truncate'>{label}</span>\n </Button>\n </PopoverTrigger>\n <PopoverContent data-slot='date-picker-content' className='w-auto p-0' align='start'>\n {props.mode === 'range' ? (\n // Clearing the preview on the wrapper instead of per day\n // avoids the blank frame `onDayMouseLeave` would cause when\n // the pointer travels from one day to the next.\n <div onMouseLeave={() => setPreviewDate(undefined)}>\n <Calendar\n mode='range'\n selected={props.selected}\n onSelect={handleRangeSelect}\n modifiers={previewModifiers}\n onDayMouseEnter={handleDayPreview}\n // Keeps the preview in step with arrow-key\n // navigation, not just the pointer.\n onDayFocus={handleDayPreview}\n numberOfMonths={numberOfMonths}\n autoFocus\n {...dateConstraints}\n />\n </div>\n ) : (\n <Calendar\n mode='single'\n selected={props.selected}\n onSelect={(date) => {\n props.onSelect?.(date);\n setOpen(false);\n }}\n numberOfMonths={numberOfMonths}\n autoFocus\n {...dateConstraints}\n />\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DatePicker };\nexport type { DatePickerProps, DatePickerSingleProps, DatePickerRangeProps, DateRange };\n","import { Fragment, forwardRef, useCallback, type HTMLAttributes, type ReactNode, type SVGAttributes } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { BellIcon, CircleHelpIcon, ChevronDownIcon, SearchIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { sanitizeHref } from '@/utils/urlSecurity';\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/Avatar/avatar';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface NavbarDropdownItem {\n href: string;\n label: string;\n icon?: ReactNode;\n}\n\nexport interface NavbarNavLink {\n href: string;\n label: string;\n active?: boolean;\n icon?: ReactNode;\n /** If provided, hovering this link shows a dropdown */\n dropdownItems?: NavbarDropdownItem[];\n}\n\nexport interface NavbarUtilityLink {\n href: string;\n label: string;\n}\n\nexport interface NavbarNotification {\n id: string;\n title: string;\n description?: string;\n read?: boolean;\n timestamp?: string;\n}\n\nexport interface NavbarProps extends HTMLAttributes<HTMLElement> {\n logo?: ReactNode;\n brandName?: string;\n utilityLinks?: NavbarUtilityLink[];\n navigationLinks?: NavbarNavLink[];\n notificationCount?: number;\n notifications?: NavbarNotification[];\n avatarSrc?: string;\n avatarFallback?: string;\n showUtilityBar?: boolean;\n onNavLinkClick?: (href: string) => void;\n onSearchClick?: () => void;\n onHelpClick?: () => void;\n onAvatarClick?: () => void;\n onNotificationClick?: (id: string) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Default Logo\n// ---------------------------------------------------------------------------\n\nconst Logo = (props: SVGAttributes<SVGElement>) => (\n <svg\n aria-label='Logo'\n role='img'\n fill='none'\n height='1em'\n viewBox='0 0 324 323'\n width='1em'\n xmlns='http://www.w3.org/2000/svg'\n {...props}>\n <rect fill='currentColor' height='323' rx='161.5' width='323' x='0.5' />\n <circle cx='162' cy='161.5' fill='white' r='60' />\n </svg>\n);\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\nconst defaultUtilityLinks: NavbarUtilityLink[] = [\n { href: '#profile', label: 'My profile' },\n { href: '#documents', label: 'Documents' },\n { href: '#settings', label: 'Settings' },\n];\n\nconst defaultNavigationLinks: NavbarNavLink[] = [\n { href: '#', label: 'Home' },\n {\n href: '#vacations',\n label: 'Vacations',\n dropdownItems: [\n { href: '#vacations/request', label: 'Request vacation' },\n { href: '#vacations/history', label: 'History' },\n { href: '#vacations/calendar', label: 'Calendar' },\n ],\n },\n { href: '#payroll', label: 'Payroll', active: true },\n { href: '#apps', label: 'Apps' },\n { href: '#help', label: 'Help' },\n];\n\n// ---------------------------------------------------------------------------\n// NavLink with optional hover dropdown\n// ---------------------------------------------------------------------------\n\nfunction NavLinkItem({\n link,\n onNavLinkClick,\n}: {\n link: NavbarNavLink;\n onNavLinkClick?: (href: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const hasDropdown = !!link.dropdownItems?.length;\n\n return (\n <div\n ref={ref}\n className='relative flex h-14 items-center'\n onMouseEnter={() => hasDropdown && setOpen(true)}\n onMouseLeave={() => hasDropdown && setOpen(false)}>\n <a\n href={sanitizeHref(link.href)}\n onClick={(e) => {\n e.preventDefault();\n onNavLinkClick?.(link.href);\n }}\n className={cn(\n 'relative flex h-14 items-center gap-1.5 px-4 text-sm transition-colors select-none',\n link.active\n ? 'text-foreground after:bg-secondary font-semibold after:absolute after:right-0 after:bottom-0 after:left-0 after:h-0.5 after:rounded-full'\n : 'text-muted-foreground hover:text-foreground',\n )}>\n {link.icon}\n {link.label}\n {hasDropdown && (\n <ChevronDownIcon\n className={cn(\n 'size-3 transition-transform duration-200',\n open && 'rotate-180',\n )}\n />\n )}\n </a>\n\n {/* Dropdown */}\n {hasDropdown && (\n <div\n className={cn(\n 'border-border bg-popover absolute top-full left-0 z-50 min-w-44 rounded-lg border shadow-lg transition-all duration-150',\n open\n ? 'pointer-events-auto translate-y-0 opacity-100'\n : 'pointer-events-none -translate-y-1 opacity-0',\n )}>\n <div className='p-1'>\n {link.dropdownItems!.map((item, i) => (\n <a\n key={i}\n href={sanitizeHref(item.href)}\n onClick={(e) => {\n e.preventDefault();\n onNavLinkClick?.(item.href);\n setOpen(false);\n }}\n className='text-foreground hover:bg-muted flex items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors'>\n {item.icon}\n {item.label}\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Navbar\n// ---------------------------------------------------------------------------\n\n/**\n * @remarks\n * Navigation dropdowns use `absolute` positioning without a Portal. If this\n * component is placed inside a container with `overflow-hidden`, dropdowns will\n * be clipped. Ensure all ancestor containers use `overflow-visible`.\n */\nexport const Navbar = forwardRef<HTMLElement, NavbarProps>(\n (\n {\n className,\n logo = <Logo />,\n brandName = 'Total Portal',\n utilityLinks = defaultUtilityLinks,\n navigationLinks = defaultNavigationLinks,\n notificationCount = 1,\n notifications,\n avatarSrc,\n avatarFallback,\n showUtilityBar = true,\n onNavLinkClick,\n onSearchClick,\n onHelpClick,\n onAvatarClick,\n onNotificationClick,\n ...props\n },\n ref,\n ) => {\n const containerRef = useRef<HTMLElement>(null);\n const notifRef = useRef<HTMLDivElement>(null);\n const [isMobile, setIsMobile] = useState(false);\n const [notifOpen, setNotifOpen] = useState(false);\n\n const notifArray = Array.isArray(notifications) ? notifications : undefined;\n const unreadCount = notifArray\n ? notifArray.filter((n) => !n.read).length\n : notificationCount;\n\n useEffect(() => {\n if (!notifOpen) return;\n const handler = (e: MouseEvent) => {\n if (notifRef.current && !notifRef.current.contains(e.target as Node)) {\n setNotifOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [notifOpen]);\n\n useEffect(() => {\n const checkWidth = () => {\n if (containerRef.current) {\n setIsMobile(containerRef.current.offsetWidth < 768);\n }\n };\n checkWidth();\n const ro = new ResizeObserver(checkWidth);\n if (containerRef.current) ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, []);\n\n const combinedRef = useCallback(\n (node: HTMLElement | null) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n return (\n <header\n ref={combinedRef}\n className={cn(\n 'sticky top-0 z-50 w-full overflow-visible shadow-sm [&_*]:no-underline',\n className,\n )}\n {...props}>\n {/* ── Row 2: Brand + Nav bar ── */}\n <div className='bg-background border-border border-b px-4 md:px-6'>\n <div className='relative mx-auto flex h-14 max-w-screen-2xl items-center gap-6 overflow-visible'>\n {/* Logo + brand name */}\n <div className='flex shrink-0 items-center gap-3'>\n <span className='flex size-30 items-center justify-center text-xl text-white'>\n {logo}\n </span>\n {!isMobile && (\n <span className='text-primary font-bold'>{brandName}</span>\n )}\n </div>\n\n {/* Search */}\n {!isMobile && (\n <div className='relative w-80'>\n <SearchIcon className='text-muted-foreground/50 pointer-events-none absolute top-1/2 left-3 size-3.5 -translate-y-1/2' />\n <input\n type='text'\n placeholder='Search people, apps, requests ...'\n onClick={onSearchClick}\n className='border-border bg-muted text-foreground placeholder:text-muted-foreground/60 focus:border-primary h-8 w-full rounded-full border pr-4 pl-10 text-sm transition-colors outline-none'\n />\n </div>\n )}\n\n {/* Nav links */}\n <nav className='ml-auto flex h-full items-center'>\n {navigationLinks.map((link, i) => (\n <NavLinkItem key={i} link={link} onNavLinkClick={onNavLinkClick} />\n ))}\n </nav>\n </div>\n </div>\n {/* ── Row 1: Utility bar ── */}\n {showUtilityBar && <div className='bg-background border-border border-b px-4 md:px-6'>\n <div className='mx-auto flex h-9 max-w-screen-2xl items-center justify-between'>\n <nav className='flex items-center'>\n {utilityLinks.map((link, i) => (\n <Fragment key={i}>\n {i > 0 && (\n <span className='text-border mx-3 select-none'>|</span>\n )}\n <a\n href={sanitizeHref(link.href)}\n className='text-muted-foreground hover:text-foreground text-xs transition-colors'>\n {link.label}\n </a>\n </Fragment>\n ))}\n </nav>\n\n <div className='flex items-center gap-1'>\n <div ref={notifRef} className='relative'>\n <button\n type='button'\n onClick={() => notifArray && setNotifOpen((o) => !o)}\n className='text-muted-foreground hover:text-foreground hover:bg-muted relative flex size-7 cursor-pointer items-center justify-center rounded-md transition-colors'>\n <BellIcon className='size-3.5' />\n {unreadCount > 0 && (\n <span className='bg-secondary absolute top-1 right-1 flex size-1.5 rounded-full' />\n )}\n </button>\n {notifArray && (\n <div\n className={cn(\n 'border-border bg-popover absolute right-0 top-full z-50 w-80 overflow-hidden rounded-lg border shadow-lg transition-all duration-150',\n notifOpen\n ? 'pointer-events-auto translate-y-1 opacity-100'\n : 'pointer-events-none -translate-y-1 opacity-0',\n )}>\n <div className='border-border border-b px-4 py-2'>\n <p className='text-sm font-semibold'>Notifications</p>\n </div>\n <div className='max-h-80 overflow-y-auto'>\n {notifArray.length === 0 ? (\n <p className='text-muted-foreground px-4 py-6 text-center text-sm'>\n No notifications\n </p>\n ) : (\n notifArray.map((n) => (\n <button\n key={n.id}\n type='button'\n onClick={() => {\n onNotificationClick?.(n.id);\n setNotifOpen(false);\n }}\n className={cn(\n 'hover:bg-muted flex w-full items-start gap-3 px-4 py-3 text-left transition-colors',\n !n.read && 'bg-muted/40',\n )}>\n <div className='min-w-0 flex-1'>\n <p\n className={cn(\n 'text-sm',\n !n.read && 'font-semibold',\n )}>\n {n.title}\n </p>\n {n.description && (\n <p className='text-muted-foreground mt-0.5 truncate text-xs'>\n {n.description}\n </p>\n )}\n {n.timestamp && (\n <p className='text-muted-foreground mt-1 text-xs'>\n {n.timestamp}\n </p>\n )}\n </div>\n {!n.read && (\n <span className='bg-secondary mt-1.5 size-2 shrink-0 rounded-full' />\n )}\n </button>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n <button\n type='button'\n onClick={onHelpClick}\n className='text-muted-foreground hover:text-foreground hover:bg-muted flex size-7 cursor-pointer items-center justify-center rounded-md transition-colors'>\n <CircleHelpIcon className='size-3.5' />\n </button>\n {(avatarSrc || avatarFallback) && (\n <button\n type='button'\n onClick={onAvatarClick}\n className='ml-1 cursor-pointer rounded-full'>\n <Avatar size='sm'>\n {avatarSrc && <AvatarImage src={avatarSrc} alt={avatarFallback ?? 'User avatar'} />}\n <AvatarFallback>{avatarFallback}</AvatarFallback>\n </Avatar>\n </button>\n )}\n </div>\n </div>\n </div>}\n </header>\n );\n },\n);\n\nNavbar.displayName = 'Navbar';\n\nexport { Logo };\n","import { type ComponentProps } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { NavigationMenu as NavigationMenuPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon } from 'lucide-react';\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n viewport?: boolean;\n}) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot='navigation-menu'\n data-viewport={viewport}\n className={cn(\n 'group/navigation-menu relative flex max-w-max flex-1 items-center justify-center',\n className,\n )}\n {...props}>\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n );\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot='navigation-menu-list'\n className={cn(\n 'group flex flex-1 list-none items-center justify-center gap-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item\n data-slot='navigation-menu-item'\n className={cn('relative', className)}\n {...props}\n />\n );\n}\n\nconst navigationMenuTriggerStyle = cva(\n 'group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-3xl px-4.5 py-2.5 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/30 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-[state=open]:bg-muted/50 data-[state=open]:hover:bg-muted data-[state=open]:focus:bg-muted',\n);\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot='navigation-menu-trigger'\n className={cn(navigationMenuTriggerStyle(), 'group', className)}\n {...props}>\n {children}{' '}\n <ChevronDownIcon\n className='relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180'\n aria-hidden='true'\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot='navigation-menu-content'\n className={cn(\n 'group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:ring-foreground/5 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out group-data-[viewport=false]/navigation-menu:dark:ring-foreground/10 group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 top-0 left-0 w-full p-2.5 pr-3 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-3xl group-data-[viewport=false]/navigation-menu:shadow-lg group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none md:absolute md:w-auto',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div className={cn('absolute top-full left-0 isolate z-50 flex justify-center')}>\n <NavigationMenuPrimitive.Viewport\n data-slot='navigation-menu-viewport'\n className={cn(\n 'origin-top-center bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:zoom-in-90 data-[state=closed]:animate-out data-[state=closed]:zoom-out-90 relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-full overflow-hidden rounded-3xl shadow-lg ring-1 duration-100 md:w-(--radix-navigation-menu-viewport-width)',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot='navigation-menu-link'\n className={cn(\n \"hover:bg-muted focus:bg-muted focus-visible:ring-ring/30 data-[active=true]:bg-muted/50 data-[active=true]:hover:bg-muted data-[active=true]:focus:bg-muted flex items-center gap-1.5 rounded-3xl p-3 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-2xl [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot='navigation-menu-indicator'\n className={cn(\n 'data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in top-full z-1 flex h-1.5 items-end justify-center overflow-hidden',\n className,\n )}\n {...props}>\n <div className='bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md' />\n </NavigationMenuPrimitive.Indicator>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n};\n","/**\n * The server-safe half of the authorization system.\n *\n * Everything in this module is a pure function over plain data: no React, no hooks, no\n * context, no module-level mutable state. That is not incidental — it is the contract.\n * `src/policy.ts` re-exports this file as the `@bizapps/ui/policy` entry point, which\n * tsup deliberately does NOT stamp with `\"use client\"`, so a Next.js Server Component,\n * Route Handler or Server Action can import it and evaluate permissions on the server.\n *\n * **Never import React (or anything that transitively does) into this file.** The build\n * asserts it: `tsup.config.ts` fails if `dist/policy.js` contains a react import or a\n * `\"use client\"` directive. Breaking that turns every server-side caller into a client\n * reference, silently.\n *\n * The client half — `AbilityProvider`, `useAbility`, `useCan`, `Can` — consumes these\n * same functions, so there is exactly one implementation of the matching rules. Two\n * implementations of an authorization primitive drift, and drift on a security boundary\n * is invisible until it matters.\n */\nimport type { Permission } from './permission-catalog';\n\n/**\n * Tests one entry of the user's grant set against one requested permission.\n *\n * @param pattern - an entry from the user's grant set; may contain `*` as a segment\n * wildcard, or be a bare `*` meaning \"everything\"\n * @param permission - the concrete permission being requested\n *\n * Matching is arity-strict: a grant of `users.*` covers `users.delete`, but a grant of\n * `users` does NOT, and neither covers `users.delete.confirm`. That rules out the\n * ambiguity of whether `users` names the resource or the namespace.\n */\nfunction matchPermission(pattern: string, permission: string): boolean {\n if (pattern === '*') return true;\n if (pattern === permission) return true;\n const patternParts = pattern.split('.');\n const permParts = permission.split('.');\n if (patternParts.length !== permParts.length) return false;\n return patternParts.every((part, i) => part === '*' || part === permParts[i]);\n}\n\n/** Whether any entry in the grant set covers the requested permission. */\nfunction matchesAny(permissionSet: Set<string>, permission: string): boolean {\n if (permissionSet.has(permission)) return true;\n for (const pattern of permissionSet) {\n if (matchPermission(pattern, permission)) return true;\n }\n return false;\n}\n\n/**\n * Evaluates a permission requirement against a grant set.\n *\n * The order of the first two checks is load-bearing and must not be swapped: an empty\n * required list denies **even for a super-grant holder**, because an empty list means\n * \"nothing satisfies this\", not \"anything does\".\n *\n * @param permissionSet - the user's grants\n * @param perms - the permission(s) required\n * @param mode - with an array, `'any'` (default) passes when at least one matches,\n * `'all'` requires every one\n */\nfunction can(\n permissionSet: Set<string>,\n perms: Permission | Permission[],\n mode: 'any' | 'all' = 'any',\n): boolean {\n const list = Array.isArray(perms) ? perms : [perms];\n if (list.length === 0) return false;\n if (permissionSet.has('*')) return true;\n if (mode === 'all') {\n return list.every((p) => matchesAny(permissionSet, p));\n }\n return list.some((p) => matchesAny(permissionSet, p));\n}\n\nexport { can, matchPermission, matchesAny };\n","import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport type { Permission } from '../permission-catalog';\nimport { can as evaluateCan, matchPermission } from '../policy';\n\n/** `'loading'` while the grant set is unresolved, `'ready'` once it is known. */\ntype AbilityStatus = 'loading' | 'ready';\n\ninterface AbilityContextValue {\n can: (permissions: Permission | Permission[], mode?: 'any' | 'all') => boolean;\n setAbilities: (permissions: string[]) => void;\n clearAbilities: () => void;\n /**\n * `'loading'` while the grant set is genuinely unresolved, `'ready'` once it\n * is known — including when it is known to be empty. This is what makes\n * \"still loading\" distinguishable from \"loaded, zero grants\": both produce\n * an empty set, so without this flag a consumer cannot tell them apart.\n */\n status: AbilityStatus;\n}\n\ninterface AbilityProviderProps {\n children: ReactNode;\n permissions?: string[];\n}\n\nconst AbilityContext = createContext<AbilityContextValue | undefined>(undefined);\nAbilityContext.displayName = 'AbilityContext';\n\nfunction AbilityProvider({ children, permissions }: AbilityProviderProps) {\n const [permissionSet, setPermissionSet] = useState<Set<string>>(\n () => new Set(permissions ?? []),\n );\n\n // `permissions === undefined` means uncontrolled: the grant set is unknown\n // until setAbilities/clearAbilities is called. A controlled `[]` is a\n // KNOWN empty set, not an unresolved one — the distinction is the whole\n // point of the status flag.\n const [imperativelyResolved, setImperativelyResolved] = useState(false);\n const status: AbilityStatus =\n permissions !== undefined || imperativelyResolved ? 'ready' : 'loading';\n\n // The matching rules live in `../policy` so the server can use them too; this\n // callback only binds them to the provider's current grant set. Imported as\n // `evaluateCan` because `can` is this scope's own context value.\n const can = useCallback(\n (perms: Permission | Permission[], mode: 'any' | 'all' = 'any'): boolean =>\n evaluateCan(permissionSet, perms, mode),\n [permissionSet],\n );\n\n const setAbilities = useCallback((perms: string[]) => {\n setPermissionSet(new Set(perms));\n setImperativelyResolved(true);\n }, []);\n\n const clearAbilities = useCallback(() => {\n setPermissionSet(new Set());\n setImperativelyResolved(true);\n }, []);\n\n // Sync from the controlled `permissions` prop only when its CONTENT changes.\n // Comparing by content (not reference) avoids two footguns:\n // 1. An inline `permissions={[...]}` array is a new reference every render —\n // a reference-based dependency would re-sync (and wipe imperative\n // setAbilities/clearAbilities calls) on every parent re-render.\n // 2. When `permissions` is undefined (uncontrolled / imperative usage),\n // we never sync, so setAbilities/clearAbilities are the source of truth.\n //\n // Order-insensitive: the grant set is a set, so a reordered response from\n // the backend is NOT a content change. Keying on the raw order would\n // re-sync and wipe imperative setAbilities/clearAbilities state.\n const permissionKey = permissions === undefined ? null : [...permissions].sort().join('|');\n const syncedKey = useRef(permissionKey);\n useEffect(() => {\n if (permissionKey === null) return;\n if (permissionKey === syncedKey.current) return;\n syncedKey.current = permissionKey;\n setPermissionSet(new Set(permissions));\n // The `permissions` dependency is needed because the effect body reads\n // it, but `permissionKey` is what actually gates the work — a new array\n // reference with the same sorted content is a no-op.\n }, [permissionKey, permissions]);\n\n const value = useMemo(\n () => ({ can, setAbilities, clearAbilities, status }),\n [can, setAbilities, clearAbilities, status],\n );\n\n return <AbilityContext.Provider value={value}>{children}</AbilityContext.Provider>;\n}\n\nfunction useAbility(): AbilityContextValue {\n const context = useContext(AbilityContext);\n if (!context) {\n throw new Error('useAbility must be used within an AbilityProvider');\n }\n return context;\n}\n\nfunction useCan(permissions: Permission | Permission[], mode: 'any' | 'all' = 'any'): boolean {\n const { can } = useAbility();\n return can(permissions, mode);\n}\n\n/** Returns whether the grant set is resolved yet. Useful for skeletons without a `Can` wrapper. */\nfunction useAbilityStatus(): AbilityStatus {\n return useAbility().status;\n}\n\nexport { AbilityProvider, useAbility, useAbilityStatus, useCan, matchPermission };\nexport type { AbilityContextValue, AbilityProviderProps, AbilityStatus };\n","/**\n * AUTO-GENERATED — do not edit by hand.\n *\n * Regenerate with `pnpm generate-permissions`, which reads the catalog from the\n * Nexus backend. The list is committed so the library build never depends on a\n * live backend call.\n *\n * While this list is empty, `Permission` degrades to plain `string` and the\n * development-time unknown-permission warning is skipped entirely — an empty\n * catalog must never produce false positives.\n */\nconst KNOWN_PERMISSIONS = [] as const;\n\ntype KnownPermission = (typeof KNOWN_PERMISSIONS)[number];\n\nexport { KNOWN_PERMISSIONS };\nexport type { KnownPermission };\n","import { KNOWN_PERMISSIONS, type KnownPermission } from './permissions.generated';\n\n/**\n * A permission string in `resource.action` or `module.resource.action`\n * dot-notation, lowercase, with `*` as a segment wildcard and a bare `*` as the\n * super-grant.\n *\n * Known catalog entries are suggested by autocomplete; any other string is still\n * accepted, so a permission the catalog has not caught up with never blocks a\n * build. The `(string & {})` half is the TypeScript idiom that keeps the literal\n * suggestions from collapsing into plain `string`.\n */\ntype Permission = KnownPermission | (string & {});\n\nconst CATALOG: ReadonlySet<string> = new Set<string>(KNOWN_PERMISSIONS);\n\n/** Permissions already warned about, so a re-render does not re-log. */\nconst warned = new Set<string>();\n\n/** Test-only hook to clear the warned set between cases. */\nfunction __resetWarnedPermissions(): void {\n warned.clear();\n}\n\n/**\n * Logs a development-only warning for a requested permission that is not in the\n * generated catalog. This is the only defense against the silent-typo failure\n * mode: without it, a misspelled permission type-checks and hides its control\n * forever with nothing logged.\n *\n * No-ops in production, and no-ops entirely while the catalog is empty so an\n * ungenerated catalog cannot produce false positives.\n */\nfunction warnUnknownPermission(permission: Permission | Permission[]): void {\n if (process.env.NODE_ENV === 'production') return;\n if (CATALOG.size === 0) return;\n\n const requested = Array.isArray(permission) ? permission : [permission];\n\n for (const entry of requested) {\n // Wildcards belong in the user's GRANT set, not in a request. Skip them\n // rather than reporting every wildcard as unknown.\n if (entry.includes('*')) continue;\n if (CATALOG.has(entry) || warned.has(entry)) continue;\n\n warned.add(entry);\n console.warn(\n `[Can] Unknown permission \"${entry}\". It is not in the generated permission catalog. Check for a typo, or regenerate the catalog with \\`pnpm generate-permissions\\`.`,\n );\n }\n}\n\nexport { warnUnknownPermission, __resetWarnedPermissions, CATALOG as PERMISSION_CATALOG };\nexport type { Permission };\n","import {\n cloneElement,\n Fragment,\n isValidElement,\n type ComponentProps,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type PointerEventHandler,\n type ReactElement,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/Tooltip/tooltip';\nimport { cn } from '@/lib/utils';\nimport { useAbility, type AbilityStatus } from './ability-context';\nimport { warnUnknownPermission, type Permission } from '../permission-catalog';\n\ninterface CanState {\n /**\n * Whether the permission check passed, after `negate` is applied. While\n * `status` is `'loading'`, the underlying check is always `false` — so\n * `allowed` is `false` for `Can` (fail-closed) but `true` for `CanNot`\n * (fail-open: negating an unresolved `false` flips it to `true`).\n */\n allowed: boolean;\n /** Whether the grant set has resolved yet. */\n status: AbilityStatus;\n}\n\ninterface CanProps {\n permission: Permission | Permission[];\n mode?: 'any' | 'all';\n negate?: boolean;\n /**\n * `'hide'` (default) removes the subtree and renders `fallback` instead.\n * `'disable'` keeps the subtree visible but non-interactive, with `reason`\n * surfaced in a tooltip. Use `'disable'` when the user should know the\n * action exists and why it is unavailable.\n */\n behavior?: 'hide' | 'disable';\n /**\n * Explanation shown in a tooltip when `behavior='disable'` denies. Accepts a\n * node so callers can pass translated content without the library taking an\n * i18n dependency. No tooltip is rendered when omitted.\n */\n reason?: ReactNode;\n fallback?: ReactNode;\n /**\n * Rendered while the grant set is unresolved. Unlike `reason` and `fallback`, `null` and\n * \"omitted\" are deliberately NOT the same value here: a node renders that node;\n * `loading={null}` renders nothing; omitting `loading` entirely falls through to\n * `fallback` (or, for `CanNot`, lets the fail-open children render). The distinction\n * exists because for `loading` — and only for `loading` — \"render nothing\" and \"fall\n * through\" are genuinely different outcomes: `CanNot` is fail-open during loading, so\n * without an explicit `loading={null}` its children render immediately and then\n * disappear once the grant set resolves. Pass `loading={null}` to suppress that flash.\n */\n loading?: ReactNode;\n children: ReactNode | ((state: CanState) => ReactNode);\n}\n\ntype CanNotProps = Omit<CanProps, 'negate'>;\n\n/**\n * The ONLY keys allowed through to a denied control. Everything else is blocked.\n *\n * This is an ALLOW-LIST, and deliberately so. It replaced a deny-list of activation keys\n * (`Enter`, `' '`, `Spacebar`), which was wrong by construction on an authorization\n * boundary: enumerating what to block means every primitive that opens on a key nobody\n * thought of is a hole. `DropdownMenuTrigger` opens on `ArrowDown`; `SelectTrigger`'s\n * `OPEN_KEYS` are `[' ', 'Enter', 'ArrowUp', 'ArrowDown']`; `Select` also opens on\n * typeahead, and `Home`/`End` jump to the first/last item. Since focus is deliberately\n * reachable on a denied control — that is the whole point of `behavior='disable'` — a deny\n * list meant Tab-then-ArrowDown still opened a denied menu. Adding the arrows would have\n * closed the two cases we happened to know about and left the shape of the hole intact.\n *\n * Inverting it makes the gate robust by construction: a new primitive can pick any key it\n * likes and it is blocked by default. The cost is that the allow-list has to justify each\n * entry, which is the right direction for the burden of proof to run.\n *\n * `Tab` is here because it is how a keyboard user reaches the control to discover the\n * reason and then leaves again — blocking it would trap focus. Shift+Tab is the same\n * `event.key`, so it needs no separate entry.\n *\n * `Escape` is here because it is the other way out, though NOT for the reason it first\n * appears. Radix's own dismissal (`useEscapeKeydown`) binds `keydown` on `document` with\n * `capture: true`, so it fires before React's root-container listener and is unaffected by\n * this guard either way — a Dialog stays dismissable whether or not `Escape` is allowed\n * here, and that was verified by mutation rather than assumed. What the entry actually\n * protects is a CONSUMER's Escape handler living in the React tree: that one *is* in our\n * dispatch path, and `stopPropagation()` would swallow it, silently breaking a custom\n * dismissable container whenever focus rested on a denied control.\n *\n * Neither key can activate anything — no Radix primitive opens on Tab or Escape; they only\n * move focus or dismiss — so allowing them costs the gate nothing.\n */\nconst FOCUS_TRAVERSAL_KEYS = new Set(['Tab', 'Escape']);\n\nfunction blockInteraction(event: SyntheticEvent): void {\n event.preventDefault();\n event.stopPropagation();\n}\n\n/**\n * Blocks every key on a denied control except the ones needed to leave it.\n *\n * Both `keydown` and `keyup` are guarded: Enter activates a button on `keydown`, but Space\n * activates it on `keyup`, so guarding one without the other leaves half the keyboard\n * activation path open. Printable characters are blocked too — a denied control has\n * nothing to type into, and `Select`'s typeahead opens the menu from a bare letter.\n */\nfunction blockNonTraversalKey(event: KeyboardEvent<Element>): void {\n if (!FOCUS_TRAVERSAL_KEYS.has(event.key)) blockInteraction(event);\n}\n\n/**\n * Render-prop misuse shapes already reported, so a re-render does not re-log.\n *\n * Keyed on the sorted list of voided prop names rather than on the element or a ref: the\n * warning is about a code shape, so one report per distinct shape is exactly the right\n * granularity, and it stays quiet across re-renders and across every instance making the\n * same mistake.\n */\nconst warnedRenderPropMisuse = new Set<string>();\n\n/** Test-only hook to clear the render-prop misuse reports between cases. */\nfunction __resetCanWarnings(): void {\n warnedRenderPropMisuse.clear();\n}\n\n/**\n * Warns when a render-prop `children` is combined with props only the element path reads.\n *\n * A function `children` takes over every state and returns before `loading`, `behavior`,\n * `reason` and `fallback` are ever consulted, so\n * `<Can behavior='disable' reason='…'>{({ allowed }) => …}</Can>` silently renders with no\n * tooltip and no disabled treatment. Nothing throws and nothing looks wrong in the\n * source, which is exactly why it needs to be said out loud.\n *\n * Development-only, for the same reason as `warnUnknownPermission`: a shipped bundle must\n * not pay for a lint check aimed at the author.\n */\nfunction warnRenderPropVoidsProps(voided: readonly string[]): void {\n if (process.env.NODE_ENV === 'production') return;\n if (voided.length === 0) return;\n\n const key = voided.join(',');\n if (warnedRenderPropMisuse.has(key)) return;\n warnedRenderPropMisuse.add(key);\n\n console.warn(\n `[Can] \\`children\\` is a function, so ${voided.map((prop) => `\\`${prop}\\``).join(', ')} ${\n voided.length === 1 ? 'is' : 'are'\n } ignored. A render prop owns every state: read \\`allowed\\` and \\`status\\` and render the disabled, loading and denied cases yourself, or pass an element instead of a function.`,\n );\n}\n\n/** Minimal prop shape `disableElement` needs on an arbitrary child element. */\ninterface DisableableProps {\n className?: string;\n 'aria-disabled'?: boolean | 'true' | 'false';\n onClickCapture?: MouseEventHandler<Element>;\n onKeyDownCapture?: KeyboardEventHandler<Element>;\n onKeyUpCapture?: KeyboardEventHandler<Element>;\n onPointerDownCapture?: PointerEventHandler<Element>;\n onMouseDownCapture?: MouseEventHandler<Element>;\n}\n\n/**\n * Clones a single child element into its own disabled control, instead of wrapping it.\n *\n * `TooltipTrigger asChild` then merges Radix's `aria-describedby`, `data-state`, and\n * pointer handlers straight onto this same element, so a screen reader announces the\n * reason on the exact node that receives focus. `pointer-events` is left untouched:\n * the child is not natively `disabled`, so it still needs pointer events to receive\n * hover and open the tooltip. The child's own `className` is preserved and merged\n * with, not replaced by, the disabled styling.\n *\n * Blocking is not limited to click and keydown: Radix triggers (`DropdownMenuTrigger`,\n * `SelectTrigger`, `PopoverTrigger`, ...) open on `pointerdown`, not `click`, so\n * `onPointerDownCapture` and `onMouseDownCapture` are blocked too — otherwise a denied\n * user could still open the menu even though a later `click` never lands. `onKeyUpCapture`\n * is blocked alongside `onKeyDownCapture` because Space activates a button on `keyup`, not\n * `keydown`; both run every key through `FOCUS_TRAVERSAL_KEYS`, so only Tab and Escape get\n * through. None of this touches `pointer-events` — hover must still reach the child so its\n * tooltip can open; only *input* is intercepted.\n *\n * These handlers are a best-effort layer, NOT the security boundary. `cloneElement` can\n * only deliver props to a child that forwards them to a DOM node, and a composite child\n * that renders no DOM element of its own silently discards every one of them — Radix's\n * `DropdownMenu`, `Select` and `Popover` roots are context providers that render nothing,\n * so `<Can behavior='disable'><DropdownMenu>…</DropdownMenu></Can>` would drop the whole\n * block and fail open. `InteractionFirewall` below is the layer that actually holds; this\n * clone exists so the ARIA and the disabled styling land on the real control when the\n * child does forward props.\n *\n * Only `className` is merged. If the child already has its own `onClickCapture`,\n * `onKeyDownCapture`, `onKeyUpCapture`, `onPointerDownCapture`, `onMouseDownCapture`, or\n * `aria-disabled`, those are silently *replaced* by the ones set here — `cloneElement`\n * does not compose event handlers. This is intentional for a disabled state (nothing the\n * child would have done should still run), but a consumer relying on their own\n * capture-phase handler surviving here will be surprised.\n */\nfunction disableElement(child: ReactElement<DisableableProps>): ReactElement<DisableableProps> {\n return cloneElement(child, {\n 'aria-disabled': 'true',\n className: cn(child.props.className, 'cursor-not-allowed opacity-50'),\n onClickCapture: blockInteraction,\n onKeyDownCapture: blockNonTraversalKey,\n onKeyUpCapture: blockNonTraversalKey,\n onPointerDownCapture: blockInteraction,\n onMouseDownCapture: blockInteraction,\n });\n}\n\n/**\n * The actual security boundary for `behavior='disable'` on the clone path.\n *\n * `disableElement` injects its blocking handlers via `cloneElement`, which only works if\n * the child forwards unknown props down to a DOM node. A composite child that renders no\n * DOM element of its own drops them all, with no error and no warning — and React offers\n * no way to detect that ahead of time. Radix's `DropdownMenu`, `Select` and `Popover`\n * roots are exactly that shape (pure context providers), and they are precisely the\n * components a permission gate is most likely to wrap, so relying on the clone alone\n * meant the gate failed open for the most important case.\n *\n * This element owns a real DOM node of its own, so its capture-phase handlers always\n * exist regardless of what the child renders. React dispatches capture listeners from the\n * root down before any bubble listener runs, and `stopPropagation()` on a synthetic event\n * aborts the rest of that dispatch — including handlers on descendants — so an activation\n * event is stopped here before the child's own Radix handler ever sees it.\n *\n * CAVEAT: this is a real `<span>`, so `behavior='disable'` is not safe wrapped directly\n * around a `<tr>` or a `<td>` — a `<span>` is invalid inside `<table>`/`<tbody>`/`<tr>` and\n * the browser hoists it out, breaking the table. Wrap the control inside the cell rather\n * than the row or cell itself, or use `behavior='hide'` there. The `DisabledSubtree`\n * fallback has always had the same constraint.\n *\n * `display: contents` (`className='contents'`) keeps the node layout-neutral: it generates\n * no box, so it cannot disturb the child's own layout, positioning or Radix anchoring.\n * Event delegation is unaffected, because React walks its own tree rather than the CSS box\n * tree. `pointer-events` is deliberately left alone so hover still reaches the child and\n * its tooltip can open, and no ARIA is set here — the clone already marked the real\n * control `aria-disabled`, and a second announcement on a boxless generic node would only\n * add noise.\n *\n * It must sit *outside* `TooltipTrigger`, never around it as `asChild` fodder: the tooltip\n * still has to merge `aria-describedby` onto the focused control itself, which is the\n * accessibility property the clone path exists for.\n */\nfunction InteractionFirewall({ children }: { children: ReactNode }) {\n return (\n <span\n data-slot='can-blocked'\n className='contents'\n onClickCapture={blockInteraction}\n onPointerDownCapture={blockInteraction}\n onMouseDownCapture={blockInteraction}\n onKeyDownCapture={blockNonTraversalKey}\n onKeyUpCapture={blockNonTraversalKey}>\n {children}\n </span>\n );\n}\n\n/**\n * Non-interactive wrapper for a denied subtree.\n *\n * Fallback path for `behavior='disable'` when `children` is not a single element\n * (a fragment, an array, a string, or multiple controls) — there is no single\n * focusable node to clone and attach ARIA to directly, so the whole subtree is\n * wrapped instead. This is an honest fallback, not a silent downgrade: sighted\n * users still see the disabled treatment, and the wrapper stays a single focus\n * stop so a screen-reader user can still discover the reason, it just isn't\n * announced as a description of any one control inside it.\n *\n * Interaction is blocked in the CAPTURE phase, which fires on this element\n * before the inner control, so no activation event reaches the child. Every\n * activation path is covered, not just click: `pointerdown` (how Radix triggers\n * open), `mousedown`, and both `keydown` and `keyup` (Enter activates on the\n * former, Space on the latter). `*:pointer-events-none` already keeps pointer\n * events off the children here, but the capture handlers do not depend on it, so\n * a child that re-enables its own `pointer-events` is still blocked.\n * `*:pointer-events-none` stops children swallowing the hover, so this element\n * receives it and its tooltip can open — the exact thing a native `disabled`\n * button makes impossible. `tabIndex` is deliberately not set: the child stays\n * naturally focusable (one tab stop), and React's bubbling `onFocus` still\n * opens the tooltip. `inert` is deliberately not used: an inert subtree is\n * hidden from accessibility APIs, which would erase the control's own label.\n *\n * Props are accepted and spread because Radix injects its own handlers and\n * `data-state` through `TooltipTrigger asChild`. `{...props}` comes last so\n * those land; Radix does not use the capture-phase variants, so the blocking\n * handlers above are never overwritten.\n */\nfunction DisabledSubtree({\n children,\n className,\n ...props\n}: ComponentProps<'span'> & { 'data-slot'?: string }) {\n // `TooltipTrigger asChild` clones this span via Radix's Slot, which merges its own\n // `data-slot='tooltip-trigger'` into `props`. Stripped here so the terminal spread\n // below can never let it clobber the `can-disabled` slot, while every other\n // Radix-injected prop (handlers, `aria-describedby`, `data-state`) still lands.\n const { 'data-slot': _incomingDataSlot, ...restProps } = props;\n return (\n <span\n data-slot='can-disabled'\n aria-disabled='true'\n className={cn(\n 'inline-flex cursor-not-allowed opacity-50',\n '*:pointer-events-none',\n className,\n )}\n onClickCapture={blockInteraction}\n onPointerDownCapture={blockInteraction}\n onMouseDownCapture={blockInteraction}\n onKeyDownCapture={blockNonTraversalKey}\n onKeyUpCapture={blockNonTraversalKey}\n {...restProps}>\n {children}\n </span>\n );\n}\n\n/**\n * Renders its children when the user has the required permission(s). Requires an\n * `AbilityProvider` in the tree.\n *\n * Render precedence: a render-prop `children` always wins and receives the full\n * `CanState`; otherwise `loading` renders while the grant set is unresolved; then\n * `children` when allowed; then `fallback` when denied.\n *\n * When `children` is a function it OWNS EVERY STATE, and `behavior`, `reason`, `fallback`\n * and `loading` are all ignored — the render prop returns before any of them is consulted.\n * So `<Can behavior='disable' reason='…'>{({ allowed }) => …}</Can>` produces no tooltip\n * and no disabled treatment; the function has to read `allowed` and `status` and render\n * the disabled, loading and denied cases itself. Passing any of those four alongside a\n * function logs a development-only warning, since nothing else about the code looks wrong.\n *\n * Fail-closed by default: while `status === 'loading'`, the underlying check\n * is always `false` and nothing renders optimistically. Passing `negate`\n * flips this to fail-open — the unresolved `false` becomes `true` — so\n * children render immediately during loading unless `loading` is explicitly\n * passed. `CanNot` is `<Can negate />`, so it always exhibits the fail-open\n * case; pass `loading={null}` to suppress that flash and render nothing\n * instead — a node passed to `loading` renders that node, while omitting\n * `loading` falls through to the fail-open children.\n */\nfunction Can({\n permission,\n mode = 'any',\n negate = false,\n behavior = 'hide',\n reason = null,\n fallback = null,\n loading,\n children,\n}: CanProps) {\n warnUnknownPermission(permission);\n\n const { can, status } = useAbility();\n const hasPermission = status === 'ready' && can(permission, mode);\n const show = negate ? !hasPermission : hasPermission;\n\n if (typeof children === 'function') {\n // `reason` and `fallback` are detected by comparing against their defaults, so an\n // explicit `reason={null}`/`fallback={null}` reads as \"not passed\" — which is what\n // it means anyway. `loading` has no default and is compared against `undefined`\n // instead, because for `loading` — unlike the other two — `null` is a meaningfully\n // different value from \"not passed\": an explicit `loading={null}` is still voided\n // by a render prop and is reported as such here.\n warnRenderPropVoidsProps([\n ...(behavior === 'disable' ? ([\"behavior='disable'\"] as const) : []),\n ...(reason !== null ? (['reason'] as const) : []),\n ...(fallback !== null ? (['fallback'] as const) : []),\n ...(loading !== undefined ? (['loading'] as const) : []),\n ]);\n\n return <>{children({ allowed: show, status })}</>;\n }\n\n if (status === 'loading' && loading !== undefined) {\n return <>{loading}</>;\n }\n\n if (show) {\n return <>{children}</>;\n }\n\n if (behavior === 'disable') {\n // `isValidElement()` is true for a Fragment (`<>...</>`) — it is a single valid\n // element, unlike two sibling children, which React groups into an array. A\n // Fragment only accepts `key` and `children`; it silently drops any other prop\n // (React dev-warns and does nothing), so cloning one with `aria-disabled`,\n // `onClickCapture`, `onKeyDownCapture`, and `className` would lose the\n // interaction block entirely and leave the child fully clickable — the gate\n // would fail open. Exclude it explicitly so it falls through to the\n // `DisabledSubtree` wrapper below, same as any other non-single-element shape.\n if (isValidElement<DisableableProps>(children) && children.type !== Fragment) {\n const disabledChild = disableElement(children);\n if (reason === null) {\n return <InteractionFirewall>{disabledChild}</InteractionFirewall>;\n }\n // The firewall wraps only the trigger, never the whole `Tooltip`: `TooltipContent`\n // is portalled but still a React descendant, so React would route its events\n // through the firewall's capture handlers and the reason text would be\n // unselectable for no reason.\n return (\n <Tooltip>\n <InteractionFirewall>\n <TooltipTrigger asChild>{disabledChild}</TooltipTrigger>\n </InteractionFirewall>\n <TooltipContent>{reason}</TooltipContent>\n </Tooltip>\n );\n }\n\n if (reason === null) {\n return <DisabledSubtree>{children}</DisabledSubtree>;\n }\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <DisabledSubtree>{children}</DisabledSubtree>\n </TooltipTrigger>\n <TooltipContent>{reason}</TooltipContent>\n </Tooltip>\n );\n }\n\n return <>{fallback}</>;\n}\n\nCan.displayName = 'Can';\n\n/** Renders its children when the user does NOT have the required permission(s). Alias for `<Can negate />`. Requires an `AbilityProvider` in the tree. */\nfunction CanNot({\n permission,\n mode = 'any',\n behavior = 'hide',\n reason = null,\n fallback = null,\n loading,\n children,\n}: CanNotProps) {\n return (\n <Can\n permission={permission}\n mode={mode}\n negate\n behavior={behavior}\n reason={reason}\n fallback={fallback}\n loading={loading}>\n {children}\n </Can>\n );\n}\n\nCanNot.displayName = 'CanNot';\n\nexport { Can, CanNot, __resetCanWarnings };\nexport type { CanProps, CanNotProps, CanState };\n","import { useEffect, useState } from 'react';\n\nexport function useMediaQuery(query: string): boolean {\n // Initialize to false on both server and client to avoid hydration mismatch.\n // The real value is resolved in useEffect after mount.\n const [matches, setMatches] = useState<boolean>(false);\n\n useEffect(() => {\n // Safety guard for non-DOM environments (e.g. jsdom without matchMedia stub).\n // Effects do not run during SSR; this only matters in test environments.\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia(query);\n setMatches(mql.matches);\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [query]);\n\n return matches;\n}\n","import { useMediaQuery } from '@/lib/use-media-query';\n\nexport function useIsMobile() {\n return useMediaQuery('(max-width: 767px)');\n}\n","import * as React from 'react';\nimport { Dialog as SheetPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { XIcon } from 'lucide-react';\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot='sheet' {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot='sheet-trigger' {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot='sheet-close' {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot='sheet-portal' {...props} />;\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot='sheet-overlay'\n className={cn(\n 'fixed inset-0 z-50 bg-black/30 duration-100 supports-backdrop-filter:backdrop-blur-sm data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left';\n showCloseButton?: boolean;\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot='sheet-content'\n data-side={side}\n className={cn(\n 'fixed z-50 flex flex-col bg-popover bg-clip-padding text-sm text-popover-foreground shadow-xl transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10',\n className,\n )}\n {...props}>\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close data-slot='sheet-close' asChild>\n <Button variant='ghost' className='absolute top-4 right-4 bg-secondary' size='icon-sm'>\n <XIcon />\n <span className='sr-only'>Close</span>\n </Button>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='sheet-header'\n className={cn('flex flex-col gap-1.5 p-6', className)}\n {...props}\n />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='sheet-footer'\n className={cn('mt-auto flex flex-col gap-2 p-6', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot='sheet-title'\n className={cn('text-base font-medium text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot='sheet-description'\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","import {\n type CSSProperties,\n type ComponentProps,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { useIsMobile } from '@/hooks/use-mobile';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { Input } from '@/components/ui/Input/input';\nimport { Separator } from '@/components/ui/Separator/separator';\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/Sheet/sheet';\nimport { Skeleton } from '@/components/ui/Skeleton/skeleton';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/Tooltip/tooltip';\nimport { MenuIcon } from 'lucide-react';\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}; SameSite=Lax; Secure`;\n },\n [setOpenProp, open],\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n const target = event.target as HTMLElement;\n if (\n target.isContentEditable ||\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.tagName === 'SELECT'\n ) {\n return;\n }\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n data-slot='sidebar-wrapper'\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as CSSProperties\n }\n className={cn(\n 'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-dvh w-full',\n className,\n )}\n {...props}>\n {children}\n </div>\n </SidebarContext.Provider>\n );\n}\n\nfunction SidebarResizeHandle() {\n const dragRef = useRef<{\n startX: number;\n startWidth: number;\n wrapper: HTMLElement;\n container: HTMLElement | null;\n gap: HTMLElement | null;\n } | null>(null);\n\n return (\n <div\n data-slot='sidebar-resize-handle'\n className='absolute inset-y-0 right-0 w-1 cursor-col-resize opacity-0 transition-opacity hover:opacity-100 hover:bg-sidebar-border group-data-[state=collapsed]:hidden'\n onPointerDown={(e) => {\n e.preventDefault();\n const wrapper = e.currentTarget.closest<HTMLElement>('[data-slot=\"sidebar-wrapper\"]');\n if (!wrapper) return;\n const container = e.currentTarget.closest<HTMLElement>('[data-slot=\"sidebar-container\"]');\n const gap = container?.parentElement?.querySelector<HTMLElement>('[data-slot=\"sidebar-gap\"]') ?? null;\n const currentWidth = container\n ? parseFloat(getComputedStyle(container).width)\n : 256;\n if (container) container.style.transition = 'none';\n if (gap) gap.style.transition = 'none';\n dragRef.current = { startX: e.clientX, startWidth: currentWidth, wrapper, container: container ?? null, gap };\n e.currentTarget.setPointerCapture(e.pointerId);\n }}\n onPointerMove={(e) => {\n if (!dragRef.current) return;\n const { startX, startWidth, wrapper } = dragRef.current;\n const newWidth = Math.max(160, Math.min(480, startWidth + (e.clientX - startX)));\n wrapper.style.setProperty('--sidebar-width', `${newWidth}px`);\n }}\n onPointerUp={() => {\n if (dragRef.current?.container) dragRef.current.container.style.transition = '';\n if (dragRef.current?.gap) dragRef.current.gap.style.transition = '';\n dragRef.current = null;\n }}\n />\n );\n}\n\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n dir,\n ...props\n}: ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot='sidebar'\n className={cn(\n 'bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col',\n className,\n )}\n {...props}>\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n dir={dir}\n data-sidebar='sidebar'\n data-slot='sidebar'\n data-mobile='true'\n showCloseButton={false}\n className='bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0'\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as CSSProperties\n }\n side={side}>\n <SheetHeader className='sr-only'>\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className='flex h-full w-full flex-col'>{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className='group peer text-sidebar-foreground hidden md:block'\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot='sidebar'>\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot='sidebar-gap'\n className={cn(\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n )}\n />\n <div\n data-slot='sidebar-container'\n data-side={side}\n className={cn(\n 'fixed inset-y-0 z-10 hidden h-dvh w-(--sidebar-width) overflow-hidden transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className,\n )}\n {...props}>\n <div\n data-sidebar='sidebar'\n data-slot='sidebar-inner'\n className='bg-sidebar group-data-[variant=floating]:ring-sidebar-border flex size-full flex-col group-data-[variant=floating]:rounded-2xl group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1'>\n {children}\n </div>\n <SidebarResizeHandle />\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar='trigger'\n data-slot='sidebar-trigger'\n variant='ghost'\n size='icon-sm'\n className={cn(className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}>\n <MenuIcon />\n <span className='sr-only'>Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar='rail'\n data-slot='sidebar-rail'\n aria-label='Toggle Sidebar'\n tabIndex={-1}\n onClick={toggleSidebar}\n title='Toggle Sidebar'\n className={cn(\n 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, ...props }: ComponentProps<'main'>) {\n return (\n <main\n data-slot='sidebar-inset'\n className={cn(\n 'bg-background relative flex w-full flex-1 flex-col md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-2xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({ className, ...props }: ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot='sidebar-input'\n data-sidebar='input'\n className={cn('bg-input/50 h-8 w-full shadow-none', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-header'\n data-sidebar='header'\n className={cn('flex flex-col gap-2 p-2 [--radius:var(--radius-xl)]', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-footer'\n data-sidebar='footer'\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({ className, ...props }: ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot='sidebar-separator'\n data-sidebar='separator'\n className={cn('bg-sidebar-border mx-2 w-auto', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-content'\n data-sidebar='content'\n className={cn(\n 'no-scrollbar flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden [--radius:var(--radius-xl)] group-data-[collapsible=icon]:overflow-hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-group'\n data-sidebar='group'\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'div';\n\n return (\n <Comp\n data-slot='sidebar-group-label'\n data-sidebar='group-label'\n className={cn(\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-xl px-3 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot='sidebar-group-action'\n data-sidebar='group-action'\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-xl p-0 outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-group-content'\n data-sidebar='group-content'\n className={cn('w-full text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: ComponentProps<'ul'>) {\n return (\n <ul\n data-slot='sidebar-menu'\n data-sidebar='menu'\n className={cn('flex w-full min-w-0 flex-col gap-0.5', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='sidebar-menu-item'\n data-sidebar='menu-item'\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-xl px-3 py-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]',\n },\n size: {\n default: 'h-9 text-sm',\n sm: 'h-8 text-xs',\n lg: 'h-14 px-3 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot.Root : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot='sidebar-menu-button'\n data-sidebar='menu-button'\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side='right'\n align='center'\n hidden={state !== 'collapsed' || isMobile}\n {...tooltip}\n />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot='sidebar-menu-action'\n data-sidebar='menu-action'\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-xl p-0 outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-data-[size=default]/menu-button:top-2 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0',\n showOnHover &&\n 'peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 aria-expanded:opacity-100 md:opacity-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-menu-badge'\n data-sidebar='menu-badge'\n className={cn(\n 'text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-xl px-1 text-xs font-medium tabular-nums select-none group-data-[collapsible=icon]:hidden peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const [width] = useState(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n });\n\n return (\n <div\n data-slot='sidebar-menu-skeleton'\n data-sidebar='menu-skeleton'\n className={cn('flex h-8 items-center gap-2 rounded-xl px-2', className)}\n {...props}>\n {showIcon && (\n <Skeleton className='size-4 rounded-xl' data-sidebar='menu-skeleton-icon' />\n )}\n <Skeleton\n className='h-4 max-w-(--skeleton-width) flex-1'\n data-sidebar='menu-skeleton-text'\n style={\n {\n '--skeleton-width': width,\n } as CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: ComponentProps<'ul'>) {\n return (\n <ul\n data-slot='sidebar-menu-sub'\n data-sidebar='menu-sub'\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='sidebar-menu-sub-item'\n data-sidebar='menu-sub-item'\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'a';\n\n return (\n <Comp\n data-slot='sidebar-menu-sub-button'\n data-sidebar='menu-sub-button'\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-xl px-3 outline-hidden group-data-[collapsible=icon]:hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n};\n","import { type ReactNode } from 'react';\nimport {\n House,\n LayoutDashboardIcon,\n Plane,\n Wallet,\n} from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Can } from '@/components/authorization/Can/can';\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n useSidebar,\n} from '@/components/ui/Sidebar/sidebar';\n\nexport interface AppShellItem {\n label: string;\n icon?: ReactNode;\n active?: boolean;\n onClick?: () => void;\n permission?: string | string[];\n permissionMode?: 'any' | 'all';\n}\n\nexport interface AppShellProps {\n items?: AppShellItem[];\n activeItem?: string;\n onItemClick?: (label: string) => void;\n brandName?: string;\n showHeader?: boolean;\n header?: ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n defaultOpen?: boolean;\n className?: string;\n mainClassName?: string;\n children?: ReactNode;\n}\n\nconst defaultItems: AppShellItem[] = [\n { label: 'Home', icon: <House /> },\n { label: 'Vacations', icon: <Plane /> },\n { label: 'Payroll', icon: <Wallet /> },\n { label: 'Apps', icon: <LayoutDashboardIcon /> },\n];\n\nfunction SidebarBrand({ brandName }: { brandName: string }) {\n const { state } = useSidebar();\n const collapsed = state === 'collapsed';\n\n return (\n <>\n <div className='bg-primary text-primary-foreground flex size-7 shrink-0 items-center justify-center rounded-md text-xs font-bold'>\n {brandName.charAt(0)}\n </div>\n <span\n className={cn(\n 'truncate text-sm font-semibold transition-opacity duration-200',\n collapsed ? 'opacity-0 pointer-events-none w-0 overflow-hidden' : 'opacity-100',\n )}>\n {brandName}\n </span>\n </>\n );\n}\n\n/**\n * Full-page application shell with a collapsible sidebar.\n *\n * @remarks\n * The wrapper is always `h-dvh overflow-hidden` so it fills the dynamic viewport\n * regardless of the parent's height. The inner `<main>` handles its own scroll.\n * Use `mainClassName` to customise padding, background, or scroll behaviour.\n */\nexport function AppShell({\n items = defaultItems,\n activeItem,\n onItemClick,\n brandName = 'Total Portal',\n showHeader = true,\n header,\n open,\n onOpenChange,\n defaultOpen,\n className,\n mainClassName,\n children,\n}: AppShellProps) {\n return (\n <SidebarProvider\n className={cn('h-dvh overflow-hidden', className)}\n open={open}\n onOpenChange={onOpenChange}\n defaultOpen={defaultOpen}\n >\n <Sidebar collapsible='icon'>\n <SidebarHeader className='flex flex-row items-center gap-2 p-2'>\n <SidebarTrigger variant='ghost' className='size-8 shrink-0' />\n <SidebarBrand brandName={brandName} />\n </SidebarHeader>\n <SidebarContent className='overflow-x:hidden'>\n <SidebarGroup>\n <SidebarGroupContent>\n <SidebarMenu>\n {items.map((item) => {\n const menuItem = (\n <SidebarMenuItem key={item.label}>\n <SidebarMenuButton\n tooltip={item.label}\n isActive={activeItem === item.label || item.active}\n onClick={() => {\n item.onClick?.();\n onItemClick?.(item.label);\n }}>\n {item.icon}\n <span>{item.label}</span>\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n\n if (!item.permission) return menuItem;\n\n return (\n <Can\n key={item.label}\n permission={item.permission}\n mode={item.permissionMode}>\n {menuItem}\n </Can>\n );\n })}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n </SidebarContent>\n </Sidebar>\n <div className='flex flex-1 flex-col overflow-hidden'>\n {header ? (\n header\n ) : showHeader ? (\n <header className='flex h-14 items-center gap-2 border-b px-4'>\n <SidebarTrigger variant='ghost' className='size-8 shrink-0 md:hidden' />\n <span className='text-sm font-medium'>{brandName}</span>\n </header>\n ) : (\n <SidebarTrigger variant='ghost' className='size-8 shrink-0 md:hidden' />\n )}\n <main className={cn('overflow-y-auto flex-1 p-6', mainClassName)}>{children}</main>\n </div>\n </SidebarProvider>\n );\n}\n\nexport { SidebarTrigger, SidebarProvider };\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Textarea({ className, ...props }: ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot='textarea'\n className={cn(\n 'border-input flex min-h-[80px] w-full resize-y rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[border-color,box-shadow] outline-hidden md:text-sm',\n 'placeholder:text-muted-foreground',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n 'dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","import { createContext, useContext } from 'react';\nimport type { CalendarView } from './event-calendar.types';\n\ninterface EventCalendarContextValue {\n currentView: CalendarView;\n}\n\nconst EventCalendarContext = createContext<EventCalendarContextValue | null>(null);\n\n/**\n * Consume EventCalendar context from sub-components (e.g. a future EventCalendar.Toolbar).\n * Not exported from the public package barrel — internal use only.\n */\nfunction useEventCalendarContext(): EventCalendarContextValue {\n const ctx = useContext(EventCalendarContext);\n if (!ctx) {\n throw new Error('useEventCalendarContext must be used within EventCalendar');\n }\n return ctx;\n}\n\nexport { EventCalendarContext, useEventCalendarContext };\nexport type { EventCalendarContextValue };\n","/**\n * TCCE EventCalendar — @schedule-x theme overrides, scoped to `.sx-tcce`.\n *\n * Shipped as a string (not a .css file) and injected by the EventCalendar\n * component through React 19's hoisted `<style precedence>`. This keeps the\n * calendar styles bundled with the component: consumers who use EventCalendar\n * get them automatically, and consumers who don't tree-shake them away — no\n * separate stylesheet import or build step required.\n *\n * All values reference the library design tokens (`--color-*`) defined in the\n * main bundle, so the calendar inherits the consumer's theme.\n */\nexport const eventCalendarStyles = `\n/* ── Design tokens ────────────────────────────────────────────────────────── */\n.sx-tcce {\n --sx-color-primary: var(--color-primary);\n --sx-color-on-primary: var(--color-primary-foreground);\n --sx-color-primary-container: color-mix(in srgb, var(--color-primary) 10%, transparent);\n --sx-color-on-primary-container: var(--color-primary);\n --sx-color-surface: var(--color-background);\n --sx-color-background: var(--color-background);\n --sx-color-on-surface: var(--color-foreground);\n --sx-color-on-background: var(--color-foreground);\n --sx-color-outline: var(--color-border);\n --sx-color-outline-variant: var(--color-border);\n --sx-internal-color-text: var(--color-foreground);\n font-size: 13px;\n font-family: var(--font-sans, inherit);\n}\n\n/* ── Outer wrapper ────────────────────────────────────────────────────────── */\n.sx-tcce .sx__calendar-wrapper {\n border-radius: var(--border-radius-article, 0.875rem);\n border: 1px solid var(--color-border);\n overflow: hidden;\n}\n\n/* ── Header bar ───────────────────────────────────────────────────────────── */\n.sx-tcce .sx__calendar-header {\n padding: 8px 14px;\n min-height: 52px;\n border-bottom: 1px solid var(--color-border);\n background: var(--color-background);\n display: flex;\n align-items: center;\n}\n\n.sx__calendar-header-content {\n padding-right: 14px;\n}\n\n/* Range title — \"June 2026\" */\n.sx-tcce .sx__range-heading {\n font-size: 15px;\n font-weight: 700;\n color: var(--color-foreground);\n font-family: var(--font-heading, inherit);\n}\n\n/* \"Today\" button — primary style */\n.sx-tcce .sx__today-button {\n font-size: 12px;\n font-weight: 600;\n height: 32px;\n padding: 0 14px;\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n border: none;\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n cursor: pointer;\n transition: opacity 150ms, background 150ms, outline 150ms;\n}\n.sx-tcce .sx__today-button:focus-visible {\n outline: 3px solid color-mix(in srgb, var(--ring) 50%, transparent);\n outline-offset: -1px;\n}\n.sx-tcce .sx__today-button:hover {\n opacity: 0.88;\n background: var(--color-primary);\n}\n.sx-tcce .sx__today-button:active {\n opacity: 0.72;\n background: var(--color-primary);\n}\n.sx-tcce .sx__today-button:focus {\n background: var(--color-primary);\n}\n\n/* Prev / Next arrow buttons */\n.sx__forward-backward-navigation {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 32px;\n}\n.sx-tcce .sx__chevron-wrapper {\n width: 30px;\n height: 32px;\n min-width: 30px !important;\n min-height: 32px !important;\n border-radius: var(--border-radius-secondary-button, 0.625rem);=\n border: 1px solid var(--color-border);\n background: var(--color-background);\n transition: background 150ms;\n}\n.sx-tcce .sx__chevron-wrapper:hover {\n background: var(--color-muted);\n}\n.sx__chevron-wrapper {\n min-height: 30px !important;\n}\n\n/* ── View selector ────────────────────────────────────────────────────────── */\n/* Hide the \"View\" text label (kept in DOM for a11y) */\n.sx-tcce .sx__view-selection-label {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n}\n\n/* The active view button, e.g. \"Month ▼\" */\n.sx-tcce .sx__view-selection-selected-item {\n font-size: 12px;\n font-weight: 600;\n height: 32px;\n padding: 0 12px;\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n border: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n transition: opacity 150ms, background 150ms, color 150ms;\n}\n.sx-tcce .sx__view-selection-selected-item:hover,\n.sx-tcce .sx__view-selection-selected-item:focus,\n.sx-tcce .sx__view-selection-selected-item:active {\n opacity: 0.85;\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n}\n.sx-tcce .sx__view-selection-selected-item:focus-visible {\n outline: 3px solid color-mix(in srgb, var(--ring) 50%, transparent);\n outline-offset: -1px;\n}\n\n/* Chevron image inside the view button */\n.sx-tcce .sx__view-selection-chevron {\n width: 13px;\n height: 13px;\n opacity: 0.6;\n filter: brightness(0) invert(1);\n}\n\n/* Dropdown list of views */\n.sx-tcce .sx__view-selection-items {\n border-radius: var(--border-radius-outline, 0.5rem);\n border: 1px solid var(--color-border);\n padding: 4px;\n gap: 2px;\n background: var(--color-background);\n}\n.sx-tcce .sx__view-selection-item {\n font-size: 12px;\n font-weight: 500;\n padding: 5px 12px;\n border-radius: 5px;\n cursor: pointer;\n transition: background 100ms;\n}\n.sx-tcce .sx__view-selection-item:hover {\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n}\n\n/* ── Date input (top-right \"6/5/2026 ▼\") ─────────────────────────────────── */\n/* Hide the \"Date\" text label */\n.sx-tcce .sx__date-input-label {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n}\n.sx-tcce .sx__date-input-wrapper {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n flex-shrink: 0;\n \n height: 32px;\n padding: 0 1rem;\n min-width: 120px;\n \n border-radius: 0.5rem;\n border: 1px solid transparent;\n background-color: var(--color-primary);\n \n cursor: pointer;\n outline: none;\n user-select: none;\n transition: all 150ms ease;\n \n overflow: hidden;\n justify-content: flex-start;\n color: var(--color-primary-foreground) !important;\n}\n.sx-tcce .sx__date-input-wrapper:focus-within {\n border-color: var(--ring);\n box-shadow: 0 0 0 3px rgba(var(--ring-rgb), 0.3);\n}\n.sx-tcce .sx__date-input-wrapper:hover {\n background-color: var(--color-primary);\n opacity: 0.8;\n}\n.sx-tcce .sx__date-input {\n font-size: 0.875rem;\n font-weight: 400;\n color: #ffffff;\n font-family: inherit;\n \n background: transparent;\n border: none;\n outline: none;\n padding: 0;\n \n min-width: 100px;\n flex: 1;\n \n cursor: pointer;\n}\n\n.sx-tcce .sx__date-input::placeholder {\n color: rgba(255, 255, 255, 0.7);\n}\n\n.sx-tcce .sx__date-input-chevron-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n \n width: 1rem;\n height: 1rem;\n padding: 0;\n \n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n appearance: none;\n}\n.sx-tcce .sx__date-input-chevron {\n width: 1rem;\n height: 1rem;\n opacity: 1;\n color: #ffffff;\n}\n\n/* Date picker popup (the calendar that drops when clicking the date input) */\n.sx-tcce .sx__date-picker-popup {\n border-radius: 0.5rem;\n border: 1px solid var(--color-border);\n background-color: var(--color-background);\n \n padding: 0.75rem;\n font-size: 0.75rem;\n overflow: hidden;\n \n animation: popoverSlideIn 150ms ease-out;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n}\n@keyframes popoverSlideIn {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.sx-tcce .sx__date-picker__month-view-header {\n padding: 0.75rem 0.75rem 0.375rem;\n}\n.sx-tcce .sx__date-picker__month-view-header__month-year {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--color-foreground);\n text-align: center;\n}\n.sx-tcce .sx__date-picker__day-names {\n display: flex;\n gap: 0.25rem;\n padding: 0.5rem 0.25rem;\n}\n.sx-tcce .sx__date-picker__day-name {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n \n width: 2rem;\n height: 2rem;\n min-height: 2rem;\n \n font-size: 0.625rem;\n font-weight: 600;\n color: var(--color-muted-foreground);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n \n user-select: none;\n}\n/* Week */\n.sx-tcce .sx__date-picker__week {\n display: flex;\n gap: 0.25rem;\n margin-top: 0.5rem;\n}\n.sx-tcce .sx__date-picker__day {\n /* Layout */\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n \n width: 2rem;\n height: 2rem;\n min-height: 2rem;\n aspect-ratio: 1;\n \n border-radius: 0.375rem;\n border: none;\n background: transparent;\n padding: 0;\n cursor: pointer;\n \n font-size: 0.75rem;\n font-weight: 400;\n color: var(--color-foreground);\n \n transition: all 100ms ease;\n outline: none;\n user-select: none;\n}\n.sx-tcce .sx__date-picker__day:hover:not(:disabled) {\n background-color: var(--color-accent);\n color: var(--color-accent-foreground);\n}\n.sx-tcce .sx__date-picker__day:focus-visible {\n box-shadow: inset 0 0 0 2px var(--color-primary);\n border-radius: 0.375rem;\n}\n.sx-tcce .sx__date-picker__day--today {\n font-weight: 600;\n color: var(--color-primary);\n background-color: var(--color-accent);\n}\n.sx-tcce .sx__date-picker__day--today:hover {\n background-color: var(--color-accent);\n color: var(--color-primary);\n}\n.sx-tcce .sx__date-picker__day--selected {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n}\n/* Selected day */\n.sx-tcce .sx__date-picker__day--selected {\n background-color: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n border-radius: 0.375rem;\n font-weight: 500;\n}\n\n.sx-tcce .sx__date-picker__day--selected:hover {\n opacity: 0.9;\n}\n\n/* Outside days (prev/next month) */\n.sx-tcce .sx__date-picker__day--outside {\n color: var(--color-muted-foreground);\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Disabled days */\n.sx-tcce .sx__date-picker__day:disabled {\n color: var(--color-muted-foreground);\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.sx-tcce .sx__date-picker__day--range-start {\n background-color: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n border-radius: 0.375rem 0 0 0.375rem;\n}\n\n.sx-tcce .sx__date-picker__day--range-middle {\n background-color: var(--color-primary);\n opacity: 0.2;\n border-radius: 0;\n}\n\n.sx-tcce .sx__date-picker__day--range-end {\n background-color: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n border-radius: 0 0.375rem 0.375rem 0;\n}\n\n/* Navigation buttons (previous/next month) */\n.sx-tcce .sx__date-picker__nav-button {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n padding: 0;\n \n background: transparent;\n border: none;\n border-radius: 0.375rem;\n cursor: pointer;\n opacity: 0.5;\n transition: all 150ms ease;\n outline: none;\n}\n\n.sx-tcce .sx__date-picker__nav-button:hover:not(:disabled) {\n opacity: 1;\n background-color: var(--color-accent);\n}\n\n.sx-tcce .sx__date-picker__nav-button:focus-visible {\n box-shadow: 0 0 0 2px var(--color-primary);\n}\n\n.sx-tcce .sx__date-picker__nav-button:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.sx-tcce .sx__date-picker__nav-button svg {\n width: 1rem;\n height: 1rem;\n}\n\n/* ── Month grid ───────────────────────────────────────────────────────────── */\n\n/* Week rows: horizontal grid lines — skip first (header border-bottom covers it) */\n.sx-tcce .sx__month-grid-week:not(:first-child) {\n border-top: 1px solid var(--color-border);\n}\n\n/* Day cells: vertical grid line on right, consistent height */\n.sx-tcce .sx__month-grid-day {\n border-right: 1px solid var(--color-border);\n min-height: 96px;\n}\n\n/* Remove right border from last column */\n.sx-tcce .sx__month-grid-day.sx__sunday {\n border-right: 0;\n}\n\n/* Out-of-bounds (prev/next month) days — muted background */\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing {\n background-color: var(--color-muted);\n}\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing .sx__month-grid-day__header-date,\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing .sx__month-grid-day__header-day-name {\n opacity: 0.4;\n}\n\n/* Day cell header */\n.sx-tcce .sx__month-grid-day__header {\n padding: 5px 8px 3px;\n}\n.sx-tcce .sx__month-grid-day__header-day-name {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__month-grid-day__header-date {\n font-size: 13px;\n font-weight: 500;\n width: 26px;\n height: 26px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 150ms;\n}\n\n/* Today highlight */\n.sx-tcce .sx__is-today .sx__month-grid-day__header-date {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n font-weight: 700;\n}\n\n/* Selected day highlight (not today) */\n.sx-tcce .sx__month-grid-day.is-selected:not(.sx__is-today) .sx__month-grid-day__header-date {\n background: color-mix(in srgb, var(--color-primary) 12%, transparent);\n color: var(--color-primary);\n font-weight: 600;\n}\n\n/* Month grid event pills */\n.sx-tcce .sx__month-grid-event {\n border-radius: 3px;\n margin: 1px 4px;\n padding: 1px 5px;\n font-size: 11px;\n font-weight: 500;\n background-color: transparent !important;\n border-inline-start-width: 3px !important;\n cursor: pointer;\n}\n.sx-tcce .sx__month-grid-event-time {\n font-size: 10px;\n opacity: 0.7;\n}\n.sx-tcce .sx__month-grid-event-title {\n font-size: 11px;\n}\n\n/* ── Week / Day header ────────────────────────────────────────────────────── */\n.sx-tcce .sx__week-grid__day-name {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__week-grid__date-number {\n font-size: 14px;\n font-weight: 500;\n width: 34px;\n height: 34px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 150ms;\n}\n.sx-tcce .sx__week-grid__date--is-today .sx__week-grid__date-number {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n font-weight: 700;\n}\n\n/* Subtle column highlight for today in week view */\n.sx-tcce .sx__time-grid-day.sx__is-today {\n background: color-mix(in srgb, var(--color-primary) 3%, transparent);\n}\n\n/* ── Time grid (Week / Day events) ───────────────────────────────────────── */\n.sx-tcce .sx__week-grid__hour-text {\n font-size: 10px;\n font-weight: 500;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__time-grid-event {\n border-radius: 6px;\n cursor: pointer;\n}\n.sx-tcce .sx__time-grid-event-inner {\n padding: 4px 7px;\n}\n.sx-tcce .sx__time-grid-event-title {\n font-size: 11px;\n font-weight: 600;\n line-height: 1.3;\n}\n.sx-tcce .sx__time-grid-event-time {\n font-size: 10px;\n opacity: 0.72;\n line-height: 1.4;\n}\n.sx-tcce .sx__title-and-time-compact {\n font-size: 10px;\n font-weight: 600;\n}\n\n/* ── Event modal — hidden; replaced by TCCE Popover in event-calendar.tsx ── */\n.sx-tcce .sx__event-modal {\n display: none !important;\n}\n.sx-tcce .sx__event-modal__title {\n font-size: 14px;\n font-weight: 700;\n letter-spacing: -0.01em;\n font-family: var(--font-heading, inherit);\n}\n.sx-tcce .sx__event-modal__time {\n font-size: 12px;\n color: var(--color-muted-foreground);\n}\n`;\n","import { useRef, useEffect, useLayoutEffect } from 'react';\nimport {\n createCalendar,\n viewMonthGrid,\n viewWeek,\n viewDay,\n viewMonthAgenda,\n} from '@schedule-x/calendar';\nimport { createEventsServicePlugin } from '@schedule-x/events-service';\nimport { createEventModalPlugin } from '@schedule-x/event-modal';\nimport { createCalendarControlsPlugin } from '@schedule-x/calendar-controls';\n// Patches globalThis.Temporal so @schedule-x instanceof checks match our Temporal objects\nimport 'temporal-polyfill/global';\nimport { Temporal } from 'temporal-polyfill';\nimport type {\n CalendarEvent,\n CalendarView,\n EventCalendarProps,\n ScheduleXViewName,\n} from '../event-calendar.types';\nimport type { CalendarApp, CalendarEventExternal } from '@schedule-x/calendar';\n\nexport const VIEW_MAP: Record<CalendarView, ScheduleXViewName> = {\n month: 'month-grid',\n week: 'week',\n day: 'day',\n agenda: 'month-agenda',\n};\n\nexport const REVERSE_VIEW_MAP: Record<ScheduleXViewName, CalendarView> = {\n 'month-grid': 'month',\n week: 'week',\n day: 'day',\n 'month-agenda': 'agenda',\n};\n\n// TCCE-aligned colors for each event variant.\n// main: border / accent container: event background onContainer: event text\nconst CALENDAR_DEFS = {\n default: {\n colorName: 'default',\n lightColors: { main: '#22205f', container: '#eaeaf6', onContainer: '#22205f' },\n darkColors: { main: '#9b99d4', container: '#2a2862', onContainer: '#eaeaf6' },\n },\n primary: {\n colorName: 'primary',\n lightColors: { main: '#22205f', container: '#eaeaf6', onContainer: '#22205f' },\n darkColors: { main: '#9b99d4', container: '#2a2862', onContainer: '#eaeaf6' },\n },\n success: {\n colorName: 'success',\n lightColors: { main: '#00a824', container: '#ddf8e4', onContainer: '#003d0d' },\n darkColors: { main: '#5de87a', container: '#003d0d', onContainer: '#ddf8e4' },\n },\n // Use amber (yellow-700) — more refined than TCCE's bright yellow-600 (#faca4a)\n warning: {\n colorName: 'warning',\n lightColors: { main: '#c8a23b', container: '#fef9e7', onContainer: '#5c4a00' },\n darkColors: { main: '#fbd56e', container: '#5c4a00', onContainer: '#fef9e7' },\n },\n danger: {\n colorName: 'danger',\n lightColors: { main: '#ea3a3d', container: '#fee2e2', onContainer: '#7f1d1d' },\n darkColors: { main: '#f87171', container: '#7f1d1d', onContainer: '#fee2e2' },\n },\n} as const;\n\n/**\n * Convert \"YYYY-MM-DD\" → Temporal.PlainDate\n * Convert \"YYYY-MM-DD HH:mm\" → Temporal.ZonedDateTime (system timezone)\n */\nfunction toTemporalDate(dateStr: string): Temporal.ZonedDateTime | Temporal.PlainDate {\n if (dateStr.length === 10) {\n return Temporal.PlainDate.from(dateStr);\n }\n const isoStr = dateStr.replace(' ', 'T');\n const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n return Temporal.ZonedDateTime.from(`${isoStr}[${timeZone}]`);\n}\n\nexport function toScheduleXEvent(event: CalendarEvent): CalendarEventExternal {\n return {\n id: String(event.id),\n title: event.title,\n start: toTemporalDate(event.start),\n end: toTemporalDate(event.end),\n calendarId: event.color ?? 'default',\n ...(event.description != null ? { description: event.description } : {}),\n };\n}\n\ninterface UseEventCalendarProps {\n events: EventCalendarProps['events'];\n defaultView?: EventCalendarProps['defaultView'];\n defaultDate?: EventCalendarProps['defaultDate'];\n locale?: EventCalendarProps['locale'];\n onEventClick?: EventCalendarProps['onEventClick'];\n onEventCreate?: EventCalendarProps['onEventCreate'];\n onViewChange?: EventCalendarProps['onViewChange'];\n}\n\ninterface UseEventCalendarReturn {\n calendarApp: CalendarApp | null;\n eventModal: ReturnType<typeof createEventModalPlugin>;\n}\n\nfunction useEventCalendar({\n events,\n defaultView = 'month',\n defaultDate,\n locale = 'en-US',\n onEventClick,\n onEventCreate,\n onViewChange,\n}: UseEventCalendarProps): UseEventCalendarReturn {\n const onEventClickRef = useRef(onEventClick);\n const onEventCreateRef = useRef(onEventCreate);\n const onViewChangeRef = useRef(onViewChange);\n useLayoutEffect(() => {\n onEventClickRef.current = onEventClick;\n });\n useLayoutEffect(() => {\n onEventCreateRef.current = onEventCreate;\n });\n useLayoutEffect(() => {\n onViewChangeRef.current = onViewChange;\n });\n\n const eventsMapRef = useRef<Map<string, CalendarEvent>>(new Map());\n const eventsService = useRef(createEventsServicePlugin());\n const eventModal = useRef(createEventModalPlugin());\n const calendarControls = useRef(createCalendarControlsPlugin());\n\n const calendarApp = useRef<ReturnType<typeof createCalendar> | null>(null);\n if (!calendarApp.current) {\n eventsMapRef.current = new Map(events.map((e) => [String(e.id), e]));\n calendarApp.current = createCalendar({\n locale,\n defaultView: VIEW_MAP[defaultView],\n ...(defaultDate ? { selectedDate: Temporal.PlainDate.from(defaultDate) } : {}),\n calendars: CALENDAR_DEFS,\n views: [viewMonthGrid, viewWeek, viewDay, viewMonthAgenda],\n plugins: [eventsService.current, eventModal.current, calendarControls.current],\n events: events.map(toScheduleXEvent),\n callbacks: {\n onEventClick: (calendarEvent) => {\n const original = eventsMapRef.current.get(String(calendarEvent.id));\n if (original) onEventClickRef.current?.(original);\n },\n onDoubleClickDate: (date: Temporal.PlainDate) => {\n const dateStr = date.toString();\n onEventCreateRef.current?.({ start: dateStr, end: dateStr });\n },\n onDoubleClickDateTime: (dateTime: Temporal.ZonedDateTime) => {\n const normalized = dateTime.toString().slice(0, 16).replace('T', ' ');\n onEventCreateRef.current?.({ start: normalized, end: normalized });\n },\n },\n });\n }\n\n const eventsKey = JSON.stringify(events);\n\n useEffect(() => {\n eventsMapRef.current = new Map(events.map((e) => [String(e.id), e]));\n eventsService.current.set(events.map(toScheduleXEvent));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [eventsKey]);\n\n useEffect(() => {\n const app = calendarApp.current;\n if (!app) return;\n const state = (\n app as unknown as {\n $app: {\n calendarState: {\n view: { subscribe: (cb: (v: string) => void) => () => void };\n };\n };\n }\n ).$app?.calendarState?.view;\n if (!state?.subscribe) return;\n let isFirst = true;\n const unsubscribe = state.subscribe((viewName: string) => {\n if (isFirst) {\n isFirst = false;\n return;\n }\n const mapped = REVERSE_VIEW_MAP[viewName as ScheduleXViewName];\n if (mapped) onViewChangeRef.current?.(mapped);\n });\n return () => unsubscribe?.();\n }, []);\n\n return {\n calendarApp: calendarApp.current as CalendarApp | null,\n eventModal: eventModal.current,\n };\n}\n\nexport { useEventCalendar };\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ScheduleXCalendar } from '@schedule-x/react';\nimport type { CalendarApp } from '@schedule-x/calendar';\nimport { Clock, Pencil } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n} from '@/components/ui/Popover/popover';\nimport { EventCalendarContext } from './event-calendar-context';\nimport { eventCalendarStyles } from './event-calendar.styles';\nimport { useEventCalendar } from './hooks/use-event-calendar';\nimport type { EventCalendarProps, CalendarEvent, CalendarView } from './event-calendar.types';\n\nconst EVENT_COLOR: Record<string, string> = {\n default: '#22205f',\n primary: '#22205f',\n success: '#00a824',\n warning: '#c8a23b',\n danger: '#ea3a3d',\n};\n\n// position: fixed is relative to the nearest transformed ancestor, not the viewport.\n// Subtract that ancestor's offset so the anchor span renders at the correct viewport position.\nfunction getFixedAnchorRect(el: HTMLElement): DOMRect {\n const rect = el.getBoundingClientRect();\n let ancestor = el.parentElement;\n while (ancestor && ancestor !== document.documentElement) {\n if (window.getComputedStyle(ancestor).transform !== 'none') {\n const cb = ancestor.getBoundingClientRect();\n return new DOMRect(rect.left - cb.left, rect.top - cb.top, rect.width, rect.height);\n }\n ancestor = ancestor.parentElement;\n }\n return rect;\n}\n\nfunction formatEventTime(start: string, end: string): string {\n const isAllDay = start.length === 10;\n if (isAllDay) {\n const date = new Date(`${start}T00:00:00`);\n return date.toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' });\n }\n const fmt = (s: string) => {\n const [, time] = s.split(' ');\n const [h, m] = time.split(':').map(Number);\n const ampm = h >= 12 ? 'PM' : 'AM';\n const hour = h % 12 || 12;\n return `${hour}:${m.toString().padStart(2, '0')} ${ampm}`;\n };\n return `${fmt(start)} – ${fmt(end)}`;\n}\n\nfunction EventCalendar({\n events,\n defaultView = 'month',\n onViewChange,\n defaultDate,\n onEventClick,\n onEventCreate,\n locale = 'en-US',\n className,\n}: EventCalendarProps) {\n const [currentView, setCurrentView] = useState<CalendarView>(defaultView);\n const [selectedEvent, setSelectedEvent] = useState<CalendarEvent | null>(null);\n const [anchorRect, setAnchorRect] = useState<DOMRect | null>(null);\n // true when the last pointerdown outside PopoverContent was on a calendar event element.\n // Suppresses the schedule-x toggle-close so the popover stays open on re-click.\n const clickedEventElRef = useRef(false);\n\n const handleViewChange = useCallback(\n (view: CalendarView) => {\n setCurrentView(view);\n onViewChange?.(view);\n },\n [onViewChange],\n );\n\n const handleEventClick = useCallback(\n (event: CalendarEvent) => {\n setSelectedEvent(event);\n onEventClick?.(event);\n },\n [onEventClick],\n );\n\n const { calendarApp, eventModal } = useEventCalendar({\n events,\n defaultView,\n defaultDate,\n locale,\n onEventClick: handleEventClick,\n onEventCreate,\n onViewChange: handleViewChange,\n });\n\n useEffect(() => {\n const unsub = eventModal.calendarEventElement.subscribe((el) => {\n if (!el) {\n if (clickedEventElRef.current) {\n // schedule-x toggled off because user clicked an event element —\n // suppress the close so the popover stays open on re-click.\n clickedEventElRef.current = false;\n } else {\n setSelectedEvent(null);\n setAnchorRect(null);\n }\n } else {\n setAnchorRect(getFixedAnchorRect(el));\n }\n });\n return unsub;\n }, [eventModal]);\n\n const handlePopoverOpenChange = useCallback(\n (open: boolean) => {\n if (!open) {\n eventModal.close();\n setSelectedEvent(null);\n setAnchorRect(null);\n }\n },\n [eventModal],\n );\n\n const contextValue = useMemo(() => ({ currentView }), [currentView]);\n\n return (\n <EventCalendarContext.Provider value={contextValue}>\n {/* React 19 hoists this to <head> and dedupes by href, so the\n schedule-x theme overrides are injected once no matter how many\n calendars mount. */}\n <style href='tcce-event-calendar' precedence='default'>\n {eventCalendarStyles}\n </style>\n <Popover open={!!selectedEvent && !!anchorRect} onOpenChange={handlePopoverOpenChange}>\n <div data-slot='event-calendar' className={cn('sx-tcce w-full', className)}>\n <ScheduleXCalendar calendarApp={(calendarApp ?? null) as CalendarApp | null} />\n </div>\n\n {anchorRect && (\n <PopoverAnchor asChild>\n <span\n style={{\n position: 'fixed',\n top: anchorRect.top,\n left: anchorRect.left,\n width: anchorRect.width,\n height: anchorRect.height,\n pointerEvents: 'none',\n }}\n />\n </PopoverAnchor>\n )}\n\n <PopoverContent\n side='right'\n align='start'\n className='w-65 gap-2'\n onPointerDownOutside={(e) => {\n const target = e.target as HTMLElement;\n const isEventEl = target.closest(\n '.sx__month-grid-event, .sx__time-grid-event, .sx__month-agenda-event',\n );\n if (isEventEl) {\n e.preventDefault();\n clickedEventElRef.current = true;\n }\n }}\n >\n {selectedEvent && (\n <>\n <div className='flex items-start justify-between gap-2'>\n <div className='flex items-center gap-2'>\n <span\n className='size-2 shrink-0 rounded-full'\n style={{\n backgroundColor:\n EVENT_COLOR[selectedEvent.color ?? 'default'],\n }}\n />\n <span className='font-heading text-sm font-semibold leading-tight'>\n {selectedEvent.title}\n </span>\n </div>\n <Button variant='ghost' size='icon-sm' aria-label='Edit event'>\n <Pencil size={14} />\n </Button>\n </div>\n\n <div className='flex items-center gap-2 text-xs text-muted-foreground'>\n <Clock size={13} className='shrink-0' />\n <span>{formatEventTime(selectedEvent.start, selectedEvent.end)}</span>\n </div>\n\n {selectedEvent.description && (\n <p className='text-xs text-muted-foreground'>\n {selectedEvent.description}\n </p>\n )}\n </>\n )}\n </PopoverContent>\n </Popover>\n </EventCalendarContext.Provider>\n );\n}\n\nexport { EventCalendar };\nexport type {\n EventCalendarProps,\n CalendarEvent,\n CalendarView,\n EventCreateRange,\n} from './event-calendar.types';\n","import { useForm, type UseFormProps, type FieldValues } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport type { ZodType, z } from 'zod';\n\nexport function useAppForm<T extends ZodType>(\n schema: T,\n options?: Omit<UseFormProps<z.infer<T> & FieldValues>, 'resolver'>,\n) {\n return useForm<z.infer<T> & FieldValues>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolver: zodResolver(schema as any),\n ...options,\n });\n}\n\nexport { useFieldArray, Controller } from 'react-hook-form';\n","const CDN_BASE = 'https://dibt9vplwriap.cloudfront.net';\n\n/**\n * Brand logo assets served from the CDN.\n *\n * Keys are flat and prefixed by brand: unprefixed keys belong to Total Civil,\n * `millwork*` keys belong to Total Millwork.\n */\nexport const logos = {\n // Total Civil\n color: `${CDN_BASE}/logos/Logo_Total_Color.webp`,\n colorAna: `${CDN_BASE}/logos/Logo_Total_Color-ANA.webp`,\n colorAnaa: `${CDN_BASE}/logos/Logo_Total_Color-ANAA.webp`,\n negative: `${CDN_BASE}/logos/Logo_Total_Negative.webp`,\n positive: `${CDN_BASE}/logos/Logo_Total_Positive.webp`,\n grayScale: `${CDN_BASE}/logos/Logo_Total_gray_scale.webp`,\n monochBlack: `${CDN_BASE}/logos/Logo_Total_monochB.webp`,\n monochOrange: `${CDN_BASE}/logos/Logo_Total_monochO.webp`,\n isotype: `${CDN_BASE}/logos/Isotipo_Total_Color.webp`,\n\n // Total Millwork\n millworkColor: `${CDN_BASE}/logos/Logo_Millwork_Color.webp`,\n millworkNegative: `${CDN_BASE}/logos/Logo_Millwork_Negative.webp`,\n} as const;\n\nexport type LogoKey = keyof typeof logos;\n","import confetti from 'canvas-confetti';\n\n/**\n * Brand palette for the celebration burst, resolved from the `--color-main-*`\n * tokens rather than referenced through them: the canvas is appended to the\n * body, outside the themed tree, so `var()` would resolve against the document\n * root and miss any scoped override anyway.\n *\n * `--color-main-white` is deliberately absent. The app paints its page ground\n * `--color-main-light-background` (#f1f5f7), which swallows white particles.\n */\nexport const CONFETTI_COLORS = [\n '#22205f', // --color-main-blue-primary\n '#f66a24', // --color-main-orange-primary\n '#faca4a', // --color-main-yellow-primary\n '#01d42f', // --color-main-positive-state\n '#d93235', // --color-main-warning-state\n] as const;\n\nexport type FireConfettiOptions = {\n /** Particles per cannon. Two cannons fire, so the burst is twice this. */\n particleCount?: number;\n /** Vertical launch point: 0 is the top of the viewport, 1 the bottom. */\n originY?: number;\n /** Overrides the brand palette. Any CSS color string canvas can parse. */\n colors?: string[];\n};\n\n/**\n * Fires a celebration burst from two cannons angled inward at the lower corners\n * of the viewport.\n *\n * The geometry is the whole point. A single centred burst reads as a puff and\n * dies mid-screen; the crossfire covers the full width, which is what carries\n * the celebration. Launching from 0.7 rather than the centre reads as confetti\n * thrown upward instead of an explosion pushing outward.\n *\n * Resolves once the last particle has settled, so a caller can sequence on it.\n * Honours `prefers-reduced-motion`, in which case it resolves immediately\n * without drawing.\n */\nexport function fireConfetti({\n particleCount = 60,\n originY = 0.7,\n colors = [...CONFETTI_COLORS],\n}: FireConfettiOptions = {}): Promise<void> {\n const shared: confetti.Options = {\n particleCount,\n colors,\n spread: 70,\n startVelocity: 55,\n disableForReducedMotion: true,\n };\n\n return Promise.all([\n confetti({ ...shared, angle: 60, origin: { x: 0, y: originY } }),\n confetti({ ...shared, angle: 120, origin: { x: 1, y: originY } }),\n ]).then(() => undefined);\n}\n\n/**\n * Clears every burst still in flight and removes the canvas.\n *\n * For a caller that unmounts, or navigates away, while particles are airborne.\n */\nexport function resetConfetti(): void {\n confetti.reset();\n}\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Table({\n className,\n containerClassName = 'overflow-x-auto',\n ...props\n}: ComponentProps<'table'> & {\n /**\n * Classes for the scroll container that wraps the table. Defaults to\n * `overflow-x-auto` for horizontal scrolling. Pass `overflow-visible` when an\n * outer element already owns scrolling (e.g. a sticky-header data table) —\n * a nested scroll container would otherwise trap `position: sticky` cells.\n */\n containerClassName?: string;\n}) {\n return (\n <div data-slot='table-container' className={cn('relative w-full', containerClassName)}>\n <table\n data-slot='table'\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: ComponentProps<'thead'>) {\n return (\n <thead data-slot='table-header' className={cn('[&_tr]:border-b', className)} {...props} />\n );\n}\n\nfunction TableBody({ className, ...props }: ComponentProps<'tbody'>) {\n return (\n <tbody\n data-slot='table-body'\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot='table-footer'\n className={cn('bg-muted/50 border-t font-medium last:[&>tr]:border-b-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: ComponentProps<'tr'>) {\n return (\n <tr\n data-slot='table-row'\n className={cn(\n 'hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: ComponentProps<'th'>) {\n return (\n <th\n data-slot='table-head'\n className={cn(\n 'text-foreground has-[[role=checkbox]]:pr-0 h-12 px-3 text-left align-middle font-medium whitespace-nowrap',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: ComponentProps<'td'>) {\n return (\n <td\n data-slot='table-cell'\n className={cn(\n 'has-[[role=checkbox]]:pr-0 p-3 align-middle whitespace-nowrap',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: ComponentProps<'caption'>) {\n return (\n <caption\n data-slot='table-caption'\n className={cn('text-muted-foreground mt-4 text-sm', className)}\n {...props}\n />\n );\n}\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","import { type ComponentProps } from 'react';\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { CheckIcon, MinusIcon } from 'lucide-react';\n\nfunction Checkbox({\n className,\n checked,\n ...props\n}: ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot='checkbox'\n checked={checked}\n className={cn(\n 'peer border-input bg-background focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground dark:data-[state=checked]:bg-primary relative flex size-4 shrink-0 items-center justify-center rounded-[5px] border transition-shadow outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3',\n className,\n )}\n {...props}>\n <CheckboxPrimitive.Indicator\n data-slot='checkbox-indicator'\n className='grid place-content-center text-current transition-none [&>svg]:size-3.5'>\n {checked === 'indeterminate' ? (\n <MinusIcon aria-hidden='true' />\n ) : (\n <CheckIcon aria-hidden='true' />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","import { memo, useId, type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/Select/select';\nimport type { TablePaginationProps } from '../Table/data-table.types';\n\nfunction Pagination({ className, ...props }: ComponentProps<'nav'>) {\n return (\n <nav\n role='navigation'\n aria-label='pagination'\n data-slot='pagination'\n className={cn('mx-auto flex w-full justify-center', className)}\n {...props}\n />\n );\n}\n\nfunction PaginationContent({ className, ...props }: ComponentProps<'ul'>) {\n return (\n <ul\n data-slot='pagination-content'\n className={cn('flex items-center gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction PaginationItem({ ...props }: ComponentProps<'li'>) {\n return <li data-slot='pagination-item' {...props} />;\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n} & Pick<ComponentProps<typeof Button>, 'size'> &\n ComponentProps<'a'>;\n\nfunction PaginationLink({ className, isActive, size = 'sm', ...props }: PaginationLinkProps) {\n return (\n <Button\n asChild\n variant={isActive ? 'outline' : 'ghost'}\n size={size}\n className={cn(className)}>\n <a\n aria-current={isActive ? 'page' : undefined}\n data-slot='pagination-link'\n data-active={isActive}\n {...props}\n />\n </Button>\n );\n}\n\nfunction PaginationPrevious({\n className,\n text = 'Previous',\n ...props\n}: ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label='Go to previous page'\n size='sm'\n className={cn('pl-2!', className)}\n {...props}>\n <ChevronLeftIcon data-icon='inline-start' />\n <span className='hidden sm:block'>{text}</span>\n </PaginationLink>\n );\n}\n\nfunction PaginationNext({\n className,\n text = 'Next',\n ...props\n}: ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label='Go to next page'\n size='sm'\n className={cn('pr-2!', className)}\n {...props}>\n <span className='hidden sm:block'>{text}</span>\n <ChevronRightIcon data-icon='inline-end' />\n </PaginationLink>\n );\n}\n\nfunction PaginationEllipsis({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n aria-hidden\n data-slot='pagination-ellipsis'\n className={cn(\n \"flex size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <MoreHorizontalIcon />\n <span className='sr-only'>More pages</span>\n </span>\n );\n}\n\n// Page-number generation mirrors the legacy TablePagination:\n// show all pages when total <= 7; otherwise first + last + a window\n// around the current page, with 'ellipsis' fillers.\nfunction getPageItems(page: number, totalPages: number): (number | 'ellipsis')[] {\n if (totalPages <= 7) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n const items: (number | 'ellipsis')[] = [1];\n const start = Math.max(2, page - 1);\n const end = Math.min(totalPages - 1, page + 1);\n if (start > 2) items.push('ellipsis');\n for (let p = start; p <= end; p++) items.push(p);\n if (end < totalPages - 1) items.push('ellipsis');\n items.push(totalPages);\n return items;\n}\n\nconst DEFAULT_ROWS_PER_PAGE = [10, 25, 50, 100];\n\nfunction TablePaginationBase({\n page,\n totalPages,\n perPage,\n totalRecords,\n rowsPerPageOptions = DEFAULT_ROWS_PER_PAGE,\n onPageChange,\n onPerPageChange,\n}: TablePaginationProps) {\n const rowsPerPageLabelId = useId();\n const pageItems = getPageItems(page, totalPages);\n\n // Guard empty state: show 0–0 when there are no records.\n const hasRecords = totalRecords !== undefined && totalRecords > 0;\n const from = hasRecords ? (page - 1) * perPage + 1 : 0;\n const to = hasRecords ? Math.min(page * perPage, totalRecords as number) : 0;\n\n // Derive position-stable ellipsis keys: at most two ellipses can appear,\n // one near the start and one near the end of the page range.\n let ellipsisCount = 0;\n const ellipsisKeys = pageItems.map((item) => {\n if (item === 'ellipsis') {\n ellipsisCount += 1;\n return ellipsisCount === 1 ? 'ellipsis-start' : 'ellipsis-end';\n }\n return null;\n });\n\n return (\n <nav\n role='navigation'\n aria-label='Table pagination'\n data-slot='table-pagination'\n className='flex flex-wrap items-center justify-between gap-4 py-2'>\n {totalRecords !== undefined && totalRecords > 0 && (\n <p className='text-muted-foreground text-sm'>\n Showing {from}–{to} of {totalRecords}\n </p>\n )}\n\n <ul data-slot='pagination-content' className='flex items-center gap-1'>\n <li>\n <Button\n variant='ghost'\n size='sm'\n aria-label='Go to previous page'\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}>\n <ChevronLeftIcon data-icon='inline-start' />\n <span className='hidden sm:block'>Previous</span>\n </Button>\n </li>\n\n {pageItems.map((item, index) =>\n item === 'ellipsis' ? (\n <li key={ellipsisKeys[index]!}>\n <span aria-hidden className='flex size-9 items-center justify-center'>\n <MoreHorizontalIcon />\n </span>\n </li>\n ) : (\n <li key={item}>\n <Button\n variant={item === page ? 'primary' : 'ghost'}\n size='sm'\n aria-current={item === page ? 'page' : undefined}\n onClick={() => onPageChange(item)}>\n {item}\n </Button>\n </li>\n ),\n )}\n\n <li>\n <Button\n variant='ghost'\n size='sm'\n aria-label='Go to next page'\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}>\n <span className='hidden sm:block'>Next</span>\n <ChevronRightIcon data-icon='inline-end' />\n </Button>\n </li>\n </ul>\n\n <div className='flex items-center gap-2'>\n {/* Programmatically associated with the SelectTrigger via aria-labelledby */}\n <span id={rowsPerPageLabelId} className='text-muted-foreground text-sm'>\n Rows per page\n </span>\n <Select value={String(perPage)} onValueChange={(v) => onPerPageChange(Number(v))}>\n <SelectTrigger aria-labelledby={rowsPerPageLabelId} className='w-20'>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {rowsPerPageOptions.map((opt) => (\n <SelectItem key={opt} value={String(opt)}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </nav>\n );\n}\n\nconst TablePagination = memo(TablePaginationBase);\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n TablePagination,\n};\n","import { createContext, useContext } from 'react';\n\nimport type { TableContextType } from './data-table.types';\n\nconst TableContext = createContext<TableContextType<unknown> | null>(null);\n\nfunction useTableContext<T = unknown>() {\n const ctx = useContext(TableContext);\n if (!ctx) {\n throw new Error('useTableContext must be used within DataTable');\n }\n // React context cannot be runtime-generic: the context is created as\n // TableContextType<unknown> and re-cast to the consumer's T at this hook\n // boundary. The cast is intentional — there is no runtime way to parameterise\n // a React context with T, so type safety for T through context is not\n // guaranteed and must be enforced by the DataTable provider at the call site.\n return ctx as unknown as TableContextType<T>;\n}\n\n/** Returns the context value or null when called outside a DataTable provider. */\nfunction useTableContextSafe<T = unknown>() {\n return useContext(TableContext) as TableContextType<T> | null;\n}\n\nexport { TableContext, useTableContext, useTableContextSafe };\n","import type { TableCellSize } from './data-table.types';\n\n/**\n * Padding and type scale per density step, shared by header and body cells.\n *\n * Both `DataTableHeaderCell` and `DataTableCell` must consume this map: if only\n * the body applied it, header labels and cell values would sit at different\n * horizontal offsets and the density toggle would move the body alone.\n */\nconst cellSizeClass: Record<TableCellSize, string> = {\n sm: 'px-3 py-1.5 text-xs',\n md: 'px-5 py-2.5 text-sm',\n lg: 'px-6 py-3 text-sm',\n};\n\nexport { cellSizeClass };\n","import { useMemo, type ReactNode } from 'react';\nimport { flexRender, type Row, type Column, type Cell } from '@tanstack/react-table';\n\nimport { cn } from '@/lib/utils';\nimport type { ColumnMeta, TableCellSize, TableVariant } from './data-table.types';\n\ninterface DataTableCardViewProps<T> {\n rows: Row<T>[];\n columns: Column<T, unknown>[];\n size?: TableCellSize;\n variant?: TableVariant;\n onRowClick?: (row: T) => void;\n isLoading?: boolean;\n skeletonRowCount?: number;\n emptyState?: ReactNode;\n}\n\nconst cardPadding: Record<TableCellSize, string> = {\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-5',\n};\n\nfunction DataTableCardView<T>({\n rows,\n columns,\n size = 'md',\n variant = 'default',\n onRowClick,\n isLoading,\n skeletonRowCount = 5,\n emptyState,\n}: DataTableCardViewProps<T>) {\n // Hooks must run unconditionally, before any early return (rules of hooks).\n const selectCol = useMemo(() => columns.find((c) => c.id === 'select'), [columns]);\n const actionsCol = useMemo(() => columns.find((c) => c.id === 'actions'), [columns]);\n const dataColumns = useMemo(\n () =>\n columns.filter(\n (c) =>\n c.id !== 'select' &&\n c.id !== 'actions' &&\n !(c.columnDef.meta as ColumnMeta)?.hideInCard,\n ),\n [columns],\n );\n\n if (isLoading) {\n return (\n <div className='space-y-2' aria-busy='true' aria-label='Loading table data'>\n {Array.from({ length: skeletonRowCount }).map((_, i) => (\n <div\n key={i}\n className={cn(\n 'bg-card animate-pulse rounded-md border',\n cardPadding[size],\n )}>\n <div className='space-y-2'>\n <div className='bg-muted h-4 w-1/3 rounded' aria-hidden='true' />\n <div className='bg-muted h-3 w-full rounded' aria-hidden='true' />\n <div className='bg-muted h-3 w-2/3 rounded' aria-hidden='true' />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (rows.length === 0) {\n return (\n <div className='bg-card text-muted-foreground rounded-md border p-8 text-center'>\n {emptyState ?? 'No results found'}\n </div>\n );\n }\n\n return (\n <div\n data-slot='data-table-card-view'\n className='space-y-2'\n role='list'\n aria-label='Table rows'>\n {rows.map((row) => {\n const isSelected = row.getIsSelected();\n const visibleCells = row.getVisibleCells();\n\n // Compute select/actions cells above the return to avoid IIFE patterns.\n const selectCell: Cell<T, unknown> | undefined = selectCol\n ? visibleCells.find((c) => c.column.id === 'select')\n : undefined;\n const actionsCell: Cell<T, unknown> | undefined = actionsCol\n ? visibleCells.find((c) => c.column.id === 'actions')\n : undefined;\n\n return (\n <div\n key={row.id}\n role='listitem'\n data-state={isSelected ? 'selected' : undefined}\n data-variant={variant}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n onKeyDown={\n onRowClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n }\n : undefined\n }\n tabIndex={onRowClick ? 0 : undefined}\n className={cn(\n 'bg-card text-card-foreground rounded-md border transition-colors',\n cardPadding[size],\n isSelected && 'border-primary/50 bg-muted',\n onRowClick &&\n 'hover:bg-muted focus-visible:ring-ring cursor-pointer focus-visible:ring-2 focus-visible:outline-none',\n variant === 'striped' && 'odd:bg-muted/20',\n )}>\n {selectCell && (\n <div className='mb-3 flex items-center'>\n {flexRender(selectCol!.columnDef.cell, selectCell.getContext())}\n </div>\n )}\n\n <dl className='grid grid-cols-2 gap-x-4 gap-y-2'>\n {dataColumns.map((col) => {\n const meta = (col.columnDef.meta ?? {}) as ColumnMeta;\n const cell = visibleCells.find((c) => c.column.id === col.id);\n if (!cell) return null;\n const labelText =\n meta.cardLabel ??\n (typeof col.columnDef.header === 'string'\n ? col.columnDef.header\n : col.id);\n return (\n <div key={col.id} className='flex flex-col gap-0.5'>\n <dt className='text-muted-foreground text-xs font-medium'>\n {labelText}\n </dt>\n <dd className='truncate text-sm'>\n {flexRender(col.columnDef.cell, cell.getContext())}\n </dd>\n </div>\n );\n })}\n </dl>\n\n {actionsCell && (\n <div className='mt-3 flex justify-end border-t pt-2'>\n {flexRender(actionsCol!.columnDef.cell, actionsCell.getContext())}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\nexport { DataTableCardView };\nexport type { DataTableCardViewProps };\n","import type { Row } from '@tanstack/react-table';\nimport type { ColumnFiltersState } from '@tanstack/react-table';\n\n/**\n * Extracts unique values from a column in the dataset\n * @param data - The array of data objects\n * @param columnId - The column identifier\n * @param accessor - Optional accessor function to get the value from a row\n * @returns Array of unique string values, sorted alphabetically\n */\nexport function getUniqueColumnValues<T>(\n data: T[],\n columnId: string,\n accessor?: (row: T, index: number) => unknown,\n): string[] {\n const values = new Set<string>();\n\n data.forEach((row, index) => {\n let value: unknown;\n\n if (accessor) {\n value = accessor(row, index);\n } else {\n // Default: access by columnId\n value = (row as Record<string, unknown>)[columnId];\n }\n\n // Convert to string and add to set (handles null/undefined)\n if (value != null) {\n values.add(String(value));\n }\n });\n\n // Intentional locale fix: pass 'en' for deterministic cross-locale alphabetical sort.\n return Array.from(values).sort((a, b) => a.localeCompare(b, 'en'));\n}\n\n/**\n * Custom filter function for TanStack Table multi-select filtering\n * Checks if the row's value is included in the array of selected filter values\n * @param row - The row being filtered\n * @param columnId - The column identifier\n * @param filterValue - Array of selected filter values\n * @returns true if the row should be included in filtered results\n */\nexport function multiSelectFilter<T>(row: Row<T>, columnId: string, filterValue: unknown): boolean {\n // Guard: only treat the value as a string array when it actually is one.\n const filterValues: string[] = Array.isArray(filterValue) ? (filterValue as string[]) : [];\n\n // If no filters selected, pass through — show all rows (original semantics).\n if (filterValues.length === 0) {\n return true;\n }\n\n // Get the cell value\n const cellValue = row.getValue(columnId);\n\n // Convert to string and check if it's in the filter array\n if (cellValue != null) {\n return filterValues.includes(String(cellValue));\n }\n\n return false;\n}\n\n/**\n * Searches for a term within an array of items (case-insensitive)\n * @param items - Array of items to search through\n * @param searchTerm - The search term\n * @returns Filtered array of items matching the search term\n */\nexport function searchInArray(items: string[], searchTerm: string): string[] {\n if (!searchTerm || searchTerm.trim() === '') {\n return items;\n }\n\n const normalizedSearch = searchTerm.toLowerCase().trim();\n\n return items.filter((item) => item.toLowerCase().includes(normalizedSearch));\n}\n\n/**\n * Gets the count of rows for each unique value in a column\n * Useful for showing counts next to filter options (e.g., \"Active (5)\")\n * @param data - The array of data objects\n * @param columnId - The column identifier\n * @param accessor - Optional accessor function to get the value from a row\n * @returns Object mapping values to their counts\n */\nexport function getColumnValueCounts<T>(\n data: T[],\n columnId: string,\n accessor?: (row: T, index: number) => unknown,\n): Record<string, number> {\n const counts: Record<string, number> = {};\n\n data.forEach((row, index) => {\n let value: unknown;\n\n if (accessor) {\n value = accessor(row, index);\n } else {\n value = (row as Record<string, unknown>)[columnId];\n }\n\n if (value != null) {\n const stringValue = String(value);\n counts[stringValue] = (counts[stringValue] || 0) + 1;\n }\n });\n\n return counts;\n}\n\n/**\n * Checks if a column has active filters\n * @param columnFilters - Current column filters state\n * @param columnId - The column identifier\n * @returns true if the column has active filters\n */\nexport function hasActiveFilters(columnFilters: ColumnFiltersState, columnId: string): boolean {\n const filter = columnFilters.find((f) => f.id === columnId);\n if (!filter) return false;\n return Array.isArray(filter.value) ? filter.value.length > 0 : false;\n}\n\n/**\n * Gets the active filter values for a specific column\n * @param columnFilters - Current column filters state\n * @param columnId - The column identifier\n * @returns Array of active filter values for the column\n */\nexport function getActiveFilterValues(\n columnFilters: ColumnFiltersState,\n columnId: string,\n): string[] {\n const filter = columnFilters.find((f) => f.id === columnId);\n if (!filter) return [];\n return Array.isArray(filter.value) ? (filter.value as string[]) : [];\n}\n\n/**\n * Gets the count of active filters across all columns\n * @param columnFilters - Current column filters state\n * @returns Total number of active filter values\n */\nexport function getActiveFilterCount(columnFilters: ColumnFiltersState): number {\n return columnFilters.reduce((total, filter) => {\n return total + (Array.isArray(filter.value) ? filter.value.length : 0);\n }, 0);\n}\n","import { memo, useCallback, useId, useMemo, useState } from 'react';\nimport { Funnel } from 'lucide-react';\nimport { Button } from '@/components/ui/Button/button';\nimport { Checkbox } from '@/components/ui/Checkbox/checkbox';\nimport { Input } from '@/components/ui/Input/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\nimport { cn } from '@/lib/utils';\n\nimport { searchInArray } from './utils/filter-utils';\n\ninterface FilterOptionProps {\n value: string;\n checked: boolean;\n onChange: (value: string, checked: boolean) => void;\n}\n\nconst FilterOption = memo(function FilterOption({\n value,\n checked,\n onChange,\n}: FilterOptionProps) {\n // Radix Checkbox renders a <button role=\"checkbox\">. A button is a labelable\n // element, so an explicit htmlFor/id association gives it an accessible name\n // (equal to the visible text) and lets clicking the text toggle it.\n const id = useId();\n return (\n <div className='hover:bg-muted flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm'>\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(state) => onChange(value, state === true)}\n />\n <label htmlFor={id} className='flex-1 cursor-pointer truncate'>\n {value}\n </label>\n </div>\n );\n});\n\ninterface DataTableColumnFilterProps {\n options: string[];\n selectedValues: string[];\n onChange: (values: string[]) => void;\n searchPlaceholder?: string;\n /** Human-readable column name used to build accessible labels. */\n columnLabel?: string;\n}\n\nfunction DataTableColumnFilter({\n options,\n selectedValues,\n onChange,\n searchPlaceholder,\n columnLabel = 'column',\n}: DataTableColumnFilterProps) {\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n\n const listId = useId();\n\n const hasActive = selectedValues.length > 0;\n const visibleOptions = useMemo(\n () => (search ? searchInArray(options, search) : options),\n [options, search],\n );\n\n const handleOptionChange = useCallback(\n (value: string, checked: boolean) => {\n if (checked) onChange([...selectedValues, value]);\n else onChange(selectedValues.filter((v) => v !== value));\n },\n [selectedValues, onChange],\n );\n\n const allVisibleSelected =\n visibleOptions.length > 0 && visibleOptions.every((o) => selectedValues.includes(o));\n\n const toggleSelectAll = useCallback(() => {\n if (allVisibleSelected) {\n onChange(selectedValues.filter((v) => !visibleOptions.includes(v)));\n } else {\n const merged = new Set([...selectedValues, ...visibleOptions]);\n onChange(Array.from(merged));\n }\n }, [allVisibleSelected, selectedValues, visibleOptions, onChange]);\n\n const resolvedPlaceholder = searchPlaceholder ?? `Search ${columnLabel}…`;\n // Convey active state via text, not color/shape alone (WCAG 1.4.1).\n const triggerLabel = hasActive\n ? `Filter ${columnLabel}, ${selectedValues.length} selected`\n : `Filter ${columnLabel}`;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n data-slot='data-table-column-filter'\n variant='ghost'\n size='sm'\n aria-label={triggerLabel}\n data-active={hasActive || undefined}\n className={cn(\n 'size-7 cursor-pointer p-0 text-white/80 hover:text-white',\n 'focus-visible:border-transparent focus-visible:ring-2 focus-visible:ring-white/70',\n hasActive && 'text-white',\n )}>\n {hasActive ? (\n <Funnel className='size-4' aria-hidden='true' fill='white' />\n ) : (\n <Funnel className='size-4' aria-hidden='true' />\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent align='start' className='w-64 p-2'>\n <Input\n type='text'\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={resolvedPlaceholder}\n aria-label={resolvedPlaceholder}\n aria-controls={listId}\n className='mb-2 h-8'\n />\n <button\n type='button'\n onClick={toggleSelectAll}\n aria-pressed={allVisibleSelected}\n disabled={visibleOptions.length === 0}\n className='hover:bg-muted mb-1 w-full rounded-sm px-2 py-1.5 text-left text-sm font-medium disabled:pointer-events-none disabled:opacity-50'>\n {allVisibleSelected ? 'Deselect all' : 'Select all'}\n </button>\n {/* Polite live region announces result count as the user types. */}\n <span className='sr-only' role='status' aria-live='polite'>\n {visibleOptions.length === 0\n ? 'No options'\n : `${visibleOptions.length} options`}\n </span>\n <div\n id={listId}\n role='group'\n aria-label={`${columnLabel} filter options`}\n className='max-h-64 overflow-y-auto'>\n {visibleOptions.length === 0 ? (\n <p className='text-muted-foreground px-2 py-1.5 text-sm'>No options</p>\n ) : (\n visibleOptions.map((option) => (\n <FilterOption\n key={option}\n value={option}\n checked={selectedValues.includes(option)}\n onChange={handleOptionChange}\n />\n ))\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DataTableColumnFilter, FilterOption };\nexport type { DataTableColumnFilterProps, FilterOptionProps };\n","import { useCallback } from 'react';\n\nimport { useTableContext } from '../data-table-context';\nimport { getActiveFilterValues } from '../utils/filter-utils';\n\nexport function useColumnFilter(columnId: string) {\n const { columnFilters, setColumnFilters } = useTableContext();\n\n const selectedValues = getActiveFilterValues(columnFilters, columnId);\n\n const handleChange = useCallback(\n (values: string[]) => {\n const newFilters = [...columnFilters];\n const existingFilterIndex = newFilters.findIndex((f) => f.id === columnId);\n\n if (values.length > 0) {\n if (existingFilterIndex >= 0) {\n newFilters[existingFilterIndex] = { id: columnId, value: values };\n } else {\n newFilters.push({ id: columnId, value: values });\n }\n } else {\n if (existingFilterIndex >= 0) {\n newFilters.splice(existingFilterIndex, 1);\n }\n }\n\n setColumnFilters(newFilters);\n },\n [columnFilters, columnId, setColumnFilters],\n );\n\n return {\n selectedValues,\n handleChange,\n };\n}\n","import type { AriaAttributes, CSSProperties } from 'react';\nimport { flexRender, type Header } from '@tanstack/react-table';\nimport {ArrowUp, ArrowDown, ArrowUpDown} from 'lucide-react';\nimport { TableHead } from '@/components/ui/Table/table';\nimport { cn } from '@/lib/utils';\n\nimport { DataTableColumnFilter } from './data-table-column-filter';\nimport { cellSizeClass } from './cell-size-class';\nimport { useTableContext } from './data-table-context';\nimport { useColumnFilter } from './hooks/use-column-filter';\nimport type { ColumnMeta } from './data-table.types';\n\ninterface DataTableHeaderCellProps<T> {\n header: Header<T, unknown>;\n}\n\nfunction DataTableHeaderCell<T>({ header }: DataTableHeaderCellProps<T>) {\n const { getUniqueValues, size: tableSize } = useTableContext<T>();\n const column = header.column;\n const meta = (column.columnDef.meta ?? {}) as ColumnMeta;\n\n const canSort = column.getCanSort() && meta.sortable !== false;\n const canFilter = column.getCanFilter() && meta.filterable !== false;\n const canResize = header.column.getCanResize() && meta.resizable !== false;\n const sortDir = column.getIsSorted();\n const pinned = column.getIsPinned();\n\n const { selectedValues, handleChange } = useColumnFilter(column.id);\n const options = getUniqueValues?.(column.id) ?? [];\n\n const pinnedStyle: CSSProperties | undefined = pinned\n ? {\n position: 'sticky',\n left: pinned === 'left' ? column.getStart('left') : undefined,\n right: pinned === 'right' ? column.getAfter('right') : undefined,\n zIndex: 21,\n }\n : undefined;\n\n // Map TanStack sort state to the WAI-ARIA aria-sort attribute value.\n const ariaSortValue: AriaAttributes['aria-sort'] = canSort\n ? sortDir === 'asc'\n ? 'ascending'\n : sortDir === 'desc'\n ? 'descending'\n : 'none'\n : undefined;\n\n return (\n <TableHead\n data-slot='data-table-header-cell'\n data-size={meta.size ?? tableSize}\n data-align={meta.align ?? 'left'}\n data-pinned={pinned || undefined}\n aria-sort={ariaSortValue}\n style={{\n width: canResize ? header.column.getSize() : meta.width,\n minWidth: meta.width,\n ...pinnedStyle,\n }}\n className={cn(\n 'bg-primary text-primary-foreground',\n // Same density padding as the body cells: without it the header\n // label and the cell value below it sit at different offsets.\n cellSizeClass[meta.size ?? tableSize],\n canResize && 'relative',\n meta.align === 'center' && 'text-center',\n meta.align === 'right' && 'text-right',\n meta.className,\n )}>\n <div\n className={cn(\n 'flex items-center gap-1',\n meta.align === 'center' && 'justify-center',\n meta.align === 'right' && 'justify-end',\n )}>\n {canSort ? (\n <button\n type='button'\n onClick={column.getToggleSortingHandler()}\n className='inline-flex items-center gap-1 rounded-sm outline-none focus-visible:ring-2 focus-visible:ring-white/70'>\n {flexRender(column.columnDef.header, header.getContext())}\n {sortDir === 'asc' ? (\n <ArrowUp className='size-4' aria-hidden='true' />\n ) : sortDir === 'desc' ? (\n <ArrowDown className='size-4' aria-hidden='true' />\n ) : (\n <ArrowUpDown className='size-4 opacity-60' aria-hidden='true' />\n )}\n </button>\n ) : (\n flexRender(column.columnDef.header, header.getContext())\n )}\n {canFilter && (\n <DataTableColumnFilter\n options={options}\n selectedValues={selectedValues}\n onChange={handleChange}\n columnLabel={column.id}\n />\n )}\n </div>\n {canResize && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn(\n 'absolute top-0 right-0 h-full w-1 cursor-col-resize touch-none select-none',\n 'hover:bg-white/30',\n header.column.getIsResizing() && 'bg-white/50',\n )}\n aria-hidden='true'\n />\n )}\n </TableHead>\n );\n}\n\nexport { DataTableHeaderCell };\nexport type { DataTableHeaderCellProps };\n","import { Skeleton } from '@/components/ui/Skeleton/skeleton';\nimport { TableCell, TableRow } from '@/components/ui/Table/table';\n\nimport type { TableCellSize } from './data-table.types';\n\nconst sizeClass: Record<TableCellSize, string> = {\n sm: 'h-8',\n md: 'h-10',\n lg: 'h-12',\n};\n\ninterface DataTableSkeletonProps {\n columnCount: number;\n rowCount?: number;\n size?: TableCellSize;\n}\n\nfunction DataTableSkeleton({ columnCount, rowCount = 5, size = 'md' }: DataTableSkeletonProps) {\n return (\n <>\n {Array.from({ length: rowCount }).map((_, rowIndex) => (\n <TableRow\n key={`skeleton-row-${rowIndex}`}\n data-slot='table-skeleton-row'\n aria-busy='true'>\n {Array.from({ length: columnCount }).map((_, cellIndex) => (\n <TableCell\n key={`skeleton-cell-${rowIndex}-${cellIndex}`}\n className={sizeClass[size]}>\n <Skeleton className='h-4 w-full' />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </>\n );\n}\n\nexport { DataTableSkeleton };\nexport type { DataTableSkeletonProps };\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { SortingState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSortingProps {\n /**\n * Controlled sorting state (optional)\n * If provided, the component operates in controlled mode\n */\n sorting?: SortingState;\n\n /**\n * Default sorting state for uncontrolled mode\n * @default []\n */\n defaultSorting?: SortingState;\n\n /**\n * Callback fired when sorting changes\n * Required for controlled mode, optional for uncontrolled\n */\n onSortingChange?: (sorting: SortingState) => void;\n}\n\nexport interface UseTableSortingReturn {\n /**\n * Current sorting state (controlled or internal)\n */\n sortingState: SortingState;\n\n /**\n * Handler for TanStack Table's onSortingChange\n */\n handleSortingChange: (updater: Updater<SortingState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setSorting: (sorting: SortingState) => void;\n}\n\n/**\n * Hook to manage table sorting state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { sortingState, handleSortingChange } = useTableSorting({\n * defaultSorting: [{ id: 'name', desc: false }],\n * onSortingChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [sorting, setSorting] = useState<SortingState>([]);\n * const { sortingState, handleSortingChange } = useTableSorting({\n * sorting,\n * onSortingChange: setSorting\n * });\n * ```\n */\nexport function useTableSorting({\n sorting: controlledSorting,\n defaultSorting = [],\n onSortingChange,\n}: UseTableSortingProps): UseTableSortingReturn {\n // Internal state for uncontrolled mode\n const [internalSorting, setInternalSorting] = useState<SortingState>(defaultSorting);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onSortingChange);\n useLayoutEffect(() => {\n onChangeRef.current = onSortingChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledSorting !== undefined;\n\n // Use controlled sorting if provided, otherwise use internal state\n const sortingState = isControlled ? controlledSorting : internalSorting;\n\n /**\n * Handle sorting changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleSortingChange = useCallback(\n (updater: Updater<SortingState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newSorting =\n typeof updater === 'function' ? updater(controlledSorting) : updater;\n onChangeRef.current?.(newSorting);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalSorting((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledSorting is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledSorting],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setSorting = useCallback(\n (newSorting: SortingState) => {\n if (isControlled) {\n onChangeRef.current?.(newSorting);\n } else {\n setInternalSorting(newSorting);\n onChangeRef.current?.(newSorting);\n }\n },\n [isControlled],\n );\n\n return {\n sortingState,\n handleSortingChange,\n isControlled,\n setSorting,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { ColumnFiltersState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableFilteringProps {\n /**\n * Controlled column filters state (optional)\n * If provided, the component operates in controlled mode\n */\n columnFilters?: ColumnFiltersState;\n\n /**\n * Default column filters state for uncontrolled mode\n * @default []\n */\n defaultColumnFilters?: ColumnFiltersState;\n\n /**\n * Callback fired when column filters change\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnFiltersChange?: (columnFilters: ColumnFiltersState) => void;\n}\n\nexport interface UseTableFilteringReturn {\n /**\n * Current column filters state (controlled or internal)\n */\n columnFiltersState: ColumnFiltersState;\n\n /**\n * Handler for TanStack Table's onColumnFiltersChange\n */\n handleColumnFiltersChange: (updater: Updater<ColumnFiltersState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnFilters: (columnFilters: ColumnFiltersState) => void;\n}\n\n/**\n * Hook to manage table column filtering state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnFiltersState, handleColumnFiltersChange } = useTableFiltering({\n * defaultColumnFilters: [{ id: 'status', value: ['Active'] }],\n * onColumnFiltersChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [filters, setFilters] = useState<ColumnFiltersState>([]);\n * const { columnFiltersState, handleColumnFiltersChange } = useTableFiltering({\n * columnFilters: filters,\n * onColumnFiltersChange: setFilters\n * });\n * ```\n */\nexport function useTableFiltering({\n columnFilters: controlledFilters,\n defaultColumnFilters = [],\n onColumnFiltersChange,\n}: UseTableFilteringProps): UseTableFilteringReturn {\n // Internal state for uncontrolled mode\n const [internalFilters, setInternalFilters] =\n useState<ColumnFiltersState>(defaultColumnFilters);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnFiltersChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnFiltersChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledFilters !== undefined;\n\n // Use controlled filters if provided, otherwise use internal state\n const columnFiltersState = isControlled ? controlledFilters : internalFilters;\n\n /**\n * Handle column filters changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnFiltersChange = useCallback(\n (updater: Updater<ColumnFiltersState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newFilters =\n typeof updater === 'function' ? updater(controlledFilters) : updater;\n onChangeRef.current?.(newFilters);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalFilters((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledFilters is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledFilters],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnFilters = useCallback(\n (newFilters: ColumnFiltersState) => {\n if (isControlled) {\n onChangeRef.current?.(newFilters);\n } else {\n setInternalFilters(newFilters);\n onChangeRef.current?.(newFilters);\n }\n },\n [isControlled],\n );\n\n return {\n columnFiltersState,\n handleColumnFiltersChange,\n isControlled,\n setColumnFilters,\n };\n}\n","import { useState, useCallback } from 'react';\nimport type { RowSelectionState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSelectionProps {\n rowSelection?: RowSelectionState;\n defaultRowSelection?: RowSelectionState;\n onRowSelectionChange?: (state: RowSelectionState) => void;\n}\n\nexport interface UseTableSelectionReturn {\n rowSelectionState: RowSelectionState;\n handleRowSelectionChange: (updater: Updater<RowSelectionState>) => void;\n setRowSelection: (state: RowSelectionState) => void;\n}\n\nexport function useTableSelection({\n rowSelection: controlled,\n defaultRowSelection = {},\n onRowSelectionChange,\n}: UseTableSelectionProps): UseTableSelectionReturn {\n const [internal, setInternal] = useState<RowSelectionState>(defaultRowSelection);\n const isControlled = controlled !== undefined;\n const rowSelectionState = isControlled ? controlled : internal;\n\n const handleRowSelectionChange = useCallback(\n (updater: Updater<RowSelectionState>) => {\n const next = typeof updater === 'function' ? updater(rowSelectionState) : updater;\n if (!isControlled) setInternal(next);\n onRowSelectionChange?.(next);\n },\n [isControlled, rowSelectionState, onRowSelectionChange],\n );\n\n const setRowSelection = useCallback(\n (next: RowSelectionState) => {\n if (!isControlled) setInternal(next);\n onRowSelectionChange?.(next);\n },\n [isControlled, onRowSelectionChange],\n );\n\n return { rowSelectionState, handleRowSelectionChange, setRowSelection };\n}\n","import { useState, useCallback } from 'react';\n\nexport interface UseTableGlobalFilterProps {\n /**\n * Controlled global filter state (optional)\n * If provided, the component operates in controlled mode\n */\n globalFilter?: string;\n\n /**\n * Default global filter state for uncontrolled mode\n * @default ''\n */\n defaultGlobalFilter?: string;\n\n /**\n * Callback fired when global filter changes\n * Required for controlled mode, optional for uncontrolled\n */\n onGlobalFilterChange?: (value: string) => void;\n}\n\nexport interface UseTableGlobalFilterReturn {\n /**\n * Current global filter state (controlled or internal)\n */\n globalFilterState: string;\n\n /**\n * Handler for global filter changes\n */\n handleGlobalFilterChange: (value: string) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setGlobalFilter: (value: string) => void;\n}\n\n/**\n * Hook to manage table global filter state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { globalFilterState, handleGlobalFilterChange } = useTableGlobalFilter({\n * defaultGlobalFilter: '',\n * onGlobalFilterChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [globalFilter, setGlobalFilter] = useState<string>('');\n * const { globalFilterState, handleGlobalFilterChange } = useTableGlobalFilter({\n * globalFilter,\n * onGlobalFilterChange: setGlobalFilter\n * });\n * ```\n */\nexport function useTableGlobalFilter({\n globalFilter: controlledFilter,\n defaultGlobalFilter = '',\n onGlobalFilterChange,\n}: UseTableGlobalFilterProps): UseTableGlobalFilterReturn {\n // Internal state for uncontrolled mode\n const [internalFilter, setInternalFilter] = useState<string>(defaultGlobalFilter);\n\n // Determine if component is in controlled mode\n const isControlled = controlledFilter !== undefined;\n\n // Use controlled filter if provided, otherwise use internal state\n const globalFilterState = isControlled ? controlledFilter : internalFilter;\n\n /**\n * Handle global filter changes\n */\n const handleGlobalFilterChange = useCallback(\n (value: string) => {\n if (isControlled) {\n // In controlled mode: only notify parent\n onGlobalFilterChange?.(value);\n } else {\n // In uncontrolled mode: update internal state\n setInternalFilter(value);\n // And optionally notify parent\n onGlobalFilterChange?.(value);\n }\n },\n [isControlled, onGlobalFilterChange],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setGlobalFilter = useCallback(\n (value: string) => {\n if (isControlled) {\n onGlobalFilterChange?.(value);\n } else {\n setInternalFilter(value);\n onGlobalFilterChange?.(value);\n }\n },\n [isControlled, onGlobalFilterChange],\n );\n\n return {\n globalFilterState,\n handleGlobalFilterChange,\n isControlled,\n setGlobalFilter,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { VisibilityState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableVisibilityProps {\n /**\n * Controlled column visibility state (optional)\n * If provided, the component operates in controlled mode\n */\n columnVisibility?: VisibilityState;\n\n /**\n * Default column visibility state for uncontrolled mode\n * @default {}\n */\n defaultColumnVisibility?: VisibilityState;\n\n /**\n * Callback fired when column visibility changes\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnVisibilityChange?: (state: VisibilityState) => void;\n}\n\nexport interface UseTableVisibilityReturn {\n /**\n * Current column visibility state (controlled or internal)\n */\n columnVisibilityState: VisibilityState;\n\n /**\n * Handler for TanStack Table's onColumnVisibilityChange\n */\n handleColumnVisibilityChange: (updater: Updater<VisibilityState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnVisibility: (state: VisibilityState) => void;\n}\n\n/**\n * Hook to manage table column visibility state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnVisibilityState, handleColumnVisibilityChange } = useTableVisibility({\n * defaultColumnVisibility: { email: false },\n * onColumnVisibilityChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [visibility, setVisibility] = useState<VisibilityState>({});\n * const { columnVisibilityState, handleColumnVisibilityChange } = useTableVisibility({\n * columnVisibility: visibility,\n * onColumnVisibilityChange: setVisibility\n * });\n * ```\n */\nexport function useTableVisibility({\n columnVisibility: controlledVisibility,\n defaultColumnVisibility = {},\n onColumnVisibilityChange,\n}: UseTableVisibilityProps): UseTableVisibilityReturn {\n // Internal state for uncontrolled mode\n const [internalVisibility, setInternalVisibility] =\n useState<VisibilityState>(defaultColumnVisibility);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnVisibilityChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnVisibilityChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledVisibility !== undefined;\n\n // Use controlled visibility if provided, otherwise use internal state\n const columnVisibilityState = isControlled ? controlledVisibility : internalVisibility;\n\n /**\n * Handle column visibility changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnVisibilityChange = useCallback(\n (updater: Updater<VisibilityState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newVisibility =\n typeof updater === 'function' ? updater(controlledVisibility) : updater;\n onChangeRef.current?.(newVisibility);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalVisibility((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledVisibility is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledVisibility],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnVisibility = useCallback(\n (newVisibility: VisibilityState) => {\n if (isControlled) {\n onChangeRef.current?.(newVisibility);\n } else {\n setInternalVisibility(newVisibility);\n onChangeRef.current?.(newVisibility);\n }\n },\n [isControlled],\n );\n\n return {\n columnVisibilityState,\n handleColumnVisibilityChange,\n isControlled,\n setColumnVisibility,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { ColumnSizingState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSizingProps {\n /**\n * Controlled column sizing state (optional)\n * If provided, the component operates in controlled mode\n */\n columnSizing?: ColumnSizingState;\n\n /**\n * Default column sizing state for uncontrolled mode\n * @default {}\n */\n defaultColumnSizing?: ColumnSizingState;\n\n /**\n * Callback fired when column sizing changes\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnSizingChange?: (state: ColumnSizingState) => void;\n}\n\nexport interface UseTableSizingReturn {\n /**\n * Current column sizing state (controlled or internal)\n */\n columnSizingState: ColumnSizingState;\n\n /**\n * Handler for TanStack Table's onColumnSizingChange\n */\n handleColumnSizingChange: (updater: Updater<ColumnSizingState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnSizing: (state: ColumnSizingState) => void;\n}\n\n/**\n * Hook to manage table column sizing state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnSizingState, handleColumnSizingChange } = useTableSizing({\n * defaultColumnSizing: { name: 150, email: 200 },\n * onColumnSizingChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [sizing, setSizing] = useState<ColumnSizingState>({});\n * const { columnSizingState, handleColumnSizingChange } = useTableSizing({\n * columnSizing: sizing,\n * onColumnSizingChange: setSizing\n * });\n * ```\n */\nexport function useTableSizing({\n columnSizing: controlledSizing,\n defaultColumnSizing = {},\n onColumnSizingChange,\n}: UseTableSizingProps): UseTableSizingReturn {\n // Internal state for uncontrolled mode\n const [internalSizing, setInternalSizing] = useState<ColumnSizingState>(defaultColumnSizing);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnSizingChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnSizingChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledSizing !== undefined;\n\n // Use controlled sizing if provided, otherwise use internal state\n const columnSizingState = isControlled ? controlledSizing : internalSizing;\n\n /**\n * Handle column sizing changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnSizingChange = useCallback(\n (updater: Updater<ColumnSizingState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newSizing =\n typeof updater === 'function' ? updater(controlledSizing) : updater;\n onChangeRef.current?.(newSizing);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalSizing((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledSizing is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledSizing],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnSizing = useCallback(\n (newSizing: ColumnSizingState) => {\n if (isControlled) {\n onChangeRef.current?.(newSizing);\n } else {\n setInternalSizing(newSizing);\n onChangeRef.current?.(newSizing);\n }\n },\n [isControlled],\n );\n\n return {\n columnSizingState,\n handleColumnSizingChange,\n isControlled,\n setColumnSizing,\n };\n}\n","import { useCallback } from 'react';\nimport type { ColumnSizingState, VisibilityState } from '@tanstack/react-table';\nimport type { TableCellSize } from '../data-table.types';\n\nconst PREFIX = 'tcce-table';\n\nfunction storageKey(tableId: string, feature: string) {\n return `${PREFIX}:${tableId}:${feature}`;\n}\n\nfunction readJson<T>(key: string, fallback: T): T {\n if (typeof window === 'undefined') return fallback;\n try {\n const raw = localStorage.getItem(key);\n return raw ? (JSON.parse(raw) as T) : fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction writeJson(key: string, value: unknown): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n // quota exceeded or incognito — fail silently\n }\n}\n\nexport interface UseTablePersistenceOptions {\n tableId?: string;\n defaultVisibility?: VisibilityState;\n defaultSizing?: ColumnSizingState;\n defaultDensity?: TableCellSize;\n}\n\nexport interface UseTablePersistenceReturn {\n initialVisibility: VisibilityState;\n initialSizing: ColumnSizingState;\n initialDensity: TableCellSize;\n persistVisibility: (v: VisibilityState) => void;\n persistSizing: (s: ColumnSizingState) => void;\n persistDensity: (d: TableCellSize) => void;\n}\n\nexport function useTablePersistence({\n tableId,\n defaultVisibility = {},\n defaultSizing = {},\n defaultDensity = 'md',\n}: UseTablePersistenceOptions): UseTablePersistenceReturn {\n // Keys are null when persistence is disabled (no tableId). Hooks run\n // unconditionally so the returned persist callbacks keep a stable identity\n // across renders — consumers can safely list them in effect dependencies.\n const visKey = tableId ? storageKey(tableId, 'visibility') : null;\n const sizKey = tableId ? storageKey(tableId, 'sizing') : null;\n const denKey = tableId ? storageKey(tableId, 'density') : null;\n\n const persistVisibility = useCallback(\n (v: VisibilityState) => {\n if (visKey) writeJson(visKey, v);\n },\n [visKey],\n );\n const persistSizing = useCallback(\n (s: ColumnSizingState) => {\n if (sizKey) writeJson(sizKey, s);\n },\n [sizKey],\n );\n const persistDensity = useCallback(\n (d: TableCellSize) => {\n if (denKey) writeJson(denKey, d);\n },\n [denKey],\n );\n\n return {\n initialVisibility: visKey\n ? readJson<VisibilityState>(visKey, defaultVisibility)\n : defaultVisibility,\n initialSizing: sizKey ? readJson<ColumnSizingState>(sizKey, defaultSizing) : defaultSizing,\n initialDensity: denKey ? readJson<TableCellSize>(denKey, defaultDensity) : defaultDensity,\n persistVisibility,\n persistSizing,\n persistDensity,\n };\n}\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, type CSSProperties } from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable,\n type Cell,\n type ColumnPinningState,\n type Row,\n} from '@tanstack/react-table';\n\nimport { Table, TableBody, TableCell, TableHeader, TableRow } from '@/components/ui/Table/table';\nimport { cn } from '@/lib/utils';\n\nimport { useMediaQuery } from '@/lib/use-media-query';\nimport { TableContext, useTableContext } from './data-table-context';\nimport { cellSizeClass } from './cell-size-class';\nimport { DataTableCardView } from './data-table-card-view';\nimport { DataTableHeaderCell } from './data-table-header-cell';\nimport { DataTableSkeleton } from './data-table-skeleton';\nimport { useTableSorting } from './hooks/use-table-sorting';\nimport { useTableFiltering } from './hooks/use-table-filtering';\nimport { useTableSelection } from './hooks/use-table-selection';\nimport { useTableGlobalFilter } from './hooks/use-table-global-filter';\nimport { useTableVisibility } from './hooks/use-table-visibility';\nimport { useTableSizing } from './hooks/use-table-sizing';\nimport { useTablePersistence } from './hooks/use-table-persistence';\nimport { Checkbox } from '@/components/ui/Checkbox/checkbox';\nimport { getUniqueColumnValues, multiSelectFilter } from './utils/filter-utils';\nimport type {\n ColumnMeta,\n DataTableProps,\n TableCellSize,\n TableClassNames,\n TableColumnDef,\n TableContextType,\n} from './data-table.types';\n\nfunction resolveClassName<T>(\n value: string | ((row: Row<T>) => string) | undefined,\n row: Row<T>,\n): string | undefined {\n return typeof value === 'function' ? value(row) : value;\n}\n\nfunction DataTableCell<T>({\n cell,\n cellClassName,\n}: {\n cell: Cell<T, unknown>;\n cellClassName?: string;\n}) {\n const { size: tableSize } = useTableContext<T>();\n const meta = (cell.column.columnDef.meta ?? {}) as ColumnMeta;\n const pinned = cell.column.getIsPinned();\n const value = cell.getValue();\n\n const pinnedStyle: CSSProperties | undefined = pinned\n ? {\n position: 'sticky',\n left: pinned === 'left' ? cell.column.getStart('left') : undefined,\n right: pinned === 'right' ? cell.column.getAfter('right') : undefined,\n zIndex: 11,\n }\n : undefined;\n\n const resolvedWidth = cell.column.getCanResize() ? cell.column.getSize() : meta.width;\n\n return (\n <TableCell\n data-size={meta.size ?? tableSize}\n data-align={meta.align ?? 'left'}\n data-pinned={pinned || undefined}\n title={\n meta.ellipsis && (typeof value === 'string' || typeof value === 'number')\n ? String(value)\n : undefined\n }\n style={{ width: resolvedWidth, minWidth: meta.width, ...pinnedStyle }}\n className={cn(\n cellSizeClass[meta.size ?? tableSize],\n 'text-primary',\n meta.align === 'center' && 'text-center',\n meta.align === 'right' && 'text-right',\n meta.ellipsis && 'max-w-0 truncate',\n pinned && 'bg-background',\n meta.className,\n cellClassName,\n )}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n}\n\n/**\n * Selector for controls that own their own click: row action triggers, selection\n * checkboxes, links, form fields. A click landing on any of them must not also\n * fire the row handler.\n */\nconst INTERACTIVE_CELL_CONTENT =\n 'button, a, input, select, textarea, [role=\"button\"], [role=\"checkbox\"], [role=\"menuitem\"], [role=\"link\"]';\n\n/**\n * True when the event came from interactive content nested inside a cell rather\n * than from the row itself. The `currentTarget` comparison matters: a clickable\n * row carries `role=\"button\"`, so it matches the selector too and would\n * otherwise swallow every click.\n */\nfunction isInteractiveCellEvent(event: { target: EventTarget | null; currentTarget: EventTarget }) {\n const target = event.target;\n if (!(target instanceof Element)) return false;\n const match = target.closest(INTERACTIVE_CELL_CONTENT);\n return match !== null && match !== event.currentTarget;\n}\n\nfunction DataTableRow<T>({ row, classNames }: { row: Row<T>; classNames?: TableClassNames<T> }) {\n const { onRowClick, variant } = useTableContext<T>();\n const clickable = Boolean(onRowClick);\n const rowClassName = resolveClassName(classNames?.row, row);\n const cellClassName = resolveClassName(classNames?.cell, row);\n\n return (\n <TableRow\n data-variant={variant}\n data-clickable={clickable || undefined}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n onClick={\n clickable\n ? (e) => {\n if (isInteractiveCellEvent(e)) return;\n onRowClick?.(row.original);\n }\n : undefined\n }\n onKeyDown={\n clickable\n ? (e) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n if (isInteractiveCellEvent(e)) return;\n e.preventDefault();\n onRowClick?.(row.original);\n }\n : undefined\n }\n className={cn('hover:bg-muted', clickable && 'cursor-pointer', rowClassName)}>\n {row.getVisibleCells().map((cell) => (\n <DataTableCell key={cell.id} cell={cell} cellClassName={cellClassName} />\n ))}\n </TableRow>\n );\n}\n\n/**\n * TanStack Table v8 data table with sorting, filtering, global search, pagination, row\n * selection, column visibility, resizing, density control, sticky headers, column pinning\n * and an automatic mobile card layout.\n *\n * Per-column presentation belongs in `meta` (`ColumnMeta`) on each column definition rather\n * than in per-cell `className` strings: `align`, `size` (density override), `sortable`,\n * `filterable`, `ellipsis`, `variant`, `width`, `className`, `pinned`, `cardLabel`,\n * `hideInCard` and `resizable`.\n *\n * Column width has two authorities. With `enableColumnResizing` off (the default),\n * `meta.width` drives both `width` and `min-width` on the header and body cells; a number is\n * pixels and a string is any CSS length (`'8rem'`, `'20%'`, `'100px'`). With\n * `enableColumnResizing` on, the rendered width instead comes from TanStack's own top-level\n * `size` / `minSize` / `maxSize` on the column definition (`size` defaults to 150px) and\n * `meta.width` degrades to a `min-width` floor. Note that `meta.size` is cell density, not a\n * width — the pixel width is the top-level `size`.\n *\n * The table element is `w-full` under the browser's default `table-layout: auto`, so `width`\n * is only a hint and `min-width` is what actually holds. Pass\n * `classNames={{ table: 'table-fixed' }}` when exact widths must be honoured.\n *\n * Set `tableId` to persist column visibility, sizing and density to `localStorage` under\n * `tcce-table:{tableId}:*`.\n */\nfunction DataTable<T>({\n data,\n columns,\n size = 'md',\n variant = 'default',\n isLoading = false,\n stickyHeader = false,\n maxHeight,\n sorting,\n defaultSorting = [],\n onSortingChange,\n enableSorting = true,\n manualSorting = false,\n columnFilters,\n defaultColumnFilters = [],\n onColumnFiltersChange,\n enableFiltering = true,\n manualFiltering = false,\n onRowClick,\n classNames,\n getUniqueValues,\n emptyState,\n rowSelection,\n defaultRowSelection = {},\n onRowSelectionChange,\n enableRowSelection = false,\n onSelectedRowsChange,\n responsiveBreakpoint = '(max-width: 767px)',\n disableResponsive = false,\n skeletonRowCount = 5,\n onTableReady,\n tableId,\n globalFilter,\n defaultGlobalFilter = '',\n onGlobalFilterChange,\n columnVisibility,\n defaultColumnVisibility,\n onColumnVisibilityChange,\n columnSizing,\n defaultColumnSizing,\n onColumnSizingChange,\n enableColumnResizing = false,\n onSizeChange,\n toolbar,\n}: DataTableProps<T>) {\n const { sortingState, handleSortingChange, setSorting } = useTableSorting({\n sorting,\n defaultSorting,\n onSortingChange,\n });\n const { columnFiltersState, handleColumnFiltersChange, setColumnFilters } = useTableFiltering({\n columnFilters,\n defaultColumnFilters,\n onColumnFiltersChange,\n });\n\n const { rowSelectionState, handleRowSelectionChange, setRowSelection } = useTableSelection({\n rowSelection,\n defaultRowSelection,\n onRowSelectionChange,\n });\n\n const {\n initialVisibility,\n initialSizing,\n initialDensity,\n persistVisibility,\n persistSizing,\n persistDensity,\n } = useTablePersistence({\n tableId,\n defaultVisibility: defaultColumnVisibility,\n defaultSizing: defaultColumnSizing,\n defaultDensity: size,\n });\n\n const { globalFilterState, handleGlobalFilterChange, setGlobalFilter } = useTableGlobalFilter({\n globalFilter,\n defaultGlobalFilter,\n onGlobalFilterChange,\n });\n\n const { columnVisibilityState, handleColumnVisibilityChange, setColumnVisibility } =\n useTableVisibility({\n columnVisibility,\n defaultColumnVisibility: columnVisibility !== undefined ? undefined : initialVisibility,\n onColumnVisibilityChange,\n });\n\n const { columnSizingState, handleColumnSizingChange, setColumnSizing } = useTableSizing({\n columnSizing,\n defaultColumnSizing: columnSizing !== undefined ? undefined : initialSizing,\n onColumnSizingChange,\n });\n\n const [currentSize, setCurrentSize] = useState<TableCellSize>(initialDensity);\n const setSize = useCallback(\n (newSize: TableCellSize) => {\n setCurrentSize(newSize);\n onSizeChange?.(newSize);\n },\n [onSizeChange],\n );\n\n const selectionColumn: TableColumnDef<T> = useMemo(\n () => ({\n id: 'select',\n header: ({ table }) => (\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() ? 'indeterminate' : false)\n }\n onCheckedChange={(v) => table.toggleAllPageRowsSelected(!!v)}\n aria-label='Select all rows'\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(v) => row.toggleSelected(!!v)}\n aria-label={`Select row ${row.index + 1}`}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n meta: { width: 40, align: 'center' },\n }),\n [],\n );\n\n const enrichedColumns = useMemo(\n () => [\n ...(enableRowSelection ? [selectionColumn] : []),\n ...columns.map((col) => {\n const meta = (col.meta ?? {}) as ColumnMeta;\n if (enableFiltering && meta.filterable !== false && !col.filterFn) {\n return { ...col, filterFn: multiSelectFilter };\n }\n return col;\n }),\n ],\n [columns, enableFiltering, enableRowSelection, selectionColumn],\n );\n\n const columnPinning = useMemo<ColumnPinningState>(() => {\n const left: string[] = [];\n const right: string[] = [];\n columns.forEach((col) => {\n const meta = (col.meta ?? {}) as ColumnMeta;\n const id =\n col.id ??\n ('accessorKey' in col && col.accessorKey ? String(col.accessorKey) : undefined);\n if (!id) return;\n if (meta.pinned === 'left') left.push(id);\n if (meta.pinned === 'right') right.push(id);\n });\n return { left, right };\n }, [columns]);\n\n const table = useReactTable({\n data,\n columns: enrichedColumns,\n state: {\n sorting: sortingState,\n columnFilters: columnFiltersState,\n columnPinning,\n rowSelection: rowSelectionState,\n globalFilter: globalFilterState,\n columnVisibility: columnVisibilityState,\n columnSizing: columnSizingState,\n },\n onSortingChange: handleSortingChange,\n onColumnFiltersChange: handleColumnFiltersChange,\n onRowSelectionChange: handleRowSelectionChange,\n onGlobalFilterChange: handleGlobalFilterChange,\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnSizingChange: handleColumnSizingChange,\n enableRowSelection,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: manualSorting ? undefined : getSortedRowModel(),\n getFilteredRowModel: manualFiltering ? undefined : getFilteredRowModel(),\n enableSorting,\n enableSortingRemoval: true,\n manualSorting,\n enableColumnFilters: enableFiltering,\n manualFiltering,\n filterFns: { multiSelect: multiSelectFilter },\n globalFilterFn: 'includesString',\n enableColumnPinning: true,\n columnResizeMode: 'onChange',\n enableColumnResizing,\n });\n\n useEffect(() => {\n onTableReady?.(table);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // intentional: fire once on mount only\n\n useEffect(() => {\n persistVisibility(columnVisibilityState);\n }, [columnVisibilityState, persistVisibility]);\n useEffect(() => {\n persistSizing(columnSizingState);\n }, [columnSizingState, persistSizing]);\n useEffect(() => {\n persistDensity(currentSize);\n }, [currentSize, persistDensity]);\n\n const onSelectedRowsChangeRef = useRef(onSelectedRowsChange);\n useLayoutEffect(() => {\n onSelectedRowsChangeRef.current = onSelectedRowsChange;\n });\n\n useEffect(() => {\n if (!onSelectedRowsChangeRef.current) return;\n const selected = table.getSelectedRowModel().rows.map((r) => r.original);\n onSelectedRowsChangeRef.current(selected);\n }, [rowSelectionState, table]);\n\n const resolvedGetUniqueValues = useCallback(\n (columnId: string) => getUniqueValues?.(columnId) ?? getUniqueColumnValues(data, columnId),\n [getUniqueValues, data],\n );\n\n const ctx: TableContextType<T> = useMemo(\n () => ({\n size: currentSize,\n variant,\n sorting: sortingState,\n setSorting,\n columnFilters: columnFiltersState,\n setColumnFilters,\n getUniqueValues: resolvedGetUniqueValues,\n onRowClick,\n rowSelection: rowSelectionState,\n setRowSelection,\n globalFilter: globalFilterState,\n setGlobalFilter,\n columnVisibility: columnVisibilityState,\n setColumnVisibility,\n columnSizing: columnSizingState,\n setColumnSizing,\n setSize,\n table: table as unknown as import('@tanstack/react-table').Table<T>,\n }),\n [\n currentSize,\n variant,\n sortingState,\n setSorting,\n columnFiltersState,\n setColumnFilters,\n resolvedGetUniqueValues,\n onRowClick,\n rowSelectionState,\n setRowSelection,\n globalFilterState,\n setGlobalFilter,\n columnVisibilityState,\n setColumnVisibility,\n columnSizingState,\n setColumnSizing,\n setSize,\n table,\n ],\n );\n\n const isMobile = useMediaQuery(responsiveBreakpoint);\n const showCardView = !disableResponsive && isMobile;\n\n const rows = table.getRowModel().rows;\n const columnCount = table.getAllLeafColumns().length;\n\n return (\n <TableContext.Provider value={ctx as unknown as TableContextType<unknown>}>\n {toolbar}\n {showCardView ? (\n <DataTableCardView\n rows={rows}\n columns={table.getAllLeafColumns()}\n size={currentSize}\n variant={variant}\n onRowClick={onRowClick}\n isLoading={isLoading}\n skeletonRowCount={skeletonRowCount}\n emptyState={emptyState}\n />\n ) : (\n <div\n data-slot='data-table-wrapper'\n className={cn(\n 'bg-card text-card-foreground relative overflow-auto rounded-md border',\n classNames?.wrapper,\n )}\n style={maxHeight ? { maxHeight } : undefined}>\n <Table\n data-variant={variant}\n // The wrapper above already owns scrolling (overflow-auto + maxHeight).\n // Keep the inner container `overflow-visible` so it does not become a\n // nested scroll container that traps the sticky header cells.\n containerClassName='overflow-visible'\n className={cn(\n variant === 'striped' && '[&_tbody_tr:nth-child(even)]:bg-muted/40',\n classNames?.table,\n )}>\n <TableHeader\n className={cn(\n // Apply the sticky offset to the header cells (`th`) rather than\n // the `<thead>`: cell-level sticky is the broadly compatible form\n // across browsers. The scroll container is the wrapper above\n // (overflow-auto + maxHeight), and the inner table container is\n // kept overflow-visible so it does not trap these sticky cells.\n // The cells already carry an opaque `bg-primary`, so body rows\n // never bleed through underneath while scrolling.\n stickyHeader && '[&_th]:sticky [&_th]:top-0 [&_th]:z-20',\n classNames?.header,\n )}>\n {table.getHeaderGroups().map((hg) => (\n <TableRow key={hg.id}>\n {hg.headers.map((header) => (\n <DataTableHeaderCell key={header.id} header={header} />\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody className={classNames?.body}>\n {isLoading ? (\n <DataTableSkeleton columnCount={columnCount} size={currentSize} />\n ) : rows.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columnCount}\n className='text-muted-foreground h-24 text-center'>\n {emptyState ?? 'No results found'}\n </TableCell>\n </TableRow>\n ) : (\n rows.map((row) => (\n <DataTableRow key={row.id} row={row} classNames={classNames} />\n ))\n )}\n </TableBody>\n </Table>\n </div>\n )}\n </TableContext.Provider>\n );\n}\n\nexport { DataTable, useTableContext };\n","import { useMemo, useState, useCallback, useEffect } from 'react';\nimport type { SortingState, ColumnFiltersState, ColumnDef } from '@tanstack/react-table';\n\nimport { getUniqueColumnValues } from '../utils/filter-utils';\n\nexport interface UseTableDataProps<T> {\n data: T[];\n columns: ColumnDef<T, unknown>[];\n initialPage?: number;\n initialPerPage?: number;\n initialSorting?: SortingState;\n initialColumnFilters?: ColumnFiltersState;\n}\n\nexport interface UseTableDataReturn<T> {\n paginatedData: T[];\n processedData: T[];\n\n page: number;\n perPage: number;\n totalPages: number;\n totalRecords: number;\n\n filteredRecords: number;\n setPage: (page: number) => void;\n setPerPage: (perPage: number) => void;\n\n sorting: SortingState;\n setSorting: (sorting: SortingState) => void;\n\n columnFilters: ColumnFiltersState;\n setColumnFilters: (filters: ColumnFiltersState) => void;\n\n getUniqueValues: (columnId: string) => string[];\n}\n\nexport function useTableData<T extends Record<string, unknown>>({\n data,\n columns,\n initialPage = 1,\n initialPerPage = 10,\n initialSorting = [],\n initialColumnFilters = [],\n}: UseTableDataProps<T>): UseTableDataReturn<T> {\n const [page, setPageState] = useState(initialPage);\n const [perPage, setPerPageState] = useState(initialPerPage);\n const [sorting, setSorting] = useState<SortingState>(initialSorting);\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>(initialColumnFilters);\n\n // Precompute unique values for each column (memoized)\n const uniqueValuesMap = useMemo(() => {\n const map = new Map<string, string[]>();\n columns.forEach((col) => {\n const columnId =\n col.id ??\n ('accessorKey' in col && col.accessorKey ? String(col.accessorKey) : undefined);\n if (!columnId) return;\n\n const accessor = 'accessorFn' in col ? col.accessorFn : undefined;\n map.set(columnId, getUniqueColumnValues(data, columnId, accessor));\n });\n return map;\n }, [data, columns]);\n\n // Keep the same getUniqueValues API but make it O(1) by reading the memoized map\n const getUniqueValues = useMemo(() => {\n return (columnId: string) => {\n return uniqueValuesMap.get(columnId) || [];\n };\n }, [uniqueValuesMap]);\n\n // Apply filters to ALL data\n const filteredData = useMemo(() => {\n if (columnFilters.length === 0) return data;\n\n return data.filter((row) => {\n return columnFilters.every((filter) => {\n const filterValues = filter.value as string[];\n if (!filterValues || filterValues.length === 0) return true;\n\n const cellValue = row[filter.id];\n if (cellValue == null) {\n return false;\n }\n\n return filterValues.includes(String(cellValue));\n });\n });\n }, [data, columnFilters]);\n\n // Apply sorting to ALL filtered data\n const sortedData = useMemo(() => {\n if (sorting.length === 0) {\n return filteredData;\n }\n\n return [...filteredData].sort((a, b) => {\n for (const sort of sorting) {\n const aValue = a[sort.id];\n const bValue = b[sort.id];\n\n // Handle null/undefined\n if (aValue == null && bValue == null) continue;\n if (aValue == null) return sort.desc ? -1 : 1;\n if (bValue == null) return sort.desc ? 1 : -1;\n\n // Compare values\n let comparison = 0;\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n comparison = aValue.localeCompare(bValue);\n } else if (typeof aValue === 'number' && typeof bValue === 'number') {\n comparison = aValue - bValue;\n } else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n if (comparison !== 0) {\n return sort.desc ? -comparison : comparison;\n }\n }\n return 0;\n });\n }, [filteredData, sorting]);\n\n // Apply pagination LAST\n const paginatedData = useMemo(() => {\n const startIndex = (page - 1) * perPage;\n const endIndex = startIndex + perPage;\n return sortedData.slice(startIndex, endIndex);\n }, [sortedData, page, perPage]);\n\n // Calculate pagination info\n const totalRecords = data.length;\n const filteredRecords = sortedData.length;\n const totalPages = Math.max(1, Math.ceil(filteredRecords / perPage));\n\n const setPage = useCallback(\n (newPage: number) => {\n setPageState(Math.min(newPage, totalPages));\n },\n [totalPages],\n );\n\n const setPerPage = useCallback((newPerPage: number) => {\n setPerPageState(newPerPage);\n setPageState(1);\n }, []);\n\n // Auto-reset page when filters change and current page is out of bounds\n useEffect(() => {\n if (page > totalPages) {\n setPageState(1);\n }\n }, [page, totalPages]);\n\n return {\n paginatedData,\n processedData: sortedData,\n page,\n perPage,\n totalPages,\n totalRecords,\n filteredRecords,\n setPage,\n setPerPage,\n sorting,\n setSorting,\n columnFilters,\n setColumnFilters,\n getUniqueValues,\n };\n}\n","import type { SortingState } from '@tanstack/react-table';\n\n/**\n * Backend sorting format - object representation\n * Example: { name: 'asc', created_at: 'desc' }\n */\nexport type SortRecord = Record<string, 'asc' | 'desc'>;\n\n/**\n * Converts TanStack Table SortingState to backend-friendly record format\n *\n * @param sortingState - TanStack sorting state array\n * @returns Object with field names as keys and 'asc'/'desc' as values\n *\n * @example\n * ```ts\n * const sortingState = [\n * { id: 'name', desc: false },\n * { id: 'created_at', desc: true }\n * ];\n *\n * const sortRecord = sortingStateToRecord(sortingState);\n * // Result: { name: 'asc', created_at: 'desc' }\n * ```\n */\nexport function sortingStateToRecord(sortingState: SortingState): SortRecord {\n const sortRecord: SortRecord = {};\n\n for (const sort of sortingState) {\n sortRecord[sort.id] = sort.desc ? 'desc' : 'asc';\n }\n\n return sortRecord;\n}\n\n/**\n * Converts backend sort record to TanStack Table SortingState\n * Useful for initializing sorting state from backend response\n *\n * @param sortRecord - Object with field names and sort directions\n * @returns TanStack sorting state array\n *\n * @example\n * ```ts\n * const sortRecord = { name: 'asc', created_at: 'desc' };\n *\n * const sortingState = sortRecordToSortingState(sortRecord);\n * // Result: [\n * // { id: 'name', desc: false },\n * // { id: 'created_at', desc: true }\n * // ]\n * ```\n */\nexport function sortRecordToSortingState(sortRecord: SortRecord): SortingState {\n return Object.entries(sortRecord).map(([field, direction]) => ({\n id: field,\n desc: direction === 'desc',\n }));\n}\n\n/**\n * Converts SortingState to JSON string ready to send to Laravel backend\n * This is a convenience function for API calls\n *\n * @param sortingState - TanStack sorting state array\n * @returns JSON string representation of sort record\n *\n * @example\n * ```ts\n * const sortingState = [{ id: 'name', desc: false }];\n * const sortsParam = sortingStateToJsonString(sortingState);\n * // Result: '{\"name\":\"asc\"}'\n *\n * // Use in API call:\n * fetch(`/api/users?sorts=${sortsParam}`);\n * ```\n */\nexport function sortingStateToJsonString(sortingState: SortingState): string {\n if (sortingState.length === 0) {\n return '';\n }\n return JSON.stringify(sortingStateToRecord(sortingState));\n}\n\n/**\n * Creates URLSearchParams for backend pagination with sorting\n * Compatible with Laravel PaginateHelper\n *\n * @param options - Pagination and sorting options\n * @returns URLSearchParams ready to append to API request\n *\n * @example\n * ```ts\n * const params = createBackendParams({\n * sorting: [{ id: 'name', desc: false }],\n * perPage: 20,\n * genericSearch: 'john',\n * filters: { role: 'admin', status: 'active' }\n * });\n *\n * fetch(`/api/users?${params.toString()}`);\n * // Result: /api/users?sorts={\"name\":\"asc\"}&perPage=20&genericSearch=john&filters={\"role\":\"admin\",\"status\":\"active\"}\n * ```\n */\nexport function createBackendParams(options: {\n sorting?: SortingState;\n perPage?: number;\n genericSearch?: string;\n filters?: Record<string, unknown>;\n}): URLSearchParams {\n const params = new URLSearchParams();\n\n // Add sorting if present\n if (options.sorting && options.sorting.length > 0) {\n params.append('sorts', sortingStateToJsonString(options.sorting));\n }\n\n // Add pagination — use !== undefined so perPage === 0 is not silently skipped.\n if (options.perPage !== undefined) {\n params.append('perPage', options.perPage.toString());\n }\n\n // Add generic search\n if (options.genericSearch) {\n params.append('genericSearch', options.genericSearch);\n }\n\n // Add filters\n if (options.filters && Object.keys(options.filters).length > 0) {\n params.append('filters', JSON.stringify(options.filters));\n }\n\n return params;\n}\n","import type { ColumnFiltersState } from '@tanstack/react-table';\n\n/**\n * Converts ColumnFiltersState to a simple object format\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => { status: ['Active', 'Pending'] }\n *\n * @param filters - The column filters state from TanStack Table\n * @returns Object with columnId as keys and filter values as values\n */\nexport function columnFiltersToRecord(filters: ColumnFiltersState): Record<string, string[]> {\n const record: Record<string, string[]> = {};\n\n filters.forEach((filter) => {\n record[filter.id] = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n });\n\n return record;\n}\n\n/**\n * Converts ColumnFiltersState to a JSON string\n * Useful for API calls that expect JSON format\n *\n * @param filters - The column filters state from TanStack Table\n * @returns JSON string representation of filters\n */\nexport function columnFiltersToJsonString(filters: ColumnFiltersState): string {\n return JSON.stringify(columnFiltersToRecord(filters));\n}\n\n/**\n * Converts ColumnFiltersState to URL query params format\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => 'filter[status]=Active,Pending'\n *\n * @param filters - The column filters state from TanStack Table\n * @param separator - Separator for multiple values (default: ',')\n * @returns Object suitable for URLSearchParams\n */\nexport function columnFiltersToQueryParams(\n filters: ColumnFiltersState,\n separator: string = ',',\n): Record<string, string> {\n const params: Record<string, string> = {};\n\n filters.forEach((filter) => {\n const values = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n if (values.length > 0) {\n params[`filter[${filter.id}]`] = values.join(separator);\n }\n });\n\n return params;\n}\n\n/**\n * Converts ColumnFiltersState to individual query params per value\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => 'filter[status][]=Active&filter[status][]=Pending'\n *\n * @param filters - The column filters state from TanStack Table\n * @returns Object suitable for URLSearchParams with array notation\n */\nexport function columnFiltersToArrayQueryParams(\n filters: ColumnFiltersState,\n): Record<string, string[]> {\n const params: Record<string, string[]> = {};\n\n filters.forEach((filter) => {\n const values = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n if (values.length > 0) {\n params[`filter[${filter.id}]`] = values;\n }\n });\n\n return params;\n}\n\n/**\n * Creates complete backend request params with filters, sorting, and pagination\n * Combines filtering with other table features\n *\n * @param options - Configuration object\n * @param options.filters - Column filters state\n * @param options.sorts - Optional sorting state\n * @param options.page - Optional page number\n * @param options.perPage - Optional items per page\n * @returns Complete params object for API requests\n */\nexport function createBackendParamsWithFilters({\n filters,\n sorts,\n page,\n perPage,\n}: {\n filters: ColumnFiltersState;\n sorts?: Array<{ id: string; desc: boolean }>;\n page?: number;\n perPage?: number;\n}): Record<string, string | number> {\n const params: Record<string, string | number> = {};\n\n // Add pagination params\n if (page !== undefined) {\n params.page = page;\n }\n if (perPage !== undefined) {\n params.per_page = perPage;\n }\n\n // Add sorting params\n if (sorts && sorts.length > 0) {\n const sortBy = sorts.map((s) => s.id).join(',');\n const sortOrder = sorts.map((s) => (s.desc ? 'desc' : 'asc')).join(',');\n params.sort_by = sortBy;\n params.sort_order = sortOrder;\n }\n\n // Add filter params\n if (filters && filters.length > 0) {\n params.filters = columnFiltersToJsonString(filters);\n }\n\n return params;\n}\n\n/**\n * Parses URL query params back to ColumnFiltersState\n * Useful for restoring filters from URL\n *\n * @param params - URLSearchParams or query string\n * @param separator - Separator used in the query params (default: ',')\n * @returns ColumnFiltersState\n */\nexport function parseQueryParamsToFilters(\n params: URLSearchParams | string,\n separator: string = ',',\n): ColumnFiltersState {\n const searchParams = typeof params === 'string' ? new URLSearchParams(params) : params;\n const filters: ColumnFiltersState = [];\n\n searchParams.forEach((value, key) => {\n // Match filter[columnId] format\n const match = key.match(/^filter\\[(.+)\\]$/);\n if (match) {\n const columnId = match[1];\n const values = value.split(separator).filter(Boolean);\n if (values.length > 0) {\n filters.push({ id: columnId, value: values });\n }\n }\n });\n\n return filters;\n}\n\n/**\n * Parses JSON string back to ColumnFiltersState\n *\n * @param jsonString - JSON string representation of filters\n * @returns ColumnFiltersState\n */\nexport function parseJsonToFilters(jsonString: string): ColumnFiltersState {\n try {\n const record = JSON.parse(jsonString) as unknown;\n // Guard against non-object or array values before iterating entries.\n if (!record || typeof record !== 'object' || Array.isArray(record)) return [];\n return Object.entries(record as Record<string, string[]>).map(([id, value]) => ({\n id,\n value,\n }));\n } catch {\n return [];\n }\n}\n\n/**\n * Merges multiple filter states, with later filters overriding earlier ones\n *\n * @param filterStates - Multiple ColumnFiltersState arrays to merge\n * @returns Merged ColumnFiltersState\n */\nexport function mergeFilters(...filterStates: ColumnFiltersState[]): ColumnFiltersState {\n const mergedMap = new Map<string, string[]>();\n\n filterStates.forEach((state) => {\n state.forEach((filter) => {\n mergedMap.set(filter.id, Array.isArray(filter.value) ? (filter.value as string[]) : []);\n });\n });\n\n return Array.from(mergedMap.entries()).map(([id, value]) => ({ id, value }));\n}\n","import { Fragment } from 'react';\nimport {Ellipsis} from 'lucide-react';\nimport { Button } from '@/components/ui/Button/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/DropdownMenu/dropdown-menu';\n\nexport interface RowAction<T> {\n label: string;\n onClick: (row: T) => void;\n /** Renders a separator above this item */\n separator?: boolean;\n disabled?: boolean | ((row: T) => boolean);\n /** Renders item in destructive (red) style */\n destructive?: boolean;\n}\n\ninterface DataTableRowActionsProps<T> {\n row: T;\n actions: RowAction<T>[];\n /** Screen-reader label for the trigger button. Default: \"Open actions\" */\n label?: string;\n}\n\nfunction DataTableRowActions<T>({\n row,\n actions,\n label = 'Open actions',\n}: DataTableRowActionsProps<T>) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n data-slot='data-table-row-actions'\n variant='ghost'\n size='icon-sm'\n aria-label={label}\n className='data-[state=open]:bg-muted'>\n <Ellipsis className='size-4' aria-hidden='true' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-40'>\n {actions.map((action) => {\n const isDisabled =\n typeof action.disabled === 'function'\n ? action.disabled(row)\n : (action.disabled ?? false);\n return (\n <Fragment key={action.label}>\n {action.separator && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={() => action.onClick(row)}\n disabled={isDisabled}\n className={\n action.destructive\n ? 'text-destructive focus:text-destructive'\n : undefined\n }>\n {action.label}\n </DropdownMenuItem>\n </Fragment>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport { DataTableRowActions };\nexport type { DataTableRowActionsProps };\n","import { cn } from '@/lib/utils';\nimport { TablePagination } from '../Pagination/pagination';\nimport type { TablePaginationProps } from './data-table.types';\n\ninterface DataTableFooterProps {\n pagination: TablePaginationProps;\n /** Selected row count — renders \"N row(s) selected\" on the left */\n selectedCount?: number;\n className?: string;\n}\n\nfunction DataTableFooter({ pagination, selectedCount, className }: DataTableFooterProps) {\n return (\n <div\n data-slot='data-table-footer'\n className={cn('flex items-center justify-between border-t px-4 py-2', className)}>\n {selectedCount != null && selectedCount > 0 && (\n <span aria-live='polite' className='text-muted-foreground text-xs'>\n {`${selectedCount} row${selectedCount > 1 ? 's' : ''} selected`}\n </span>\n )}\n {/* `ml-auto` keeps pagination right-aligned when the selection count\n is absent and `justify-between` has a single child to distribute. */}\n <div className='ml-auto'>\n <TablePagination {...pagination} />\n </div>\n </div>\n );\n}\n\nexport { DataTableFooter };\nexport type { DataTableFooterProps };\n","import { useCallback, type ReactNode } from 'react';\nimport type { ColumnFiltersState, Table } from '@tanstack/react-table';\nimport { X, Eye, Rows2 } from 'lucide-react';\nimport type { TableCellSize } from './data-table.types';\n\nimport { Button } from '@/components/ui/Button/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/DropdownMenu/dropdown-menu';\nimport { Badge } from '@/components/ui/Badge/badge';\nimport { cn } from '@/lib/utils';\nimport { getActiveFilterCount } from './utils/filter-utils';\nimport { useTableContextSafe } from './data-table-context';\n\nconst DENSITY_OPTIONS: { value: TableCellSize; label: string }[] = [\n { value: 'sm', label: 'Compact' },\n { value: 'md', label: 'Default' },\n { value: 'lg', label: 'Comfortable' },\n];\n\ninterface DataTableToolbarProps<T> {\n /** TanStack Table instance. Optional when toolbar is rendered inside DataTable's toolbar prop (context available). */\n table?: Table<T>;\n /** Slot rendered on the left — e.g. search input, bulk-action buttons */\n leading?: ReactNode;\n /** Slot rendered on the right alongside the Columns button */\n trailing?: ReactNode;\n className?: string;\n /** Hide the built-in Columns visibility toggle. Default: false */\n hideColumnsToggle?: boolean;\n /** Hide the density toggle. Default: false */\n hideDensityToggle?: boolean;\n /**\n * Pass columnFilters directly if Toolbar is rendered outside DataTable's\n * context provider. When inside a DataTable, this is read from context.\n */\n columnFilters?: ColumnFiltersState;\n}\n\nfunction DataTableToolbar<T>({\n table: tableProp,\n leading,\n trailing,\n className,\n hideColumnsToggle = false,\n hideDensityToggle = false,\n columnFilters: columnFiltersProp,\n}: DataTableToolbarProps<T>) {\n const ctx = useTableContextSafe<T>();\n const table = tableProp ?? (ctx?.table as Table<T> | undefined);\n const resolvedFilters = columnFiltersProp ?? ctx?.columnFilters ?? [];\n const activeFilterCount = getActiveFilterCount(resolvedFilters);\n\n const globalFilter = ctx?.globalFilter ?? '';\n const hasActiveFilters = activeFilterCount > 0 || globalFilter.length > 0;\n\n const handleClearFilters = useCallback(() => {\n ctx?.setColumnFilters([]);\n ctx?.setGlobalFilter('');\n }, [ctx]);\n\n return (\n <div\n data-slot='data-table-toolbar'\n className={cn('flex items-center justify-between gap-2 py-2', className)}>\n <div className='flex flex-1 items-center gap-2'>\n {leading}\n {activeFilterCount > 0 && (\n <Badge variant='default' className='h-6 text-xs'>\n {activeFilterCount} filter{activeFilterCount > 1 ? 's' : ''} active\n </Badge>\n )}\n </div>\n\n <div className='flex items-center gap-2'>\n {trailing}\n {hasActiveFilters && (\n <Button\n variant='ghost'\n size='sm'\n onClick={handleClearFilters}\n className='text-muted-foreground hover:text-foreground gap-1'>\n <X className='size-4' aria-hidden='true' />\n Clear filters\n </Button>\n )}\n {!hideDensityToggle && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' size='sm' className='gap-1 border'>\n <Rows2 className='size-4' aria-hidden='true' />\n Density\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-40'>\n <DropdownMenuLabel>Row density</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {DENSITY_OPTIONS.map((opt) => (\n <DropdownMenuCheckboxItem\n key={opt.value}\n checked={ctx?.size === opt.value}\n onCheckedChange={() => ctx?.setSize(opt.value)}>\n {opt.label}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {!hideColumnsToggle && table && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' size='sm' className='gap-1 border'>\n <Eye className='size-4' aria-hidden='true' />\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-44'>\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((col) => col.getCanHide())\n .map((col) => (\n <DropdownMenuCheckboxItem\n key={col.id}\n className='capitalize'\n checked={col.getIsVisible()}\n onCheckedChange={(v) => col.toggleVisibility(!!v)}>\n {typeof col.columnDef.header === 'string'\n ? col.columnDef.header\n : col.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </div>\n );\n}\n\nexport { DataTableToolbar };\nexport type { DataTableToolbarProps };\n","import { useEffect, useState } from 'react';\nimport { Search, X } from 'lucide-react';\nimport { Input } from '@/components/ui/Input/input';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\nimport { useTableContextSafe } from './data-table-context';\n\ninterface DataTableSearchProps {\n placeholder?: string;\n className?: string;\n /** Debounce delay in ms before committing to context. Default: 300 */\n debounce?: number;\n}\n\nfunction DataTableSearch({\n placeholder = 'Search…',\n className,\n debounce = 300,\n}: DataTableSearchProps) {\n const ctx = useTableContextSafe();\n\n // Extract stable primitives/callbacks from the context object to avoid\n // including the entire ctx object in effect dependency arrays (which would\n // cause the debounce timer to restart on every render).\n const globalFilter = ctx?.globalFilter;\n const setGlobalFilter = ctx?.setGlobalFilter;\n\n // The filter the table currently holds. `undefined` means this input is\n // rendered outside a DataTable, in which case there is nothing to sync with.\n const committedValue = globalFilter ?? '';\n\n // Seed from the filter already held by the table so an initial\n // `defaultGlobalFilter` (or a controlled `globalFilter`) is reflected in the\n // input instead of being overwritten on mount.\n const [inputValue, setInputValue] = useState(committedValue);\n\n // Adopt external global-filter changes — the toolbar's Clear filters button,\n // or a controlled parent that rewrites the value.\n useEffect(() => {\n if (globalFilter === undefined) return;\n setInputValue(globalFilter);\n }, [globalFilter]);\n\n // Debounced commit to context. Skipped while the input already matches what\n // the table holds, so mounting does not fire a spurious onGlobalFilterChange\n // and the echo of our own commit does not schedule a redundant second one.\n useEffect(() => {\n if (inputValue === committedValue) return;\n const timer = setTimeout(() => {\n setGlobalFilter?.(inputValue);\n }, debounce);\n return () => clearTimeout(timer);\n }, [inputValue, committedValue, debounce, setGlobalFilter]);\n\n const handleClear = () => {\n setInputValue('');\n setGlobalFilter?.('');\n };\n\n return (\n <div data-slot='data-table-search' className={cn('relative flex items-center', className)}>\n <Search\n className='text-muted-foreground pointer-events-none absolute top-1/2 left-3 z-10 -translate-y-1/2'\n size={16}\n />\n <Input\n type='search'\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n placeholder={placeholder}\n aria-label={placeholder}\n // The native WebKit/Chromium search decorations are suppressed so the\n // custom clear button is the only affordance rendered.\n className={cn(\n 'h-8 w-48 pr-9 pl-9 text-sm',\n '[&::-webkit-search-cancel-button]:appearance-none',\n '[&::-webkit-search-decoration]:appearance-none',\n '[&::-webkit-search-results-button]:appearance-none',\n '[&::-webkit-search-results-decoration]:appearance-none',\n )}\n />\n {inputValue && (\n <Button\n variant='ghost'\n size='icon-sm'\n onClick={handleClear}\n aria-label='Clear search'\n className='text-muted-foreground hover:text-foreground absolute top-1/2 right-1.5 size-6 -translate-y-1/2'>\n <X className='size-3.5' aria-hidden='true' />\n </Button>\n )}\n </div>\n );\n}\n\nexport { DataTableSearch };\nexport type { DataTableSearchProps };\n","import { cn } from '@/lib/utils'\n\nexport type BottomNavItem = {\n label: string\n href: string\n icon: React.ReactNode\n isActive?: boolean\n onClick?: React.MouseEventHandler<HTMLAnchorElement>\n}\n\ntype BottomNavProps = {\n items: BottomNavItem[]\n className?: string\n}\n\nexport function BottomNav({ items, className }: BottomNavProps) {\n return (\n <nav\n data-slot=\"bottom-nav\"\n className={cn(\n 'fixed bottom-0 left-0 right-0 z-50 mx-4 mb-4 rounded-2xl bg-background shadow-[0_-4px_20px_rgba(0,0,0,0.08)]',\n className\n )}\n >\n <div className=\"flex h-20 items-center justify-around px-4\">\n {items.map(({ label, href, icon, isActive, onClick }) => (\n <a\n key={href}\n href={href}\n onClick={onClick}\n data-slot=\"bottom-nav-item\"\n className={cn(\n 'group flex flex-col items-center gap-0 transition-colors',\n isActive ? 'text-primary' : 'text-muted-foreground'\n )}\n >\n <span\n className={cn(\n 'flex h-12 items-center justify-center rounded-2xl transition-all',\n isActive\n ? 'flex-col gap-0.5 bg-primary/10 px-4'\n : 'w-12 group-hover:bg-muted group-active:bg-primary/10'\n )}\n >\n <span className=\"h-6 w-6 shrink-0\">{icon}</span>\n {isActive && (\n <span className=\"text-[10px] font-semibold leading-none\">\n {label}\n </span>\n )}\n </span>\n <span\n className={cn(\n 'text-[10px] font-medium',\n isActive ? 'invisible' : 'visible'\n )}\n >\n {label}\n </span>\n <span\n className={cn(\n 'h-1 w-5 rounded-full transition-all',\n isActive ? 'bg-primary' : 'bg-transparent'\n )}\n />\n </a>\n ))}\n </div>\n </nav>\n )\n}\n","import { createContext, useContext, useId, useState, type ComponentProps } from 'react'\nimport { Tabs as TabsPrimitive } from 'radix-ui'\nimport { motion, AnimatePresence } from 'motion/react'\nimport { cn } from '@/lib/utils'\nimport { spring } from '@/tokens/animation'\nimport { TabsContent } from '@/components/ui/Tabs/tabs'\n\ntype BottomNavTabsContextValue = {\n activeValue: string\n listId: string\n}\n\nconst BottomNavTabsContext = createContext<BottomNavTabsContextValue | null>(null)\n\nfunction useBottomNavTabsContext() {\n const ctx = useContext(BottomNavTabsContext)\n if (!ctx) throw new Error('BottomNavTabsList must be inside BottomNavTabs')\n return ctx\n}\n\ntype BottomNavTabsProps = ComponentProps<typeof TabsPrimitive.Root>\n\nexport function BottomNavTabs({\n defaultValue,\n value: controlledValue,\n onValueChange,\n ...props\n}: BottomNavTabsProps) {\n const [internalValue, setInternalValue] = useState(controlledValue ?? defaultValue ?? '')\n const activeValue = controlledValue ?? internalValue\n const listId = useId()\n\n const handleValueChange = (v: string) => {\n if (controlledValue === undefined) setInternalValue(v)\n onValueChange?.(v)\n }\n\n return (\n <BottomNavTabsContext.Provider value={{ activeValue, listId }}>\n <TabsPrimitive.Root\n data-slot=\"bottom-nav-tabs\"\n value={activeValue}\n onValueChange={handleValueChange}\n {...props}\n />\n </BottomNavTabsContext.Provider>\n )\n}\n\nexport function BottomNavTabsContent({\n className,\n ...props\n}: ComponentProps<typeof TabsContent>) {\n return <TabsContent className={cn('pb-28', className)} {...props} />\n}\n\nexport type BottomNavTabsItem = {\n value: string\n label: string\n icon: React.ReactNode\n activeIcon?: React.ReactNode\n}\n\ntype BottomNavTabsListProps = {\n items: BottomNavTabsItem[]\n className?: string\n}\n\nexport function BottomNavTabsList({ items, className }: BottomNavTabsListProps) {\n const { activeValue, listId } = useBottomNavTabsContext()\n\n return (\n <nav\n data-slot=\"bottom-nav-tabs-list\"\n className={cn(\n 'fixed bottom-0 left-0 right-0 z-50 mx-6 max-w- mb-4 rounded-2xl bg-background shadow-[0_-4px_20px_rgba(0,0,0,0.08)]',\n className\n )}\n >\n <TabsPrimitive.List className=\"flex h-20 items-center justify-around px-4\">\n {items.map(({ value, label, icon, activeIcon }) => {\n const isActive = value === activeValue\n return (\n <TabsPrimitive.Trigger\n key={value}\n value={value}\n data-slot=\"bottom-nav-tabs-trigger\"\n className={cn(\n 'group flex flex-col items-center transition-colors',\n 'data-[state=active]:text-primary data-[state=inactive]:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:rounded-2xl',\n )}\n >\n <span className=\"relative flex h-15 w-16 flex-col items-center justify-center gap-1.5\">\n <AnimatePresence initial={false}>\n {isActive && (\n <motion.span\n layoutId={`${listId}-pill`}\n className=\"absolute inset-0 rounded-2xl bg-primary/10\"\n transition={spring.snappy}\n />\n )}\n </AnimatePresence>\n <span className=\"relative z-10 h-6 w-6\">\n {isActive ? (activeIcon ?? icon) : icon}\n </span>\n <span className=\"relative z-10 text-[10px] font-medium leading-none\">\n {label}\n </span>\n </span>\n <span\n className={cn(\n 'mt-1 h-1 w-6 rounded-full transition-colors',\n isActive ? 'bg-primary' : 'bg-transparent'\n )}\n />\n </TabsPrimitive.Trigger>\n )\n })}\n </TabsPrimitive.List>\n </nav>\n )\n}\n","import { createContext, useContext, useRef, useState, type ComponentProps } from 'react';\nimport { Dialog as DrawerPrimitive } from 'radix-ui';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { XIcon } from 'lucide-react';\nimport { transition, ease, duration } from '@/tokens/animation';\n\n// ─── Context ─────────────────────────────────────────────────────────────────\n\ntype DrawerContextValue = { isOpen: boolean; modal: boolean };\nconst DrawerContext = createContext<DrawerContextValue>({ isOpen: false, modal: true });\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nfunction Drawer({ children, open, onOpenChange, modal = true, ...props }: ComponentProps<typeof DrawerPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = useState(props.defaultOpen ?? false);\n\n const isOpen = open !== undefined ? open : internalOpen;\n\n return (\n <DrawerContext.Provider value={{ isOpen, modal }}>\n <DrawerPrimitive.Root\n data-slot='drawer'\n modal={modal}\n {...props}\n open={isOpen}\n onOpenChange={(v) => {\n setInternalOpen(v);\n onOpenChange?.(v);\n }}>\n {children}\n </DrawerPrimitive.Root>\n </DrawerContext.Provider>\n );\n}\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\nfunction DrawerTrigger({ ...props }: ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot='drawer-trigger' {...props} />;\n}\n\n// ─── Close ───────────────────────────────────────────────────────────────────\n\nfunction DrawerClose({ ...props }: ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot='drawer-close' {...props} />;\n}\n\n// ─── Portal — AnimatePresence lives here ─────────────────────────────────────\n\nfunction DrawerPortal({ children, ...props }: ComponentProps<typeof DrawerPrimitive.Portal>) {\n const { isOpen } = useContext(DrawerContext);\n\n return (\n <DrawerPrimitive.Portal forceMount {...props}>\n <AnimatePresence mode='sync'>{isOpen && children}</AnimatePresence>\n </DrawerPrimitive.Portal>\n );\n}\n\n// ─── Overlay ─────────────────────────────────────────────────────────────────\n\nfunction DrawerOverlay({ className, ...props }: ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay data-slot='drawer-overlay' asChild forceMount {...props}>\n <motion.div\n className={cn(\n 'fixed inset-0 isolate z-50 bg-black/30 supports-backdrop-filter:backdrop-blur-sm',\n className,\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: duration.normal, ease: ease.smooth }}\n />\n </DrawerPrimitive.Overlay>\n );\n}\n\n// ─── Size map ────────────────────────────────────────────────────────────────\n\nconst sizeClasses = {\n sm: 'w-64',\n md: 'w-80',\n lg: 'w-96',\n xl: 'w-[30rem]',\n full: 'w-screen',\n} as const;\n\ntype DrawerSide = 'left' | 'right' | 'top' | 'bottom';\ntype DrawerSize = keyof typeof sizeClasses;\n\n// ─── Content ─────────────────────────────────────────────────────────────────\n\nfunction DrawerContent({\n className,\n children,\n side = 'right',\n size = 'md',\n showCloseButton = true,\n resizable = false,\n ...props\n}: ComponentProps<typeof DrawerPrimitive.Content> & {\n side?: DrawerSide;\n size?: DrawerSize;\n showCloseButton?: boolean;\n resizable?: boolean;\n}) {\n const isHorizontal = side === 'left' || side === 'right';\n\n const xInitial = side === 'right' ? '100%' : side === 'left' ? '-100%' : 0;\n const yInitial = side === 'bottom' ? '100%' : side === 'top' ? '-100%' : 0;\n\n const dragRef = useRef<{\n startPos: number;\n startSize: number;\n content: HTMLElement;\n } | null>(null);\n\n const { modal } = useContext(DrawerContext);\n\n return (\n <DrawerPortal>\n {modal && <DrawerOverlay key='drawer-overlay' />}\n <DrawerPrimitive.Content\n key='drawer-content'\n data-slot='drawer-content'\n data-side={side}\n asChild\n forceMount\n className={cn(\n 'fixed z-50 flex flex-col bg-popover text-popover-foreground shadow-xl outline-none',\n side === 'left' && 'inset-y-0 left-0',\n side === 'right' && 'inset-y-0 right-0',\n side === 'top' && 'inset-x-0 top-0',\n side === 'bottom' && 'inset-x-0 bottom-0',\n isHorizontal && sizeClasses[size],\n !isHorizontal && 'h-auto min-h-40',\n className,\n )}\n {...props}>\n <motion.div\n className={cn('flex flex-col', isHorizontal && 'h-full')}\n initial={{ x: xInitial, y: yInitial, opacity: 0 }}\n animate={{ x: 0, y: 0, opacity: 1, transition: transition.drawer }}\n exit={{ x: xInitial, y: yInitial, opacity: 0, transition: transition.drawerExit }}>\n {children}\n {showCloseButton && (\n <DrawerPrimitive.Close data-slot='drawer-close' asChild>\n <Button\n variant='ghost'\n className='absolute top-4 right-4'\n size='icon-sm'>\n <XIcon />\n <span className='sr-only'>Close</span>\n </Button>\n </DrawerPrimitive.Close>\n )}\n {resizable && (\n <div\n data-slot='drawer-resize-handle'\n className={cn(\n 'absolute opacity-0 transition-opacity hover:opacity-100 hover:bg-border',\n side === 'right' && 'inset-y-0 left-0 w-1 cursor-col-resize',\n side === 'left' && 'inset-y-0 right-0 w-1 cursor-col-resize',\n side === 'top' && 'inset-x-0 bottom-0 h-1 cursor-row-resize',\n side === 'bottom' && 'inset-x-0 top-0 h-1 cursor-row-resize',\n )}\n onPointerDown={(e) => {\n e.preventDefault();\n const content = e.currentTarget.parentElement;\n if (!content) return;\n const startSize = isHorizontal\n ? parseFloat(getComputedStyle(content).width)\n : parseFloat(getComputedStyle(content).height);\n // Suppress CSS transitions during drag; motion/react JS animations are unaffected\n content.style.transition = 'none';\n dragRef.current = {\n startPos: isHorizontal ? e.clientX : e.clientY,\n startSize,\n content,\n };\n e.currentTarget.setPointerCapture(e.pointerId);\n }}\n onPointerMove={(e) => {\n if (!dragRef.current) return;\n const { startPos, startSize, content } = dragRef.current;\n const delta = (isHorizontal ? e.clientX : e.clientY) - startPos;\n let newSize: number;\n if (side === 'right') {\n newSize = Math.max(160, Math.min(window.innerWidth * 0.9, startSize - delta));\n } else if (side === 'left') {\n newSize = Math.max(160, Math.min(window.innerWidth * 0.9, startSize + delta));\n } else if (side === 'bottom') {\n newSize = Math.max(80, Math.min(window.innerHeight * 0.9, startSize - delta));\n } else {\n newSize = Math.max(80, Math.min(window.innerHeight * 0.9, startSize + delta));\n }\n content.style[isHorizontal ? 'width' : 'height'] = `${newSize}px`;\n }}\n onPointerUp={() => {\n if (dragRef.current?.content) {\n dragRef.current.content.style.transition = '';\n }\n dragRef.current = null;\n }}\n onPointerCancel={() => {\n if (dragRef.current?.content) {\n dragRef.current.content.style.transition = '';\n }\n dragRef.current = null;\n }}\n />\n )}\n </motion.div>\n </DrawerPrimitive.Content>\n </DrawerPortal>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nfunction DrawerHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='drawer-header'\n className={cn('flex shrink-0 flex-col gap-1.5 p-6', className)}\n {...props}\n />\n );\n}\n\n// ─── Body ────────────────────────────────────────────────────────────────────\n\nfunction DrawerBody({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='drawer-body'\n className={cn('flex-1 overflow-y-auto px-6 pb-6', className)}\n {...props}\n />\n );\n}\n\n// ─── Footer ──────────────────────────────────────────────────────────────────\n\nfunction DrawerFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='drawer-footer'\n className={cn(\n 'border-border mt-auto flex shrink-0 flex-wrap items-center justify-end gap-2 border-t px-6 py-4',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Title ───────────────────────────────────────────────────────────────────\n\nfunction DrawerTitle({ className, ...props }: ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot='drawer-title'\n className={cn('font-heading text-base leading-none font-semibold', className)}\n {...props}\n />\n );\n}\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nfunction DrawerDescription({\n className,\n ...props\n}: ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot='drawer-description'\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\n// ─── Exports ─────────────────────────────────────────────────────────────────\n\nexport type { DrawerSide, DrawerSize };\n\nexport {\n Drawer,\n DrawerTrigger,\n DrawerClose,\n DrawerPortal,\n DrawerOverlay,\n DrawerContent,\n DrawerHeader,\n DrawerBody,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n","import { useEffect, useImperativeHandle, useRef, useState, type Ref } from 'react';\nimport { BrushCleaning } from 'lucide-react';\nimport SignaturePadLib, { type PointGroup } from 'signature_pad';\n\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\n\nexport interface SignaturePadHandle {\n /** Wipes the drawing and reports `onEmptyChange(true)` if something was drawn. */\n clear: () => void;\n isEmpty: () => boolean;\n /** The drawing as a PNG with a transparent background. Rejects if not mounted or the browser cannot encode it. */\n toBlob: () => Promise<Blob>;\n}\n\nexport interface SignaturePadProps {\n /** Accessible name of the drawing area. */\n 'aria-label': string;\n /** Id of the element holding the instructions. */\n 'aria-describedby'?: string;\n /** Called when the pad goes from empty to drawn (`false`) or back (`true`), never twice in a row. */\n onEmptyChange?: (empty: boolean) => void;\n /** Ignores pointer input while true. */\n disabled?: boolean;\n /** Height in px; the pad always fills the width of its container. */\n height?: number;\n /** Pen color. The exported PNG keeps this color on a transparent background. */\n penColor?: string;\n /** Minimum stroke width in px, reached at high pointer speed. */\n minWidth?: number;\n /** Maximum stroke width in px, reached at low pointer speed. */\n maxWidth?: number;\n /** Ignores pointer moves closer than this many px to the last point. Lower is smoother. */\n minDistance?: number;\n /** Minimum ms between processed pointer moves; `0` processes every event. */\n throttle?: number;\n /** 0–1 weight of the previous velocity when computing width. Higher evens out width changes. */\n velocityFilterWeight?: number;\n /** Visible text and accessible name of the built-in clear button. Pass a translated string from the app. */\n clearLabel: string;\n className?: string;\n /** Imperative handle with `clear`, `isEmpty` and `toBlob`. */\n ref?: Ref<SignaturePadHandle>;\n}\n\n/**\n * Freehand signature area for touch, pen and mouse. The drawing buffer follows the container size\n * and the device pixel ratio. Strokes live in a reference coordinate space; a resize scales them\n * uniformly to fit (never above 1), so a narrower pad, such as a rotated phone, never crops the\n * signature or its PNG, and growing back restores it. A stroke added while scaled down that falls\n * outside the reference area grows it, so everything still fits, at a smaller size.\n */\nfunction SignaturePad({\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n onEmptyChange,\n disabled = false,\n height = 260,\n penColor = 'black',\n // Smoother than the library defaults (0.5–2.5 px, 5 px, 16 ms), which drop points and turn\n // fast or small curves into visible straight segments.\n minWidth = 1,\n maxWidth = 3,\n minDistance = 1,\n throttle = 0,\n velocityFilterWeight,\n clearLabel,\n className,\n ref,\n}: SignaturePadProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const padRef = useRef<SignaturePadLib | null>(null);\n const emptyRef = useRef(true);\n const [empty, setEmptyState] = useState(true);\n const onEmptyChangeRef = useRef(onEmptyChange);\n // Strokes in a reference coordinate space: `width` x `height` starts as the canvas size when the\n // first stroke ends on an empty pad, and grows if a later stroke reaches past it. `scale` is the\n // current display scale. Resizes scale from this reference, never from an already scaled\n // drawing, and strokes added while scaled are stored divided by `scale`.\n const drawnRef = useRef<{ data: PointGroup[]; width: number; height: number; scale: number }>({\n data: [],\n width: 0,\n height: 0,\n scale: 1,\n });\n // Options are read once on mount: the pad is created a single time.\n const optionsRef = useRef({\n penColor,\n minWidth,\n maxWidth,\n minDistance,\n throttle,\n velocityFilterWeight,\n });\n\n useEffect(() => {\n onEmptyChangeRef.current = onEmptyChange;\n }, [onEmptyChange]);\n\n const setEmpty = (next: boolean) => {\n if (emptyRef.current === next) return;\n emptyRef.current = next;\n setEmptyState(next);\n onEmptyChangeRef.current?.(next);\n };\n\n const clear = () => {\n padRef.current?.clear();\n drawnRef.current = { data: [], width: 0, height: 0, scale: 1 };\n setEmpty(true);\n };\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const pad = new SignaturePadLib(canvas, optionsRef.current);\n padRef.current = pad;\n let width = 0;\n let fittedHeight = 0;\n // Redraws the reference strokes at the scale that fits the current size.\n const redraw = () => {\n const drawn = drawnRef.current;\n drawn.scale = Math.min(width / drawn.width, fittedHeight / drawn.height, 1);\n pad.clear();\n pad.fromData(\n drawn.data.map((group) => ({\n ...group,\n points: group.points.map((point) => ({\n ...point,\n x: point.x * drawn.scale,\n y: point.y * drawn.scale,\n })),\n })),\n );\n };\n\n const handleEnd = () => {\n const drawn = drawnRef.current;\n if (drawn.data.length === 0) {\n drawn.width = width;\n drawn.height = fittedHeight;\n drawn.scale = 1;\n }\n // Each stroke is one group; only the newest one is new.\n const newest = pad.toData().at(-1);\n if (newest) {\n const points = newest.points.map((point) => ({\n ...point,\n x: point.x / drawn.scale,\n y: point.y / drawn.scale,\n }));\n drawn.data = [...drawn.data, { ...newest, points }];\n // A stroke drawn while scaled down can fall outside the reference area (e.g. low in\n // a narrowed pad). Grow the reference to include it, so growing back fits it too.\n const margin = newest.maxWidth ?? 0;\n const reach = (axis: 'x' | 'y') =>\n Math.max(...points.map((point) => point[axis])) + margin;\n drawn.width = Math.max(drawn.width, reach('x'));\n drawn.height = Math.max(drawn.height, reach('y'));\n const fitting = Math.min(width / drawn.width, fittedHeight / drawn.height, 1);\n if (fitting !== drawn.scale) redraw();\n }\n setEmpty(pad.isEmpty());\n };\n pad.addEventListener('endStroke', handleEnd);\n\n const fit = () => {\n const nextWidth = canvas.offsetWidth;\n const nextHeight = canvas.offsetHeight;\n if (!nextWidth || !nextHeight) return;\n if (nextWidth === width && nextHeight === fittedHeight) return;\n width = nextWidth;\n fittedHeight = nextHeight;\n const ratio = window.devicePixelRatio || 1;\n canvas.width = nextWidth * ratio;\n canvas.height = nextHeight * ratio;\n canvas.getContext('2d')?.scale(ratio, ratio);\n pad.clear();\n // Uniform scale keeps the whole signature inside the pad without distortion; it never\n // grows past the reference size.\n if (drawnRef.current.data.length > 0) redraw();\n };\n fit();\n const observer = new ResizeObserver(fit);\n observer.observe(canvas);\n\n return () => {\n observer.disconnect();\n pad.removeEventListener('endStroke', handleEnd);\n pad.off();\n padRef.current = null;\n };\n // `setEmpty` only touches refs, so the pad is created once.\n }, []);\n\n useEffect(() => {\n if (disabled) padRef.current?.off();\n else padRef.current?.on();\n }, [disabled]);\n\n useImperativeHandle(\n ref,\n () => ({\n clear,\n isEmpty: () => padRef.current?.isEmpty() ?? true,\n toBlob: () =>\n new Promise<Blob>((resolve, reject) => {\n const canvas = canvasRef.current;\n if (!canvas) return reject(new Error('The signature pad is not mounted'));\n canvas.toBlob((blob) => {\n if (blob) resolve(blob);\n else reject(new Error('The signature could not be encoded as PNG'));\n }, 'image/png');\n }),\n }),\n // `clear` only touches refs and state setters, so the handle is created once.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n return (\n <div\n data-slot='signature-pad'\n data-disabled={disabled ? '' : undefined}\n className={cn(\n // Fixed light \"paper\": the pen is black and the PNG is read on white by others. The\n // primitive keeps the pad light for consumers that define a dark theme, where a themed\n // surface (`background`, `border`) would turn dark and hide the black ink. The edge\n // uses `dark-400` (4.66:1 on white) so the pad reads as a control (WCAG 1.4.11).\n 'bg-main-alternative-secondary border-dark-400 relative overflow-hidden rounded-xl border',\n 'data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50',\n className,\n )}>\n <canvas\n ref={canvasRef}\n data-slot='signature-pad-canvas'\n role='img'\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n aria-disabled={disabled || undefined}\n style={{ height }}\n className='block w-full touch-none'\n />\n <Button\n type='button'\n variant='ghost'\n size='sm'\n data-slot='signature-pad-clear'\n disabled={disabled}\n // Not `disabled` while empty: that would drop keyboard focus to <body> right after\n // clearing.\n aria-disabled={empty && !disabled ? true : undefined}\n onClick={() => {\n if (!emptyRef.current) clear();\n }}\n // The surface is always light, so the ghost button's themed colors (light gray text in\n // dark mode) are replaced by theme-independent primitives. `h-11` meets the 44px touch\n // target, the edge matches the pad's `dark-400` so the button reads as a control on the\n // white surface, and the empty state stays visible enough to read as available but\n // inactive. The label truncates instead of overflowing a narrow pad.\n className='bg-main-white text-dark-600 border-dark-400 hover:bg-dark-100 hover:text-main-black aria-disabled:hover:bg-main-white absolute right-2 bottom-2 h-11 max-w-[calc(100%-1rem)] gap-1.5 rounded-full border border-solid px-4 text-sm aria-disabled:cursor-not-allowed aria-disabled:opacity-70'>\n <BrushCleaning aria-hidden className='size-4 shrink-0' />\n <span className='truncate'>{clearLabel}</span>\n </Button>\n </div>\n );\n}\n\nexport { SignaturePad };\n","import type { ReactNode } from 'react';\nimport { AbilityProvider } from '@/components/authorization/Can/ability-context';\nimport { Toaster, type ToasterPosition } from '@/components/ui/Toast/toast';\nimport { TooltipProvider } from '@/components/ui/Tooltip/tooltip';\n\nexport interface TCCEProviderProps {\n children: ReactNode;\n permissions?: string[];\n toasterPosition?: ToasterPosition;\n tooltipDelayDuration?: number;\n}\n\nexport function TCCEProvider({\n children,\n permissions,\n toasterPosition,\n tooltipDelayDuration,\n}: TCCEProviderProps) {\n return (\n <TooltipProvider delayDuration={tooltipDelayDuration}>\n <AbilityProvider permissions={permissions}>\n <Toaster position={toasterPosition}>\n {children}\n </Toaster>\n </AbilityProvider>\n </TooltipProvider>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/components/ui/Alert/alert.tsx","../src/components/ui/Avatar/avatar.tsx","../src/components/ui/Status/badge.tsx","../src/components/ui/Status/status.tsx","../src/components/ui/Badge/badge.tsx","../src/components/ui/Breadcrumb/breadcrumb.tsx","../src/components/ui/Button/button.tsx","../src/components/ui/MiniCalendar/mini-calendar.tsx","../src/components/ui/Card/card.tsx","../src/components/ui/Carousel/carousel.tsx","../src/components/compounds/Form/form.tsx","../src/components/ui/Input/input.tsx","../src/components/ui/Label/label.tsx","../src/utils/urlSecurity.ts","../src/components/ui/Link/link.tsx","../src/lib/phone.ts","../src/components/ui/Popover/popover.tsx","../src/components/ui/PhoneField/phone-field.tsx","../src/components/ui/PinInput/pin-input.tsx","../src/components/ui/Toggle/toggle.tsx","../src/components/compounds/SegmentedControl/segmented-control.tsx","../src/components/ui/Select/select.tsx","../src/components/ui/Separator/separator.tsx","../src/components/ui/Progress/progress.tsx","../src/components/ui/Skeleton/skeleton.tsx","../src/components/ui/Slider/slider.tsx","../src/components/ui/Switch/switch.tsx","../src/tokens/animation.ts","../src/components/ui/Tabs/tabs.tsx","../src/components/ui/Toast/toast.tsx","../src/components/ui/ToggleGroup/toggle-group.tsx","../src/components/ui/Tooltip/tooltip.tsx","../src/components/ui/Text/text.tsx","../src/components/ui/Dialog/dialog.tsx","../src/components/ui/AlertDialog/alert-dialog.tsx","../src/components/ui/Accordion/accordion.tsx","../src/components/ui/Combobox/combobox.tsx","../src/components/ui/DropdownMenu/dropdown-menu.tsx","../src/components/ui/Dropzone/dropzone.tsx","../src/components/ui/Empty/empty.tsx","../src/components/ui/Item/item.tsx","../src/components/ui/Radio/radio-group.tsx","../src/components/ui/Spinner/spinner.tsx","../src/components/compounds/ColorPicker/button.tsx","../src/components/compounds/ColorPicker/input.tsx","../src/components/compounds/ColorPicker/select.tsx","../src/components/compounds/ColorPicker/color-picker.tsx","../src/components/ui/Calendar/calendar.tsx","../src/components/compounds/DatePicker/date-picker.tsx","../src/components/compounds/NavBar/navbar.tsx","../src/components/compounds/NavBar/navigation-menu.tsx","../src/components/authorization/policy.ts","../src/components/authorization/Can/ability-context.tsx","../src/components/authorization/permissions.generated.ts","../src/components/authorization/permission-catalog.ts","../src/components/authorization/Can/can.tsx","../src/lib/use-media-query.ts","../src/hooks/use-mobile.ts","../src/components/ui/Sheet/sheet.tsx","../src/components/ui/Sidebar/sidebar.tsx","../src/components/compounds/AppShell/app-shell.tsx","../src/components/compounds/TextArea/textarea.tsx","../src/components/compounds/EventCalendar/event-calendar-context.ts","../src/components/compounds/EventCalendar/event-calendar.styles.ts","../src/components/compounds/EventCalendar/hooks/use-event-calendar.ts","../src/components/compounds/EventCalendar/event-calendar.tsx","../src/lib/form.ts","../src/lib/cdn.ts","../src/lib/confetti.ts","../src/components/ui/Table/table.tsx","../src/components/ui/Checkbox/checkbox.tsx","../src/components/compounds/Pagination/pagination.tsx","../src/components/compounds/Table/data-table-context.ts","../src/components/compounds/Table/cell-size-class.ts","../src/components/compounds/Table/data-table-card-view.tsx","../src/components/compounds/Table/utils/filter-utils.ts","../src/components/compounds/Table/data-table-column-filter.tsx","../src/components/compounds/Table/hooks/use-column-filter.ts","../src/components/compounds/Table/data-table-header-cell.tsx","../src/components/compounds/Table/data-table-skeleton.tsx","../src/components/compounds/Table/hooks/use-table-sorting.ts","../src/components/compounds/Table/hooks/use-table-filtering.ts","../src/components/compounds/Table/hooks/use-table-selection.ts","../src/components/compounds/Table/hooks/use-table-global-filter.ts","../src/components/compounds/Table/hooks/use-table-visibility.ts","../src/components/compounds/Table/hooks/use-table-sizing.ts","../src/components/compounds/Table/hooks/use-table-persistence.ts","../src/components/compounds/Table/data-table.tsx","../src/components/compounds/Table/hooks/use-table-data.ts","../src/components/compounds/Table/utils/sorting-transform.ts","../src/components/compounds/Table/utils/filtering-transform.ts","../src/components/compounds/Table/data-table-row-actions.tsx","../src/components/compounds/Table/data-table-footer.tsx","../src/components/compounds/Table/data-table-toolbar.tsx","../src/components/compounds/Table/data-table-search.tsx","../src/components/compounds/BottomNav/bottom-nav.tsx","../src/components/compounds/BottomNav/bottom-nav-tabs.tsx","../src/components/compounds/FloatingSidebar/floating-sidebar.tsx","../src/components/compounds/AppHub/app-hub-context.ts","../src/components/compounds/AppHub/app-hub.constants.ts","../src/components/compounds/AppHub/app-hub.utils.ts","../src/components/compounds/AppHub/app-hub-tile.tsx","../src/components/compounds/AppHub/hooks/use-arrow-navigation.ts","../src/components/compounds/AppHub/app-hub-catalog.tsx","../src/components/compounds/AppHub/app-hub-panel.tsx","../src/components/compounds/AppHub/app-hub-rail.tsx","../src/components/compounds/AppHub/app-hub-sheet.tsx","../src/components/compounds/AppHub/hooks/use-app-hub-open.ts","../src/components/compounds/AppHub/hooks/use-app-hub-viewport.ts","../src/components/compounds/AppHub/app-hub.tsx","../src/components/compounds/AppHub/app-hub-skip-link.tsx","../src/components/ui/Drawer/drawer.tsx","../src/components/ui/SignaturePad/signature-pad.tsx","../src/components/providers/tcce-provider.tsx"],"names":["twMerge","clsx","cva","jsx","jsxs","X","AvatarPrimitive","Slot","Fragment","badgeVariants","Badge","ChevronRightIcon","MoreHorizontalIcon","LoaderCircle","useState","useRef","useEffect","useCallback","createContext","useContext","addDays","format","ChevronLeftIcon","isSameDay","isToday","useEmblaCarousel","api","ChevronLeft","ChevronRight","LabelPrimitive","ExternalLinkIcon","isValidPhoneNumber","validatePhoneNumberLength","PopoverPrimitive","parsePhoneNumberFromString","countryFlags","useId","AsYouType","useLayoutEffect","parsed","ChevronsUpDownIcon","Command","SearchIcon","CheckIcon","TogglePrimitive","ToggleGroup","motion","SelectPrimitive","ChevronDownIcon","ChevronUpIcon","SeparatorPrimitive","ProgressPrimitive","useMemo","SliderPrimitive","SwitchPrimitive","TabsPrimitive","AnimatePresence","t","CircleCheckIcon","OctagonXIcon","TriangleAlertIcon","InfoIcon","Loader2Icon","XIcon","ToggleGroupPrimitive","TooltipPrimitive","DialogPrimitive","AlertDialogPrimitive","AccordionPrimitive","DropdownMenuPrimitive","useDropzone","UploadIcon","RadioGroupPrimitive","LoaderIcon","buttonVariants","Button","Input","Select","SelectValue","SelectTrigger","SelectContent","SelectScrollUpButton","SelectScrollDownButton","SelectItem","Color","memo","Slider","hue","alpha","PipetteIcon","getDefaultClassNames","className","DayPicker","CalendarIcon","forwardRef","BellIcon","CircleHelpIcon","NavigationMenuPrimitive","can","cloneElement","isValidElement","SheetPrimitive","open","MenuIcon","House","Plane","Wallet","LayoutDashboardIcon","Temporal","eventsService","createEventsServicePlugin","eventModal","createEventModalPlugin","calendarControls","createCalendarControlsPlugin","createCalendar","viewMonthGrid","viewWeek","viewDay","viewMonthAgenda","ScheduleXCalendar","Pencil","Clock","useForm","zodResolver","confetti","CheckboxPrimitive","MinusIcon","flexRender","FilterOption","Funnel","ArrowUp","ArrowDown","ArrowUpDown","_","table","useReactTable","getCoreRowModel","getSortedRowModel","getFilteredRowModel","Ellipsis","hasActiveFilters","Rows2","Eye","Search","animation","createPortal","ChevronsLeft","Menu","transition","useControllableState","sizeClass","CircleDashed","toggle","nav","ChevronDown","Star","use","ArrowUpRight","Lock","ArrowRight","CircleAlert","LayoutGrid","PanelRightClose","storageKey","subscribe","getSnapshot","useSyncExternalStore","useReducer","DrawerPrimitive","SignaturePadLib","useImperativeHandle","BrushCleaning"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","file":"main.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { X } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport type { HTMLAttributes, ReactNode } from 'react';\n\nconst alertVariants = cva('relative w-full rounded-lg border border-l-[3px] p-4', {\n variants: {\n variant: {\n default: 'border-border border-l-border bg-card text-card-foreground',\n info: 'border-blue-200 border-l-blue-400 bg-blue-50 text-blue-700',\n success: 'border-emerald-200 border-l-emerald-400 bg-emerald-50 text-emerald-700',\n warning: 'border-amber-200 border-l-amber-400 bg-amber-50 text-amber-700',\n error: 'border-red-200 border-l-red-500 bg-red-50 text-red-700',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\ninterface AlertProps\n extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {\n icon?: ReactNode;\n onDismiss?: () => void;\n}\n\ntype AlertTitleProps = HTMLAttributes<HTMLHeadingElement>;\n\ntype AlertDescriptionProps = HTMLAttributes<HTMLParagraphElement>;\n\nfunction Alert({ className, variant, icon, onDismiss, children, ...props }: AlertProps) {\n return (\n <div\n data-slot='alert'\n data-variant={variant ?? 'default'}\n role='alert'\n className={cn(alertVariants({ variant }), className)}\n {...props}>\n <div className='flex items-start gap-3'>\n {icon && (\n <div data-slot='alert-icon' className='mt-0.5 shrink-0'>\n {icon}\n </div>\n )}\n <div data-slot='alert-content' className='min-w-0 flex-1'>\n {children}\n </div>\n {onDismiss && (\n <button\n type='button'\n aria-label='Dismiss'\n onClick={onDismiss}\n className='focus-visible:ring-ring -mt-1 -mr-1 ml-auto shrink-0 rounded p-1 opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:outline-none'>\n <X className='size-4' />\n </button>\n )}\n </div>\n </div>\n );\n}\n\nfunction AlertTitle({ className, ...props }: AlertTitleProps) {\n return (\n <h5\n data-slot='alert-title'\n className={cn('mb-1 leading-tight font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: AlertDescriptionProps) {\n return (\n <p\n data-slot='alert-description'\n className={cn('text-sm opacity-90', className)}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription, alertVariants };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Avatar as AvatarPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst avatarVariants = cva('group/avatar relative flex shrink-0 overflow-hidden rounded-full', {\n variants: {\n size: {\n sm: 'size-6 text-[10px]',\n md: 'size-8 text-xs',\n lg: 'size-10 text-sm',\n xl: 'size-12 text-base',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\nfunction Avatar({\n className,\n size = 'md',\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Root> & VariantProps<typeof avatarVariants>) {\n return (\n <AvatarPrimitive.Root\n data-slot='avatar'\n data-size={size}\n className={cn(avatarVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot='avatar-image'\n className={cn('aspect-square size-full object-cover', className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot='avatar-fallback'\n className={cn(\n 'bg-primary text-primary-foreground flex size-full items-center justify-center rounded-full font-medium uppercase',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarBadge({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='avatar-badge'\n className={cn(\n 'bg-primary text-primary-foreground ring-background absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=md]/avatar:size-2.5 group-data-[size=md]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n 'group-data-[size=xl]/avatar:size-3.5 group-data-[size=xl]/avatar:[&>svg]:size-2.5',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='avatar-group'\n className={cn(\n 'group/avatar-group *:data-[slot=avatar]:ring-background flex -space-x-2 *:data-[slot=avatar]:ring-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroupCount({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='avatar-group-count'\n className={cn(\n 'bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-xs ring-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n avatarVariants,\n};\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst badgeVariants = cva(\n 'group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-3xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',\n secondary: 'bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80',\n destructive:\n 'bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20',\n outline:\n 'border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground',\n ghost: 'hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction Badge({\n className,\n variant = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'span';\n\n return (\n <Comp\n data-slot='badge'\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\n","import type { ComponentProps, HTMLAttributes } from 'react';\nimport { Badge } from '@/components/ui/Status/badge';\nimport { cn } from '@/lib/utils';\n\nexport type StatusProps = ComponentProps<typeof Badge> & {\n status: 'online' | 'offline' | 'maintenance' | 'degraded';\n};\n\nexport const Status = ({ className, status, ...props }: StatusProps) => (\n <Badge\n className={cn('flex items-center gap-2', 'group', status, className)}\n variant='outline'\n {...props}\n />\n);\n\nexport type StatusIndicatorProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const StatusIndicator = ({ className, ...props }: StatusIndicatorProps) => (\n <span className={cn('relative flex h-2 w-2', className)} {...props}>\n <span\n className={cn(\n 'absolute inline-flex h-full w-full animate-ping rounded-full opacity-75',\n 'group-[.online]:bg-emerald-500',\n 'group-[.offline]:bg-red-500',\n 'group-[.maintenance]:bg-blue-500',\n 'group-[.degraded]:bg-amber-500',\n )}\n />\n <span\n className={cn(\n 'relative inline-flex h-2 w-2 rounded-full',\n 'group-[.online]:bg-emerald-500',\n 'group-[.offline]:bg-red-500',\n 'group-[.maintenance]:bg-blue-500',\n 'group-[.degraded]:bg-amber-500',\n )}\n />\n </span>\n);\n\nexport type StatusLabelProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const StatusLabel = ({ className, children, ...props }: StatusLabelProps) => (\n <span className={cn('text-muted-foreground', className)} {...props}>\n {children ?? (\n <>\n <span className='hidden group-[.online]:block'>Online</span>\n <span className='hidden group-[.offline]:block'>Offline</span>\n <span className='hidden group-[.maintenance]:block'>Maintenance</span>\n <span className='hidden group-[.degraded]:block'>Degraded</span>\n </>\n )}\n </span>\n);\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst badgeVariants = cva(\n 'group/badge inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!',\n {\n variants: {\n variant: {\n default: 'bg-muted text-muted-foreground',\n info: 'bg-blue-100 text-blue-500',\n success: 'bg-green-100 text-green-800',\n warning: 'bg-yellow-200 text-yellow-900',\n error: 'bg-red-100 text-red-800',\n },\n size: {\n sm: 'h-4 text-xs px-1.5 py-0.5 rounded-md',\n md: 'h-5 text-xs px-2 py-0.5 rounded-3xl',\n lg: 'h-6 text-sm px-2.5 py-1.5 rounded-3xl',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nfunction Badge({\n className,\n variant = 'default',\n size = 'md',\n asChild = false,\n ...props\n}: ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'span';\n\n return (\n <Comp\n data-slot='badge'\n data-variant={variant}\n data-size={size}\n className={cn(badgeVariants({ variant, size }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\n","import { type ComponentProps } from 'react';\nimport { Slot } from 'radix-ui';\nimport { ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\n/**\n * Root landmark for a breadcrumb trail. Renders a `<nav aria-label=\"breadcrumb\">`\n * and wraps a single {@link BreadcrumbList}.\n */\nfunction Breadcrumb({ className, ...props }: ComponentProps<'nav'>) {\n return (\n <nav aria-label='breadcrumb' data-slot='breadcrumb' className={cn(className)} {...props} />\n );\n}\n\n/**\n * Ordered list (`<ol>`) holding the trail. Lays the items out in a wrapping,\n * gapped flex row and sets the default `text-main-grey` color and `text-sm` scale.\n */\nfunction BreadcrumbList({ className, ...props }: ComponentProps<'ol'>) {\n return (\n <ol\n data-slot='breadcrumb-list'\n className={cn(\n 'text-main-grey flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * A single segment (`<li>`) of the trail. Wraps a {@link BreadcrumbLink},\n * {@link BreadcrumbPage}, or {@link BreadcrumbEllipsis}.\n */\nfunction BreadcrumbItem({ className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='breadcrumb-item'\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n );\n}\n\n/**\n * Navigable ancestor in the trail. Renders an `<a>` by default; pass `asChild`\n * to delegate to a router link (e.g. React Router / Next.js `Link`) while keeping\n * the hover and focus styles.\n *\n * @param asChild - Render the child element instead of an `<a>` (Radix `Slot`).\n */\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: ComponentProps<'a'> & {\n asChild?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'a';\n\n return (\n <Comp\n data-slot='breadcrumb-link'\n className={cn(\n 'hover:text-main-blue-primary focus-visible:ring-ring rounded-sm transition-colors duration-150 outline-none focus-visible:ring-2 focus-visible:ring-offset-1',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * The current page — the last, non-interactive segment. Renders a `<span>` with\n * `aria-current=\"page\"` and emphasized `text-main-blue-primary` color.\n */\nfunction BreadcrumbPage({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='breadcrumb-page'\n role='link'\n aria-disabled='true'\n aria-current='page'\n className={cn('text-main-blue-primary font-medium', className)}\n {...props}\n />\n );\n}\n\n/**\n * Visual divider between items. Defaults to a `ChevronRight` icon; pass any node\n * as children to override it. Always `aria-hidden`, so overrides never reach\n * assistive tech.\n */\nfunction BreadcrumbSeparator({ children, className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='breadcrumb-separator'\n role='presentation'\n aria-hidden='true'\n className={cn('text-main-grey [&>svg]:size-3.5', className)}\n {...props}>\n {children ?? <ChevronRightIcon />}\n </li>\n );\n}\n\n/**\n * Truncation marker (`…`) that collapses hidden middle segments of a long trail.\n * Pair it with a `DropdownMenu` to make the collapsed segments navigable.\n */\nfunction BreadcrumbEllipsis({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='breadcrumb-ellipsis'\n role='presentation'\n aria-hidden='true'\n className={cn(\n 'text-main-grey flex size-5 items-center justify-center [&>svg]:size-4',\n className,\n )}\n {...props}>\n <MoreHorizontalIcon />\n <span className='sr-only'>More</span>\n </span>\n );\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","import { type ComponentProps, type MouseEvent } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport {LoaderCircle} from 'lucide-react'\n\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n 'group/button inline-flex shrink-0 items-center justify-center gap-2 rounded-lg border border-transparent bg-clip-padding text-sm font-semibold whitespace-nowrap transition-all duration-150 outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 data-[loading]:cursor-not-allowed data-[loading]:opacity-80 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary:\n 'cursor-pointer bg-primary text-primary-foreground hover:bg-primary/80 focus-visible:ring-primary/30',\n secondary:\n 'cursor-pointer bg-secondary text-secondary-foreground hover:bg-[var(--color-orange-700)] focus-visible:ring-secondary/30',\n cancel: 'cursor-pointer bg-destructive text-secondary-foreground hover:bg-[var(--color-red-600)] focus-visible:ring-destructive/30',\n outline:\n 'border border-foreground/50 bg-transparent text-muted-foreground hover:bg-foreground/50 hover:text-white',\n ghost: 'cursor-pointer bg-transparent text-muted-foreground hover:bg-foreground/10 hover:text-primary focus-visible:ring-ring/30 border-none',\n cancelGhost:\n 'cursor-pointer bg-destructive/10 text-red-600 hover:bg-destructive/15 hover:text-red-600 focus-visible:ring-ring/30',\n },\n size: {\n sm: 'h-8 px-3 text-xs',\n md: 'h-9 px-4 text-sm',\n lg: 'h-10 px-6 text-sm',\n 'icon-sm': 'size-8 rounded-full p-0',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n },\n);\n\n/**\n * Interactive button with 6 variants and 4 sizes. Use `asChild` to render as any element via Radix Slot.\n * When `isLoading` is true, a spinner is shown and clicks are blocked while keeping the not-allowed cursor.\n */\nfunction Button({\n className,\n variant = 'primary',\n size = 'md',\n asChild = false,\n isLoading = false,\n children,\n onClick,\n ...props\n}: ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n isLoading?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n if (isLoading) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n }\n\n return (\n <Comp\n data-slot='button'\n data-variant={variant}\n data-size={size}\n data-loading={isLoading || undefined}\n aria-busy={isLoading || undefined}\n className={cn(buttonVariants({ variant, size, className }))}\n onClick={handleClick}\n {...props}>\n {isLoading && <LoaderCircle size={16} className='animate-spin' aria-hidden='true' />}\n {children}\n </Comp>\n );\n}\n\nexport { Button, buttonVariants };\n","import { Slot } from 'radix-ui';\nimport { addDays, format, isSameDay, isToday } from 'date-fns';\nimport { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport {\n type ButtonHTMLAttributes,\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n type MouseEventHandler,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\n\n// Local controlled/uncontrolled state hook. Avoids coupling to the mangled\n// `useControllableState` export only reachable via `radix-ui/internal`.\nfunction useControllableState<T>({\n prop,\n defaultProp,\n onChange,\n}: {\n prop?: T;\n defaultProp?: T;\n onChange?: (value: T) => void;\n}): [T | undefined, (next: T) => void] {\n const [uncontrolled, setUncontrolled] = useState<T | undefined>(defaultProp);\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolled;\n\n const onChangeRef = useRef(onChange);\n useEffect(() => {\n onChangeRef.current = onChange;\n });\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [value, setValue];\n}\n\n// Context for sharing state between components\ninterface MiniCalendarContextType {\n selectedDate: Date | null | undefined;\n onDateSelect: (date: Date) => void;\n startDate: Date;\n onNavigate: (direction: 'prev' | 'next') => void;\n days: number;\n}\n\nconst MiniCalendarContext = createContext<MiniCalendarContextType | null>(null);\n\nconst useMiniCalendar = () => {\n const context = useContext(MiniCalendarContext);\n\n if (!context) {\n throw new Error('MiniCalendar components must be used within MiniCalendar');\n }\n\n return context;\n};\n\n// Helper function to get array of consecutive dates\nconst getDays = (startDate: Date, count: number): Date[] => {\n const days: Date[] = [];\n for (let i = 0; i < count; i++) {\n days.push(addDays(startDate, i));\n }\n return days;\n};\n\n// Helper function to format date\nconst formatDate = (date: Date) => {\n const month = format(date, 'MMM');\n const day = format(date, 'd');\n\n return { month, day };\n};\n\nexport type MiniCalendarProps = HTMLAttributes<HTMLDivElement> & {\n value?: Date;\n defaultValue?: Date;\n onValueChange?: (date: Date | undefined) => void;\n startDate?: Date;\n defaultStartDate?: Date;\n onStartDateChange?: (date: Date | undefined) => void;\n days?: number;\n};\n\nexport const MiniCalendar = ({\n value,\n defaultValue,\n onValueChange,\n startDate,\n defaultStartDate = new Date(),\n onStartDateChange,\n days = 5,\n className,\n children,\n ...props\n}: MiniCalendarProps) => {\n const [selectedDate, setSelectedDate] = useControllableState<Date | undefined>({\n prop: value,\n defaultProp: defaultValue,\n onChange: onValueChange,\n });\n\n const [currentStartDate, setCurrentStartDate] = useControllableState({\n prop: startDate,\n defaultProp: defaultStartDate,\n onChange: onStartDateChange,\n });\n\n const handleDateSelect = (date: Date) => {\n setSelectedDate(date);\n };\n\n const handleNavigate = (direction: 'prev' | 'next') => {\n const newStartDate = addDays(\n currentStartDate || new Date(),\n direction === 'next' ? days : -days,\n );\n setCurrentStartDate(newStartDate);\n };\n\n const contextValue: MiniCalendarContextType = {\n selectedDate: selectedDate || null,\n onDateSelect: handleDateSelect,\n startDate: currentStartDate || new Date(),\n onNavigate: handleNavigate,\n days,\n };\n\n return (\n <MiniCalendarContext.Provider value={contextValue}>\n <div\n className={cn('flex items-center gap-2 rounded-lg border p-2', className)}\n {...props}>\n {children}\n </div>\n </MiniCalendarContext.Provider>\n );\n};\n\nexport type MiniCalendarNavigationProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n direction: 'prev' | 'next';\n asChild?: boolean;\n};\n\nexport const MiniCalendarNavigation = ({\n direction,\n asChild = false,\n children,\n onClick,\n ...props\n}: MiniCalendarNavigationProps) => {\n const { onNavigate } = useMiniCalendar();\n const Icon = direction === 'prev' ? ChevronLeftIcon : ChevronRightIcon;\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n onNavigate(direction);\n onClick?.(event);\n };\n\n if (asChild) {\n return (\n <Slot.Root onClick={handleClick} {...props}>\n {children}\n </Slot.Root>\n );\n }\n\n return (\n <Button\n onClick={handleClick}\n size={asChild ? undefined : 'icon-sm'}\n type='button'\n variant={asChild ? undefined : 'ghost'}\n className={cn(asChild ? 'p-2' : 'p-2')}\n {...props}>\n {children ?? <Icon className='size-4' />}\n </Button>\n );\n};\n\nexport type MiniCalendarDaysProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n children: (date: Date) => ReactNode;\n};\n\nexport const MiniCalendarDays = ({ className, children, ...props }: MiniCalendarDaysProps) => {\n const { startDate, days: dayCount } = useMiniCalendar();\n const days = getDays(startDate, dayCount);\n\n return (\n <div className={cn('flex items-center gap-1', className)} {...props}>\n {days.map((date) => children(date))}\n </div>\n );\n};\n\nexport type MiniCalendarDayProps = ComponentProps<typeof Button> & {\n date: Date;\n};\n\nexport const MiniCalendarDay = ({ date, className, ...props }: MiniCalendarDayProps) => {\n const { selectedDate, onDateSelect } = useMiniCalendar();\n const { month, day } = formatDate(date);\n const isSelected = selectedDate && isSameDay(date, selectedDate);\n const isTodayDate = isToday(date);\n\n return (\n <Button\n className={cn(\n 'h-auto min-w-[3rem] flex-col gap-0 p-2 text-xs',\n isTodayDate && !isSelected && 'bg-primary/10 text-primary',\n className,\n )}\n onClick={() => onDateSelect(date)}\n size='sm'\n type='button'\n variant={isSelected ? 'primary' : 'ghost'}\n {...props}>\n <span\n className={cn(\n 'text-muted-foreground text-[10px] font-medium',\n isSelected && 'text-white',\n )}>\n {month}\n </span>\n <span className='text-sm font-semibold'>{day}</span>\n </Button>\n );\n};\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Card({\n className,\n size = 'default',\n ...props\n}: ComponentProps<'div'> & { size?: 'default' | 'sm' }) {\n return (\n <div\n data-slot='card'\n data-size={size}\n className={cn(\n 'group/card bg-card text-card-foreground ring-foreground/5 dark:ring-foreground/10 flex flex-col gap-6 overflow-hidden rounded-4xl py-6 text-sm shadow-md ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-4xl *:[img:last-child]:rounded-b-4xl',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-header'\n className={cn(\n 'group/card-header @container/card-header grid auto-rows-min items-start gap-1.5 rounded-t-4xl px-6 group-data-[size=sm]/card:px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-action]:flex-row has-data-[slot=card-action]:items-start has-data-[slot=card-action]:justify-between has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-title'\n className={cn('font-heading text-primary text-lg font-bold', className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-description'\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction CardAction({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-action'\n className={cn(\n 'col-start-2 row-span-2 row-start-1 self-start justify-self-end',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-content'\n className={cn('px-6 group-data-[size=sm]/card:px-4', className)}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-footer'\n className={cn(\n 'flex items-center rounded-b-4xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent };\n","import { createContext, useCallback, useContext, useEffect, useState, type ComponentProps, type KeyboardEvent } from 'react';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: 'horizontal' | 'vertical';\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = useContext(CarouselContext);\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />');\n }\n\n return context;\n}\n\n/**\n * Carousel root. Wraps Embla Carousel with keyboard navigation, scroll state, and context.\n * Use `orientation` for vertical mode and `opts` to pass Embla options directly.\n */\nfunction Carousel({\n orientation = 'horizontal',\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: ComponentProps<'div'> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = useState(false);\n const [canScrollNext, setCanScrollNext] = useState(false);\n\n const onSelect = useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on('reInit', onSelect);\n api.on('select', onSelect);\n\n return () => {\n api?.off('select', onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}>\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role='region'\n aria-roledescription='carousel'\n data-slot='carousel'\n {...props}>\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\n/**\n * Scrollable track wrapper. Direct child of `Carousel`. Wraps `CarouselItem` children.\n */\nfunction CarouselContent({ className, ...props }: ComponentProps<'div'>) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className='overflow-hidden' data-slot='carousel-content'>\n <div\n className={cn(\n 'flex',\n orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\n/**\n * Individual slide. Use `className` with `basis-*` utilities to control how many slides are visible.\n */\nfunction CarouselItem({ className, ...props }: ComponentProps<'div'>) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role='group'\n aria-roledescription='slide'\n data-slot='carousel-item'\n className={cn(\n 'min-w-0 shrink-0 grow-0 basis-full',\n orientation === 'horizontal' ? 'pl-4' : 'pt-4',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Previous-slide button. Positioned absolutely to the left (horizontal) or top (vertical).\n * Disabled automatically when there are no previous slides.\n */\nfunction CarouselPrevious({\n className,\n variant = 'outline',\n size = 'icon-sm',\n ...props\n}: ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot='carousel-previous'\n variant={variant}\n size={size}\n className={cn(\n 'cursor-pointer hover:bg-foreground/5 hover:text-foreground font-border border-solid border-foreground/10 absolute touch-manipulation',\n orientation === 'horizontal'\n ? 'top-1/2 -left-12 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n aria-label='Previous slide'\n {...props}>\n <ChevronLeft className='size-4' aria-hidden='true' />\n <span className='sr-only'>Previous slide</span>\n </Button>\n );\n}\n\n/**\n * Next-slide button. Positioned absolutely to the right (horizontal) or bottom (vertical).\n * Disabled automatically when there are no next slides.\n */\nfunction CarouselNext({\n className,\n variant = 'outline',\n size = 'icon-sm',\n ...props\n}: ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot='carousel-next'\n variant={variant}\n size={size}\n className={cn(\n 'cursor-pointer hover:bg-foreground/5 hover:text-foreground border border-solid border-foreground/10 absolute touch-manipulation',\n orientation === 'horizontal'\n ? 'top-1/2 -right-12 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n aria-label='Next slide'\n {...props}>\n <ChevronRight className='size-4' aria-hidden='true' />\n <span className='sr-only'>Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n useCarousel,\n};\n","import { type ComponentProps } from 'react';\nimport { cn } from '@/lib/utils';\n\n// Field — wrapper container for a single form field\nfunction Field({ className, ...props }: ComponentProps<'div'>) {\n return <div data-slot='field' className={cn('flex flex-col gap-1.5', className)} {...props} />;\n}\n\n// FieldLabel — label for a form field\nfunction FieldLabel({ className, ...props }: ComponentProps<'label'>) {\n return (\n <label\n data-slot='field-label'\n className={cn(\n 'text-foreground text-sm leading-none font-medium',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n className,\n )}\n {...props}\n />\n );\n}\n\n// FieldDescription — helper text below a field\nfunction FieldDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='field-description'\n className={cn('text-muted-foreground text-xs', className)}\n {...props}\n />\n );\n}\n\n// FieldError — validation error message\nfunction FieldError({ errors, className }: { errors?: unknown[]; className?: string }) {\n if (!errors || errors.length === 0) return null;\n\n return (\n <p\n data-slot='field-error'\n className={cn('text-destructive text-xs font-medium', className)}>\n {errors\n .map((e) =>\n typeof e === 'string' ? e : e instanceof Error ? e.message : String(e),\n )\n .join(', ')}\n </p>\n );\n}\n\n// FieldGroup — groups multiple fields together vertically\nfunction FieldGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div data-slot='field-group' className={cn('flex flex-col gap-4', className)} {...props} />\n );\n}\n\nexport { Field, FieldLabel, FieldDescription, FieldError, FieldGroup };\n","import { type ComponentProps } from 'react';\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot='input'\n className={cn(\n 'border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[border-color,box-shadow] outline-hidden md:text-sm',\n 'placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground',\n 'file:text-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n 'dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { type ComponentProps } from 'react';\nimport { Label as LabelPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Label({ className, ...props }: ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot='label'\n className={cn(\n 'text-foreground text-sm leading-6 font-medium transition-colors select-none',\n 'group-has-disabled/field:cursor-not-allowed group-has-disabled/field:opacity-50',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n 'aria-invalid:text-destructive dark:aria-invalid:text-destructive/90',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","const SAFE_EXTERNAL_PROTOCOLS = new Set(['https:', 'http:']);\nconst SAFE_HREF_PROTOCOLS = new Set(['https:', 'http:', 'mailto:', 'tel:']);\n\n/**\n * Returns true only for http/https URLs. Blocks javascript: and all other protocols.\n * Use before window.location.href or window.open with consumer-supplied paths.\n */\nexport function isSafeExternalUrl(url: string): boolean {\n try {\n return SAFE_EXTERNAL_PROTOCOLS.has(new URL(url).protocol);\n } catch {\n return false;\n }\n}\n\n/**\n * Sanitizes an anchor href. Passes through relative paths and safe protocols.\n * Returns '#' for javascript: or any other unsafe protocol.\n */\nexport function sanitizeHref(href: string | undefined): string | undefined {\n if (!href) return href;\n if (\n (href.startsWith('/') && !href.startsWith('//')) ||\n href.startsWith('#') ||\n href.startsWith('./') ||\n href.startsWith('../')\n ) {\n return href;\n }\n try {\n return SAFE_HREF_PROTOCOLS.has(new URL(href).protocol) ? href : '#';\n } catch {\n return '#';\n }\n}\n","import { type ComponentProps, type MouseEvent, type MouseEventHandler } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport { ExternalLinkIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { sanitizeHref } from '@/utils/urlSecurity';\n\nconst linkVariants = cva(\n 'group/link inline-flex items-center rounded-sm outline-none transition-colors duration-150 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:opacity-50',\n {\n variants: {\n variant: {\n underlined:\n 'underline underline-offset-2 decoration-[1px] text-main-grey hover:text-main-blue-primary active:translate-y-px active:text-main-orange-primary visited:text-main-orange-primary visited:underline focus-visible:outline-main-blue-primary',\n plain: 'no-underline text-main-grey hover:text-main-blue-primary hover:underline hover:underline-offset-2 hover:decoration-[1px] active:translate-y-px active:text-main-orange-primary active:underline focus-visible:outline-main-blue-primary',\n },\n size: {\n xs: 'gap-1 text-xs',\n sm: 'gap-1 text-sm',\n md: 'gap-1.5 text-base',\n lg: 'gap-2 text-lg',\n },\n },\n defaultVariants: {\n variant: 'underlined',\n size: 'md',\n },\n },\n);\n\nfunction Link({\n className,\n variant = 'underlined',\n size = 'md',\n asChild = false,\n disabled = false,\n target,\n rel,\n href,\n truncate = false,\n children,\n onClick,\n ...props\n}: Omit<ComponentProps<'a'>, 'onClick'> &\n VariantProps<typeof linkVariants> & {\n asChild?: boolean;\n disabled?: boolean;\n truncate?: boolean;\n onClick?: MouseEventHandler<HTMLElement>;\n }) {\n const Comp = asChild && !disabled ? Slot.Root : 'a';\n const isExternal = target === '_blank';\n const resolvedRel = rel || (target === '_blank' ? 'noopener noreferrer' : undefined);\n\n function handleClick(e: MouseEvent<HTMLElement>) {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n }\n\n const externalIconSize = size === 'lg' ? 16 : size === 'xs' ? 10 : 12;\n\n return (\n <Comp\n data-slot='link'\n data-variant={variant}\n data-size={size}\n href={disabled ? undefined : sanitizeHref(href)}\n target={target}\n rel={resolvedRel}\n tabIndex={disabled ? -1 : undefined}\n aria-disabled={disabled || undefined}\n onClick={handleClick}\n className={cn(\n linkVariants({ variant, size, className }),\n truncate && 'max-w-full overflow-hidden',\n )}\n {...props}>\n {truncate ? (\n <span className='min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap'>\n {children}\n </span>\n ) : (\n children\n )}\n {isExternal && !disabled && (\n <>\n <ExternalLinkIcon\n aria-hidden='true'\n size={externalIconSize}\n className='shrink-0'\n />\n <span className='sr-only'>(opens in new tab)</span>\n </>\n )}\n </Comp>\n );\n}\n\nexport { Link, linkVariants };\n","import { isValidPhoneNumber, validatePhoneNumberLength } from 'libphonenumber-js';\n\n/**\n * Why a value is not a valid phone number. Mirrors `libphonenumber-js`'\n * `validatePhoneNumberLength` result, plus `'INVALID'` for a value whose length\n * IS possible for its calling code but which is not a real number (e.g. an\n * 8-digit Colombian value: 8 is a possible fixed-line length, yet `3008...` is\n * not an assignable fixed-line prefix).\n *\n * The design system emits this code, never a message: the copy belongs to the\n * consumer's i18n catalog.\n */\nexport type PhoneFieldProblem =\n | 'TOO_SHORT'\n | 'TOO_LONG'\n | 'INVALID_LENGTH'\n | 'INVALID_COUNTRY'\n | 'NOT_A_NUMBER'\n | 'INVALID';\n\nexport interface PhoneFieldValidity {\n /** True only when the value is a valid, assignable number. */\n isValid: boolean;\n /** Why it is invalid. Absent for a valid value AND for an empty one. */\n problem?: PhoneFieldProblem;\n}\n\n/**\n * Validates an E.164 phone value. Pure and stateless — safe to share between\n * the field, a Zod schema and a server route handler so the rule is written\n * once.\n *\n * An empty value reports `{ isValid: false }` with no `problem`: emptiness is\n * the consumer's `required` rule, not a phone problem.\n */\nexport function validatePhone(value: string): PhoneFieldValidity {\n if (!value) {\n return { isValid: false };\n }\n if (isValidPhoneNumber(value)) {\n return { isValid: true };\n }\n return { isValid: false, problem: validatePhoneNumberLength(value) ?? 'INVALID' };\n}\n","import { type ComponentProps } from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Popover({ ...props }: ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot='popover' {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot='popover-trigger' {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n container,\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Content> & {\n /**\n * Portal target for the popover content. Pass the Dialog content node when\n * the popover lives inside a modal Dialog so the content stays within the\n * Dialog's scroll-lock shard — otherwise wheel/touch scrolling is blocked.\n */\n container?: ComponentProps<typeof PopoverPrimitive.Portal>['container'];\n}) {\n return (\n <PopoverPrimitive.Portal container={container}>\n <PopoverPrimitive.Content\n data-slot='popover-content'\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-1 rounded-3xl p-4 text-sm shadow-lg ring-1 outline-hidden duration-100',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot='popover-anchor' {...props} />;\n}\n\nfunction PopoverHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='popover-header'\n className={cn('flex flex-col gap-1 text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction PopoverTitle({ className, ...props }: ComponentProps<'h2'>) {\n return (\n <div\n data-slot='popover-title'\n className={cn('text-base font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction PopoverDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='popover-description'\n className={cn('text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n};\n","import {\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type ComponentProps,\n type ComponentType,\n} from 'react';\nimport {\n AsYouType,\n parsePhoneNumberFromString,\n validatePhoneNumberLength,\n} from 'libphonenumber-js';\nimport type { CountryCode } from 'libphonenumber-js';\nimport { Command } from 'cmdk';\nimport { CheckIcon, ChevronsUpDownIcon, SearchIcon } from 'lucide-react';\nimport * as countryFlags from 'country-flag-icons/react/3x2';\n\nimport { cn } from '@/lib/utils';\nimport { validatePhone, type PhoneFieldValidity } from '@/lib/phone';\nimport { Input } from '@/components/ui/Input/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface PhoneFieldCountry {\n /** ISO 3166-1 alpha-2 code, e.g. \"CO\". */\n code: string;\n /** Country name, e.g. \"Colombia\". */\n name: string;\n /** International dial code, e.g. \"+57\". */\n dialCode: string;\n /** Optional override for the flag. When omitted the flag is derived from `code` via country-flag-icons. */\n flagUrl?: string;\n}\n\nexport interface PhoneFieldProps\n extends Omit<\n ComponentProps<'input'>,\n 'value' | 'defaultValue' | 'onChange' | 'type' | 'disabled' | 'placeholder' | 'className'\n > {\n /** Country list. Data-agnostic — the source of truth is the consumer's backend. */\n countries: PhoneFieldCountry[];\n /**\n * Controlled E.164 value, e.g. \"+573001234567\" or \"\". Omit `value` to run\n * uncontrolled — the field manages its own value and `onValueChange` still\n * fires on every change.\n */\n value?: string;\n /** Emits the E.164 form whenever the national number changes; emits \"\" when empty. */\n onValueChange?: (value: string) => void;\n /**\n * Emits whether the current value is a valid number, and why it is not when\n * it fails. Fires on mount and on every change of the verdict — including\n * changes caused by picking another country, which do not always change the\n * value. It emits STATE, never copy: the message belongs to the consumer's\n * i18n catalog. For the same rule outside React (Zod schema, route handler)\n * import `validatePhone` from `@bizapps/design-system-testing/phone`.\n */\n onValidityChange?: (validity: PhoneFieldValidity) => void;\n /** ISO code preselected when `value` is empty, e.g. \"CO\". Falls back to the first country. */\n defaultCountry?: string;\n /** Placeholder for the number input. */\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n /** Portal target for the dropdown. Pass the Dialog content node when used inside a modal Dialog. */\n container?: HTMLElement | null;\n /**\n * Form field name for native form submits. The visible input shows the\n * FORMATTED national number (e.g. \"300 123 4567\"); when `name` is set, a\n * hidden input carries the canonical E.164 value so the browser submits\n * the machine-readable form. For react-hook-form, drive the field via\n * `value`/`onValueChange` (controlled component) instead of `name`.\n */\n name?: string;\n}\n\n// country-flag-icons types its components with HTMLAttributes & SVGAttributes\n// over its own HTMLSVGElement type, which is not assignable to\n// ComponentType<SVGProps<SVGSVGElement>>. The flags are only ever rendered\n// with `aria-hidden` and `className`, so the map is typed with exactly those\n// props — a narrower contract that stays assignable both ways without casts.\ntype FlagComponentType = ComponentType<{\n 'aria-hidden'?: boolean | 'true' | 'false';\n className?: string;\n}>;\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\n// Returns the national part of an unambiguously international input (one that\n// starts with `+`), preferring libphonenumber's own parse so a national number\n// that merely begins with the dial-code digits is never corrupted (e.g.\n// Kazakhstan `+77001234567` under `+7` → `7001234567`). `+`-prefixed partials\n// that do not parse yet (e.g. `+573` while typing) fall back to stripping the\n// selected country's dial code — safe, because the leading `+` already proves\n// the digits are a dial code. A bare input without `+` is never stripped:\n// dial-code digits are then indistinguishable from genuine leading digits\n// (e.g. Brazil `553512345678` under `+55`), and stripping would corrupt the\n// number — the documented trade-off for a `+`-less paste.\nfunction stripLeadingDialCode(raw: string, dialCode: string): string {\n if (!raw.startsWith('+')) {\n return raw.replace(/\\D/g, '');\n }\n const parsed = parsePhoneNumberFromString(raw);\n if (parsed) {\n return parsed.nationalNumber;\n }\n const digits = raw.replace(/\\D/g, '');\n const code = dialCode.replace(/\\D/g, '');\n // A bare dial code (e.g. \"+57\" with nothing after it) has no national\n // part: strip it entirely so a pasted code is never re-prefixed into a\n // double prefix (e.g. \"+5757\").\n return code && digits.startsWith(code)\n ? digits.length > code.length\n ? digits.slice(code.length)\n : ''\n : digits;\n}\n\n// Every ISO code `country-flag-icons` ships (267 in `3x2`), looked up at\n// runtime. The indexed access defeats tree-shaking, so all flags land in the\n// bundle: measured with esbuild --minify, PhoneField goes from 258.9 kB / 68.4\n// kB gzip to 473.7 kB / 116.2 kB gzip (+214.7 kB, +47.8 kB gzip). That cost is\n// paid ONLY by consumers that import PhoneField — the namespace import is\n// reachable from nowhere else, so a bundle without PhoneField still drops it.\n// The previous 28-entry curated map was cheaper but wrong: `countries` is\n// consumer-provided (backend-sourced), so any curated subset renders the grey\n// placeholder for countries the consumer legitimately offers.\nconst flagByCode = countryFlags as unknown as Record<string, FlagComponentType | undefined>;\n\n// ─── Country flag ─────────────────────────────────────────────────────────────\n\nfunction CountryFlag({\n code,\n flagUrl,\n className,\n}: {\n code: string;\n flagUrl?: string;\n className?: string;\n}) {\n const isoCode = (code || '').toUpperCase();\n const FlagComponent = flagByCode[isoCode];\n\n // A wrapper carries the `data-slot`/`data-country` contract: the flag\n // components come from country-flag-icons typed with their own props, so\n // annotating them directly would mean widening `FlagComponentType` past\n // what those components declare.\n const flag = flagUrl ? (\n <img src={flagUrl} alt='' aria-hidden='true' className='size-full object-cover' />\n ) : FlagComponent ? (\n <FlagComponent aria-hidden='true' className='size-full' />\n ) : null;\n\n return (\n <span\n data-slot='phone-field-country-flag'\n data-country={isoCode || undefined}\n data-fallback={flag ? undefined : 'true'}\n aria-hidden='true'\n className={cn(\n 'size-4 shrink-0 overflow-hidden rounded-[2px]',\n !flag && 'bg-muted rounded-full',\n className,\n )}>\n {flag}\n </span>\n );\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction PhoneField({\n countries,\n value,\n onValueChange,\n onValidityChange,\n defaultCountry,\n placeholder = 'Phone number',\n disabled = false,\n className,\n container,\n name,\n ...inputProps\n}: PhoneFieldProps) {\n const [open, setOpen] = useState(false);\n const [pickedCode, setPickedCode] = useState<string | undefined>(\n (defaultCountry ?? countries[0]?.code)?.toUpperCase(),\n );\n const [internalValue, setInternalValue] = useState('');\n const listRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const caretRef = useRef<{ raw: string; start: number; end: number } | null>(null);\n const lastValidityRef = useRef<PhoneFieldValidity | null>(null);\n const listId = `${useId()}-countries-list`;\n\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const parsed = currentValue ? parsePhoneNumberFromString(currentValue) : undefined;\n\n // A value libphonenumber can attribute to a specific ISO country is the\n // source of truth: that country wins over any manual pick, so the number is\n // never re-interpreted under a different country's dial code.\n const parsedCountry = parsed?.country;\n const parsedCallingCode = parsed?.countryCallingCode;\n\n const countryInList =\n parsedCountry !== undefined &&\n countries.some((country) => country.code.toUpperCase() === parsedCountry);\n const callingCodeInList =\n parsedCallingCode !== undefined &&\n countries.some(\n (country) => country.dialCode.replace(/\\D/g, '') === parsedCallingCode,\n );\n\n // Countries sharing a calling code (+1 → US/CA/DO, +7 → RU/KZ) are\n // indistinguishable to libphonenumber until enough digits are typed, and a\n // half-typed number is NEVER attributable. Deriving the country from the\n // calling code alone therefore resolved to whichever entry came first in\n // `countries`, silently overwriting the user's pick. An explicit pick wins\n // over that fallback for exactly as long as it still matches the value's\n // calling code; once the value moves to another code the pick is stale and\n // the value takes over again.\n const pickedCountry = pickedCode\n ? countries.find((country) => country.code.toUpperCase() === pickedCode.toUpperCase())\n : undefined;\n const pickMatchesValue =\n pickedCountry !== undefined &&\n pickedCountry.dialCode.replace(/\\D/g, '') === parsedCallingCode;\n\n const representedCode = countryInList\n ? parsedCountry\n : pickMatchesValue\n ? pickedCountry.code\n : callingCodeInList\n ? countries.find(\n (country) =>\n country.dialCode.replace(/\\D/g, '') === parsedCallingCode,\n )?.code\n : undefined;\n\n const selectedCode = representedCode ?? pickedCode ?? defaultCountry ?? countries[0]?.code;\n const selectedCountry =\n countries.find(\n (country) => country.code.toUpperCase() === selectedCode?.toUpperCase(),\n ) ?? countries[0];\n\n const dialCode = selectedCountry ? selectedCountry.dialCode.replace(/\\D/g, '') : '';\n\n // Re-emit with the parsed calling code when the value's country is not in\n // the list, so the next keystroke never silently switches to another\n // country's dial code (e.g. a British number must keep \"+44\", not \"+57\").\n const emitDialCode = parsedCallingCode ?? dialCode;\n\n const nationalDigits = parsed\n ? parsed.nationalNumber\n : currentValue\n ? stripLeadingDialCode(currentValue, dialCode)\n : '';\n\n // Format the national number under the selected country only when that\n // country actually represents the value. A value whose country the list\n // cannot represent (matched neither by ISO code nor by calling code) keeps\n // its raw digits: formatting it under any listed country would show wrong\n // grouping, and re-emitting under that country's dial code would destroy it.\n const canFormat =\n selectedCountry !== undefined && (!parsed || countryInList || callingCodeInList);\n\n const inputValue =\n selectedCountry && canFormat && nationalDigits\n ? new AsYouType((selectedCountry.code || '').toUpperCase() as CountryCode).input(\n nationalDigits,\n )\n : nationalDigits;\n\n const isInvalid =\n inputProps['aria-invalid'] === true || inputProps['aria-invalid'] === 'true';\n\n // Validity is derived from the VALUE, not from the selected country: the\n // value carries its own calling code, so it stays the single source of\n // truth even while a shared calling code keeps the country ambiguous.\n const { isValid, problem } = validatePhone(currentValue);\n\n // Emit only on an actual verdict change: consumers pass inline callbacks,\n // so the effect re-runs on every render and would otherwise spam a state\n // setter on the consumer side.\n useEffect(() => {\n const last = lastValidityRef.current;\n if (last && last.isValid === isValid && last.problem === problem) {\n return;\n }\n lastValidityRef.current = { isValid, problem };\n onValidityChange?.({ isValid, problem });\n }, [isValid, problem, onValidityChange]);\n\n // The formatted `inputValue` replaces the DOM value on every keystroke,\n // which moves the caret to the end. Restore it right after commit: count\n // the digits before the old caret in the raw string and place the caret\n // after the same number of digits in the new formatted string, preserving\n // any selection length. Only runs when the user actually typed (caretRef\n // set) and the input is still focused.\n useLayoutEffect(() => {\n const input = inputRef.current;\n const caret = caretRef.current;\n if (!input || !caret || document.activeElement !== input) {\n return;\n }\n const digitsBefore = caret.raw.slice(0, caret.start).replace(/\\D/g, '').length;\n let position = 0;\n if (digitsBefore > 0) {\n let digitsSeen = 0;\n for (let i = 0; i < inputValue.length; i++) {\n if (/\\d/.test(inputValue[i])) {\n digitsSeen += 1;\n }\n position = i + 1;\n if (digitsSeen >= digitsBefore) {\n break;\n }\n }\n }\n input.setSelectionRange(position, position + (caret.end - caret.start));\n caretRef.current = null;\n }, [inputValue]);\n\n // On each search change cmdk reorders matches but never resets the list's\n // scroll position, so a previously scrolled list keeps the top match hidden.\n // Snap back to the top once cmdk has committed the new order (rAF runs\n // after its layout effects).\n const handleSearchChange = () => {\n requestAnimationFrame(() => listRef.current?.scrollTo({ top: 0 }));\n };\n\n function handleCountrySelect(code: string) {\n setPickedCode(code);\n setOpen(false);\n const nextCountry = countries.find(\n (country) => country.code.toUpperCase() === code.toUpperCase(),\n );\n // Keep the existing national number and re-emit it under the newly\n // selected country's dial code.\n if (nextCountry && nationalDigits) {\n const next = `+${nextCountry.dialCode.replace(/\\D/g, '')}${nationalDigits}`;\n onValueChange?.(next);\n if (!isControlled) {\n setInternalValue(next);\n }\n }\n }\n\n // Parses a pasted or typed E.164 and resolves the calling code plus the\n // synced country pick. Returns undefined when the input has no derivable\n // national number yet (e.g. a bare or partial dial code).\n function deriveFromE164(e164: string) {\n const parsed = parsePhoneNumberFromString(e164);\n if (!parsed?.nationalNumber) {\n return undefined;\n }\n const countryMatch = parsed.country\n ? countries.find((country) => country.code.toUpperCase() === parsed.country)\n : undefined;\n const nextPickedCode = countryMatch\n ? countryMatch.code\n : parsed.countryCallingCode\n ? countries.find(\n (country) =>\n country.dialCode.replace(/\\D/g, '') === parsed.countryCallingCode,\n )?.code\n : undefined;\n return {\n nationalNumber: parsed.nationalNumber,\n emitCode: parsed.countryCallingCode,\n nextPickedCode,\n };\n }\n\n function handleInputChange(raw: string, nativeEvent?: InputEvent) {\n const input = inputRef.current;\n if (input) {\n caretRef.current = {\n raw,\n start: input.selectionStart ?? raw.length,\n end: input.selectionEnd ?? raw.length,\n };\n }\n if (!selectedCountry) return;\n let national = stripLeadingDialCode(raw, dialCode);\n let emitCode = emitDialCode;\n let nextPickedCode: string | undefined;\n\n // A '+' anywhere in the raw value means an E.164 landed in the field,\n // almost always a paste. The calling code must come from THAT input,\n // never from the selected country, or a pasted foreign number gets\n // re-prefixed with the local dial code.\n const plusIndex = raw.indexOf('+');\n\n if (plusIndex === 0) {\n // The whole field is a new international input.\n const derived = deriveFromE164(raw);\n if (derived) {\n emitCode = derived.emitCode || emitDialCode;\n nextPickedCode = derived.nextPickedCode;\n } else if (nativeEvent?.inputType === 'insertFromPaste') {\n // Pasting a bare or partial E.164 (e.g. just \"+57\") has no\n // national number: emit nothing rather than a double prefix.\n national = '';\n }\n // Typed partial \"+...\" input keeps stripLeadingDialCode's lenient\n // fallback so manual \"+57 3...\" entry never blanks the field.\n } else if (plusIndex > 0) {\n // The '+' sits mid-string: a paste inserted an E.164 inside an\n // existing number. Rebuild the national digits from the parts\n // around the paste using the paste event's data.\n const pasted =\n nativeEvent?.inputType === 'insertFromPaste' &&\n nativeEvent.data?.startsWith('+')\n ? nativeEvent.data\n : undefined;\n if (pasted) {\n const derived = deriveFromE164(pasted);\n const prefixDigits = raw.slice(0, plusIndex).replace(/\\D/g, '');\n const suffixDigits = raw.slice(plusIndex + pasted.length).replace(/\\D/g, '');\n if (derived) {\n national = prefixDigits + derived.nationalNumber + suffixDigits;\n emitCode = derived.emitCode || emitDialCode;\n nextPickedCode = derived.nextPickedCode;\n } else {\n // The pasted E.164 has no derivable national number (e.g.\n // a partial code): drop the paste and keep the pre-paste\n // digits instead of swallowing the '+' into the number.\n national = prefixDigits + suffixDigits;\n }\n }\n }\n\n const next = national ? `+${emitCode}${national}` : '';\n\n // Typing a digit past every possible length for the calling code cannot\n // produce a real number, so the keystroke is discarded instead of\n // committed. Two carve-outs:\n // - only when the number GREW: a deletion must always land, otherwise\n // an already-too-long value (a paste, a country switch) traps the\n // user with no way to shorten it.\n // - never on paste: bulk input is interpreted first (the branches\n // above already resolved its calling code) and shown back as\n // invalid. Swallowing a whole paste is worse than displaying it.\n const grew = national.replace(/\\D/g, '').length > nationalDigits.length;\n const isPaste = nativeEvent?.inputType === 'insertFromPaste';\n if (grew && !isPaste && validatePhoneNumberLength(next) === 'TOO_LONG') {\n // Nothing re-renders when the value does not change, so the DOM\n // keeps the rejected character: put the committed value back and\n // leave the caret where the keystroke came from.\n if (input) {\n const caret = Math.max(0, (input.selectionStart ?? inputValue.length) - 1);\n input.value = inputValue;\n input.setSelectionRange(caret, caret);\n }\n caretRef.current = null;\n return;\n }\n\n if (nextPickedCode) {\n setPickedCode(nextPickedCode);\n }\n\n onValueChange?.(next);\n if (!isControlled) {\n setInternalValue(next);\n }\n }\n\n return (\n <div\n data-slot='phone-field'\n data-invalid={isInvalid || undefined}\n className={cn(\n 'border-input flex h-9 w-full min-w-0 items-center overflow-hidden rounded-md border bg-transparent shadow-xs transition-[color,box-shadow]',\n 'focus-within:border-ring focus-within:ring-ring/30 focus-within:ring-3',\n 'data-[invalid=true]:border-destructive data-[invalid=true]:ring-destructive/20 data-[invalid=true]:ring-3',\n 'dark:data-[invalid=true]:border-destructive/50 dark:data-[invalid=true]:ring-destructive/40',\n className,\n )}>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type='button'\n data-slot='phone-field-country-select'\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup='listbox'\n aria-controls={open ? listId : undefined}\n aria-label={\n selectedCountry\n ? `${selectedCountry.name} ${selectedCountry.dialCode}`\n : undefined\n }\n className={cn(\n 'flex h-full shrink-0 cursor-pointer items-center gap-1.5 border-r border-input px-2.5 text-sm font-medium outline-none select-none',\n 'hover:bg-muted',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n )}>\n {selectedCountry && (\n <>\n <CountryFlag\n code={selectedCountry.code}\n flagUrl={selectedCountry.flagUrl}\n />\n <span className='tabular-nums'>{selectedCountry.dialCode}</span>\n <ChevronsUpDownIcon size={14} className='text-muted-foreground shrink-0' />\n </>\n )}\n </button>\n </PopoverTrigger>\n <PopoverContent\n className='w-72 rounded-xl p-0'\n align='start'\n container={container}>\n <Command className='rounded-xl' label='Search countries'>\n <div className='border-border flex items-center gap-2 border-b px-3'>\n <SearchIcon size={14} className='text-muted-foreground shrink-0' />\n <Command.Input\n placeholder='Search country...'\n onValueChange={handleSearchChange}\n className='placeholder:text-muted-foreground flex h-9 w-full bg-transparent py-2 text-sm outline-none'\n />\n </div>\n {/*\n cmdk owns Command.List's id (it wires the listbox to\n its own search input), so the trigger's aria-controls\n references this wrapper div instead — it exists in the\n DOM exactly while the popover is open.\n */}\n <div id={listId}>\n <Command.List ref={listRef} className='max-h-56 overflow-y-auto p-1'>\n <Command.Empty className='text-muted-foreground py-4 text-center text-sm'>\n No country found.\n </Command.Empty>\n {countries.map((country) => (\n <Command.Item\n key={country.code}\n value={country.code}\n keywords={[country.name, country.dialCode]}\n data-slot='phone-field-country-item'\n onSelect={() => handleCountrySelect(country.code)}\n className={cn(\n 'flex cursor-pointer items-center justify-between gap-2 rounded-md px-2 py-1.5 text-sm outline-none select-none',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'hover:bg-accent hover:text-accent-foreground',\n )}>\n <span className='flex min-w-0 items-center gap-2'>\n <CountryFlag code={country.code} flagUrl={country.flagUrl} />\n <span className='truncate'>{country.name}</span>\n </span>\n <span className='flex items-center gap-2'>\n <span className='text-muted-foreground tabular-nums'>\n {country.dialCode}\n </span>\n {selectedCode?.toUpperCase() ===\n country.code.toUpperCase() && (\n <CheckIcon\n size={14}\n className='text-[var(--color-main-blue-primary)] shrink-0'\n />\n )}\n </span>\n </Command.Item>\n ))}\n </Command.List>\n </div>\n </Command>\n </PopoverContent>\n </Popover>\n <Input\n ref={inputRef}\n {...inputProps}\n data-slot='phone-field-input'\n type='tel'\n value={inputValue}\n onChange={(event) => handleInputChange(event.target.value, event.nativeEvent as InputEvent)}\n placeholder={placeholder}\n disabled={disabled}\n autoComplete={inputProps.autoComplete ?? 'tel'}\n className={cn(\n 'h-full flex-1 rounded-none border-0 bg-transparent shadow-none',\n 'px-3 focus-visible:border-transparent focus-visible:ring-0',\n )}\n />\n {name !== undefined && (\n <input type='hidden' name={name} value={currentValue} data-slot='phone-field-hidden-input' />\n )}\n </div>\n );\n}\n\nexport { PhoneField };\n","import { useRef, type ClipboardEvent, type KeyboardEvent } from 'react';\nimport { cn } from '@/lib/utils';\n\ninterface PinInputProps {\n length?: number;\n value?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n invalid?: boolean;\n mask?: boolean;\n className?: string;\n inputClassName?: string;\n}\n\nfunction PinInput({\n length = 6,\n value = '',\n onChange,\n disabled = false,\n invalid = false,\n mask = false,\n className,\n inputClassName,\n}: PinInputProps) {\n const inputs = useRef<(HTMLInputElement | null)[]>([]);\n const pins = value.split('').slice(0, length);\n\n const focusAt = (index: number) => {\n inputs.current[Math.max(0, Math.min(index, length - 1))]?.focus();\n };\n\n const handleChange = (index: number, char: string) => {\n const digit = char.replace(/\\D/g, '').slice(-1);\n const next = pins.slice();\n next[index] = digit;\n const newVal = next.join('').slice(0, length);\n onChange?.(newVal);\n if (digit && index < length - 1) focusAt(index + 1);\n };\n\n const handleKeyDown = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault();\n if (pins[index]) {\n const next = pins.slice();\n next[index] = '';\n onChange?.(next.join(''));\n } else {\n focusAt(index - 1);\n }\n } else if (e.key === 'ArrowLeft') {\n focusAt(index - 1);\n } else if (e.key === 'ArrowRight') {\n focusAt(index + 1);\n }\n };\n\n const handlePaste = (e: ClipboardEvent) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length);\n onChange?.(pasted);\n focusAt(Math.min(pasted.length, length - 1));\n };\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n {Array.from({ length }).map((_, i) => (\n <input\n key={i}\n ref={(el) => {\n inputs.current[i] = el;\n }}\n type={mask ? 'password' : 'text'}\n inputMode='numeric'\n maxLength={1}\n value={pins[i] ?? ''}\n disabled={disabled}\n aria-invalid={invalid}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n onFocus={(e) => e.target.select()}\n className={cn(\n 'border-input flex h-10 w-10 rounded-md border bg-transparent text-center text-sm font-semibold shadow-xs transition-[color,box-shadow] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n inputClassName,\n )}\n />\n ))}\n </div>\n );\n}\n\nexport { PinInput };\nexport type { PinInputProps };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Toggle as TogglePrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\n\nconst toggleVariants = cva(\n 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n {\n variants: {\n variant: {\n default: 'bg-foreground/5',\n outline:\n 'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n sm: 'h-8 min-w-8 px-1.5',\n md: 'h-9 min-w-9 px-2',\n lg: 'h-10 min-w-10 px-2.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot='toggle'\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n","import { createContext, useContext, useEffect, useId, useState, type ComponentProps, type ReactNode } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { ToggleGroup } from 'radix-ui';\nimport { motion } from 'motion/react';\nimport { cn } from '@/lib/utils';\nimport { toggleVariants } from '@/components/ui/Toggle/toggle';\n\ntype SegmentedControlContextValue = VariantProps<typeof toggleVariants> & {\n type: 'single' | 'multiple';\n currentSingleValue?: string;\n pillLayoutId: string;\n};\n\nconst SegmentedControlContext = createContext<SegmentedControlContextValue>({\n size: 'md',\n type: 'single',\n currentSingleValue: undefined,\n pillLayoutId: '',\n});\n\ntype SegmentedControlSingleProps = {\n type: 'single';\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n};\n\ntype SegmentedControlMultipleProps = {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n};\n\ntype SegmentedControlProps = (SegmentedControlSingleProps | SegmentedControlMultipleProps) &\n VariantProps<typeof toggleVariants> & {\n disabled?: boolean;\n className?: string;\n children?: ReactNode;\n };\n\nfunction SegmentedControl({ className, size = 'md', children, ...props }: SegmentedControlProps) {\n const pillLayoutId = useId();\n const isSingle = props.type === 'single';\n const singleProps = isSingle ? (props as SegmentedControlSingleProps) : null;\n\n const [activeValue, setActiveValue] = useState<string | undefined>(\n singleProps?.value ?? singleProps?.defaultValue,\n );\n\n useEffect(() => {\n if (singleProps?.value !== undefined) {\n setActiveValue(singleProps.value);\n }\n }, [singleProps?.value]);\n\n const rootProps = {\n ...(props as ComponentProps<typeof ToggleGroup.Root>),\n ...(isSingle && {\n onValueChange: (val: string) => {\n setActiveValue(val);\n singleProps?.onValueChange?.(val);\n },\n }),\n };\n\n return (\n <ToggleGroup.Root\n data-slot='segmented-control'\n className={cn('flex w-full items-center gap-1 rounded-lg bg-[#e8e8ed] p-1', className)}\n {...(rootProps as ComponentProps<typeof ToggleGroup.Root>)}>\n <SegmentedControlContext.Provider\n value={{\n size,\n type: props.type,\n currentSingleValue: activeValue,\n pillLayoutId,\n }}>\n {children}\n </SegmentedControlContext.Provider>\n </ToggleGroup.Root>\n );\n}\n\nfunction SegmentedControlItem({\n className,\n children,\n value,\n ...props\n}: ComponentProps<typeof ToggleGroup.Item> & VariantProps<typeof toggleVariants>) {\n const { size, type, currentSingleValue, pillLayoutId } =\n useContext(SegmentedControlContext);\n const isActive = type === 'single' && currentSingleValue === value;\n\n return (\n <ToggleGroup.Item\n data-slot='segmented-control-item'\n value={value}\n className={cn(\n toggleVariants({ variant: 'default', size }),\n 'relative h-7 flex-1 cursor-pointer rounded-md border-0 bg-transparent px-4 py-0',\n 'text-muted-foreground text-sm font-medium',\n 'hover:text-foreground transition-colors duration-150',\n 'focus:z-10 focus-visible:z-10',\n 'data-[state=on]:text-[var(--color-main-blue-primary)]',\n type === 'multiple' && [\n 'data-[state=on]:bg-white',\n 'data-[state=on]:shadow-sm',\n 'data-[state=on]:hover:bg-white',\n ],\n className,\n )}\n {...props}>\n {isActive && (\n <motion.span\n layoutId={pillLayoutId}\n className='absolute inset-0 rounded-md bg-white shadow-sm'\n transition={{ type: 'spring', duration: 0.5, bounce: 0.1 }}\n />\n )}\n <span className='relative z-10'>{children}</span>\n </ToggleGroup.Item>\n );\n}\n\nexport { SegmentedControl, SegmentedControlItem };\nexport type { SegmentedControlProps };\n","import { type ComponentProps } from 'react';\nimport { Select as SelectPrimitive } from 'radix-ui';\nimport { ChevronDownIcon, ChevronUpIcon, CheckIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nfunction Select({ ...props }: ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot='select' {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Trigger>) {\n return (\n <SelectPrimitive.Trigger\n data-slot='select-trigger'\n className={cn(\n 'border-input flex h-9 w-full items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none',\n 'placeholder:text-muted-foreground',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n '[&>span]:truncate',\n className,\n )}\n {...props}>\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className='text-muted-foreground size-4 shrink-0' />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\ntype SelectContentProps = ComponentProps<typeof SelectPrimitive.Content> & {\n /**\n * Maximum height of the dropdown panel. Accepts any CSS length\n * (e.g. `240px`, `15rem`) or a number interpreted as pixels.\n * The panel is always additionally capped by the space available\n * on screen, and its list scrolls once the content exceeds it.\n */\n maxHeight?: number | string;\n};\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n maxHeight,\n style,\n ...props\n}: SelectContentProps) {\n const resolvedMaxHeight = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot='select-content'\n className={cn(\n 'border-border bg-popover text-popover-foreground relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-hidden rounded-md border shadow-md',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1',\n position === 'popper' && 'w-(--radix-select-trigger-width)',\n className,\n )}\n position={position}\n style={{\n ...(resolvedMaxHeight\n ? {\n maxHeight: `min(${resolvedMaxHeight}, var(--radix-select-content-available-height))`,\n }\n : null),\n ...style,\n }}\n {...props}>\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn('scroll-my-1 p-1', position === 'popper' && 'w-full')}>\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n className={cn(\n 'relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none',\n 'focus:bg-accent focus:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}>\n <span className='absolute right-2 flex size-3.5 items-center justify-center'>\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className='size-4' />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectLabel({ className, ...props }: ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot='select-label'\n className={cn('text-muted-foreground px-2 py-1.5 text-xs font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot='select-separator'\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}>\n <ChevronUpIcon className='size-4' />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}>\n <ChevronDownIcon className='size-4' />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nfunction SelectValue({ ...props }: ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot='select-value' {...props} />;\n}\n\nfunction SelectGroup({ ...props }: ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot='select-group' {...props} />;\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import { type ComponentProps } from 'react';\nimport { Separator as SeparatorPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n}: ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot='separator'\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'bg-foreground/20 shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import { type ComponentProps } from 'react';\nimport { Progress as ProgressPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst progressVariants = cva('relative flex w-full items-center overflow-x-hidden rounded-full', {\n variants: {\n variant: {\n default: 'bg-[var(--color-dark-100)]',\n success: 'bg-[var(--color-green-100)]',\n warning: 'bg-[var(--color-yellow-100)]',\n danger: 'bg-[var(--color-red-100)]',\n orange: 'bg-[var(--color-orange-100)]',\n },\n size: {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n});\n\nconst progressIndicatorVariants = cva('size-full flex-1 transition-all rounded-[5px]', {\n variants: {\n variant: {\n default: 'bg-[var(--color-main-blue-primary)]',\n success: 'bg-[var(--color-main-positive-state)]',\n warning: 'bg-[var(--color-main-yellow-primary)]',\n danger: 'bg-[var(--color-main-warning-state)]',\n orange: 'bg-[var(--color-main-orange-primary)]',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface ProgressProps\n extends\n ComponentProps<typeof ProgressPrimitive.Root>,\n VariantProps<typeof progressVariants> {}\n\nfunction Progress({ className, value, variant = 'default', size = 'md', ...props }: ProgressProps) {\n return (\n <ProgressPrimitive.Root\n data-slot='progress'\n data-variant={variant}\n data-size={size}\n className={cn(progressVariants({ variant, size }), className)}\n {...props}>\n <ProgressPrimitive.Indicator\n data-slot='progress-indicator'\n className={cn(progressIndicatorVariants({ variant }))}\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n );\n}\n\nexport { Progress, progressVariants, progressIndicatorVariants };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst skeletonVariants = cva('animate-pulse bg-foreground/10', {\n variants: {\n variant: {\n default: 'rounded-md',\n text: 'h-4 rounded-full',\n avatar: 'rounded-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nfunction Skeleton({\n className,\n variant,\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof skeletonVariants>) {\n return (\n <div\n data-slot='skeleton'\n data-variant={variant}\n aria-hidden='true'\n className={cn(skeletonVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nexport { Skeleton, skeletonVariants };\n","import { useMemo, type ComponentProps } from 'react';\nimport { Slider as SliderPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = useMemo(\n () =>\n Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],\n [value, defaultValue, min, max],\n );\n\n return (\n <SliderPrimitive.Root\n data-slot='slider'\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n 'relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col',\n className,\n )}\n {...props}>\n <SliderPrimitive.Track\n data-slot='slider-track'\n className='bg-input/90 relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-2 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-2'>\n <SliderPrimitive.Range\n data-slot='slider-range'\n className='bg-primary absolute select-none data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full'\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot='slider-thumb'\n key={index}\n className='hover:ring-ring/30 focus-visible:ring-ring/30 block size-4 shrink-0 rounded-full bg-white shadow-md ring-1 ring-black/10 transition-[color,box-shadow,background-color] select-none hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50'\n />\n ))}\n </SliderPrimitive.Root>\n );\n}\n\nexport { Slider };\n","import { type ComponentProps } from 'react';\nimport { Switch as SwitchPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot='switch'\n data-size={size}\n className={cn(\n 'peer group/switch inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[size=default]:h-[1.15rem] data-[size=default]:w-8',\n 'data-[size=sm]:h-3.5 data-[size=sm]:w-6',\n 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n 'dark:data-[state=unchecked]:bg-input/80',\n className,\n )}\n {...props}>\n <SwitchPrimitive.Thumb\n data-slot='switch-thumb'\n className={cn(\n 'bg-background pointer-events-none block rounded-full ring-0 transition-transform',\n 'group-data-[size=default]/switch:size-4',\n 'group-data-[size=sm]/switch:size-3',\n 'data-[state=checked]:translate-x-[calc(100%-2px)]',\n 'data-[state=unchecked]:translate-x-0',\n 'dark:data-[state=checked]:bg-primary-foreground',\n 'dark:data-[state=unchecked]:bg-foreground',\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","// ─────────────────────────────────────────────\n// tcce-design-system · animation tokens\n// Motion (ex Framer Motion) — sutil y profesional\n// ─────────────────────────────────────────────\n\n// ── Durations ────────────────────────────────\n// Usa la escala más corta posible para cada caso.\n// instant → feedback táctil (hover, active, focus ring)\n// fast → elementos pequeños que entran/salen (badge, tooltip, switch)\n// normal → componentes de tamaño medio (dropdown, toast, input state)\n// slow → overlays y transiciones de página (modal backdrop, sidebar)\nexport const duration = {\n instant: 0.1,\n fast: 0.15,\n normal: 0.25,\n slow: 0.4,\n} as const;\n\n// ── Easings ──────────────────────────────────\n// Curvas estándar de Material Design adaptadas para uso profesional.\n// smooth → entrada y salida equilibrada (la más usada)\n// enter → aceleración suave al entrar (elementos que aparecen)\n// exit → desaceleración al salir (elementos que desaparecen)\n// linear → progreso, loaders, skeleton shimmer\nexport const ease = {\n smooth: [0.4, 0, 0.2, 1] as const,\n enter: [0.0, 0, 0.2, 1] as const,\n exit: [0.4, 0, 1.0, 1] as const,\n linear: [0.0, 0, 1.0, 1] as const,\n drawer: [0.22, 1, 0.36, 1] as const,\n} as const;\n\n// ── Spring configs ────────────────────────────\n// Solo para componentes que necesitan sensación física ligera.\n// gentle → modales, drawers, paneles deslizantes\n// snappy → switches, toggles, checkboxes\n// NO usar spring en: toasts, tooltips, dropdowns (demasiado movimiento)\nexport const spring = {\n gentle: { type: 'spring', stiffness: 260, damping: 28 } as const,\n snappy: { type: 'spring', stiffness: 400, damping: 30 } as const,\n} as const;\n\n// ── Transitions predefinidas ──────────────────\n// Combinaciones listas para usar en cada tipo de componente.\n// Importa la que corresponda en lugar de armar la config cada vez.\n\nexport const transition = {\n // Botones — feedback instantáneo en hover/tap\n button: {\n duration: duration.instant,\n ease: ease.smooth,\n },\n\n // Switch / toggle / checkbox\n toggle: {\n ...spring.snappy,\n },\n\n // Inputs — cambio de borde en focus, estados de error\n input: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n\n // Dropdown / select / popover\n dropdown: {\n duration: duration.fast,\n ease: ease.enter,\n },\n\n // Toast / notification — entra rápido, sale más rápido aún\n toast: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n\n // Modal / dialog — más lento para dar peso al overlay\n modal: {\n ...spring.gentle,\n },\n\n // Sidebar / navigation drawer\n sidebar: {\n duration: duration.slow,\n ease: ease.smooth,\n },\n\n // Cards — hover sutil, sin spring\n card: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n\n // Drawer / slide panel — smooth enter, fast exit\n drawer: {\n duration: 0.3,\n ease: ease.drawer,\n },\n drawerExit: {\n duration: 0.2,\n ease: ease.exit,\n },\n} as const;\n\n// ── Variants Motion reutilizables ─────────────\n// Úsalos directamente en <motion.div variants={fadeIn}>\n\nexport const fadeIn = {\n hidden: { opacity: 0 },\n visible: { opacity: 1, transition: transition.dropdown },\n exit: { opacity: 0, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\nexport const slideUp = {\n hidden: { opacity: 0, y: 8 },\n visible: { opacity: 1, y: 0, transition: transition.dropdown },\n exit: { opacity: 0, y: 4, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\nexport const slideRight = {\n hidden: { opacity: 0, x: -12 },\n visible: { opacity: 1, x: 0, transition: transition.sidebar },\n exit: { opacity: 0, x: -12, transition: { duration: duration.normal, ease: ease.exit } },\n} as const;\n\nexport const scaleIn = {\n hidden: { opacity: 0, scale: 0.97 },\n visible: { opacity: 1, scale: 1, transition: transition.modal },\n exit: { opacity: 0, scale: 0.97, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\n// ── Stagger (para listas y grids) ─────────────\n// Úsalo en el contenedor padre con variants + staggerChildren\nexport const stagger = {\n container: {\n hidden: {},\n visible: { transition: { staggerChildren: 0.06, delayChildren: 0.05 } },\n },\n item: {\n hidden: { opacity: 0, y: 6 },\n visible: { opacity: 1, y: 0, transition: transition.card },\n },\n} as const;\n\n// ── Export agrupado ───────────────────────────\nexport const animation = {\n duration,\n ease,\n spring,\n transition,\n variants: { fadeIn, slideUp, slideRight, scaleIn, stagger },\n} as const;\n\nexport type AnimationTokens = typeof animation;\n","import { createContext, useContext, useId, useState, type ComponentProps } from 'react';\nimport { Tabs as TabsPrimitive } from 'radix-ui';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { cn } from '@/lib/utils';\nimport { spring, duration, ease } from '@/tokens/animation';\n\ninterface TabsContextValue {\n activeValue: string;\n listId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue>({\n activeValue: '',\n listId: '',\n});\n\nfunction useTabsContext() {\n return useContext(TabsContext);\n}\n\nfunction Tabs({\n defaultValue,\n value: controlledValue,\n onValueChange,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Root>) {\n const [internalValue, setInternalValue] = useState(controlledValue ?? defaultValue ?? '');\n const activeValue = controlledValue ?? internalValue;\n const listId = useId();\n\n const handleValueChange = (v: string) => {\n if (controlledValue === undefined) setInternalValue(v);\n onValueChange?.(v);\n };\n\n return (\n <TabsContext.Provider value={{ activeValue, listId }}>\n <TabsPrimitive.Root\n data-slot='tabs'\n value={activeValue}\n onValueChange={handleValueChange}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nfunction TabsList({ className, ...props }: ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot='tabs-list'\n className={cn(\n 'text-muted-foreground inline-flex h-9 items-center justify-center gap-1 rounded-lg bg-[#e8e8ed] p-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n value,\n children,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { activeValue, listId } = useTabsContext();\n const isActive = activeValue === value;\n\n return (\n <TabsPrimitive.Trigger\n data-slot='tabs-trigger'\n value={value}\n className={cn(\n 'relative inline-flex items-center justify-center rounded-md px-4 py-1 text-sm font-medium whitespace-nowrap',\n 'ring-offset-background transition-colors',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'data-[state=inactive]:text-muted-foreground hover:text-foreground transition-all duration-150 data-[state=active]:text-[var(--color-main-blue-primary)]',\n className,\n )}\n {...props}>\n <AnimatePresence initial={false}>\n {isActive && (\n <motion.span\n data-slot='tabs-trigger-pill'\n layoutId={`${listId}-pill`}\n className='absolute inset-0 z-0 rounded-md bg-white shadow-sm'\n transition={spring.snappy}\n />\n )}\n </AnimatePresence>\n <span className='relative z-10 flex items-center gap-1.5'>{children}</span>\n </TabsPrimitive.Trigger>\n );\n}\n\nfunction TabsContent({\n className,\n value,\n children,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Content>) {\n const { activeValue } = useTabsContext();\n const isActive = activeValue === value;\n\n return (\n <TabsPrimitive.Content\n data-slot='tabs-content'\n value={value}\n forceMount\n className={cn(\n 'ring-offset-background focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',\n className,\n )}\n {...props}>\n <AnimatePresence mode='popLayout' initial={false}>\n {isActive && (\n <motion.div\n key={value}\n className='mt-2'\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n transition={{ duration: duration.fast, ease: ease.smooth }}>\n {children}\n </motion.div>\n )}\n </AnimatePresence>\n </TabsPrimitive.Content>\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { createContext, useContext, useEffect, useState, type ReactNode } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n CircleCheckIcon,\n InfoIcon,\n TriangleAlertIcon,\n OctagonXIcon,\n Loader2Icon,\n XIcon,\n} from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { transition } from '@/tokens/animation';\n\n// ─── Tipos ────────────────────────────────────────────────────────────────────\n\nexport type ToastType = 'default' | 'success' | 'error' | 'warning' | 'info' | 'loading';\n\nexport interface ToastAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface ToastItem {\n id: string;\n type: ToastType;\n title: string;\n description?: string;\n duration: number;\n action?: ToastAction;\n}\n\n// ─── Store por instancia ──────────────────────────────────────────────────────\n// Cada Toaster crea su propio store — no hay singleton global.\n// La función toast() imperativa se conecta al store del Toaster\n// más cercano via contexto.\n\ntype Listener = (toasts: ToastItem[]) => void;\n\ninterface Store {\n toasts: ToastItem[];\n listeners: Listener[];\n add: (item: Omit<ToastItem, 'id'>, id?: string) => string;\n remove: (id: string) => void;\n subscribe: (l: Listener) => () => void;\n}\n\nconst DEFAULT_DURATION = 3000;\nconst MAX_TOASTS = 5;\n\nfunction createStore(): Store {\n const timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n const store: Store = {\n toasts: [],\n listeners: [],\n\n add(item, id) {\n const toastId = id ?? Math.random().toString(36).slice(2);\n const exists = store.toasts.find((t) => t.id === toastId);\n\n if (exists) {\n store.toasts = store.toasts.map((t) =>\n t.id === toastId ? { ...t, ...item, id: toastId } : t,\n );\n } else {\n store.toasts = [{ id: toastId, ...item }, ...store.toasts].slice(0, MAX_TOASTS);\n }\n\n store.listeners.forEach((l) => l([...store.toasts]));\n if (item.duration > 0) {\n clearTimeout(timers.get(toastId));\n timers.set(toastId, setTimeout(() => store.remove(toastId), item.duration));\n }\n return toastId;\n },\n\n remove(id) {\n clearTimeout(timers.get(id));\n timers.delete(id);\n store.toasts = store.toasts.filter((t) => t.id !== id);\n store.listeners.forEach((l) => l([...store.toasts]));\n },\n\n subscribe(listener) {\n store.listeners.push(listener);\n return () => {\n store.listeners = store.listeners.filter((l) => l !== listener);\n };\n },\n };\n return store;\n}\n\n// ─── Contexto ─────────────────────────────────────────────────────────────────\n\nconst ToastStoreContext = createContext<Store | null>(null);\n\nfunction useStore(): Store {\n const store = useContext(ToastStoreContext);\n if (!store) throw new Error('<Toaster /> must be mounted to use toast()');\n return store;\n}\n\n// ─── Hook público ─────────────────────────────────────────────────────────────\n\ntype ToastOptions = Partial<Omit<ToastItem, 'id' | 'title' | 'type'>> & { id?: string };\n\ninterface PromiseMessages<T> {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((err: unknown) => string);\n}\n\nexport function useToast() {\n const store = useStore();\n\n function create(title: string, options?: ToastOptions) {\n return store.add(\n { type: 'default', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n );\n }\n\n return Object.assign(create, {\n success: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'success', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n error: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'error', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n warning: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'warning', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n info: (title: string, options?: ToastOptions) =>\n store.add({ type: 'info', duration: DEFAULT_DURATION, title, ...options }, options?.id),\n\n loading: (title: string, options?: ToastOptions) =>\n store.add({ type: 'loading', duration: 0, title, ...options }, options?.id),\n\n dismiss: (id: string) => store.remove(id),\n\n promise: <T,>(promise: Promise<T>, messages: PromiseMessages<T>) => {\n const id = store.add({ type: 'loading', duration: 0, title: messages.loading });\n promise\n .then((data) => {\n const title =\n typeof messages.success === 'function'\n ? messages.success(data)\n : messages.success;\n store.add({ type: 'success', duration: DEFAULT_DURATION, title }, id);\n })\n .catch((err) => {\n const title =\n typeof messages.error === 'function' ? messages.error(err) : messages.error;\n store.add({ type: 'error', duration: DEFAULT_DURATION, title }, id);\n });\n return id;\n },\n });\n}\n\n// ─── Icono por tipo ───────────────────────────────────────────────────────────\n\nconst icons: Record<ToastType, ReactNode> = {\n default: null,\n success: <CircleCheckIcon className='size-4' />,\n error: <OctagonXIcon className='size-4' />,\n warning: <TriangleAlertIcon className='size-4' />,\n info: <InfoIcon className='size-4' />,\n loading: <Loader2Icon className='size-4 animate-spin' />,\n};\n\nconst iconWrapperStyles: Record<ToastType, string> = {\n default: '',\n success: 'rounded-lg bg-emerald-50 p-1.5 text-emerald-600',\n error: 'rounded-lg bg-red-50 p-1.5 text-red-600',\n warning: 'rounded-lg bg-amber-50 p-1.5 text-amber-600',\n info: 'rounded-lg bg-blue-50 p-1.5 text-blue-600',\n loading: 'rounded-lg bg-muted p-1.5 text-muted-foreground',\n};\n\nconst cardAccentStyles: Record<ToastType, string> = {\n default: '',\n success: 'border-l-[3px] border-l-emerald-400',\n error: 'border-l-[3px] border-l-red-500',\n warning: 'border-l-[3px] border-l-amber-400',\n info: 'border-l-[3px] border-l-blue-400',\n loading: 'border-l-[3px] border-l-muted-foreground/40',\n};\n\n// ─── ToastCard ────────────────────────────────────────────────────────────────\n\nfunction ToastCard({ id, type, title, description, action }: ToastItem) {\n const store = useStore();\n const icon = icons[type];\n\n return (\n <motion.li\n layout\n initial={{ opacity: 0, y: 16, scale: 0.96 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: -8, scale: 0.96 }}\n transition={transition.toast}\n className={cn(\n 'border-border bg-popover text-popover-foreground relative flex w-full max-w-[400px] min-w-[300px] items-start gap-3 overflow-hidden rounded-xl border px-4 py-3.5 shadow-lg',\n cardAccentStyles[type],\n )}>\n {icon && <span className={cn('shrink-0', iconWrapperStyles[type])}>{icon}</span>}\n\n <div className='flex min-w-0 flex-1 flex-col gap-1'>\n <p className='text-sm leading-snug font-semibold'>{title}</p>\n {description && (\n <p className='text-muted-foreground text-xs leading-snug'>{description}</p>\n )}\n {action && (\n <button\n onClick={action.onClick}\n className='bg-muted text-foreground hover:bg-muted/70 mt-1 self-start rounded-md px-2.5 py-1 text-xs font-medium transition-colors'>\n {action.label}\n </button>\n )}\n </div>\n\n <button\n onClick={() => store.remove(id)}\n aria-label='Dismiss'\n className='text-muted-foreground/60 hover:bg-muted hover:text-foreground shrink-0 rounded-full p-1 transition-colors'>\n <XIcon className='size-3.5' />\n </button>\n </motion.li>\n );\n}\n\n// ─── Toaster ──────────────────────────────────────────────────────────────────\n\nexport type ToasterPosition =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n\nconst positionStyles: Record<ToasterPosition, string> = {\n 'top-right': 'top-4 right-4 items-end',\n 'top-left': 'top-4 left-4 items-start',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2 items-center',\n 'bottom-right': 'bottom-4 right-4 items-end',\n 'bottom-left': 'bottom-4 left-4 items-start',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2 items-center',\n};\n\nexport interface ToasterProps {\n position?: ToasterPosition;\n richColors?: boolean;\n closeButton?: boolean;\n duration?: number;\n children?: ReactNode;\n}\n\nfunction Toaster({ position = 'bottom-right', children }: ToasterProps) {\n const [store] = useState<Store>(createStore);\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n useEffect(() => store.subscribe(setToasts), [store]);\n\n return (\n <ToastStoreContext.Provider value={store}>\n {children}\n <ol\n aria-live='polite'\n aria-label='Notifications'\n className={cn(\n 'pointer-events-none fixed z-[100] flex flex-col gap-2',\n positionStyles[position],\n )}>\n <AnimatePresence mode='sync' initial={false}>\n {toasts.map((t) => (\n <div key={t.id} className='pointer-events-auto'>\n <ToastCard {...t} />\n </div>\n ))}\n </AnimatePresence>\n </ol>\n </ToastStoreContext.Provider>\n );\n}\n\nexport { Toaster };\n","import { createContext, useContext, type CSSProperties, type ComponentProps } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { toggleVariants } from '../Toggle/toggle';\n\nconst ToggleGroupContext = createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n }\n>({\n size: 'md',\n variant: 'default',\n spacing: 2,\n orientation: 'horizontal',\n});\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 2,\n orientation = 'horizontal',\n children,\n ...props\n}: ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot='toggle-group'\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ '--gap': spacing } as CSSProperties}\n className={cn(\n 'group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch data-[spacing=0]:data-[variant=outline]:rounded-md',\n className,\n )}\n {...props}>\n <ToggleGroupContext.Provider value={{ variant, size, spacing, orientation }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant = 'default',\n size = 'md',\n ...props\n}: ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>) {\n const context = useContext(ToggleGroupContext);\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot='toggle-group-item'\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n 'shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-3 group-data-[spacing=0]/toggle-group:shadow-none focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-2.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-2.5 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:last:rounded-b-md group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t',\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className,\n )}\n {...props}>\n {children}\n </ToggleGroupPrimitive.Item>\n );\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst tooltipContentVariants = cva(\n 'z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-xl text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-lg data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n {\n variants: {\n variant: {\n default: 'bg-foreground text-background',\n primary: 'bg-primary text-primary-foreground',\n },\n size: {\n sm: 'px-2 py-1',\n md: 'px-3 py-1.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nconst tooltipArrowVariants = cva(\n 'z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] data-[side=left]:translate-x-[-1.5px] data-[side=right]:translate-x-[1.5px]',\n {\n variants: {\n variant: {\n default: 'bg-foreground fill-foreground',\n primary: 'bg-primary fill-primary',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nfunction TooltipProvider({\n delayDuration = 100,\n ...props\n}: ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot='tooltip-provider'\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\nfunction Tooltip({ ...props }: ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot='tooltip' {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot='tooltip-trigger' {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 6,\n variant = 'default',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof TooltipPrimitive.Content> &\n VariantProps<typeof tooltipContentVariants>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot='tooltip-content'\n data-variant={variant}\n data-size={size}\n sideOffset={sideOffset}\n className={cn(tooltipContentVariants({ variant, size }), className)}\n {...props}>\n {children}\n <TooltipPrimitive.Arrow className={cn(tooltipArrowVariants({ variant }))} />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, tooltipContentVariants };\n","import { type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nconst TEXT_SIZES = [12, 14, 16, 18, 20, 24, 28, 32, 40, 48] as const;\nconst TEXT_WEIGHTS = [100, 200, 300, 400, 500, 700, 800, 900] as const;\n\nexport type TextSize = (typeof TEXT_SIZES)[number];\nexport type TextWeight = (typeof TEXT_WEIGHTS)[number];\nexport type TextAs = 'p' | 'span' | 'label' | 'small' | 'strong' | 'em';\n\nexport interface TextProps extends Omit<HTMLAttributes<HTMLElement>, 'color'> {\n /** HTML element to render */\n as?: TextAs;\n /** Font size in pixels */\n size?: TextSize;\n /** Font weight */\n weight?: TextWeight;\n /** Italic style */\n italic?: boolean;\n /** Optional CSS color value */\n color?: string;\n /** Text content */\n children: ReactNode;\n}\n\nfunction Text({\n as: Tag = 'p',\n size = 16,\n weight = 400,\n italic = false,\n color,\n className,\n style,\n children,\n ...props\n}: TextProps) {\n return (\n <Tag\n data-slot='text'\n className={cn('leading-normal', className)}\n style={{\n fontFamily: \"'Helvetica Neue', sans-serif\",\n fontSize: `${size}px`,\n fontWeight: weight,\n fontStyle: italic ? 'italic' : 'normal',\n ...(color ? { color } : {}),\n ...style,\n }}\n {...(props as HTMLAttributes<HTMLElement>)}>\n {children}\n </Tag>\n );\n}\n\nexport { Text, TEXT_SIZES, TEXT_WEIGHTS };\n","import { createContext, useContext, useState, type ComponentProps } from 'react';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { XIcon } from 'lucide-react';\nimport { transition, ease, duration } from '@/tokens/animation';\n\n// ─── Contexto interno ─────────────────────────────────────────────────────────\n\nconst DialogContext = createContext(false);\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nfunction Dialog({ children, ...props }: ComponentProps<typeof DialogPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = useState(props.defaultOpen ?? false);\n\n const isOpen = props.open !== undefined ? props.open : internalOpen;\n\n return (\n <DialogContext.Provider value={isOpen}>\n <DialogPrimitive.Root\n data-slot='dialog'\n open={isOpen}\n onOpenChange={(v) => {\n setInternalOpen(v);\n props.onOpenChange?.(v);\n }}\n {...props}>\n {children}\n </DialogPrimitive.Root>\n </DialogContext.Provider>\n );\n}\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\nfunction DialogTrigger({ ...props }: ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot='dialog-trigger' {...props} />;\n}\n\n// ─── Portal — AnimatePresence vive aquí ──────────────────────────────────────\n\nfunction DialogPortal({ children, ...props }: ComponentProps<typeof DialogPrimitive.Portal>) {\n const isOpen = useContext(DialogContext);\n\n return (\n <DialogPrimitive.Portal data-slot='dialog-portal' forceMount {...props}>\n <AnimatePresence mode='sync'>{isOpen && children}</AnimatePresence>\n </DialogPrimitive.Portal>\n );\n}\n\n// ─── Close ───────────────────────────────────────────────────────────────────\n\nfunction DialogClose({ ...props }: ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot='dialog-close' {...props} />;\n}\n\n// ─── Overlay — fade independiente ────────────────────────────────────────────\n\nfunction DialogOverlay({ className, ...props }: ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay data-slot='dialog-overlay' asChild forceMount {...props}>\n <motion.div\n className={cn(\n 'fixed inset-0 isolate z-50 bg-black/30 supports-backdrop-filter:backdrop-blur-sm',\n className,\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: duration.normal, ease: ease.smooth }}\n />\n </DialogPrimitive.Overlay>\n );\n}\n\n// ─── Content — scale + fade + slideUp con spring ─────────────────────────────\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = false,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal>\n <DialogOverlay key='dialog-overlay' />\n <DialogPrimitive.Content\n key='dialog-content'\n data-slot='dialog-content'\n asChild\n forceMount\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 fixed top-1/2 left-1/2 z-50 flex max-h-[85vh] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-lg text-sm shadow-xl ring-1 outline-none sm:max-w-sm',\n className,\n )}\n {...props}>\n <motion.div\n className='flex max-h-[85vh] flex-col'\n initial={{ opacity: 0, scale: 0.96, y: 8 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.96, y: 4 }}\n transition={transition.modal}>\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot='dialog-close' asChild>\n <Button\n variant='ghost'\n className='absolute top-4 right-4'\n size='icon-sm'>\n <XIcon />\n <span className='sr-only'>Close</span>\n </Button>\n </DialogPrimitive.Close>\n )}\n </motion.div>\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nfunction DialogHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='dialog-header'\n className={cn('flex shrink-0 flex-col gap-3 px-6 pt-6', className)}\n {...props}\n />\n );\n}\n\nfunction DialogBody({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='dialog-body'\n className={cn('flex-1 overflow-y-auto px-6 pb-6', className)}\n {...props}\n />\n );\n}\n\n// ─── Footer ──────────────────────────────────────────────────────────────────\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: ComponentProps<'div'> & {\n showCloseButton?: boolean;\n}) {\n return (\n <div\n data-slot='dialog-footer'\n className={cn(\n 'border-border bg-muted/40 flex shrink-0 flex-wrap items-center justify-end gap-2 rounded-b-lg border-t px-6 pt-4 pb-4',\n className,\n )}\n {...props}>\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant='secondary'>Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n );\n}\n\n// ─── Title ───────────────────────────────────────────────────────────────────\n\nfunction DialogTitle({ className, ...props }: ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot='dialog-title'\n className={cn('font-heading text-lg leading-none font-bold', className)}\n {...props}\n />\n );\n}\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nfunction DialogDescription({\n className,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot='dialog-description'\n className={cn(\n 'text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogBody,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import { createContext, useContext, useState, type ComponentProps } from 'react';\nimport { AlertDialog as AlertDialogPrimitive } from 'radix-ui';\nimport { XIcon } from 'lucide-react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { transition, ease, duration } from '@/tokens/animation';\n\n// ─── Contexto interno — comparte isOpen con el Portal sin tocar el Trigger ───\n\nconst AlertDialogContext = createContext(false);\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nfunction AlertDialog({\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = useState(props.defaultOpen ?? false);\n\n const isOpen = props.open !== undefined ? props.open : internalOpen;\n\n return (\n <AlertDialogContext.Provider value={isOpen}>\n <AlertDialogPrimitive.Root\n data-slot='alert-dialog'\n open={isOpen}\n onOpenChange={(v) => {\n setInternalOpen(v);\n props.onOpenChange?.(v);\n }}\n {...props}>\n {children}\n </AlertDialogPrimitive.Root>\n </AlertDialogContext.Provider>\n );\n}\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\nfunction AlertDialogTrigger({\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot='alert-dialog-trigger' {...props} />;\n}\n\n// ─── Portal — AnimatePresence vive aquí, no en el root ───────────────────────\n\nfunction AlertDialogPortal({\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n const isOpen = useContext(AlertDialogContext);\n\n return (\n <AlertDialogPrimitive.Portal data-slot='alert-dialog-portal' forceMount {...props}>\n <AnimatePresence mode='sync'>{isOpen && children}</AnimatePresence>\n </AlertDialogPrimitive.Portal>\n );\n}\n\n// ─── Overlay — fade independiente ────────────────────────────────────────────\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot='alert-dialog-overlay'\n asChild\n forceMount\n {...props}>\n <motion.div\n className={cn(\n 'fixed inset-0 z-50 bg-black/30 supports-backdrop-filter:backdrop-blur-sm',\n className,\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: duration.normal, ease: ease.smooth }}\n />\n </AlertDialogPrimitive.Overlay>\n );\n}\n\n// ─── Content — scale + fade + slideUp con spring ─────────────────────────────\n\nfunction AlertDialogContent({\n className,\n size = 'default',\n variant = 'default',\n showClose = false,\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: 'default' | 'sm';\n variant?: 'default' | 'dark-glass';\n showClose?: boolean;\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay\n key='alert-dialog-overlay'\n className={cn(variant === 'dark-glass' && 'bg-primary/60 backdrop-blur-md')}\n />\n <AlertDialogPrimitive.Content\n key='alert-dialog-content'\n data-slot='alert-dialog-content'\n data-size={size}\n data-variant={variant}\n asChild\n forceMount\n className={cn(\n 'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg p-6 shadow-xl outline-none',\n 'data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md',\n variant === 'default' &&\n 'bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 ring-1',\n variant === 'dark-glass' &&\n 'bg-primary/80 text-white ring-1 ring-white/10 backdrop-blur-xl',\n className,\n )}\n {...props}>\n <motion.div\n initial={{ opacity: 0, scale: 0.96, y: 8 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.96, y: 4 }}\n transition={transition.modal}>\n {showClose && (\n <AlertDialogPrimitive.Cancel asChild>\n <button className='text-muted-foreground hover:bg-muted hover:text-foreground absolute top-4 right-4 inline-flex size-6 items-center justify-center rounded-full transition-colors focus:outline-none'>\n <XIcon className='size-3.5' />\n <span className='sr-only'>Close</span>\n </button>\n </AlertDialogPrimitive.Cancel>\n )}\n {children}\n </motion.div>\n </AlertDialogPrimitive.Content>\n </AlertDialogPortal>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-header'\n className={cn(\n 'flex flex-col items-center gap-2 text-center has-data-[slot=alert-dialog-media]:items-center sm:group-data-[size=default]/alert-dialog-content:items-start sm:group-data-[size=default]/alert-dialog-content:text-left',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Footer ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-footer'\n className={cn(\n 'flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Media ───────────────────────────────────────────────────────────────────\n\nfunction AlertDialogMedia({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-media'\n className={cn(\n \"bg-muted inline-flex size-16 items-center justify-center rounded-xl sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Title ───────────────────────────────────────────────────────────────────\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot='alert-dialog-title'\n className={cn('font-heading text-lg font-bold', className)}\n {...props}\n />\n );\n}\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot='alert-dialog-description'\n className={cn(\n 'text-muted-foreground *:[a]:hover:text-foreground text-xs text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Action ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogAction({\n className,\n variant = 'cancel',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <AlertDialogPrimitive.Action data-slot='alert-dialog-action' asChild {...props}>\n <Button variant={variant} size={size} className={cn(className)}>\n {children}\n </Button>\n </AlertDialogPrimitive.Action>\n );\n}\n\n// ─── Cancel ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogCancel({\n className,\n variant = 'ghost',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <AlertDialogPrimitive.Cancel data-slot='alert-dialog-cancel' asChild {...props}>\n <Button variant={variant} size={size} className={cn(className)}>\n {children}\n </Button>\n </AlertDialogPrimitive.Cancel>\n );\n}\n\n// ─── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n","import { type ComponentProps } from 'react';\nimport { Accordion as AccordionPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon } from 'lucide-react';\n\nfunction Accordion({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Root>) {\n return (\n <AccordionPrimitive.Root\n data-slot='accordion'\n className={cn(\n 'divide-foreground/20 flex w-full flex-col divide-y overflow-hidden rounded-2xl border',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot='accordion-item'\n className={cn('data-[state=open]:bg-muted/50 overflow-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className='flex'>\n <AccordionPrimitive.Trigger\n data-slot='accordion-trigger'\n className={cn(\n 'flex flex-1 items-center justify-between gap-4 px-4 py-4 text-left text-sm font-medium transition-all outline-none hover:underline disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}>\n {children}\n <ChevronDownIcon className='text-muted-foreground size-4 shrink-0 transition-transform duration-200' />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot='accordion-content'\n className='text-muted-foreground data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm'\n {...props}>\n <div\n className={cn(\n '[&_a]:hover:text-foreground px-4 pt-0 pb-4 [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4',\n className,\n )}>\n {children}\n </div>\n </AccordionPrimitive.Content>\n );\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import { useRef, useState } from 'react';\nimport { CheckIcon, ChevronsUpDownIcon, SearchIcon } from 'lucide-react';\nimport { Command } from 'cmdk';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Search matching strategy:\n * - `fuzzy` — cmdk's default subsequence scoring (typo-tolerant; `205` also\n * matches `2005`, `1205`, etc.).\n * - `substring` — option matches when its value or label contains the query.\n * - `prefix` — option matches when its value/label, or any word within them,\n * starts with the query. Best for numeric/alphanumeric codes.\n */\nexport type ComboboxMatchMode = 'fuzzy' | 'substring' | 'prefix';\n\n// cmdk filter: receives the item `value` and its `keywords` (here the label).\n// Returns a score > 0 to keep the item, 0 to filter it out.\nfunction createMatchFilter(mode: Exclude<ComboboxMatchMode, 'fuzzy'>) {\n return (value: string, search: string, keywords: string[] = []): number => {\n const query = search.toLowerCase().trim();\n if (!query) return 1;\n\n const haystacks = [value, ...keywords].map((s) => s.toLowerCase());\n const matched =\n mode === 'substring'\n ? haystacks.some((h) => h.includes(query))\n : haystacks.some(\n (h) =>\n h.startsWith(query) || h.split(/\\s+/).some((word) => word.startsWith(query)),\n );\n\n return matched ? 1 : 0;\n };\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyMessage?: string;\n disabled?: boolean;\n className?: string;\n /**\n * Portal target for the dropdown. Pass the Dialog content node when the\n * Combobox is rendered inside a modal Dialog so the list stays within the\n * Dialog's scroll-lock shard — otherwise wheel/touch scrolling is blocked.\n */\n container?: HTMLElement | null;\n /**\n * Search matching strategy. Defaults to `fuzzy` (cmdk's built-in behavior).\n * Use `prefix` or `substring` for numeric/alphanumeric codes where fuzzy\n * subsequence matching surfaces unexpected results.\n */\n matchMode?: ComboboxMatchMode;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction Combobox({\n options,\n value,\n onValueChange,\n placeholder = 'Select an option...',\n searchPlaceholder = 'Search...',\n emptyMessage = 'No results found.',\n disabled = false,\n className,\n container,\n matchMode = 'fuzzy',\n}: ComboboxProps) {\n const [open, setOpen] = useState(false);\n const listRef = useRef<HTMLDivElement>(null);\n\n const selected = options.find((opt) => opt.value === value);\n\n // `undefined` lets cmdk fall back to its default fuzzy filter.\n const filter = matchMode === 'fuzzy' ? undefined : createMatchFilter(matchMode);\n\n // On each query change cmdk reorders matches (best first) but never resets\n // the list's scroll position, so a list previously scrolled down keeps the\n // top match hidden. Snap back to the top once cmdk has committed the new\n // order (rAF runs after its layout effects).\n const handleSearchChange = () => {\n requestAnimationFrame(() => listRef.current?.scrollTo({ top: 0 }));\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant='secondary'\n disabled={disabled}\n aria-expanded={open}\n className={cn(\n 'border-input w-64 justify-between border bg-transparent text-sm font-normal shadow-xs',\n 'hover:text-foreground focus-visible:ring-ring/30 hover:bg-transparent',\n selected ? 'text-foreground' : 'text-muted-foreground',\n className,\n )}>\n <span className='truncate'>{selected ? selected.label : placeholder}</span>\n <ChevronsUpDownIcon size={14} className='text-muted-foreground shrink-0' />\n </Button>\n </PopoverTrigger>\n <PopoverContent className='w-64 rounded-lg p-0' align='start' container={container}>\n <Command className='rounded-lg' filter={filter}>\n <div className='border-border flex items-center gap-2 border-b px-3'>\n <SearchIcon size={14} className='text-muted-foreground shrink-0' />\n <Command.Input\n placeholder={searchPlaceholder}\n onValueChange={handleSearchChange}\n className='placeholder:text-muted-foreground flex h-9 w-full bg-transparent py-2 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50'\n />\n </div>\n <Command.List ref={listRef} className='max-h-56 overflow-y-auto p-1'>\n <Command.Empty className='text-muted-foreground py-4 text-center text-sm'>\n {emptyMessage}\n </Command.Empty>\n {options.map((option) => (\n <Command.Item\n key={option.value}\n value={option.value}\n keywords={[option.label]}\n disabled={option.disabled}\n onSelect={() => {\n onValueChange?.(option.value === value ? '' : option.value);\n setOpen(false);\n }}\n className={cn(\n 'relative flex cursor-pointer items-center justify-between rounded-md px-2 py-1.5 text-sm outline-none select-none',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n 'hover:bg-accent hover:text-accent-foreground',\n )}>\n <span>{option.label}</span>\n {value === option.value && (\n <CheckIcon\n size={14}\n className='text-[var(--color-main-blue-primary)]'\n />\n )}\n </Command.Item>\n ))}\n </Command.List>\n </Command>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { Combobox };\n","import { type ComponentProps } from 'react';\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { CheckIcon, ChevronRightIcon } from 'lucide-react';\n\nfunction DropdownMenu({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root {...props} />;\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal {...props} />;\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot='dropdown-menu-trigger' {...props} />;\n}\n\nfunction DropdownMenuContent({\n className,\n align = 'start',\n sideOffset = 4,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot='dropdown-menu-content'\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-48 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-3xl p-1.5 shadow-lg ring-1 duration-100 data-[state=closed]:overflow-hidden',\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot='dropdown-menu-group' {...props} />;\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot='dropdown-menu-item'\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:*:[svg]:text-destructive relative flex cursor-default items-center gap-2.5 rounded-2xl px-3 py-2 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot='dropdown-menu-checkbox-item'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground relative flex cursor-default items-center gap-2.5 rounded-2xl py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}>\n <span\n className='pointer-events-none absolute right-2 flex items-center justify-center'\n data-slot='dropdown-menu-checkbox-item-indicator'>\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon aria-hidden='true' />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot='dropdown-menu-radio-group' {...props} />;\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot='dropdown-menu-radio-item'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground relative flex cursor-default items-center gap-2.5 rounded-2xl py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <span\n className='pointer-events-none absolute right-2 flex items-center justify-center'\n data-slot='dropdown-menu-radio-item-indicator'>\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon aria-hidden='true' />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot='dropdown-menu-label'\n data-inset={inset}\n className={cn('text-muted-foreground px-3 py-2.5 text-xs data-inset:pl-9.5', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot='dropdown-menu-separator'\n className={cn('bg-border/50 -mx-1.5 my-1.5 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='dropdown-menu-shortcut'\n className={cn(\n 'text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSub({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot='dropdown-menu-sub' {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot='dropdown-menu-sub-trigger'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center gap-2 rounded-2xl px-3 py-2 text-sm font-medium outline-hidden select-none data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n {children}\n <ChevronRightIcon className='ml-auto' aria-hidden='true' />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot='dropdown-menu-sub-content'\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 min-w-36 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-3xl p-1.5 shadow-lg ring-1 duration-100',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","import { UploadIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext } from 'react';\nimport type { DropEvent, DropzoneOptions, FileRejection } from 'react-dropzone';\nimport { useDropzone } from 'react-dropzone';\nimport { cva } from 'class-variance-authority';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\n\ninterface DropzoneContextType {\n src?: File[];\n accept?: DropzoneOptions['accept'];\n maxSize?: DropzoneOptions['maxSize'];\n minSize?: DropzoneOptions['minSize'];\n maxFiles?: DropzoneOptions['maxFiles'];\n}\n\nconst renderBytes = (bytes: number) => {\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n let size = bytes;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(2)}${units[unitIndex]}`;\n};\n\nconst DropzoneContext = createContext<DropzoneContextType | undefined>(undefined);\n\nconst dropzoneVariants = cva('', {\n variants: {\n border: {\n default: 'border border-solid border-foreground/15',\n dashed: 'border-dashed border-foreground/50',\n },\n },\n defaultVariants: {\n border: 'default',\n },\n});\n\nexport type DropzoneProps = Omit<DropzoneOptions, 'onDrop'> & {\n src?: File[];\n className?: string;\n border?: 'default' | 'dashed';\n onDrop?: (acceptedFiles: File[], fileRejections: FileRejection[], event: DropEvent) => void;\n children?: ReactNode;\n};\n\nexport const Dropzone = ({\n accept,\n maxFiles = 1,\n maxSize,\n minSize,\n onDrop,\n onError,\n disabled,\n src,\n className,\n children,\n border,\n ...props\n}: DropzoneProps) => {\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n accept,\n maxFiles,\n maxSize,\n minSize,\n onError,\n disabled,\n onDrop: (acceptedFiles, fileRejections, event) => {\n if (fileRejections.length > 0) {\n const message = fileRejections.at(0)?.errors.at(0)?.message;\n onError?.(new Error(message));\n }\n if (acceptedFiles.length > 0) {\n onDrop?.(acceptedFiles, fileRejections, event);\n }\n },\n ...props,\n });\n\n return (\n <DropzoneContext.Provider\n key={JSON.stringify(src)}\n value={{ src, accept, maxSize, minSize, maxFiles }}>\n <Button\n data-slot='dropzone'\n data-border={border ?? 'default'}\n className={cn(\n 'cursor-auto relative h-auto w-full flex-col overflow-hidden p-8',\n dropzoneVariants({ border }),\n isDragActive && 'bg-foreground/10 outline-none',\n className,\n )}\n disabled={disabled}\n type='button'\n variant='ghost'\n {...getRootProps()}>\n <input {...getInputProps()} disabled={disabled} />\n {children}\n </Button>\n </DropzoneContext.Provider>\n );\n};\n\nconst useDropzoneContext = () => {\n const context = useContext(DropzoneContext);\n\n if (!context) {\n throw new Error('useDropzoneContext must be used within a Dropzone');\n }\n\n return context;\n};\n\nexport interface DropzoneContentProps {\n children?: ReactNode;\n className?: string;\n}\n\nconst maxLabelItems = 3;\n\nexport const DropzoneContent = ({ children, className }: DropzoneContentProps) => {\n const { src } = useDropzoneContext();\n\n if (!src) {\n return null;\n }\n\n if (children) {\n return children;\n }\n\n return (\n <div className={cn('flex flex-col items-center justify-center', className)}>\n <div className='bg-muted text-muted-foreground flex size-8 items-center justify-center rounded-md'>\n <UploadIcon size={16} />\n </div>\n <p className='text-foreground my-2 w-full truncate text-sm font-medium'>\n {src.length > maxLabelItems\n ? `${new Intl.ListFormat('en').format(\n src.slice(0, maxLabelItems).map((file) => file.name),\n )} and ${src.length - maxLabelItems} more`\n : new Intl.ListFormat('en').format(src.map((file) => file.name))}\n </p>\n <p className='text-muted-foreground w-full text-xs font-normal text-wrap'>\n Drag and drop or click to replace\n </p>\n </div>\n );\n};\n\nexport interface DropzoneEmptyStateProps {\n children?: ReactNode;\n className?: string;\n}\n\nexport const DropzoneEmptyState = ({ children, className }: DropzoneEmptyStateProps) => {\n const { src, accept, maxSize, minSize, maxFiles } = useDropzoneContext();\n\n if (src) {\n return null;\n }\n\n if (children) {\n return children;\n }\n\n let caption = '';\n\n if (accept) {\n caption += 'Accepts ';\n caption += new Intl.ListFormat('en').format(Object.keys(accept));\n }\n\n if (minSize && maxSize) {\n caption += ` between ${renderBytes(minSize)} and ${renderBytes(maxSize)}`;\n } else if (minSize) {\n caption += ` at least ${renderBytes(minSize)}`;\n } else if (maxSize) {\n caption += ` less than ${renderBytes(maxSize)}`;\n }\n\n return (\n <div className={cn('flex flex-col items-center justify-center', className)}>\n <div className='bg-muted text-muted-foreground flex size-8 items-center justify-center rounded-md'>\n <UploadIcon size={16} />\n </div>\n <p className='text-foreground my-2 w-full text-center text-sm font-medium text-wrap'>\n Upload {maxFiles === 1 ? 'a file' : 'files'}\n </p>\n <p className='text-muted-foreground text-center text-xs font-normal text-wrap'>\n Drag and drop or click to upload\n </p>\n\n {caption && (\n <p className='text-muted-foreground text-xs font-normal text-wrap'>{caption}.</p>\n )}\n </div>\n );\n};\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nfunction Empty({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty'\n className={cn(\n 'flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-header'\n className={cn('flex max-w-sm flex-col items-center gap-2', className)}\n {...props}\n />\n );\n}\n\nconst emptyMediaVariants = cva(\n 'mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"flex size-9 shrink-0 items-center justify-center rounded-lg bg-foreground/10 text-muted-foreground [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction EmptyMedia({\n className,\n variant = 'default',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot='empty-icon'\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-title'\n className={cn('cn-font-heading text-sm font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return (\n <div\n data-slot='empty-description'\n className={cn(\n 'text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-content'\n className={cn(\n 'flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Empty, EmptyHeader, EmptyTitle, EmptyDescription, EmptyContent, EmptyMedia };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { Separator } from '@/components/ui/Separator/separator';\n\nfunction ItemGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n role='list'\n data-slot='item-group'\n className={cn(\n 'group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemSeparator({ className, ...props }: ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot='item-separator'\n orientation='horizontal'\n className={cn('my-2', className)}\n {...props}\n />\n );\n}\n\nconst itemVariants = cva(\n 'group/item flex w-full flex-wrap items-center rounded-2xl border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted',\n {\n variants: {\n variant: {\n default: 'border-foreground/5 bg-foreground/5',\n outline: 'border-foreground/30',\n muted: 'border-transparent bg-background dark:text-black',\n highlighted: 'border-orange-500 bg-orange-50 dark:bg-orange-500/10',\n },\n size: {\n default: 'gap-3.5 px-4 py-3.5',\n sm: 'gap-3.5 px-3.5 py-3',\n xs: 'gap-2.5 px-3 py-2.5 in-data-[slot=dropdown-menu-content]:p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Item({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof itemVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'div';\n return (\n <Comp\n data-slot='item'\n data-variant={variant}\n data-size={size}\n className={cn(itemVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nconst itemMediaVariants = cva(\n 'flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"[&_svg:not([class*='size-'])]:size-4\",\n image: 'size-10 overflow-hidden rounded-xl group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 group-data-[size=xs]/item:rounded-lg [&_img]:size-full [&_img]:object-cover',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction ItemMedia({\n className,\n variant = 'default',\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof itemMediaVariants>) {\n return (\n <div\n data-slot='item-media'\n data-variant={variant}\n className={cn(itemMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction ItemContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-content'\n className={cn(\n 'flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0.5 [&+[data-slot=item-content]]:flex-none',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemTitle({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-title'\n className={cn(\n 'line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='item-description'\n className={cn(\n 'text-muted-foreground [&>a:hover]:text-primary line-clamp-2 text-left text-sm font-normal [&>a]:underline [&>a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemActions({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-actions'\n className={cn('flex items-center gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction ItemHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-header'\n className={cn('flex basis-full items-center justify-between gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction ItemFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-footer'\n className={cn('flex basis-full items-center justify-between gap-2', className)}\n {...props}\n />\n );\n}\n\nexport {\n Item,\n ItemMedia,\n ItemContent,\n ItemActions,\n ItemGroup,\n ItemSeparator,\n ItemTitle,\n ItemDescription,\n ItemHeader,\n ItemFooter,\n};\n","import { type ComponentProps } from 'react';\nimport { RadioGroup as RadioGroupPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction RadioGroup({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot='radio-group'\n className={cn('grid w-full gap-3', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot='radio-group-item'\n className={cn(\n 'group/radio-group-item peer border-input/60 bg-input/20 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary relative flex aspect-square size-4 shrink-0 rounded-full border outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3',\n className,\n )}\n {...props}>\n <RadioGroupPrimitive.Indicator\n data-slot='radio-group-indicator'\n className='flex size-4 items-center justify-center'>\n <span className='bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full dark:size-2.5' />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from '@/lib/variants';\nimport { cn } from '@/lib/utils';\nimport { Loader2Icon, LoaderIcon } from 'lucide-react';\n\n// ---------------------------------------------------------------------------\n// Shared size map — reutilizado por los tres componentes\n// ---------------------------------------------------------------------------\n\nconst spinnerSizes = {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-6',\n xl: 'size-8',\n} as const;\n\n// ---------------------------------------------------------------------------\n// Spinner — Loader2Icon (círculo con corte)\n// ---------------------------------------------------------------------------\n\nconst spinnerVariants = cva('animate-spin shrink-0', {\n variants: {\n size: spinnerSizes,\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerProps\n extends Omit<ComponentProps<'svg'>, 'color'>, VariantProps<typeof spinnerVariants> {}\n\nfunction Spinner({ className, size, color, ...props }: SpinnerProps) {\n return (\n <Loader2Icon\n data-slot='spinner'\n role='status'\n aria-label='Loading'\n className={cn(spinnerVariants({ size, color }), className)}\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// SpinnerLoader — LoaderIcon (líneas rotatorias)\n// ---------------------------------------------------------------------------\n\nconst spinnerLoaderVariants = cva('animate-spin shrink-0', {\n variants: {\n size: spinnerSizes,\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerLoaderProps\n extends\n Omit<ComponentProps<'svg'>, 'color'>,\n VariantProps<typeof spinnerLoaderVariants> {}\n\nfunction SpinnerLoader({ className, size, color, ...props }: SpinnerLoaderProps) {\n return (\n <LoaderIcon\n data-slot='spinner-loader'\n role='status'\n aria-label='Loading'\n className={cn(spinnerLoaderVariants({ size, color }), className)}\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// SpinnerDots — tres puntos con animación de ola\n// ---------------------------------------------------------------------------\n\nconst spinnerDotsVariants = cva('flex items-center', {\n variants: {\n size: {\n sm: 'gap-[2px] [&>span]:size-1.5',\n md: 'gap-[3px] [&>span]:size-2',\n lg: 'gap-1 [&>span]:size-2.5',\n xl: 'gap-1.5 [&>span]:size-3',\n },\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerDotsProps extends VariantProps<typeof spinnerDotsVariants> {\n className?: string;\n}\n\nfunction SpinnerDots({ className, size, color }: SpinnerDotsProps) {\n return (\n <span\n data-slot='spinner-dots'\n role='status'\n aria-label='Loading'\n className={cn(spinnerDotsVariants({ size, color }), className)}>\n {[0, 1, 2].map((i) => (\n <span\n key={i}\n className='rounded-full bg-current'\n style={{\n animation: 'dotWave 1.2s ease-in-out infinite',\n animationDelay: `${i * 0.2}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes dotWave {\n 0%, 60%, 100% { transform: translateY(0); opacity: 0.3; }\n 30% { transform: translateY(-4px); opacity: 1; }\n }\n `}</style>\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n\nexport {\n Spinner,\n SpinnerLoader,\n SpinnerDots,\n spinnerVariants,\n spinnerLoaderVariants,\n spinnerDotsVariants,\n};\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-4xl border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/80',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:bg-transparent dark:hover:bg-input/30',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',\n ghost: 'hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50',\n destructive:\n 'bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40',\n link: 'text-primary underline-offset-4 hover:underline',\n\n },\n size: {\n default:\n 'h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5',\n xs: \"h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3\",\n sm: 'h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n lg: 'h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',\n icon: 'size-9',\n 'icon-xs': \"size-6 [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-8',\n 'icon-lg': 'size-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot='button'\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot='input'\n className={cn(\n 'bg-input/50 file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 h-9 w-full min-w-0 rounded-3xl border border-transparent px-3 py-1 text-base transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { type ComponentProps } from 'react';\nimport { Select as SelectPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon, CheckIcon, ChevronUpIcon } from 'lucide-react';\n\nfunction Select({ ...props }: ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot='select' {...props} />;\n}\n\nfunction SelectGroup({ className, ...props }: ComponentProps<typeof SelectPrimitive.Group>) {\n return (\n <SelectPrimitive.Group\n data-slot='select-group'\n className={cn('scroll-my-1.5 p-1.5', className)}\n {...props}\n />\n );\n}\n\nfunction SelectValue({ ...props }: ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot='select-value' {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot='select-trigger'\n data-size={size}\n className={cn(\n \"bg-input/50 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 flex w-fit items-center justify-between gap-1.5 rounded-3xl border border-transparent px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow,background-color] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className='text-muted-foreground pointer-events-none size-4' />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'item-aligned',\n align = 'center',\n ...props\n}: ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot='select-content'\n data-align-trigger={position === 'item-aligned'}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-3xl shadow-lg ring-1 duration-100 data-[align-trigger=true]:animate-none',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className,\n )}\n position={position}\n align={align}\n {...props}>\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n data-position={position}\n className={cn(\n 'data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)',\n position === 'popper' && '',\n )}>\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot='select-label'\n className={cn('text-muted-foreground px-3 py-2.5 text-xs', className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n className={cn(\n \"rounded-2x3 focus:bg-muted not-data-[variant=destructive]:focus:**:text-accent-muted-foreground relative flex w-full cursor-default items-center gap-2 py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}>\n <span className='pointer-events-none absolute right-2 flex size-4 items-center justify-center'>\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className='pointer-events-none' />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot='select-separator'\n className={cn('bg-border pointer-events-none -mx-1.5 my-1.5 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot='select-scroll-up-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <ChevronUpIcon />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot='select-scroll-down-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <ChevronDownIcon />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import Color from 'color';\nimport { PipetteIcon } from 'lucide-react';\nimport { Slider } from 'radix-ui';\nimport {\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Button } from '@/components/compounds/ColorPicker/button';\nimport { Input } from '@/components/compounds/ColorPicker/input';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/compounds/ColorPicker/select';\nimport { cn } from '@/lib/utils';\n\ninterface ColorPickerContextValue {\n hue: number;\n saturation: number;\n lightness: number;\n alpha: number;\n mode: string;\n setHue: (hue: number) => void;\n setSaturation: (saturation: number) => void;\n setLightness: (lightness: number) => void;\n setAlpha: (alpha: number) => void;\n setMode: (mode: string) => void;\n}\n\nconst ColorPickerContext = createContext<ColorPickerContextValue | undefined>(undefined);\n\nexport const useColorPicker = () => {\n const context = useContext(ColorPickerContext);\n\n if (!context) {\n throw new Error('useColorPicker must be used within a ColorPickerProvider');\n }\n\n return context;\n};\n\nexport type ColorPickerProps = Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n value?: Parameters<typeof Color>[0];\n defaultValue?: Parameters<typeof Color>[0];\n onChange?: (value: [number, number, number, number]) => void;\n};\n\nexport const ColorPicker = ({\n value,\n defaultValue = '#000000',\n onChange,\n className,\n ...props\n}: ColorPickerProps) => {\n const baseColor = value !== undefined ? Color(value) : Color(defaultValue);\n\n const [hue, setHue] = useState(baseColor.hue());\n const [saturation, setSaturation] = useState(baseColor.saturationl());\n const [lightness, setLightness] = useState(baseColor.lightness());\n const [alpha, setAlpha] = useState(baseColor.alpha() * 100);\n const [mode, setMode] = useState('hex');\n\n const onChangeRef = useRef(onChange);\n const mounted = useRef(false);\n useEffect(() => {\n onChangeRef.current = onChange;\n });\n\n // Update color when controlled value changes\n useEffect(() => {\n if (value) {\n const color = Color(value);\n\n setHue(color.hue());\n setSaturation(color.saturationl());\n setLightness(color.lightness());\n setAlpha(color.alpha() * 100);\n }\n }, [value]);\n\n // Notify parent of changes — onChange ref avoids infinite loop when caller passes inline arrow fn\n useEffect(() => {\n if (!mounted.current) {\n mounted.current = true;\n return;\n }\n if (onChangeRef.current) {\n const color = Color.hsl(hue, saturation, lightness).alpha(alpha / 100);\n const rgba = color.rgb().array();\n\n onChangeRef.current([rgba[0], rgba[1], rgba[2], alpha / 100]);\n }\n }, [hue, saturation, lightness, alpha]);\n\n return (\n <ColorPickerContext.Provider\n value={{\n hue,\n saturation,\n lightness,\n alpha,\n mode,\n setHue,\n setSaturation,\n setLightness,\n setAlpha,\n setMode,\n }}>\n <div className={cn('flex size-full flex-col gap-4', className)} {...props} />\n </ColorPickerContext.Provider>\n );\n};\n\nexport type ColorPickerSelectionProps = HTMLAttributes<HTMLDivElement>;\n\nexport const ColorPickerSelection = memo(({ className, ...props }: ColorPickerSelectionProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [positionX, setPositionX] = useState(0);\n const [positionY, setPositionY] = useState(0);\n const { hue, setSaturation, setLightness } = useColorPicker();\n\n const backgroundGradient = useMemo(() => {\n return `linear-gradient(0deg, rgba(0,0,0,1), rgba(0,0,0,0)),\n linear-gradient(90deg, rgba(255,255,255,1), rgba(255,255,255,0)),\n hsl(${hue}, 100%, 50%)`;\n }, [hue]);\n\n const handlePointerMove = useCallback(\n (event: PointerEvent) => {\n if (!(isDragging && containerRef.current)) {\n return;\n }\n const rect = containerRef.current.getBoundingClientRect();\n const x = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));\n const y = Math.max(0, Math.min(1, (event.clientY - rect.top) / rect.height));\n setPositionX(x);\n setPositionY(y);\n setSaturation(x * 100);\n const topLightness = x < 0.01 ? 100 : 50 + 50 * (1 - x);\n const lightness = topLightness * (1 - y);\n\n setLightness(lightness);\n },\n [isDragging, setSaturation, setLightness],\n );\n\n useEffect(() => {\n const handlePointerUp = () => setIsDragging(false);\n\n if (isDragging) {\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n }\n\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n };\n }, [isDragging, handlePointerMove]);\n\n return (\n <div\n className={cn('relative size-full cursor-crosshair rounded', className)}\n onPointerDown={(e) => {\n e.preventDefault();\n setIsDragging(true);\n handlePointerMove(e.nativeEvent);\n }}\n ref={containerRef}\n style={{\n background: backgroundGradient,\n }}\n {...props}>\n <div\n className='pointer-events-none absolute h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white'\n style={{\n left: `${positionX * 100}%`,\n top: `${positionY * 100}%`,\n boxShadow: '0 0 0 1px rgba(0,0,0,0.5)',\n }}\n />\n </div>\n );\n});\n\nColorPickerSelection.displayName = 'ColorPickerSelection';\n\nexport type ColorPickerHueProps = ComponentProps<typeof Slider.Root>;\n\nexport const ColorPickerHue = ({ className, ...props }: ColorPickerHueProps) => {\n const { hue, setHue } = useColorPicker();\n\n return (\n <Slider.Root\n className={cn('relative flex h-4 w-full touch-none', className)}\n max={360}\n onValueChange={([hue]) => setHue(hue)}\n step={1}\n value={[hue]}\n {...props}>\n <Slider.Track className='relative my-0.5 h-3 w-full grow rounded-full bg-[linear-gradient(90deg,#FF0000,#FFFF00,#00FF00,#00FFFF,#0000FF,#FF00FF,#FF0000)]'>\n <Slider.Range className='absolute h-full' />\n </Slider.Track>\n <Slider.Thumb className='border-primary/50 bg-background focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50' />\n </Slider.Root>\n );\n};\n\nexport type ColorPickerAlphaProps = ComponentProps<typeof Slider.Root>;\n\nexport const ColorPickerAlpha = ({ className, ...props }: ColorPickerAlphaProps) => {\n const { alpha, setAlpha, hue, saturation, lightness } = useColorPicker();\n const solidColor = Color.hsl(hue, saturation, lightness).hex();\n\n return (\n <Slider.Root\n className={cn('relative flex h-4 w-full touch-none', className)}\n max={100}\n onValueChange={([alpha]) => setAlpha(alpha)}\n step={1}\n value={[alpha]}\n {...props}>\n <Slider.Track\n className='relative my-0.5 h-3 w-full grow rounded-full'\n style={{\n background:\n 'url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==\") left center',\n }}>\n <div\n className='absolute inset-0 rounded-full'\n style={{ background: `linear-gradient(to right, transparent, ${solidColor})` }}\n />\n <Slider.Range className='absolute h-full rounded-full bg-transparent' />\n </Slider.Track>\n <Slider.Thumb\n className='border-primary/50 focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50'\n style={{ backgroundColor: solidColor }}\n />\n </Slider.Root>\n );\n};\n\nexport type ColorPickerEyeDropperProps = ComponentProps<typeof Button>;\n\nexport const ColorPickerEyeDropper = ({ className, ...props }: ColorPickerEyeDropperProps) => {\n const { setHue, setSaturation, setLightness, setAlpha } = useColorPicker();\n\n const handleEyeDropper = async () => {\n try {\n // @ts-expect-error - EyeDropper API is experimental\n const eyeDropper = new EyeDropper();\n const result = await eyeDropper.open();\n const color = Color(result.sRGBHex);\n const [h, s, l] = color.hsl().array();\n\n setHue(h);\n setSaturation(s);\n setLightness(l);\n setAlpha(100);\n } catch (error) {\n console.error('EyeDropper failed:', error);\n }\n };\n\n return (\n <Button\n className={cn('text-muted-foreground shrink-0', className)}\n onClick={handleEyeDropper}\n size='icon'\n type='button'\n variant='outline'\n {...props}>\n <PipetteIcon size={16} />\n </Button>\n );\n};\n\nexport type ColorPickerOutputProps = ComponentProps<typeof SelectTrigger>;\n\nconst formats = ['hex', 'css'];\n\nexport const ColorPickerOutput = ({ ...props }: ColorPickerOutputProps) => {\n const { mode, setMode } = useColorPicker();\n\n return (\n <Select onValueChange={setMode} value={mode}>\n <SelectTrigger\n className='bg-background h-4 w-19 shrink-0 rounded-sm text-xs'\n {...props}>\n <SelectValue placeholder='Mode' />\n </SelectTrigger>\n <SelectContent>\n {formats.map((format) => (\n <SelectItem\n className='bg-background rounded-none text-xs'\n key={format}\n value={format}>\n {format.toUpperCase()}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n};\n\ntype PercentageInputProps = Omit<ComponentProps<typeof Input>, 'onChange' | 'value'> & {\n value: number;\n onChange: (value: number) => void;\n};\n\nconst PercentageInput = ({ value, onChange, className, ...props }: PercentageInputProps) => {\n const [localValue, setLocalValue] = useState(String(value));\n\n useEffect(() => {\n setLocalValue(String(value));\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n\n if (!/^\\d*\\.?\\d*$/.test(raw)) return;\n\n const num = parseFloat(raw);\n\n if (num > 100) {\n setLocalValue('100');\n onChange(100);\n return;\n }\n\n setLocalValue(raw);\n if (!isNaN(num)) {\n onChange(num);\n }\n };\n\n return (\n <div className='relative'>\n <Input\n type='text'\n inputMode='decimal'\n value={localValue}\n onChange={handleChange}\n {...props}\n className={cn(\n 'bg-muted h-8 w-[3.5rem] [appearance:textfield] rounded-md px-2 text-xs shadow-none [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none',\n className,\n )}\n />\n <span className='text-muted-foreground absolute top-1/2 right-2 -translate-y-1/2 text-xs'>\n %\n </span>\n </div>\n );\n};\n\nexport type ColorPickerFormatProps = HTMLAttributes<HTMLDivElement>;\n\nexport const ColorPickerFormat = ({ className, ...props }: ColorPickerFormatProps) => {\n const { hue, saturation, lightness, alpha, setAlpha, mode } = useColorPicker();\n const color = Color.hsl(hue, saturation, lightness, alpha / 100);\n\n if (mode === 'hex') {\n const hex = color.hex();\n const alphaHex = Math.round((alpha / 100) * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase();\n const displayHex = alpha < 100 ? `${hex}${alphaHex}` : hex;\n\n return (\n <div\n className={cn(\n 'relative flex w-full items-center gap-1 -space-x-px rounded-md',\n className,\n )}\n {...props}>\n <Input\n className='bg-muted h-8 w-[5rem] rounded-md px-2 text-xs'\n readOnly\n type='text'\n value={displayHex}\n />\n <PercentageInput value={alpha} onChange={setAlpha} />\n </div>\n );\n }\n\n if (mode === 'css') {\n const rgb = color\n .rgb()\n .array()\n .map((value) => Math.round(value));\n\n return (\n <div className={cn('w-full rounded-md', className)} {...props}>\n <Input\n className='bg-muted h-8 w-full rounded-md px-2 text-xs shadow-none'\n readOnly\n type='text'\n value={`rgba(${rgb.join(', ')}, ${alpha}%)`}\n {...props}\n />\n </div>\n );\n }\n return null;\n};\n\nexport type ColorPickerPresetsProps = HTMLAttributes<HTMLDivElement> & {\n colors: string[];\n};\n\nexport const ColorPickerPresets = ({ colors, className, ...props }: ColorPickerPresetsProps) => {\n const { hue, saturation, lightness, alpha, setHue, setSaturation, setLightness, setAlpha } =\n useColorPicker();\n const currentHex = Color.hsl(hue, saturation, lightness, alpha / 100).hex();\n\n return (\n <div className={cn('flex flex-wrap gap-1.5', className)} {...props}>\n {colors.map((hex) => {\n const isActive = Color(hex).hex().toUpperCase() === currentHex.toUpperCase();\n\n return (\n <button\n key={hex}\n type='button'\n className={cn(\n 'size-5 cursor-pointer rounded-[3px] border transition-all',\n 'hover:scale-110 hover:shadow-md',\n isActive && 'ring-ring ring-offset-background ring-2 ring-offset-1',\n )}\n style={{ backgroundColor: hex }}\n onClick={() => {\n const color = Color(hex);\n const [h, s, l] = color.hsl().array();\n\n setHue(h);\n setSaturation(s);\n setLightness(l);\n setAlpha(100);\n }}\n aria-label={hex}\n title={hex}\n />\n );\n })}\n </div>\n );\n};\n\nColorPickerPresets.displayName = 'ColorPickerPresets';\n","import { useEffect, useMemo, useRef, type ComponentProps } from 'react';\nimport { DayPicker, getDefaultClassNames, type DayButton, type Locale } from 'react-day-picker';\n\nimport { cn } from '@/lib/utils';\nimport { Button, buttonVariants } from '@/components/ui/Button/button';\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from 'lucide-react';\n\nfunction Calendar({\n className,\n classNames,\n modifiersClassNames,\n showOutsideDays = true,\n captionLayout = 'dropdown',\n buttonVariant = 'ghost',\n locale,\n formatters,\n components,\n fromYear,\n toYear,\n ...props\n}: ComponentProps<typeof DayPicker> & {\n buttonVariant?: ComponentProps<typeof Button>['variant'];\n fromYear?: number;\n toYear?: number;\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n // These overrides must keep a stable identity across renders. React compares\n // component types by reference, so recreating the arrow components on every\n // render remounts the whole day grid: focus is stolen back to the focused\n // day by CalendarDayButton's effect, and a click in progress is lost because\n // the button node it started on no longer exists.\n const resolvedComponents = useMemo<ComponentProps<typeof DayPicker>['components']>(\n () => ({\n Root: ({ className, rootRef, ...rootProps }) => {\n return (\n <div\n data-slot='calendar'\n ref={rootRef}\n className={cn(className)}\n {...rootProps}\n />\n );\n },\n Chevron: ({ className, orientation, ...chevronProps }) => {\n if (orientation === 'left') {\n return (\n <ChevronLeftIcon className={cn('size-4', className)} {...chevronProps} />\n );\n }\n\n if (orientation === 'right') {\n return (\n <ChevronRightIcon className={cn('size-4', className)} {...chevronProps} />\n );\n }\n\n return <ChevronDownIcon className={cn('size-4', className)} {...chevronProps} />;\n },\n DayButton: (dayButtonProps) => (\n <CalendarDayButton locale={locale} {...dayButtonProps} />\n ),\n WeekNumber: ({ children, ...weekNumberProps }) => {\n return (\n <td {...weekNumberProps}>\n <div className='flex size-(--cell-size) items-center justify-center text-center'>\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }),\n [locale, components],\n );\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'group/calendar bg-background p-3 font-sans [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className,\n )}\n captionLayout={captionLayout}\n startMonth={new Date(fromYear ?? 1900, 0)}\n endMonth={new Date(toYear ?? 2100, 11)}\n locale={locale}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(locale?.code, { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('relative flex flex-col gap-3 md:flex-row', defaultClassNames.months),\n month: cn('flex w-full flex-col gap-3', defaultClassNames.month),\n nav: cn(\n 'absolute inset-x-0 top-0 flex w-full items-center justify-between gap-2',\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100',\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100',\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n 'flex h-(--cell-size) w-full items-center justify-center px-(--cell-size) tracking-tight',\n defaultClassNames.month_caption,\n ),\n dropdowns: cn(\n 'flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-semibold',\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n 'relative rounded-(--cell-radius)',\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn('absolute inset-0 bg-popover opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'font-semibold select-none',\n captionLayout === 'label'\n ? 'text-sm'\n : 'flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground',\n defaultClassNames.caption_label,\n ),\n weekdays: cn('flex gap-1', defaultClassNames.weekdays),\n weekday: cn(\n 'flex-1 rounded-(--cell-radius) text-[0.75rem] font-semibold text-muted-foreground/70 select-none tracking-wide',\n defaultClassNames.weekday,\n ),\n week: cn('mt-2 flex w-full gap-1', defaultClassNames.week),\n week_number_header: cn(\n 'w-(--cell-size) select-none',\n defaultClassNames.week_number_header,\n ),\n week_number: cn(\n 'text-[0.75rem] text-muted-foreground/50 select-none',\n defaultClassNames.week_number,\n ),\n day: cn(\n 'group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)',\n props.showWeekNumber\n ? '[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)'\n : '[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)',\n defaultClassNames.day,\n ),\n range_start: cn(\n 'relative isolate z-0 rounded-l-md bg-primary/8 after:absolute after:inset-y-0 after:right-0 after:w-3 after:bg-primary/8',\n defaultClassNames.range_start,\n ),\n range_middle: cn('rounded-none bg-primary/8', defaultClassNames.range_middle),\n range_end: cn(\n 'relative isolate z-0 rounded-r-md bg-primary/8 after:absolute after:inset-y-0 after:left-0 after:w-3 after:bg-primary/8',\n defaultClassNames.range_end,\n ),\n today: cn('rounded-md bg-accent text-accent-foreground', defaultClassNames.today),\n outside: cn(\n 'text-muted-foreground/50 aria-selected:text-muted-foreground/50',\n defaultClassNames.outside,\n ),\n disabled: cn('text-muted-foreground/40 opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n // Preview of the range that is still being picked. `preview_*` are\n // custom modifiers, so they can only be styled through\n // `modifiersClassNames` (the typed `classNames` map only accepts\n // react-day-picker's own element and selection keys). The fill\n // deliberately mirrors `range_*` so the shape on screen is exactly\n // what a click would commit; the tentative days are told apart by\n // their text colour and outline, applied on the day button below.\n modifiersClassNames={{\n preview_start:\n 'relative isolate z-0 rounded-l-md bg-primary/8 after:absolute after:inset-y-0 after:right-0 after:w-3 after:bg-primary/8',\n preview_middle: 'rounded-none bg-primary/8',\n preview_end:\n 'relative isolate z-0 rounded-r-md bg-primary/8 after:absolute after:inset-y-0 after:left-0 after:w-3 after:bg-primary/8',\n ...modifiersClassNames,\n }}\n components={resolvedComponents}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n locale,\n ...props\n}: ComponentProps<typeof DayButton> & { locale?: Partial<Locale> }) {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n // Tentative end of the range being picked: the preview edge the pointer or\n // keyboard focus currently sits on. The already-committed start is also a\n // preview edge, but it is selected, so it keeps its solid filled styling.\n const isPreviewEdge = Boolean(\n (modifiers.preview_start || modifiers.preview_end) && !modifiers.selected,\n );\n\n return (\n <Button\n ref={ref}\n variant='ghost'\n size='icon-sm'\n data-day={day.date.toLocaleDateString(locale?.code)}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n data-preview-middle={Boolean(modifiers.preview_middle)}\n data-preview-edge={isPreviewEdge}\n className={cn(\n 'group-data-[focused=true]/day:ring-primary/40 data-[preview-edge=true]:ring-primary/50 data-[preview-edge=true]:text-primary data-[preview-middle=true]:text-primary data-[range-end=true]:!bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:!bg-primary/8 data-[range-middle=true]:text-foreground data-[range-start=true]:!bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:!bg-primary data-[selected-single=true]:text-primary-foreground relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 !rounded-md border-0 !bg-transparent leading-none font-normal transition-colors duration-150 group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:rounded-md group-data-[focused=true]/day:ring-[2px] hover:!bg-transparent data-[preview-edge=true]:rounded-md data-[preview-edge=true]:font-medium data-[preview-edge=true]:ring-[2px] data-[preview-middle=true]:font-medium data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md data-[selected-single=true]:rounded-md [&>span]:text-xs [&>span]:font-medium [&>span]:opacity-75',\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","import { useMemo, useState } from 'react';\nimport { format, isSameDay } from 'date-fns';\nimport { CalendarIcon } from 'lucide-react';\nimport type { DateRange, Matcher, Modifiers } from 'react-day-picker';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { Calendar } from '@/components/ui/Calendar/calendar';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\n\n/** Options that mean the same thing whichever selection mode is active. */\ninterface DatePickerBaseProps {\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n /** Earliest selectable date. Earlier days are disabled and unreachable. */\n fromDate?: Date;\n /** Latest selectable date. Later days are disabled and unreachable. */\n toDate?: Date;\n /** Months rendered side by side. Defaults to 1. */\n numberOfMonths?: number;\n}\n\ninterface DatePickerSingleProps extends DatePickerBaseProps {\n mode?: 'single';\n selected?: Date;\n onSelect?: (date: Date | undefined) => void;\n}\n\ninterface DatePickerRangeProps extends DatePickerBaseProps {\n mode: 'range';\n selected?: DateRange;\n onSelect?: (range: DateRange | undefined) => void;\n}\n\n/**\n * Discriminated on `mode`, so `selected` and `onSelect` are always the pair that\n * belongs to it. A flat union would accept `mode='range'` with a single `Date`,\n * which only fails at runtime once the popover is opened.\n */\ntype DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;\n\nfunction DatePicker(props: DatePickerProps) {\n // Only the mode-independent options are destructured. `mode`, `selected` and\n // `onSelect` stay on `props` because destructuring them would break the\n // discriminant and force casts back into every read.\n const {\n placeholder = 'Pick a date',\n disabled = false,\n className,\n fromDate,\n toDate,\n numberOfMonths = 1,\n } = props;\n\n const [open, setOpen] = useState(false);\n // In range mode react-day-picker completes the range on the very first\n // click (it returns `{ from: day, to: day }`), so the value alone cannot\n // tell a start pick apart from an end pick. This flag tracks the step so\n // the popover stays open until the user actually picks the end date.\n const [awaitingRangeEnd, setAwaitingRangeEnd] = useState(false);\n // Day the pointer or keyboard focus is currently on. Only meaningful while\n // waiting for the range end, where it drives the preview of the range a\n // click would commit.\n const [previewDate, setPreviewDate] = useState<Date | undefined>(undefined);\n\n const label = useMemo(() => {\n if (props.mode === 'range') {\n const range = props.selected;\n if (!range?.from) return placeholder;\n if (!range.to) return `${format(range.from, 'MMM d, yyyy')} – …`;\n return `${format(range.from, 'MMM d, yyyy')} – ${format(range.to, 'MMM d, yyyy')}`;\n }\n return props.selected ? format(props.selected, 'MMM d, yyyy') : placeholder;\n }, [props.mode, props.selected, placeholder]);\n\n const handleOpenChange = (nextOpen: boolean) => {\n setOpen(nextOpen);\n // Every time the popover is dismissed the next session starts over\n // from the range start.\n if (!nextOpen) {\n setAwaitingRangeEnd(false);\n setPreviewDate(undefined);\n }\n };\n\n const handleRangeSelect = (range: DateRange | undefined, triggerDate: Date) => {\n // Only ever wired to the range calendar; the guard is what lets the\n // discriminant narrow `onSelect` to the range signature.\n if (props.mode !== 'range') return;\n const emit = props.onSelect;\n\n // The first pick of a session always starts a brand new range, so\n // `range` from react-day-picker is discarded here. Left alone, it\n // adjusts the previously committed range instead: on a stored 10–28,\n // clicking 12 yields 10–12 (`addToRange` moves whichever end the date\n // sits after), so 12–28 would be unreachable. Forcing an open range\n // also makes single-day ranges selectable, which the adjust path\n // turns into a clear.\n if (!awaitingRangeEnd) {\n setAwaitingRangeEnd(true);\n emit?.({ from: triggerDate, to: undefined });\n return;\n }\n\n emit?.(range);\n\n // Second pick did not complete the range (it was cleared): stay open\n // and wait for a valid end date.\n if (!range?.from || !range.to) {\n setAwaitingRangeEnd(!!range?.from);\n return;\n }\n\n setAwaitingRangeEnd(false);\n setPreviewDate(undefined);\n setOpen(false);\n };\n\n const rangeFrom = props.mode === 'range' ? props.selected?.from : undefined;\n\n // Custom modifiers that paint the range still being picked. `preview_middle`\n // uses a DateInterval, which excludes both ends, so the two endpoints keep\n // their own start/end styling. Emitted as `undefined` when there is nothing\n // to preview so no stale modifier reaches the calendar.\n const previewModifiers = useMemo(() => {\n if (!awaitingRangeEnd || !rangeFrom || !previewDate) return undefined;\n // Hovering the start itself would preview an empty range.\n if (isSameDay(rangeFrom, previewDate)) return undefined;\n\n // The pointer can move to either side of the committed start, so the\n // preview endpoints are ordered rather than assumed.\n const [start, end] =\n previewDate < rangeFrom ? [previewDate, rangeFrom] : [rangeFrom, previewDate];\n\n return {\n preview_start: start,\n preview_middle: { after: start, before: end },\n preview_end: end,\n };\n }, [awaitingRangeEnd, rangeFrom, previewDate]);\n\n const handleDayPreview = (day: Date, dayModifiers: Modifiers) => {\n // Outside the second-pick step there is nothing to preview, and storing\n // the day anyway would re-render the calendar on every focus event.\n if (!awaitingRangeEnd) return;\n // A day that cannot be picked must not be previewed as an endpoint.\n if (dayModifiers.disabled || dayModifiers.hidden) return;\n // The calendar rebuilds its days on every render, so `day` is a fresh\n // Date instance each time. Keeping the current value when it points at\n // the same day stops that identity churn from re-rendering the calendar,\n // which would make the focus scope refocus and fire this handler again.\n setPreviewDate((current) => (current && isSameDay(current, day) ? current : day));\n };\n\n // react-day-picker v10 dropped `fromDate`/`toDate`. Bounds are now expressed\n // as `disabled` matchers (which days can be picked) plus `startMonth`/\n // `endMonth` (which months can be navigated to). Each key is only emitted\n // when it has a value, because the Calendar wrapper spreads these last and\n // an explicit `undefined` would wipe its own month defaults.\n const dateConstraints = useMemo(() => {\n const disabledMatchers: Matcher[] = [];\n if (fromDate) disabledMatchers.push({ before: fromDate });\n if (toDate) disabledMatchers.push({ after: toDate });\n\n return {\n ...(disabledMatchers.length > 0 && { disabled: disabledMatchers }),\n ...(fromDate && { startMonth: fromDate }),\n ...(toDate && { endMonth: toDate }),\n };\n }, [fromDate, toDate]);\n\n const hasValue = props.mode === 'range' ? !!props.selected?.from : !!props.selected;\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n data-slot='date-picker-trigger'\n variant='primary'\n disabled={disabled}\n className={cn(\n 'w-60 justify-start gap-2 font-normal',\n !hasValue && 'text-white',\n className,\n )}>\n <CalendarIcon className='size-4 shrink-0' />\n <span className='truncate'>{label}</span>\n </Button>\n </PopoverTrigger>\n <PopoverContent data-slot='date-picker-content' className='w-auto p-0' align='start'>\n {props.mode === 'range' ? (\n // Clearing the preview on the wrapper instead of per day\n // avoids the blank frame `onDayMouseLeave` would cause when\n // the pointer travels from one day to the next.\n <div onMouseLeave={() => setPreviewDate(undefined)}>\n <Calendar\n mode='range'\n selected={props.selected}\n onSelect={handleRangeSelect}\n modifiers={previewModifiers}\n onDayMouseEnter={handleDayPreview}\n // Keeps the preview in step with arrow-key\n // navigation, not just the pointer.\n onDayFocus={handleDayPreview}\n numberOfMonths={numberOfMonths}\n autoFocus\n {...dateConstraints}\n />\n </div>\n ) : (\n <Calendar\n mode='single'\n selected={props.selected}\n onSelect={(date) => {\n props.onSelect?.(date);\n setOpen(false);\n }}\n numberOfMonths={numberOfMonths}\n autoFocus\n {...dateConstraints}\n />\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DatePicker };\nexport type { DatePickerProps, DatePickerSingleProps, DatePickerRangeProps, DateRange };\n","import { Fragment, forwardRef, useCallback, type HTMLAttributes, type ReactNode, type SVGAttributes } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { BellIcon, CircleHelpIcon, ChevronDownIcon, SearchIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { sanitizeHref } from '@/utils/urlSecurity';\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/Avatar/avatar';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface NavbarDropdownItem {\n href: string;\n label: string;\n icon?: ReactNode;\n}\n\nexport interface NavbarNavLink {\n href: string;\n label: string;\n active?: boolean;\n icon?: ReactNode;\n /** If provided, hovering this link shows a dropdown */\n dropdownItems?: NavbarDropdownItem[];\n}\n\nexport interface NavbarUtilityLink {\n href: string;\n label: string;\n}\n\nexport interface NavbarNotification {\n id: string;\n title: string;\n description?: string;\n read?: boolean;\n timestamp?: string;\n}\n\nexport interface NavbarProps extends HTMLAttributes<HTMLElement> {\n logo?: ReactNode;\n brandName?: string;\n utilityLinks?: NavbarUtilityLink[];\n navigationLinks?: NavbarNavLink[];\n notificationCount?: number;\n notifications?: NavbarNotification[];\n avatarSrc?: string;\n avatarFallback?: string;\n showUtilityBar?: boolean;\n onNavLinkClick?: (href: string) => void;\n onSearchClick?: () => void;\n onHelpClick?: () => void;\n onAvatarClick?: () => void;\n onNotificationClick?: (id: string) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Default Logo\n// ---------------------------------------------------------------------------\n\nconst Logo = (props: SVGAttributes<SVGElement>) => (\n <svg\n aria-label='Logo'\n role='img'\n fill='none'\n height='1em'\n viewBox='0 0 324 323'\n width='1em'\n xmlns='http://www.w3.org/2000/svg'\n {...props}>\n <rect fill='currentColor' height='323' rx='161.5' width='323' x='0.5' />\n <circle cx='162' cy='161.5' fill='white' r='60' />\n </svg>\n);\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\nconst defaultUtilityLinks: NavbarUtilityLink[] = [\n { href: '#profile', label: 'My profile' },\n { href: '#documents', label: 'Documents' },\n { href: '#settings', label: 'Settings' },\n];\n\nconst defaultNavigationLinks: NavbarNavLink[] = [\n { href: '#', label: 'Home' },\n {\n href: '#vacations',\n label: 'Vacations',\n dropdownItems: [\n { href: '#vacations/request', label: 'Request vacation' },\n { href: '#vacations/history', label: 'History' },\n { href: '#vacations/calendar', label: 'Calendar' },\n ],\n },\n { href: '#payroll', label: 'Payroll', active: true },\n { href: '#apps', label: 'Apps' },\n { href: '#help', label: 'Help' },\n];\n\n// ---------------------------------------------------------------------------\n// NavLink with optional hover dropdown\n// ---------------------------------------------------------------------------\n\nfunction NavLinkItem({\n link,\n onNavLinkClick,\n}: {\n link: NavbarNavLink;\n onNavLinkClick?: (href: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const hasDropdown = !!link.dropdownItems?.length;\n\n return (\n <div\n ref={ref}\n className='relative flex h-14 items-center'\n onMouseEnter={() => hasDropdown && setOpen(true)}\n onMouseLeave={() => hasDropdown && setOpen(false)}>\n <a\n href={sanitizeHref(link.href)}\n onClick={(e) => {\n e.preventDefault();\n onNavLinkClick?.(link.href);\n }}\n className={cn(\n 'relative flex h-14 items-center gap-1.5 px-4 text-sm transition-colors select-none',\n link.active\n ? 'text-foreground after:bg-secondary font-semibold after:absolute after:right-0 after:bottom-0 after:left-0 after:h-0.5 after:rounded-full'\n : 'text-muted-foreground hover:text-foreground',\n )}>\n {link.icon}\n {link.label}\n {hasDropdown && (\n <ChevronDownIcon\n className={cn(\n 'size-3 transition-transform duration-200',\n open && 'rotate-180',\n )}\n />\n )}\n </a>\n\n {/* Dropdown */}\n {hasDropdown && (\n <div\n className={cn(\n 'border-border bg-popover absolute top-full left-0 z-50 min-w-44 rounded-lg border shadow-lg transition-all duration-150',\n open\n ? 'pointer-events-auto translate-y-0 opacity-100'\n : 'pointer-events-none -translate-y-1 opacity-0',\n )}>\n <div className='p-1'>\n {link.dropdownItems!.map((item, i) => (\n <a\n key={i}\n href={sanitizeHref(item.href)}\n onClick={(e) => {\n e.preventDefault();\n onNavLinkClick?.(item.href);\n setOpen(false);\n }}\n className='text-foreground hover:bg-muted flex items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors'>\n {item.icon}\n {item.label}\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Navbar\n// ---------------------------------------------------------------------------\n\n/**\n * @remarks\n * Navigation dropdowns use `absolute` positioning without a Portal. If this\n * component is placed inside a container with `overflow-hidden`, dropdowns will\n * be clipped. Ensure all ancestor containers use `overflow-visible`.\n */\nexport const Navbar = forwardRef<HTMLElement, NavbarProps>(\n (\n {\n className,\n logo = <Logo />,\n brandName = 'Total Portal',\n utilityLinks = defaultUtilityLinks,\n navigationLinks = defaultNavigationLinks,\n notificationCount = 1,\n notifications,\n avatarSrc,\n avatarFallback,\n showUtilityBar = true,\n onNavLinkClick,\n onSearchClick,\n onHelpClick,\n onAvatarClick,\n onNotificationClick,\n ...props\n },\n ref,\n ) => {\n const containerRef = useRef<HTMLElement>(null);\n const notifRef = useRef<HTMLDivElement>(null);\n const [isMobile, setIsMobile] = useState(false);\n const [notifOpen, setNotifOpen] = useState(false);\n\n const notifArray = Array.isArray(notifications) ? notifications : undefined;\n const unreadCount = notifArray\n ? notifArray.filter((n) => !n.read).length\n : notificationCount;\n\n useEffect(() => {\n if (!notifOpen) return;\n const handler = (e: MouseEvent) => {\n if (notifRef.current && !notifRef.current.contains(e.target as Node)) {\n setNotifOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [notifOpen]);\n\n useEffect(() => {\n const checkWidth = () => {\n if (containerRef.current) {\n setIsMobile(containerRef.current.offsetWidth < 768);\n }\n };\n checkWidth();\n const ro = new ResizeObserver(checkWidth);\n if (containerRef.current) ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, []);\n\n const combinedRef = useCallback(\n (node: HTMLElement | null) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n return (\n <header\n ref={combinedRef}\n className={cn(\n 'sticky top-0 z-50 w-full overflow-visible shadow-sm [&_*]:no-underline',\n className,\n )}\n {...props}>\n {/* ── Row 2: Brand + Nav bar ── */}\n <div className='bg-background border-border border-b px-4 md:px-6'>\n <div className='relative mx-auto flex h-14 max-w-screen-2xl items-center gap-6 overflow-visible'>\n {/* Logo + brand name */}\n <div className='flex shrink-0 items-center gap-3'>\n <span className='flex size-30 items-center justify-center text-xl text-white'>\n {logo}\n </span>\n {!isMobile && (\n <span className='text-primary font-bold'>{brandName}</span>\n )}\n </div>\n\n {/* Search */}\n {!isMobile && (\n <div className='relative w-80'>\n <SearchIcon className='text-muted-foreground/50 pointer-events-none absolute top-1/2 left-3 size-3.5 -translate-y-1/2' />\n <input\n type='text'\n placeholder='Search people, apps, requests ...'\n onClick={onSearchClick}\n className='border-border bg-muted text-foreground placeholder:text-muted-foreground/60 focus:border-primary h-8 w-full rounded-full border pr-4 pl-10 text-sm transition-colors outline-none'\n />\n </div>\n )}\n\n {/* Nav links */}\n <nav className='ml-auto flex h-full items-center'>\n {navigationLinks.map((link, i) => (\n <NavLinkItem key={i} link={link} onNavLinkClick={onNavLinkClick} />\n ))}\n </nav>\n </div>\n </div>\n {/* ── Row 1: Utility bar ── */}\n {showUtilityBar && <div className='bg-background border-border border-b px-4 md:px-6'>\n <div className='mx-auto flex h-9 max-w-screen-2xl items-center justify-between'>\n <nav className='flex items-center'>\n {utilityLinks.map((link, i) => (\n <Fragment key={i}>\n {i > 0 && (\n <span className='text-border mx-3 select-none'>|</span>\n )}\n <a\n href={sanitizeHref(link.href)}\n className='text-muted-foreground hover:text-foreground text-xs transition-colors'>\n {link.label}\n </a>\n </Fragment>\n ))}\n </nav>\n\n <div className='flex items-center gap-1'>\n <div ref={notifRef} className='relative'>\n <button\n type='button'\n onClick={() => notifArray && setNotifOpen((o) => !o)}\n className='text-muted-foreground hover:text-foreground hover:bg-muted relative flex size-7 cursor-pointer items-center justify-center rounded-md transition-colors'>\n <BellIcon className='size-3.5' />\n {unreadCount > 0 && (\n <span className='bg-secondary absolute top-1 right-1 flex size-1.5 rounded-full' />\n )}\n </button>\n {notifArray && (\n <div\n className={cn(\n 'border-border bg-popover absolute right-0 top-full z-50 w-80 overflow-hidden rounded-lg border shadow-lg transition-all duration-150',\n notifOpen\n ? 'pointer-events-auto translate-y-1 opacity-100'\n : 'pointer-events-none -translate-y-1 opacity-0',\n )}>\n <div className='border-border border-b px-4 py-2'>\n <p className='text-sm font-semibold'>Notifications</p>\n </div>\n <div className='max-h-80 overflow-y-auto'>\n {notifArray.length === 0 ? (\n <p className='text-muted-foreground px-4 py-6 text-center text-sm'>\n No notifications\n </p>\n ) : (\n notifArray.map((n) => (\n <button\n key={n.id}\n type='button'\n onClick={() => {\n onNotificationClick?.(n.id);\n setNotifOpen(false);\n }}\n className={cn(\n 'hover:bg-muted flex w-full items-start gap-3 px-4 py-3 text-left transition-colors',\n !n.read && 'bg-muted/40',\n )}>\n <div className='min-w-0 flex-1'>\n <p\n className={cn(\n 'text-sm',\n !n.read && 'font-semibold',\n )}>\n {n.title}\n </p>\n {n.description && (\n <p className='text-muted-foreground mt-0.5 truncate text-xs'>\n {n.description}\n </p>\n )}\n {n.timestamp && (\n <p className='text-muted-foreground mt-1 text-xs'>\n {n.timestamp}\n </p>\n )}\n </div>\n {!n.read && (\n <span className='bg-secondary mt-1.5 size-2 shrink-0 rounded-full' />\n )}\n </button>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n <button\n type='button'\n onClick={onHelpClick}\n className='text-muted-foreground hover:text-foreground hover:bg-muted flex size-7 cursor-pointer items-center justify-center rounded-md transition-colors'>\n <CircleHelpIcon className='size-3.5' />\n </button>\n {(avatarSrc || avatarFallback) && (\n <button\n type='button'\n onClick={onAvatarClick}\n className='ml-1 cursor-pointer rounded-full'>\n <Avatar size='sm'>\n {avatarSrc && <AvatarImage src={avatarSrc} alt={avatarFallback ?? 'User avatar'} />}\n <AvatarFallback>{avatarFallback}</AvatarFallback>\n </Avatar>\n </button>\n )}\n </div>\n </div>\n </div>}\n </header>\n );\n },\n);\n\nNavbar.displayName = 'Navbar';\n\nexport { Logo };\n","import { type ComponentProps } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { NavigationMenu as NavigationMenuPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon } from 'lucide-react';\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n viewport?: boolean;\n}) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot='navigation-menu'\n data-viewport={viewport}\n className={cn(\n 'group/navigation-menu relative flex max-w-max flex-1 items-center justify-center',\n className,\n )}\n {...props}>\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n );\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot='navigation-menu-list'\n className={cn(\n 'group flex flex-1 list-none items-center justify-center gap-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item\n data-slot='navigation-menu-item'\n className={cn('relative', className)}\n {...props}\n />\n );\n}\n\nconst navigationMenuTriggerStyle = cva(\n 'group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-3xl px-4.5 py-2.5 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/30 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-[state=open]:bg-muted/50 data-[state=open]:hover:bg-muted data-[state=open]:focus:bg-muted',\n);\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot='navigation-menu-trigger'\n className={cn(navigationMenuTriggerStyle(), 'group', className)}\n {...props}>\n {children}{' '}\n <ChevronDownIcon\n className='relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180'\n aria-hidden='true'\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot='navigation-menu-content'\n className={cn(\n 'group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:ring-foreground/5 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out group-data-[viewport=false]/navigation-menu:dark:ring-foreground/10 group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 top-0 left-0 w-full p-2.5 pr-3 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-3xl group-data-[viewport=false]/navigation-menu:shadow-lg group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none md:absolute md:w-auto',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div className={cn('absolute top-full left-0 isolate z-50 flex justify-center')}>\n <NavigationMenuPrimitive.Viewport\n data-slot='navigation-menu-viewport'\n className={cn(\n 'origin-top-center bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:zoom-in-90 data-[state=closed]:animate-out data-[state=closed]:zoom-out-90 relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-full overflow-hidden rounded-3xl shadow-lg ring-1 duration-100 md:w-(--radix-navigation-menu-viewport-width)',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot='navigation-menu-link'\n className={cn(\n \"hover:bg-muted focus:bg-muted focus-visible:ring-ring/30 data-[active=true]:bg-muted/50 data-[active=true]:hover:bg-muted data-[active=true]:focus:bg-muted flex items-center gap-1.5 rounded-3xl p-3 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-2xl [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot='navigation-menu-indicator'\n className={cn(\n 'data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in top-full z-1 flex h-1.5 items-end justify-center overflow-hidden',\n className,\n )}\n {...props}>\n <div className='bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md' />\n </NavigationMenuPrimitive.Indicator>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n};\n","/**\n * The server-safe half of the authorization system.\n *\n * Everything in this module is a pure function over plain data: no React, no hooks, no\n * context, no module-level mutable state. That is not incidental — it is the contract.\n * `src/policy.ts` re-exports this file as the `@bizapps/ui/policy` entry point, which\n * tsup deliberately does NOT stamp with `\"use client\"`, so a Next.js Server Component,\n * Route Handler or Server Action can import it and evaluate permissions on the server.\n *\n * **Never import React (or anything that transitively does) into this file.** The build\n * asserts it: `tsup.config.ts` fails if `dist/policy.js` contains a react import or a\n * `\"use client\"` directive. Breaking that turns every server-side caller into a client\n * reference, silently.\n *\n * The client half — `AbilityProvider`, `useAbility`, `useCan`, `Can` — consumes these\n * same functions, so there is exactly one implementation of the matching rules. Two\n * implementations of an authorization primitive drift, and drift on a security boundary\n * is invisible until it matters.\n */\nimport type { Permission } from './permission-catalog';\n\n/**\n * Tests one entry of the user's grant set against one requested permission.\n *\n * @param pattern - an entry from the user's grant set; may contain `*` as a segment\n * wildcard, or be a bare `*` meaning \"everything\"\n * @param permission - the concrete permission being requested\n *\n * Matching is arity-strict: a grant of `users.*` covers `users.delete`, but a grant of\n * `users` does NOT, and neither covers `users.delete.confirm`. That rules out the\n * ambiguity of whether `users` names the resource or the namespace.\n */\nfunction matchPermission(pattern: string, permission: string): boolean {\n if (pattern === '*') return true;\n if (pattern === permission) return true;\n const patternParts = pattern.split('.');\n const permParts = permission.split('.');\n if (patternParts.length !== permParts.length) return false;\n return patternParts.every((part, i) => part === '*' || part === permParts[i]);\n}\n\n/** Whether any entry in the grant set covers the requested permission. */\nfunction matchesAny(permissionSet: Set<string>, permission: string): boolean {\n if (permissionSet.has(permission)) return true;\n for (const pattern of permissionSet) {\n if (matchPermission(pattern, permission)) return true;\n }\n return false;\n}\n\n/**\n * Evaluates a permission requirement against a grant set.\n *\n * The order of the first two checks is load-bearing and must not be swapped: an empty\n * required list denies **even for a super-grant holder**, because an empty list means\n * \"nothing satisfies this\", not \"anything does\".\n *\n * @param permissionSet - the user's grants\n * @param perms - the permission(s) required\n * @param mode - with an array, `'any'` (default) passes when at least one matches,\n * `'all'` requires every one\n */\nfunction can(\n permissionSet: Set<string>,\n perms: Permission | Permission[],\n mode: 'any' | 'all' = 'any',\n): boolean {\n const list = Array.isArray(perms) ? perms : [perms];\n if (list.length === 0) return false;\n if (permissionSet.has('*')) return true;\n if (mode === 'all') {\n return list.every((p) => matchesAny(permissionSet, p));\n }\n return list.some((p) => matchesAny(permissionSet, p));\n}\n\nexport { can, matchPermission, matchesAny };\n","import { createContext, useCallback, useContext, useMemo, useState, type ReactNode } from 'react';\n\nimport type { Permission } from '../permission-catalog';\nimport { can as evaluateCan, matchPermission } from '../policy';\n\n/** `'loading'` while the grant set is unresolved, `'ready'` once it is known. */\ntype AbilityStatus = 'loading' | 'ready';\n\ninterface AbilityContextValue {\n can: (permissions: Permission | Permission[], mode?: 'any' | 'all') => boolean;\n setAbilities: (permissions: string[]) => void;\n clearAbilities: () => void;\n /**\n * `'loading'` while the grant set is genuinely unresolved, `'ready'` once it\n * is known — including when it is known to be empty. This is what makes\n * \"still loading\" distinguishable from \"loaded, zero grants\": both produce\n * an empty set, so without this flag a consumer cannot tell them apart.\n */\n status: AbilityStatus;\n}\n\ninterface AbilityProviderProps {\n children: ReactNode;\n permissions?: string[];\n}\n\nconst AbilityContext = createContext<AbilityContextValue | undefined>(undefined);\nAbilityContext.displayName = 'AbilityContext';\n\nfunction AbilityProvider({ children, permissions }: AbilityProviderProps) {\n const [permissionSet, setPermissionSet] = useState<Set<string>>(\n () => new Set(permissions ?? []),\n );\n\n // `permissions === undefined` means uncontrolled: the grant set is unknown\n // until setAbilities/clearAbilities is called. A controlled `[]` is a\n // KNOWN empty set, not an unresolved one — the distinction is the whole\n // point of the status flag.\n const [imperativelyResolved, setImperativelyResolved] = useState(false);\n const status: AbilityStatus =\n permissions !== undefined || imperativelyResolved ? 'ready' : 'loading';\n\n // The matching rules live in `../policy` so the server can use them too; this\n // callback only binds them to the provider's current grant set. Imported as\n // `evaluateCan` because `can` is this scope's own context value.\n const can = useCallback(\n (perms: Permission | Permission[], mode: 'any' | 'all' = 'any'): boolean =>\n evaluateCan(permissionSet, perms, mode),\n [permissionSet],\n );\n\n const setAbilities = useCallback((perms: string[]) => {\n setPermissionSet(new Set(perms));\n setImperativelyResolved(true);\n }, []);\n\n const clearAbilities = useCallback(() => {\n setPermissionSet(new Set());\n setImperativelyResolved(true);\n }, []);\n\n // Sync from the controlled `permissions` prop only when its CONTENT changes.\n // Comparing by content (not reference) avoids two footguns:\n // 1. An inline `permissions={[...]}` array is a new reference every render —\n // a reference-based dependency would re-sync (and wipe imperative\n // setAbilities/clearAbilities calls) on every parent re-render.\n // 2. When `permissions` is undefined (uncontrolled / imperative usage),\n // we never sync, so setAbilities/clearAbilities are the source of truth.\n //\n // Order-insensitive: the grant set is a set, so a reordered response from\n // the backend is NOT a content change. Keying on the raw order would\n // re-sync and wipe imperative setAbilities/clearAbilities state.\n const permissionKey = permissions === undefined ? null : [...permissions].sort().join('|');\n // Synced during render (React's \"adjust state when a prop changes\" pattern) rather than in an\n // effect: an effect let one render commit with the new `status` but the previous grant set,\n // so consumers briefly showed \"no access\" (e.g. an empty menu) right as permissions arrived.\n const [syncedKey, setSyncedKey] = useState(permissionKey);\n if (permissionKey !== null && permissionKey !== syncedKey) {\n setSyncedKey(permissionKey);\n setPermissionSet(new Set(permissions));\n }\n\n const value = useMemo(\n () => ({ can, setAbilities, clearAbilities, status }),\n [can, setAbilities, clearAbilities, status],\n );\n\n return <AbilityContext.Provider value={value}>{children}</AbilityContext.Provider>;\n}\n\nfunction useAbility(): AbilityContextValue {\n const context = useContext(AbilityContext);\n if (!context) {\n throw new Error('useAbility must be used within an AbilityProvider');\n }\n return context;\n}\n\n/**\n * Like `useAbility`, but returns `undefined` outside an `AbilityProvider` instead of throwing.\n * For components whose permission checks are optional (they only apply when the data declares\n * permissions), so they keep working in apps that do not use the provider.\n *\n * Internal to the design system: it is not exported from the package entry (`src/main.ts`).\n */\nfunction useOptionalAbility(): AbilityContextValue | undefined {\n return useContext(AbilityContext);\n}\n\nfunction useCan(permissions: Permission | Permission[], mode: 'any' | 'all' = 'any'): boolean {\n const { can } = useAbility();\n return can(permissions, mode);\n}\n\n/** Returns whether the grant set is resolved yet. Useful for skeletons without a `Can` wrapper. */\nfunction useAbilityStatus(): AbilityStatus {\n return useAbility().status;\n}\n\nexport {\n AbilityProvider,\n useAbility,\n useAbilityStatus,\n useCan,\n useOptionalAbility,\n matchPermission,\n};\nexport type { AbilityContextValue, AbilityProviderProps, AbilityStatus };\n","/**\n * AUTO-GENERATED — do not edit by hand.\n *\n * Regenerate with `pnpm generate-permissions`, which reads the catalog from the\n * Nexus backend. The list is committed so the library build never depends on a\n * live backend call.\n *\n * While this list is empty, `Permission` degrades to plain `string` and the\n * development-time unknown-permission warning is skipped entirely — an empty\n * catalog must never produce false positives.\n */\nconst KNOWN_PERMISSIONS = [] as const;\n\ntype KnownPermission = (typeof KNOWN_PERMISSIONS)[number];\n\nexport { KNOWN_PERMISSIONS };\nexport type { KnownPermission };\n","import { KNOWN_PERMISSIONS, type KnownPermission } from './permissions.generated';\n\n/**\n * A permission string in `resource.action` or `module.resource.action`\n * dot-notation, lowercase, with `*` as a segment wildcard and a bare `*` as the\n * super-grant.\n *\n * Known catalog entries are suggested by autocomplete; any other string is still\n * accepted, so a permission the catalog has not caught up with never blocks a\n * build. The `(string & {})` half is the TypeScript idiom that keeps the literal\n * suggestions from collapsing into plain `string`.\n */\ntype Permission = KnownPermission | (string & {});\n\nconst CATALOG: ReadonlySet<string> = new Set<string>(KNOWN_PERMISSIONS);\n\n/** Permissions already warned about, so a re-render does not re-log. */\nconst warned = new Set<string>();\n\n/** Test-only hook to clear the warned set between cases. */\nfunction __resetWarnedPermissions(): void {\n warned.clear();\n}\n\n/**\n * Logs a development-only warning for a requested permission that is not in the\n * generated catalog. This is the only defense against the silent-typo failure\n * mode: without it, a misspelled permission type-checks and hides its control\n * forever with nothing logged.\n *\n * No-ops in production, and no-ops entirely while the catalog is empty so an\n * ungenerated catalog cannot produce false positives.\n */\nfunction warnUnknownPermission(permission: Permission | Permission[]): void {\n if (process.env.NODE_ENV === 'production') return;\n if (CATALOG.size === 0) return;\n\n const requested = Array.isArray(permission) ? permission : [permission];\n\n for (const entry of requested) {\n // Wildcards belong in the user's GRANT set, not in a request. Skip them\n // rather than reporting every wildcard as unknown.\n if (entry.includes('*')) continue;\n if (CATALOG.has(entry) || warned.has(entry)) continue;\n\n warned.add(entry);\n console.warn(\n `[Can] Unknown permission \"${entry}\". It is not in the generated permission catalog. Check for a typo, or regenerate the catalog with \\`pnpm generate-permissions\\`.`,\n );\n }\n}\n\nexport { warnUnknownPermission, __resetWarnedPermissions, CATALOG as PERMISSION_CATALOG };\nexport type { Permission };\n","import {\n cloneElement,\n Fragment,\n isValidElement,\n type ComponentProps,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type PointerEventHandler,\n type ReactElement,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/Tooltip/tooltip';\nimport { cn } from '@/lib/utils';\nimport { useAbility, type AbilityStatus } from './ability-context';\nimport { warnUnknownPermission, type Permission } from '../permission-catalog';\n\ninterface CanState {\n /**\n * Whether the permission check passed, after `negate` is applied. While\n * `status` is `'loading'`, the underlying check is always `false` — so\n * `allowed` is `false` for `Can` (fail-closed) but `true` for `CanNot`\n * (fail-open: negating an unresolved `false` flips it to `true`).\n */\n allowed: boolean;\n /** Whether the grant set has resolved yet. */\n status: AbilityStatus;\n}\n\ninterface CanProps {\n permission: Permission | Permission[];\n mode?: 'any' | 'all';\n negate?: boolean;\n /**\n * `'hide'` (default) removes the subtree and renders `fallback` instead.\n * `'disable'` keeps the subtree visible but non-interactive, with `reason`\n * surfaced in a tooltip. Use `'disable'` when the user should know the\n * action exists and why it is unavailable.\n */\n behavior?: 'hide' | 'disable';\n /**\n * Explanation shown in a tooltip when `behavior='disable'` denies. Accepts a\n * node so callers can pass translated content without the library taking an\n * i18n dependency. No tooltip is rendered when omitted.\n */\n reason?: ReactNode;\n fallback?: ReactNode;\n /**\n * Rendered while the grant set is unresolved. Unlike `reason` and `fallback`, `null` and\n * \"omitted\" are deliberately NOT the same value here: a node renders that node;\n * `loading={null}` renders nothing; omitting `loading` entirely falls through to\n * `fallback` (or, for `CanNot`, lets the fail-open children render). The distinction\n * exists because for `loading` — and only for `loading` — \"render nothing\" and \"fall\n * through\" are genuinely different outcomes: `CanNot` is fail-open during loading, so\n * without an explicit `loading={null}` its children render immediately and then\n * disappear once the grant set resolves. Pass `loading={null}` to suppress that flash.\n */\n loading?: ReactNode;\n children: ReactNode | ((state: CanState) => ReactNode);\n}\n\ntype CanNotProps = Omit<CanProps, 'negate'>;\n\n/**\n * The ONLY keys allowed through to a denied control. Everything else is blocked.\n *\n * This is an ALLOW-LIST, and deliberately so. It replaced a deny-list of activation keys\n * (`Enter`, `' '`, `Spacebar`), which was wrong by construction on an authorization\n * boundary: enumerating what to block means every primitive that opens on a key nobody\n * thought of is a hole. `DropdownMenuTrigger` opens on `ArrowDown`; `SelectTrigger`'s\n * `OPEN_KEYS` are `[' ', 'Enter', 'ArrowUp', 'ArrowDown']`; `Select` also opens on\n * typeahead, and `Home`/`End` jump to the first/last item. Since focus is deliberately\n * reachable on a denied control — that is the whole point of `behavior='disable'` — a deny\n * list meant Tab-then-ArrowDown still opened a denied menu. Adding the arrows would have\n * closed the two cases we happened to know about and left the shape of the hole intact.\n *\n * Inverting it makes the gate robust by construction: a new primitive can pick any key it\n * likes and it is blocked by default. The cost is that the allow-list has to justify each\n * entry, which is the right direction for the burden of proof to run.\n *\n * `Tab` is here because it is how a keyboard user reaches the control to discover the\n * reason and then leaves again — blocking it would trap focus. Shift+Tab is the same\n * `event.key`, so it needs no separate entry.\n *\n * `Escape` is here because it is the other way out, though NOT for the reason it first\n * appears. Radix's own dismissal (`useEscapeKeydown`) binds `keydown` on `document` with\n * `capture: true`, so it fires before React's root-container listener and is unaffected by\n * this guard either way — a Dialog stays dismissable whether or not `Escape` is allowed\n * here, and that was verified by mutation rather than assumed. What the entry actually\n * protects is a CONSUMER's Escape handler living in the React tree: that one *is* in our\n * dispatch path, and `stopPropagation()` would swallow it, silently breaking a custom\n * dismissable container whenever focus rested on a denied control.\n *\n * Neither key can activate anything — no Radix primitive opens on Tab or Escape; they only\n * move focus or dismiss — so allowing them costs the gate nothing.\n */\nconst FOCUS_TRAVERSAL_KEYS = new Set(['Tab', 'Escape']);\n\nfunction blockInteraction(event: SyntheticEvent): void {\n event.preventDefault();\n event.stopPropagation();\n}\n\n/**\n * Blocks every key on a denied control except the ones needed to leave it.\n *\n * Both `keydown` and `keyup` are guarded: Enter activates a button on `keydown`, but Space\n * activates it on `keyup`, so guarding one without the other leaves half the keyboard\n * activation path open. Printable characters are blocked too — a denied control has\n * nothing to type into, and `Select`'s typeahead opens the menu from a bare letter.\n */\nfunction blockNonTraversalKey(event: KeyboardEvent<Element>): void {\n if (!FOCUS_TRAVERSAL_KEYS.has(event.key)) blockInteraction(event);\n}\n\n/**\n * Render-prop misuse shapes already reported, so a re-render does not re-log.\n *\n * Keyed on the sorted list of voided prop names rather than on the element or a ref: the\n * warning is about a code shape, so one report per distinct shape is exactly the right\n * granularity, and it stays quiet across re-renders and across every instance making the\n * same mistake.\n */\nconst warnedRenderPropMisuse = new Set<string>();\n\n/** Test-only hook to clear the render-prop misuse reports between cases. */\nfunction __resetCanWarnings(): void {\n warnedRenderPropMisuse.clear();\n}\n\n/**\n * Warns when a render-prop `children` is combined with props only the element path reads.\n *\n * A function `children` takes over every state and returns before `loading`, `behavior`,\n * `reason` and `fallback` are ever consulted, so\n * `<Can behavior='disable' reason='…'>{({ allowed }) => …}</Can>` silently renders with no\n * tooltip and no disabled treatment. Nothing throws and nothing looks wrong in the\n * source, which is exactly why it needs to be said out loud.\n *\n * Development-only, for the same reason as `warnUnknownPermission`: a shipped bundle must\n * not pay for a lint check aimed at the author.\n */\nfunction warnRenderPropVoidsProps(voided: readonly string[]): void {\n if (process.env.NODE_ENV === 'production') return;\n if (voided.length === 0) return;\n\n const key = voided.join(',');\n if (warnedRenderPropMisuse.has(key)) return;\n warnedRenderPropMisuse.add(key);\n\n console.warn(\n `[Can] \\`children\\` is a function, so ${voided.map((prop) => `\\`${prop}\\``).join(', ')} ${\n voided.length === 1 ? 'is' : 'are'\n } ignored. A render prop owns every state: read \\`allowed\\` and \\`status\\` and render the disabled, loading and denied cases yourself, or pass an element instead of a function.`,\n );\n}\n\n/** Minimal prop shape `disableElement` needs on an arbitrary child element. */\ninterface DisableableProps {\n className?: string;\n 'aria-disabled'?: boolean | 'true' | 'false';\n onClickCapture?: MouseEventHandler<Element>;\n onKeyDownCapture?: KeyboardEventHandler<Element>;\n onKeyUpCapture?: KeyboardEventHandler<Element>;\n onPointerDownCapture?: PointerEventHandler<Element>;\n onMouseDownCapture?: MouseEventHandler<Element>;\n}\n\n/**\n * Clones a single child element into its own disabled control, instead of wrapping it.\n *\n * `TooltipTrigger asChild` then merges Radix's `aria-describedby`, `data-state`, and\n * pointer handlers straight onto this same element, so a screen reader announces the\n * reason on the exact node that receives focus. `pointer-events` is left untouched:\n * the child is not natively `disabled`, so it still needs pointer events to receive\n * hover and open the tooltip. The child's own `className` is preserved and merged\n * with, not replaced by, the disabled styling.\n *\n * Blocking is not limited to click and keydown: Radix triggers (`DropdownMenuTrigger`,\n * `SelectTrigger`, `PopoverTrigger`, ...) open on `pointerdown`, not `click`, so\n * `onPointerDownCapture` and `onMouseDownCapture` are blocked too — otherwise a denied\n * user could still open the menu even though a later `click` never lands. `onKeyUpCapture`\n * is blocked alongside `onKeyDownCapture` because Space activates a button on `keyup`, not\n * `keydown`; both run every key through `FOCUS_TRAVERSAL_KEYS`, so only Tab and Escape get\n * through. None of this touches `pointer-events` — hover must still reach the child so its\n * tooltip can open; only *input* is intercepted.\n *\n * These handlers are a best-effort layer, NOT the security boundary. `cloneElement` can\n * only deliver props to a child that forwards them to a DOM node, and a composite child\n * that renders no DOM element of its own silently discards every one of them — Radix's\n * `DropdownMenu`, `Select` and `Popover` roots are context providers that render nothing,\n * so `<Can behavior='disable'><DropdownMenu>…</DropdownMenu></Can>` would drop the whole\n * block and fail open. `InteractionFirewall` below is the layer that actually holds; this\n * clone exists so the ARIA and the disabled styling land on the real control when the\n * child does forward props.\n *\n * Only `className` is merged. If the child already has its own `onClickCapture`,\n * `onKeyDownCapture`, `onKeyUpCapture`, `onPointerDownCapture`, `onMouseDownCapture`, or\n * `aria-disabled`, those are silently *replaced* by the ones set here — `cloneElement`\n * does not compose event handlers. This is intentional for a disabled state (nothing the\n * child would have done should still run), but a consumer relying on their own\n * capture-phase handler surviving here will be surprised.\n */\nfunction disableElement(child: ReactElement<DisableableProps>): ReactElement<DisableableProps> {\n return cloneElement(child, {\n 'aria-disabled': 'true',\n className: cn(child.props.className, 'cursor-not-allowed opacity-50'),\n onClickCapture: blockInteraction,\n onKeyDownCapture: blockNonTraversalKey,\n onKeyUpCapture: blockNonTraversalKey,\n onPointerDownCapture: blockInteraction,\n onMouseDownCapture: blockInteraction,\n });\n}\n\n/**\n * The actual security boundary for `behavior='disable'` on the clone path.\n *\n * `disableElement` injects its blocking handlers via `cloneElement`, which only works if\n * the child forwards unknown props down to a DOM node. A composite child that renders no\n * DOM element of its own drops them all, with no error and no warning — and React offers\n * no way to detect that ahead of time. Radix's `DropdownMenu`, `Select` and `Popover`\n * roots are exactly that shape (pure context providers), and they are precisely the\n * components a permission gate is most likely to wrap, so relying on the clone alone\n * meant the gate failed open for the most important case.\n *\n * This element owns a real DOM node of its own, so its capture-phase handlers always\n * exist regardless of what the child renders. React dispatches capture listeners from the\n * root down before any bubble listener runs, and `stopPropagation()` on a synthetic event\n * aborts the rest of that dispatch — including handlers on descendants — so an activation\n * event is stopped here before the child's own Radix handler ever sees it.\n *\n * CAVEAT: this is a real `<span>`, so `behavior='disable'` is not safe wrapped directly\n * around a `<tr>` or a `<td>` — a `<span>` is invalid inside `<table>`/`<tbody>`/`<tr>` and\n * the browser hoists it out, breaking the table. Wrap the control inside the cell rather\n * than the row or cell itself, or use `behavior='hide'` there. The `DisabledSubtree`\n * fallback has always had the same constraint.\n *\n * `display: contents` (`className='contents'`) keeps the node layout-neutral: it generates\n * no box, so it cannot disturb the child's own layout, positioning or Radix anchoring.\n * Event delegation is unaffected, because React walks its own tree rather than the CSS box\n * tree. `pointer-events` is deliberately left alone so hover still reaches the child and\n * its tooltip can open, and no ARIA is set here — the clone already marked the real\n * control `aria-disabled`, and a second announcement on a boxless generic node would only\n * add noise.\n *\n * It must sit *outside* `TooltipTrigger`, never around it as `asChild` fodder: the tooltip\n * still has to merge `aria-describedby` onto the focused control itself, which is the\n * accessibility property the clone path exists for.\n */\nfunction InteractionFirewall({ children }: { children: ReactNode }) {\n return (\n <span\n data-slot='can-blocked'\n className='contents'\n onClickCapture={blockInteraction}\n onPointerDownCapture={blockInteraction}\n onMouseDownCapture={blockInteraction}\n onKeyDownCapture={blockNonTraversalKey}\n onKeyUpCapture={blockNonTraversalKey}>\n {children}\n </span>\n );\n}\n\n/**\n * Non-interactive wrapper for a denied subtree.\n *\n * Fallback path for `behavior='disable'` when `children` is not a single element\n * (a fragment, an array, a string, or multiple controls) — there is no single\n * focusable node to clone and attach ARIA to directly, so the whole subtree is\n * wrapped instead. This is an honest fallback, not a silent downgrade: sighted\n * users still see the disabled treatment, and the wrapper stays a single focus\n * stop so a screen-reader user can still discover the reason, it just isn't\n * announced as a description of any one control inside it.\n *\n * Interaction is blocked in the CAPTURE phase, which fires on this element\n * before the inner control, so no activation event reaches the child. Every\n * activation path is covered, not just click: `pointerdown` (how Radix triggers\n * open), `mousedown`, and both `keydown` and `keyup` (Enter activates on the\n * former, Space on the latter). `*:pointer-events-none` already keeps pointer\n * events off the children here, but the capture handlers do not depend on it, so\n * a child that re-enables its own `pointer-events` is still blocked.\n * `*:pointer-events-none` stops children swallowing the hover, so this element\n * receives it and its tooltip can open — the exact thing a native `disabled`\n * button makes impossible. `tabIndex` is deliberately not set: the child stays\n * naturally focusable (one tab stop), and React's bubbling `onFocus` still\n * opens the tooltip. `inert` is deliberately not used: an inert subtree is\n * hidden from accessibility APIs, which would erase the control's own label.\n *\n * Props are accepted and spread because Radix injects its own handlers and\n * `data-state` through `TooltipTrigger asChild`. `{...props}` comes last so\n * those land; Radix does not use the capture-phase variants, so the blocking\n * handlers above are never overwritten.\n */\nfunction DisabledSubtree({\n children,\n className,\n ...props\n}: ComponentProps<'span'> & { 'data-slot'?: string }) {\n // `TooltipTrigger asChild` clones this span via Radix's Slot, which merges its own\n // `data-slot='tooltip-trigger'` into `props`. Stripped here so the terminal spread\n // below can never let it clobber the `can-disabled` slot, while every other\n // Radix-injected prop (handlers, `aria-describedby`, `data-state`) still lands.\n const { 'data-slot': _incomingDataSlot, ...restProps } = props;\n return (\n <span\n data-slot='can-disabled'\n aria-disabled='true'\n className={cn(\n 'inline-flex cursor-not-allowed opacity-50',\n '*:pointer-events-none',\n className,\n )}\n onClickCapture={blockInteraction}\n onPointerDownCapture={blockInteraction}\n onMouseDownCapture={blockInteraction}\n onKeyDownCapture={blockNonTraversalKey}\n onKeyUpCapture={blockNonTraversalKey}\n {...restProps}>\n {children}\n </span>\n );\n}\n\n/**\n * Renders its children when the user has the required permission(s). Requires an\n * `AbilityProvider` in the tree.\n *\n * Render precedence: a render-prop `children` always wins and receives the full\n * `CanState`; otherwise `loading` renders while the grant set is unresolved; then\n * `children` when allowed; then `fallback` when denied.\n *\n * When `children` is a function it OWNS EVERY STATE, and `behavior`, `reason`, `fallback`\n * and `loading` are all ignored — the render prop returns before any of them is consulted.\n * So `<Can behavior='disable' reason='…'>{({ allowed }) => …}</Can>` produces no tooltip\n * and no disabled treatment; the function has to read `allowed` and `status` and render\n * the disabled, loading and denied cases itself. Passing any of those four alongside a\n * function logs a development-only warning, since nothing else about the code looks wrong.\n *\n * Fail-closed by default: while `status === 'loading'`, the underlying check\n * is always `false` and nothing renders optimistically. Passing `negate`\n * flips this to fail-open — the unresolved `false` becomes `true` — so\n * children render immediately during loading unless `loading` is explicitly\n * passed. `CanNot` is `<Can negate />`, so it always exhibits the fail-open\n * case; pass `loading={null}` to suppress that flash and render nothing\n * instead — a node passed to `loading` renders that node, while omitting\n * `loading` falls through to the fail-open children.\n */\nfunction Can({\n permission,\n mode = 'any',\n negate = false,\n behavior = 'hide',\n reason = null,\n fallback = null,\n loading,\n children,\n}: CanProps) {\n warnUnknownPermission(permission);\n\n const { can, status } = useAbility();\n const hasPermission = status === 'ready' && can(permission, mode);\n const show = negate ? !hasPermission : hasPermission;\n\n if (typeof children === 'function') {\n // `reason` and `fallback` are detected by comparing against their defaults, so an\n // explicit `reason={null}`/`fallback={null}` reads as \"not passed\" — which is what\n // it means anyway. `loading` has no default and is compared against `undefined`\n // instead, because for `loading` — unlike the other two — `null` is a meaningfully\n // different value from \"not passed\": an explicit `loading={null}` is still voided\n // by a render prop and is reported as such here.\n warnRenderPropVoidsProps([\n ...(behavior === 'disable' ? ([\"behavior='disable'\"] as const) : []),\n ...(reason !== null ? (['reason'] as const) : []),\n ...(fallback !== null ? (['fallback'] as const) : []),\n ...(loading !== undefined ? (['loading'] as const) : []),\n ]);\n\n return <>{children({ allowed: show, status })}</>;\n }\n\n if (status === 'loading' && loading !== undefined) {\n return <>{loading}</>;\n }\n\n if (show) {\n return <>{children}</>;\n }\n\n if (behavior === 'disable') {\n // `isValidElement()` is true for a Fragment (`<>...</>`) — it is a single valid\n // element, unlike two sibling children, which React groups into an array. A\n // Fragment only accepts `key` and `children`; it silently drops any other prop\n // (React dev-warns and does nothing), so cloning one with `aria-disabled`,\n // `onClickCapture`, `onKeyDownCapture`, and `className` would lose the\n // interaction block entirely and leave the child fully clickable — the gate\n // would fail open. Exclude it explicitly so it falls through to the\n // `DisabledSubtree` wrapper below, same as any other non-single-element shape.\n if (isValidElement<DisableableProps>(children) && children.type !== Fragment) {\n const disabledChild = disableElement(children);\n if (reason === null) {\n return <InteractionFirewall>{disabledChild}</InteractionFirewall>;\n }\n // The firewall wraps only the trigger, never the whole `Tooltip`: `TooltipContent`\n // is portalled but still a React descendant, so React would route its events\n // through the firewall's capture handlers and the reason text would be\n // unselectable for no reason.\n return (\n <Tooltip>\n <InteractionFirewall>\n <TooltipTrigger asChild>{disabledChild}</TooltipTrigger>\n </InteractionFirewall>\n <TooltipContent>{reason}</TooltipContent>\n </Tooltip>\n );\n }\n\n if (reason === null) {\n return <DisabledSubtree>{children}</DisabledSubtree>;\n }\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <DisabledSubtree>{children}</DisabledSubtree>\n </TooltipTrigger>\n <TooltipContent>{reason}</TooltipContent>\n </Tooltip>\n );\n }\n\n return <>{fallback}</>;\n}\n\nCan.displayName = 'Can';\n\n/** Renders its children when the user does NOT have the required permission(s). Alias for `<Can negate />`. Requires an `AbilityProvider` in the tree. */\nfunction CanNot({\n permission,\n mode = 'any',\n behavior = 'hide',\n reason = null,\n fallback = null,\n loading,\n children,\n}: CanNotProps) {\n return (\n <Can\n permission={permission}\n mode={mode}\n negate\n behavior={behavior}\n reason={reason}\n fallback={fallback}\n loading={loading}>\n {children}\n </Can>\n );\n}\n\nCanNot.displayName = 'CanNot';\n\nexport { Can, CanNot, __resetCanWarnings };\nexport type { CanProps, CanNotProps, CanState };\n","import { useEffect, useState } from 'react';\n\nexport function useMediaQuery(query: string): boolean {\n // Initialize to false on both server and client to avoid hydration mismatch.\n // The real value is resolved in useEffect after mount.\n const [matches, setMatches] = useState<boolean>(false);\n\n useEffect(() => {\n // Safety guard for non-DOM environments (e.g. jsdom without matchMedia stub).\n // Effects do not run during SSR; this only matters in test environments.\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia(query);\n setMatches(mql.matches);\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [query]);\n\n return matches;\n}\n","import { useMediaQuery } from '@/lib/use-media-query';\n\nexport function useIsMobile() {\n return useMediaQuery('(max-width: 767px)');\n}\n","import * as React from 'react';\nimport { Dialog as SheetPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { XIcon } from 'lucide-react';\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot='sheet' {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot='sheet-trigger' {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot='sheet-close' {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot='sheet-portal' {...props} />;\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot='sheet-overlay'\n className={cn(\n 'fixed inset-0 z-50 bg-black/30 duration-100 supports-backdrop-filter:backdrop-blur-sm data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n showCloseButton = true,\n overlayClassName,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left';\n showCloseButton?: boolean;\n /** Extra classes for the backdrop behind the sheet. */\n overlayClassName?: string;\n}) {\n return (\n <SheetPortal>\n <SheetOverlay className={overlayClassName} />\n <SheetPrimitive.Content\n data-slot='sheet-content'\n data-side={side}\n className={cn(\n 'fixed z-50 flex flex-col bg-popover bg-clip-padding text-sm text-popover-foreground shadow-xl transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10',\n className,\n )}\n {...props}>\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close data-slot='sheet-close' asChild>\n <Button variant='ghost' className='absolute top-4 right-4 bg-secondary' size='icon-sm'>\n <XIcon />\n <span className='sr-only'>Close</span>\n </Button>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='sheet-header'\n className={cn('flex flex-col gap-1.5 p-6', className)}\n {...props}\n />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='sheet-footer'\n className={cn('mt-auto flex flex-col gap-2 p-6', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot='sheet-title'\n className={cn('text-base font-medium text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot='sheet-description'\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","import {\n type CSSProperties,\n type ComponentProps,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { useIsMobile } from '@/hooks/use-mobile';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { Input } from '@/components/ui/Input/input';\nimport { Separator } from '@/components/ui/Separator/separator';\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/Sheet/sheet';\nimport { Skeleton } from '@/components/ui/Skeleton/skeleton';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/Tooltip/tooltip';\nimport { MenuIcon } from 'lucide-react';\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}; SameSite=Lax; Secure`;\n },\n [setOpenProp, open],\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n const target = event.target as HTMLElement;\n if (\n target.isContentEditable ||\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.tagName === 'SELECT'\n ) {\n return;\n }\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n data-slot='sidebar-wrapper'\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as CSSProperties\n }\n className={cn(\n 'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-dvh w-full',\n className,\n )}\n {...props}>\n {children}\n </div>\n </SidebarContext.Provider>\n );\n}\n\nfunction SidebarResizeHandle() {\n const dragRef = useRef<{\n startX: number;\n startWidth: number;\n wrapper: HTMLElement;\n container: HTMLElement | null;\n gap: HTMLElement | null;\n } | null>(null);\n\n return (\n <div\n data-slot='sidebar-resize-handle'\n className='absolute inset-y-0 right-0 w-1 cursor-col-resize opacity-0 transition-opacity hover:opacity-100 hover:bg-sidebar-border group-data-[state=collapsed]:hidden'\n onPointerDown={(e) => {\n e.preventDefault();\n const wrapper = e.currentTarget.closest<HTMLElement>('[data-slot=\"sidebar-wrapper\"]');\n if (!wrapper) return;\n const container = e.currentTarget.closest<HTMLElement>('[data-slot=\"sidebar-container\"]');\n const gap = container?.parentElement?.querySelector<HTMLElement>('[data-slot=\"sidebar-gap\"]') ?? null;\n const currentWidth = container\n ? parseFloat(getComputedStyle(container).width)\n : 256;\n if (container) container.style.transition = 'none';\n if (gap) gap.style.transition = 'none';\n dragRef.current = { startX: e.clientX, startWidth: currentWidth, wrapper, container: container ?? null, gap };\n e.currentTarget.setPointerCapture(e.pointerId);\n }}\n onPointerMove={(e) => {\n if (!dragRef.current) return;\n const { startX, startWidth, wrapper } = dragRef.current;\n const newWidth = Math.max(160, Math.min(480, startWidth + (e.clientX - startX)));\n wrapper.style.setProperty('--sidebar-width', `${newWidth}px`);\n }}\n onPointerUp={() => {\n if (dragRef.current?.container) dragRef.current.container.style.transition = '';\n if (dragRef.current?.gap) dragRef.current.gap.style.transition = '';\n dragRef.current = null;\n }}\n />\n );\n}\n\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n dir,\n ...props\n}: ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot='sidebar'\n className={cn(\n 'bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col',\n className,\n )}\n {...props}>\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n dir={dir}\n data-sidebar='sidebar'\n data-slot='sidebar'\n data-mobile='true'\n showCloseButton={false}\n className='bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0'\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as CSSProperties\n }\n side={side}>\n <SheetHeader className='sr-only'>\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className='flex h-full w-full flex-col'>{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className='group peer text-sidebar-foreground hidden md:block'\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot='sidebar'>\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot='sidebar-gap'\n className={cn(\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n )}\n />\n <div\n data-slot='sidebar-container'\n data-side={side}\n className={cn(\n 'fixed inset-y-0 z-10 hidden h-dvh w-(--sidebar-width) overflow-hidden transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className,\n )}\n {...props}>\n <div\n data-sidebar='sidebar'\n data-slot='sidebar-inner'\n className='bg-sidebar group-data-[variant=floating]:ring-sidebar-border flex size-full flex-col group-data-[variant=floating]:rounded-2xl group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1'>\n {children}\n </div>\n <SidebarResizeHandle />\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar='trigger'\n data-slot='sidebar-trigger'\n variant='ghost'\n size='icon-sm'\n className={cn(className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}>\n <MenuIcon />\n <span className='sr-only'>Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar='rail'\n data-slot='sidebar-rail'\n aria-label='Toggle Sidebar'\n tabIndex={-1}\n onClick={toggleSidebar}\n title='Toggle Sidebar'\n className={cn(\n 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, ...props }: ComponentProps<'main'>) {\n return (\n <main\n data-slot='sidebar-inset'\n className={cn(\n 'bg-background relative flex w-full flex-1 flex-col md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-2xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({ className, ...props }: ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot='sidebar-input'\n data-sidebar='input'\n className={cn('bg-input/50 h-8 w-full shadow-none', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-header'\n data-sidebar='header'\n className={cn('flex flex-col gap-2 p-2 [--radius:var(--radius-xl)]', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-footer'\n data-sidebar='footer'\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({ className, ...props }: ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot='sidebar-separator'\n data-sidebar='separator'\n className={cn('bg-sidebar-border mx-2 w-auto', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-content'\n data-sidebar='content'\n className={cn(\n 'no-scrollbar flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden [--radius:var(--radius-xl)] group-data-[collapsible=icon]:overflow-hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-group'\n data-sidebar='group'\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'div';\n\n return (\n <Comp\n data-slot='sidebar-group-label'\n data-sidebar='group-label'\n className={cn(\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-xl px-3 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot='sidebar-group-action'\n data-sidebar='group-action'\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-xl p-0 outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-group-content'\n data-sidebar='group-content'\n className={cn('w-full text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: ComponentProps<'ul'>) {\n return (\n <ul\n data-slot='sidebar-menu'\n data-sidebar='menu'\n className={cn('flex w-full min-w-0 flex-col gap-0.5', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='sidebar-menu-item'\n data-sidebar='menu-item'\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-xl px-3 py-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]',\n },\n size: {\n default: 'h-9 text-sm',\n sm: 'h-8 text-xs',\n lg: 'h-14 px-3 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot.Root : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot='sidebar-menu-button'\n data-sidebar='menu-button'\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side='right'\n align='center'\n hidden={state !== 'collapsed' || isMobile}\n {...tooltip}\n />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot='sidebar-menu-action'\n data-sidebar='menu-action'\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-xl p-0 outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-data-[size=default]/menu-button:top-2 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0',\n showOnHover &&\n 'peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 aria-expanded:opacity-100 md:opacity-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='sidebar-menu-badge'\n data-sidebar='menu-badge'\n className={cn(\n 'text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-xl px-1 text-xs font-medium tabular-nums select-none group-data-[collapsible=icon]:hidden peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const [width] = useState(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n });\n\n return (\n <div\n data-slot='sidebar-menu-skeleton'\n data-sidebar='menu-skeleton'\n className={cn('flex h-8 items-center gap-2 rounded-xl px-2', className)}\n {...props}>\n {showIcon && (\n <Skeleton className='size-4 rounded-xl' data-sidebar='menu-skeleton-icon' />\n )}\n <Skeleton\n className='h-4 max-w-(--skeleton-width) flex-1'\n data-sidebar='menu-skeleton-text'\n style={\n {\n '--skeleton-width': width,\n } as CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: ComponentProps<'ul'>) {\n return (\n <ul\n data-slot='sidebar-menu-sub'\n data-sidebar='menu-sub'\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='sidebar-menu-sub-item'\n data-sidebar='menu-sub-item'\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'a';\n\n return (\n <Comp\n data-slot='sidebar-menu-sub-button'\n data-sidebar='menu-sub-button'\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-xl px-3 outline-hidden group-data-[collapsible=icon]:hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n};\n","import { type ReactNode } from 'react';\nimport {\n House,\n LayoutDashboardIcon,\n Plane,\n Wallet,\n} from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Can } from '@/components/authorization/Can/can';\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n useSidebar,\n} from '@/components/ui/Sidebar/sidebar';\n\nexport interface AppShellItem {\n label: string;\n icon?: ReactNode;\n active?: boolean;\n onClick?: () => void;\n permission?: string | string[];\n permissionMode?: 'any' | 'all';\n}\n\nexport interface AppShellProps {\n items?: AppShellItem[];\n activeItem?: string;\n onItemClick?: (label: string) => void;\n brandName?: string;\n showHeader?: boolean;\n header?: ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n defaultOpen?: boolean;\n className?: string;\n mainClassName?: string;\n children?: ReactNode;\n}\n\nconst defaultItems: AppShellItem[] = [\n { label: 'Home', icon: <House /> },\n { label: 'Vacations', icon: <Plane /> },\n { label: 'Payroll', icon: <Wallet /> },\n { label: 'Apps', icon: <LayoutDashboardIcon /> },\n];\n\nfunction SidebarBrand({ brandName }: { brandName: string }) {\n const { state } = useSidebar();\n const collapsed = state === 'collapsed';\n\n return (\n <>\n <div className='bg-primary text-primary-foreground flex size-7 shrink-0 items-center justify-center rounded-md text-xs font-bold'>\n {brandName.charAt(0)}\n </div>\n <span\n className={cn(\n 'truncate text-sm font-semibold transition-opacity duration-200',\n collapsed ? 'opacity-0 pointer-events-none w-0 overflow-hidden' : 'opacity-100',\n )}>\n {brandName}\n </span>\n </>\n );\n}\n\n/**\n * Full-page application shell with a collapsible sidebar.\n *\n * @remarks\n * The wrapper is always `h-dvh overflow-hidden` so it fills the dynamic viewport\n * regardless of the parent's height. The inner `<main>` handles its own scroll.\n * Use `mainClassName` to customise padding, background, or scroll behaviour.\n */\nexport function AppShell({\n items = defaultItems,\n activeItem,\n onItemClick,\n brandName = 'Total Portal',\n showHeader = true,\n header,\n open,\n onOpenChange,\n defaultOpen,\n className,\n mainClassName,\n children,\n}: AppShellProps) {\n return (\n <SidebarProvider\n className={cn('h-dvh overflow-hidden', className)}\n open={open}\n onOpenChange={onOpenChange}\n defaultOpen={defaultOpen}\n >\n <Sidebar collapsible='icon'>\n <SidebarHeader className='flex flex-row items-center gap-2 p-2'>\n <SidebarTrigger variant='ghost' className='size-8 shrink-0' />\n <SidebarBrand brandName={brandName} />\n </SidebarHeader>\n <SidebarContent className='overflow-x:hidden'>\n <SidebarGroup>\n <SidebarGroupContent>\n <SidebarMenu>\n {items.map((item) => {\n const menuItem = (\n <SidebarMenuItem key={item.label}>\n <SidebarMenuButton\n tooltip={item.label}\n isActive={activeItem === item.label || item.active}\n onClick={() => {\n item.onClick?.();\n onItemClick?.(item.label);\n }}>\n {item.icon}\n <span>{item.label}</span>\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n\n if (!item.permission) return menuItem;\n\n return (\n <Can\n key={item.label}\n permission={item.permission}\n mode={item.permissionMode}>\n {menuItem}\n </Can>\n );\n })}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n </SidebarContent>\n </Sidebar>\n <div className='flex flex-1 flex-col overflow-hidden'>\n {header ? (\n header\n ) : showHeader ? (\n <header className='flex h-14 items-center gap-2 border-b px-4'>\n <SidebarTrigger variant='ghost' className='size-8 shrink-0 md:hidden' />\n <span className='text-sm font-medium'>{brandName}</span>\n </header>\n ) : (\n <SidebarTrigger variant='ghost' className='size-8 shrink-0 md:hidden' />\n )}\n <main className={cn('overflow-y-auto flex-1 p-6', mainClassName)}>{children}</main>\n </div>\n </SidebarProvider>\n );\n}\n\nexport { SidebarTrigger, SidebarProvider };\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Textarea({ className, ...props }: ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot='textarea'\n className={cn(\n 'border-input flex min-h-[80px] w-full resize-y rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[border-color,box-shadow] outline-hidden md:text-sm',\n 'placeholder:text-muted-foreground',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n 'dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","import { createContext, useContext } from 'react';\nimport type { CalendarView } from './event-calendar.types';\n\ninterface EventCalendarContextValue {\n currentView: CalendarView;\n}\n\nconst EventCalendarContext = createContext<EventCalendarContextValue | null>(null);\n\n/**\n * Consume EventCalendar context from sub-components (e.g. a future EventCalendar.Toolbar).\n * Not exported from the public package barrel — internal use only.\n */\nfunction useEventCalendarContext(): EventCalendarContextValue {\n const ctx = useContext(EventCalendarContext);\n if (!ctx) {\n throw new Error('useEventCalendarContext must be used within EventCalendar');\n }\n return ctx;\n}\n\nexport { EventCalendarContext, useEventCalendarContext };\nexport type { EventCalendarContextValue };\n","/**\n * TCCE EventCalendar — @schedule-x theme overrides, scoped to `.sx-tcce`.\n *\n * Shipped as a string (not a .css file) and injected by the EventCalendar\n * component through React 19's hoisted `<style precedence>`. This keeps the\n * calendar styles bundled with the component: consumers who use EventCalendar\n * get them automatically, and consumers who don't tree-shake them away — no\n * separate stylesheet import or build step required.\n *\n * All values reference the library design tokens (`--color-*`) defined in the\n * main bundle, so the calendar inherits the consumer's theme.\n */\nexport const eventCalendarStyles = `\n/* ── Design tokens ────────────────────────────────────────────────────────── */\n.sx-tcce {\n --sx-color-primary: var(--color-primary);\n --sx-color-on-primary: var(--color-primary-foreground);\n --sx-color-primary-container: color-mix(in srgb, var(--color-primary) 10%, transparent);\n --sx-color-on-primary-container: var(--color-primary);\n --sx-color-surface: var(--color-background);\n --sx-color-background: var(--color-background);\n --sx-color-on-surface: var(--color-foreground);\n --sx-color-on-background: var(--color-foreground);\n --sx-color-outline: var(--color-border);\n --sx-color-outline-variant: var(--color-border);\n --sx-internal-color-text: var(--color-foreground);\n font-size: 13px;\n font-family: var(--font-sans, inherit);\n}\n\n/* ── Outer wrapper ────────────────────────────────────────────────────────── */\n.sx-tcce .sx__calendar-wrapper {\n border-radius: var(--border-radius-article, 0.875rem);\n border: 1px solid var(--color-border);\n overflow: hidden;\n}\n\n/* ── Header bar ───────────────────────────────────────────────────────────── */\n.sx-tcce .sx__calendar-header {\n padding: 8px 14px;\n min-height: 52px;\n border-bottom: 1px solid var(--color-border);\n background: var(--color-background);\n display: flex;\n align-items: center;\n}\n\n.sx__calendar-header-content {\n padding-right: 14px;\n}\n\n/* Range title — \"June 2026\" */\n.sx-tcce .sx__range-heading {\n font-size: 15px;\n font-weight: 700;\n color: var(--color-foreground);\n font-family: var(--font-heading, inherit);\n}\n\n/* \"Today\" button — primary style */\n.sx-tcce .sx__today-button {\n font-size: 12px;\n font-weight: 600;\n height: 32px;\n padding: 0 14px;\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n border: none;\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n cursor: pointer;\n transition: opacity 150ms, background 150ms, outline 150ms;\n}\n.sx-tcce .sx__today-button:focus-visible {\n outline: 3px solid color-mix(in srgb, var(--ring) 50%, transparent);\n outline-offset: -1px;\n}\n.sx-tcce .sx__today-button:hover {\n opacity: 0.88;\n background: var(--color-primary);\n}\n.sx-tcce .sx__today-button:active {\n opacity: 0.72;\n background: var(--color-primary);\n}\n.sx-tcce .sx__today-button:focus {\n background: var(--color-primary);\n}\n\n/* Prev / Next arrow buttons */\n.sx__forward-backward-navigation {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 32px;\n}\n.sx-tcce .sx__chevron-wrapper {\n width: 30px;\n height: 32px;\n min-width: 30px !important;\n min-height: 32px !important;\n border-radius: var(--border-radius-secondary-button, 0.625rem);=\n border: 1px solid var(--color-border);\n background: var(--color-background);\n transition: background 150ms;\n}\n.sx-tcce .sx__chevron-wrapper:hover {\n background: var(--color-muted);\n}\n.sx__chevron-wrapper {\n min-height: 30px !important;\n}\n\n/* ── View selector ────────────────────────────────────────────────────────── */\n/* Hide the \"View\" text label (kept in DOM for a11y) */\n.sx-tcce .sx__view-selection-label {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n}\n\n/* The active view button, e.g. \"Month ▼\" */\n.sx-tcce .sx__view-selection-selected-item {\n font-size: 12px;\n font-weight: 600;\n height: 32px;\n padding: 0 12px;\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n border: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n transition: opacity 150ms, background 150ms, color 150ms;\n}\n.sx-tcce .sx__view-selection-selected-item:hover,\n.sx-tcce .sx__view-selection-selected-item:focus,\n.sx-tcce .sx__view-selection-selected-item:active {\n opacity: 0.85;\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n}\n.sx-tcce .sx__view-selection-selected-item:focus-visible {\n outline: 3px solid color-mix(in srgb, var(--ring) 50%, transparent);\n outline-offset: -1px;\n}\n\n/* Chevron image inside the view button */\n.sx-tcce .sx__view-selection-chevron {\n width: 13px;\n height: 13px;\n opacity: 0.6;\n filter: brightness(0) invert(1);\n}\n\n/* Dropdown list of views */\n.sx-tcce .sx__view-selection-items {\n border-radius: var(--border-radius-outline, 0.5rem);\n border: 1px solid var(--color-border);\n padding: 4px;\n gap: 2px;\n background: var(--color-background);\n}\n.sx-tcce .sx__view-selection-item {\n font-size: 12px;\n font-weight: 500;\n padding: 5px 12px;\n border-radius: 5px;\n cursor: pointer;\n transition: background 100ms;\n}\n.sx-tcce .sx__view-selection-item:hover {\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n}\n\n/* ── Date input (top-right \"6/5/2026 ▼\") ─────────────────────────────────── */\n/* Hide the \"Date\" text label */\n.sx-tcce .sx__date-input-label {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n}\n.sx-tcce .sx__date-input-wrapper {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n flex-shrink: 0;\n \n height: 32px;\n padding: 0 1rem;\n min-width: 120px;\n \n border-radius: 0.5rem;\n border: 1px solid transparent;\n background-color: var(--color-primary);\n \n cursor: pointer;\n outline: none;\n user-select: none;\n transition: all 150ms ease;\n \n overflow: hidden;\n justify-content: flex-start;\n color: var(--color-primary-foreground) !important;\n}\n.sx-tcce .sx__date-input-wrapper:focus-within {\n border-color: var(--ring);\n box-shadow: 0 0 0 3px rgba(var(--ring-rgb), 0.3);\n}\n.sx-tcce .sx__date-input-wrapper:hover {\n background-color: var(--color-primary);\n opacity: 0.8;\n}\n.sx-tcce .sx__date-input {\n font-size: 0.875rem;\n font-weight: 400;\n color: #ffffff;\n font-family: inherit;\n \n background: transparent;\n border: none;\n outline: none;\n padding: 0;\n \n min-width: 100px;\n flex: 1;\n \n cursor: pointer;\n}\n\n.sx-tcce .sx__date-input::placeholder {\n color: rgba(255, 255, 255, 0.7);\n}\n\n.sx-tcce .sx__date-input-chevron-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n \n width: 1rem;\n height: 1rem;\n padding: 0;\n \n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n appearance: none;\n}\n.sx-tcce .sx__date-input-chevron {\n width: 1rem;\n height: 1rem;\n opacity: 1;\n color: #ffffff;\n}\n\n/* Date picker popup (the calendar that drops when clicking the date input) */\n.sx-tcce .sx__date-picker-popup {\n border-radius: 0.5rem;\n border: 1px solid var(--color-border);\n background-color: var(--color-background);\n \n padding: 0.75rem;\n font-size: 0.75rem;\n overflow: hidden;\n \n animation: popoverSlideIn 150ms ease-out;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n}\n@keyframes popoverSlideIn {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.sx-tcce .sx__date-picker__month-view-header {\n padding: 0.75rem 0.75rem 0.375rem;\n}\n.sx-tcce .sx__date-picker__month-view-header__month-year {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--color-foreground);\n text-align: center;\n}\n.sx-tcce .sx__date-picker__day-names {\n display: flex;\n gap: 0.25rem;\n padding: 0.5rem 0.25rem;\n}\n.sx-tcce .sx__date-picker__day-name {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n \n width: 2rem;\n height: 2rem;\n min-height: 2rem;\n \n font-size: 0.625rem;\n font-weight: 600;\n color: var(--color-muted-foreground);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n \n user-select: none;\n}\n/* Week */\n.sx-tcce .sx__date-picker__week {\n display: flex;\n gap: 0.25rem;\n margin-top: 0.5rem;\n}\n.sx-tcce .sx__date-picker__day {\n /* Layout */\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n \n width: 2rem;\n height: 2rem;\n min-height: 2rem;\n aspect-ratio: 1;\n \n border-radius: 0.375rem;\n border: none;\n background: transparent;\n padding: 0;\n cursor: pointer;\n \n font-size: 0.75rem;\n font-weight: 400;\n color: var(--color-foreground);\n \n transition: all 100ms ease;\n outline: none;\n user-select: none;\n}\n.sx-tcce .sx__date-picker__day:hover:not(:disabled) {\n background-color: var(--color-accent);\n color: var(--color-accent-foreground);\n}\n.sx-tcce .sx__date-picker__day:focus-visible {\n box-shadow: inset 0 0 0 2px var(--color-primary);\n border-radius: 0.375rem;\n}\n.sx-tcce .sx__date-picker__day--today {\n font-weight: 600;\n color: var(--color-primary);\n background-color: var(--color-accent);\n}\n.sx-tcce .sx__date-picker__day--today:hover {\n background-color: var(--color-accent);\n color: var(--color-primary);\n}\n.sx-tcce .sx__date-picker__day--selected {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n}\n/* Selected day */\n.sx-tcce .sx__date-picker__day--selected {\n background-color: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n border-radius: 0.375rem;\n font-weight: 500;\n}\n\n.sx-tcce .sx__date-picker__day--selected:hover {\n opacity: 0.9;\n}\n\n/* Outside days (prev/next month) */\n.sx-tcce .sx__date-picker__day--outside {\n color: var(--color-muted-foreground);\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Disabled days */\n.sx-tcce .sx__date-picker__day:disabled {\n color: var(--color-muted-foreground);\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.sx-tcce .sx__date-picker__day--range-start {\n background-color: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n border-radius: 0.375rem 0 0 0.375rem;\n}\n\n.sx-tcce .sx__date-picker__day--range-middle {\n background-color: var(--color-primary);\n opacity: 0.2;\n border-radius: 0;\n}\n\n.sx-tcce .sx__date-picker__day--range-end {\n background-color: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n border-radius: 0 0.375rem 0.375rem 0;\n}\n\n/* Navigation buttons (previous/next month) */\n.sx-tcce .sx__date-picker__nav-button {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n padding: 0;\n \n background: transparent;\n border: none;\n border-radius: 0.375rem;\n cursor: pointer;\n opacity: 0.5;\n transition: all 150ms ease;\n outline: none;\n}\n\n.sx-tcce .sx__date-picker__nav-button:hover:not(:disabled) {\n opacity: 1;\n background-color: var(--color-accent);\n}\n\n.sx-tcce .sx__date-picker__nav-button:focus-visible {\n box-shadow: 0 0 0 2px var(--color-primary);\n}\n\n.sx-tcce .sx__date-picker__nav-button:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.sx-tcce .sx__date-picker__nav-button svg {\n width: 1rem;\n height: 1rem;\n}\n\n/* ── Month grid ───────────────────────────────────────────────────────────── */\n\n/* Week rows: horizontal grid lines — skip first (header border-bottom covers it) */\n.sx-tcce .sx__month-grid-week:not(:first-child) {\n border-top: 1px solid var(--color-border);\n}\n\n/* Day cells: vertical grid line on right, consistent height */\n.sx-tcce .sx__month-grid-day {\n border-right: 1px solid var(--color-border);\n min-height: 96px;\n}\n\n/* Remove right border from last column */\n.sx-tcce .sx__month-grid-day.sx__sunday {\n border-right: 0;\n}\n\n/* Out-of-bounds (prev/next month) days — muted background */\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing {\n background-color: var(--color-muted);\n}\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing .sx__month-grid-day__header-date,\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing .sx__month-grid-day__header-day-name {\n opacity: 0.4;\n}\n\n/* Day cell header */\n.sx-tcce .sx__month-grid-day__header {\n padding: 5px 8px 3px;\n}\n.sx-tcce .sx__month-grid-day__header-day-name {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__month-grid-day__header-date {\n font-size: 13px;\n font-weight: 500;\n width: 26px;\n height: 26px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 150ms;\n}\n\n/* Today highlight */\n.sx-tcce .sx__is-today .sx__month-grid-day__header-date {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n font-weight: 700;\n}\n\n/* Selected day highlight (not today) */\n.sx-tcce .sx__month-grid-day.is-selected:not(.sx__is-today) .sx__month-grid-day__header-date {\n background: color-mix(in srgb, var(--color-primary) 12%, transparent);\n color: var(--color-primary);\n font-weight: 600;\n}\n\n/* Month grid event pills */\n.sx-tcce .sx__month-grid-event {\n border-radius: 3px;\n margin: 1px 4px;\n padding: 1px 5px;\n font-size: 11px;\n font-weight: 500;\n background-color: transparent !important;\n border-inline-start-width: 3px !important;\n cursor: pointer;\n}\n.sx-tcce .sx__month-grid-event-time {\n font-size: 10px;\n opacity: 0.7;\n}\n.sx-tcce .sx__month-grid-event-title {\n font-size: 11px;\n}\n\n/* ── Week / Day header ────────────────────────────────────────────────────── */\n.sx-tcce .sx__week-grid__day-name {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__week-grid__date-number {\n font-size: 14px;\n font-weight: 500;\n width: 34px;\n height: 34px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 150ms;\n}\n.sx-tcce .sx__week-grid__date--is-today .sx__week-grid__date-number {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n font-weight: 700;\n}\n\n/* Subtle column highlight for today in week view */\n.sx-tcce .sx__time-grid-day.sx__is-today {\n background: color-mix(in srgb, var(--color-primary) 3%, transparent);\n}\n\n/* ── Time grid (Week / Day events) ───────────────────────────────────────── */\n.sx-tcce .sx__week-grid__hour-text {\n font-size: 10px;\n font-weight: 500;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__time-grid-event {\n border-radius: 6px;\n cursor: pointer;\n}\n.sx-tcce .sx__time-grid-event-inner {\n padding: 4px 7px;\n}\n.sx-tcce .sx__time-grid-event-title {\n font-size: 11px;\n font-weight: 600;\n line-height: 1.3;\n}\n.sx-tcce .sx__time-grid-event-time {\n font-size: 10px;\n opacity: 0.72;\n line-height: 1.4;\n}\n.sx-tcce .sx__title-and-time-compact {\n font-size: 10px;\n font-weight: 600;\n}\n\n/* ── Event modal — hidden; replaced by TCCE Popover in event-calendar.tsx ── */\n.sx-tcce .sx__event-modal {\n display: none !important;\n}\n.sx-tcce .sx__event-modal__title {\n font-size: 14px;\n font-weight: 700;\n letter-spacing: -0.01em;\n font-family: var(--font-heading, inherit);\n}\n.sx-tcce .sx__event-modal__time {\n font-size: 12px;\n color: var(--color-muted-foreground);\n}\n`;\n","import { useRef, useEffect, useLayoutEffect } from 'react';\nimport {\n createCalendar,\n viewMonthGrid,\n viewWeek,\n viewDay,\n viewMonthAgenda,\n} from '@schedule-x/calendar';\nimport { createEventsServicePlugin } from '@schedule-x/events-service';\nimport { createEventModalPlugin } from '@schedule-x/event-modal';\nimport { createCalendarControlsPlugin } from '@schedule-x/calendar-controls';\n// Patches globalThis.Temporal so @schedule-x instanceof checks match our Temporal objects\nimport 'temporal-polyfill/global';\nimport { Temporal } from 'temporal-polyfill';\nimport type {\n CalendarEvent,\n CalendarView,\n EventCalendarProps,\n ScheduleXViewName,\n} from '../event-calendar.types';\nimport type { CalendarApp, CalendarEventExternal } from '@schedule-x/calendar';\n\nexport const VIEW_MAP: Record<CalendarView, ScheduleXViewName> = {\n month: 'month-grid',\n week: 'week',\n day: 'day',\n agenda: 'month-agenda',\n};\n\nexport const REVERSE_VIEW_MAP: Record<ScheduleXViewName, CalendarView> = {\n 'month-grid': 'month',\n week: 'week',\n day: 'day',\n 'month-agenda': 'agenda',\n};\n\n// TCCE-aligned colors for each event variant.\n// main: border / accent container: event background onContainer: event text\nconst CALENDAR_DEFS = {\n default: {\n colorName: 'default',\n lightColors: { main: '#22205f', container: '#eaeaf6', onContainer: '#22205f' },\n darkColors: { main: '#9b99d4', container: '#2a2862', onContainer: '#eaeaf6' },\n },\n primary: {\n colorName: 'primary',\n lightColors: { main: '#22205f', container: '#eaeaf6', onContainer: '#22205f' },\n darkColors: { main: '#9b99d4', container: '#2a2862', onContainer: '#eaeaf6' },\n },\n success: {\n colorName: 'success',\n lightColors: { main: '#00a824', container: '#ddf8e4', onContainer: '#003d0d' },\n darkColors: { main: '#5de87a', container: '#003d0d', onContainer: '#ddf8e4' },\n },\n // Use amber (yellow-700) — more refined than TCCE's bright yellow-600 (#faca4a)\n warning: {\n colorName: 'warning',\n lightColors: { main: '#c8a23b', container: '#fef9e7', onContainer: '#5c4a00' },\n darkColors: { main: '#fbd56e', container: '#5c4a00', onContainer: '#fef9e7' },\n },\n danger: {\n colorName: 'danger',\n lightColors: { main: '#ea3a3d', container: '#fee2e2', onContainer: '#7f1d1d' },\n darkColors: { main: '#f87171', container: '#7f1d1d', onContainer: '#fee2e2' },\n },\n} as const;\n\n/**\n * Convert \"YYYY-MM-DD\" → Temporal.PlainDate\n * Convert \"YYYY-MM-DD HH:mm\" → Temporal.ZonedDateTime (system timezone)\n */\nfunction toTemporalDate(dateStr: string): Temporal.ZonedDateTime | Temporal.PlainDate {\n if (dateStr.length === 10) {\n return Temporal.PlainDate.from(dateStr);\n }\n const isoStr = dateStr.replace(' ', 'T');\n const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n return Temporal.ZonedDateTime.from(`${isoStr}[${timeZone}]`);\n}\n\nexport function toScheduleXEvent(event: CalendarEvent): CalendarEventExternal {\n return {\n id: String(event.id),\n title: event.title,\n start: toTemporalDate(event.start),\n end: toTemporalDate(event.end),\n calendarId: event.color ?? 'default',\n ...(event.description != null ? { description: event.description } : {}),\n };\n}\n\ninterface UseEventCalendarProps {\n events: EventCalendarProps['events'];\n defaultView?: EventCalendarProps['defaultView'];\n defaultDate?: EventCalendarProps['defaultDate'];\n locale?: EventCalendarProps['locale'];\n onEventClick?: EventCalendarProps['onEventClick'];\n onEventCreate?: EventCalendarProps['onEventCreate'];\n onViewChange?: EventCalendarProps['onViewChange'];\n}\n\ninterface UseEventCalendarReturn {\n calendarApp: CalendarApp | null;\n eventModal: ReturnType<typeof createEventModalPlugin>;\n}\n\nfunction useEventCalendar({\n events,\n defaultView = 'month',\n defaultDate,\n locale = 'en-US',\n onEventClick,\n onEventCreate,\n onViewChange,\n}: UseEventCalendarProps): UseEventCalendarReturn {\n const onEventClickRef = useRef(onEventClick);\n const onEventCreateRef = useRef(onEventCreate);\n const onViewChangeRef = useRef(onViewChange);\n useLayoutEffect(() => {\n onEventClickRef.current = onEventClick;\n });\n useLayoutEffect(() => {\n onEventCreateRef.current = onEventCreate;\n });\n useLayoutEffect(() => {\n onViewChangeRef.current = onViewChange;\n });\n\n const eventsMapRef = useRef<Map<string, CalendarEvent>>(new Map());\n const eventsService = useRef(createEventsServicePlugin());\n const eventModal = useRef(createEventModalPlugin());\n const calendarControls = useRef(createCalendarControlsPlugin());\n\n const calendarApp = useRef<ReturnType<typeof createCalendar> | null>(null);\n if (!calendarApp.current) {\n eventsMapRef.current = new Map(events.map((e) => [String(e.id), e]));\n calendarApp.current = createCalendar({\n locale,\n defaultView: VIEW_MAP[defaultView],\n ...(defaultDate ? { selectedDate: Temporal.PlainDate.from(defaultDate) } : {}),\n calendars: CALENDAR_DEFS,\n views: [viewMonthGrid, viewWeek, viewDay, viewMonthAgenda],\n plugins: [eventsService.current, eventModal.current, calendarControls.current],\n events: events.map(toScheduleXEvent),\n callbacks: {\n onEventClick: (calendarEvent) => {\n const original = eventsMapRef.current.get(String(calendarEvent.id));\n if (original) onEventClickRef.current?.(original);\n },\n onDoubleClickDate: (date: Temporal.PlainDate) => {\n const dateStr = date.toString();\n onEventCreateRef.current?.({ start: dateStr, end: dateStr });\n },\n onDoubleClickDateTime: (dateTime: Temporal.ZonedDateTime) => {\n const normalized = dateTime.toString().slice(0, 16).replace('T', ' ');\n onEventCreateRef.current?.({ start: normalized, end: normalized });\n },\n },\n });\n }\n\n const eventsKey = JSON.stringify(events);\n\n useEffect(() => {\n eventsMapRef.current = new Map(events.map((e) => [String(e.id), e]));\n eventsService.current.set(events.map(toScheduleXEvent));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [eventsKey]);\n\n useEffect(() => {\n const app = calendarApp.current;\n if (!app) return;\n const state = (\n app as unknown as {\n $app: {\n calendarState: {\n view: { subscribe: (cb: (v: string) => void) => () => void };\n };\n };\n }\n ).$app?.calendarState?.view;\n if (!state?.subscribe) return;\n let isFirst = true;\n const unsubscribe = state.subscribe((viewName: string) => {\n if (isFirst) {\n isFirst = false;\n return;\n }\n const mapped = REVERSE_VIEW_MAP[viewName as ScheduleXViewName];\n if (mapped) onViewChangeRef.current?.(mapped);\n });\n return () => unsubscribe?.();\n }, []);\n\n return {\n calendarApp: calendarApp.current as CalendarApp | null,\n eventModal: eventModal.current,\n };\n}\n\nexport { useEventCalendar };\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ScheduleXCalendar } from '@schedule-x/react';\nimport type { CalendarApp } from '@schedule-x/calendar';\nimport { Clock, Pencil } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n} from '@/components/ui/Popover/popover';\nimport { EventCalendarContext } from './event-calendar-context';\nimport { eventCalendarStyles } from './event-calendar.styles';\nimport { useEventCalendar } from './hooks/use-event-calendar';\nimport type { EventCalendarProps, CalendarEvent, CalendarView } from './event-calendar.types';\n\nconst EVENT_COLOR: Record<string, string> = {\n default: '#22205f',\n primary: '#22205f',\n success: '#00a824',\n warning: '#c8a23b',\n danger: '#ea3a3d',\n};\n\n// position: fixed is relative to the nearest transformed ancestor, not the viewport.\n// Subtract that ancestor's offset so the anchor span renders at the correct viewport position.\nfunction getFixedAnchorRect(el: HTMLElement): DOMRect {\n const rect = el.getBoundingClientRect();\n let ancestor = el.parentElement;\n while (ancestor && ancestor !== document.documentElement) {\n if (window.getComputedStyle(ancestor).transform !== 'none') {\n const cb = ancestor.getBoundingClientRect();\n return new DOMRect(rect.left - cb.left, rect.top - cb.top, rect.width, rect.height);\n }\n ancestor = ancestor.parentElement;\n }\n return rect;\n}\n\nfunction formatEventTime(start: string, end: string): string {\n const isAllDay = start.length === 10;\n if (isAllDay) {\n const date = new Date(`${start}T00:00:00`);\n return date.toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' });\n }\n const fmt = (s: string) => {\n const [, time] = s.split(' ');\n const [h, m] = time.split(':').map(Number);\n const ampm = h >= 12 ? 'PM' : 'AM';\n const hour = h % 12 || 12;\n return `${hour}:${m.toString().padStart(2, '0')} ${ampm}`;\n };\n return `${fmt(start)} – ${fmt(end)}`;\n}\n\nfunction EventCalendar({\n events,\n defaultView = 'month',\n onViewChange,\n defaultDate,\n onEventClick,\n onEventCreate,\n locale = 'en-US',\n className,\n}: EventCalendarProps) {\n const [currentView, setCurrentView] = useState<CalendarView>(defaultView);\n const [selectedEvent, setSelectedEvent] = useState<CalendarEvent | null>(null);\n const [anchorRect, setAnchorRect] = useState<DOMRect | null>(null);\n // true when the last pointerdown outside PopoverContent was on a calendar event element.\n // Suppresses the schedule-x toggle-close so the popover stays open on re-click.\n const clickedEventElRef = useRef(false);\n\n const handleViewChange = useCallback(\n (view: CalendarView) => {\n setCurrentView(view);\n onViewChange?.(view);\n },\n [onViewChange],\n );\n\n const handleEventClick = useCallback(\n (event: CalendarEvent) => {\n setSelectedEvent(event);\n onEventClick?.(event);\n },\n [onEventClick],\n );\n\n const { calendarApp, eventModal } = useEventCalendar({\n events,\n defaultView,\n defaultDate,\n locale,\n onEventClick: handleEventClick,\n onEventCreate,\n onViewChange: handleViewChange,\n });\n\n useEffect(() => {\n const unsub = eventModal.calendarEventElement.subscribe((el) => {\n if (!el) {\n if (clickedEventElRef.current) {\n // schedule-x toggled off because user clicked an event element —\n // suppress the close so the popover stays open on re-click.\n clickedEventElRef.current = false;\n } else {\n setSelectedEvent(null);\n setAnchorRect(null);\n }\n } else {\n setAnchorRect(getFixedAnchorRect(el));\n }\n });\n return unsub;\n }, [eventModal]);\n\n const handlePopoverOpenChange = useCallback(\n (open: boolean) => {\n if (!open) {\n eventModal.close();\n setSelectedEvent(null);\n setAnchorRect(null);\n }\n },\n [eventModal],\n );\n\n const contextValue = useMemo(() => ({ currentView }), [currentView]);\n\n return (\n <EventCalendarContext.Provider value={contextValue}>\n {/* React 19 hoists this to <head> and dedupes by href, so the\n schedule-x theme overrides are injected once no matter how many\n calendars mount. */}\n <style href='tcce-event-calendar' precedence='default'>\n {eventCalendarStyles}\n </style>\n <Popover open={!!selectedEvent && !!anchorRect} onOpenChange={handlePopoverOpenChange}>\n <div data-slot='event-calendar' className={cn('sx-tcce w-full', className)}>\n <ScheduleXCalendar calendarApp={(calendarApp ?? null) as CalendarApp | null} />\n </div>\n\n {anchorRect && (\n <PopoverAnchor asChild>\n <span\n style={{\n position: 'fixed',\n top: anchorRect.top,\n left: anchorRect.left,\n width: anchorRect.width,\n height: anchorRect.height,\n pointerEvents: 'none',\n }}\n />\n </PopoverAnchor>\n )}\n\n <PopoverContent\n side='right'\n align='start'\n className='w-65 gap-2'\n onPointerDownOutside={(e) => {\n const target = e.target as HTMLElement;\n const isEventEl = target.closest(\n '.sx__month-grid-event, .sx__time-grid-event, .sx__month-agenda-event',\n );\n if (isEventEl) {\n e.preventDefault();\n clickedEventElRef.current = true;\n }\n }}\n >\n {selectedEvent && (\n <>\n <div className='flex items-start justify-between gap-2'>\n <div className='flex items-center gap-2'>\n <span\n className='size-2 shrink-0 rounded-full'\n style={{\n backgroundColor:\n EVENT_COLOR[selectedEvent.color ?? 'default'],\n }}\n />\n <span className='font-heading text-sm font-semibold leading-tight'>\n {selectedEvent.title}\n </span>\n </div>\n <Button variant='ghost' size='icon-sm' aria-label='Edit event'>\n <Pencil size={14} />\n </Button>\n </div>\n\n <div className='flex items-center gap-2 text-xs text-muted-foreground'>\n <Clock size={13} className='shrink-0' />\n <span>{formatEventTime(selectedEvent.start, selectedEvent.end)}</span>\n </div>\n\n {selectedEvent.description && (\n <p className='text-xs text-muted-foreground'>\n {selectedEvent.description}\n </p>\n )}\n </>\n )}\n </PopoverContent>\n </Popover>\n </EventCalendarContext.Provider>\n );\n}\n\nexport { EventCalendar };\nexport type {\n EventCalendarProps,\n CalendarEvent,\n CalendarView,\n EventCreateRange,\n} from './event-calendar.types';\n","import { useForm, type UseFormProps, type FieldValues } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport type { ZodType, z } from 'zod';\n\nexport function useAppForm<T extends ZodType>(\n schema: T,\n options?: Omit<UseFormProps<z.infer<T> & FieldValues>, 'resolver'>,\n) {\n return useForm<z.infer<T> & FieldValues>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolver: zodResolver(schema as any),\n ...options,\n });\n}\n\nexport { useFieldArray, Controller } from 'react-hook-form';\n","const CDN_BASE = 'https://dibt9vplwriap.cloudfront.net';\n\n/**\n * Brand logo assets served from the CDN.\n *\n * Keys are flat and prefixed by brand: unprefixed keys belong to Total Civil,\n * `millwork*` keys belong to Total Millwork.\n */\nexport const logos = {\n // Total Civil\n color: `${CDN_BASE}/logos/Logo_Total_Color.webp`,\n colorAna: `${CDN_BASE}/logos/Logo_Total_Color-ANA.webp`,\n colorAnaa: `${CDN_BASE}/logos/Logo_Total_Color-ANAA.webp`,\n negative: `${CDN_BASE}/logos/Logo_Total_Negative.webp`,\n positive: `${CDN_BASE}/logos/Logo_Total_Positive.webp`,\n grayScale: `${CDN_BASE}/logos/Logo_Total_gray_scale.webp`,\n monochBlack: `${CDN_BASE}/logos/Logo_Total_monochB.webp`,\n monochOrange: `${CDN_BASE}/logos/Logo_Total_monochO.webp`,\n isotype: `${CDN_BASE}/logos/Isotipo_Total_Color.webp`,\n\n // Total Millwork\n millworkColor: `${CDN_BASE}/logos/Logo_Millwork_Color.webp`,\n millworkNegative: `${CDN_BASE}/logos/Logo_Millwork_Negative.webp`,\n} as const;\n\nexport type LogoKey = keyof typeof logos;\n","import confetti from 'canvas-confetti';\n\n/**\n * Brand palette for the celebration burst, resolved from the `--color-main-*`\n * tokens rather than referenced through them: the canvas is appended to the\n * body, outside the themed tree, so `var()` would resolve against the document\n * root and miss any scoped override anyway.\n *\n * `--color-main-white` is deliberately absent. The app paints its page ground\n * `--color-main-light-background` (#f1f5f7), which swallows white particles.\n */\nexport const CONFETTI_COLORS = [\n '#22205f', // --color-main-blue-primary\n '#f66a24', // --color-main-orange-primary\n '#faca4a', // --color-main-yellow-primary\n '#01d42f', // --color-main-positive-state\n '#d93235', // --color-main-warning-state\n] as const;\n\nexport type FireConfettiOptions = {\n /** Particles per cannon. Two cannons fire, so the burst is twice this. */\n particleCount?: number;\n /** Vertical launch point: 0 is the top of the viewport, 1 the bottom. */\n originY?: number;\n /** Overrides the brand palette. Any CSS color string canvas can parse. */\n colors?: string[];\n};\n\n/**\n * Fires a celebration burst from two cannons angled inward at the lower corners\n * of the viewport.\n *\n * The geometry is the whole point. A single centred burst reads as a puff and\n * dies mid-screen; the crossfire covers the full width, which is what carries\n * the celebration. Launching from 0.7 rather than the centre reads as confetti\n * thrown upward instead of an explosion pushing outward.\n *\n * Resolves once the last particle has settled, so a caller can sequence on it.\n * Honours `prefers-reduced-motion`, in which case it resolves immediately\n * without drawing.\n */\nexport function fireConfetti({\n particleCount = 60,\n originY = 0.7,\n colors = [...CONFETTI_COLORS],\n}: FireConfettiOptions = {}): Promise<void> {\n const shared: confetti.Options = {\n particleCount,\n colors,\n spread: 70,\n startVelocity: 55,\n disableForReducedMotion: true,\n };\n\n return Promise.all([\n confetti({ ...shared, angle: 60, origin: { x: 0, y: originY } }),\n confetti({ ...shared, angle: 120, origin: { x: 1, y: originY } }),\n ]).then(() => undefined);\n}\n\n/**\n * Clears every burst still in flight and removes the canvas.\n *\n * For a caller that unmounts, or navigates away, while particles are airborne.\n */\nexport function resetConfetti(): void {\n confetti.reset();\n}\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Table({\n className,\n containerClassName = 'overflow-x-auto',\n ...props\n}: ComponentProps<'table'> & {\n /**\n * Classes for the scroll container that wraps the table. Defaults to\n * `overflow-x-auto` for horizontal scrolling. Pass `overflow-visible` when an\n * outer element already owns scrolling (e.g. a sticky-header data table) —\n * a nested scroll container would otherwise trap `position: sticky` cells.\n */\n containerClassName?: string;\n}) {\n return (\n <div data-slot='table-container' className={cn('relative w-full', containerClassName)}>\n <table\n data-slot='table'\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: ComponentProps<'thead'>) {\n return (\n <thead data-slot='table-header' className={cn('[&_tr]:border-b', className)} {...props} />\n );\n}\n\nfunction TableBody({ className, ...props }: ComponentProps<'tbody'>) {\n return (\n <tbody\n data-slot='table-body'\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot='table-footer'\n className={cn('bg-muted/50 border-t font-medium last:[&>tr]:border-b-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: ComponentProps<'tr'>) {\n return (\n <tr\n data-slot='table-row'\n className={cn(\n 'hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: ComponentProps<'th'>) {\n return (\n <th\n data-slot='table-head'\n className={cn(\n 'text-foreground has-[[role=checkbox]]:pr-0 h-12 px-3 text-left align-middle font-medium whitespace-nowrap',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: ComponentProps<'td'>) {\n return (\n <td\n data-slot='table-cell'\n className={cn(\n 'has-[[role=checkbox]]:pr-0 p-3 align-middle whitespace-nowrap',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: ComponentProps<'caption'>) {\n return (\n <caption\n data-slot='table-caption'\n className={cn('text-muted-foreground mt-4 text-sm', className)}\n {...props}\n />\n );\n}\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","import { type ComponentProps } from 'react';\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { CheckIcon, MinusIcon } from 'lucide-react';\n\nfunction Checkbox({\n className,\n checked,\n ...props\n}: ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot='checkbox'\n checked={checked}\n className={cn(\n 'peer border-input bg-background focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground dark:data-[state=checked]:bg-primary relative flex size-4 shrink-0 items-center justify-center rounded-[5px] border transition-shadow outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3',\n className,\n )}\n {...props}>\n <CheckboxPrimitive.Indicator\n data-slot='checkbox-indicator'\n className='grid place-content-center text-current transition-none [&>svg]:size-3.5'>\n {checked === 'indeterminate' ? (\n <MinusIcon aria-hidden='true' />\n ) : (\n <CheckIcon aria-hidden='true' />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","import { memo, useId, type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/Select/select';\nimport type { TablePaginationProps } from '../Table/data-table.types';\n\nfunction Pagination({ className, ...props }: ComponentProps<'nav'>) {\n return (\n <nav\n role='navigation'\n aria-label='pagination'\n data-slot='pagination'\n className={cn('mx-auto flex w-full justify-center', className)}\n {...props}\n />\n );\n}\n\nfunction PaginationContent({ className, ...props }: ComponentProps<'ul'>) {\n return (\n <ul\n data-slot='pagination-content'\n className={cn('flex items-center gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction PaginationItem({ ...props }: ComponentProps<'li'>) {\n return <li data-slot='pagination-item' {...props} />;\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n} & Pick<ComponentProps<typeof Button>, 'size'> &\n ComponentProps<'a'>;\n\nfunction PaginationLink({ className, isActive, size = 'sm', ...props }: PaginationLinkProps) {\n return (\n <Button\n asChild\n variant={isActive ? 'outline' : 'ghost'}\n size={size}\n className={cn(className)}>\n <a\n aria-current={isActive ? 'page' : undefined}\n data-slot='pagination-link'\n data-active={isActive}\n {...props}\n />\n </Button>\n );\n}\n\nfunction PaginationPrevious({\n className,\n text = 'Previous',\n ...props\n}: ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label='Go to previous page'\n size='sm'\n className={cn('pl-2!', className)}\n {...props}>\n <ChevronLeftIcon data-icon='inline-start' />\n <span className='hidden sm:block'>{text}</span>\n </PaginationLink>\n );\n}\n\nfunction PaginationNext({\n className,\n text = 'Next',\n ...props\n}: ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label='Go to next page'\n size='sm'\n className={cn('pr-2!', className)}\n {...props}>\n <span className='hidden sm:block'>{text}</span>\n <ChevronRightIcon data-icon='inline-end' />\n </PaginationLink>\n );\n}\n\nfunction PaginationEllipsis({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n aria-hidden\n data-slot='pagination-ellipsis'\n className={cn(\n \"flex size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <MoreHorizontalIcon />\n <span className='sr-only'>More pages</span>\n </span>\n );\n}\n\n// Page-number generation mirrors the legacy TablePagination:\n// show all pages when total <= 7; otherwise first + last + a window\n// around the current page, with 'ellipsis' fillers.\nfunction getPageItems(page: number, totalPages: number): (number | 'ellipsis')[] {\n if (totalPages <= 7) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n const items: (number | 'ellipsis')[] = [1];\n const start = Math.max(2, page - 1);\n const end = Math.min(totalPages - 1, page + 1);\n if (start > 2) items.push('ellipsis');\n for (let p = start; p <= end; p++) items.push(p);\n if (end < totalPages - 1) items.push('ellipsis');\n items.push(totalPages);\n return items;\n}\n\nconst DEFAULT_ROWS_PER_PAGE = [10, 25, 50, 100];\n\nfunction TablePaginationBase({\n page,\n totalPages,\n perPage,\n totalRecords,\n rowsPerPageOptions = DEFAULT_ROWS_PER_PAGE,\n onPageChange,\n onPerPageChange,\n}: TablePaginationProps) {\n const rowsPerPageLabelId = useId();\n const pageItems = getPageItems(page, totalPages);\n\n // Guard empty state: show 0–0 when there are no records.\n const hasRecords = totalRecords !== undefined && totalRecords > 0;\n const from = hasRecords ? (page - 1) * perPage + 1 : 0;\n const to = hasRecords ? Math.min(page * perPage, totalRecords as number) : 0;\n\n // Derive position-stable ellipsis keys: at most two ellipses can appear,\n // one near the start and one near the end of the page range.\n let ellipsisCount = 0;\n const ellipsisKeys = pageItems.map((item) => {\n if (item === 'ellipsis') {\n ellipsisCount += 1;\n return ellipsisCount === 1 ? 'ellipsis-start' : 'ellipsis-end';\n }\n return null;\n });\n\n return (\n <nav\n role='navigation'\n aria-label='Table pagination'\n data-slot='table-pagination'\n className='flex flex-wrap items-center justify-between gap-4 py-2'>\n {totalRecords !== undefined && totalRecords > 0 && (\n <p className='text-muted-foreground text-sm'>\n Showing {from}–{to} of {totalRecords}\n </p>\n )}\n\n <ul data-slot='pagination-content' className='flex items-center gap-1'>\n <li>\n <Button\n variant='ghost'\n size='sm'\n aria-label='Go to previous page'\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}>\n <ChevronLeftIcon data-icon='inline-start' />\n <span className='hidden sm:block'>Previous</span>\n </Button>\n </li>\n\n {pageItems.map((item, index) =>\n item === 'ellipsis' ? (\n <li key={ellipsisKeys[index]!}>\n <span aria-hidden className='flex size-9 items-center justify-center'>\n <MoreHorizontalIcon />\n </span>\n </li>\n ) : (\n <li key={item}>\n <Button\n variant={item === page ? 'primary' : 'ghost'}\n size='sm'\n aria-current={item === page ? 'page' : undefined}\n onClick={() => onPageChange(item)}>\n {item}\n </Button>\n </li>\n ),\n )}\n\n <li>\n <Button\n variant='ghost'\n size='sm'\n aria-label='Go to next page'\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}>\n <span className='hidden sm:block'>Next</span>\n <ChevronRightIcon data-icon='inline-end' />\n </Button>\n </li>\n </ul>\n\n <div className='flex items-center gap-2'>\n {/* Programmatically associated with the SelectTrigger via aria-labelledby */}\n <span id={rowsPerPageLabelId} className='text-muted-foreground text-sm'>\n Rows per page\n </span>\n <Select value={String(perPage)} onValueChange={(v) => onPerPageChange(Number(v))}>\n <SelectTrigger aria-labelledby={rowsPerPageLabelId} className='w-20'>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {rowsPerPageOptions.map((opt) => (\n <SelectItem key={opt} value={String(opt)}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </nav>\n );\n}\n\nconst TablePagination = memo(TablePaginationBase);\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n TablePagination,\n};\n","import { createContext, useContext } from 'react';\n\nimport type { TableContextType } from './data-table.types';\n\nconst TableContext = createContext<TableContextType<unknown> | null>(null);\n\nfunction useTableContext<T = unknown>() {\n const ctx = useContext(TableContext);\n if (!ctx) {\n throw new Error('useTableContext must be used within DataTable');\n }\n // React context cannot be runtime-generic: the context is created as\n // TableContextType<unknown> and re-cast to the consumer's T at this hook\n // boundary. The cast is intentional — there is no runtime way to parameterise\n // a React context with T, so type safety for T through context is not\n // guaranteed and must be enforced by the DataTable provider at the call site.\n return ctx as unknown as TableContextType<T>;\n}\n\n/** Returns the context value or null when called outside a DataTable provider. */\nfunction useTableContextSafe<T = unknown>() {\n return useContext(TableContext) as TableContextType<T> | null;\n}\n\nexport { TableContext, useTableContext, useTableContextSafe };\n","import type { TableCellSize } from './data-table.types';\n\n/**\n * Padding and type scale per density step, shared by header and body cells.\n *\n * Both `DataTableHeaderCell` and `DataTableCell` must consume this map: if only\n * the body applied it, header labels and cell values would sit at different\n * horizontal offsets and the density toggle would move the body alone.\n */\nconst cellSizeClass: Record<TableCellSize, string> = {\n sm: 'px-3 py-1.5 text-xs',\n md: 'px-5 py-2.5 text-sm',\n lg: 'px-6 py-3 text-sm',\n};\n\nexport { cellSizeClass };\n","import { useMemo, type ReactNode } from 'react';\nimport { flexRender, type Row, type Column, type Cell } from '@tanstack/react-table';\n\nimport { cn } from '@/lib/utils';\nimport type { ColumnMeta, TableCellSize, TableVariant } from './data-table.types';\n\ninterface DataTableCardViewProps<T> {\n rows: Row<T>[];\n columns: Column<T, unknown>[];\n size?: TableCellSize;\n variant?: TableVariant;\n onRowClick?: (row: T) => void;\n isLoading?: boolean;\n skeletonRowCount?: number;\n emptyState?: ReactNode;\n}\n\nconst cardPadding: Record<TableCellSize, string> = {\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-5',\n};\n\nfunction DataTableCardView<T>({\n rows,\n columns,\n size = 'md',\n variant = 'default',\n onRowClick,\n isLoading,\n skeletonRowCount = 5,\n emptyState,\n}: DataTableCardViewProps<T>) {\n // Hooks must run unconditionally, before any early return (rules of hooks).\n const selectCol = useMemo(() => columns.find((c) => c.id === 'select'), [columns]);\n const actionsCol = useMemo(() => columns.find((c) => c.id === 'actions'), [columns]);\n const dataColumns = useMemo(\n () =>\n columns.filter(\n (c) =>\n c.id !== 'select' &&\n c.id !== 'actions' &&\n !(c.columnDef.meta as ColumnMeta)?.hideInCard,\n ),\n [columns],\n );\n\n if (isLoading) {\n return (\n <div className='space-y-2' aria-busy='true' aria-label='Loading table data'>\n {Array.from({ length: skeletonRowCount }).map((_, i) => (\n <div\n key={i}\n className={cn(\n 'bg-card animate-pulse rounded-md border',\n cardPadding[size],\n )}>\n <div className='space-y-2'>\n <div className='bg-muted h-4 w-1/3 rounded' aria-hidden='true' />\n <div className='bg-muted h-3 w-full rounded' aria-hidden='true' />\n <div className='bg-muted h-3 w-2/3 rounded' aria-hidden='true' />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (rows.length === 0) {\n return (\n <div className='bg-card text-muted-foreground rounded-md border p-8 text-center'>\n {emptyState ?? 'No results found'}\n </div>\n );\n }\n\n return (\n <div\n data-slot='data-table-card-view'\n className='space-y-2'\n role='list'\n aria-label='Table rows'>\n {rows.map((row) => {\n const isSelected = row.getIsSelected();\n const visibleCells = row.getVisibleCells();\n\n // Compute select/actions cells above the return to avoid IIFE patterns.\n const selectCell: Cell<T, unknown> | undefined = selectCol\n ? visibleCells.find((c) => c.column.id === 'select')\n : undefined;\n const actionsCell: Cell<T, unknown> | undefined = actionsCol\n ? visibleCells.find((c) => c.column.id === 'actions')\n : undefined;\n\n return (\n <div\n key={row.id}\n role='listitem'\n data-state={isSelected ? 'selected' : undefined}\n data-variant={variant}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n onKeyDown={\n onRowClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n }\n : undefined\n }\n tabIndex={onRowClick ? 0 : undefined}\n className={cn(\n 'bg-card text-card-foreground rounded-md border transition-colors',\n cardPadding[size],\n isSelected && 'border-primary/50 bg-muted',\n onRowClick &&\n 'hover:bg-muted focus-visible:ring-ring cursor-pointer focus-visible:ring-2 focus-visible:outline-none',\n variant === 'striped' && 'odd:bg-muted/20',\n )}>\n {selectCell && (\n <div className='mb-3 flex items-center'>\n {flexRender(selectCol!.columnDef.cell, selectCell.getContext())}\n </div>\n )}\n\n <dl className='grid grid-cols-2 gap-x-4 gap-y-2'>\n {dataColumns.map((col) => {\n const meta = (col.columnDef.meta ?? {}) as ColumnMeta;\n const cell = visibleCells.find((c) => c.column.id === col.id);\n if (!cell) return null;\n const labelText =\n meta.cardLabel ??\n (typeof col.columnDef.header === 'string'\n ? col.columnDef.header\n : col.id);\n return (\n <div key={col.id} className='flex flex-col gap-0.5'>\n <dt className='text-muted-foreground text-xs font-medium'>\n {labelText}\n </dt>\n <dd className='truncate text-sm'>\n {flexRender(col.columnDef.cell, cell.getContext())}\n </dd>\n </div>\n );\n })}\n </dl>\n\n {actionsCell && (\n <div className='mt-3 flex justify-end border-t pt-2'>\n {flexRender(actionsCol!.columnDef.cell, actionsCell.getContext())}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\nexport { DataTableCardView };\nexport type { DataTableCardViewProps };\n","import type { Row } from '@tanstack/react-table';\nimport type { ColumnFiltersState } from '@tanstack/react-table';\n\n/**\n * Extracts unique values from a column in the dataset\n * @param data - The array of data objects\n * @param columnId - The column identifier\n * @param accessor - Optional accessor function to get the value from a row\n * @returns Array of unique string values, sorted alphabetically\n */\nexport function getUniqueColumnValues<T>(\n data: T[],\n columnId: string,\n accessor?: (row: T, index: number) => unknown,\n): string[] {\n const values = new Set<string>();\n\n data.forEach((row, index) => {\n let value: unknown;\n\n if (accessor) {\n value = accessor(row, index);\n } else {\n // Default: access by columnId\n value = (row as Record<string, unknown>)[columnId];\n }\n\n // Convert to string and add to set (handles null/undefined)\n if (value != null) {\n values.add(String(value));\n }\n });\n\n // Intentional locale fix: pass 'en' for deterministic cross-locale alphabetical sort.\n return Array.from(values).sort((a, b) => a.localeCompare(b, 'en'));\n}\n\n/**\n * Custom filter function for TanStack Table multi-select filtering\n * Checks if the row's value is included in the array of selected filter values\n * @param row - The row being filtered\n * @param columnId - The column identifier\n * @param filterValue - Array of selected filter values\n * @returns true if the row should be included in filtered results\n */\nexport function multiSelectFilter<T>(row: Row<T>, columnId: string, filterValue: unknown): boolean {\n // Guard: only treat the value as a string array when it actually is one.\n const filterValues: string[] = Array.isArray(filterValue) ? (filterValue as string[]) : [];\n\n // If no filters selected, pass through — show all rows (original semantics).\n if (filterValues.length === 0) {\n return true;\n }\n\n // Get the cell value\n const cellValue = row.getValue(columnId);\n\n // Convert to string and check if it's in the filter array\n if (cellValue != null) {\n return filterValues.includes(String(cellValue));\n }\n\n return false;\n}\n\n/**\n * Searches for a term within an array of items (case-insensitive)\n * @param items - Array of items to search through\n * @param searchTerm - The search term\n * @returns Filtered array of items matching the search term\n */\nexport function searchInArray(items: string[], searchTerm: string): string[] {\n if (!searchTerm || searchTerm.trim() === '') {\n return items;\n }\n\n const normalizedSearch = searchTerm.toLowerCase().trim();\n\n return items.filter((item) => item.toLowerCase().includes(normalizedSearch));\n}\n\n/**\n * Gets the count of rows for each unique value in a column\n * Useful for showing counts next to filter options (e.g., \"Active (5)\")\n * @param data - The array of data objects\n * @param columnId - The column identifier\n * @param accessor - Optional accessor function to get the value from a row\n * @returns Object mapping values to their counts\n */\nexport function getColumnValueCounts<T>(\n data: T[],\n columnId: string,\n accessor?: (row: T, index: number) => unknown,\n): Record<string, number> {\n const counts: Record<string, number> = {};\n\n data.forEach((row, index) => {\n let value: unknown;\n\n if (accessor) {\n value = accessor(row, index);\n } else {\n value = (row as Record<string, unknown>)[columnId];\n }\n\n if (value != null) {\n const stringValue = String(value);\n counts[stringValue] = (counts[stringValue] || 0) + 1;\n }\n });\n\n return counts;\n}\n\n/**\n * Checks if a column has active filters\n * @param columnFilters - Current column filters state\n * @param columnId - The column identifier\n * @returns true if the column has active filters\n */\nexport function hasActiveFilters(columnFilters: ColumnFiltersState, columnId: string): boolean {\n const filter = columnFilters.find((f) => f.id === columnId);\n if (!filter) return false;\n return Array.isArray(filter.value) ? filter.value.length > 0 : false;\n}\n\n/**\n * Gets the active filter values for a specific column\n * @param columnFilters - Current column filters state\n * @param columnId - The column identifier\n * @returns Array of active filter values for the column\n */\nexport function getActiveFilterValues(\n columnFilters: ColumnFiltersState,\n columnId: string,\n): string[] {\n const filter = columnFilters.find((f) => f.id === columnId);\n if (!filter) return [];\n return Array.isArray(filter.value) ? (filter.value as string[]) : [];\n}\n\n/**\n * Gets the count of active filters across all columns\n * @param columnFilters - Current column filters state\n * @returns Total number of active filter values\n */\nexport function getActiveFilterCount(columnFilters: ColumnFiltersState): number {\n return columnFilters.reduce((total, filter) => {\n return total + (Array.isArray(filter.value) ? filter.value.length : 0);\n }, 0);\n}\n","import { memo, useCallback, useId, useMemo, useState } from 'react';\nimport { Funnel } from 'lucide-react';\nimport { Button } from '@/components/ui/Button/button';\nimport { Checkbox } from '@/components/ui/Checkbox/checkbox';\nimport { Input } from '@/components/ui/Input/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\nimport { cn } from '@/lib/utils';\n\nimport { searchInArray } from './utils/filter-utils';\n\ninterface FilterOptionProps {\n value: string;\n checked: boolean;\n onChange: (value: string, checked: boolean) => void;\n}\n\nconst FilterOption = memo(function FilterOption({\n value,\n checked,\n onChange,\n}: FilterOptionProps) {\n // Radix Checkbox renders a <button role=\"checkbox\">. A button is a labelable\n // element, so an explicit htmlFor/id association gives it an accessible name\n // (equal to the visible text) and lets clicking the text toggle it.\n const id = useId();\n return (\n <div className='hover:bg-muted flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm'>\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(state) => onChange(value, state === true)}\n />\n <label htmlFor={id} className='flex-1 cursor-pointer truncate'>\n {value}\n </label>\n </div>\n );\n});\n\ninterface DataTableColumnFilterProps {\n options: string[];\n selectedValues: string[];\n onChange: (values: string[]) => void;\n searchPlaceholder?: string;\n /** Human-readable column name used to build accessible labels. */\n columnLabel?: string;\n}\n\nfunction DataTableColumnFilter({\n options,\n selectedValues,\n onChange,\n searchPlaceholder,\n columnLabel = 'column',\n}: DataTableColumnFilterProps) {\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n\n const listId = useId();\n\n const hasActive = selectedValues.length > 0;\n const visibleOptions = useMemo(\n () => (search ? searchInArray(options, search) : options),\n [options, search],\n );\n\n const handleOptionChange = useCallback(\n (value: string, checked: boolean) => {\n if (checked) onChange([...selectedValues, value]);\n else onChange(selectedValues.filter((v) => v !== value));\n },\n [selectedValues, onChange],\n );\n\n const allVisibleSelected =\n visibleOptions.length > 0 && visibleOptions.every((o) => selectedValues.includes(o));\n\n const toggleSelectAll = useCallback(() => {\n if (allVisibleSelected) {\n onChange(selectedValues.filter((v) => !visibleOptions.includes(v)));\n } else {\n const merged = new Set([...selectedValues, ...visibleOptions]);\n onChange(Array.from(merged));\n }\n }, [allVisibleSelected, selectedValues, visibleOptions, onChange]);\n\n const resolvedPlaceholder = searchPlaceholder ?? `Search ${columnLabel}…`;\n // Convey active state via text, not color/shape alone (WCAG 1.4.1).\n const triggerLabel = hasActive\n ? `Filter ${columnLabel}, ${selectedValues.length} selected`\n : `Filter ${columnLabel}`;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n data-slot='data-table-column-filter'\n variant='ghost'\n size='sm'\n aria-label={triggerLabel}\n data-active={hasActive || undefined}\n className={cn(\n 'size-7 cursor-pointer p-0 text-white/80 hover:text-white',\n 'focus-visible:border-transparent focus-visible:ring-2 focus-visible:ring-white/70',\n hasActive && 'text-white',\n )}>\n {hasActive ? (\n <Funnel className='size-4' aria-hidden='true' fill='white' />\n ) : (\n <Funnel className='size-4' aria-hidden='true' />\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent align='start' className='w-64 p-2'>\n <Input\n type='text'\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={resolvedPlaceholder}\n aria-label={resolvedPlaceholder}\n aria-controls={listId}\n className='mb-2 h-8'\n />\n <button\n type='button'\n onClick={toggleSelectAll}\n aria-pressed={allVisibleSelected}\n disabled={visibleOptions.length === 0}\n className='hover:bg-muted mb-1 w-full rounded-sm px-2 py-1.5 text-left text-sm font-medium disabled:pointer-events-none disabled:opacity-50'>\n {allVisibleSelected ? 'Deselect all' : 'Select all'}\n </button>\n {/* Polite live region announces result count as the user types. */}\n <span className='sr-only' role='status' aria-live='polite'>\n {visibleOptions.length === 0\n ? 'No options'\n : `${visibleOptions.length} options`}\n </span>\n <div\n id={listId}\n role='group'\n aria-label={`${columnLabel} filter options`}\n className='max-h-64 overflow-y-auto'>\n {visibleOptions.length === 0 ? (\n <p className='text-muted-foreground px-2 py-1.5 text-sm'>No options</p>\n ) : (\n visibleOptions.map((option) => (\n <FilterOption\n key={option}\n value={option}\n checked={selectedValues.includes(option)}\n onChange={handleOptionChange}\n />\n ))\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DataTableColumnFilter, FilterOption };\nexport type { DataTableColumnFilterProps, FilterOptionProps };\n","import { useCallback } from 'react';\n\nimport { useTableContext } from '../data-table-context';\nimport { getActiveFilterValues } from '../utils/filter-utils';\n\nexport function useColumnFilter(columnId: string) {\n const { columnFilters, setColumnFilters } = useTableContext();\n\n const selectedValues = getActiveFilterValues(columnFilters, columnId);\n\n const handleChange = useCallback(\n (values: string[]) => {\n const newFilters = [...columnFilters];\n const existingFilterIndex = newFilters.findIndex((f) => f.id === columnId);\n\n if (values.length > 0) {\n if (existingFilterIndex >= 0) {\n newFilters[existingFilterIndex] = { id: columnId, value: values };\n } else {\n newFilters.push({ id: columnId, value: values });\n }\n } else {\n if (existingFilterIndex >= 0) {\n newFilters.splice(existingFilterIndex, 1);\n }\n }\n\n setColumnFilters(newFilters);\n },\n [columnFilters, columnId, setColumnFilters],\n );\n\n return {\n selectedValues,\n handleChange,\n };\n}\n","import type { AriaAttributes, CSSProperties } from 'react';\nimport { flexRender, type Header } from '@tanstack/react-table';\nimport {ArrowUp, ArrowDown, ArrowUpDown} from 'lucide-react';\nimport { TableHead } from '@/components/ui/Table/table';\nimport { cn } from '@/lib/utils';\n\nimport { DataTableColumnFilter } from './data-table-column-filter';\nimport { cellSizeClass } from './cell-size-class';\nimport { useTableContext } from './data-table-context';\nimport { useColumnFilter } from './hooks/use-column-filter';\nimport type { ColumnMeta } from './data-table.types';\n\ninterface DataTableHeaderCellProps<T> {\n header: Header<T, unknown>;\n}\n\nfunction DataTableHeaderCell<T>({ header }: DataTableHeaderCellProps<T>) {\n const { getUniqueValues, size: tableSize } = useTableContext<T>();\n const column = header.column;\n const meta = (column.columnDef.meta ?? {}) as ColumnMeta;\n\n const canSort = column.getCanSort() && meta.sortable !== false;\n const canFilter = column.getCanFilter() && meta.filterable !== false;\n const canResize = header.column.getCanResize() && meta.resizable !== false;\n const sortDir = column.getIsSorted();\n const pinned = column.getIsPinned();\n\n const { selectedValues, handleChange } = useColumnFilter(column.id);\n const options = getUniqueValues?.(column.id) ?? [];\n\n const pinnedStyle: CSSProperties | undefined = pinned\n ? {\n position: 'sticky',\n left: pinned === 'left' ? column.getStart('left') : undefined,\n right: pinned === 'right' ? column.getAfter('right') : undefined,\n zIndex: 21,\n }\n : undefined;\n\n // Map TanStack sort state to the WAI-ARIA aria-sort attribute value.\n const ariaSortValue: AriaAttributes['aria-sort'] = canSort\n ? sortDir === 'asc'\n ? 'ascending'\n : sortDir === 'desc'\n ? 'descending'\n : 'none'\n : undefined;\n\n return (\n <TableHead\n data-slot='data-table-header-cell'\n data-size={meta.size ?? tableSize}\n data-align={meta.align ?? 'left'}\n data-pinned={pinned || undefined}\n aria-sort={ariaSortValue}\n style={{\n width: canResize ? header.column.getSize() : meta.width,\n minWidth: meta.width,\n ...pinnedStyle,\n }}\n className={cn(\n 'bg-primary text-primary-foreground',\n // Same density padding as the body cells: without it the header\n // label and the cell value below it sit at different offsets.\n cellSizeClass[meta.size ?? tableSize],\n canResize && 'relative',\n meta.align === 'center' && 'text-center',\n meta.align === 'right' && 'text-right',\n meta.className,\n )}>\n <div\n className={cn(\n 'flex items-center gap-1',\n meta.align === 'center' && 'justify-center',\n meta.align === 'right' && 'justify-end',\n )}>\n {canSort ? (\n <button\n type='button'\n onClick={column.getToggleSortingHandler()}\n className='inline-flex items-center gap-1 rounded-sm outline-none focus-visible:ring-2 focus-visible:ring-white/70'>\n {flexRender(column.columnDef.header, header.getContext())}\n {sortDir === 'asc' ? (\n <ArrowUp className='size-4' aria-hidden='true' />\n ) : sortDir === 'desc' ? (\n <ArrowDown className='size-4' aria-hidden='true' />\n ) : (\n <ArrowUpDown className='size-4 opacity-60' aria-hidden='true' />\n )}\n </button>\n ) : (\n flexRender(column.columnDef.header, header.getContext())\n )}\n {canFilter && (\n <DataTableColumnFilter\n options={options}\n selectedValues={selectedValues}\n onChange={handleChange}\n columnLabel={column.id}\n />\n )}\n </div>\n {canResize && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn(\n 'absolute top-0 right-0 h-full w-1 cursor-col-resize touch-none select-none',\n 'hover:bg-white/30',\n header.column.getIsResizing() && 'bg-white/50',\n )}\n aria-hidden='true'\n />\n )}\n </TableHead>\n );\n}\n\nexport { DataTableHeaderCell };\nexport type { DataTableHeaderCellProps };\n","import { Skeleton } from '@/components/ui/Skeleton/skeleton';\nimport { TableCell, TableRow } from '@/components/ui/Table/table';\n\nimport type { TableCellSize } from './data-table.types';\n\nconst sizeClass: Record<TableCellSize, string> = {\n sm: 'h-8',\n md: 'h-10',\n lg: 'h-12',\n};\n\ninterface DataTableSkeletonProps {\n columnCount: number;\n rowCount?: number;\n size?: TableCellSize;\n}\n\nfunction DataTableSkeleton({ columnCount, rowCount = 5, size = 'md' }: DataTableSkeletonProps) {\n return (\n <>\n {Array.from({ length: rowCount }).map((_, rowIndex) => (\n <TableRow\n key={`skeleton-row-${rowIndex}`}\n data-slot='table-skeleton-row'\n aria-busy='true'>\n {Array.from({ length: columnCount }).map((_, cellIndex) => (\n <TableCell\n key={`skeleton-cell-${rowIndex}-${cellIndex}`}\n className={sizeClass[size]}>\n <Skeleton className='h-4 w-full' />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </>\n );\n}\n\nexport { DataTableSkeleton };\nexport type { DataTableSkeletonProps };\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { SortingState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSortingProps {\n /**\n * Controlled sorting state (optional)\n * If provided, the component operates in controlled mode\n */\n sorting?: SortingState;\n\n /**\n * Default sorting state for uncontrolled mode\n * @default []\n */\n defaultSorting?: SortingState;\n\n /**\n * Callback fired when sorting changes\n * Required for controlled mode, optional for uncontrolled\n */\n onSortingChange?: (sorting: SortingState) => void;\n}\n\nexport interface UseTableSortingReturn {\n /**\n * Current sorting state (controlled or internal)\n */\n sortingState: SortingState;\n\n /**\n * Handler for TanStack Table's onSortingChange\n */\n handleSortingChange: (updater: Updater<SortingState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setSorting: (sorting: SortingState) => void;\n}\n\n/**\n * Hook to manage table sorting state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { sortingState, handleSortingChange } = useTableSorting({\n * defaultSorting: [{ id: 'name', desc: false }],\n * onSortingChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [sorting, setSorting] = useState<SortingState>([]);\n * const { sortingState, handleSortingChange } = useTableSorting({\n * sorting,\n * onSortingChange: setSorting\n * });\n * ```\n */\nexport function useTableSorting({\n sorting: controlledSorting,\n defaultSorting = [],\n onSortingChange,\n}: UseTableSortingProps): UseTableSortingReturn {\n // Internal state for uncontrolled mode\n const [internalSorting, setInternalSorting] = useState<SortingState>(defaultSorting);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onSortingChange);\n useLayoutEffect(() => {\n onChangeRef.current = onSortingChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledSorting !== undefined;\n\n // Use controlled sorting if provided, otherwise use internal state\n const sortingState = isControlled ? controlledSorting : internalSorting;\n\n /**\n * Handle sorting changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleSortingChange = useCallback(\n (updater: Updater<SortingState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newSorting =\n typeof updater === 'function' ? updater(controlledSorting) : updater;\n onChangeRef.current?.(newSorting);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalSorting((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledSorting is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledSorting],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setSorting = useCallback(\n (newSorting: SortingState) => {\n if (isControlled) {\n onChangeRef.current?.(newSorting);\n } else {\n setInternalSorting(newSorting);\n onChangeRef.current?.(newSorting);\n }\n },\n [isControlled],\n );\n\n return {\n sortingState,\n handleSortingChange,\n isControlled,\n setSorting,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { ColumnFiltersState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableFilteringProps {\n /**\n * Controlled column filters state (optional)\n * If provided, the component operates in controlled mode\n */\n columnFilters?: ColumnFiltersState;\n\n /**\n * Default column filters state for uncontrolled mode\n * @default []\n */\n defaultColumnFilters?: ColumnFiltersState;\n\n /**\n * Callback fired when column filters change\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnFiltersChange?: (columnFilters: ColumnFiltersState) => void;\n}\n\nexport interface UseTableFilteringReturn {\n /**\n * Current column filters state (controlled or internal)\n */\n columnFiltersState: ColumnFiltersState;\n\n /**\n * Handler for TanStack Table's onColumnFiltersChange\n */\n handleColumnFiltersChange: (updater: Updater<ColumnFiltersState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnFilters: (columnFilters: ColumnFiltersState) => void;\n}\n\n/**\n * Hook to manage table column filtering state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnFiltersState, handleColumnFiltersChange } = useTableFiltering({\n * defaultColumnFilters: [{ id: 'status', value: ['Active'] }],\n * onColumnFiltersChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [filters, setFilters] = useState<ColumnFiltersState>([]);\n * const { columnFiltersState, handleColumnFiltersChange } = useTableFiltering({\n * columnFilters: filters,\n * onColumnFiltersChange: setFilters\n * });\n * ```\n */\nexport function useTableFiltering({\n columnFilters: controlledFilters,\n defaultColumnFilters = [],\n onColumnFiltersChange,\n}: UseTableFilteringProps): UseTableFilteringReturn {\n // Internal state for uncontrolled mode\n const [internalFilters, setInternalFilters] =\n useState<ColumnFiltersState>(defaultColumnFilters);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnFiltersChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnFiltersChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledFilters !== undefined;\n\n // Use controlled filters if provided, otherwise use internal state\n const columnFiltersState = isControlled ? controlledFilters : internalFilters;\n\n /**\n * Handle column filters changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnFiltersChange = useCallback(\n (updater: Updater<ColumnFiltersState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newFilters =\n typeof updater === 'function' ? updater(controlledFilters) : updater;\n onChangeRef.current?.(newFilters);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalFilters((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledFilters is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledFilters],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnFilters = useCallback(\n (newFilters: ColumnFiltersState) => {\n if (isControlled) {\n onChangeRef.current?.(newFilters);\n } else {\n setInternalFilters(newFilters);\n onChangeRef.current?.(newFilters);\n }\n },\n [isControlled],\n );\n\n return {\n columnFiltersState,\n handleColumnFiltersChange,\n isControlled,\n setColumnFilters,\n };\n}\n","import { useState, useCallback } from 'react';\nimport type { RowSelectionState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSelectionProps {\n rowSelection?: RowSelectionState;\n defaultRowSelection?: RowSelectionState;\n onRowSelectionChange?: (state: RowSelectionState) => void;\n}\n\nexport interface UseTableSelectionReturn {\n rowSelectionState: RowSelectionState;\n handleRowSelectionChange: (updater: Updater<RowSelectionState>) => void;\n setRowSelection: (state: RowSelectionState) => void;\n}\n\nexport function useTableSelection({\n rowSelection: controlled,\n defaultRowSelection = {},\n onRowSelectionChange,\n}: UseTableSelectionProps): UseTableSelectionReturn {\n const [internal, setInternal] = useState<RowSelectionState>(defaultRowSelection);\n const isControlled = controlled !== undefined;\n const rowSelectionState = isControlled ? controlled : internal;\n\n const handleRowSelectionChange = useCallback(\n (updater: Updater<RowSelectionState>) => {\n const next = typeof updater === 'function' ? updater(rowSelectionState) : updater;\n if (!isControlled) setInternal(next);\n onRowSelectionChange?.(next);\n },\n [isControlled, rowSelectionState, onRowSelectionChange],\n );\n\n const setRowSelection = useCallback(\n (next: RowSelectionState) => {\n if (!isControlled) setInternal(next);\n onRowSelectionChange?.(next);\n },\n [isControlled, onRowSelectionChange],\n );\n\n return { rowSelectionState, handleRowSelectionChange, setRowSelection };\n}\n","import { useState, useCallback } from 'react';\n\nexport interface UseTableGlobalFilterProps {\n /**\n * Controlled global filter state (optional)\n * If provided, the component operates in controlled mode\n */\n globalFilter?: string;\n\n /**\n * Default global filter state for uncontrolled mode\n * @default ''\n */\n defaultGlobalFilter?: string;\n\n /**\n * Callback fired when global filter changes\n * Required for controlled mode, optional for uncontrolled\n */\n onGlobalFilterChange?: (value: string) => void;\n}\n\nexport interface UseTableGlobalFilterReturn {\n /**\n * Current global filter state (controlled or internal)\n */\n globalFilterState: string;\n\n /**\n * Handler for global filter changes\n */\n handleGlobalFilterChange: (value: string) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setGlobalFilter: (value: string) => void;\n}\n\n/**\n * Hook to manage table global filter state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { globalFilterState, handleGlobalFilterChange } = useTableGlobalFilter({\n * defaultGlobalFilter: '',\n * onGlobalFilterChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [globalFilter, setGlobalFilter] = useState<string>('');\n * const { globalFilterState, handleGlobalFilterChange } = useTableGlobalFilter({\n * globalFilter,\n * onGlobalFilterChange: setGlobalFilter\n * });\n * ```\n */\nexport function useTableGlobalFilter({\n globalFilter: controlledFilter,\n defaultGlobalFilter = '',\n onGlobalFilterChange,\n}: UseTableGlobalFilterProps): UseTableGlobalFilterReturn {\n // Internal state for uncontrolled mode\n const [internalFilter, setInternalFilter] = useState<string>(defaultGlobalFilter);\n\n // Determine if component is in controlled mode\n const isControlled = controlledFilter !== undefined;\n\n // Use controlled filter if provided, otherwise use internal state\n const globalFilterState = isControlled ? controlledFilter : internalFilter;\n\n /**\n * Handle global filter changes\n */\n const handleGlobalFilterChange = useCallback(\n (value: string) => {\n if (isControlled) {\n // In controlled mode: only notify parent\n onGlobalFilterChange?.(value);\n } else {\n // In uncontrolled mode: update internal state\n setInternalFilter(value);\n // And optionally notify parent\n onGlobalFilterChange?.(value);\n }\n },\n [isControlled, onGlobalFilterChange],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setGlobalFilter = useCallback(\n (value: string) => {\n if (isControlled) {\n onGlobalFilterChange?.(value);\n } else {\n setInternalFilter(value);\n onGlobalFilterChange?.(value);\n }\n },\n [isControlled, onGlobalFilterChange],\n );\n\n return {\n globalFilterState,\n handleGlobalFilterChange,\n isControlled,\n setGlobalFilter,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { VisibilityState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableVisibilityProps {\n /**\n * Controlled column visibility state (optional)\n * If provided, the component operates in controlled mode\n */\n columnVisibility?: VisibilityState;\n\n /**\n * Default column visibility state for uncontrolled mode\n * @default {}\n */\n defaultColumnVisibility?: VisibilityState;\n\n /**\n * Callback fired when column visibility changes\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnVisibilityChange?: (state: VisibilityState) => void;\n}\n\nexport interface UseTableVisibilityReturn {\n /**\n * Current column visibility state (controlled or internal)\n */\n columnVisibilityState: VisibilityState;\n\n /**\n * Handler for TanStack Table's onColumnVisibilityChange\n */\n handleColumnVisibilityChange: (updater: Updater<VisibilityState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnVisibility: (state: VisibilityState) => void;\n}\n\n/**\n * Hook to manage table column visibility state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnVisibilityState, handleColumnVisibilityChange } = useTableVisibility({\n * defaultColumnVisibility: { email: false },\n * onColumnVisibilityChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [visibility, setVisibility] = useState<VisibilityState>({});\n * const { columnVisibilityState, handleColumnVisibilityChange } = useTableVisibility({\n * columnVisibility: visibility,\n * onColumnVisibilityChange: setVisibility\n * });\n * ```\n */\nexport function useTableVisibility({\n columnVisibility: controlledVisibility,\n defaultColumnVisibility = {},\n onColumnVisibilityChange,\n}: UseTableVisibilityProps): UseTableVisibilityReturn {\n // Internal state for uncontrolled mode\n const [internalVisibility, setInternalVisibility] =\n useState<VisibilityState>(defaultColumnVisibility);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnVisibilityChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnVisibilityChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledVisibility !== undefined;\n\n // Use controlled visibility if provided, otherwise use internal state\n const columnVisibilityState = isControlled ? controlledVisibility : internalVisibility;\n\n /**\n * Handle column visibility changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnVisibilityChange = useCallback(\n (updater: Updater<VisibilityState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newVisibility =\n typeof updater === 'function' ? updater(controlledVisibility) : updater;\n onChangeRef.current?.(newVisibility);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalVisibility((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledVisibility is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledVisibility],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnVisibility = useCallback(\n (newVisibility: VisibilityState) => {\n if (isControlled) {\n onChangeRef.current?.(newVisibility);\n } else {\n setInternalVisibility(newVisibility);\n onChangeRef.current?.(newVisibility);\n }\n },\n [isControlled],\n );\n\n return {\n columnVisibilityState,\n handleColumnVisibilityChange,\n isControlled,\n setColumnVisibility,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { ColumnSizingState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSizingProps {\n /**\n * Controlled column sizing state (optional)\n * If provided, the component operates in controlled mode\n */\n columnSizing?: ColumnSizingState;\n\n /**\n * Default column sizing state for uncontrolled mode\n * @default {}\n */\n defaultColumnSizing?: ColumnSizingState;\n\n /**\n * Callback fired when column sizing changes\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnSizingChange?: (state: ColumnSizingState) => void;\n}\n\nexport interface UseTableSizingReturn {\n /**\n * Current column sizing state (controlled or internal)\n */\n columnSizingState: ColumnSizingState;\n\n /**\n * Handler for TanStack Table's onColumnSizingChange\n */\n handleColumnSizingChange: (updater: Updater<ColumnSizingState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnSizing: (state: ColumnSizingState) => void;\n}\n\n/**\n * Hook to manage table column sizing state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnSizingState, handleColumnSizingChange } = useTableSizing({\n * defaultColumnSizing: { name: 150, email: 200 },\n * onColumnSizingChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [sizing, setSizing] = useState<ColumnSizingState>({});\n * const { columnSizingState, handleColumnSizingChange } = useTableSizing({\n * columnSizing: sizing,\n * onColumnSizingChange: setSizing\n * });\n * ```\n */\nexport function useTableSizing({\n columnSizing: controlledSizing,\n defaultColumnSizing = {},\n onColumnSizingChange,\n}: UseTableSizingProps): UseTableSizingReturn {\n // Internal state for uncontrolled mode\n const [internalSizing, setInternalSizing] = useState<ColumnSizingState>(defaultColumnSizing);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnSizingChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnSizingChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledSizing !== undefined;\n\n // Use controlled sizing if provided, otherwise use internal state\n const columnSizingState = isControlled ? controlledSizing : internalSizing;\n\n /**\n * Handle column sizing changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnSizingChange = useCallback(\n (updater: Updater<ColumnSizingState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newSizing =\n typeof updater === 'function' ? updater(controlledSizing) : updater;\n onChangeRef.current?.(newSizing);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalSizing((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledSizing is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledSizing],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnSizing = useCallback(\n (newSizing: ColumnSizingState) => {\n if (isControlled) {\n onChangeRef.current?.(newSizing);\n } else {\n setInternalSizing(newSizing);\n onChangeRef.current?.(newSizing);\n }\n },\n [isControlled],\n );\n\n return {\n columnSizingState,\n handleColumnSizingChange,\n isControlled,\n setColumnSizing,\n };\n}\n","import { useCallback } from 'react';\nimport type { ColumnSizingState, VisibilityState } from '@tanstack/react-table';\nimport type { TableCellSize } from '../data-table.types';\n\nconst PREFIX = 'tcce-table';\n\nfunction storageKey(tableId: string, feature: string) {\n return `${PREFIX}:${tableId}:${feature}`;\n}\n\nfunction readJson<T>(key: string, fallback: T): T {\n if (typeof window === 'undefined') return fallback;\n try {\n const raw = localStorage.getItem(key);\n return raw ? (JSON.parse(raw) as T) : fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction writeJson(key: string, value: unknown): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n // quota exceeded or incognito — fail silently\n }\n}\n\nexport interface UseTablePersistenceOptions {\n tableId?: string;\n defaultVisibility?: VisibilityState;\n defaultSizing?: ColumnSizingState;\n defaultDensity?: TableCellSize;\n}\n\nexport interface UseTablePersistenceReturn {\n initialVisibility: VisibilityState;\n initialSizing: ColumnSizingState;\n initialDensity: TableCellSize;\n persistVisibility: (v: VisibilityState) => void;\n persistSizing: (s: ColumnSizingState) => void;\n persistDensity: (d: TableCellSize) => void;\n}\n\nexport function useTablePersistence({\n tableId,\n defaultVisibility = {},\n defaultSizing = {},\n defaultDensity = 'md',\n}: UseTablePersistenceOptions): UseTablePersistenceReturn {\n // Keys are null when persistence is disabled (no tableId). Hooks run\n // unconditionally so the returned persist callbacks keep a stable identity\n // across renders — consumers can safely list them in effect dependencies.\n const visKey = tableId ? storageKey(tableId, 'visibility') : null;\n const sizKey = tableId ? storageKey(tableId, 'sizing') : null;\n const denKey = tableId ? storageKey(tableId, 'density') : null;\n\n const persistVisibility = useCallback(\n (v: VisibilityState) => {\n if (visKey) writeJson(visKey, v);\n },\n [visKey],\n );\n const persistSizing = useCallback(\n (s: ColumnSizingState) => {\n if (sizKey) writeJson(sizKey, s);\n },\n [sizKey],\n );\n const persistDensity = useCallback(\n (d: TableCellSize) => {\n if (denKey) writeJson(denKey, d);\n },\n [denKey],\n );\n\n return {\n initialVisibility: visKey\n ? readJson<VisibilityState>(visKey, defaultVisibility)\n : defaultVisibility,\n initialSizing: sizKey ? readJson<ColumnSizingState>(sizKey, defaultSizing) : defaultSizing,\n initialDensity: denKey ? readJson<TableCellSize>(denKey, defaultDensity) : defaultDensity,\n persistVisibility,\n persistSizing,\n persistDensity,\n };\n}\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, type CSSProperties } from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable,\n type Cell,\n type ColumnPinningState,\n type Row,\n} from '@tanstack/react-table';\n\nimport { Table, TableBody, TableCell, TableHeader, TableRow } from '@/components/ui/Table/table';\nimport { cn } from '@/lib/utils';\n\nimport { useMediaQuery } from '@/lib/use-media-query';\nimport { TableContext, useTableContext } from './data-table-context';\nimport { cellSizeClass } from './cell-size-class';\nimport { DataTableCardView } from './data-table-card-view';\nimport { DataTableHeaderCell } from './data-table-header-cell';\nimport { DataTableSkeleton } from './data-table-skeleton';\nimport { useTableSorting } from './hooks/use-table-sorting';\nimport { useTableFiltering } from './hooks/use-table-filtering';\nimport { useTableSelection } from './hooks/use-table-selection';\nimport { useTableGlobalFilter } from './hooks/use-table-global-filter';\nimport { useTableVisibility } from './hooks/use-table-visibility';\nimport { useTableSizing } from './hooks/use-table-sizing';\nimport { useTablePersistence } from './hooks/use-table-persistence';\nimport { Checkbox } from '@/components/ui/Checkbox/checkbox';\nimport { getUniqueColumnValues, multiSelectFilter } from './utils/filter-utils';\nimport type {\n ColumnMeta,\n DataTableProps,\n TableCellSize,\n TableClassNames,\n TableColumnDef,\n TableContextType,\n} from './data-table.types';\n\nfunction resolveClassName<T>(\n value: string | ((row: Row<T>) => string) | undefined,\n row: Row<T>,\n): string | undefined {\n return typeof value === 'function' ? value(row) : value;\n}\n\nfunction DataTableCell<T>({\n cell,\n cellClassName,\n}: {\n cell: Cell<T, unknown>;\n cellClassName?: string;\n}) {\n const { size: tableSize } = useTableContext<T>();\n const meta = (cell.column.columnDef.meta ?? {}) as ColumnMeta;\n const pinned = cell.column.getIsPinned();\n const value = cell.getValue();\n\n const pinnedStyle: CSSProperties | undefined = pinned\n ? {\n position: 'sticky',\n left: pinned === 'left' ? cell.column.getStart('left') : undefined,\n right: pinned === 'right' ? cell.column.getAfter('right') : undefined,\n zIndex: 11,\n }\n : undefined;\n\n const resolvedWidth = cell.column.getCanResize() ? cell.column.getSize() : meta.width;\n\n return (\n <TableCell\n data-size={meta.size ?? tableSize}\n data-align={meta.align ?? 'left'}\n data-pinned={pinned || undefined}\n title={\n meta.ellipsis && (typeof value === 'string' || typeof value === 'number')\n ? String(value)\n : undefined\n }\n style={{ width: resolvedWidth, minWidth: meta.width, ...pinnedStyle }}\n className={cn(\n cellSizeClass[meta.size ?? tableSize],\n 'text-primary',\n meta.align === 'center' && 'text-center',\n meta.align === 'right' && 'text-right',\n meta.ellipsis && 'max-w-0 truncate',\n pinned && 'bg-background',\n meta.className,\n cellClassName,\n )}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n}\n\n/**\n * Selector for controls that own their own click: row action triggers, selection\n * checkboxes, links, form fields. A click landing on any of them must not also\n * fire the row handler.\n */\nconst INTERACTIVE_CELL_CONTENT =\n 'button, a, input, select, textarea, [role=\"button\"], [role=\"checkbox\"], [role=\"menuitem\"], [role=\"link\"]';\n\n/**\n * True when the event came from interactive content nested inside a cell rather\n * than from the row itself. The `currentTarget` comparison matters: a clickable\n * row carries `role=\"button\"`, so it matches the selector too and would\n * otherwise swallow every click.\n */\nfunction isInteractiveCellEvent(event: { target: EventTarget | null; currentTarget: EventTarget }) {\n const target = event.target;\n if (!(target instanceof Element)) return false;\n const match = target.closest(INTERACTIVE_CELL_CONTENT);\n return match !== null && match !== event.currentTarget;\n}\n\nfunction DataTableRow<T>({ row, classNames }: { row: Row<T>; classNames?: TableClassNames<T> }) {\n const { onRowClick, variant } = useTableContext<T>();\n const clickable = Boolean(onRowClick);\n const rowClassName = resolveClassName(classNames?.row, row);\n const cellClassName = resolveClassName(classNames?.cell, row);\n\n return (\n <TableRow\n data-variant={variant}\n data-clickable={clickable || undefined}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n onClick={\n clickable\n ? (e) => {\n if (isInteractiveCellEvent(e)) return;\n onRowClick?.(row.original);\n }\n : undefined\n }\n onKeyDown={\n clickable\n ? (e) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n if (isInteractiveCellEvent(e)) return;\n e.preventDefault();\n onRowClick?.(row.original);\n }\n : undefined\n }\n className={cn('hover:bg-muted', clickable && 'cursor-pointer', rowClassName)}>\n {row.getVisibleCells().map((cell) => (\n <DataTableCell key={cell.id} cell={cell} cellClassName={cellClassName} />\n ))}\n </TableRow>\n );\n}\n\n/**\n * TanStack Table v8 data table with sorting, filtering, global search, pagination, row\n * selection, column visibility, resizing, density control, sticky headers, column pinning\n * and an automatic mobile card layout.\n *\n * Per-column presentation belongs in `meta` (`ColumnMeta`) on each column definition rather\n * than in per-cell `className` strings: `align`, `size` (density override), `sortable`,\n * `filterable`, `ellipsis`, `variant`, `width`, `className`, `pinned`, `cardLabel`,\n * `hideInCard` and `resizable`.\n *\n * Column width has two authorities. With `enableColumnResizing` off (the default),\n * `meta.width` drives both `width` and `min-width` on the header and body cells; a number is\n * pixels and a string is any CSS length (`'8rem'`, `'20%'`, `'100px'`). With\n * `enableColumnResizing` on, the rendered width instead comes from TanStack's own top-level\n * `size` / `minSize` / `maxSize` on the column definition (`size` defaults to 150px) and\n * `meta.width` degrades to a `min-width` floor. Note that `meta.size` is cell density, not a\n * width — the pixel width is the top-level `size`.\n *\n * The table element is `w-full` under the browser's default `table-layout: auto`, so `width`\n * is only a hint and `min-width` is what actually holds. Pass\n * `classNames={{ table: 'table-fixed' }}` when exact widths must be honoured.\n *\n * Set `tableId` to persist column visibility, sizing and density to `localStorage` under\n * `tcce-table:{tableId}:*`.\n */\nfunction DataTable<T>({\n data,\n columns,\n size = 'md',\n variant = 'default',\n isLoading = false,\n stickyHeader = false,\n maxHeight,\n sorting,\n defaultSorting = [],\n onSortingChange,\n enableSorting = true,\n manualSorting = false,\n columnFilters,\n defaultColumnFilters = [],\n onColumnFiltersChange,\n enableFiltering = true,\n manualFiltering = false,\n onRowClick,\n classNames,\n getUniqueValues,\n emptyState,\n rowSelection,\n defaultRowSelection = {},\n onRowSelectionChange,\n enableRowSelection = false,\n onSelectedRowsChange,\n responsiveBreakpoint = '(max-width: 767px)',\n disableResponsive = false,\n skeletonRowCount = 5,\n onTableReady,\n tableId,\n globalFilter,\n defaultGlobalFilter = '',\n onGlobalFilterChange,\n columnVisibility,\n defaultColumnVisibility,\n onColumnVisibilityChange,\n columnSizing,\n defaultColumnSizing,\n onColumnSizingChange,\n enableColumnResizing = false,\n onSizeChange,\n toolbar,\n}: DataTableProps<T>) {\n const { sortingState, handleSortingChange, setSorting } = useTableSorting({\n sorting,\n defaultSorting,\n onSortingChange,\n });\n const { columnFiltersState, handleColumnFiltersChange, setColumnFilters } = useTableFiltering({\n columnFilters,\n defaultColumnFilters,\n onColumnFiltersChange,\n });\n\n const { rowSelectionState, handleRowSelectionChange, setRowSelection } = useTableSelection({\n rowSelection,\n defaultRowSelection,\n onRowSelectionChange,\n });\n\n const {\n initialVisibility,\n initialSizing,\n initialDensity,\n persistVisibility,\n persistSizing,\n persistDensity,\n } = useTablePersistence({\n tableId,\n defaultVisibility: defaultColumnVisibility,\n defaultSizing: defaultColumnSizing,\n defaultDensity: size,\n });\n\n const { globalFilterState, handleGlobalFilterChange, setGlobalFilter } = useTableGlobalFilter({\n globalFilter,\n defaultGlobalFilter,\n onGlobalFilterChange,\n });\n\n const { columnVisibilityState, handleColumnVisibilityChange, setColumnVisibility } =\n useTableVisibility({\n columnVisibility,\n defaultColumnVisibility: columnVisibility !== undefined ? undefined : initialVisibility,\n onColumnVisibilityChange,\n });\n\n const { columnSizingState, handleColumnSizingChange, setColumnSizing } = useTableSizing({\n columnSizing,\n defaultColumnSizing: columnSizing !== undefined ? undefined : initialSizing,\n onColumnSizingChange,\n });\n\n const [currentSize, setCurrentSize] = useState<TableCellSize>(initialDensity);\n const setSize = useCallback(\n (newSize: TableCellSize) => {\n setCurrentSize(newSize);\n onSizeChange?.(newSize);\n },\n [onSizeChange],\n );\n\n const selectionColumn: TableColumnDef<T> = useMemo(\n () => ({\n id: 'select',\n header: ({ table }) => (\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() ? 'indeterminate' : false)\n }\n onCheckedChange={(v) => table.toggleAllPageRowsSelected(!!v)}\n aria-label='Select all rows'\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(v) => row.toggleSelected(!!v)}\n aria-label={`Select row ${row.index + 1}`}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n meta: { width: 40, align: 'center' },\n }),\n [],\n );\n\n const enrichedColumns = useMemo(\n () => [\n ...(enableRowSelection ? [selectionColumn] : []),\n ...columns.map((col) => {\n const meta = (col.meta ?? {}) as ColumnMeta;\n if (enableFiltering && meta.filterable !== false && !col.filterFn) {\n return { ...col, filterFn: multiSelectFilter };\n }\n return col;\n }),\n ],\n [columns, enableFiltering, enableRowSelection, selectionColumn],\n );\n\n const columnPinning = useMemo<ColumnPinningState>(() => {\n const left: string[] = [];\n const right: string[] = [];\n columns.forEach((col) => {\n const meta = (col.meta ?? {}) as ColumnMeta;\n const id =\n col.id ??\n ('accessorKey' in col && col.accessorKey ? String(col.accessorKey) : undefined);\n if (!id) return;\n if (meta.pinned === 'left') left.push(id);\n if (meta.pinned === 'right') right.push(id);\n });\n return { left, right };\n }, [columns]);\n\n const table = useReactTable({\n data,\n columns: enrichedColumns,\n state: {\n sorting: sortingState,\n columnFilters: columnFiltersState,\n columnPinning,\n rowSelection: rowSelectionState,\n globalFilter: globalFilterState,\n columnVisibility: columnVisibilityState,\n columnSizing: columnSizingState,\n },\n onSortingChange: handleSortingChange,\n onColumnFiltersChange: handleColumnFiltersChange,\n onRowSelectionChange: handleRowSelectionChange,\n onGlobalFilterChange: handleGlobalFilterChange,\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnSizingChange: handleColumnSizingChange,\n enableRowSelection,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: manualSorting ? undefined : getSortedRowModel(),\n getFilteredRowModel: manualFiltering ? undefined : getFilteredRowModel(),\n enableSorting,\n enableSortingRemoval: true,\n manualSorting,\n enableColumnFilters: enableFiltering,\n manualFiltering,\n filterFns: { multiSelect: multiSelectFilter },\n globalFilterFn: 'includesString',\n enableColumnPinning: true,\n columnResizeMode: 'onChange',\n enableColumnResizing,\n });\n\n useEffect(() => {\n onTableReady?.(table);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // intentional: fire once on mount only\n\n useEffect(() => {\n persistVisibility(columnVisibilityState);\n }, [columnVisibilityState, persistVisibility]);\n useEffect(() => {\n persistSizing(columnSizingState);\n }, [columnSizingState, persistSizing]);\n useEffect(() => {\n persistDensity(currentSize);\n }, [currentSize, persistDensity]);\n\n const onSelectedRowsChangeRef = useRef(onSelectedRowsChange);\n useLayoutEffect(() => {\n onSelectedRowsChangeRef.current = onSelectedRowsChange;\n });\n\n useEffect(() => {\n if (!onSelectedRowsChangeRef.current) return;\n const selected = table.getSelectedRowModel().rows.map((r) => r.original);\n onSelectedRowsChangeRef.current(selected);\n }, [rowSelectionState, table]);\n\n const resolvedGetUniqueValues = useCallback(\n (columnId: string) => getUniqueValues?.(columnId) ?? getUniqueColumnValues(data, columnId),\n [getUniqueValues, data],\n );\n\n const ctx: TableContextType<T> = useMemo(\n () => ({\n size: currentSize,\n variant,\n sorting: sortingState,\n setSorting,\n columnFilters: columnFiltersState,\n setColumnFilters,\n getUniqueValues: resolvedGetUniqueValues,\n onRowClick,\n rowSelection: rowSelectionState,\n setRowSelection,\n globalFilter: globalFilterState,\n setGlobalFilter,\n columnVisibility: columnVisibilityState,\n setColumnVisibility,\n columnSizing: columnSizingState,\n setColumnSizing,\n setSize,\n table: table as unknown as import('@tanstack/react-table').Table<T>,\n }),\n [\n currentSize,\n variant,\n sortingState,\n setSorting,\n columnFiltersState,\n setColumnFilters,\n resolvedGetUniqueValues,\n onRowClick,\n rowSelectionState,\n setRowSelection,\n globalFilterState,\n setGlobalFilter,\n columnVisibilityState,\n setColumnVisibility,\n columnSizingState,\n setColumnSizing,\n setSize,\n table,\n ],\n );\n\n const isMobile = useMediaQuery(responsiveBreakpoint);\n const showCardView = !disableResponsive && isMobile;\n\n const rows = table.getRowModel().rows;\n const columnCount = table.getAllLeafColumns().length;\n\n return (\n <TableContext.Provider value={ctx as unknown as TableContextType<unknown>}>\n {toolbar}\n {showCardView ? (\n <DataTableCardView\n rows={rows}\n columns={table.getAllLeafColumns()}\n size={currentSize}\n variant={variant}\n onRowClick={onRowClick}\n isLoading={isLoading}\n skeletonRowCount={skeletonRowCount}\n emptyState={emptyState}\n />\n ) : (\n <div\n data-slot='data-table-wrapper'\n className={cn(\n 'bg-card text-card-foreground relative overflow-auto rounded-md border',\n classNames?.wrapper,\n )}\n style={maxHeight ? { maxHeight } : undefined}>\n <Table\n data-variant={variant}\n // The wrapper above already owns scrolling (overflow-auto + maxHeight).\n // Keep the inner container `overflow-visible` so it does not become a\n // nested scroll container that traps the sticky header cells.\n containerClassName='overflow-visible'\n className={cn(\n variant === 'striped' && '[&_tbody_tr:nth-child(even)]:bg-muted/40',\n classNames?.table,\n )}>\n <TableHeader\n className={cn(\n // Apply the sticky offset to the header cells (`th`) rather than\n // the `<thead>`: cell-level sticky is the broadly compatible form\n // across browsers. The scroll container is the wrapper above\n // (overflow-auto + maxHeight), and the inner table container is\n // kept overflow-visible so it does not trap these sticky cells.\n // The cells already carry an opaque `bg-primary`, so body rows\n // never bleed through underneath while scrolling.\n stickyHeader && '[&_th]:sticky [&_th]:top-0 [&_th]:z-20',\n classNames?.header,\n )}>\n {table.getHeaderGroups().map((hg) => (\n <TableRow key={hg.id}>\n {hg.headers.map((header) => (\n <DataTableHeaderCell key={header.id} header={header} />\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody className={classNames?.body}>\n {isLoading ? (\n <DataTableSkeleton columnCount={columnCount} size={currentSize} />\n ) : rows.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columnCount}\n className='text-muted-foreground h-24 text-center'>\n {emptyState ?? 'No results found'}\n </TableCell>\n </TableRow>\n ) : (\n rows.map((row) => (\n <DataTableRow key={row.id} row={row} classNames={classNames} />\n ))\n )}\n </TableBody>\n </Table>\n </div>\n )}\n </TableContext.Provider>\n );\n}\n\nexport { DataTable, useTableContext };\n","import { useMemo, useState, useCallback, useEffect } from 'react';\nimport type { SortingState, ColumnFiltersState, ColumnDef } from '@tanstack/react-table';\n\nimport { getUniqueColumnValues } from '../utils/filter-utils';\n\nexport interface UseTableDataProps<T> {\n data: T[];\n columns: ColumnDef<T, unknown>[];\n initialPage?: number;\n initialPerPage?: number;\n initialSorting?: SortingState;\n initialColumnFilters?: ColumnFiltersState;\n}\n\nexport interface UseTableDataReturn<T> {\n paginatedData: T[];\n processedData: T[];\n\n page: number;\n perPage: number;\n totalPages: number;\n totalRecords: number;\n\n filteredRecords: number;\n setPage: (page: number) => void;\n setPerPage: (perPage: number) => void;\n\n sorting: SortingState;\n setSorting: (sorting: SortingState) => void;\n\n columnFilters: ColumnFiltersState;\n setColumnFilters: (filters: ColumnFiltersState) => void;\n\n getUniqueValues: (columnId: string) => string[];\n}\n\nexport function useTableData<T extends Record<string, unknown>>({\n data,\n columns,\n initialPage = 1,\n initialPerPage = 10,\n initialSorting = [],\n initialColumnFilters = [],\n}: UseTableDataProps<T>): UseTableDataReturn<T> {\n const [page, setPageState] = useState(initialPage);\n const [perPage, setPerPageState] = useState(initialPerPage);\n const [sorting, setSorting] = useState<SortingState>(initialSorting);\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>(initialColumnFilters);\n\n // Precompute unique values for each column (memoized)\n const uniqueValuesMap = useMemo(() => {\n const map = new Map<string, string[]>();\n columns.forEach((col) => {\n const columnId =\n col.id ??\n ('accessorKey' in col && col.accessorKey ? String(col.accessorKey) : undefined);\n if (!columnId) return;\n\n const accessor = 'accessorFn' in col ? col.accessorFn : undefined;\n map.set(columnId, getUniqueColumnValues(data, columnId, accessor));\n });\n return map;\n }, [data, columns]);\n\n // Keep the same getUniqueValues API but make it O(1) by reading the memoized map\n const getUniqueValues = useMemo(() => {\n return (columnId: string) => {\n return uniqueValuesMap.get(columnId) || [];\n };\n }, [uniqueValuesMap]);\n\n // Apply filters to ALL data\n const filteredData = useMemo(() => {\n if (columnFilters.length === 0) return data;\n\n return data.filter((row) => {\n return columnFilters.every((filter) => {\n const filterValues = filter.value as string[];\n if (!filterValues || filterValues.length === 0) return true;\n\n const cellValue = row[filter.id];\n if (cellValue == null) {\n return false;\n }\n\n return filterValues.includes(String(cellValue));\n });\n });\n }, [data, columnFilters]);\n\n // Apply sorting to ALL filtered data\n const sortedData = useMemo(() => {\n if (sorting.length === 0) {\n return filteredData;\n }\n\n return [...filteredData].sort((a, b) => {\n for (const sort of sorting) {\n const aValue = a[sort.id];\n const bValue = b[sort.id];\n\n // Handle null/undefined\n if (aValue == null && bValue == null) continue;\n if (aValue == null) return sort.desc ? -1 : 1;\n if (bValue == null) return sort.desc ? 1 : -1;\n\n // Compare values\n let comparison = 0;\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n comparison = aValue.localeCompare(bValue);\n } else if (typeof aValue === 'number' && typeof bValue === 'number') {\n comparison = aValue - bValue;\n } else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n if (comparison !== 0) {\n return sort.desc ? -comparison : comparison;\n }\n }\n return 0;\n });\n }, [filteredData, sorting]);\n\n // Apply pagination LAST\n const paginatedData = useMemo(() => {\n const startIndex = (page - 1) * perPage;\n const endIndex = startIndex + perPage;\n return sortedData.slice(startIndex, endIndex);\n }, [sortedData, page, perPage]);\n\n // Calculate pagination info\n const totalRecords = data.length;\n const filteredRecords = sortedData.length;\n const totalPages = Math.max(1, Math.ceil(filteredRecords / perPage));\n\n const setPage = useCallback(\n (newPage: number) => {\n setPageState(Math.min(newPage, totalPages));\n },\n [totalPages],\n );\n\n const setPerPage = useCallback((newPerPage: number) => {\n setPerPageState(newPerPage);\n setPageState(1);\n }, []);\n\n // Auto-reset page when filters change and current page is out of bounds\n useEffect(() => {\n if (page > totalPages) {\n setPageState(1);\n }\n }, [page, totalPages]);\n\n return {\n paginatedData,\n processedData: sortedData,\n page,\n perPage,\n totalPages,\n totalRecords,\n filteredRecords,\n setPage,\n setPerPage,\n sorting,\n setSorting,\n columnFilters,\n setColumnFilters,\n getUniqueValues,\n };\n}\n","import type { SortingState } from '@tanstack/react-table';\n\n/**\n * Backend sorting format - object representation\n * Example: { name: 'asc', created_at: 'desc' }\n */\nexport type SortRecord = Record<string, 'asc' | 'desc'>;\n\n/**\n * Converts TanStack Table SortingState to backend-friendly record format\n *\n * @param sortingState - TanStack sorting state array\n * @returns Object with field names as keys and 'asc'/'desc' as values\n *\n * @example\n * ```ts\n * const sortingState = [\n * { id: 'name', desc: false },\n * { id: 'created_at', desc: true }\n * ];\n *\n * const sortRecord = sortingStateToRecord(sortingState);\n * // Result: { name: 'asc', created_at: 'desc' }\n * ```\n */\nexport function sortingStateToRecord(sortingState: SortingState): SortRecord {\n const sortRecord: SortRecord = {};\n\n for (const sort of sortingState) {\n sortRecord[sort.id] = sort.desc ? 'desc' : 'asc';\n }\n\n return sortRecord;\n}\n\n/**\n * Converts backend sort record to TanStack Table SortingState\n * Useful for initializing sorting state from backend response\n *\n * @param sortRecord - Object with field names and sort directions\n * @returns TanStack sorting state array\n *\n * @example\n * ```ts\n * const sortRecord = { name: 'asc', created_at: 'desc' };\n *\n * const sortingState = sortRecordToSortingState(sortRecord);\n * // Result: [\n * // { id: 'name', desc: false },\n * // { id: 'created_at', desc: true }\n * // ]\n * ```\n */\nexport function sortRecordToSortingState(sortRecord: SortRecord): SortingState {\n return Object.entries(sortRecord).map(([field, direction]) => ({\n id: field,\n desc: direction === 'desc',\n }));\n}\n\n/**\n * Converts SortingState to JSON string ready to send to Laravel backend\n * This is a convenience function for API calls\n *\n * @param sortingState - TanStack sorting state array\n * @returns JSON string representation of sort record\n *\n * @example\n * ```ts\n * const sortingState = [{ id: 'name', desc: false }];\n * const sortsParam = sortingStateToJsonString(sortingState);\n * // Result: '{\"name\":\"asc\"}'\n *\n * // Use in API call:\n * fetch(`/api/users?sorts=${sortsParam}`);\n * ```\n */\nexport function sortingStateToJsonString(sortingState: SortingState): string {\n if (sortingState.length === 0) {\n return '';\n }\n return JSON.stringify(sortingStateToRecord(sortingState));\n}\n\n/**\n * Creates URLSearchParams for backend pagination with sorting\n * Compatible with Laravel PaginateHelper\n *\n * @param options - Pagination and sorting options\n * @returns URLSearchParams ready to append to API request\n *\n * @example\n * ```ts\n * const params = createBackendParams({\n * sorting: [{ id: 'name', desc: false }],\n * perPage: 20,\n * genericSearch: 'john',\n * filters: { role: 'admin', status: 'active' }\n * });\n *\n * fetch(`/api/users?${params.toString()}`);\n * // Result: /api/users?sorts={\"name\":\"asc\"}&perPage=20&genericSearch=john&filters={\"role\":\"admin\",\"status\":\"active\"}\n * ```\n */\nexport function createBackendParams(options: {\n sorting?: SortingState;\n perPage?: number;\n genericSearch?: string;\n filters?: Record<string, unknown>;\n}): URLSearchParams {\n const params = new URLSearchParams();\n\n // Add sorting if present\n if (options.sorting && options.sorting.length > 0) {\n params.append('sorts', sortingStateToJsonString(options.sorting));\n }\n\n // Add pagination — use !== undefined so perPage === 0 is not silently skipped.\n if (options.perPage !== undefined) {\n params.append('perPage', options.perPage.toString());\n }\n\n // Add generic search\n if (options.genericSearch) {\n params.append('genericSearch', options.genericSearch);\n }\n\n // Add filters\n if (options.filters && Object.keys(options.filters).length > 0) {\n params.append('filters', JSON.stringify(options.filters));\n }\n\n return params;\n}\n","import type { ColumnFiltersState } from '@tanstack/react-table';\n\n/**\n * Converts ColumnFiltersState to a simple object format\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => { status: ['Active', 'Pending'] }\n *\n * @param filters - The column filters state from TanStack Table\n * @returns Object with columnId as keys and filter values as values\n */\nexport function columnFiltersToRecord(filters: ColumnFiltersState): Record<string, string[]> {\n const record: Record<string, string[]> = {};\n\n filters.forEach((filter) => {\n record[filter.id] = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n });\n\n return record;\n}\n\n/**\n * Converts ColumnFiltersState to a JSON string\n * Useful for API calls that expect JSON format\n *\n * @param filters - The column filters state from TanStack Table\n * @returns JSON string representation of filters\n */\nexport function columnFiltersToJsonString(filters: ColumnFiltersState): string {\n return JSON.stringify(columnFiltersToRecord(filters));\n}\n\n/**\n * Converts ColumnFiltersState to URL query params format\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => 'filter[status]=Active,Pending'\n *\n * @param filters - The column filters state from TanStack Table\n * @param separator - Separator for multiple values (default: ',')\n * @returns Object suitable for URLSearchParams\n */\nexport function columnFiltersToQueryParams(\n filters: ColumnFiltersState,\n separator: string = ',',\n): Record<string, string> {\n const params: Record<string, string> = {};\n\n filters.forEach((filter) => {\n const values = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n if (values.length > 0) {\n params[`filter[${filter.id}]`] = values.join(separator);\n }\n });\n\n return params;\n}\n\n/**\n * Converts ColumnFiltersState to individual query params per value\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => 'filter[status][]=Active&filter[status][]=Pending'\n *\n * @param filters - The column filters state from TanStack Table\n * @returns Object suitable for URLSearchParams with array notation\n */\nexport function columnFiltersToArrayQueryParams(\n filters: ColumnFiltersState,\n): Record<string, string[]> {\n const params: Record<string, string[]> = {};\n\n filters.forEach((filter) => {\n const values = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n if (values.length > 0) {\n params[`filter[${filter.id}]`] = values;\n }\n });\n\n return params;\n}\n\n/**\n * Creates complete backend request params with filters, sorting, and pagination\n * Combines filtering with other table features\n *\n * @param options - Configuration object\n * @param options.filters - Column filters state\n * @param options.sorts - Optional sorting state\n * @param options.page - Optional page number\n * @param options.perPage - Optional items per page\n * @returns Complete params object for API requests\n */\nexport function createBackendParamsWithFilters({\n filters,\n sorts,\n page,\n perPage,\n}: {\n filters: ColumnFiltersState;\n sorts?: Array<{ id: string; desc: boolean }>;\n page?: number;\n perPage?: number;\n}): Record<string, string | number> {\n const params: Record<string, string | number> = {};\n\n // Add pagination params\n if (page !== undefined) {\n params.page = page;\n }\n if (perPage !== undefined) {\n params.per_page = perPage;\n }\n\n // Add sorting params\n if (sorts && sorts.length > 0) {\n const sortBy = sorts.map((s) => s.id).join(',');\n const sortOrder = sorts.map((s) => (s.desc ? 'desc' : 'asc')).join(',');\n params.sort_by = sortBy;\n params.sort_order = sortOrder;\n }\n\n // Add filter params\n if (filters && filters.length > 0) {\n params.filters = columnFiltersToJsonString(filters);\n }\n\n return params;\n}\n\n/**\n * Parses URL query params back to ColumnFiltersState\n * Useful for restoring filters from URL\n *\n * @param params - URLSearchParams or query string\n * @param separator - Separator used in the query params (default: ',')\n * @returns ColumnFiltersState\n */\nexport function parseQueryParamsToFilters(\n params: URLSearchParams | string,\n separator: string = ',',\n): ColumnFiltersState {\n const searchParams = typeof params === 'string' ? new URLSearchParams(params) : params;\n const filters: ColumnFiltersState = [];\n\n searchParams.forEach((value, key) => {\n // Match filter[columnId] format\n const match = key.match(/^filter\\[(.+)\\]$/);\n if (match) {\n const columnId = match[1];\n const values = value.split(separator).filter(Boolean);\n if (values.length > 0) {\n filters.push({ id: columnId, value: values });\n }\n }\n });\n\n return filters;\n}\n\n/**\n * Parses JSON string back to ColumnFiltersState\n *\n * @param jsonString - JSON string representation of filters\n * @returns ColumnFiltersState\n */\nexport function parseJsonToFilters(jsonString: string): ColumnFiltersState {\n try {\n const record = JSON.parse(jsonString) as unknown;\n // Guard against non-object or array values before iterating entries.\n if (!record || typeof record !== 'object' || Array.isArray(record)) return [];\n return Object.entries(record as Record<string, string[]>).map(([id, value]) => ({\n id,\n value,\n }));\n } catch {\n return [];\n }\n}\n\n/**\n * Merges multiple filter states, with later filters overriding earlier ones\n *\n * @param filterStates - Multiple ColumnFiltersState arrays to merge\n * @returns Merged ColumnFiltersState\n */\nexport function mergeFilters(...filterStates: ColumnFiltersState[]): ColumnFiltersState {\n const mergedMap = new Map<string, string[]>();\n\n filterStates.forEach((state) => {\n state.forEach((filter) => {\n mergedMap.set(filter.id, Array.isArray(filter.value) ? (filter.value as string[]) : []);\n });\n });\n\n return Array.from(mergedMap.entries()).map(([id, value]) => ({ id, value }));\n}\n","import { Fragment } from 'react';\nimport {Ellipsis} from 'lucide-react';\nimport { Button } from '@/components/ui/Button/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/DropdownMenu/dropdown-menu';\n\nexport interface RowAction<T> {\n label: string;\n onClick: (row: T) => void;\n /** Renders a separator above this item */\n separator?: boolean;\n disabled?: boolean | ((row: T) => boolean);\n /** Renders item in destructive (red) style */\n destructive?: boolean;\n}\n\ninterface DataTableRowActionsProps<T> {\n row: T;\n actions: RowAction<T>[];\n /** Screen-reader label for the trigger button. Default: \"Open actions\" */\n label?: string;\n}\n\nfunction DataTableRowActions<T>({\n row,\n actions,\n label = 'Open actions',\n}: DataTableRowActionsProps<T>) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n data-slot='data-table-row-actions'\n variant='ghost'\n size='icon-sm'\n aria-label={label}\n className='data-[state=open]:bg-muted'>\n <Ellipsis className='size-4' aria-hidden='true' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-40'>\n {actions.map((action) => {\n const isDisabled =\n typeof action.disabled === 'function'\n ? action.disabled(row)\n : (action.disabled ?? false);\n return (\n <Fragment key={action.label}>\n {action.separator && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={() => action.onClick(row)}\n disabled={isDisabled}\n className={\n action.destructive\n ? 'text-destructive focus:text-destructive'\n : undefined\n }>\n {action.label}\n </DropdownMenuItem>\n </Fragment>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport { DataTableRowActions };\nexport type { DataTableRowActionsProps };\n","import { cn } from '@/lib/utils';\nimport { TablePagination } from '../Pagination/pagination';\nimport type { TablePaginationProps } from './data-table.types';\n\ninterface DataTableFooterProps {\n pagination: TablePaginationProps;\n /** Selected row count — renders \"N row(s) selected\" on the left */\n selectedCount?: number;\n className?: string;\n}\n\nfunction DataTableFooter({ pagination, selectedCount, className }: DataTableFooterProps) {\n return (\n <div\n data-slot='data-table-footer'\n className={cn('flex items-center justify-between border-t px-4 py-2', className)}>\n {selectedCount != null && selectedCount > 0 && (\n <span aria-live='polite' className='text-muted-foreground text-xs'>\n {`${selectedCount} row${selectedCount > 1 ? 's' : ''} selected`}\n </span>\n )}\n {/* `ml-auto` keeps pagination right-aligned when the selection count\n is absent and `justify-between` has a single child to distribute. */}\n <div className='ml-auto'>\n <TablePagination {...pagination} />\n </div>\n </div>\n );\n}\n\nexport { DataTableFooter };\nexport type { DataTableFooterProps };\n","import { useCallback, type ReactNode } from 'react';\nimport type { ColumnFiltersState, Table } from '@tanstack/react-table';\nimport { X, Eye, Rows2 } from 'lucide-react';\nimport type { TableCellSize } from './data-table.types';\n\nimport { Button } from '@/components/ui/Button/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/DropdownMenu/dropdown-menu';\nimport { Badge } from '@/components/ui/Badge/badge';\nimport { cn } from '@/lib/utils';\nimport { getActiveFilterCount } from './utils/filter-utils';\nimport { useTableContextSafe } from './data-table-context';\n\nconst DENSITY_OPTIONS: { value: TableCellSize; label: string }[] = [\n { value: 'sm', label: 'Compact' },\n { value: 'md', label: 'Default' },\n { value: 'lg', label: 'Comfortable' },\n];\n\ninterface DataTableToolbarProps<T> {\n /** TanStack Table instance. Optional when toolbar is rendered inside DataTable's toolbar prop (context available). */\n table?: Table<T>;\n /** Slot rendered on the left — e.g. search input, bulk-action buttons */\n leading?: ReactNode;\n /** Slot rendered on the right alongside the Columns button */\n trailing?: ReactNode;\n className?: string;\n /** Hide the built-in Columns visibility toggle. Default: false */\n hideColumnsToggle?: boolean;\n /** Hide the density toggle. Default: false */\n hideDensityToggle?: boolean;\n /**\n * Pass columnFilters directly if Toolbar is rendered outside DataTable's\n * context provider. When inside a DataTable, this is read from context.\n */\n columnFilters?: ColumnFiltersState;\n}\n\nfunction DataTableToolbar<T>({\n table: tableProp,\n leading,\n trailing,\n className,\n hideColumnsToggle = false,\n hideDensityToggle = false,\n columnFilters: columnFiltersProp,\n}: DataTableToolbarProps<T>) {\n const ctx = useTableContextSafe<T>();\n const table = tableProp ?? (ctx?.table as Table<T> | undefined);\n const resolvedFilters = columnFiltersProp ?? ctx?.columnFilters ?? [];\n const activeFilterCount = getActiveFilterCount(resolvedFilters);\n\n const globalFilter = ctx?.globalFilter ?? '';\n const hasActiveFilters = activeFilterCount > 0 || globalFilter.length > 0;\n\n const handleClearFilters = useCallback(() => {\n ctx?.setColumnFilters([]);\n ctx?.setGlobalFilter('');\n }, [ctx]);\n\n return (\n <div\n data-slot='data-table-toolbar'\n className={cn('flex items-center justify-between gap-2 py-2', className)}>\n <div className='flex flex-1 items-center gap-2'>\n {leading}\n {activeFilterCount > 0 && (\n <Badge variant='default' className='h-6 text-xs'>\n {activeFilterCount} filter{activeFilterCount > 1 ? 's' : ''} active\n </Badge>\n )}\n </div>\n\n <div className='flex items-center gap-2'>\n {trailing}\n {hasActiveFilters && (\n <Button\n variant='ghost'\n size='sm'\n onClick={handleClearFilters}\n className='text-muted-foreground hover:text-foreground gap-1'>\n <X className='size-4' aria-hidden='true' />\n Clear filters\n </Button>\n )}\n {!hideDensityToggle && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' size='sm' className='gap-1 border'>\n <Rows2 className='size-4' aria-hidden='true' />\n Density\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-40'>\n <DropdownMenuLabel>Row density</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {DENSITY_OPTIONS.map((opt) => (\n <DropdownMenuCheckboxItem\n key={opt.value}\n checked={ctx?.size === opt.value}\n onCheckedChange={() => ctx?.setSize(opt.value)}>\n {opt.label}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {!hideColumnsToggle && table && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' size='sm' className='gap-1 border'>\n <Eye className='size-4' aria-hidden='true' />\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-44'>\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((col) => col.getCanHide())\n .map((col) => (\n <DropdownMenuCheckboxItem\n key={col.id}\n className='capitalize'\n checked={col.getIsVisible()}\n onCheckedChange={(v) => col.toggleVisibility(!!v)}>\n {typeof col.columnDef.header === 'string'\n ? col.columnDef.header\n : col.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </div>\n );\n}\n\nexport { DataTableToolbar };\nexport type { DataTableToolbarProps };\n","import { useEffect, useState } from 'react';\nimport { Search, X } from 'lucide-react';\nimport { Input } from '@/components/ui/Input/input';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\nimport { useTableContextSafe } from './data-table-context';\n\ninterface DataTableSearchProps {\n placeholder?: string;\n className?: string;\n /** Debounce delay in ms before committing to context. Default: 300 */\n debounce?: number;\n}\n\nfunction DataTableSearch({\n placeholder = 'Search…',\n className,\n debounce = 300,\n}: DataTableSearchProps) {\n const ctx = useTableContextSafe();\n\n // Extract stable primitives/callbacks from the context object to avoid\n // including the entire ctx object in effect dependency arrays (which would\n // cause the debounce timer to restart on every render).\n const globalFilter = ctx?.globalFilter;\n const setGlobalFilter = ctx?.setGlobalFilter;\n\n // The filter the table currently holds. `undefined` means this input is\n // rendered outside a DataTable, in which case there is nothing to sync with.\n const committedValue = globalFilter ?? '';\n\n // Seed from the filter already held by the table so an initial\n // `defaultGlobalFilter` (or a controlled `globalFilter`) is reflected in the\n // input instead of being overwritten on mount.\n const [inputValue, setInputValue] = useState(committedValue);\n\n // Adopt external global-filter changes — the toolbar's Clear filters button,\n // or a controlled parent that rewrites the value.\n useEffect(() => {\n if (globalFilter === undefined) return;\n setInputValue(globalFilter);\n }, [globalFilter]);\n\n // Debounced commit to context. Skipped while the input already matches what\n // the table holds, so mounting does not fire a spurious onGlobalFilterChange\n // and the echo of our own commit does not schedule a redundant second one.\n useEffect(() => {\n if (inputValue === committedValue) return;\n const timer = setTimeout(() => {\n setGlobalFilter?.(inputValue);\n }, debounce);\n return () => clearTimeout(timer);\n }, [inputValue, committedValue, debounce, setGlobalFilter]);\n\n const handleClear = () => {\n setInputValue('');\n setGlobalFilter?.('');\n };\n\n return (\n <div data-slot='data-table-search' className={cn('relative flex items-center', className)}>\n <Search\n className='text-muted-foreground pointer-events-none absolute top-1/2 left-3 z-10 -translate-y-1/2'\n size={16}\n />\n <Input\n type='search'\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n placeholder={placeholder}\n aria-label={placeholder}\n // The native WebKit/Chromium search decorations are suppressed so the\n // custom clear button is the only affordance rendered.\n className={cn(\n 'h-8 w-48 pr-9 pl-9 text-sm',\n '[&::-webkit-search-cancel-button]:appearance-none',\n '[&::-webkit-search-decoration]:appearance-none',\n '[&::-webkit-search-results-button]:appearance-none',\n '[&::-webkit-search-results-decoration]:appearance-none',\n )}\n />\n {inputValue && (\n <Button\n variant='ghost'\n size='icon-sm'\n onClick={handleClear}\n aria-label='Clear search'\n className='text-muted-foreground hover:text-foreground absolute top-1/2 right-1.5 size-6 -translate-y-1/2'>\n <X className='size-3.5' aria-hidden='true' />\n </Button>\n )}\n </div>\n );\n}\n\nexport { DataTableSearch };\nexport type { DataTableSearchProps };\n","import { cn } from '@/lib/utils'\n\nexport type BottomNavItem = {\n label: string\n href: string\n icon: React.ReactNode\n isActive?: boolean\n onClick?: React.MouseEventHandler<HTMLAnchorElement>\n}\n\ntype BottomNavProps = {\n items: BottomNavItem[]\n className?: string\n}\n\nexport function BottomNav({ items, className }: BottomNavProps) {\n return (\n <nav\n data-slot=\"bottom-nav\"\n className={cn(\n 'fixed bottom-0 left-0 right-0 z-50 mx-4 mb-4 rounded-2xl bg-background shadow-[0_-4px_20px_rgba(0,0,0,0.08)]',\n className\n )}\n >\n <div className=\"flex h-20 items-center justify-around px-4\">\n {items.map(({ label, href, icon, isActive, onClick }) => (\n <a\n key={href}\n href={href}\n onClick={onClick}\n data-slot=\"bottom-nav-item\"\n className={cn(\n 'group flex flex-col items-center gap-0 transition-colors',\n isActive ? 'text-primary' : 'text-muted-foreground'\n )}\n >\n <span\n className={cn(\n 'flex h-12 items-center justify-center rounded-2xl transition-all',\n isActive\n ? 'flex-col gap-0.5 bg-primary/10 px-4'\n : 'w-12 group-hover:bg-muted group-active:bg-primary/10'\n )}\n >\n <span className=\"h-6 w-6 shrink-0\">{icon}</span>\n {isActive && (\n <span className=\"text-[10px] font-semibold leading-none\">\n {label}\n </span>\n )}\n </span>\n <span\n className={cn(\n 'text-[10px] font-medium',\n isActive ? 'invisible' : 'visible'\n )}\n >\n {label}\n </span>\n <span\n className={cn(\n 'h-1 w-5 rounded-full transition-all',\n isActive ? 'bg-primary' : 'bg-transparent'\n )}\n />\n </a>\n ))}\n </div>\n </nav>\n )\n}\n","import { createContext, useContext, useId, useState, type ComponentProps } from 'react'\nimport { Tabs as TabsPrimitive } from 'radix-ui'\nimport { motion, AnimatePresence } from 'motion/react'\nimport { cn } from '@/lib/utils'\nimport { spring } from '@/tokens/animation'\nimport { TabsContent } from '@/components/ui/Tabs/tabs'\n\ntype BottomNavTabsContextValue = {\n activeValue: string\n listId: string\n}\n\nconst BottomNavTabsContext = createContext<BottomNavTabsContextValue | null>(null)\n\nfunction useBottomNavTabsContext() {\n const ctx = useContext(BottomNavTabsContext)\n if (!ctx) throw new Error('BottomNavTabsList must be inside BottomNavTabs')\n return ctx\n}\n\ntype BottomNavTabsProps = ComponentProps<typeof TabsPrimitive.Root>\n\nexport function BottomNavTabs({\n defaultValue,\n value: controlledValue,\n onValueChange,\n ...props\n}: BottomNavTabsProps) {\n const [internalValue, setInternalValue] = useState(controlledValue ?? defaultValue ?? '')\n const activeValue = controlledValue ?? internalValue\n const listId = useId()\n\n const handleValueChange = (v: string) => {\n if (controlledValue === undefined) setInternalValue(v)\n onValueChange?.(v)\n }\n\n return (\n <BottomNavTabsContext.Provider value={{ activeValue, listId }}>\n <TabsPrimitive.Root\n data-slot=\"bottom-nav-tabs\"\n value={activeValue}\n onValueChange={handleValueChange}\n {...props}\n />\n </BottomNavTabsContext.Provider>\n )\n}\n\nexport function BottomNavTabsContent({\n className,\n ...props\n}: ComponentProps<typeof TabsContent>) {\n return <TabsContent className={cn('pb-28', className)} {...props} />\n}\n\nexport type BottomNavTabsItem = {\n value: string\n label: string\n icon: React.ReactNode\n activeIcon?: React.ReactNode\n}\n\ntype BottomNavTabsListProps = {\n items: BottomNavTabsItem[]\n className?: string\n}\n\nexport function BottomNavTabsList({ items, className }: BottomNavTabsListProps) {\n const { activeValue, listId } = useBottomNavTabsContext()\n\n return (\n <nav\n data-slot=\"bottom-nav-tabs-list\"\n className={cn(\n 'fixed bottom-0 left-0 right-0 z-50 mx-6 max-w- mb-4 rounded-2xl bg-background shadow-[0_-4px_20px_rgba(0,0,0,0.08)]',\n className\n )}\n >\n <TabsPrimitive.List className=\"flex h-20 items-center justify-around px-4\">\n {items.map(({ value, label, icon, activeIcon }) => {\n const isActive = value === activeValue\n return (\n <TabsPrimitive.Trigger\n key={value}\n value={value}\n data-slot=\"bottom-nav-tabs-trigger\"\n className={cn(\n 'group flex flex-col items-center transition-colors',\n 'data-[state=active]:text-primary data-[state=inactive]:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:rounded-2xl',\n )}\n >\n <span className=\"relative flex h-15 w-16 flex-col items-center justify-center gap-1.5\">\n <AnimatePresence initial={false}>\n {isActive && (\n <motion.span\n layoutId={`${listId}-pill`}\n className=\"absolute inset-0 rounded-2xl bg-primary/10\"\n transition={spring.snappy}\n />\n )}\n </AnimatePresence>\n <span className=\"relative z-10 h-6 w-6\">\n {isActive ? (activeIcon ?? icon) : icon}\n </span>\n <span className=\"relative z-10 text-[10px] font-medium leading-none\">\n {label}\n </span>\n </span>\n <span\n className={cn(\n 'mt-1 h-1 w-6 rounded-full transition-colors',\n isActive ? 'bg-primary' : 'bg-transparent'\n )}\n />\n </TabsPrimitive.Trigger>\n )\n })}\n </TabsPrimitive.List>\n </nav>\n )\n}\n","import {\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type ComponentProps,\n type CSSProperties,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { ChevronDown, ChevronsLeft, CircleDashed, Menu, Search, Star, X } from 'lucide-react';\n\nimport { Popover, PopoverAnchor, PopoverContent } from '@/components/ui/Popover/popover';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/components/ui/Tooltip/tooltip';\nimport { cn } from '@/lib/utils';\nimport { useOptionalAbility } from '@/components/authorization/Can/ability-context';\nimport type { Permission } from '@/components/authorization/permission-catalog';\nimport { useMediaQuery } from '@/lib/use-media-query';\nimport { useIsMobile } from '@/hooks/use-mobile';\nimport { Sheet, SheetContent, SheetTitle, SheetTrigger } from '@/components/ui/Sheet/sheet';\nimport { Skeleton } from '@/components/ui/Skeleton/skeleton';\n\n/* -------------------------------------------------------------------------------------------------\n * Data contract\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Icon of a module or item. Backend payloads cannot carry React elements, so a string key is\n * accepted and resolved through `resolveIcon`.\n */\nexport type FloatingSidebarIcon = ReactNode | string;\n\n/** A link (or action) inside a module. */\nexport interface FloatingSidebarItemData {\n /** Stable, unique id. Drives `activeItemId`, favorites and `onItemSelect`. */\n id: string;\n /** Visible text; also what the module search matches (ignoring case and accents). */\n label: string;\n /** React element or backend icon key resolved with `resolveIcon`. Missing or unknown keys render a neutral fallback. */\n icon?: FloatingSidebarIcon;\n /** Destination. Items without `href` render a `<button>` and only fire `onItemSelect`. */\n href?: string;\n /** Opens the link in a new tab (`target=\"_blank\"`, `rel=\"noopener noreferrer\"`). Clicking it never moves the current page. */\n external?: boolean;\n /** Renders the item as a disabled button, without a link. */\n disabled?: boolean;\n /**\n * Whether the item gets a favorite star when `showFavorites` is on. Defaults to `true`; set it\n * to `false` for items the backend cannot store as favorites (in Nexus, pages: only apps can).\n */\n favoritable?: boolean;\n /** Grant(s) required to show the item, checked against the `AbilityProvider`. */\n permission?: Permission | Permission[];\n /** With several permissions: `any` (default) needs one of them, `all` needs every one. */\n permissionMode?: 'any' | 'all';\n}\n\n/** A group of items. Expanded it is a card; collapsed, a tile with a tooltip and a flyout. */\nexport interface FloatingSidebarModuleData {\n /** Stable, unique id. Drives `openModuleIds`. */\n id: string;\n /** Card title, tile tooltip and flyout title. */\n label: string;\n /** React element or backend icon key resolved with `resolveIcon`. */\n icon?: FloatingSidebarIcon;\n /** Items in display order. A module without items is hidden unless `hideEmptyModules` is false. */\n items: FloatingSidebarItemData[];\n /**\n * Grant(s) required to show the module, checked against the `AbilityProvider`. A module whose\n * items are all hidden by their own permissions is hidden too.\n */\n permission?: Permission | Permission[];\n /** With several permissions: `any` (default) needs one of them, `all` needs every one. */\n permissionMode?: 'any' | 'all';\n}\n\n/**\n * Props handed to `renderLink` so router links (React Router, Next) keep the item styling.\n * Spread all of them on the link element; `onClick` must run for selection to work.\n */\nexport interface FloatingSidebarLinkProps {\n href: string;\n className: string;\n children: ReactNode;\n tabIndex: number;\n onClick: (event: MouseEvent<HTMLElement>) => void;\n target?: string;\n rel?: string;\n 'aria-current'?: 'page';\n 'data-slot': string;\n 'data-active'?: 'true';\n}\n\n/** Every interface string. Pass a partial object through `labels` to translate or reword them. */\nexport interface FloatingSidebarLabels {\n /** Accessible name of the `<nav>` landmark. Default: \"Modules navigation\". */\n navigation: string;\n /** Visible title above the cards; long titles end with an ellipsis. Default: \"Modules\". */\n title: string;\n /** Toggle button name while expanded. Default: \"Collapse menu\". */\n collapse: string;\n /** Toggle button name while collapsed. Default: \"Expand menu\". */\n expand: string;\n /** Mobile only: the built-in trigger shown when `mobileOpen` is not controlled. */\n openMenu: string;\n /**\n * Mobile only: the button in the drawer header that closes it. Default: \"Close menu\".\n * Optional so that complete label objects written before it existed keep compiling.\n */\n closeMenu?: string;\n /** Appended to a collapsed tile's name when it contains the active item. */\n currentPageSuffix: string;\n /** Placeholder of a module search field. */\n searchPlaceholder: (moduleLabel: string) => string;\n /** Accessible name of a module search field. */\n searchLabel: (moduleLabel: string) => string;\n /** Name of the button that clears a search. */\n clearSearch: string;\n /** Heading of the no-matches message. */\n noMatchesTitle: string;\n /** Body of the no-matches message in an expanded card. */\n noMatches: (moduleLabel: string, query: string) => string;\n /** Shorter no-matches message used inside the collapsed flyout. */\n flyoutNoMatches: (query: string) => string;\n /** Shown inside a module without items when `hideEmptyModules` is false. */\n emptyModule: string;\n /** Name of the star button when the item is not a favorite. */\n addFavorite: (itemLabel: string) => string;\n /** Name of the star button when the item is a favorite. */\n removeFavorite: (itemLabel: string) => string;\n}\n\nconst DEFAULT_LABELS: Required<FloatingSidebarLabels> = {\n navigation: 'Modules navigation',\n title: 'Modules',\n collapse: 'Collapse menu',\n expand: 'Expand menu',\n openMenu: 'Open menu',\n closeMenu: 'Close menu',\n currentPageSuffix: ' (contains the current page)',\n searchPlaceholder: () => 'Filter links…',\n searchLabel: (moduleLabel) => `Filter links of ${moduleLabel}`,\n clearSearch: 'Clear search',\n noMatchesTitle: 'No matches',\n noMatches: (moduleLabel, query) => `No links in ${moduleLabel} match “${query}”.`,\n flyoutNoMatches: (query) => `No links match “${query}”.`,\n emptyModule: 'No links in this module yet.',\n addFavorite: (itemLabel) => `Add to favorites: ${itemLabel}`,\n removeFavorite: (itemLabel) => `Remove from favorites: ${itemLabel}`,\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Motion tokens (copied from the Portal Total Sidebar v2 design)\n * -----------------------------------------------------------------------------------------------*/\n\nconst EASE = 'cubic-bezier(.2,.8,.2,1)';\n/**\n * Collapsing and expanding take the same time. Geometry (width, radii, heights, accordion) runs\n * for the whole `MOTION_MS`; fades take half of it and are mirrored: on collapse they run in the\n * first half, on expand in the second half (and the active tile fill the other way round).\n */\nconst MOTION_MS = 240;\nconst FADE_MS = MOTION_MS / 2;\n/**\n * The mobile menu button morph travels across the screen, so it gets more time and an even\n * ease-in-out: with `EASE` most of the trip happened in the first frames and read as a jump.\n */\nconst MORPH_MS = 360;\nconst MORPH_EASE = 'cubic-bezier(.65,0,.35,1)';\n\n/** Subtle iOS-like hop of the active module tile (navy background and icon) after collapsing. */\nconst BOUNCE_KEYFRAMES: Keyframe[] = [\n { transform: 'translateY(0) scale(1)' },\n { transform: 'translateY(-3px) scale(1.06)', offset: 0.35 },\n { transform: 'translateY(0) scale(0.97)', offset: 0.65 },\n { transform: 'translateY(0) scale(1)' },\n];\nconst BOUNCE_MS = 420;\n\n/**\n * Scroll areas of the sidebar use a light, subtle scrollbar (measured from the reference design: a\n * thumb inset 2px in a 10px track, colours in the --floating-sidebar-scrollbar-* tokens) instead of\n * the global orange one:\n * `scrollbar-color` for Chrome/Firefox and the `::-webkit-scrollbar` parts for Safari. The global\n * rule is unlayered CSS, which beats layered utilities, so these are marked important.\n */\nconst SUBTLE_SCROLLBAR =\n '[scrollbar-color:var(--floating-sidebar-scrollbar-thumb)_var(--floating-sidebar-scrollbar-track)]! [&::-webkit-scrollbar]:w-2.5! [&::-webkit-scrollbar-track]:bg-floating-sidebar-scrollbar-track! [&::-webkit-scrollbar-thumb]:rounded-full! [&::-webkit-scrollbar-thumb]:border-2! [&::-webkit-scrollbar-thumb]:border-solid! [&::-webkit-scrollbar-thumb]:border-floating-sidebar-scrollbar-track! [&::-webkit-scrollbar-thumb]:bg-floating-sidebar-scrollbar-thumb! [&::-webkit-scrollbar-thumb:hover]:bg-floating-sidebar-scrollbar-thumb-hover!';\n/* -------------------------------------------------------------------------------------------------\n * Mobile morph: the built-in menu button and the drawer's close button turn into each other\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MorphBox {\n left: number;\n top: number;\n width: number;\n height: number;\n borderRadius: string;\n borderWidth: string;\n borderColor: string;\n backgroundColor: string;\n boxShadow: string;\n}\n\n/** Last stretch of a morph whose target moved after it was measured. */\nconst MORPH_SETTLE_MS = 120;\n\n/**\n * Where the element sits once its drawer settles: the drawer slides in, so the offset of its\n * current transform is removed from the measured box. Colors and border come from the real\n * button, so the ghost always matches what it stands in for.\n */\nfunction morphBox(element: HTMLElement): MorphBox {\n const rect = element.getBoundingClientRect();\n const computed = getComputedStyle(element);\n // The drawer is fixed, so its offset box is where it settles; whatever its enter or exit\n // animation does to it (a transform, `translate`, a scale) only moves its painted box.\n const drawer = element.closest<HTMLElement>('[data-slot=\"sheet-content\"]');\n const drawerRect = drawer?.getBoundingClientRect();\n const offsetX = drawer && drawerRect ? drawerRect.left - drawer.offsetLeft : 0;\n const offsetY = drawer && drawerRect ? drawerRect.top - drawer.offsetTop : 0;\n const borderWidth = parseFloat(computed.borderTopWidth) || 0;\n return {\n left: rect.left - offsetX,\n top: rect.top - offsetY,\n width: rect.width,\n height: rect.height,\n // `rounded-full` resolves to an enormous radius that would not interpolate visibly;\n // half the height draws the same pill.\n borderRadius: `${Math.min(parseFloat(computed.borderTopLeftRadius) || 0, rect.height / 2)}px`,\n borderWidth: `${borderWidth}px`,\n borderColor: borderWidth > 0 ? computed.borderTopColor : 'transparent',\n backgroundColor: computed.backgroundColor,\n boxShadow: computed.boxShadow,\n };\n}\n\n/** A box as the ghost's inline style and keyframes. */\nconst morphStyle = (b: MorphBox) => ({\n left: `${b.left}px`,\n top: `${b.top}px`,\n width: `${b.width}px`,\n height: `${b.height}px`,\n borderRadius: b.borderRadius,\n borderWidth: b.borderWidth,\n borderColor: b.borderColor,\n backgroundColor: b.backgroundColor,\n boxShadow: b.boxShadow,\n});\n\nconst sameBox = (a: MorphBox, b: MorphBox) =>\n Math.abs(a.left - b.left) < 0.5 &&\n Math.abs(a.top - b.top) < 0.5 &&\n Math.abs(a.width - b.width) < 0.5 &&\n Math.abs(a.height - b.height) < 0.5;\n\ninterface Morph {\n /** Drawer state the morph leads to: `open` grows the menu button into the close button. */\n to: 'open' | 'closed';\n from: MorphBox;\n /** Opacity of the chevrons at the start; the menu icon shows the rest of the crossfade. */\n chevrons: number;\n /** Distinguishes consecutive morphs so an interrupted one restarts from scratch. */\n key: number;\n}\n\ninterface MobileMorphProps {\n morph: Morph;\n side: 'left' | 'right';\n ghostRef: React.RefObject<HTMLDivElement | null>;\n getTarget: () => HTMLElement | null;\n onDone: () => void;\n}\n\n/**\n * A fixed copy of the button that travels from the source box to the target box, reshaping its\n * container while the chevrons and the menu icon crossfade. Both real buttons stay hidden until\n * it lands.\n */\nfunction MobileMorph({ morph, side, ghostRef, getTarget, onDone }: MobileMorphProps) {\n const chevronsRef = useRef<HTMLSpanElement>(null);\n const menuRef = useRef<HTMLSpanElement>(null);\n const onDoneRef = useRef(onDone);\n useLayoutEffect(() => {\n onDoneRef.current = onDone;\n });\n\n useLayoutEffect(() => {\n const ghost = ghostRef.current;\n if (!ghost) return;\n let frame = 0;\n let tries = 0;\n const animations: Animation[] = [];\n const options: KeyframeAnimationOptions = {\n duration: MORPH_MS,\n easing: MORPH_EASE,\n fill: 'forwards',\n };\n\n const start = () => {\n const target = getTarget();\n // The drawer mounts through a portal a moment later; wait a few frames for it.\n if (!target) {\n if (tries++ < 10) frame = requestAnimationFrame(start);\n else onDoneRef.current();\n return;\n }\n const to = morphBox(target);\n const chevrons = morph.to === 'open' ? 1 : 0;\n animations.push(\n ghost.animate([morphStyle(morph.from), morphStyle(to)], options),\n chevronsRef.current!.animate(\n [{ opacity: morph.chevrons }, { opacity: chevrons }],\n options,\n ),\n menuRef.current!.animate(\n [{ opacity: 1 - morph.chevrons }, { opacity: 1 - chevrons }],\n options,\n ),\n );\n animations[0].onfinish = () => {\n // The target can move after it was measured: closing, the scroll lock gives back\n // the scrollbar gutter once the drawer unmounts. Glide the last stretch instead of\n // letting the real button pop up elsewhere.\n const settled = getTarget();\n const end = settled && morphBox(settled);\n if (!end || sameBox(end, to)) return onDoneRef.current();\n const settle = ghost.animate([morphStyle(to), morphStyle(end)], {\n ...options,\n duration: MORPH_SETTLE_MS,\n });\n animations.push(settle);\n settle.onfinish = () => onDoneRef.current();\n };\n };\n start();\n\n return () => {\n cancelAnimationFrame(frame);\n animations.forEach((animation) => animation.cancel());\n };\n }, [morph, getTarget, ghostRef]);\n\n return createPortal(\n <div\n ref={ghostRef}\n aria-hidden='true'\n data-slot='floating-sidebar-morph'\n data-state={morph.to}\n className='text-primary pointer-events-none fixed z-[60] flex items-center justify-center overflow-hidden border-solid'\n style={morphStyle(morph.from)}>\n <span\n ref={chevronsRef}\n data-slot='floating-sidebar-morph-chevrons'\n className='absolute flex'\n style={{\n opacity: morph.chevrons,\n // Same direction as the close button's chevrons in the drawer.\n transform: side === 'right' ? 'rotate(180deg)' : undefined,\n }}>\n <ChevronsLeft className='size-5' strokeWidth={1.5} />\n </span>\n <span ref={menuRef} className='absolute flex' style={{ opacity: 1 - morph.chevrons }}>\n <Menu className='size-5' strokeWidth={1.5} />\n </span>\n </div>,\n document.body,\n );\n}\n\nconst DEFAULT_WIDTH = 305;\nconst DEFAULT_COLLAPSED_WIDTH = 48;\n/** Module icon size on collapsed tiles, a bit larger than the 20px of expanded cards. */\nconst TILE_ICON_SIZE = 22;\n/** Narrowest rail that still fits the 32px toggle with a 4px inset on each side. */\nconst MIN_COLLAPSED_WIDTH = 40;\n\nconst t = (prop: string, ms = 300, delay = 0) => `${prop} ${ms}ms ${EASE} ${delay}ms`;\n\n/**\n * Joins transition parts. Under reduced motion only non-spatial properties survive, so nothing\n * moves or resizes with an animation.\n */\nfunction transition(reduced: boolean, ...parts: string[]) {\n const kept = reduced\n ? parts.filter((part) => /^(opacity|visibility|background|color|box-shadow)/.test(part))\n : parts;\n return kept.join(', ') || 'none';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Helpers\n * -----------------------------------------------------------------------------------------------*/\n\nfunction useControllableState<T>(\n value: T | undefined,\n defaultValue: T,\n onChange?: (next: T) => void,\n): [T, (next: T) => void] {\n const [internal, setInternal] = useState(defaultValue);\n const isControlled = value !== undefined;\n const current = isControlled ? value : internal;\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setInternal(next);\n onChange?.(next);\n },\n [isControlled, onChange],\n );\n\n return [current, setValue];\n}\n\n/** Lowercases and strips diacritics so \"documentacion\" matches \"Documentación\". */\nconst normalize = (value: string) => value.normalize('NFD').replace(/[̀-ͯ]/g, '').toLowerCase();\n\nfunction filterItems(items: FloatingSidebarItemData[], query: string) {\n const needle = normalize(query.trim());\n return needle ? items.filter((item) => normalize(item.label).includes(needle)) : items;\n}\n\n/**\n * The sidebar the user touched last. With several sidebars on a page (e.g. a docs page), the\n * shortcut goes to the one holding the focus, or to this one when the focus is elsewhere.\n */\nlet lastUsedSidebar: HTMLElement | null = null;\n\n/** Sidebars that answer Ctrl/Cmd + B; one with `shortcut={false}` never claims the keystroke. */\nconst SHORTCUT_SIDEBAR = '[data-slot=\"floating-sidebar\"][data-shortcut]';\n\n/** True when the keystroke belongs to a field that handles its own shortcuts (e.g. Ctrl+B for bold). */\nfunction isEditableTarget(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) return false;\n // The sidebar's own search is a plain filter with no shortcuts of its own; blocking the toggle\n // there made Ctrl/Cmd + B dead whenever a flyout had focused its search.\n if (target.closest('[data-slot=\"floating-sidebar-search\"]')) return false;\n return (\n target.closest('[contenteditable]:not([contenteditable=\"false\"])') !== null ||\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.tagName === 'SELECT'\n );\n}\n\n/** Icon sizes: `sm` 18px (item icons), `md` 20px, `lg` 22px (collapsed tiles). */\nconst ICON_SIZES = {\n sm: '[&>svg]:size-[18px]',\n md: '[&>svg]:size-5',\n lg: '[&>svg]:size-[22px]',\n} as const;\n\nfunction SidebarIcon({\n icon,\n resolveIcon,\n size = 'md',\n}: {\n icon?: FloatingSidebarIcon;\n resolveIcon?: (key: string) => ReactNode;\n size?: keyof typeof ICON_SIZES;\n}) {\n const resolved = typeof icon === 'string' ? resolveIcon?.(icon) : icon;\n // The size eases with the collapse instead of jumping on its first frame.\n const sizeClass = cn(\n ICON_SIZES[size],\n '[&>svg]:transition-[width,height] [&>svg]:duration-240 [&>svg]:ease-[cubic-bezier(.2,.8,.2,1)] motion-reduce:[&>svg]:transition-none',\n );\n\n if (resolved === undefined || resolved === null) {\n return (\n <span data-slot='floating-sidebar-fallback-icon' className={cn('flex', sizeClass)}>\n <CircleDashed aria-hidden='true' strokeWidth={1.5} />\n </span>\n );\n }\n\n return (\n <span\n data-slot='floating-sidebar-icon'\n className={cn('flex [&>svg]:stroke-[1.5]', sizeClass)}>\n {resolved}\n </span>\n );\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FloatingSidebar\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Besides its own props, the sidebar forwards the native `<nav>` props (`id`, `aria-*`, `data-*`,\n * `style`, event handlers…) and `ref` to its root element. The sidebar's own attributes win over\n * forwarded ones: name the landmark with `labels.navigation` (not `aria-label`), and `aria-busy`,\n * `data-slot`, `data-state`, `data-side` and the `width` and `transition` of `style` are its own.\n */\nexport interface FloatingSidebarProps extends Omit<ComponentProps<'nav'>, 'children'> {\n /**\n * Modules with their items, usually mapped from a backend response. Array order is display\n * order; modules without items are not rendered unless `hideEmptyModules` is false. Entries\n * with `permission` are filtered against the `AbilityProvider`.\n */\n modules: FloatingSidebarModuleData[];\n /** Resolves string icon keys sent by the backend. Unknown keys render a neutral fallback icon. */\n resolveIcon?: (key: string) => ReactNode;\n /**\n * Renders item links, e.g. a router `Link`. Receives the link props (spread them all) and the\n * item. Defaults to a plain `<a>`.\n */\n renderLink?: (props: FloatingSidebarLinkProps, item: FloatingSidebarItemData) => ReactNode;\n\n /**\n * Expanded (`true`) or collapsed (`false`), controlled. Pair it with `onOpenChange`; the toggle\n * and Ctrl/Cmd + B request changes through it.\n */\n open?: boolean;\n /** Initial expanded state when uncontrolled. Read once on mount. */\n defaultOpen?: boolean;\n /** Fires when the toggle or Ctrl/Cmd + B requests expanding or collapsing (desktop only). */\n onOpenChange?: (open: boolean) => void;\n\n /** Side of the screen the sidebar sits on. Tooltips, flyouts and the mobile drawer open towards the content. */\n side?: 'left' | 'right';\n /** Expanded width in pixels. */\n width?: number;\n /** Collapsed width in pixels; also sizes the collapsed tiles. Values below 40 are clamped to 40. */\n collapsedWidth?: number;\n\n /**\n * `single` keeps one module card open at a time (accordion); `multiple` lets cards open and\n * close independently.\n */\n type?: 'single' | 'multiple';\n /** Open module cards (controlled). In `single` mode only the first id is used. */\n openModuleIds?: string[];\n /** Initially open module cards when uncontrolled. Read once on mount. */\n defaultOpenModuleIds?: string[];\n /** Fires with the new list of open module cards. */\n onOpenModulesChange?: (moduleIds: string[]) => void;\n /** Hides modules without items. When `false`, they render with an empty message. */\n hideEmptyModules?: boolean;\n\n /**\n * Current page item (controlled), usually derived from the router. Marks the item with\n * `aria-current=\"page\"` and its module (or collapsed tile) as active.\n */\n activeItemId?: string | null;\n /**\n * Initial current page item when uncontrolled. Afterwards it only moves on a plain click of an\n * in-app link; external links, buttons and modifier clicks keep the current page.\n */\n defaultActiveItemId?: string | null;\n /** Fires on every item selection, in the cards, the flyout and the drawer. */\n onItemSelect?: (item: FloatingSidebarItemData, module: FloatingSidebarModuleData) => void;\n\n /** Favorite item ids (controlled). Listen to `onFavoritesChange` to persist them in the backend. */\n favoriteIds?: string[];\n /** Initial favorites when uncontrolled. Read once on mount. */\n defaultFavoriteIds?: string[];\n /** Fires with the full new list of favorites. Toggling a star never selects the item. */\n onFavoritesChange?: (favoriteIds: string[]) => void;\n /** Shows the favorite star on every item, except those with `favoritable: false`. */\n showFavorites?: boolean;\n\n /**\n * Shows skeletons instead of the modules, e.g. while the backend responds. Skeletons also show\n * while the `AbilityProvider` loads grants for modules or items that declare `permission`.\n */\n loading?: boolean;\n /** Rendered when no module has items to show. */\n emptyState?: ReactNode;\n\n /**\n * Mobile only (below 768px): the drawer that holds the sidebar. When `mobileOpen` is not\n * controlled, a built-in menu button opens it; when it is, the consumer renders the trigger.\n */\n mobileOpen?: boolean;\n /** Initial drawer state when uncontrolled. Read once on mount. */\n defaultMobileOpen?: boolean;\n /** Fires when the drawer opens or closes, including after an item selection. */\n onMobileOpenChange?: (open: boolean) => void;\n\n /**\n * Enables Ctrl/Cmd + B: toggles the sidebar on desktop and the drawer on mobile. Ignored while\n * typing in a field or when another handler already used the keystroke.\n */\n shortcut?: boolean;\n /** Overrides any interface copy (see `FloatingSidebarLabels`). Pass the app language here. */\n labels?: Partial<FloatingSidebarLabels>;\n /** Extra classes for the `<nav>` element. */\n className?: string;\n}\n\n/**\n * Floating, collapsible main navigation organized in module cards, for apps whose menu comes\n * from the backend.\n *\n * Expanded, each module is a card with its own search (one open at a time, or several with\n * `type=\"multiple\"`). Collapsed, each module becomes a tile with a tooltip and a flyout. Below\n * 768px it lives in a drawer, opened by a built-in menu button or, when `mobileOpen` is\n * controlled, by the app's own trigger.\n *\n * Data-driven: it never fetches. Map the backend response to `modules`, resolve icon keys with\n * `resolveIcon` and plug the router with `renderLink`. Every piece of state (`open`,\n * `openModuleIds`, `activeItemId`, `favoriteIds`, `mobileOpen`) can be controlled or left\n * uncontrolled with its `default*` prop and `on*Change` callback.\n */\n\nexport function FloatingSidebar({\n modules,\n resolveIcon,\n renderLink,\n open: openProp,\n defaultOpen = true,\n onOpenChange,\n side = 'left',\n width = DEFAULT_WIDTH,\n collapsedWidth = DEFAULT_COLLAPSED_WIDTH,\n type = 'single',\n openModuleIds: openModulesProp,\n defaultOpenModuleIds = [],\n onOpenModulesChange,\n hideEmptyModules = true,\n activeItemId: activeItemProp,\n defaultActiveItemId = null,\n onItemSelect,\n favoriteIds: favoritesProp,\n defaultFavoriteIds = [],\n onFavoritesChange,\n showFavorites = true,\n loading = false,\n emptyState,\n mobileOpen: mobileOpenProp,\n defaultMobileOpen = false,\n onMobileOpenChange,\n shortcut = true,\n labels: labelsProp,\n className,\n ref,\n style,\n onPointerDownCapture,\n onFocusCapture,\n ...navProps\n}: FloatingSidebarProps) {\n const labels = { ...DEFAULT_LABELS, ...labelsProp };\n const reduced = useMediaQuery('(prefers-reduced-motion: reduce)');\n const isMobile = useIsMobile();\n const baseId = useId();\n\n const [open, setOpen] = useControllableState(openProp, defaultOpen, onOpenChange);\n const [rawOpenModuleIds, setOpenModuleIds] = useControllableState(\n openModulesProp,\n defaultOpenModuleIds,\n onOpenModulesChange,\n );\n // `single` mode shows at most one card, whatever ids arrive or remain after switching `type`.\n const railWidth = Math.max(MIN_COLLAPSED_WIDTH, collapsedWidth);\n const [activeItemId, setActiveItemId] = useControllableState(\n activeItemProp,\n defaultActiveItemId,\n );\n const [favoriteIds, setFavoriteIds] = useControllableState(\n favoritesProp,\n defaultFavoriteIds,\n onFavoritesChange,\n );\n const [mobileOpen, setMobileOpen] = useControllableState(\n mobileOpenProp,\n defaultMobileOpen,\n onMobileOpenChange,\n );\n // The built-in menu button and the drawer's close button morph into each other. Only with the\n // built-in button (an app-provided trigger is unknown to the sidebar) and with motion allowed.\n const morphEnabled = isMobile && mobileOpenProp === undefined && !reduced;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const toggleRef = useRef<HTMLButtonElement>(null);\n const morphGhostRef = useRef<HTMLDivElement>(null);\n // The button that takes the focus once the morph is gone: while it plays, the real one is\n // hidden and could not show a focus ring.\n const deferredFocus = useRef<'toggle' | 'trigger' | null>(null);\n const [morph, setMorph] = useState<Morph | null>(null);\n // A morph cut short by the breakpoint, reduced motion or a controlled `mobileOpen` never\n // finishes, so drop it instead of replaying it the next time the morph is allowed.\n if (morph && !morphEnabled) setMorph(null);\n const prevMobileOpen = useRef(mobileOpen);\n useLayoutEffect(() => {\n if (prevMobileOpen.current === mobileOpen) return;\n prevMobileOpen.current = mobileOpen;\n // An interrupted morph turns back from where its ghost is now. Otherwise, while closing,\n // the drawer is still mounted for its exit animation, so both buttons can be measured.\n const ghost = morphGhostRef.current;\n const source = ghost ?? (mobileOpen ? triggerRef.current : toggleRef.current);\n deferredFocus.current = null;\n if (!morphEnabled || !source || typeof source.animate !== 'function') return;\n deferredFocus.current = mobileOpen ? 'toggle' : 'trigger';\n const chevrons = ghost?.querySelector<HTMLElement>(\n '[data-slot=\"floating-sidebar-morph-chevrons\"]',\n );\n setMorph((current) => ({\n to: mobileOpen ? 'open' : 'closed',\n from: morphBox(source),\n chevrons: chevrons\n ? parseFloat(getComputedStyle(chevrons).opacity)\n : mobileOpen\n ? 0\n : 1,\n key: (current?.key ?? 0) + 1,\n }));\n }, [mobileOpen, morphEnabled]);\n const getMorphTarget = useCallback(\n () => (morph?.to === 'open' ? toggleRef.current : triggerRef.current),\n [morph?.to],\n );\n const endMorph = useCallback(() => setMorph(null), []);\n // Hand the focus over once the morph is gone, however it ended (landed, gave up or dropped),\n // unless the user moved it meanwhile.\n useLayoutEffect(() => {\n if (morph) return;\n const pending = deferredFocus.current;\n deferredFocus.current = null;\n const active = document.activeElement;\n if (pending === 'toggle') {\n const toggle = toggleRef.current;\n if (toggle && active === toggle.closest('[data-slot=\"sheet-content\"]')) toggle.focus();\n } else if (pending === 'trigger' && (!active || active === document.body)) {\n triggerRef.current?.focus();\n }\n }, [morph]);\n const morphing = morphEnabled && morph !== null;\n // The keyboard hint only helps where a keyboard is likely; touch users get the plain label.\n const finePointer = useMediaQuery('(hover: hover) and (pointer: fine)');\n\n // One query per module, shared by its card and its flyout.\n const [queries, setQueries] = useState<Record<string, string>>({});\n\n // Collapsed mode: the module whose flyout is open, and the hovered/focused tile.\n const [flyoutId, setFlyoutId] = useState<string | null>(null);\n const [hoverId, setHoverId] = useState<string | null>(null);\n\n // The mobile drawer always uses the expanded layout.\n const collapsed = !isMobile && !open;\n // Flyout and tooltip state only make sense in the mode they were opened in, so reset them\n // whenever the mode changes, including through a controlled `open` prop.\n const [prevCollapsed, setPrevCollapsed] = useState(collapsed);\n // True during the collapse itself; the active tile waits for it before turning primary.\n const [settling, setSettling] = useState(false);\n if (prevCollapsed !== collapsed) {\n setPrevCollapsed(collapsed);\n setSettling(collapsed);\n setFlyoutId(null);\n setHoverId(null);\n }\n useEffect(() => {\n if (!settling) return;\n const timer = setTimeout(() => setSettling(false), MOTION_MS);\n return () => clearTimeout(timer);\n }, [settling]);\n const toggle = useCallback(() => setOpen(!open), [open, setOpen]);\n const navRef = useRef<HTMLElement>(null);\n\n useEffect(() => {\n if (!shortcut) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented || isEditableTarget(event.target)) return;\n if (\n (event.ctrlKey || event.metaKey) &&\n !event.shiftKey &&\n !event.altKey &&\n event.key.toLowerCase() === 'b'\n ) {\n // Only one sidebar answers: the one holding the focus, else the last one used\n // (the flyout lives in a portal, so its focus counts as \"elsewhere\").\n // Only sidebars with the shortcut enabled take part.\n const owner =\n event.target instanceof Element ? event.target.closest(SHORTCUT_SIDEBAR) : null;\n const nav = navRef.current;\n if (owner && owner !== nav) return;\n if (!owner) {\n // No sidebar used yet: always the first one on the page, so repeated presses\n // do not alternate between sidebars.\n const fallback =\n lastUsedSidebar?.isConnected && lastUsedSidebar.matches(SHORTCUT_SIDEBAR)\n ? lastUsedSidebar\n : document.querySelector(SHORTCUT_SIDEBAR);\n if (fallback && fallback !== nav) return;\n }\n event.preventDefault();\n // On mobile the shortcut drives the drawer; the hidden desktop state stays as is.\n if (isMobile) setMobileOpen(!mobileOpen);\n else toggle();\n }\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [shortcut, toggle, isMobile, mobileOpen, setMobileOpen]);\n\n /** `navigates` is true only for a plain click that keeps the user in this tab (see `ModuleItem`). */\n const selectItem = (\n item: FloatingSidebarItemData,\n module: FloatingSidebarModuleData,\n navigates: boolean,\n ) => {\n if (navigates) setActiveItemId(item.id);\n setFlyoutId(null);\n if (isMobile) setMobileOpen(false);\n onItemSelect?.(item, module);\n };\n\n const toggleFavorite = (itemId: string) =>\n setFavoriteIds(\n favoriteIds.includes(itemId)\n ? favoriteIds.filter((id) => id !== itemId)\n : [...favoriteIds, itemId],\n );\n\n const list: SharedListProps = {\n activeItemId,\n favoriteIds: showFavorites ? favoriteIds : null,\n reduced,\n labels,\n resolveIcon,\n renderLink,\n onToggleFavorite: toggleFavorite,\n };\n\n // On mobile the toggle closes the drawer; the drawer itself is never collapsed.\n const toggleLabel = isMobile ? labels.closeMenu : collapsed ? labels.expand : labels.collapse;\n\n // Permissions. Only data that declares `permission` is checked; it is hidden when the user\n // lacks the grant or when there is no AbilityProvider. While the grants are still loading,\n // skeletons are shown so nothing appears and then vanishes. Hiding entries is a UX layer:\n // the backend must still filter the navigation and protect every route.\n const ability = useOptionalAbility();\n const usesPermissions = modules.some(\n (module) => module.permission || module.items.some((item) => item.permission),\n );\n const permissionsPending = usesPermissions && ability?.status === 'loading';\n const isAllowed = (entry: Pick<FloatingSidebarItemData, 'permission' | 'permissionMode'>) =>\n !entry.permission ||\n (ability?.status === 'ready' && ability.can(entry.permission, entry.permissionMode));\n const authorizedModules = usesPermissions\n ? modules.filter(isAllowed).flatMap((module) => {\n const items = module.items.filter(isAllowed);\n // A module emptied by permissions is dropped; one that arrived empty follows\n // `hideEmptyModules` below.\n return items.length > 0 || module.items.length === 0 ? [{ ...module, items }] : [];\n })\n : modules;\n const showSkeletons = loading || permissionsPending;\n const visibleModules = hideEmptyModules\n ? authorizedModules.filter((module) => module.items.length > 0)\n : authorizedModules;\n\n // `single` mode shows at most one card: the first requested id that matches a visible module,\n // so a stale or permission-hidden id does not block a valid one.\n const visibleModuleIds = new Set(visibleModules.map((module) => module.id));\n const openModuleIds =\n type === 'single'\n ? rawOpenModuleIds.filter((id) => visibleModuleIds.has(id)).slice(0, 1)\n : rawOpenModuleIds;\n\n const toggleModule = (moduleId: string) => {\n const isOpen = openModuleIds.includes(moduleId);\n if (type === 'multiple') {\n setOpenModuleIds(\n isOpen\n ? openModuleIds.filter((id) => id !== moduleId)\n : [...openModuleIds, moduleId],\n );\n } else {\n setOpenModuleIds(isOpen ? [] : [moduleId]);\n }\n };\n\n const nav = (\n <nav\n {...navProps}\n ref={(node) => {\n navRef.current = node;\n if (typeof ref === 'function') return ref(node);\n if (ref) ref.current = node;\n }}\n onPointerDownCapture={(event) => {\n lastUsedSidebar = event.currentTarget;\n onPointerDownCapture?.(event);\n }}\n onFocusCapture={(event) => {\n lastUsedSidebar = event.currentTarget;\n onFocusCapture?.(event);\n }}\n data-slot='floating-sidebar'\n data-shortcut={shortcut ? '' : undefined}\n data-state={collapsed ? 'collapsed' : 'expanded'}\n data-side={side}\n aria-label={labels.navigation}\n aria-busy={showSkeletons || undefined}\n className={cn(\n 'flex h-full min-h-0 flex-col gap-3',\n // useIsMobile only resolves after mount; hide the inline layout on phones with CSS\n // so the first paint never shows it before the drawer takes over.\n !isMobile && 'max-md:hidden',\n className,\n )}\n // The consumer's style is kept; the sidebar's own width and transition take precedence.\n style={\n isMobile\n ? style\n : {\n ...style,\n width: collapsed ? railWidth : width,\n transition: transition(reduced, t('width', MOTION_MS)),\n }\n }>\n <div\n data-slot='floating-sidebar-header'\n className={cn(\n 'flex h-10 shrink-0 items-center',\n side === 'right' && 'flex-row-reverse',\n )}>\n <span\n title={labels.title}\n className='text-muted-foreground overflow-hidden pl-1.5 text-[11px] font-medium tracking-[.12em] text-ellipsis whitespace-nowrap uppercase'\n style={{\n opacity: collapsed ? 0 : 1,\n maxWidth: collapsed ? 0 : 200,\n transition: transition(\n reduced,\n t('opacity', FADE_MS, collapsed ? 0 : FADE_MS),\n t('max-width', MOTION_MS),\n ),\n }}>\n {labels.title}\n </span>\n <button\n ref={toggleRef}\n type='button'\n data-slot='floating-sidebar-toggle'\n aria-label={toggleLabel}\n aria-expanded={isMobile ? undefined : !collapsed}\n title={\n shortcut && (!isMobile || finePointer)\n ? `${toggleLabel} (Ctrl/⌘ + B)`\n : toggleLabel\n }\n onClick={isMobile ? () => setMobileOpen(false) : toggle}\n className={cn(\n 'text-primary focus-visible:ring-primary bg-sidebar border-floating-sidebar-card-border hover:bg-floating-sidebar-toggle-hover flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-full border shadow-[0_2px_6px_color-mix(in_srgb,var(--color-primary)_6%,transparent)] outline-none focus-visible:ring-2 focus-visible:ring-offset-2',\n side === 'right' ? 'mr-auto' : 'ml-auto',\n )}\n style={{\n // Hidden, and out of reach of a stray tap, while the mobile morph stands in\n // for it.\n opacity: morphing ? 0 : undefined,\n pointerEvents: morphing ? 'none' : undefined,\n // The auto margin keeps the toggle on the edge while the width animates;\n // only the outer margin changes, to center it on the collapsed rail.\n // (`auto` cannot be interpolated, so animating it made the toggle jump.)\n [side === 'right' ? 'marginLeft' : 'marginRight']: collapsed\n ? (railWidth - 32) / 2\n : 0,\n transition: transition(\n reduced,\n t(side === 'right' ? 'margin-left' : 'margin-right', MOTION_MS),\n ),\n }}>\n <span\n className='flex'\n style={{\n // The chevrons point towards the edge when they collapse the sidebar.\n transform:\n collapsed !== (side === 'right')\n ? 'rotate(180deg)'\n : 'rotate(0deg)',\n transition: transition(reduced, t('transform', MOTION_MS)),\n }}>\n <ChevronsLeft aria-hidden='true' className='size-5' strokeWidth={1.5} />\n </span>\n </button>\n </div>\n\n <div\n data-slot='floating-sidebar-modules'\n className='flex min-h-0 flex-1 flex-col'\n style={{\n gap: collapsed ? 8 : 12,\n transition: transition(reduced, t('gap', MOTION_MS)),\n }}>\n {showSkeletons &&\n Array.from({ length: 4 }, (_, index) => (\n <div key={index} data-slot='floating-sidebar-skeleton'>\n <Skeleton\n className={\n collapsed ? 'rounded-[14px]' : 'h-[58px] w-full rounded-2xl'\n }\n style={\n collapsed ? { width: railWidth, height: railWidth } : undefined\n }\n />\n </div>\n ))}\n {!showSkeletons && visibleModules.length === 0 && emptyState}\n {!showSkeletons &&\n visibleModules.map((module) => (\n <ModuleCard\n tileSize={railWidth}\n key={module.id}\n module={module}\n regionId={`${baseId}-${module.id}`}\n flyoutRegionId={`${baseId}-${module.id}-flyout`}\n bodyWidth={isMobile ? undefined : width - 2}\n collapsed={collapsed}\n side={side}\n open={!collapsed && openModuleIds.includes(module.id)}\n flyoutOpen={collapsed && flyoutId === module.id}\n anyFlyoutOpen={collapsed && flyoutId !== null}\n settling={settling}\n tooltipOpen={collapsed && hoverId === module.id && !flyoutId}\n onTooltipOpenChange={(next) =>\n setHoverId((current) =>\n next ? module.id : current === module.id ? null : current,\n )\n }\n onFlyoutClose={() =>\n setFlyoutId((current) => (current === module.id ? null : current))\n }\n list={list}\n query={queries[module.id] ?? ''}\n onQueryChange={(query) =>\n setQueries((current) => ({ ...current, [module.id]: query }))\n }\n onHeaderClick={() => {\n if (collapsed) {\n setHoverId(null);\n setFlyoutId(flyoutId === module.id ? null : module.id);\n } else {\n toggleModule(module.id);\n }\n }}\n onSelect={(item, navigates) => selectItem(item, module, navigates)}\n />\n ))}\n </div>\n </nav>\n );\n\n if (isMobile) {\n return (\n <TooltipProvider delayDuration={300}>\n <Sheet open={mobileOpen} onOpenChange={setMobileOpen}>\n {mobileOpenProp === undefined && (\n <SheetTrigger asChild>\n <button\n ref={triggerRef}\n type='button'\n data-slot='floating-sidebar-mobile-trigger'\n aria-label={labels.openMenu}\n style={{\n opacity: morphing ? 0 : undefined,\n pointerEvents: morphing ? 'none' : undefined,\n }}\n className='text-primary focus-visible:ring-primary bg-sidebar hover:bg-sidebar-accent flex size-10 cursor-pointer items-center justify-center rounded-[10px] shadow-[0_8px_24px_color-mix(in_srgb,var(--color-primary)_8%,transparent)] outline-none focus-visible:ring-2 focus-visible:ring-offset-2'>\n <Menu aria-hidden='true' className='size-5' strokeWidth={1.5} />\n </button>\n </SheetTrigger>\n )}\n {/* No drawer panel: the cards float over a dimmed, blurred overlay, and the\n header toggle replaces the sheet's own close button. */}\n <SheetContent\n side={side}\n aria-describedby={undefined}\n showCloseButton={false}\n overlayClassName='bg-primary/20'\n className='bg-transparent p-3 pt-2 shadow-none data-[side=left]:border-r-0 data-[side=right]:border-l-0'\n // The cards keep the desktop width; 24px is the horizontal padding.\n style={{ width: width + 24, maxWidth: '100%' }}\n onOpenAutoFocus={(event) => {\n // The close button is invisible while the morph grows into it; keep\n // the focus on the drawer until it shows (see `deferredFocus`).\n if (deferredFocus.current !== 'toggle') return;\n event.preventDefault();\n (event.currentTarget as HTMLElement | null)?.focus();\n }}\n onCloseAutoFocus={(event) => {\n // Likewise the menu button stays hidden until the closing morph\n // lands; it takes the focus then.\n if (deferredFocus.current === 'trigger') event.preventDefault();\n }}\n onEscapeKeyDown={(event) => {\n // The dialog hears Escape before the search field does; leave it to the\n // field while it still holds a query.\n const active = document.activeElement;\n if (\n active instanceof HTMLInputElement &&\n active.value &&\n active.closest('[data-slot=\"floating-sidebar-search\"]')\n ) {\n event.preventDefault();\n }\n }}>\n <SheetTitle className='sr-only'>{labels.title}</SheetTitle>\n {nav}\n </SheetContent>\n </Sheet>\n {morphing && (\n <MobileMorph\n key={morph.key}\n morph={morph}\n side={side}\n ghostRef={morphGhostRef}\n getTarget={getMorphTarget}\n onDone={endMorph}\n />\n )}\n </TooltipProvider>\n );\n }\n\n return <TooltipProvider delayDuration={300}>{nav}</TooltipProvider>;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Shared list pieces (used by the expanded card and the collapsed flyout)\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SharedListProps {\n activeItemId: string | null;\n /** `null` hides the favorite stars. */\n favoriteIds: string[] | null;\n reduced: boolean;\n labels: FloatingSidebarLabels;\n resolveIcon?: (key: string) => ReactNode;\n renderLink?: FloatingSidebarProps['renderLink'];\n onToggleFavorite: (itemId: string) => void;\n}\n\ninterface ModuleSearchProps {\n moduleLabel: string;\n query: string;\n focusable: boolean;\n labels: FloatingSidebarLabels;\n onQueryChange: (query: string) => void;\n className?: string;\n}\n\nfunction ModuleSearch({\n moduleLabel,\n query,\n focusable,\n labels,\n onQueryChange,\n className,\n}: ModuleSearchProps) {\n const tabIndex = focusable ? 0 : -1;\n const inputRef = useRef<HTMLInputElement>(null);\n\n // A <div>, not a <label>: a label may only contain the control it names, and the input\n // already has an accessible name through aria-label.\n return (\n <div\n data-slot='floating-sidebar-search'\n className={cn(\n 'text-muted-foreground border-floating-sidebar-search-border bg-floating-sidebar-search flex h-[38px] items-center gap-2 rounded-[10px] border pr-1 pl-3',\n className,\n )}>\n <Search aria-hidden='true' className='size-4 shrink-0' strokeWidth={1.5} />\n <input\n ref={inputRef}\n type='search'\n aria-label={labels.searchLabel(moduleLabel)}\n placeholder={labels.searchPlaceholder(moduleLabel)}\n tabIndex={tabIndex}\n value={query}\n onChange={(event) => onQueryChange(event.target.value)}\n onKeyDown={(event) => {\n // Escape clears the query first; it only bubbles up once the field is empty.\n if (event.key === 'Escape' && query) {\n event.stopPropagation();\n onQueryChange('');\n }\n }}\n className='text-foreground placeholder:text-muted-foreground h-[34px] min-w-0 flex-1 border-0 bg-transparent p-0 text-[13px] outline-none [&::-webkit-search-cancel-button]:appearance-none'\n />\n {query && (\n <button\n type='button'\n aria-label={labels.clearSearch}\n tabIndex={tabIndex}\n onClick={() => {\n onQueryChange('');\n // The button unmounts once the query is empty; keep focus in the field.\n inputRef.current?.focus();\n }}\n className='focus-visible:ring-primary hover:bg-accent/60 flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-lg border-0 bg-transparent outline-none focus-visible:ring-2'>\n <X aria-hidden='true' className='size-4' strokeWidth={1.5} />\n </button>\n )}\n </div>\n );\n}\n\n/**\n * The status region stays mounted and only receives content when nothing matches; live regions\n * inserted already filled are often not announced.\n */\nfunction NoMatches({\n show,\n moduleLabel,\n query,\n labels,\n compact,\n}: {\n show: boolean;\n moduleLabel: string;\n query: string;\n labels: FloatingSidebarLabels;\n compact?: boolean;\n}) {\n return (\n <div role='status' data-slot='floating-sidebar-no-matches'>\n {show && (\n <NoMatchesMessage\n moduleLabel={moduleLabel}\n query={query}\n labels={labels}\n compact={compact}\n />\n )}\n </div>\n );\n}\n\nfunction NoMatchesMessage({\n moduleLabel,\n query,\n labels,\n compact = false,\n}: {\n moduleLabel: string;\n query: string;\n labels: FloatingSidebarLabels;\n /** Flyout variant: no icon and a shorter message. */\n compact?: boolean;\n}) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center text-center',\n compact ? 'gap-1 px-3 py-4' : 'gap-1.5 px-3 py-5',\n )}>\n {!compact && (\n <Search\n aria-hidden='true'\n className='text-muted-foreground size-5'\n strokeWidth={1.5}\n />\n )}\n <span className='text-primary text-sm font-semibold'>{labels.noMatchesTitle}</span>\n <span className='text-muted-foreground text-[13px] leading-[1.4]'>\n {compact ? labels.flyoutNoMatches(query) : labels.noMatches(moduleLabel, query)}\n </span>\n </div>\n );\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Module card\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ModuleCardProps {\n module: FloatingSidebarModuleData;\n /** Side of the square collapsed tile (border included), in pixels. */\n tileSize: number;\n regionId: string;\n flyoutRegionId: string;\n /**\n * Fixed width of the card body (expanded width minus the card border). While the sidebar\n * collapses the body is clipped instead of reflowing, so the card height does not bounce.\n */\n bodyWidth?: number;\n side: 'left' | 'right';\n collapsed: boolean;\n open: boolean;\n /** Collapsed mode: the module's flyout is open. */\n flyoutOpen: boolean;\n /** Collapsed mode: some module's flyout is open (only that tile shows as selected). */\n anyFlyoutOpen: boolean;\n /** The sidebar is still collapsing; the active tile waits for it before turning primary. */\n settling: boolean;\n /** Collapsed mode: the module's tooltip is shown. */\n tooltipOpen: boolean;\n onTooltipOpenChange: (open: boolean) => void;\n onFlyoutClose: () => void;\n list: SharedListProps;\n query: string;\n onQueryChange: (query: string) => void;\n onHeaderClick: () => void;\n onSelect: (item: FloatingSidebarItemData, navigates: boolean) => void;\n}\n\nfunction ModuleCard({\n module,\n tileSize,\n regionId,\n flyoutRegionId,\n bodyWidth,\n side,\n collapsed,\n open,\n flyoutOpen,\n anyFlyoutOpen,\n settling,\n tooltipOpen,\n onTooltipOpenChange,\n onFlyoutClose,\n list,\n query,\n onQueryChange,\n onHeaderClick,\n onSelect,\n}: ModuleCardProps) {\n const { activeItemId, reduced, labels, resolveIcon } = list;\n const hasActive = module.items.some((item) => item.id === activeItemId);\n const tileActive = collapsed && hasActive;\n // Exactly one collapsed tile shows as selected (primary): the one whose flyout is open, or,\n // when no flyout is open, the module holding the current page.\n const tileSelected = anyFlyoutOpen ? flyoutOpen : tileActive;\n // Collapsing into the active tile, the card shrinks white and turns navy (background, border\n // and icon together) in one step when the collapse ends: painting it earlier showed the white\n // search over navy, and fading icon and background against each other made the icon vanish.\n // Expanding fades the fill out in the first half and flips the icon at its midpoint.\n // Only the fill that follows a collapse waits for it; selecting a tile by click is immediate.\n const fillAfterCollapse = tileSelected && tileActive && settling && !reduced;\n const fillTransition = fillAfterCollapse\n ? `0ms linear ${MOTION_MS}ms`\n : `${FADE_MS}ms linear 0ms`;\n const iconFlipDelay = fillAfterCollapse ? MOTION_MS : FADE_MS / 2;\n // Horizontal padding that centres the icon on the collapsed tile (inside its border).\n const tilePadding = (tileSize - 2 - TILE_ICON_SIZE) / 2;\n // Module icons stay primary only on the open card or the selected tile; the rest are grey.\n const iconHighlighted = collapsed ? tileSelected : open;\n\n // When the sidebar collapses (not on mount, not when expanding), the tile of the module that\n // holds the current page hops as it turns navy. The whole tile moves, so the background and the\n // icon hop together instead of the icon doubling the movement.\n const cardRef = useRef<HTMLDivElement>(null);\n const wasCollapsed = useRef(collapsed);\n useEffect(() => {\n const justCollapsed = collapsed && !wasCollapsed.current;\n wasCollapsed.current = collapsed;\n if (!justCollapsed || !hasActive || reduced) return;\n const animation = cardRef.current?.animate?.(BOUNCE_KEYFRAMES, {\n duration: BOUNCE_MS,\n delay: MOTION_MS,\n easing: 'ease-out',\n });\n return () => animation?.cancel();\n }, [collapsed, hasActive, reduced]);\n const items = filterItems(module.items, query);\n const isEmpty = module.items.length === 0;\n const emptyMessage = (\n <p\n data-slot='floating-sidebar-empty-module'\n className='text-muted-foreground px-3 py-4 text-center text-[13px] leading-[1.4]'>\n {labels.emptyModule}\n </p>\n );\n const tileRef = useRef<HTMLButtonElement>(null);\n // A flyout dismissed by a press or focus elsewhere leaves focus where the user put it;\n // any other close (Escape, item select) returns focus to the tile.\n const closedFromOutside = useRef(false);\n // Focus returns to the tile when the flyout closes; that focus should not pop the tooltip.\n const skipNextTooltip = useRef(false);\n\n return (\n <Popover open={flyoutOpen} onOpenChange={(next) => !next && onFlyoutClose()}>\n <div\n ref={cardRef}\n data-slot='floating-sidebar-module'\n data-module-id={module.id}\n data-state={open ? 'open' : 'closed'}\n data-active={hasActive ? 'true' : undefined}\n className={cn(\n 'relative flex min-h-0 w-full flex-col',\n 'border',\n collapsed ? 'rounded-[14px]' : 'rounded-2xl',\n tileSelected\n ? 'border-primary bg-primary'\n : 'bg-sidebar border-floating-sidebar-card-border',\n open\n ? 'shadow-[0_4px_14px_color-mix(in_srgb,var(--color-primary)_3%,transparent)]'\n : 'shadow-[0_1px_4px_color-mix(in_srgb,var(--color-primary)_3%,transparent)]',\n )}\n style={{\n flex: open ? '0 1 auto' : '0 0 auto',\n transition: transition(\n reduced,\n t('border-radius', MOTION_MS),\n `background-color ${fillTransition}`,\n `border-color ${fillTransition}`,\n t('box-shadow', MOTION_MS),\n ),\n }}>\n <Tooltip\n open={tooltipOpen}\n onOpenChange={(next) => {\n if (next && skipNextTooltip.current) return;\n onTooltipOpenChange(collapsed && next);\n }}>\n <PopoverAnchor asChild>\n <TooltipTrigger asChild>\n <button\n ref={tileRef}\n type='button'\n data-slot='floating-sidebar-module-trigger'\n aria-label={\n collapsed && hasActive\n ? module.label + labels.currentPageSuffix\n : module.label\n }\n aria-expanded={collapsed ? flyoutOpen : open}\n // The flyout only mounts while open.\n aria-controls={\n collapsed ? (flyoutOpen ? flyoutRegionId : undefined) : regionId\n }\n onClick={onHeaderClick}\n className={cn(\n 'group/head focus-visible:ring-primary relative flex w-full shrink-0 cursor-pointer items-center gap-3 overflow-hidden border-0 bg-transparent text-left outline-none focus-visible:ring-2 focus-visible:ring-offset-2',\n collapsed ? 'rounded-[14px]' : 'h-[58px] rounded-2xl',\n tileSelected ? 'text-primary-foreground' : 'text-primary',\n )}\n style={{\n // Collapsed: a square tile (border included) with the icon centered.\n ...(collapsed && { height: tileSize - 2 }),\n paddingLeft: collapsed ? tilePadding : 20,\n paddingRight: collapsed ? tilePadding : 20,\n transition: transition(\n reduced,\n t('height', MOTION_MS),\n t('padding', MOTION_MS),\n `color 0ms linear ${iconFlipDelay}ms`,\n t('border-radius', MOTION_MS),\n ),\n }}>\n {/* Hover fill inset from the card edge, only while the module is closed. */}\n <span\n aria-hidden='true'\n data-slot='floating-sidebar-module-hover'\n className={cn(\n 'pointer-events-none absolute transition-colors duration-180 ease-out',\n // Inset on expanded cards; edge to edge on collapsed tiles.\n collapsed\n ? 'inset-0 rounded-[inherit]'\n : 'inset-1.5 rounded-[10px]',\n !open &&\n (tileSelected\n ? 'group-hover/head:bg-primary-foreground/12'\n : 'group-hover/head:bg-floating-sidebar-hover'),\n )}\n />\n <span\n data-slot='floating-sidebar-module-icon'\n className={cn(\n 'relative flex shrink-0 items-center justify-center',\n !iconHighlighted && 'text-muted-foreground',\n )}\n // Follows the header color flip, so the icon changes in one step.\n style={{\n transition: transition(\n reduced,\n `color 0ms linear ${iconFlipDelay}ms`,\n ),\n }}>\n <SidebarIcon\n icon={module.icon}\n resolveIcon={resolveIcon}\n size={collapsed ? 'lg' : 'md'}\n />\n </span>\n <span\n data-slot='floating-sidebar-module-label'\n aria-hidden={collapsed || undefined}\n className='relative min-w-0 flex-1 text-sm font-medium whitespace-nowrap'\n style={{\n opacity: collapsed ? 0 : 1,\n transition: transition(\n reduced,\n t('opacity', FADE_MS, collapsed ? 0 : FADE_MS),\n ),\n }}>\n {module.label}\n </span>\n <span\n data-slot='floating-sidebar-module-chevron'\n aria-hidden='true'\n className={cn(\n 'relative flex shrink-0',\n !tileSelected && 'text-muted-foreground',\n )}\n style={{\n opacity: collapsed ? 0 : 1,\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: transition(\n reduced,\n t('transform', 220),\n t('opacity', FADE_MS, collapsed ? 0 : FADE_MS),\n ),\n }}>\n <ChevronDown className='size-3.5' strokeWidth={1.5} />\n </span>\n </button>\n </TooltipTrigger>\n </PopoverAnchor>\n {collapsed && (\n <TooltipContent\n side={side === 'right' ? 'left' : 'right'}\n sideOffset={12}\n data-slot='floating-sidebar-tooltip'>\n {module.label}\n </TooltipContent>\n )}\n </Tooltip>\n\n <div\n className='grid min-h-0 flex-[1_1_auto]'\n style={{\n gridTemplateRows: open ? '1fr' : '0fr',\n transition: transition(reduced, t('grid-template-rows', MOTION_MS)),\n }}>\n <div\n id={regionId}\n data-slot='floating-sidebar-module-content'\n data-state={open ? 'open' : 'closed'}\n data-scroll='muted'\n className={cn('min-h-0 overflow-x-hidden', SUBTLE_SCROLLBAR)}\n style={{\n overflowY: open ? 'auto' : 'hidden',\n visibility: open ? 'visible' : 'hidden',\n transition: open\n ? 'visibility 0s'\n : `visibility 0s linear ${MOTION_MS}ms`,\n }}>\n <div data-slot='floating-sidebar-module-body' style={{ width: bodyWidth }}>\n {isEmpty && emptyMessage}\n {!isEmpty && (\n <div\n data-slot='floating-sidebar-search-bar'\n className='bg-sidebar sticky top-0 z-[2] px-3 pb-3'>\n <ModuleSearch\n moduleLabel={module.label}\n query={query}\n focusable={open}\n labels={labels}\n onQueryChange={onQueryChange}\n />\n </div>\n )}\n {!isEmpty && (\n <ul\n data-slot='floating-sidebar-item-list'\n className='flex flex-col gap-0.5 px-3 pb-3'>\n {items.map((item, index) => (\n <ItemRow\n key={item.id}\n item={item}\n list={list}\n visible={open}\n staggerIndex={index}\n onSelect={(navigates) => onSelect(item, navigates)}\n />\n ))}\n </ul>\n )}\n {!isEmpty && (\n <NoMatches\n show={items.length === 0}\n moduleLabel={module.label}\n query={query}\n labels={labels}\n />\n )}\n </div>\n </div>\n </div>\n\n {collapsed && (\n <PopoverContent\n id={flyoutRegionId}\n role='group'\n aria-label={module.label}\n data-slot='floating-sidebar-flyout'\n data-side={side}\n side={side === 'right' ? 'left' : 'right'}\n align='start'\n sideOffset={16}\n collisionPadding={8}\n className='ring-floating-sidebar-card-border max-h-(--radix-popover-content-available-height) w-[268px] gap-0 rounded-2xl px-2 pt-4 pb-2'\n onEscapeKeyDown={(event) => {\n // Escape clears the search first and only closes the flyout once it is empty.\n if (!query) return;\n event.preventDefault();\n onQueryChange('');\n }}\n onInteractOutside={(event) => {\n // The tile toggles the flyout itself through its click handler.\n if (tileRef.current?.contains(event.target as Node)) {\n event.preventDefault();\n return;\n }\n closedFromOutside.current = true;\n }}\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n if (!closedFromOutside.current) {\n // Radix opens the tooltip synchronously on focus, so the flag only\n // covers this programmatic focus.\n skipNextTooltip.current = true;\n tileRef.current?.focus();\n skipNextTooltip.current = false;\n }\n closedFromOutside.current = false;\n }}>\n <div\n data-slot='floating-sidebar-flyout-title'\n className='text-muted-foreground px-3 pb-2.5 text-[11px] font-medium tracking-[.1em] uppercase'>\n {module.label}\n </div>\n {isEmpty && emptyMessage}\n {!isEmpty && (\n <ModuleSearch\n moduleLabel={module.label}\n query={query}\n focusable={flyoutOpen}\n labels={labels}\n onQueryChange={onQueryChange}\n className='mx-2 mb-2'\n />\n )}\n <div\n data-slot='floating-sidebar-flyout-list'\n data-scroll='muted'\n className={cn(\n // Clip x: items nudge 2px right on hover, and a y-only scroller\n // would then scroll sideways.\n 'max-h-[420px] min-h-0 overflow-x-hidden overflow-y-auto',\n SUBTLE_SCROLLBAR,\n )}>\n {!isEmpty && (\n <ul\n data-slot='floating-sidebar-item-list'\n className='flex flex-col gap-0.5'>\n {items.map((item) => (\n <ItemRow\n key={item.id}\n item={item}\n list={list}\n visible={flyoutOpen}\n onSelect={(navigates) => onSelect(item, navigates)}\n />\n ))}\n </ul>\n )}\n {!isEmpty && (\n <NoMatches\n show={items.length === 0}\n moduleLabel={module.label}\n query={query}\n labels={labels}\n compact\n />\n )}\n </div>\n </PopoverContent>\n )}\n </div>\n </Popover>\n );\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Item row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ItemRowProps {\n item: FloatingSidebarItemData;\n list: SharedListProps;\n /** Whether the row is shown and reachable with the keyboard. */\n visible: boolean;\n /** Position used to stagger the opening animation; omit to skip the stagger. */\n staggerIndex?: number;\n onSelect: (navigates: boolean) => void;\n}\n\nfunction ItemRow({ item, list, visible, staggerIndex, onSelect }: ItemRowProps) {\n const { activeItemId, favoriteIds, reduced, labels, resolveIcon, renderLink } = list;\n const active = item.id === activeItemId;\n const favorite = favoriteIds?.includes(item.id) ?? false;\n const tabIndex = visible ? 0 : -1;\n\n // Opening staggers the rows in; closing hides them at once.\n const staggered = staggerIndex !== undefined;\n // Rows fade in one after another when opening, capped so any list finishes within\n // MOTION_MS, and all fade out at once when closing.\n const delay = staggered && visible ? Math.min(staggerIndex * 20, FADE_MS) : 0;\n const rowStyle: CSSProperties = staggered\n ? {\n opacity: visible ? 1 : 0,\n transition: transition(\n reduced,\n t('opacity', FADE_MS, delay),\n 'background-color 180ms ease-out',\n ),\n }\n : { transition: 'background-color 180ms ease-out' };\n\n const className = cn(\n 'focus-visible:ring-primary flex min-h-[46px] min-w-0 flex-1 cursor-pointer items-start gap-3 rounded-[10px] border-0 bg-transparent py-[13px] pr-1 pl-3 text-left text-[13px] leading-5 transition-transform duration-180 ease-[cubic-bezier(.2,.8,.2,1)] outline-none hover:text-primary focus-visible:ring-2 focus-visible:ring-inset disabled:cursor-not-allowed disabled:opacity-50',\n active\n ? 'text-primary font-bold'\n : 'font-normal text-floating-sidebar-item-foreground hover:translate-x-0.5 motion-reduce:hover:translate-x-0',\n );\n const content = (\n <>\n <span\n className={cn('flex shrink-0', active ? 'text-primary' : 'text-muted-foreground')}>\n <SidebarIcon icon={item.icon} resolveIcon={resolveIcon} size='sm' />\n </span>\n <span className='min-w-0 [overflow-wrap:anywhere]'>{item.label}</span>\n </>\n );\n const common = {\n className,\n tabIndex,\n 'aria-current': active ? ('page' as const) : undefined,\n 'data-slot': 'floating-sidebar-item',\n 'data-active': active ? ('true' as const) : undefined,\n };\n\n let control: ReactNode;\n if (item.href && !item.disabled) {\n const linkProps: FloatingSidebarLinkProps = {\n ...common,\n href: item.href,\n children: content,\n // Only a plain click on an in-app link moves the current page; external links and\n // modifier or middle clicks open elsewhere and leave this tab where it is.\n onClick: (event: MouseEvent<HTMLElement>) =>\n onSelect(\n !item.external &&\n event.button === 0 &&\n !(event.ctrlKey || event.metaKey || event.shiftKey || event.altKey),\n ),\n ...(item.external ? { target: '_blank', rel: 'noopener noreferrer' } : {}),\n };\n control = renderLink ? renderLink(linkProps, item) : <a {...linkProps} />;\n } else {\n control = (\n <button\n type='button'\n {...common}\n disabled={item.disabled}\n onClick={() => onSelect(false)}>\n {content}\n </button>\n );\n }\n\n const favoriteLabel = favorite\n ? labels.removeFavorite(item.label)\n : labels.addFavorite(item.label);\n\n return (\n <li\n data-slot='floating-sidebar-item-row'\n className={cn(\n 'group/row relative flex shrink-0 items-start rounded-[10px]',\n active ? 'bg-accent/70' : 'hover:bg-floating-sidebar-hover',\n )}\n style={rowStyle}>\n <span\n aria-hidden='true'\n data-slot='floating-sidebar-item-indicator'\n className='bg-floating-sidebar-indicator absolute top-3.5 bottom-3.5 left-0 w-[3px] rounded-r-[3px]'\n style={{ opacity: active ? 1 : 0, transition: 'opacity 160ms ease-out' }}\n />\n {control}\n {favoriteIds && item.favoritable !== false && (\n <button\n type='button'\n data-slot='floating-sidebar-favorite'\n data-favorite={favorite ? 'true' : undefined}\n aria-pressed={favorite}\n aria-label={favoriteLabel}\n title={favoriteLabel}\n tabIndex={tabIndex}\n onClick={(event) => {\n event.stopPropagation();\n if (!reduced) {\n // Small \"pop\" feedback, as in the design.\n event.currentTarget.animate?.(\n [\n { transform: 'scale(1)' },\n { transform: 'scale(1.3)' },\n { transform: 'scale(1)' },\n ],\n { duration: 220, easing: 'ease-out' },\n );\n }\n list.onToggleFavorite(item.id);\n }}\n className={cn(\n 'focus-visible:ring-primary hover:bg-primary/6 mt-[9px] mr-1.5 flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-lg border-0 bg-transparent outline-none focus-visible:ring-2',\n 'hover:text-secondary',\n // Stars stay hidden until their row is hovered or focused, unless favorited.\n favorite\n ? 'text-secondary opacity-100'\n : // Revealed on row hover or focus; always shown on touch, where there is no hover.\n 'text-muted-foreground opacity-0 group-focus-within/row:opacity-100 group-hover/row:opacity-100 [@media(hover:none)]:opacity-100',\n )}\n style={{\n transition:\n 'color 120ms ease-out, background 120ms ease-out, opacity 120ms ease-out',\n }}>\n <Star\n aria-hidden='true'\n className={cn('size-3.5', favorite && 'fill-secondary/10')}\n strokeWidth={1.5}\n />\n </button>\n )}\n </li>\n );\n}\n","import { createContext, use, type MouseEvent, type ReactNode } from 'react';\n\nimport type { AppHubApp, AppHubLabels, AppHubLinkProps } from './app-hub.types';\n\nexport interface AppHubContextValue {\n labels: AppHubLabels;\n appName: string;\n renderLink?: (props: AppHubLinkProps, app?: AppHubApp) => ReactNode;\n onNavigate?: (app: AppHubApp, event: MouseEvent<HTMLAnchorElement>) => void;\n}\n\nexport const AppHubContext = createContext<AppHubContextValue | null>(null);\n\nexport function useAppHubContext(): AppHubContextValue {\n const context = use(AppHubContext);\n if (!context) throw new Error('AppHub parts must be rendered inside <AppHub>.');\n return context;\n}\n","import type { AppHubLabels } from './app-hub.types';\n\nexport const DEFAULT_APP_HUB_ID = 'app-hub';\nexport const DEFAULT_STORAGE_KEY = 'tcce-app-hub:open';\n/** Same-tab notification dispatched on `window` after a persisted write. */\nexport const OPEN_CHANGE_EVENT = 'tcce-app-hub:open-change';\n/** Members of an arrow-navigation container (also native Tab stops). */\nexport const ITEM_SELECTOR = '[data-app-hub-item]';\n/** Element that receives focus when the dock is shown. */\nexport const ENTRY_SELECTOR = '[data-app-hub-entry]';\n\n/** Keyboard focus ring shared by every AppHub control. */\nexport const FOCUS_RING =\n 'outline-hidden focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-3 focus-visible:outline-main-blue-primary';\n/** Tooltip label per the design: 11 px / 600, 7/11 padding, 8 px radius, button-level shadow. */\nexport const TOOLTIP_CLASS =\n 'rounded-lg px-2.75 py-1.75 text-[11px] leading-none font-semibold shadow-black-button motion-reduce:animate-none';\n\nexport const DEFAULT_APP_HUB_LABELS: AppHubLabels = {\n navigation: 'Applications',\n allApps: 'All applications',\n sheetTitle: 'Applications',\n hideDock: 'Hide dock',\n showDock: 'show applications dock',\n tab: 'Apps',\n fab: 'Apps',\n pending: (count) => `${count} pending`,\n leaves: (appName) => `leaves ${appName}`,\n current: 'Current',\n noAccess: 'No access · ask your manager',\n searchLabel: 'Search applications',\n searchPlaceholder: 'Search apps',\n clearSearch: 'Clear search',\n resultCount: (count) => (count === 1 ? '1 application found' : `${count} applications found`),\n loading: 'Loading applications',\n empty: 'No applications found',\n noMatch: (query) => `No apps match “${query}”`,\n noMatchDescription: 'Check the spelling or clear the search.',\n error: 'Couldn’t load applications',\n errorDescription: 'The apps in the dock still work.',\n retry: 'Try again',\n directory: 'View all applications',\n close: 'Close',\n dockHidden: 'Applications dock hidden. Use the Apps tab on the right edge to show it again.',\n dockShown: 'Applications dock shown',\n};\n","import { ENTRY_SELECTOR, ITEM_SELECTOR } from './app-hub.constants';\nimport type { AppHubApp, AppHubLabels } from './app-hub.types';\n\n/** Overrides win except for `undefined` values, which keep the default. */\nexport function mergeLabels(\n defaults: AppHubLabels,\n overrides: Partial<AppHubLabels> = {},\n): AppHubLabels {\n const defined = Object.entries(overrides).filter(([, value]) => value !== undefined);\n return { ...defaults, ...Object.fromEntries(defined) };\n}\n\n/** True when both labels objects hold the same values (strings by value, functions by identity). */\nexport function areLabelsEqual(a: AppHubLabels, b: AppHubLabels): boolean {\n const keys = Object.keys(a) as (keyof AppHubLabels)[];\n return keys.every((key) => Object.is(a[key], b[key]));\n}\n\n/** Returns the floored pending count, or 0 when it is not a positive finite number. */\nexport function normalizePending(pending?: number): number {\n return typeof pending === 'number' && Number.isFinite(pending) && pending >= 1\n ? Math.floor(pending)\n : 0;\n}\n\n/** Caps the visual counter at `9+`. */\nexport function formatPendingCount(count: number): string {\n return count > 9 ? '9+' : String(count);\n}\n\n/** Pending total shown on the tab and the FAB; locked apps show no counter anywhere, so they add nothing. */\nexport function sumPending(apps: AppHubApp[]): number {\n return apps.reduce((total, app) => total + (app.locked ? 0 : normalizePending(app.pending)), 0);\n}\n\n/** Label, then the real pending figure, then the external-leave wording. */\nexport function getAppAccessibleName(\n app: AppHubApp,\n labels: Pick<AppHubLabels, 'pending' | 'leaves'>,\n appName: string,\n): string {\n const pending = normalizePending(app.pending);\n return [\n app.label,\n pending > 0 && labels.pending(pending),\n app.external && labels.leaves(appName),\n ]\n .filter(Boolean)\n .join(', ');\n}\n\n/** Element that receives focus when the dock is shown: the current entry, else the first item. */\nexport function getEntryElement(container: HTMLElement | null): HTMLElement | null {\n return (\n container?.querySelector<HTMLElement>(ENTRY_SELECTOR) ??\n container?.querySelector<HTMLElement>(ITEM_SELECTOR) ??\n null\n );\n}\n\n/** Splits apps into sections in first-appearance order; the ungrouped section is first and has no heading. */\nexport function groupApps(apps: AppHubApp[]): { heading?: string; apps: AppHubApp[] }[] {\n const sections = new Map<string | undefined, AppHubApp[]>([[undefined, []]]);\n for (const app of apps) {\n const key = app.group || undefined;\n sections.set(key, [...(sections.get(key) ?? []), app]);\n }\n return [...sections]\n .filter(([, items]) => items.length > 0)\n .map(([heading, items]) => ({ heading, apps: items }));\n}\n\n/** Case-insensitive match on label and description. */\nexport function filterApps(apps: AppHubApp[], query: string): AppHubApp[] {\n const needle = query.trim().toLowerCase();\n if (!needle) return apps;\n return apps.filter((app) =>\n `${app.label} ${app.description ?? ''}`.toLowerCase().includes(needle),\n );\n}\n","import { cva } from 'class-variance-authority';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/Tooltip/tooltip';\nimport { cn } from '@/lib/utils';\n\nimport { useAppHubContext } from './app-hub-context';\nimport { FOCUS_RING, TOOLTIP_CLASS } from './app-hub.constants';\nimport type { AppHubApp, AppHubLinkProps } from './app-hub.types';\nimport { formatPendingCount, getAppAccessibleName, normalizePending } from './app-hub.utils';\n\nconst appHubIconVariants = cva('relative flex shrink-0 items-center justify-center', {\n variants: {\n tone: {\n green: 'bg-green-100 text-green-800',\n yellow: 'bg-yellow-200 text-yellow-800',\n navy: 'bg-main-blue-primary/10 text-main-blue-primary',\n orange: 'bg-orange-100 text-orange-800',\n purple: 'bg-purple-100 text-purple-600',\n grey: 'bg-light-200 text-main-grey',\n },\n size: {\n tile: 'size-12 rounded-2xl [&_svg]:size-5',\n row: 'size-9 rounded-xl [&_svg]:size-4.5',\n sheet: 'size-10 rounded-xl [&_svg]:size-5',\n },\n // Declared last so `cn()` keeps the current fill over the tone.\n current: { true: 'bg-main-blue-primary text-main-white', false: '' },\n },\n defaultVariants: { tone: 'grey', size: 'tile', current: false },\n});\n\ninterface AppHubLinkOwnProps {\n app: AppHubApp;\n /** Runs after `onNavigate`; used by surfaces that close on activation. */\n afterNavigate?: () => void;\n}\n\n/** Renders the consumer's `renderLink` result (or `<a>`) and reports navigation. */\nexport function AppHubLink({\n app,\n afterNavigate,\n onClick,\n ...props\n}: AppHubLinkOwnProps &\n Omit<AppHubLinkProps, 'href' | 'onClick'> &\n Pick<Partial<AppHubLinkProps>, 'onClick'>) {\n const { renderLink, onNavigate } = useAppHubContext();\n const linkProps: AppHubLinkProps = {\n ...props,\n href: app.href,\n onClick: (event) => {\n onClick?.(event);\n // Open-in-new-tab and other modified clicks leave the page where it is.\n const modified =\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey;\n if (modified) return;\n onNavigate?.(app, event);\n afterNavigate?.();\n },\n };\n return renderLink ? renderLink(linkProps, app) : <a {...linkProps} />;\n}\n\n/**\n * White counter on orange, matching the notification badge of the TCCE app navbars; the real\n * figure lives in the link's accessible name.\n */\nexport function AppHubCounter({ count, className }: { count: number; className?: string }) {\n if (count <= 0) return null;\n return (\n <span\n aria-hidden='true'\n data-slot='app-hub-counter'\n className={cn(\n 'bg-main-orange-primary text-background ring-background absolute -top-1 -right-1 flex h-4.5 min-w-4.5 items-center justify-center rounded-full px-1 text-[11px] font-bold ring-2',\n className,\n )}>\n {formatPendingCount(count)}\n </span>\n );\n}\n\nexport function AppHubTile({ app, current = false }: { app: AppHubApp; current?: boolean }) {\n const { labels, appName } = useAppHubContext();\n const name = getAppAccessibleName(app, labels, appName);\n const tone = app.tone ?? 'grey';\n\n return (\n <Tooltip>\n <TooltipTrigger asChild aria-describedby={undefined}>\n <AppHubLink\n app={app}\n aria-label={name}\n aria-current={current ? 'page' : undefined}\n data-slot='app-hub-tile'\n data-variant={tone}\n data-current={current ? '' : undefined}\n data-app-hub-item=''\n data-app-hub-entry={current ? '' : undefined}\n className={cn(\n appHubIconVariants({ tone, size: 'tile', current }),\n 'hover:shadow-black-button transition-[translate,box-shadow] hover:-translate-y-0.5 active:translate-y-px active:shadow-none motion-reduce:transition-none',\n 'data-current:before:bg-main-orange-primary data-current:before:absolute data-current:before:-left-2.5 data-current:before:h-5 data-current:before:w-0.75 data-current:before:rounded-full',\n FOCUS_RING,\n )}>\n <span aria-hidden='true' className='contents'>\n {app.icon}\n </span>\n <AppHubCounter count={normalizePending(app.pending)} />\n </AppHubLink>\n </TooltipTrigger>\n <TooltipContent\n aria-hidden='true'\n side='left'\n variant='primary'\n size='sm'\n className={TOOLTIP_CLASS}>\n {app.label}\n </TooltipContent>\n </Tooltip>\n );\n}\n\nexport { appHubIconVariants };\n","import { useCallback, type KeyboardEvent, type RefObject } from 'react';\n\nimport { ITEM_SELECTOR } from '../app-hub.constants';\n\nconst NAV_KEYS = new Set(['ArrowDown', 'ArrowUp', 'Home', 'End']);\n\n/**\n * Returns a keydown handler that moves focus across the `data-app-hub-item`\n * members of a container with ArrowUp/ArrowDown (wrapping), Home and End.\n * Every member stays a native Tab stop; the keys are shortcuts only.\n */\nexport function useArrowNavigation(containerRef: RefObject<HTMLElement | null>) {\n return useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n const container = containerRef.current;\n const target = event.target;\n if (event.defaultPrevented || !container || !NAV_KEYS.has(event.key)) return;\n // React bubbles events from portaled children; ignore anything outside the DOM subtree.\n if (!(target instanceof Element) || !container.contains(target)) return;\n const current = target.closest<HTMLElement>(ITEM_SELECTOR);\n if (!current) return;\n\n const items = Array.from(container.querySelectorAll<HTMLElement>(ITEM_SELECTOR)).filter(\n (item) => !item.closest('[inert]'),\n );\n const index = items.indexOf(current);\n if (index === -1) return;\n\n event.preventDefault();\n const last = items.length - 1;\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? last\n : event.key === 'ArrowDown'\n ? (index + 1) % items.length\n : (index - 1 + items.length) % items.length;\n items[next]?.focus();\n },\n [containerRef],\n );\n}\n","import { useEffect, useId, useRef, useState } from 'react';\nimport { ArrowRight, ArrowUpRight, CircleAlert, Lock, Search, X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/Button/button';\nimport { Input } from '@/components/ui/Input/input';\nimport { cn } from '@/lib/utils';\n\nimport { useAppHubContext } from './app-hub-context';\nimport { AppHubLink, appHubIconVariants } from './app-hub-tile';\nimport { FOCUS_RING } from './app-hub.constants';\nimport type { AppHubApp, AppHubLinkProps, AppHubProps } from './app-hub.types';\nimport {\n filterApps,\n formatPendingCount,\n getAppAccessibleName,\n groupApps,\n normalizePending,\n} from './app-hub.utils';\nimport { useArrowNavigation } from './hooks/use-arrow-navigation';\n\n/** Static row-shaped placeholder bars: [title width, subtitle width]. */\nconst SKELETON_ROWS = [\n ['w-[58%]', 'w-[82%]'],\n ['w-[44%]', 'w-[70%]'],\n ['w-[64%]', 'w-[76%]'],\n];\n\nexport interface AppHubCatalogProps extends Pick<\n AppHubProps,\n 'currentAppId' | 'onRetry' | 'directoryHref'\n> {\n variant: 'panel' | 'sheet';\n apps: AppHubApp[];\n status: NonNullable<AppHubProps['catalogStatus']>;\n searchThreshold: number;\n /** Runs after a row or the directory link is activated; surfaces use it to close. */\n onActivate?: () => void;\n}\n\nfunction AppHubRow({\n app,\n current,\n variant,\n onActivate,\n}: Pick<AppHubCatalogProps, 'variant' | 'onActivate'> & { app: AppHubApp; current: boolean }) {\n const { labels, appName } = useAppHubContext();\n const descId = useId();\n const locked = app.locked === true;\n const pending = normalizePending(app.pending);\n const className = cn(\n 'hover:bg-light-200 flex w-full items-center gap-3 rounded-xl p-2 text-left',\n variant === 'panel' ? 'min-h-13' : 'min-h-14',\n current && 'bg-light-200',\n FOCUS_RING,\n );\n const body = (\n <>\n <span\n aria-hidden='true'\n className={appHubIconVariants({\n tone: locked ? 'grey' : (app.tone ?? 'grey'),\n size: variant === 'panel' ? 'row' : 'sheet',\n })}>\n {app.icon}\n </span>\n <span className='flex min-w-0 flex-1 flex-col'>\n <span\n className={cn(\n 'text-light-1000 flex items-center gap-1.5 font-medium',\n variant === 'panel' ? 'text-sm' : 'text-[15px]',\n )}>\n <span className='truncate'>{app.label}</span>\n {app.external && (\n <ArrowUpRight\n aria-hidden='true'\n className='text-main-grey size-3.25 shrink-0'\n />\n )}\n </span>\n {locked ? (\n <span className='text-main-grey flex items-center gap-1 text-xs'>\n <Lock aria-hidden='true' className='size-3' />\n {labels.noAccess}\n </span>\n ) : (\n app.description && (\n <span\n id={descId}\n className={cn(\n 'text-main-grey truncate',\n variant === 'panel' ? 'text-xs' : 'text-[13px]',\n )}>\n {app.description}\n </span>\n )\n )}\n </span>\n {current && (\n <span\n aria-hidden='true'\n className='bg-main-blue-primary text-main-white shrink-0 rounded-full px-2 py-0.5 text-[11px] leading-tight font-semibold'>\n {labels.current}\n </span>\n )}\n {pending > 0 && !locked && (\n <span\n aria-hidden='true'\n data-slot='app-hub-row-counter'\n className={cn(\n 'bg-main-orange-primary text-background flex shrink-0 items-center justify-center rounded-full font-bold',\n variant === 'panel'\n ? 'h-5 min-w-5 px-1.5 text-[11px]'\n : 'h-5.5 min-w-5.5 px-1.75 text-xs',\n )}>\n {formatPendingCount(pending)}\n </span>\n )}\n </>\n );\n\n // A locked row keeps its Tab stop (aria-disabled, not disabled) and ignores clicks.\n if (locked) {\n return (\n <button\n type='button'\n aria-disabled='true'\n data-slot='app-hub-row'\n data-app-hub-item=''\n className={cn(className, 'text-main-grey cursor-not-allowed')}>\n {body}\n </button>\n );\n }\n return (\n <AppHubLink\n app={app}\n afterNavigate={onActivate}\n aria-label={getAppAccessibleName(app, labels, appName)}\n aria-current={current ? 'page' : undefined}\n aria-describedby={app.description ? descId : undefined}\n data-slot='app-hub-row'\n data-app-hub-item=''\n className={className}>\n {body}\n </AppHubLink>\n );\n}\n\n/** Search, grouped rows and the loading, error and empty states shared by the panel and the sheet. */\nexport function AppHubCatalog({\n variant,\n apps,\n currentAppId,\n status,\n onRetry,\n directoryHref,\n searchThreshold,\n onActivate,\n}: AppHubCatalogProps) {\n const { labels, renderLink } = useAppHubContext();\n const rootRef = useRef<HTMLDivElement>(null);\n const onKeyDown = useArrowNavigation(rootRef);\n const searchId = useId();\n const searchRef = useRef<HTMLInputElement>(null);\n const [query, setQuery] = useState('');\n const directoryProps: AppHubLinkProps = {\n href: directoryHref ?? '',\n 'data-slot': 'app-hub-directory',\n 'data-app-hub-item': '',\n onClick: () => onActivate?.(),\n className: cn(\n 'text-main-blue-primary flex items-center gap-2 font-semibold',\n variant === 'panel'\n ? 'border-light-200 hover:bg-light-200 justify-between border-t px-4 py-3 text-[13px]'\n : 'border-light-300 mx-4 mb-4 min-h-13 justify-center rounded-full border text-sm',\n FOCUS_RING,\n ),\n children: (\n <>\n {labels.directory}\n <ArrowRight aria-hidden='true' className='size-4 shrink-0' />\n </>\n ),\n };\n const ready = status === 'ready';\n const searchVisible = variant === 'panel' && ready && apps.length >= searchThreshold;\n // A search that is not rendered must not keep filtering or announcing.\n if (!searchVisible && query) setQuery('');\n const activeQuery = searchVisible ? query : '';\n const filtered = filterApps(apps, activeQuery);\n const message =\n status === 'loading' ? labels.loading : activeQuery && labels.resultCount(filtered.length);\n // The region mounts empty and receives its text afterwards: assistive tech announces\n // changes to a live region, not content that was already there when it appeared.\n const [live, setLive] = useState('');\n useEffect(() => setLive(message), [message]);\n\n return (\n <div\n ref={rootRef}\n data-slot='app-hub-catalog'\n data-variant={variant}\n // Focus fallback for controls that unmount on activation (Try again).\n tabIndex={-1}\n onKeyDown={onKeyDown}\n className='flex min-h-0 flex-1 flex-col outline-none'>\n {/* Search stays above the scroller, so it is reachable however long the list is. */}\n {searchVisible && (\n <div data-slot='app-hub-search' className='relative shrink-0 px-3 pt-3'>\n <label htmlFor={searchId} className='sr-only'>\n {labels.searchLabel}\n </label>\n <Search\n aria-hidden='true'\n className='text-main-grey pointer-events-none absolute top-[calc(50%+6px)] left-6 size-4 -translate-y-1/2'\n />\n <Input\n ref={searchRef}\n id={searchId}\n type='search'\n value={query}\n placeholder={labels.searchPlaceholder}\n onChange={(event) => setQuery(event.target.value)}\n className='border-main-grey/70 bg-background h-10 rounded-lg px-9 text-sm [&::-webkit-search-cancel-button]:appearance-none'\n />\n {query && (\n <button\n type='button'\n aria-label={labels.clearSearch}\n onClick={() => {\n setQuery('');\n searchRef.current?.focus();\n }}\n className={cn(\n 'text-main-grey hover:bg-light-200 absolute top-[calc(50%+6px)] right-4 flex size-8 -translate-y-1/2 items-center justify-center rounded-lg [&_svg]:size-3.5',\n FOCUS_RING,\n )}>\n <X aria-hidden='true' />\n </button>\n )}\n </div>\n )}\n <div\n data-slot='app-hub-catalog-scroll'\n className={cn(\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto p-2',\n variant === 'panel' && 'max-h-74',\n )}>\n <div role='status' className='sr-only'>\n {live}\n </div>\n {status === 'loading' && (\n <div\n data-slot='app-hub-loading'\n aria-hidden='true'\n className='flex flex-col gap-1'>\n {SKELETON_ROWS.map(([first, second]) => (\n <div key={first} className='flex items-center gap-3 p-2'>\n <span className='bg-light-200 size-9 shrink-0 rounded-xl' />\n <span className='flex flex-1 flex-col gap-1.5'>\n <span\n className={cn('bg-light-200 h-2.5 rounded-[5px]', first)}\n />\n <span className={cn('bg-light-200 h-2 rounded-sm', second)} />\n </span>\n </div>\n ))}\n </div>\n )}\n {status === 'error' && (\n <div\n role='alert'\n data-slot='app-hub-error'\n className='flex flex-col items-start gap-2.5 px-2 pt-3 pb-2'>\n <span\n aria-hidden='true'\n className='flex size-9 items-center justify-center rounded-xl bg-red-100 text-red-800'>\n <CircleAlert className='size-4.5' />\n </span>\n <span className='flex flex-col gap-1'>\n <span className='text-light-1000 text-sm font-semibold'>\n {labels.error}\n </span>\n <span className='text-main-grey text-[13px] leading-snug'>\n {labels.errorDescription}\n </span>\n </span>\n {onRetry && (\n <Button\n size='sm'\n variant='outline'\n data-app-hub-item=''\n onClick={() => {\n // The error block unmounts once the status changes; keep focus in the catalog.\n rootRef.current?.focus();\n onRetry();\n }}>\n {labels.retry}\n </Button>\n )}\n </div>\n )}\n {ready && filtered.length === 0 && (\n <div\n data-slot='app-hub-empty'\n className='flex flex-col items-start gap-1.5 px-2 pt-4 pb-2'>\n <span className='text-light-1000 text-sm font-semibold'>\n {activeQuery ? labels.noMatch(activeQuery) : labels.empty}\n </span>\n {activeQuery && (\n <>\n <span className='text-main-grey text-[13px] leading-snug'>\n {labels.noMatchDescription}\n </span>\n <button\n type='button'\n data-app-hub-item=''\n onClick={() => {\n setQuery('');\n searchRef.current?.focus();\n }}\n className={cn(\n 'text-main-blue-primary mt-1 rounded-sm py-1.5 text-[13px] font-semibold underline underline-offset-3',\n FOCUS_RING,\n )}>\n {labels.clearSearch}\n </button>\n </>\n )}\n </div>\n )}\n {ready &&\n groupApps(filtered).map((section) => (\n <section key={section.heading ?? ''} className='flex flex-col gap-1'>\n {section.heading && (\n <h3 className='text-main-grey px-2 text-[11px] font-semibold uppercase'>\n {section.heading}\n </h3>\n )}\n <ul role='list' className='flex flex-col gap-1'>\n {section.apps.map((app) => (\n <li key={app.id}>\n <AppHubRow\n app={app}\n current={app.id === currentAppId}\n variant={variant}\n onActivate={onActivate}\n />\n </li>\n ))}\n </ul>\n </section>\n ))}\n </div>\n {directoryHref && (\n <>\n {renderLink ? renderLink(directoryProps, undefined) : <a {...directoryProps} />}\n </>\n )}\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState } from 'react';\nimport { LayoutGrid, X } from 'lucide-react';\n\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/Tooltip/tooltip';\nimport { cn } from '@/lib/utils';\n\nimport { AppHubCatalog, type AppHubCatalogProps } from './app-hub-catalog';\nimport { useAppHubContext } from './app-hub-context';\nimport { appHubIconVariants } from './app-hub-tile';\nimport { FOCUS_RING, ITEM_SELECTOR, TOOLTIP_CLASS } from './app-hub.constants';\n\ninterface AppHubPanelProps extends Omit<AppHubCatalogProps, 'variant' | 'onActivate'> {\n id: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Runs when the popover closes and returns focus; call `preventDefault` to take over. */\n onCloseAutoFocus?: (event: Event) => void;\n}\n\n/** \"All applications\" trigger and its non-modal popover (form A catalog). */\nexport function AppHubPanel({\n id,\n open,\n onOpenChange,\n onCloseAutoFocus,\n ...catalog\n}: AppHubPanelProps) {\n const { labels } = useAppHubContext();\n const titleId = useId();\n const contentRef = useRef<HTMLDivElement>(null);\n const [tooltipOpen, setTooltipOpen] = useState(false);\n // The label is redundant next to its own open panel; reset so it cannot reappear on close.\n if (open && tooltipOpen) setTooltipOpen(false);\n // Closing returns focus to the trigger, which would reopen its tooltip on its own:\n // stay quiet until the pointer comes back or focus leaves.\n const quietRef = useRef(false);\n useEffect(() => {\n if (open) return () => void (quietRef.current = true);\n }, [open]);\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <Tooltip\n open={tooltipOpen}\n onOpenChange={(next) => setTooltipOpen(next && !open && !quietRef.current)}>\n <TooltipTrigger asChild aria-describedby={undefined}>\n <PopoverTrigger\n aria-label={labels.allApps}\n aria-controls={id}\n data-slot='app-hub-panel-trigger'\n onPointerEnter={() => void (quietRef.current = false)}\n onBlur={() => void (quietRef.current = false)}\n data-app-hub-item=''\n className={cn(\n appHubIconVariants({ tone: 'grey', size: 'tile' }),\n // Both triggers write `data-state` through `asChild` and the tooltip's value\n // wins, so the open tint keys off `aria-expanded` instead.\n 'aria-expanded:bg-main-blue-primary/10 aria-expanded:text-main-blue-primary',\n FOCUS_RING,\n )}>\n <LayoutGrid aria-hidden='true' />\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent\n aria-hidden='true'\n side='left'\n variant='primary'\n size='sm'\n className={TOOLTIP_CLASS}>\n {labels.allApps}\n </TooltipContent>\n </Tooltip>\n <PopoverContent\n ref={contentRef}\n id={id}\n side='left'\n align='center'\n // 12 px from the rail edge: the trigger sits 10 px inside the rail padding.\n sideOffset={22}\n collisionPadding={8}\n aria-labelledby={titleId}\n data-slot='app-hub-panel'\n onCloseAutoFocus={onCloseAutoFocus}\n onOpenAutoFocus={(event) => {\n // Search first (not an arrow member), then the first row, retry or directory link.\n event.preventDefault();\n const content = contentRef.current;\n (\n content?.querySelector<HTMLElement>('input[type=\"search\"]') ??\n content?.querySelector<HTMLElement>(ITEM_SELECTOR) ??\n content\n )?.focus();\n }}\n className='border-light-300 shadow-black-card max-h-(--radix-popover-content-available-height) w-75 gap-0 rounded-2xl border p-0 motion-reduce:data-[state=closed]:animate-none motion-reduce:data-[state=open]:animate-none'>\n <div className='flex items-center justify-between px-4 pt-3 pb-1'>\n <h2\n id={titleId}\n className='font-heading text-main-blue-primary text-base leading-tight font-bold'>\n {labels.allApps}\n </h2>\n <button\n type='button'\n aria-label={labels.close}\n onClick={() => onOpenChange(false)}\n className={cn(\n 'text-main-grey hover:bg-light-200 flex size-8 items-center justify-center rounded-xl [&_svg]:size-4',\n FOCUS_RING,\n )}>\n <X aria-hidden='true' />\n </button>\n </div>\n <AppHubCatalog\n variant='panel'\n onActivate={() => onOpenChange(false)}\n {...catalog}\n />\n </PopoverContent>\n </Popover>\n );\n}\n","import type { ReactNode, RefObject } from 'react';\nimport { LayoutGrid, PanelRightClose } from 'lucide-react';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/Tooltip/tooltip';\nimport { cn } from '@/lib/utils';\n\nimport { useAppHubContext } from './app-hub-context';\nimport { AppHubTile } from './app-hub-tile';\nimport { FOCUS_RING, TOOLTIP_CLASS } from './app-hub.constants';\nimport { formatPendingCount } from './app-hub.utils';\nimport type { AppHubApp } from './app-hub.types';\nimport { useArrowNavigation } from './hooks/use-arrow-navigation';\n\ninterface AppHubRailProps {\n id: string;\n /** Rail apps only (`inRail && !locked`). */\n apps: AppHubApp[];\n currentAppId?: string;\n open: boolean;\n onHide: () => void;\n railRef: RefObject<HTMLDivElement | null>;\n /** The \"All applications\" panel, rendered before the divider. */\n panel: ReactNode;\n}\n\nexport function AppHubRail({\n id,\n apps,\n currentAppId,\n open,\n onHide,\n railRef,\n panel,\n}: AppHubRailProps) {\n const { labels } = useAppHubContext();\n const onKeyDown = useArrowNavigation(railRef);\n\n return (\n <div\n ref={railRef}\n id={id}\n data-slot='app-hub-rail'\n data-state={open ? 'open' : 'closed'}\n inert={!open}\n onKeyDown={onKeyDown}\n className={cn(\n 'pointer-events-auto flex flex-col items-center gap-2 px-2.5 py-3',\n 'border-light-200 bg-background/95 shadow-black-card rounded-l-4xl border border-r-0',\n 'transition-transform duration-300 data-[state=closed]:translate-x-[150%] motion-reduce:transition-none',\n )}>\n <ul role='list' className='flex flex-col items-center gap-2'>\n {apps.map((app) => (\n <li key={app.id}>\n <AppHubTile app={app} current={app.id === currentAppId} />\n </li>\n ))}\n </ul>\n <div aria-hidden='true' className='bg-light-300 my-0.5 h-px w-6.5' />\n {panel}\n <div aria-hidden='true' className='bg-light-300 my-0.5 h-px w-6.5' />\n <Tooltip>\n <TooltipTrigger asChild aria-describedby={undefined}>\n <button\n type='button'\n aria-label={labels.hideDock}\n aria-expanded='true'\n aria-controls={id}\n data-slot='app-hub-hide'\n data-app-hub-item=''\n onClick={onHide}\n className={cn(\n 'text-main-grey hover:bg-light-200 hover:text-main-blue-primary flex size-8 items-center justify-center rounded-xl [&_svg]:size-4',\n FOCUS_RING,\n )}>\n <PanelRightClose aria-hidden='true' />\n </button>\n </TooltipTrigger>\n <TooltipContent\n aria-hidden='true'\n side='left'\n variant='primary'\n size='sm'\n className={TOOLTIP_CLASS}>\n {labels.hideDock}\n </TooltipContent>\n </Tooltip>\n </div>\n );\n}\n\ninterface AppHubTabProps {\n railId: string;\n open: boolean;\n pending: number;\n onShow: () => void;\n tabRef: RefObject<HTMLButtonElement | null>;\n}\n\n/** Form B: the collapsed 40 px tab. Its name starts with the visible \"Apps\" text. */\nexport function AppHubTab({ railId, open, pending, onShow, tabRef }: AppHubTabProps) {\n const { labels } = useAppHubContext();\n const name = [`${labels.tab}, ${labels.showDock}`, pending > 0 && labels.pending(pending)]\n .filter(Boolean)\n .join(', ');\n\n return (\n <div\n data-slot='app-hub-tab-wrapper'\n data-state={open ? 'open' : 'closed'}\n inert={open}\n className='pointer-events-auto transition-transform duration-300 data-[state=open]:translate-x-[150%] motion-reduce:transition-none'>\n <button\n ref={tabRef}\n type='button'\n aria-label={name}\n aria-expanded='false'\n aria-controls={railId}\n data-slot='app-hub-tab'\n data-app-hub-entry=''\n onClick={onShow}\n className={cn(\n 'border-light-300 bg-background/95 text-main-blue-primary flex w-10 flex-col items-center gap-2 rounded-l-2xl border border-r-0 py-3.5',\n FOCUS_RING,\n )}>\n <LayoutGrid aria-hidden='true' className='size-4.5' />\n <span\n aria-hidden='true'\n className='text-main-grey text-[11px] leading-none font-semibold tracking-[0.12em] uppercase [writing-mode:vertical-rl]'>\n {labels.tab}\n </span>\n {pending > 0 && (\n <span\n aria-hidden='true'\n data-slot='app-hub-counter'\n className='bg-main-orange-primary text-background flex h-4.5 min-w-4.5 items-center justify-center rounded-full px-1.25 text-[11px] leading-none font-bold'>\n {formatPendingCount(pending)}\n </span>\n )}\n </button>\n </div>\n );\n}\n","import { useState } from 'react';\n\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetTitle,\n SheetTrigger,\n} from '@/components/ui/Sheet/sheet';\nimport { cn } from '@/lib/utils';\nimport { LayoutGrid, X } from 'lucide-react';\n\nimport { AppHubCatalog, type AppHubCatalogProps } from './app-hub-catalog';\nimport { useAppHubContext } from './app-hub-context';\nimport { FOCUS_RING } from './app-hub.constants';\nimport { formatPendingCount } from './app-hub.utils';\n\ntype AppHubSheetProps = Omit<AppHubCatalogProps, 'variant' | 'onActivate'> & { pending: number };\n\n/** Form E: the mobile FAB and its bottom sheet. Its open state is transient and never stored. */\nexport function AppHubSheet({ pending, ...catalog }: AppHubSheetProps) {\n const { labels } = useAppHubContext();\n const [open, setOpen] = useState(false);\n\n return (\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger\n data-slot='app-hub-fab'\n data-app-hub-entry=''\n className={cn(\n // Bottom-right, in the thumb zone and out of the reading area (the rail centers instead).\n 'bg-main-blue-primary text-main-white shadow-black-button pointer-events-auto mr-4 mb-4 flex h-12 items-center gap-2 self-end rounded-full pr-4.5 pl-4 text-sm font-semibold',\n FOCUS_RING,\n )}>\n <LayoutGrid aria-hidden='true' className='size-4.5' />\n {labels.fab}\n {pending > 0 && <span className='sr-only'>, {labels.pending(pending)}</span>}\n {pending > 0 && (\n <span\n aria-hidden='true'\n data-slot='app-hub-counter'\n className='bg-main-orange-primary text-background flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-[11px] leading-none font-bold'>\n {formatPendingCount(pending)}\n </span>\n )}\n </SheetTrigger>\n <SheetContent\n side='bottom'\n aria-modal='true'\n aria-describedby={undefined}\n showCloseButton={false}\n onOpenAutoFocus={(event) => {\n // Focus the close button so the mobile keyboard does not open on the search input.\n event.preventDefault();\n (event.currentTarget as HTMLElement)\n .querySelector<HTMLElement>('[data-slot=\"app-hub-sheet-close\"]')\n ?.focus();\n }}\n className='max-h-[85dvh] rounded-t-3xl motion-reduce:transition-none motion-reduce:data-closed:animate-none motion-reduce:data-open:animate-none'>\n <div\n aria-hidden='true'\n className='bg-light-300 mx-auto mt-2 h-1 w-10 rounded-full'\n />\n <div className='flex items-center justify-between px-4 pt-2'>\n <SheetTitle className='font-heading text-main-blue-primary text-xl leading-tight font-bold'>\n {labels.sheetTitle}\n </SheetTitle>\n <SheetClose\n data-slot='app-hub-sheet-close'\n aria-label={labels.close}\n className={cn(\n 'text-main-grey hover:bg-light-200 flex size-11 items-center justify-center rounded-xl [&_svg]:size-5',\n FOCUS_RING,\n )}>\n <X aria-hidden='true' />\n </SheetClose>\n </div>\n <AppHubCatalog {...catalog} variant='sheet' onActivate={() => setOpen(false)} />\n </SheetContent>\n </Sheet>\n );\n}\n","import { useCallback, useMemo, useState, useSyncExternalStore } from 'react';\n\nimport { OPEN_CHANGE_EVENT } from '../app-hub.constants';\n\ninterface UseAppHubOpenOptions {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** `null` disables persistence (memory only). */\n storageKey: string | null;\n /** Fallback when `defaultOpen` is not set (`false` only for `auto` at tablet widths). */\n layoutDefault: boolean;\n}\n\nconst noopSubscribe = () => () => {};\nconst nullSnapshot = (): boolean | null => null;\n\n/**\n * Open state for the dock. Controlled when `open` is set, memory-only when\n * `storageKey` is `null`, otherwise persisted in `localStorage` and synced\n * across tabs (`storage`) and instances (`OPEN_CHANGE_EVENT`).\n * `onOpenChange` fires from `setOpen` only, which means user actions.\n */\nexport function useAppHubOpen({\n open: controlledOpen,\n defaultOpen,\n onOpenChange,\n storageKey,\n layoutDefault,\n}: UseAppHubOpenOptions): { open: boolean; setOpen: (open: boolean) => void } {\n const controlled = controlledOpen !== undefined;\n const persistedKey = !controlled ? storageKey : null;\n const fallback = defaultOpen ?? layoutDefault;\n\n const [memoryOpen, setMemoryOpen] = useState<boolean | undefined>(undefined);\n const [sessionOverride, setSessionOverride] = useState<boolean | undefined>(undefined);\n\n const store = useMemo(() => {\n if (persistedKey === null) return { subscribe: noopSubscribe, getSnapshot: nullSnapshot };\n\n const subscribe = (notify: () => void) => {\n const onStorage = (event: StorageEvent) => {\n if (event.key === null || event.key === persistedKey) notify();\n };\n const onChange = (event: Event) => {\n if ((event as CustomEvent<{ key: string }>).detail?.key === persistedKey) notify();\n };\n window.addEventListener('storage', onStorage);\n window.addEventListener(OPEN_CHANGE_EVENT, onChange);\n return () => {\n window.removeEventListener('storage', onStorage);\n window.removeEventListener(OPEN_CHANGE_EVENT, onChange);\n };\n };\n\n const getSnapshot = (): boolean | null => {\n try {\n const value = window.localStorage.getItem(persistedKey);\n return value === 'true' ? true : value === 'false' ? false : null;\n } catch {\n return null;\n }\n };\n\n return { subscribe, getSnapshot };\n }, [persistedKey]);\n\n const stored = useSyncExternalStore(store.subscribe, store.getSnapshot, nullSnapshot);\n\n const setOpen = useCallback(\n (next: boolean) => {\n onOpenChange?.(next);\n if (controlled) return;\n if (storageKey === null) {\n setMemoryOpen(next);\n return;\n }\n try {\n window.localStorage.setItem(storageKey, String(next));\n setSessionOverride(undefined);\n } catch {\n setSessionOverride(next);\n }\n window.dispatchEvent(\n new CustomEvent(OPEN_CHANGE_EVENT, { detail: { key: storageKey } }),\n );\n },\n [controlled, onOpenChange, storageKey],\n );\n\n let open: boolean;\n if (controlled) open = controlledOpen;\n else if (storageKey === null) open = memoryOpen ?? fallback;\n else open = sessionOverride ?? stored ?? fallback;\n\n return { open, setOpen };\n}\n","import { useSyncExternalStore } from 'react';\n\nexport type AppHubViewport = 'desktop' | 'tablet' | 'mobile';\n\nconst DESKTOP_QUERY = '(min-width: 1024px)';\nconst TABLET_QUERY = '(min-width: 768px)';\n\nfunction hasMatchMedia() {\n return typeof window !== 'undefined' && typeof window.matchMedia === 'function';\n}\n\nfunction subscribe(notify: () => void) {\n if (!hasMatchMedia()) return () => {};\n const lists = [DESKTOP_QUERY, TABLET_QUERY].map((query) => window.matchMedia(query));\n lists.forEach((list) => list.addEventListener('change', notify));\n return () => lists.forEach((list) => list.removeEventListener('change', notify));\n}\n\nfunction getSnapshot(): AppHubViewport {\n if (!hasMatchMedia()) return 'desktop';\n if (window.matchMedia(DESKTOP_QUERY).matches) return 'desktop';\n return window.matchMedia(TABLET_QUERY).matches ? 'tablet' : 'mobile';\n}\n\nconst getServerSnapshot = (): AppHubViewport => 'desktop';\n\n/** Viewport band for AppHub: desktop >= 1024, tablet >= 768, otherwise mobile. */\nexport function useAppHubViewport(): AppHubViewport {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n","import { useLayoutEffect, useMemo, useReducer, useRef, useState } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport { AppHubContext } from './app-hub-context';\nimport { AppHubPanel } from './app-hub-panel';\nimport { AppHubRail, AppHubTab } from './app-hub-rail';\nimport { AppHubSheet } from './app-hub-sheet';\nimport {\n DEFAULT_APP_HUB_ID,\n DEFAULT_APP_HUB_LABELS,\n DEFAULT_STORAGE_KEY,\n} from './app-hub.constants';\nimport type { AppHubProps } from './app-hub.types';\nimport { areLabelsEqual, getEntryElement, mergeLabels, sumPending } from './app-hub.utils';\nimport { useAppHubOpen } from './hooks/use-app-hub-open';\nimport { useAppHubViewport } from './hooks/use-app-hub-viewport';\n\nexport type {\n AppHubApp,\n AppHubLabels,\n AppHubLinkProps,\n AppHubProps,\n AppHubTone,\n} from './app-hub.types';\n\nexport function AppHub({\n apps,\n appName,\n currentAppId,\n catalogStatus = 'ready',\n onRetry,\n directoryHref,\n layout = 'auto',\n searchThreshold = 7,\n position = 'fixed',\n open: openProp,\n defaultOpen,\n onOpenChange,\n storageKey = DEFAULT_STORAGE_KEY,\n onNavigate,\n renderLink,\n labels: labelOverrides,\n id = DEFAULT_APP_HUB_ID,\n className,\n}: AppHubProps) {\n const merged = mergeLabels(DEFAULT_APP_HUB_LABELS, labelOverrides);\n // Inline `labels` objects change identity on every render: keep the previous one while the values match.\n const [stableLabels, setStableLabels] = useState(merged);\n const labels = areLabelsEqual(stableLabels, merged) ? stableLabels : merged;\n if (labels !== stableLabels) setStableLabels(labels);\n const viewport = useAppHubViewport();\n const family = layout === 'auto' ? (viewport === 'mobile' ? 'sheet' : 'dock') : layout;\n const { open, setOpen } = useAppHubOpen({\n open: openProp,\n defaultOpen,\n onOpenChange,\n storageKey,\n // Tablet starts collapsed only when the layout follows the viewport.\n layoutDefault: !(layout === 'auto' && viewport === 'tablet'),\n });\n const [panelOpen, setPanelOpen] = useState(false);\n if (!open && panelOpen) setPanelOpen(false);\n const [announcement, setAnnouncement] = useState('');\n const [, requestRender] = useReducer((count: number) => count + 1, 0);\n const previousOpenRef = useRef(open);\n const railRef = useRef<HTMLDivElement>(null);\n const tabRef = useRef<HTMLButtonElement>(null);\n const focusIntentRef = useRef<boolean | null>(null);\n const railId = `${id}-rail`;\n\n // Move focus after the commit that swaps `inert`; a stale intent is dropped.\n // Without a matching intent (cross-tab sync, another instance, a controlled\n // parent) focus moves only when it sits inside the subtree that just became inert.\n // No deps on purpose: the intent must be dropped on every commit, including a rejected toggle's.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useLayoutEffect(() => {\n const intent = focusIntentRef.current;\n focusIntentRef.current = null;\n // A rejected toggle commits without a change: it drops its intent and announces nothing.\n if (previousOpenRef.current === open) return;\n previousOpenRef.current = open;\n // External changes blank the region so the same text is announced again next time.\n setAnnouncement(intent === open ? (open ? labels.dockShown : labels.dockHidden) : '');\n const entry = open ? getEntryElement(railRef.current) : tabRef.current;\n if (intent === open) {\n entry?.focus();\n return;\n }\n const active = document.activeElement;\n // The panel is portaled outside the rail, so it counts as part of the closing dock.\n const stranded = open\n ? [tabRef.current]\n : [railRef.current, document.getElementById(`${id}-panel`)];\n if (active && stranded.some((element) => element?.contains(active))) entry?.focus();\n });\n\n function toggle(next: boolean) {\n focusIntentRef.current = next;\n setOpen(next);\n // Guarantees a commit even when a controlled parent ignores the request, so the intent is dropped.\n requestRender();\n }\n\n const context = useMemo(\n () => ({ labels, appName, renderLink, onNavigate }),\n [labels, appName, renderLink, onNavigate],\n );\n\n return (\n <AppHubContext value={context}>\n <nav\n id={id}\n aria-label={labels.navigation}\n data-slot='app-hub'\n data-layout={family}\n data-state={open ? 'open' : 'closed'}\n data-position={position}\n className={cn(\n // `overflow-x-clip` keeps the slid-out form from creating scrollable overflow\n // (a scrollIntoView would otherwise shift the host); `pl-8` leaves room for the shadow.\n 'pointer-events-none inset-y-0 right-0 z-40 grid items-center justify-items-end overflow-x-clip pl-8 *:col-start-1 *:row-start-1',\n position === 'fixed' ? 'fixed' : 'absolute',\n className,\n )}>\n {family === 'sheet' ? (\n <AppHubSheet\n apps={apps}\n currentAppId={currentAppId}\n status={catalogStatus}\n onRetry={onRetry}\n directoryHref={directoryHref}\n searchThreshold={searchThreshold}\n pending={sumPending(apps)}\n />\n ) : (\n <>\n <AppHubRail\n id={railId}\n apps={apps.filter((app) => app.inRail && !app.locked)}\n currentAppId={currentAppId}\n open={open}\n onHide={() => toggle(false)}\n railRef={railRef}\n panel={\n <AppHubPanel\n id={`${id}-panel`}\n open={panelOpen}\n onOpenChange={setPanelOpen}\n onCloseAutoFocus={(event) => {\n // The dock collapsed under the panel: Radix would return focus to the\n // now inert trigger, and the removed content leaves it on the body.\n if (open) return;\n event.preventDefault();\n const active = document.activeElement;\n if (!active || active === document.body)\n tabRef.current?.focus();\n }}\n apps={apps}\n currentAppId={currentAppId}\n status={catalogStatus}\n onRetry={onRetry}\n directoryHref={directoryHref}\n searchThreshold={searchThreshold}\n />\n }\n />\n <AppHubTab\n railId={railId}\n open={open}\n pending={sumPending(apps)}\n onShow={() => toggle(true)}\n tabRef={tabRef}\n />\n </>\n )}\n <div\n role='status'\n aria-live='polite'\n aria-atomic='true'\n data-slot='app-hub-live'\n className='sr-only'>\n {announcement}\n </div>\n </nav>\n </AppHubContext>\n );\n}\n","import type { ComponentPropsWithRef, MouseEvent } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport { DEFAULT_APP_HUB_ID } from './app-hub.constants';\nimport { getEntryElement } from './app-hub.utils';\n\n/** The dock entry that is not inside an inert subtree (rail when open, tab when collapsed, FAB on mobile). */\nfunction getLiveEntry(root: HTMLElement | null) {\n const live = [...(root?.querySelectorAll<HTMLElement>('[data-slot]') ?? [])].find(\n (region) => !region.closest('[inert]') && getEntryElement(region) !== null,\n );\n return getEntryElement(live ?? root);\n}\n\nexport interface AppHubSkipLinkProps extends Omit<ComponentPropsWithRef<'a'>, 'href'> {\n /** Id of the `<AppHub>` landmark. Defaults to `'app-hub'`. */\n targetId?: string;\n}\n\n/** Visible-on-focus link that moves focus to the non-inert dock entry. Place it first in the DOM. */\nexport function AppHubSkipLink({\n targetId = DEFAULT_APP_HUB_ID,\n children = 'Skip to applications',\n className,\n onClick,\n ...props\n}: AppHubSkipLinkProps) {\n function handleClick(event: MouseEvent<HTMLAnchorElement>) {\n onClick?.(event);\n if (event.defaultPrevented) return;\n const entry = getLiveEntry(document.getElementById(targetId));\n if (!entry) return;\n event.preventDefault();\n entry.focus();\n }\n\n return (\n <a\n {...props}\n href={`#${targetId}`}\n data-slot='app-hub-skip-link'\n onClick={handleClick}\n className={cn(\n 'bg-main-blue-primary text-main-white sr-only rounded-md px-4 py-2 text-sm font-semibold',\n 'focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-50',\n 'focus-visible:outline-main-orange-primary outline-hidden focus-visible:outline-2 focus-visible:outline-offset-2',\n className,\n )}>\n {children}\n </a>\n );\n}\n","import { createContext, useContext, useRef, useState, type ComponentProps } from 'react';\nimport { Dialog as DrawerPrimitive } from 'radix-ui';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { XIcon } from 'lucide-react';\nimport { transition, ease, duration } from '@/tokens/animation';\n\n// ─── Context ─────────────────────────────────────────────────────────────────\n\ntype DrawerContextValue = { isOpen: boolean; modal: boolean };\nconst DrawerContext = createContext<DrawerContextValue>({ isOpen: false, modal: true });\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nfunction Drawer({ children, open, onOpenChange, modal = true, ...props }: ComponentProps<typeof DrawerPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = useState(props.defaultOpen ?? false);\n\n const isOpen = open !== undefined ? open : internalOpen;\n\n return (\n <DrawerContext.Provider value={{ isOpen, modal }}>\n <DrawerPrimitive.Root\n data-slot='drawer'\n modal={modal}\n {...props}\n open={isOpen}\n onOpenChange={(v) => {\n setInternalOpen(v);\n onOpenChange?.(v);\n }}>\n {children}\n </DrawerPrimitive.Root>\n </DrawerContext.Provider>\n );\n}\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\nfunction DrawerTrigger({ ...props }: ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot='drawer-trigger' {...props} />;\n}\n\n// ─── Close ───────────────────────────────────────────────────────────────────\n\nfunction DrawerClose({ ...props }: ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot='drawer-close' {...props} />;\n}\n\n// ─── Portal — AnimatePresence lives here ─────────────────────────────────────\n\nfunction DrawerPortal({ children, ...props }: ComponentProps<typeof DrawerPrimitive.Portal>) {\n const { isOpen } = useContext(DrawerContext);\n\n return (\n <DrawerPrimitive.Portal forceMount {...props}>\n <AnimatePresence mode='sync'>{isOpen && children}</AnimatePresence>\n </DrawerPrimitive.Portal>\n );\n}\n\n// ─── Overlay ─────────────────────────────────────────────────────────────────\n\nfunction DrawerOverlay({ className, ...props }: ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay data-slot='drawer-overlay' asChild forceMount {...props}>\n <motion.div\n className={cn(\n 'fixed inset-0 isolate z-50 bg-black/30 supports-backdrop-filter:backdrop-blur-sm',\n className,\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: duration.normal, ease: ease.smooth }}\n />\n </DrawerPrimitive.Overlay>\n );\n}\n\n// ─── Size map ────────────────────────────────────────────────────────────────\n\nconst sizeClasses = {\n sm: 'w-64',\n md: 'w-80',\n lg: 'w-96',\n xl: 'w-[30rem]',\n full: 'w-screen',\n} as const;\n\ntype DrawerSide = 'left' | 'right' | 'top' | 'bottom';\ntype DrawerSize = keyof typeof sizeClasses;\n\n// ─── Content ─────────────────────────────────────────────────────────────────\n\nfunction DrawerContent({\n className,\n children,\n side = 'right',\n size = 'md',\n showCloseButton = true,\n resizable = false,\n ...props\n}: ComponentProps<typeof DrawerPrimitive.Content> & {\n side?: DrawerSide;\n size?: DrawerSize;\n showCloseButton?: boolean;\n resizable?: boolean;\n}) {\n const isHorizontal = side === 'left' || side === 'right';\n\n const xInitial = side === 'right' ? '100%' : side === 'left' ? '-100%' : 0;\n const yInitial = side === 'bottom' ? '100%' : side === 'top' ? '-100%' : 0;\n\n const dragRef = useRef<{\n startPos: number;\n startSize: number;\n content: HTMLElement;\n } | null>(null);\n\n const { modal } = useContext(DrawerContext);\n\n return (\n <DrawerPortal>\n {modal && <DrawerOverlay key='drawer-overlay' />}\n <DrawerPrimitive.Content\n key='drawer-content'\n data-slot='drawer-content'\n data-side={side}\n asChild\n forceMount\n className={cn(\n 'fixed z-50 flex flex-col bg-popover text-popover-foreground shadow-xl outline-none',\n side === 'left' && 'inset-y-0 left-0',\n side === 'right' && 'inset-y-0 right-0',\n side === 'top' && 'inset-x-0 top-0',\n side === 'bottom' && 'inset-x-0 bottom-0',\n isHorizontal && sizeClasses[size],\n !isHorizontal && 'h-auto min-h-40',\n className,\n )}\n {...props}>\n <motion.div\n className={cn('flex flex-col', isHorizontal && 'h-full')}\n initial={{ x: xInitial, y: yInitial, opacity: 0 }}\n animate={{ x: 0, y: 0, opacity: 1, transition: transition.drawer }}\n exit={{ x: xInitial, y: yInitial, opacity: 0, transition: transition.drawerExit }}>\n {children}\n {showCloseButton && (\n <DrawerPrimitive.Close data-slot='drawer-close' asChild>\n <Button\n variant='ghost'\n className='absolute top-4 right-4'\n size='icon-sm'>\n <XIcon />\n <span className='sr-only'>Close</span>\n </Button>\n </DrawerPrimitive.Close>\n )}\n {resizable && (\n <div\n data-slot='drawer-resize-handle'\n className={cn(\n 'absolute opacity-0 transition-opacity hover:opacity-100 hover:bg-border',\n side === 'right' && 'inset-y-0 left-0 w-1 cursor-col-resize',\n side === 'left' && 'inset-y-0 right-0 w-1 cursor-col-resize',\n side === 'top' && 'inset-x-0 bottom-0 h-1 cursor-row-resize',\n side === 'bottom' && 'inset-x-0 top-0 h-1 cursor-row-resize',\n )}\n onPointerDown={(e) => {\n e.preventDefault();\n const content = e.currentTarget.parentElement;\n if (!content) return;\n const startSize = isHorizontal\n ? parseFloat(getComputedStyle(content).width)\n : parseFloat(getComputedStyle(content).height);\n // Suppress CSS transitions during drag; motion/react JS animations are unaffected\n content.style.transition = 'none';\n dragRef.current = {\n startPos: isHorizontal ? e.clientX : e.clientY,\n startSize,\n content,\n };\n e.currentTarget.setPointerCapture(e.pointerId);\n }}\n onPointerMove={(e) => {\n if (!dragRef.current) return;\n const { startPos, startSize, content } = dragRef.current;\n const delta = (isHorizontal ? e.clientX : e.clientY) - startPos;\n let newSize: number;\n if (side === 'right') {\n newSize = Math.max(160, Math.min(window.innerWidth * 0.9, startSize - delta));\n } else if (side === 'left') {\n newSize = Math.max(160, Math.min(window.innerWidth * 0.9, startSize + delta));\n } else if (side === 'bottom') {\n newSize = Math.max(80, Math.min(window.innerHeight * 0.9, startSize - delta));\n } else {\n newSize = Math.max(80, Math.min(window.innerHeight * 0.9, startSize + delta));\n }\n content.style[isHorizontal ? 'width' : 'height'] = `${newSize}px`;\n }}\n onPointerUp={() => {\n if (dragRef.current?.content) {\n dragRef.current.content.style.transition = '';\n }\n dragRef.current = null;\n }}\n onPointerCancel={() => {\n if (dragRef.current?.content) {\n dragRef.current.content.style.transition = '';\n }\n dragRef.current = null;\n }}\n />\n )}\n </motion.div>\n </DrawerPrimitive.Content>\n </DrawerPortal>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nfunction DrawerHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='drawer-header'\n className={cn('flex shrink-0 flex-col gap-1.5 p-6', className)}\n {...props}\n />\n );\n}\n\n// ─── Body ────────────────────────────────────────────────────────────────────\n\nfunction DrawerBody({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='drawer-body'\n className={cn('flex-1 overflow-y-auto px-6 pb-6', className)}\n {...props}\n />\n );\n}\n\n// ─── Footer ──────────────────────────────────────────────────────────────────\n\nfunction DrawerFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='drawer-footer'\n className={cn(\n 'border-border mt-auto flex shrink-0 flex-wrap items-center justify-end gap-2 border-t px-6 py-4',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Title ───────────────────────────────────────────────────────────────────\n\nfunction DrawerTitle({ className, ...props }: ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot='drawer-title'\n className={cn('font-heading text-base leading-none font-semibold', className)}\n {...props}\n />\n );\n}\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nfunction DrawerDescription({\n className,\n ...props\n}: ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot='drawer-description'\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\n// ─── Exports ─────────────────────────────────────────────────────────────────\n\nexport type { DrawerSide, DrawerSize };\n\nexport {\n Drawer,\n DrawerTrigger,\n DrawerClose,\n DrawerPortal,\n DrawerOverlay,\n DrawerContent,\n DrawerHeader,\n DrawerBody,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n","import { useEffect, useImperativeHandle, useRef, useState, type Ref } from 'react';\nimport { BrushCleaning } from 'lucide-react';\nimport SignaturePadLib, { type PointGroup } from 'signature_pad';\n\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\n\nexport interface SignaturePadHandle {\n /** Wipes the drawing and reports `onEmptyChange(true)` if something was drawn. */\n clear: () => void;\n isEmpty: () => boolean;\n /** The drawing as a PNG with a transparent background. Rejects if not mounted or the browser cannot encode it. */\n toBlob: () => Promise<Blob>;\n}\n\nexport interface SignaturePadProps {\n /** Accessible name of the drawing area. */\n 'aria-label': string;\n /** Id of the element holding the instructions. */\n 'aria-describedby'?: string;\n /** Called when the pad goes from empty to drawn (`false`) or back (`true`), never twice in a row. */\n onEmptyChange?: (empty: boolean) => void;\n /** Ignores pointer input while true. */\n disabled?: boolean;\n /** Height in px; the pad always fills the width of its container. */\n height?: number;\n /** Pen color. The exported PNG keeps this color on a transparent background. */\n penColor?: string;\n /** Minimum stroke width in px, reached at high pointer speed. */\n minWidth?: number;\n /** Maximum stroke width in px, reached at low pointer speed. */\n maxWidth?: number;\n /** Ignores pointer moves closer than this many px to the last point. Lower is smoother. */\n minDistance?: number;\n /** Minimum ms between processed pointer moves; `0` processes every event. */\n throttle?: number;\n /** 0–1 weight of the previous velocity when computing width. Higher evens out width changes. */\n velocityFilterWeight?: number;\n /** Visible text and accessible name of the built-in clear button. Pass a translated string from the app. */\n clearLabel: string;\n className?: string;\n /** Imperative handle with `clear`, `isEmpty` and `toBlob`. */\n ref?: Ref<SignaturePadHandle>;\n}\n\n/**\n * Freehand signature area for touch, pen and mouse. The drawing buffer follows the container size\n * and the device pixel ratio. Strokes live in a reference coordinate space; a resize scales them\n * uniformly to fit (never above 1), so a narrower pad, such as a rotated phone, never crops the\n * signature or its PNG, and growing back restores it. A stroke added while scaled down that falls\n * outside the reference area grows it, so everything still fits, at a smaller size.\n */\nfunction SignaturePad({\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n onEmptyChange,\n disabled = false,\n height = 260,\n penColor = 'black',\n // Smoother than the library defaults (0.5–2.5 px, 5 px, 16 ms), which drop points and turn\n // fast or small curves into visible straight segments.\n minWidth = 1,\n maxWidth = 3,\n minDistance = 1,\n throttle = 0,\n velocityFilterWeight,\n clearLabel,\n className,\n ref,\n}: SignaturePadProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const padRef = useRef<SignaturePadLib | null>(null);\n const emptyRef = useRef(true);\n const [empty, setEmptyState] = useState(true);\n const onEmptyChangeRef = useRef(onEmptyChange);\n // Strokes in a reference coordinate space: `width` x `height` starts as the canvas size when the\n // first stroke ends on an empty pad, and grows if a later stroke reaches past it. `scale` is the\n // current display scale. Resizes scale from this reference, never from an already scaled\n // drawing, and strokes added while scaled are stored divided by `scale`.\n const drawnRef = useRef<{ data: PointGroup[]; width: number; height: number; scale: number }>({\n data: [],\n width: 0,\n height: 0,\n scale: 1,\n });\n // Options are read once on mount: the pad is created a single time.\n const optionsRef = useRef({\n penColor,\n minWidth,\n maxWidth,\n minDistance,\n throttle,\n velocityFilterWeight,\n });\n\n useEffect(() => {\n onEmptyChangeRef.current = onEmptyChange;\n }, [onEmptyChange]);\n\n const setEmpty = (next: boolean) => {\n if (emptyRef.current === next) return;\n emptyRef.current = next;\n setEmptyState(next);\n onEmptyChangeRef.current?.(next);\n };\n\n const clear = () => {\n padRef.current?.clear();\n drawnRef.current = { data: [], width: 0, height: 0, scale: 1 };\n setEmpty(true);\n };\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const pad = new SignaturePadLib(canvas, optionsRef.current);\n padRef.current = pad;\n let width = 0;\n let fittedHeight = 0;\n // Redraws the reference strokes at the scale that fits the current size.\n const redraw = () => {\n const drawn = drawnRef.current;\n drawn.scale = Math.min(width / drawn.width, fittedHeight / drawn.height, 1);\n pad.clear();\n pad.fromData(\n drawn.data.map((group) => ({\n ...group,\n points: group.points.map((point) => ({\n ...point,\n x: point.x * drawn.scale,\n y: point.y * drawn.scale,\n })),\n })),\n );\n };\n\n const handleEnd = () => {\n const drawn = drawnRef.current;\n if (drawn.data.length === 0) {\n drawn.width = width;\n drawn.height = fittedHeight;\n drawn.scale = 1;\n }\n // Each stroke is one group; only the newest one is new.\n const newest = pad.toData().at(-1);\n if (newest) {\n const points = newest.points.map((point) => ({\n ...point,\n x: point.x / drawn.scale,\n y: point.y / drawn.scale,\n }));\n drawn.data = [...drawn.data, { ...newest, points }];\n // A stroke drawn while scaled down can fall outside the reference area (e.g. low in\n // a narrowed pad). Grow the reference to include it, so growing back fits it too.\n const margin = newest.maxWidth ?? 0;\n const reach = (axis: 'x' | 'y') =>\n Math.max(...points.map((point) => point[axis])) + margin;\n drawn.width = Math.max(drawn.width, reach('x'));\n drawn.height = Math.max(drawn.height, reach('y'));\n const fitting = Math.min(width / drawn.width, fittedHeight / drawn.height, 1);\n if (fitting !== drawn.scale) redraw();\n }\n setEmpty(pad.isEmpty());\n };\n pad.addEventListener('endStroke', handleEnd);\n\n const fit = () => {\n const nextWidth = canvas.offsetWidth;\n const nextHeight = canvas.offsetHeight;\n if (!nextWidth || !nextHeight) return;\n if (nextWidth === width && nextHeight === fittedHeight) return;\n width = nextWidth;\n fittedHeight = nextHeight;\n const ratio = window.devicePixelRatio || 1;\n canvas.width = nextWidth * ratio;\n canvas.height = nextHeight * ratio;\n canvas.getContext('2d')?.scale(ratio, ratio);\n pad.clear();\n // Uniform scale keeps the whole signature inside the pad without distortion; it never\n // grows past the reference size.\n if (drawnRef.current.data.length > 0) redraw();\n };\n fit();\n const observer = new ResizeObserver(fit);\n observer.observe(canvas);\n\n return () => {\n observer.disconnect();\n pad.removeEventListener('endStroke', handleEnd);\n pad.off();\n padRef.current = null;\n };\n // `setEmpty` only touches refs, so the pad is created once.\n }, []);\n\n useEffect(() => {\n if (disabled) padRef.current?.off();\n else padRef.current?.on();\n }, [disabled]);\n\n useImperativeHandle(\n ref,\n () => ({\n clear,\n isEmpty: () => padRef.current?.isEmpty() ?? true,\n toBlob: () =>\n new Promise<Blob>((resolve, reject) => {\n const canvas = canvasRef.current;\n if (!canvas) return reject(new Error('The signature pad is not mounted'));\n canvas.toBlob((blob) => {\n if (blob) resolve(blob);\n else reject(new Error('The signature could not be encoded as PNG'));\n }, 'image/png');\n }),\n }),\n // `clear` only touches refs and state setters, so the handle is created once.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n return (\n <div\n data-slot='signature-pad'\n data-disabled={disabled ? '' : undefined}\n className={cn(\n // Fixed light \"paper\": the pen is black and the PNG is read on white by others. The\n // primitive keeps the pad light for consumers that define a dark theme, where a themed\n // surface (`background`, `border`) would turn dark and hide the black ink. The edge\n // uses `dark-400` (4.66:1 on white) so the pad reads as a control (WCAG 1.4.11).\n 'bg-main-alternative-secondary border-dark-400 relative overflow-hidden rounded-xl border',\n 'data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50',\n className,\n )}>\n <canvas\n ref={canvasRef}\n data-slot='signature-pad-canvas'\n role='img'\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n aria-disabled={disabled || undefined}\n style={{ height }}\n className='block w-full touch-none'\n />\n <Button\n type='button'\n variant='ghost'\n size='sm'\n data-slot='signature-pad-clear'\n disabled={disabled}\n // Not `disabled` while empty: that would drop keyboard focus to <body> right after\n // clearing.\n aria-disabled={empty && !disabled ? true : undefined}\n onClick={() => {\n if (!emptyRef.current) clear();\n }}\n // The surface is always light, so the ghost button's themed colors (light gray text in\n // dark mode) are replaced by theme-independent primitives. `h-11` meets the 44px touch\n // target, the edge matches the pad's `dark-400` so the button reads as a control on the\n // white surface, and the empty state stays visible enough to read as available but\n // inactive. The label truncates instead of overflowing a narrow pad.\n className='bg-main-white text-dark-600 border-dark-400 hover:bg-dark-100 hover:text-main-black aria-disabled:hover:bg-main-white absolute right-2 bottom-2 h-11 max-w-[calc(100%-1rem)] gap-1.5 rounded-full border border-solid px-4 text-sm aria-disabled:cursor-not-allowed aria-disabled:opacity-70'>\n <BrushCleaning aria-hidden className='size-4 shrink-0' />\n <span className='truncate'>{clearLabel}</span>\n </Button>\n </div>\n );\n}\n\nexport { SignaturePad };\n","import type { ReactNode } from 'react';\nimport { AbilityProvider } from '@/components/authorization/Can/ability-context';\nimport { Toaster, type ToasterPosition } from '@/components/ui/Toast/toast';\nimport { TooltipProvider } from '@/components/ui/Tooltip/tooltip';\n\nexport interface TCCEProviderProps {\n children: ReactNode;\n permissions?: string[];\n toasterPosition?: ToasterPosition;\n tooltipDelayDuration?: number;\n}\n\nexport function TCCEProvider({\n children,\n permissions,\n toasterPosition,\n tooltipDelayDuration,\n}: TCCEProviderProps) {\n return (\n <TooltipProvider delayDuration={tooltipDelayDuration}>\n <AbilityProvider permissions={permissions}>\n <Toaster position={toasterPosition}>\n {children}\n </Toaster>\n </AbilityProvider>\n </TooltipProvider>\n );\n}\n"]}