@akira-io/ui 1.0.0 → 1.1.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.
Files changed (70) hide show
  1. package/README.md +15 -10
  2. package/dist/blocks.d.ts +159 -6
  3. package/dist/blocks.js +1388 -29
  4. package/dist/blocks.js.map +1 -1
  5. package/dist/button-B6wQRe7p.d.ts +16 -0
  6. package/dist/chunk-5AJFQ6C4.js +35 -0
  7. package/dist/chunk-5AJFQ6C4.js.map +1 -0
  8. package/dist/chunk-6QM5BA7B.js +148 -0
  9. package/dist/chunk-6QM5BA7B.js.map +1 -0
  10. package/dist/chunk-6X4TKSF6.js +21 -0
  11. package/dist/chunk-6X4TKSF6.js.map +1 -0
  12. package/dist/chunk-DSD7MVLL.js +287 -0
  13. package/dist/chunk-DSD7MVLL.js.map +1 -0
  14. package/dist/chunk-IQMRJXEO.js +59 -0
  15. package/dist/chunk-IQMRJXEO.js.map +1 -0
  16. package/dist/chunk-JAHTUAQL.js +82 -0
  17. package/dist/chunk-JAHTUAQL.js.map +1 -0
  18. package/dist/{chunk-A2SIZOEA.js → chunk-KYWA5UYN.js} +125 -45
  19. package/dist/chunk-KYWA5UYN.js.map +1 -0
  20. package/dist/chunk-L2H5GIF7.js +22 -0
  21. package/dist/chunk-L2H5GIF7.js.map +1 -0
  22. package/dist/chunk-LKSM3WLK.js +44 -0
  23. package/dist/chunk-LKSM3WLK.js.map +1 -0
  24. package/dist/{chunk-5MQWJVM2.js → chunk-MNGNBEYN.js} +168 -200
  25. package/dist/chunk-MNGNBEYN.js.map +1 -0
  26. package/dist/chunk-SA5LM2GD.js +102 -0
  27. package/dist/chunk-SA5LM2GD.js.map +1 -0
  28. package/dist/chunk-UUEWFCKT.js +28 -0
  29. package/dist/chunk-UUEWFCKT.js.map +1 -0
  30. package/dist/{chunk-42BJBH56.js → chunk-UUTXPPRN.js} +521 -107
  31. package/dist/chunk-UUTXPPRN.js.map +1 -0
  32. package/dist/{chunk-UXL33CZ4.js → chunk-YOVY3KT6.js} +13 -11
  33. package/dist/chunk-YOVY3KT6.js.map +1 -0
  34. package/dist/code.d.ts +6 -0
  35. package/dist/code.js +651 -0
  36. package/dist/code.js.map +1 -0
  37. package/dist/context-VgHq4U98.d.ts +384 -0
  38. package/dist/editor.d.ts +126 -0
  39. package/dist/editor.js +436 -0
  40. package/dist/editor.js.map +1 -0
  41. package/dist/index.d.ts +93 -17
  42. package/dist/index.js +996 -472
  43. package/dist/index.js.map +1 -1
  44. package/dist/inertia.d.ts +47 -2
  45. package/dist/inertia.js +138 -7
  46. package/dist/inertia.js.map +1 -1
  47. package/dist/input-4uxAHW6y.d.ts +5 -0
  48. package/dist/json-viewer-BTHBACj9.d.ts +50 -0
  49. package/dist/{language-Bft6rBBt.d.ts → language-Dgjr9bm3.d.ts} +1 -1
  50. package/dist/locales/pt.d.ts +26 -4
  51. package/dist/locales/pt.js +127 -1
  52. package/dist/locales/pt.js.map +1 -1
  53. package/dist/password-input-r39y2pCT.d.ts +50 -0
  54. package/dist/shells.d.ts +45 -7
  55. package/dist/shells.js +95 -60
  56. package/dist/shells.js.map +1 -1
  57. package/dist/{sidebar-BDhG9SUU.d.ts → sidebar-BhOIlSjt.d.ts} +4 -12
  58. package/dist/{types-Cno1_Ijx.d.ts → types-B4QS3h5p.d.ts} +9 -1
  59. package/dist/types-CT0rBsFc.d.ts +110 -0
  60. package/package.json +170 -130
  61. package/theme.css +20 -0
  62. package/themes/nosferry.css +4 -0
  63. package/dist/chunk-42BJBH56.js.map +0 -1
  64. package/dist/chunk-5MQWJVM2.js.map +0 -1
  65. package/dist/chunk-A2SIZOEA.js.map +0 -1
  66. package/dist/chunk-POE7OYET.js +0 -96
  67. package/dist/chunk-POE7OYET.js.map +0 -1
  68. package/dist/chunk-UXL33CZ4.js.map +0 -1
  69. package/dist/date-range-filter-QEa8fhUM.d.ts +0 -149
  70. package/dist/types-cOieac8G.d.ts +0 -77
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/avatar.tsx","../src/components/ui/breadcrumb.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/icon.tsx","../src/components/ui/separator.tsx","../src/components/ui/sheet.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/tooltip.tsx","../src/hooks/use-mobile.tsx","../src/components/ui/sidebar.tsx"],"names":["jsx","CollapsibleTrigger","CollapsibleContent","jsxs","Separator","React","open","Slot"],"mappings":"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","file":"chunk-5MQWJVM2.js","sourcesContent":["import * as AvatarPrimitive from '@radix-ui/react-avatar';\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn(\n 'size-8 relative flex shrink-0 overflow-hidden rounded-full',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn('aspect-square size-full', className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n 'flex size-full items-center justify-center rounded-full bg-muted',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Avatar, AvatarFallback, AvatarImage };\n","import { Slot } from '@radix-ui/react-slot';\nimport { ChevronRight, MoreHorizontal } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<'nav'>) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />;\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<'ol'>) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n 'gap-1.5 text-sm sm:gap-2.5 flex flex-wrap items-center break-words text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn('gap-1.5 inline-flex items-center', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n}) {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn('transition-colors hover:text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.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('font-semibold text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n );\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\n 'size-9 rounded-xl flex items-center justify-center',\n className,\n )}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n );\n}\n\nexport {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n};\n","import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\n\nimport { elevatedSurface, nestedSurfaceReset } from '@/lib/language';\nimport { cn } from '@/lib/utils';\n\nfunction Collapsible({\n className,\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return (\n <CollapsiblePrimitive.Root\n data-slot=\"collapsible\"\n className={cn(\n elevatedSurface,\n nestedSurfaceReset,\n 'p-5 bg-card',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CollapsibleTrigger({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot=\"collapsible-trigger\"\n {...props}\n />\n );\n}\n\nfunction CollapsibleContent({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot=\"collapsible-content\"\n {...props}\n />\n );\n}\n\nexport { Collapsible, CollapsibleContent, CollapsibleTrigger };\n","import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { menuSurface } from '@/lib/language';\nimport { cn } from '@/lib/utils';\n\nfunction DropdownMenu({\n modal = false,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return (\n <DropdownMenuPrimitive.Root\n data-slot=\"dropdown-menu\"\n modal={modal}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal\n data-slot=\"dropdown-menu-portal\"\n {...props}\n />\n );\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n );\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n `${menuSurface} data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 p-1.5 z-50 min-w-[8rem] overflow-hidden`,\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group\n data-slot=\"dropdown-menu-group\"\n {...props}\n />\n );\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.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 \"font-medium gap-2 rounded-xl px-2 py-2 text-sm data-[inset]:pl-8 [&_svg:not([class*='size-'])]:size-5 focus:font-semibold relative flex cursor-default items-center outline-hidden transition-all select-none focus:bg-primary/10 focus:text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50 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/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:!text-destructive\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"gap-2 py-1.5 pr-2 pl-8 text-sm [&_svg:not([class*='size-'])]:size-4 rounded-xl relative flex cursor-default items-center outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"left-2 size-3.5 pointer-events-none absolute flex items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n );\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"gap-2 py-1.5 pr-2 pl-8 text-sm [&_svg:not([class*='size-'])]:size-4 rounded-xl relative flex cursor-default items-center outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n <span className=\"left-2 size-3.5 pointer-events-none absolute flex items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.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(\n 'px-2 py-2 text-xs font-medium tracking-wider data-[inset]:pl-8 text-muted-foreground uppercase',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n 'text-xs tracking-widest ml-auto text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return (\n <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n );\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.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 'font-medium rounded-xl px-2 py-2 text-sm data-[inset]:pl-8 focus:font-semibold data-[state=open]:font-semibold flex cursor-default items-center outline-hidden transition-all select-none focus:bg-primary/10 focus:text-primary data-[state=open]:bg-primary/10 data-[state=open]:text-primary',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"size-4 ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n `${menuSurface} data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 p-1.5 z-50 min-w-[8rem] overflow-hidden`,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","import type { IconComponent } from '@/types';\n\ninterface IconProps {\n iconNode?: IconComponent | null;\n className?: string;\n}\n\nexport function Icon({ iconNode: IconComponent, className }: IconProps) {\n if (!IconComponent) {\n return null;\n }\n\n return <IconComponent className={className} />;\n}\n","import * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator-root\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import * as SheetPrimitive from '@radix-ui/react-dialog';\nimport { XIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { floatingSurface, focusRing } from '@/lib/language';\nimport { cn } from '@/lib/utils';\n\nfunction Sheet({\n preserveScroll = false,\n onOpenChange: onOpenChangeProp,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Root> & {\n preserveScroll?: boolean;\n}) {\n const scrollPosition = React.useRef(0);\n\n const onOpenChange = (open: boolean) => {\n if (preserveScroll) {\n if (open) {\n scrollPosition.current = window.scrollY;\n } else {\n setTimeout(() => {\n window.scrollTo(0, scrollPosition.current);\n }, 0);\n }\n }\n\n onOpenChangeProp?.(open);\n };\n\n return (\n <SheetPrimitive.Root\n data-slot=\"sheet\"\n {...props}\n onOpenChange={onOpenChange}\n />\n );\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({\n ...props\n}: 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 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 inset-0 bg-black/60 backdrop-blur-sm fixed z-50',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left';\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n `${floatingSurface} data-[state=open]:animate-in data-[state=closed]:animate-out gap-4 ease-in-out fixed z-50 flex flex-col transition data-[state=closed]:duration-300 data-[state=open]:duration-500`,\n side === 'right' &&\n 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 sm:max-w-sm rounded-l-3xl h-full w-3/4 border-l border-border',\n side === 'left' &&\n 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 sm:max-w-sm rounded-r-3xl h-full w-3/4 border-r border-border',\n side === 'top' &&\n 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 rounded-b-3xl h-auto border-b border-border',\n side === 'bottom' &&\n 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 rounded-t-3xl h-auto border-t border-border',\n className,\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close\n className={cn(\n 'top-4 right-4 size-9 shadow-xs absolute flex items-center justify-center rounded-full border border-border bg-muted text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:pointer-events-none',\n focusRing,\n )}\n >\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\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('gap-1.5 p-4 flex flex-col', 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('gap-2 p-4 mt-auto flex flex-col', 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('font-semibold 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 SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n};\n","import { cn } from '@/lib/utils';\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn('animate-pulse rounded-xl bg-muted', className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.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({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 4,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'animate-in fade-in-0 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 max-w-sm px-3 py-1.5 text-xs shadow-2xl rounded-xl z-50 bg-primary text-primary-foreground',\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"size-2.5 z-50 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-primary fill-primary\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","import { useEffect, useState } from 'react';\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = useState<boolean>();\n\n useEffect(() => {\n const mql = window.matchMedia(\n `(max-width: ${MOBILE_BREAKPOINT - 1}px)`,\n );\n\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n\n mql.addEventListener('change', onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n\n return () => mql.removeEventListener('change', onChange);\n }, []);\n\n return !!isMobile;\n}\n","import { Slot } from '@radix-ui/react-slot';\nimport { VariantProps, cva } from 'class-variance-authority';\nimport { PanelLeftIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/sheet';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/components/ui/tooltip';\nimport { useIsMobile } from '@/hooks/use-mobile';\nimport { cn } from '@/lib/utils';\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 SidebarContext = {\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 = React.createContext<SidebarContext | null>(null);\n\nfunction useSidebar() {\n const context = React.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}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.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] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.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}`;\n },\n [setOpenProp, open],\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile\n ? setOpenMobile((open) => !open)\n : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\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 = React.useMemo<SidebarContext>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n ],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\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 React.CSSProperties\n }\n className={cn(\n 'group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.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 'flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet\n open={openMobile}\n onOpenChange={setOpenMobile}\n {...props}\n preserveScroll\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>\n Displays the mobile sidebar.\n </SheetDescription>\n </SheetHeader>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"p-0 w-(--sidebar-width) bg-sidebar text-sidebar-foreground [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <div className=\"flex h-full w-full flex-col\">\n {children}\n </div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"group peer md:block hidden text-sidebar-foreground\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n className={cn(\n 'relative h-svh 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 className={cn(\n 'inset-y-0 md:flex fixed z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\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 >\n <div\n data-sidebar=\"sidebar\"\n className=\"group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:rounded-2xl flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.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\"\n className={cn('h-7 w-7', className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.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 'inset-y-0 w-4 group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:inset-y-0 sm:flex absolute z-20 hidden -translate-x-1/2 transition-all ease-linear after:absolute after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border',\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 'group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar',\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 }: React.ComponentProps<'main'>) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n 'relative flex min-h-svh max-w-full flex-1 flex-col bg-background',\n 'peer-data-[variant=inset]:min-h-[calc(100svh-(--spacing(4)))] md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn('h-11 w-full bg-background shadow-none', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('gap-2 p-2 flex flex-col', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('gap-2 p-2 flex flex-col', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn('mx-2 w-auto bg-sidebar-border', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n 'min-h-0 gap-2 flex flex-1 flex-col overflow-auto group-data-[collapsible=icon]:overflow-hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\n 'min-w-0 p-2 relative flex w-full flex-col',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'h-8 rounded-xl px-2 text-xs font-medium tracking-wider [&>svg]:size-4 flex shrink-0 items-center text-sidebar-foreground/70 uppercase ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-[3px] focus-visible:ring-ring/50 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:pointer-events-none group-data-[collapsible=icon]:opacity-0 group-data-[collapsible=icon]:select-none',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'top-3.5 right-3 w-5 p-0 [&>svg]:size-4 rounded-xl absolute flex aspect-square items-center justify-center text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 [&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:-inset-2 md:after:hidden after:absolute',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('text-sm w-full', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn('min-w-0 gap-1 flex w-full flex-col', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.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 flex w-full items-center gap-3 overflow-hidden rounded-xl p-2.5 text-left text-sm font-medium outline-hidden ring-sidebar-ring transition-all hover:bg-accent hover:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-primary/10 data-[active=true]:font-semibold data-[active=true]:text-primary group-data-[collapsible=icon]:size-10! group-data-[collapsible=icon]:p-3! [&>span:last-child]:truncate [&>svg]:size-5 [&>svg]:shrink-0',\n {\n variants: {\n variant: {\n default:\n 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-11 text-sm',\n sm: 'h-9 text-sm',\n lg: 'h-14 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}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : '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(\n sidebarMenuButtonVariants({ variant, size }),\n className,\n )}\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}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'top-1.5 right-1 w-5 p-0 [&>svg]:size-4 rounded-xl absolute flex aspect-square items-center justify-center text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 [&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:-inset-2 md:after:hidden after:absolute',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'md:opacity-0 group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground data-[state=open]:opacity-100',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'right-1 h-5 min-w-5 px-1 text-xs font-medium rounded-xl pointer-events-none absolute flex items-center justify-center text-sidebar-foreground tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\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(\n 'h-8 gap-2 px-2 rounded-xl flex items-center',\n className,\n )}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-xl\"\n data-sidebar=\"menu-skeleton-icon\"\n />\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 React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'mx-3.5 min-w-0 gap-1 px-2.5 py-0.5 flex translate-x-px flex-col border-l border-sidebar-border',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.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}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : '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 'h-9 min-w-0 gap-2 px-2 text-sm font-medium [&>svg]:size-4 rounded-xl flex -translate-x-px items-center overflow-hidden text-sidebar-foreground ring-sidebar-ring outline-hidden hover:bg-accent hover:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 active:bg-accent disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0 [&>svg]:text-current',\n 'data-[active=true]:font-semibold data-[active=true]:bg-primary/10 data-[active=true]:text-primary',\n size === 'sm' && 'h-9 text-sm',\n size === 'md' && 'h-9 text-sm',\n 'group-data-[collapsible=icon]:hidden',\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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/href.ts","../src/hooks/use-initials.tsx","../src/shells/nav-footer.tsx","../src/shells/nav-main.tsx","../src/shells/user-info.tsx","../src/shells/user-menu-content.tsx","../src/shells/nav-user.tsx","../src/shells/app-sidebar.tsx","../src/shells/breadcrumbs.tsx","../src/shells/app-sidebar-header.tsx","../src/shells/heading.tsx","../src/shells/settings-layout.tsx"],"names":["jsx","jsxs","Fragment","useState"],"mappings":"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","file":"chunk-A2SIZOEA.js","sourcesContent":["import type { ComponentType } from 'react';\nimport { createElement } from 'react';\n\nimport type { LinkComponent, LinkProps, UrlLike } from '@/types';\n\nexport function hrefToString(href: UrlLike): string {\n return typeof href === 'string' ? href : href.url;\n}\n\nexport const DefaultLink: ComponentType<LinkProps> = ({\n href,\n children,\n prefetch: _prefetch,\n as: _as,\n ...props\n}) => {\n return createElement('a', { href: hrefToString(href), ...props }, children);\n};\n\nexport function resolveLink(linkComponent?: LinkComponent): LinkComponent {\n return linkComponent ?? DefaultLink;\n}\n","import { useCallback } from 'react';\n\nexport function useInitials() {\n return useCallback((fullName: string): string => {\n const names = fullName.trim().split(' ');\n\n if (names.length === 0) return '';\n if (names.length === 1) return names[0].charAt(0).toUpperCase();\n\n const firstInitial = names[0].charAt(0);\n const lastInitial = names[names.length - 1].charAt(0);\n\n return `${firstInitial}${lastInitial}`.toUpperCase();\n }, []);\n}\n","import { type ComponentPropsWithoutRef } from 'react';\n\nimport { Icon } from '@/components/ui/icon';\nimport {\n SidebarGroup,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from '@/components/ui/sidebar';\nimport { hrefToString } from '@/lib/href';\nimport type { NavItem } from '@/types';\n\nexport function NavFooter({\n items,\n className,\n ...props\n}: ComponentPropsWithoutRef<typeof SidebarGroup> & {\n items: NavItem[];\n}) {\n return (\n <SidebarGroup\n {...props}\n className={`group-data-[collapsible=icon]:p-0 ${className || ''}`}\n >\n <SidebarGroupContent>\n <SidebarMenu>\n {items.map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <a\n href={hrefToString(item.href)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {item.icon && (\n <Icon\n iconNode={item.icon}\n className=\"h-5 w-5\"\n />\n )}\n <span>{item.title}</span>\n </a>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n );\n}\n","import { ChevronDown } from 'lucide-react';\nimport { useState } from 'react';\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '@/components/ui/collapsible';\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from '@/components/ui/sidebar';\nimport { hrefToString, resolveLink } from '@/lib/href';\nimport { cn } from '@/lib/utils';\nimport type { LinkComponent, NavItem } from '@/types';\n\nexport function NavMain({\n items = [],\n label = 'Platform',\n currentUrl = '',\n linkComponent,\n collapsible = false,\n defaultOpen = true,\n}: {\n items: NavItem[];\n label?: string;\n currentUrl?: string;\n linkComponent?: LinkComponent;\n collapsible?: boolean;\n defaultOpen?: boolean;\n}) {\n const Link = resolveLink(linkComponent);\n const [open, setOpen] = useState(defaultOpen);\n\n const menu = (\n <SidebarMenu>\n {items.map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={\n item.isActive ??\n (currentUrl\n ? currentUrl.startsWith(hrefToString(item.href))\n : false)\n }\n tooltip={{ children: item.title }}\n >\n <Link href={item.href} prefetch>\n {item.icon && <item.icon />}\n <span>{item.title}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n );\n\n if (!collapsible || !label) {\n return (\n <SidebarGroup className=\"px-2 py-0\">\n {label && <SidebarGroupLabel>{label}</SidebarGroupLabel>}\n {menu}\n </SidebarGroup>\n );\n }\n\n return (\n <SidebarGroup className=\"px-2 py-0\">\n <Collapsible\n open={open}\n onOpenChange={setOpen}\n className=\"p-0 rounded-none border-0 bg-transparent shadow-none ring-0 backdrop-blur-none\"\n >\n <CollapsibleTrigger asChild>\n <SidebarGroupLabel className=\"w-full cursor-pointer justify-between\">\n {label}\n <ChevronDown\n className={cn(\n 'size-4 transition-transform',\n !open && '-rotate-90',\n )}\n />\n </SidebarGroupLabel>\n </CollapsibleTrigger>\n <CollapsibleContent>{menu}</CollapsibleContent>\n </Collapsible>\n </SidebarGroup>\n );\n}\n","import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';\nimport { useInitials } from '@/hooks/use-initials';\nimport type { SharedUser } from '@/types';\n\nexport function UserInfo({\n user,\n showEmail = false,\n}: {\n user: SharedUser;\n showEmail?: boolean;\n}) {\n const getInitials = useInitials();\n\n return (\n <>\n <Avatar className=\"h-8 w-8 overflow-hidden rounded-full\">\n <AvatarImage src={user.avatar} alt={user.name} />\n <AvatarFallback className=\"rounded-xl bg-muted text-foreground\">\n {getInitials(user.name)}\n </AvatarFallback>\n </Avatar>\n <div className=\"text-sm leading-tight grid flex-1 text-left\">\n <span className=\"font-medium truncate\">{user.name}</span>\n {showEmail && (\n <span className=\"text-xs truncate text-muted-foreground\">\n {user.email}\n </span>\n )}\n </div>\n </>\n );\n}\n","import { LogOut, Settings } from 'lucide-react';\n\nimport {\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n} from '@/components/ui/dropdown-menu';\nimport { resolveLink } from '@/lib/href';\nimport type { LinkComponent, SharedUser, UrlLike } from '@/types';\nimport { UserInfo } from './user-info';\n\ninterface UserMenuContentProps {\n user: SharedUser;\n settingsHref: UrlLike;\n logoutHref: UrlLike;\n linkComponent?: LinkComponent;\n onSettingsClick?: () => void;\n onLogout?: () => void;\n settingsLabel?: string;\n logoutLabel?: string;\n}\n\nexport function UserMenuContent({\n user,\n settingsHref,\n logoutHref,\n linkComponent,\n onSettingsClick,\n onLogout,\n settingsLabel = 'Settings',\n logoutLabel = 'Log out',\n}: UserMenuContentProps) {\n const Link = resolveLink(linkComponent);\n\n return (\n <>\n <DropdownMenuLabel className=\"p-0 font-normal\">\n <div className=\"gap-2 px-1 py-1.5 text-sm flex items-center text-left\">\n <UserInfo user={user} showEmail={true} />\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem asChild>\n <Link\n className=\"block w-full\"\n href={settingsHref}\n as=\"button\"\n prefetch\n onClick={onSettingsClick}\n >\n <Settings className=\"mr-2\" />\n {settingsLabel}\n </Link>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuItem asChild>\n <Link\n className=\"block w-full\"\n href={logoutHref}\n as=\"button\"\n onClick={onLogout}\n data-test=\"logout-button\"\n >\n <LogOut className=\"mr-2\" />\n {logoutLabel}\n </Link>\n </DropdownMenuItem>\n </>\n );\n}\n","import { ChevronsUpDown } from 'lucide-react';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '@/components/ui/sidebar';\nimport { useIsMobile } from '@/hooks/use-mobile';\nimport type { LinkComponent, SharedUser, UrlLike } from '@/types';\nimport { UserInfo } from './user-info';\nimport { UserMenuContent } from './user-menu-content';\n\ninterface NavUserProps {\n user: SharedUser;\n settingsHref: UrlLike;\n logoutHref: UrlLike;\n linkComponent?: LinkComponent;\n onSettingsClick?: () => void;\n onLogout?: () => void;\n}\n\nexport function NavUser({\n user,\n settingsHref,\n logoutHref,\n linkComponent,\n onSettingsClick,\n onLogout,\n}: NavUserProps) {\n const { state } = useSidebar();\n const isMobile = useIsMobile();\n\n return (\n <SidebarMenu>\n <SidebarMenuItem>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton\n size=\"lg\"\n className=\"group text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent\"\n data-test=\"sidebar-menu-button\"\n >\n <UserInfo user={user} />\n <ChevronsUpDown className=\"size-4 ml-auto\" />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"min-w-56 rounded-xl w-(--radix-dropdown-menu-trigger-width)\"\n align=\"end\"\n side={\n isMobile\n ? 'bottom'\n : state === 'collapsed'\n ? 'left'\n : 'bottom'\n }\n >\n <UserMenuContent\n user={user}\n settingsHref={settingsHref}\n logoutHref={logoutHref}\n linkComponent={linkComponent}\n onSettingsClick={onSettingsClick}\n onLogout={onLogout}\n />\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n </SidebarMenu>\n );\n}\n","import { type ReactNode } from 'react';\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from '@/components/ui/sidebar';\nimport { hrefToString, resolveLink } from '@/lib/href';\nimport type {\n LinkComponent,\n NavGroup,\n NavItem,\n SharedUser,\n UrlLike,\n} from '@/types';\nimport { NavFooter } from './nav-footer';\nimport { NavMain } from './nav-main';\nimport { NavUser } from './nav-user';\n\nfunction mostSpecificActiveHref(\n groups: NavGroup[],\n currentUrl: string,\n): string {\n let best = '';\n for (const group of groups) {\n for (const item of group.items) {\n const href = hrefToString(item.href);\n const matches =\n currentUrl === href || currentUrl.startsWith(`${href}/`);\n if (matches && href.length > best.length) {\n best = href;\n }\n }\n }\n return best;\n}\n\ninterface AppSidebarProps {\n logo: ReactNode;\n logoHref: UrlLike;\n groups: NavGroup[];\n footerItems?: NavItem[];\n user: SharedUser;\n settingsHref: UrlLike;\n logoutHref: UrlLike;\n currentUrl?: string;\n linkComponent?: LinkComponent;\n onSettingsClick?: () => void;\n onLogout?: () => void;\n}\n\nexport function AppSidebar({\n logo,\n logoHref,\n groups,\n footerItems = [],\n user,\n settingsHref,\n logoutHref,\n currentUrl = '',\n linkComponent,\n onSettingsClick,\n onLogout,\n}: AppSidebarProps) {\n const Link = resolveLink(linkComponent);\n const activeHref = mostSpecificActiveHref(groups, currentUrl);\n const resolvedGroups = groups.map((group) => ({\n ...group,\n items: group.items.map((item) => ({\n ...item,\n isActive: hrefToString(item.href) === activeHref,\n })),\n }));\n\n return (\n <Sidebar collapsible=\"icon\" variant=\"inset\">\n <SidebarHeader>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size=\"lg\" asChild>\n <Link href={logoHref} prefetch>\n {logo}\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarHeader>\n\n <SidebarContent>\n {resolvedGroups.map((group, index) => (\n <NavMain\n key={group.label ?? index}\n items={group.items}\n label={group.label ?? ''}\n currentUrl={currentUrl}\n linkComponent={linkComponent}\n />\n ))}\n </SidebarContent>\n\n <SidebarFooter>\n {footerItems.length > 0 && (\n <NavFooter items={footerItems} className=\"mt-auto\" />\n )}\n <NavUser\n user={user}\n settingsHref={settingsHref}\n logoutHref={logoutHref}\n linkComponent={linkComponent}\n onSettingsClick={onSettingsClick}\n onLogout={onLogout}\n />\n </SidebarFooter>\n </Sidebar>\n );\n}\n","import { Fragment } from 'react';\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@/components/ui/breadcrumb';\nimport { resolveLink } from '@/lib/href';\nimport type {\n BreadcrumbItem as BreadcrumbItemType,\n LinkComponent,\n} from '@/types';\n\nexport function Breadcrumbs({\n breadcrumbs,\n linkComponent,\n}: {\n breadcrumbs: BreadcrumbItemType[];\n linkComponent?: LinkComponent;\n}) {\n const Link = resolveLink(linkComponent);\n\n if (breadcrumbs.length === 0) {\n return null;\n }\n\n return (\n <Breadcrumb>\n <BreadcrumbList>\n {breadcrumbs.map((item, index) => {\n const isLast = index === breadcrumbs.length - 1;\n return (\n <Fragment key={index}>\n <BreadcrumbItem>\n {isLast ? (\n <BreadcrumbPage>\n {item.title}\n </BreadcrumbPage>\n ) : (\n <BreadcrumbLink asChild>\n <Link href={item.href}>\n {item.title}\n </Link>\n </BreadcrumbLink>\n )}\n </BreadcrumbItem>\n {!isLast && <BreadcrumbSeparator />}\n </Fragment>\n );\n })}\n </BreadcrumbList>\n </Breadcrumb>\n );\n}\n","import { Search } from 'lucide-react';\nimport { useEffect, useState } from 'react';\n\nimport { SidebarTrigger } from '@/components/ui/sidebar';\nimport type {\n BreadcrumbItem as BreadcrumbItemType,\n LinkComponent,\n} from '@/types';\nimport { Breadcrumbs } from './breadcrumbs';\n\ninterface AppSidebarHeaderProps {\n breadcrumbs?: BreadcrumbItemType[];\n linkComponent?: LinkComponent;\n onSearchClick?: () => void;\n searchLabel?: string;\n}\n\nexport function AppSidebarHeader({\n breadcrumbs = [],\n linkComponent,\n onSearchClick,\n searchLabel = 'Search...',\n}: AppSidebarHeaderProps) {\n const [modifier, setModifier] = useState('Ctrl');\n\n useEffect(() => {\n const platform = navigator.userAgent;\n setModifier(/Mac|iPhone|iPad|iPod/.test(platform) ? '⌘' : 'Ctrl');\n }, []);\n\n return (\n <header className=\"h-16 gap-2 px-6 group-has-data-[collapsible=icon]/sidebar-wrapper:h-12 md:px-4 flex shrink-0 items-center border-b border-sidebar-border/50 transition-[width,height] ease-linear\">\n <div className=\"gap-2 flex items-center\">\n <SidebarTrigger className=\"-ml-1\" />\n <Breadcrumbs\n breadcrumbs={breadcrumbs}\n linkComponent={linkComponent}\n />\n </div>\n\n {onSearchClick && (\n <button\n type=\"button\"\n onClick={onSearchClick}\n className=\"h-9 w-56 gap-2 rounded-xl px-3 text-sm ml-auto flex items-center border border-border/60 bg-muted/30 text-muted-foreground transition-colors hover:bg-muted/50\"\n >\n <Search className=\"size-4\" />\n <span>{searchLabel}</span>\n <kbd className=\"gap-0.5 px-1.5 py-0.5 font-semibold rounded-xl ml-auto inline-flex items-center border border-border/60 bg-background font-sans text-[10px] text-muted-foreground\">\n <span>{modifier}</span>\n <span>K</span>\n </kbd>\n </button>\n )}\n </header>\n );\n}\n","export function Heading({\n title,\n description,\n}: {\n title: string;\n description?: string;\n}) {\n return (\n <div className=\"mb-8 space-y-0.5\">\n <h2 className=\"text-xl font-semibold tracking-tight\">{title}</h2>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n );\n}\n","import { type PropsWithChildren } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { Separator } from '@/components/ui/separator';\nimport { hrefToString, resolveLink } from '@/lib/href';\nimport { cn } from '@/lib/utils';\nimport type { LinkComponent, NavItem } from '@/types';\nimport { Heading } from './heading';\n\nexport interface SettingsLayoutProps {\n items: NavItem[];\n linkComponent?: LinkComponent;\n currentPath?: string;\n title?: string;\n description?: string;\n wide?: boolean;\n}\n\nexport function SettingsLayout({\n items,\n linkComponent,\n currentPath,\n title = 'Settings',\n description = 'Manage your profile and account settings',\n wide = false,\n children,\n}: PropsWithChildren<SettingsLayoutProps>) {\n const Link = resolveLink(linkComponent);\n const activePath =\n currentPath ??\n (typeof window === 'undefined' ? '' : window.location.pathname);\n\n return (\n <div className=\"px-4 py-6\">\n <Heading title={title} description={description} />\n\n <div className=\"lg:flex-row lg:space-x-12 flex flex-col\">\n <aside className=\"max-w-xl lg:w-48 w-full\">\n <nav className=\"space-y-1 space-x-0 flex flex-col\">\n {items.map((item, index) => {\n const href = hrefToString(item.href);\n return (\n <Button\n key={`${href}-${index}`}\n size=\"sm\"\n variant=\"ghost\"\n asChild\n className={cn('w-full justify-start', {\n 'bg-muted': activePath === href,\n })}\n >\n <Link href={item.href}>\n {item.icon && (\n <item.icon className=\"h-4 w-4\" />\n )}\n {item.title}\n </Link>\n </Button>\n );\n })}\n </nav>\n </aside>\n\n <Separator className=\"my-6 lg:hidden\" />\n\n <div\n className={cn(\n wide ? 'min-w-0 flex-1' : 'md:max-w-2xl flex-1',\n )}\n >\n <section\n className={cn(\n 'space-y-12',\n wide ? 'max-w-5xl' : 'max-w-xl',\n )}\n >\n {children}\n </section>\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1,96 +0,0 @@
1
- import { clsx } from 'clsx';
2
- import { twMerge } from 'tailwind-merge';
3
- import { Slot } from '@radix-ui/react-slot';
4
- import { cva } from 'class-variance-authority';
5
- import { jsx } from 'react/jsx-runtime';
6
-
7
- // src/lib/utils.ts
8
- function cn(...inputs) {
9
- return twMerge(clsx(inputs));
10
- }
11
-
12
- // src/lib/language.ts
13
- var surfaceRadius = "rounded-3xl";
14
- var controlRadius = "rounded-2xl";
15
- var glassEdge = "ring-1 ring-surface-ring backdrop-blur-2xl backdrop-saturate-150";
16
- var elevatedSurface = `${glassEdge} ${surfaceRadius} border-0 shadow-(--glass-elevation)`;
17
- var floatingSurface = `${glassEdge} border-0 bg-popover/85 text-popover-foreground shadow-(--glass-elevation)`;
18
- var modalSurface = `${floatingSurface} ${surfaceRadius}`;
19
- var panelSurface = `${floatingSurface} ${controlRadius}`;
20
- var menuSurface = `${panelSurface} bg-popover/80`;
21
- var recessedSurface = `${controlRadius} border-0 bg-surface-recessed text-foreground shadow-none ring-0 backdrop-blur-none`;
22
- var nestedRadius = controlRadius;
23
- var nestedSurfaceReset = "nested-surface:border-0 nested-surface:ring-0 nested-surface:bg-transparent nested-surface:shadow-none nested-surface:backdrop-blur-none";
24
- var nestedEdgeToEdge = "nested-surface:rounded-none";
25
- var glassControl = "ring-1 ring-surface-ring border-0 shadow-(--glass-shadow) backdrop-blur-md backdrop-saturate-150";
26
- var controlFill = "bg-surface-control";
27
- var fieldSurface = `${glassControl} ${controlFill} ${controlRadius} text-foreground`;
28
- var focusRing = "outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50";
29
- var menuHighlight = "outline-hidden focus:bg-accent focus:text-accent-foreground";
30
- function surface(inset) {
31
- return inset ? `${elevatedSurface} ${recessedSurface}` : elevatedSurface;
32
- }
33
- var buttonVariants = cva(
34
- `inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-2xl text-sm font-semibold transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 aria-invalid:ring-destructive/20 aria-invalid:border-destructive ${focusRing}`,
35
- {
36
- variants: {
37
- variant: {
38
- default: "bg-primary text-primary-foreground shadow-xl hover:bg-primary/90 hover:scale-[1.02] active:scale-[0.98]",
39
- destructive: "bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/40",
40
- outline: `${glassControl} ${controlFill} hover:bg-accent hover:text-accent-foreground`,
41
- secondary: `${glassControl} bg-secondary/80 text-secondary-foreground hover:bg-secondary`,
42
- ghost: "hover:bg-accent hover:text-accent-foreground",
43
- link: "text-primary underline-offset-4 hover:underline"
44
- },
45
- size: {
46
- default: "h-11 px-4 has-[>svg]:px-3",
47
- sm: "h-9 gap-1.5 rounded-xl px-3 has-[>svg]:px-2.5",
48
- lg: "h-12 px-6 has-[>svg]:px-5 text-base",
49
- icon: "size-11",
50
- "icon-sm": "size-9 rounded-xl",
51
- "icon-lg": "size-12"
52
- }
53
- },
54
- defaultVariants: {
55
- variant: "default",
56
- size: "default"
57
- }
58
- }
59
- );
60
- function Button({
61
- className,
62
- variant = "default",
63
- size = "default",
64
- asChild = false,
65
- ...props
66
- }) {
67
- const Comp = asChild ? Slot : "button";
68
- return /* @__PURE__ */ jsx(
69
- Comp,
70
- {
71
- "data-slot": "button",
72
- "data-variant": variant,
73
- "data-size": size,
74
- className: cn(buttonVariants({ variant, size, className })),
75
- ...props
76
- }
77
- );
78
- }
79
- function Input({ className, type, ...props }) {
80
- return /* @__PURE__ */ jsx(
81
- "input",
82
- {
83
- type,
84
- "data-slot": "input",
85
- className: cn(
86
- `h-11 min-w-0 px-4 text-sm font-medium flex w-full transition-all placeholder:text-muted-foreground focus:bg-muted disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 ${fieldSurface} ${focusRing}`,
87
- className
88
- ),
89
- ...props
90
- }
91
- );
92
- }
93
-
94
- export { Button, Input, buttonVariants, cn, controlFill, elevatedSurface, fieldSurface, floatingSurface, focusRing, glassControl, menuHighlight, menuSurface, modalSurface, nestedEdgeToEdge, nestedRadius, nestedSurfaceReset, panelSurface, recessedSurface, surface };
95
- //# sourceMappingURL=chunk-POE7OYET.js.map
96
- //# sourceMappingURL=chunk-POE7OYET.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/lib/language.ts","../src/components/ui/button.tsx","../src/components/ui/input.tsx"],"names":["jsx"],"mappings":"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","file":"chunk-POE7OYET.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","export const surfaceRadius = 'rounded-3xl';\n\nexport const controlRadius = 'rounded-2xl';\n\nexport const compactRadius = 'rounded-xl';\n\nexport const glassEdge =\n 'ring-1 ring-surface-ring backdrop-blur-2xl backdrop-saturate-150';\n\nexport const elevatedSurface = `${glassEdge} ${surfaceRadius} border-0 shadow-(--glass-elevation)`;\n\nexport const floatingSurface = `${glassEdge} border-0 bg-popover/85 text-popover-foreground shadow-(--glass-elevation)`;\n\nexport const modalSurface = `${floatingSurface} ${surfaceRadius}`;\n\nexport const panelSurface = `${floatingSurface} ${controlRadius}`;\n\nexport const menuSurface = `${panelSurface} bg-popover/80`;\n\nexport const recessedSurface = `${controlRadius} border-0 bg-surface-recessed text-foreground shadow-none ring-0 backdrop-blur-none`;\n\nexport const nestedRadius = controlRadius;\n\nexport const nestedSurfaceReset =\n 'nested-surface:border-0 nested-surface:ring-0 nested-surface:bg-transparent nested-surface:shadow-none nested-surface:backdrop-blur-none';\n\nexport const nestedEdgeToEdge = 'nested-surface:rounded-none';\n\nexport const glassControl =\n 'ring-1 ring-surface-ring border-0 shadow-(--glass-shadow) backdrop-blur-md backdrop-saturate-150';\n\nexport const controlFill = 'bg-surface-control';\n\nexport const fieldSurface = `${glassControl} ${controlFill} ${controlRadius} text-foreground`;\n\nexport const focusRing =\n 'outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50';\n\nexport const menuHighlight =\n 'outline-hidden focus:bg-accent focus:text-accent-foreground';\n\nexport interface SurfaceProps {\n inset?: boolean;\n}\n\nexport function surface(inset?: boolean | null): string {\n return inset ? `${elevatedSurface} ${recessedSurface}` : elevatedSurface;\n}\n","import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { controlFill, focusRing, glassControl } from '@/lib/language';\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n `inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-2xl text-sm font-semibold transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 aria-invalid:ring-destructive/20 aria-invalid:border-destructive ${focusRing}`,\n {\n variants: {\n variant: {\n default:\n 'bg-primary text-primary-foreground shadow-xl hover:bg-primary/90 hover:scale-[1.02] active:scale-[0.98]',\n destructive:\n 'bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/40',\n outline: `${glassControl} ${controlFill} hover:bg-accent hover:text-accent-foreground`,\n secondary: `${glassControl} bg-secondary/80 text-secondary-foreground hover:bg-secondary`,\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-11 px-4 has-[>svg]:px-3',\n sm: 'h-9 gap-1.5 rounded-xl px-3 has-[>svg]:px-2.5',\n lg: 'h-12 px-6 has-[>svg]:px-5 text-base',\n icon: 'size-11',\n 'icon-sm': 'size-9 rounded-xl',\n 'icon-lg': 'size-12',\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}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : '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 * as React from 'react';\n\nimport { fieldSurface, focusRing } from '@/lib/language';\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n `h-11 min-w-0 px-4 text-sm font-medium flex w-full transition-all placeholder:text-muted-foreground focus:bg-muted disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 ${fieldSurface} ${focusRing}`,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/blocks/tour/gate.ts","../src/blocks/tour/types.ts","../src/blocks/tour/tour.tsx"],"names":[],"mappings":"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","file":"chunk-UXL33CZ4.js","sourcesContent":["import type {\n TourBreakpoint,\n TourDefinition,\n TourStep,\n} from '@/blocks/tour/types';\n\nexport function stepsForBreakpoint(\n steps: TourStep[],\n breakpoint: TourBreakpoint,\n): TourStep[] {\n return steps.filter(\n (step) => !step.breakpoints || step.breakpoints.includes(breakpoint),\n );\n}\n\nexport function resolveSteps(\n steps: TourStep[],\n isPresent: (target: string) => boolean,\n): TourStep[] {\n return steps.filter((step) => isPresent(step.target));\n}\n\nexport function shouldStartTour(input: {\n definition: TourDefinition;\n seen: Record<string, number>;\n resolvedStepCount: number;\n force?: boolean;\n}): boolean {\n if (input.resolvedStepCount === 0) {\n return false;\n }\n\n if (input.force) {\n return true;\n }\n\n return input.definition.version > (input.seen[input.definition.id] ?? 0);\n}\n","export type TourBreakpoint = 'mobile' | 'desktop';\n\nexport type TourOutcome = 'completed' | 'skipped' | 'dismissed';\n\nexport interface TourStep {\n target: string;\n title: string;\n description: string;\n breakpoints?: TourBreakpoint[];\n}\n\nexport interface TourDefinition {\n id: string;\n version: number;\n steps: TourStep[];\n}\n\nexport interface TourProgress {\n tour: string;\n version: number;\n lastStep: number;\n outcome: TourOutcome;\n}\n\nexport interface TourLabels {\n next: string;\n previous: string;\n done: string;\n progress: string;\n}\n\nexport const DEFAULT_TOUR_LABELS: TourLabels = {\n next: 'Next',\n previous: 'Previous',\n done: 'Done',\n progress: '{{current}} of {{total}}',\n};\n","import { driver, type Driver } from 'driver.js';\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type PropsWithChildren,\n type ReactElement,\n} from 'react';\n\nimport 'driver.js/dist/driver.css';\n\nimport { shouldStartTour, stepsForBreakpoint } from '@/blocks/tour/gate';\nimport {\n DEFAULT_TOUR_LABELS,\n type TourBreakpoint,\n type TourDefinition,\n type TourLabels,\n type TourOutcome,\n type TourProgress,\n} from '@/blocks/tour/types';\n\ninterface TourControllerValue {\n startTour: (\n definition: TourDefinition,\n options?: { force?: boolean },\n ) => void;\n}\n\nconst TourContext = createContext<TourControllerValue | null>(null);\n\nconst MOBILE_BREAKPOINT = 768;\n\nconst WAIT_FOR_TARGET = 4000;\n\nfunction currentBreakpoint(): TourBreakpoint {\n return window.innerWidth < MOBILE_BREAKPOINT ? 'mobile' : 'desktop';\n}\n\nfunction outcomeOf(instance: Driver, highlighted: boolean): TourOutcome {\n if (!highlighted) {\n return 'dismissed';\n }\n\n return instance.hasNextStep() ? 'skipped' : 'completed';\n}\n\nexport function TourProvider({\n children,\n seen,\n onProgress,\n labels,\n}: PropsWithChildren<{\n seen: Record<string, number>;\n onProgress: (progress: TourProgress) => void;\n labels?: Partial<TourLabels>;\n}>): ReactElement {\n const seenRef = useRef(seen);\n seenRef.current = seen;\n\n const onProgressRef = useRef(onProgress);\n onProgressRef.current = onProgress;\n\n const driverRef = useRef<Driver | null>(null);\n const activeRef = useRef<{\n definition: TourDefinition;\n lastStep: number;\n highlighted: boolean;\n } | null>(null);\n\n const resolvedLabels = useMemo(\n () => ({ ...DEFAULT_TOUR_LABELS, ...labels }),\n [labels],\n );\n\n const report = useCallback((outcome: TourOutcome): void => {\n const active = activeRef.current;\n\n if (!active) {\n return;\n }\n\n activeRef.current = null;\n\n onProgressRef.current({\n tour: active.definition.id,\n version: active.definition.version,\n lastStep: active.lastStep,\n outcome,\n });\n }, []);\n\n const startTour = useCallback(\n (definition: TourDefinition, options?: { force?: boolean }): void => {\n const alreadyRunning =\n activeRef.current?.definition.id === definition.id;\n\n if (alreadyRunning && !options?.force) {\n return;\n }\n\n const steps = stepsForBreakpoint(\n definition.steps,\n currentBreakpoint(),\n );\n\n const allowed = shouldStartTour({\n definition,\n seen: seenRef.current,\n resolvedStepCount: steps.length,\n force: options?.force,\n });\n\n if (!allowed) {\n return;\n }\n\n driverRef.current?.destroy();\n activeRef.current = { definition, lastStep: 0, highlighted: false };\n\n const instance = driver({\n showProgress: true,\n progressText: resolvedLabels.progress,\n nextBtnText: resolvedLabels.next,\n prevBtnText: resolvedLabels.previous,\n doneBtnText: resolvedLabels.done,\n popoverClass: 'akira-tour',\n waitForElement: WAIT_FOR_TARGET,\n skipMissingElement: true,\n steps: steps.map((step) => ({\n element: step.target,\n popover: {\n title: step.title,\n description: step.description,\n },\n })),\n onHighlightStarted: () => {\n if (activeRef.current) {\n activeRef.current.lastStep =\n instance.getActiveIndex() ?? 0;\n activeRef.current.highlighted = true;\n }\n },\n onDestroyStarted: () => {\n report(\n outcomeOf(\n instance,\n activeRef.current?.highlighted ?? false,\n ),\n );\n instance.destroy();\n },\n });\n\n driverRef.current = instance;\n instance.drive();\n },\n [report, resolvedLabels],\n );\n\n useEffect(\n () => () => {\n report('dismissed');\n driverRef.current?.destroy();\n driverRef.current = null;\n },\n [report],\n );\n\n const value = useMemo(() => ({ startTour }), [startTour]);\n\n return (\n <TourContext.Provider value={value}>{children}</TourContext.Provider>\n );\n}\n\nexport function useTourController(): TourControllerValue {\n const context = useContext(TourContext);\n\n if (!context) {\n throw new Error(\n 'useTourController must be used inside a TourProvider.',\n );\n }\n\n return context;\n}\n\nexport function useTour(\n definition: TourDefinition,\n options?: { enabled?: boolean },\n): { restart: () => void } {\n const { startTour } = useTourController();\n const enabled = options?.enabled ?? true;\n\n const definitionRef = useRef(definition);\n definitionRef.current = definition;\n\n useEffect(() => {\n if (!enabled) {\n return;\n }\n\n const frame = window.requestAnimationFrame(() =>\n startTour(definitionRef.current),\n );\n\n return () => window.cancelAnimationFrame(frame);\n }, [definition.id, definition.version, enabled, startTour]);\n\n return { restart: () => startTour(definitionRef.current, { force: true }) };\n}\n"]}
@@ -1,149 +0,0 @@
1
- import * as React from 'react';
2
- import { ReactNode } from 'react';
3
- import { Column, ColumnDef, Row } from '@tanstack/react-table';
4
- import { I as IconComponent } from './types-Cno1_Ijx.js';
5
-
6
- interface ComboboxOption {
7
- value: string;
8
- label: string;
9
- }
10
- interface ComboboxLabels {
11
- placeholder: string;
12
- searchPlaceholder: string;
13
- emptyText: string;
14
- }
15
- interface ComboboxProps {
16
- id?: string;
17
- value: string;
18
- options: ComboboxOption[];
19
- onChange: (value: string) => void;
20
- placeholder?: ComboboxLabels['placeholder'];
21
- searchPlaceholder?: ComboboxLabels['searchPlaceholder'];
22
- emptyText?: ComboboxLabels['emptyText'];
23
- disabled?: boolean;
24
- invalid?: boolean;
25
- }
26
- declare function Combobox({ id, value, options, onChange, placeholder, searchPlaceholder, emptyText, disabled, invalid, }: ComboboxProps): React.JSX.Element;
27
-
28
- interface ConfirmDialogLabels {
29
- title: string;
30
- description: string;
31
- confirmText: string;
32
- cancelText: string;
33
- }
34
- interface ConfirmDialogProps {
35
- open: boolean;
36
- onOpenChange: (open: boolean) => void;
37
- title?: ConfirmDialogLabels['title'];
38
- description?: ConfirmDialogLabels['description'] | ReactNode;
39
- confirmText?: ConfirmDialogLabels['confirmText'];
40
- cancelText?: ConfirmDialogLabels['cancelText'];
41
- variant?: 'destructive' | 'default';
42
- processing?: boolean;
43
- onConfirm: () => void;
44
- onCancel?: () => void;
45
- }
46
- declare function ConfirmDialog({ open, onOpenChange, title, description, confirmText, cancelText, variant, processing, onConfirm, onCancel, }: ConfirmDialogProps): React.JSX.Element;
47
-
48
- interface DataTableFilter {
49
- columnId: string;
50
- label: string;
51
- options: {
52
- label: string;
53
- value: string;
54
- }[];
55
- }
56
- interface DataTableServerFilter {
57
- paramKey: string;
58
- label: string;
59
- options: {
60
- label: string;
61
- value: string;
62
- }[];
63
- }
64
- interface DataTableFacetedFilterLabels {
65
- noOptionsLabel: string;
66
- }
67
- declare function FacetedFilter<TData>({ column, filter, noOptionsLabel, }: {
68
- column?: Column<TData, unknown>;
69
- filter: DataTableFilter;
70
- noOptionsLabel?: DataTableFacetedFilterLabels['noOptionsLabel'];
71
- }): React.JSX.Element;
72
- declare function ServerFacetedFilter({ filter, selected, onChange, noOptionsLabel, }: {
73
- filter: DataTableServerFilter;
74
- selected: string[];
75
- onChange: (values: string[]) => void;
76
- noOptionsLabel?: DataTableFacetedFilterLabels['noOptionsLabel'];
77
- }): React.JSX.Element;
78
-
79
- interface DataTableRowAction<TData> {
80
- label: string;
81
- icon?: IconComponent;
82
- variant?: 'default' | 'destructive';
83
- onClick: (row: TData) => void;
84
- }
85
- declare function RowActionsMenu<TData>({ row, actions, }: {
86
- row: TData;
87
- actions: DataTableRowAction<TData>[];
88
- }): React.JSX.Element;
89
-
90
- interface DataTableLabels {
91
- searchPlaceholder: string;
92
- emptyLabel: string;
93
- createLabel: string;
94
- clearFiltersLabel: string;
95
- paginationLabel: (page: number, pages: number) => string;
96
- noOptionsLabel: string;
97
- totalLabel: (total: number) => string;
98
- }
99
- interface DataTableProps<TData, TValue> {
100
- columns: ColumnDef<TData, TValue>[];
101
- data: TData[];
102
- searchPlaceholder?: DataTableLabels['searchPlaceholder'];
103
- emptyLabel?: DataTableLabels['emptyLabel'];
104
- createLabel?: DataTableLabels['createLabel'];
105
- clearFiltersLabel?: DataTableLabels['clearFiltersLabel'];
106
- paginationLabel?: DataTableLabels['paginationLabel'];
107
- noOptionsLabel?: DataTableLabels['noOptionsLabel'];
108
- totalLabel?: DataTableLabels['totalLabel'];
109
- searchKey?: string;
110
- pageSize?: number;
111
- pageSizeOptions?: number[];
112
- onPageSizeChange?: (size: number) => void;
113
- filters?: DataTableFilter[];
114
- serverFilters?: DataTableServerFilter[];
115
- filterValues?: Record<string, string[]>;
116
- onFilterChange?: (paramKey: string, values: string[]) => void;
117
- canClearFilters?: boolean;
118
- onClearFilters?: () => void;
119
- toolbarExtra?: ReactNode;
120
- toolbarAction?: ReactNode;
121
- renderRow?: (row: Row<TData>) => ReactNode;
122
- onRowClick?: (row: TData) => void;
123
- isRowActive?: (row: TData) => boolean;
124
- rowActions?: DataTableRowAction<TData>[];
125
- searchValue?: string;
126
- onSearchChange?: (value: string) => void;
127
- manualPagination?: boolean;
128
- pageCount?: number;
129
- pageIndex?: number;
130
- total?: number;
131
- onPageChange?: (pageIndex: number) => void;
132
- onCreate?: () => void;
133
- }
134
- declare function DataTable<TData, TValue>({ columns, data, searchKey, searchPlaceholder, pageSize, pageSizeOptions, onPageSizeChange, filters, serverFilters, filterValues, onFilterChange, canClearFilters, onClearFilters, toolbarExtra, toolbarAction, emptyLabel, clearFiltersLabel, paginationLabel, noOptionsLabel, totalLabel, renderRow, onRowClick, isRowActive, rowActions, searchValue, onSearchChange, manualPagination, pageCount, pageIndex, total, onPageChange, onCreate, createLabel, }: DataTableProps<TData, TValue>): React.JSX.Element;
135
-
136
- interface DateRangeFilterLabels {
137
- emptyLabel: string;
138
- dateFormat: string;
139
- }
140
- declare function DateRangeFilter({ from, to, onChange, emptyLabel, dateFormat, }: {
141
- from?: string;
142
- to?: string;
143
- onChange: (range: {
144
- from?: string;
145
- to?: string;
146
- }) => void;
147
- } & Partial<DateRangeFilterLabels>): React.JSX.Element;
148
-
149
- export { Combobox as C, DataTable as D, FacetedFilter as F, RowActionsMenu as R, ServerFacetedFilter as S, type ComboboxLabels as a, type ComboboxOption as b, ConfirmDialog as c, type ConfirmDialogLabels as d, type DataTableFacetedFilterLabels as e, type DataTableFilter as f, type DataTableLabels as g, type DataTableRowAction as h, type DataTableServerFilter as i, DateRangeFilter as j, type DateRangeFilterLabels as k };