@akira-io/ui 1.3.1 → 2.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 (78) hide show
  1. package/README.md +2 -2
  2. package/dist/blocks.d.ts +100 -10
  3. package/dist/blocks.js +547 -270
  4. package/dist/blocks.js.map +1 -1
  5. package/dist/{chunk-3Z2VGVPI.js → chunk-53V4J7MC.js} +17 -7
  6. package/dist/chunk-53V4J7MC.js.map +1 -0
  7. package/dist/chunk-BH3B26DK.js +394 -0
  8. package/dist/chunk-BH3B26DK.js.map +1 -0
  9. package/dist/chunk-BP2YDMMI.js +29 -0
  10. package/dist/chunk-BP2YDMMI.js.map +1 -0
  11. package/dist/chunk-BR3JI3KN.js +458 -0
  12. package/dist/chunk-BR3JI3KN.js.map +1 -0
  13. package/dist/{chunk-YBXRJSR3.js → chunk-CAUTXZ4U.js} +15 -7
  14. package/dist/chunk-CAUTXZ4U.js.map +1 -0
  15. package/dist/{chunk-I6VVCFZ2.js → chunk-DPLCEU34.js} +342 -238
  16. package/dist/chunk-DPLCEU34.js.map +1 -0
  17. package/dist/chunk-IQMRJXEO.js +5 -4
  18. package/dist/chunk-IQMRJXEO.js.map +1 -1
  19. package/dist/chunk-L2H5GIF7.js +5 -4
  20. package/dist/chunk-L2H5GIF7.js.map +1 -1
  21. package/dist/{chunk-2V6HUWST.js → chunk-NKPFIA32.js} +19 -6
  22. package/dist/chunk-NKPFIA32.js.map +1 -0
  23. package/dist/{chunk-QNF4LJVT.js → chunk-OS7YY5R4.js} +8 -6
  24. package/dist/chunk-OS7YY5R4.js.map +1 -0
  25. package/dist/{chunk-IDNOI4OK.js → chunk-PCYYU332.js} +15 -8
  26. package/dist/chunk-PCYYU332.js.map +1 -0
  27. package/dist/{chunk-KHOA4TEI.js → chunk-PPWJK5T3.js} +60 -25
  28. package/dist/chunk-PPWJK5T3.js.map +1 -0
  29. package/dist/{chunk-N2KIFFI7.js → chunk-QZRSQVCN.js} +30 -34
  30. package/dist/chunk-QZRSQVCN.js.map +1 -0
  31. package/dist/{chunk-SZUXATOF.js → chunk-XLAOE5MV.js} +170 -76
  32. package/dist/chunk-XLAOE5MV.js.map +1 -0
  33. package/dist/{chunk-B3L6PRLX.js → chunk-ZQXZ4UGE.js} +208 -100
  34. package/dist/chunk-ZQXZ4UGE.js.map +1 -0
  35. package/dist/code.d.ts +2 -2
  36. package/dist/code.js +96 -52
  37. package/dist/code.js.map +1 -1
  38. package/dist/{context-OwSoVEri.d.ts → context-2wTOwxCk.d.ts} +13 -5
  39. package/dist/editor.d.ts +1 -1
  40. package/dist/editor.js +135 -52
  41. package/dist/editor.js.map +1 -1
  42. package/dist/{field-DWm5NXeV.d.ts → field-C1TdmC2t.d.ts} +1 -1
  43. package/dist/index.d.ts +15 -12
  44. package/dist/index.js +1105 -633
  45. package/dist/index.js.map +1 -1
  46. package/dist/inertia.d.ts +11 -3
  47. package/dist/inertia.js +66 -12
  48. package/dist/inertia.js.map +1 -1
  49. package/dist/{input-Dxnsxi-f.d.ts → input-B4uEClxB.d.ts} +1 -1
  50. package/dist/{json-viewer-BARA2RCW.d.ts → json-viewer-Bssv9mTD.d.ts} +1 -1
  51. package/dist/locales/fr.d.ts +44 -0
  52. package/dist/locales/fr.js +248 -0
  53. package/dist/locales/fr.js.map +1 -0
  54. package/dist/locales/pt.d.ts +10 -9
  55. package/dist/locales/pt.js +40 -3
  56. package/dist/locales/pt.js.map +1 -1
  57. package/dist/shells.d.ts +46 -5
  58. package/dist/shells.js +211 -71
  59. package/dist/shells.js.map +1 -1
  60. package/dist/{sidebar-Bp6Q46j-.d.ts → sidebar-BLL2tgTt.d.ts} +2 -2
  61. package/dist/types-1LUmNJf_.d.ts +41 -0
  62. package/dist/{types-cmBL8zOc.d.ts → types-CMZRvMV5.d.ts} +1 -1
  63. package/dist/{types-B-eGPoFD.d.ts → types-CfAUvz--.d.ts} +1 -1
  64. package/package.json +8 -2
  65. package/theme.css +11 -0
  66. package/dist/chunk-2V6HUWST.js.map +0 -1
  67. package/dist/chunk-3Z2VGVPI.js.map +0 -1
  68. package/dist/chunk-B3L6PRLX.js.map +0 -1
  69. package/dist/chunk-I6VVCFZ2.js.map +0 -1
  70. package/dist/chunk-IDNOI4OK.js.map +0 -1
  71. package/dist/chunk-KHOA4TEI.js.map +0 -1
  72. package/dist/chunk-N2KIFFI7.js.map +0 -1
  73. package/dist/chunk-NGMG2UWX.js +0 -172
  74. package/dist/chunk-NGMG2UWX.js.map +0 -1
  75. package/dist/chunk-QNF4LJVT.js.map +0 -1
  76. package/dist/chunk-SZUXATOF.js.map +0 -1
  77. package/dist/chunk-YBXRJSR3.js.map +0 -1
  78. package/dist/types-u1qfmJQi.d.ts +0 -28
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/dropdown-menu.tsx","../src/components/ui/avatar.tsx","../src/components/ui/breadcrumb.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/icon.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"],"sourcesContent":["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';\nimport type { SlotNameProps } from '@/types';\n\nfunction DropdownMenu({\n modal = false,\n slotName = 'dropdown-menu',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root> & SlotNameProps) {\n return (\n <DropdownMenuPrimitive.Root\n modal={modal}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction DropdownMenuPortal({\n slotName = 'dropdown-menu-portal',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal> & SlotNameProps) {\n return <DropdownMenuPrimitive.Portal {...props} data-slot={slotName} />;\n}\n\nfunction DropdownMenuTrigger({\n slotName = 'dropdown-menu-trigger',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger> & SlotNameProps) {\n return <DropdownMenuPrimitive.Trigger {...props} data-slot={slotName} />;\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n slotName = 'dropdown-menu-content',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content> & SlotNameProps) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.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 data-slot={slotName}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({\n slotName = 'dropdown-menu-group',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group> & SlotNameProps) {\n return <DropdownMenuPrimitive.Group {...props} data-slot={slotName} />;\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n slotName = 'dropdown-menu-item',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n} & SlotNameProps) {\n return (\n <DropdownMenuPrimitive.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 data-slot={slotName}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n slotName = 'dropdown-menu-checkbox-item',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> &\n SlotNameProps) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\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 data-slot={slotName}\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 slotName = 'dropdown-menu-radio-group',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup> &\n SlotNameProps) {\n return <DropdownMenuPrimitive.RadioGroup {...props} data-slot={slotName} />;\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n slotName = 'dropdown-menu-radio-item',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem> &\n SlotNameProps) {\n return (\n <DropdownMenuPrimitive.RadioItem\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 data-slot={slotName}\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 slotName = 'dropdown-menu-label',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n} & SlotNameProps) {\n return (\n <DropdownMenuPrimitive.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 data-slot={slotName}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n slotName = 'dropdown-menu-separator',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator> &\n SlotNameProps) {\n return (\n <DropdownMenuPrimitive.Separator\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction DropdownMenuShortcut({\n className,\n slotName = 'dropdown-menu-shortcut',\n ...props\n}: React.ComponentProps<'span'> & SlotNameProps) {\n return (\n <span\n className={cn(\n 'text-xs tracking-widest ml-auto text-muted-foreground',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction DropdownMenuSub({\n slotName = 'dropdown-menu-sub',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub> & SlotNameProps) {\n return <DropdownMenuPrimitive.Sub {...props} data-slot={slotName} />;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n slotName = 'dropdown-menu-sub-trigger',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n} & SlotNameProps) {\n return (\n <DropdownMenuPrimitive.SubTrigger\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 data-slot={slotName}\n >\n {children}\n <ChevronRightIcon className=\"size-4 ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n slotName = 'dropdown-menu-sub-content',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent> &\n SlotNameProps) {\n return (\n <DropdownMenuPrimitive.SubContent\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 data-slot={slotName}\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 * as AvatarPrimitive from '@radix-ui/react-avatar';\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nfunction Avatar({\n className,\n slotName = 'avatar',\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & SlotNameProps) {\n return (\n <AvatarPrimitive.Root\n className={cn(\n 'size-8 relative flex shrink-0 overflow-hidden rounded-full',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction AvatarImage({\n className,\n slotName = 'avatar-image',\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image> & SlotNameProps) {\n return (\n <AvatarPrimitive.Image\n className={cn('aspect-square size-full', className)}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction AvatarFallback({\n className,\n slotName = 'avatar-fallback',\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback> & SlotNameProps) {\n return (\n <AvatarPrimitive.Fallback\n className={cn(\n 'flex size-full items-center justify-center rounded-full bg-muted',\n className,\n )}\n {...props}\n data-slot={slotName}\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';\nimport type { SlotNameProps } from '@/types';\n\nfunction Breadcrumb({\n slotName = 'breadcrumb',\n ...props\n}: React.ComponentProps<'nav'> & SlotNameProps) {\n return <nav aria-label=\"breadcrumb\" {...props} data-slot={slotName} />;\n}\n\nfunction BreadcrumbList({\n className,\n slotName = 'breadcrumb-list',\n ...props\n}: React.ComponentProps<'ol'> & SlotNameProps) {\n return (\n <ol\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 data-slot={slotName}\n />\n );\n}\n\nfunction BreadcrumbItem({\n className,\n slotName = 'breadcrumb-item',\n ...props\n}: React.ComponentProps<'li'> & SlotNameProps) {\n return (\n <li\n className={cn('gap-1.5 inline-flex items-center', className)}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n slotName = 'breadcrumb-link',\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n} & SlotNameProps) {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n className={cn('transition-colors hover:text-foreground', className)}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction BreadcrumbPage({\n className,\n slotName = 'breadcrumb-page',\n ...props\n}: React.ComponentProps<'span'> & SlotNameProps) {\n return (\n <span\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('font-semibold text-foreground', className)}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n slotName = 'breadcrumb-separator',\n ...props\n}: React.ComponentProps<'li'> & SlotNameProps) {\n return (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n data-slot={slotName}\n >\n {children ?? <ChevronRight />}\n </li>\n );\n}\n\nfunction BreadcrumbEllipsis({\n className,\n slotName = 'breadcrumb-ellipsis',\n ...props\n}: React.ComponentProps<'span'> & SlotNameProps) {\n return (\n <span\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 data-slot={slotName}\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 type { SlotNameProps } from '@/types';\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\n\nfunction Collapsible({\n slotName = 'collapsible',\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root> & SlotNameProps) {\n return <CollapsiblePrimitive.Root {...props} data-slot={slotName} />;\n}\n\nfunction CollapsibleTrigger({\n slotName = 'collapsible-trigger',\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger> &\n SlotNameProps) {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction CollapsibleContent({\n slotName = 'collapsible-content',\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent> &\n SlotNameProps) {\n return (\n <CollapsiblePrimitive.CollapsibleContent\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nexport { Collapsible, CollapsibleContent, CollapsibleTrigger };\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 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';\nimport type { SlotNameProps } from '@/types';\n\nfunction Sheet({\n preserveScroll = false,\n onOpenChange: onOpenChangeProp,\n slotName = 'sheet',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Root> & {\n preserveScroll?: boolean;\n} & SlotNameProps) {\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 {...props}\n onOpenChange={onOpenChange}\n data-slot={slotName}\n />\n );\n}\n\nfunction SheetTrigger({\n slotName = 'sheet-trigger',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger> & SlotNameProps) {\n return <SheetPrimitive.Trigger {...props} data-slot={slotName} />;\n}\n\nfunction SheetClose({\n slotName = 'sheet-close',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close> & SlotNameProps) {\n return <SheetPrimitive.Close {...props} data-slot={slotName} />;\n}\n\nfunction SheetPortal({\n slotName = 'sheet-portal',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal> & SlotNameProps) {\n return <SheetPrimitive.Portal {...props} data-slot={slotName} />;\n}\n\nfunction SheetOverlay({\n className,\n slotName = 'sheet-overlay',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay> & SlotNameProps) {\n return (\n <SheetPrimitive.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 data-slot={slotName}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n slotName = 'sheet-content',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left';\n} & SlotNameProps) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.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 data-slot={slotName}\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({\n className,\n slotName = 'sheet-header',\n ...props\n}: React.ComponentProps<'div'> & SlotNameProps) {\n return (\n <div\n className={cn('gap-1.5 p-4 flex flex-col', className)}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction SheetFooter({\n className,\n slotName = 'sheet-footer',\n ...props\n}: React.ComponentProps<'div'> & SlotNameProps) {\n return (\n <div\n className={cn('gap-2 p-4 mt-auto flex flex-col', className)}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction SheetTitle({\n className,\n slotName = 'sheet-title',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title> & SlotNameProps) {\n return (\n <SheetPrimitive.Title\n className={cn('font-semibold text-foreground', className)}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n slotName = 'sheet-description',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description> & SlotNameProps) {\n return (\n <SheetPrimitive.Description\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n data-slot={slotName}\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';\nimport type { SlotNameProps } from '@/types';\n\nfunction Skeleton({\n className,\n slotName = 'skeleton',\n ...props\n}: React.ComponentProps<'div'> & SlotNameProps) {\n return (\n <div\n className={cn('animate-pulse rounded-xl bg-muted', className)}\n {...props}\n data-slot={slotName}\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';\nimport type { SlotNameProps } from '@/types';\n\nfunction TooltipProvider({\n delayDuration = 0,\n slotName = 'tooltip-provider',\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider> & SlotNameProps) {\n return (\n <TooltipPrimitive.Provider\n delayDuration={delayDuration}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction Tooltip({\n slotName = 'tooltip',\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root> & SlotNameProps) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root {...props} data-slot={slotName} />\n </TooltipProvider>\n );\n}\n\nfunction TooltipTrigger({\n slotName = 'tooltip-trigger',\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger> & SlotNameProps) {\n return <TooltipPrimitive.Trigger {...props} data-slot={slotName} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 4,\n children,\n slotName = 'tooltip-content',\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content> & SlotNameProps) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.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 data-slot={slotName}\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';\nimport type { SlotNameProps } from '@/types';\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 slotName = 'sidebar-wrapper',\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n} & SlotNameProps) {\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 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 data-slot={slotName}\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 slotName = 'sidebar',\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n} & SlotNameProps) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n className={cn(\n 'flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground',\n className,\n )}\n {...props}\n data-slot={slotName}\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-mobile=\"true\"\n className=\"p-0 w-(--sidebar-width) rounded-none 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 slotName={slotName}\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={slotName}\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 slotName = 'sidebar-trigger',\n ...props\n}: React.ComponentProps<typeof Button> & SlotNameProps) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-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 slotName={slotName}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({\n className,\n slotName = 'sidebar-rail',\n ...props\n}: React.ComponentProps<'button'> & SlotNameProps) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-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 data-slot={slotName}\n />\n );\n}\n\nfunction SidebarInset({\n className,\n slotName = 'sidebar-inset',\n ...props\n}: React.ComponentProps<'main'> & SlotNameProps) {\n return (\n <main\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 data-slot={slotName}\n />\n );\n}\n\nfunction SidebarInput({\n className,\n slotName = 'sidebar-input',\n ...props\n}: React.ComponentProps<typeof Input> & SlotNameProps) {\n return (\n <Input\n data-sidebar=\"input\"\n className={cn('h-11 w-full bg-background shadow-none', className)}\n {...props}\n slotName={slotName}\n />\n );\n}\n\nfunction SidebarHeader({\n className,\n slotName = 'sidebar-header',\n ...props\n}: React.ComponentProps<'div'> & SlotNameProps) {\n return (\n <div\n data-sidebar=\"header\"\n className={cn(\n 'gap-2 p-2 group-data-[collapsible=icon]:px-0 flex flex-col',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction SidebarFooter({\n className,\n slotName = 'sidebar-footer',\n ...props\n}: React.ComponentProps<'div'> & SlotNameProps) {\n return (\n <div\n data-sidebar=\"footer\"\n className={cn(\n 'gap-2 p-2 group-data-[collapsible=icon]:px-0 flex flex-col pb-[max(0.5rem,env(safe-area-inset-bottom))]',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction SidebarSeparator({\n className,\n slotName = 'sidebar-separator',\n ...props\n}: React.ComponentProps<typeof Separator> & SlotNameProps) {\n return (\n <Separator\n data-sidebar=\"separator\"\n className={cn('mx-2 w-auto bg-sidebar-border', className)}\n {...props}\n slotName={slotName}\n />\n );\n}\n\nfunction SidebarContent({\n className,\n slotName = 'sidebar-content',\n ...props\n}: React.ComponentProps<'div'> & SlotNameProps) {\n return (\n <div\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 data-slot={slotName}\n />\n );\n}\n\nfunction SidebarGroup({\n className,\n slotName = 'sidebar-group',\n ...props\n}: React.ComponentProps<'div'> & SlotNameProps) {\n return (\n <div\n data-sidebar=\"group\"\n className={cn(\n 'min-w-0 p-2 group-data-[collapsible=icon]:px-0 relative flex w-full flex-col',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n slotName = 'sidebar-group-label',\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean } & SlotNameProps) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\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:outline-1 focus-visible:outline-offset-0 focus-visible:outline-ring focus-visible:outline-solid [&>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 data-slot={slotName}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n slotName = 'sidebar-group-action',\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean } & SlotNameProps) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\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:outline-1 focus-visible:outline-offset-0 focus-visible:outline-ring focus-visible:outline-solid [&>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 data-slot={slotName}\n />\n );\n}\n\nfunction SidebarGroupContent({\n className,\n slotName = 'sidebar-group-content',\n ...props\n}: React.ComponentProps<'div'> & SlotNameProps) {\n return (\n <div\n data-sidebar=\"group-content\"\n className={cn('text-sm w-full', className)}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction SidebarMenu({\n className,\n slotName = 'sidebar-menu',\n ...props\n}: React.ComponentProps<'ul'> & SlotNameProps) {\n return (\n <ul\n data-sidebar=\"menu\"\n className={cn(\n 'min-w-0 gap-1 flex w-full flex-col group-data-[collapsible=icon]:items-center',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction SidebarMenuItem({\n className,\n slotName = 'sidebar-menu-item',\n ...props\n}: React.ComponentProps<'li'> & SlotNameProps) {\n return (\n <li\n data-sidebar=\"menu-item\"\n className={cn('group/menu-item relative', className)}\n {...props}\n data-slot={slotName}\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:outline-solid focus-visible:outline-1 focus-visible:outline-offset-0 focus-visible:outline-ring 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]:justify-center group-data-[collapsible=icon]:gap-0 group-data-[collapsible=icon]:p-2.5! [&>span:last-child]:truncate group-data-[collapsible=icon]:[&>span:last-child]:hidden [&>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',\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 slotName = 'sidebar-menu-button',\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants> &\n SlotNameProps) {\n const Comp = asChild ? Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\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 data-slot={slotName}\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 slotName = 'sidebar-menu-action',\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n} & SlotNameProps) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\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:outline-1 focus-visible:outline-offset-0 focus-visible:outline-ring focus-visible:outline-solid [&>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 data-slot={slotName}\n />\n );\n}\n\nfunction SidebarMenuBadge({\n className,\n slotName = 'sidebar-menu-badge',\n ...props\n}: React.ComponentProps<'div'> & SlotNameProps) {\n return (\n <div\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 data-slot={slotName}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n slotName = 'sidebar-menu-skeleton',\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n} & SlotNameProps) {\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-sidebar=\"menu-skeleton\"\n className={cn(\n 'h-8 gap-2 px-2 rounded-xl flex items-center',\n className,\n )}\n {...props}\n data-slot={slotName}\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({\n className,\n slotName = 'sidebar-menu-sub',\n ...props\n}: React.ComponentProps<'ul'> & SlotNameProps) {\n return (\n <ul\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 data-slot={slotName}\n />\n );\n}\n\nfunction SidebarMenuSubItem({\n className,\n slotName = 'sidebar-menu-sub-item',\n ...props\n}: React.ComponentProps<'li'> & SlotNameProps) {\n return (\n <li\n data-sidebar=\"menu-sub-item\"\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n slotName = 'sidebar-menu-sub-button',\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n} & SlotNameProps) {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\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:outline-1 focus-visible:outline-offset-0 focus-visible:outline-ring focus-visible:outline-solid 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 data-slot={slotName}\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"],"mappings":"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","names":["jsx","jsx","jsxs","jsx","CollapsibleTrigger","CollapsibleContent","jsx","jsx","jsxs","jsx","jsx","jsxs","Slot","React","jsx","jsxs","open","Slot"]}
package/dist/code.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { S as SlotNameProps } from './types-cmBL8zOc.js';
3
- export { C as CodeBlock, a as CodeBlockLabels, b as CodeBlockProps, J as JsonViewer, c as JsonViewerLabels, d as JsonViewerProps, e as codeBlockLabels, j as jsonViewerLabels } from './json-viewer-BARA2RCW.js';
2
+ import { S as SlotNameProps } from './types-CMZRvMV5.js';
3
+ export { C as CodeBlock, a as CodeBlockLabels, b as CodeBlockProps, J as JsonViewer, c as JsonViewerLabels, d as JsonViewerProps, e as codeBlockLabels, j as jsonViewerLabels } from './json-viewer-Bssv9mTD.js';
4
4
  import '@tanstack/react-table';
5
5
  import 'lucide-react';
6
6
 
package/dist/code.js CHANGED
@@ -1,10 +1,24 @@
1
- import { CopyButton } from './chunk-IDNOI4OK.js';
2
- import { useUiLabels } from './chunk-QNF4LJVT.js';
3
- import { cn, compactRadius, controlFill, elevatedSurface, nestedSurfaceReset, Button, focusRing } from './chunk-KHOA4TEI.js';
4
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
- import * as React2 from 'react';
6
- import { FileCode, ChevronRight } from 'lucide-react';
1
+ 'use client';
7
2
 
3
+ "use client";
4
+ import {
5
+ CopyButton
6
+ } from "./chunk-PCYYU332.js";
7
+ import {
8
+ useUiLabels
9
+ } from "./chunk-OS7YY5R4.js";
10
+ import {
11
+ Button,
12
+ cn,
13
+ compactRadius,
14
+ controlFill,
15
+ elevatedSurface,
16
+ focusRing,
17
+ nestedSurfaceReset
18
+ } from "./chunk-PPWJK5T3.js";
19
+
20
+ // src/components/ui/code.tsx
21
+ import { jsx } from "react/jsx-runtime";
8
22
  function Code({
9
23
  className,
10
24
  slotName = "code",
@@ -24,6 +38,13 @@ function Code({
24
38
  }
25
39
  );
26
40
  }
41
+
42
+ // src/components/ui/code-block.tsx
43
+ import * as React2 from "react";
44
+
45
+ // src/components/ui/code-block-header.tsx
46
+ import { FileCode } from "lucide-react";
47
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
27
48
  function CodeBlockHeader({
28
49
  filename,
29
50
  language,
@@ -38,8 +59,8 @@ function CodeBlockHeader({
38
59
  className: "gap-2 px-4 py-2 flex items-center border-b border-border",
39
60
  "data-slot": slotName,
40
61
  children: [
41
- /* @__PURE__ */ jsx(FileCode, { className: "size-4 shrink-0 text-muted-foreground" }),
42
- /* @__PURE__ */ jsx(
62
+ /* @__PURE__ */ jsx2(FileCode, { className: "size-4 shrink-0 text-muted-foreground" }),
63
+ /* @__PURE__ */ jsx2(
43
64
  "span",
44
65
  {
45
66
  "data-slot": "code-block-filename",
@@ -47,7 +68,7 @@ function CodeBlockHeader({
47
68
  children: filename
48
69
  }
49
70
  ),
50
- language !== void 0 && /* @__PURE__ */ jsx(
71
+ language !== void 0 && /* @__PURE__ */ jsx2(
51
72
  "span",
52
73
  {
53
74
  "data-slot": "code-block-language",
@@ -55,7 +76,7 @@ function CodeBlockHeader({
55
76
  children: language
56
77
  }
57
78
  ),
58
- /* @__PURE__ */ jsx(
79
+ /* @__PURE__ */ jsx2(
59
80
  CopyButton,
60
81
  {
61
82
  value: code,
@@ -69,12 +90,15 @@ function CodeBlockHeader({
69
90
  );
70
91
  }
71
92
 
93
+ // src/hooks/use-highlighted-code.ts
94
+ import * as React from "react";
95
+
72
96
  // src/lib/shiki.ts
73
97
  var LIGHT_THEME = "github-light";
74
98
  var DARK_THEME = "github-dark";
75
99
  var pending = null;
76
100
  function loadCodeToHtml() {
77
- pending ??= import('shiki').then((module) => module.codeToHtml).catch(() => null);
101
+ pending ??= import("shiki").then((module) => module.codeToHtml).catch(() => null);
78
102
  return pending;
79
103
  }
80
104
  async function highlightCode(code, language) {
@@ -95,10 +119,10 @@ async function highlightCode(code, language) {
95
119
 
96
120
  // src/hooks/use-highlighted-code.ts
97
121
  function useHighlightedCode(code, language, html) {
98
- const [highlighted, setHighlighted] = React2.useState(
122
+ const [highlighted, setHighlighted] = React.useState(
99
123
  html ?? null
100
124
  );
101
- React2.useEffect(() => {
125
+ React.useEffect(() => {
102
126
  if (html !== void 0) {
103
127
  setHighlighted(html);
104
128
  return;
@@ -185,6 +209,9 @@ function splitHighlightedLines(html) {
185
209
  }
186
210
  return lines.length > 0 ? lines : null;
187
211
  }
212
+
213
+ // src/components/ui/code-block.tsx
214
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
188
215
  var codeBlockLabels = {
189
216
  copyLabel: "Copy",
190
217
  copiedLabel: "Copied",
@@ -233,7 +260,7 @@ function CodeBlock({
233
260
  }
234
261
  setClipped(body.scrollHeight > body.clientHeight + 1);
235
262
  }, [maxHeight, expanded, lines, markup]);
236
- return /* @__PURE__ */ jsxs(
263
+ return /* @__PURE__ */ jsxs2(
237
264
  "div",
238
265
  {
239
266
  className: cn(
@@ -245,7 +272,7 @@ function CodeBlock({
245
272
  ...props,
246
273
  "data-slot": slotName,
247
274
  children: [
248
- filename === void 0 ? /* @__PURE__ */ jsx(
275
+ filename === void 0 ? /* @__PURE__ */ jsx3(
249
276
  CopyButton,
250
277
  {
251
278
  value: code,
@@ -253,7 +280,7 @@ function CodeBlock({
253
280
  copiedLabel: labels.copiedLabel,
254
281
  className: "top-2 right-2 absolute z-10 text-muted-foreground"
255
282
  }
256
- ) : /* @__PURE__ */ jsx(
283
+ ) : /* @__PURE__ */ jsx3(
257
284
  CodeBlockHeader,
258
285
  {
259
286
  filename,
@@ -263,14 +290,14 @@ function CodeBlock({
263
290
  copiedLabel: labels.copiedLabel
264
291
  }
265
292
  ),
266
- /* @__PURE__ */ jsx(
293
+ /* @__PURE__ */ jsx3(
267
294
  "div",
268
295
  {
269
296
  ref: bodyRef,
270
297
  "data-slot": "code-block-body",
271
298
  style: { maxHeight: expanded ? void 0 : maxHeight },
272
299
  className: "py-4 font-mono text-sm leading-6 overflow-auto rounded-[inherit]",
273
- children: /* @__PURE__ */ jsx("pre", { className: "w-max min-w-full", children: /* @__PURE__ */ jsx("code", { "data-slot": "code-block-code", children: lines.map((line, index) => /* @__PURE__ */ jsx(
300
+ children: /* @__PURE__ */ jsx3("pre", { className: "w-max min-w-full", children: /* @__PURE__ */ jsx3("code", { "data-slot": "code-block-code", children: lines.map((line, index) => /* @__PURE__ */ jsx3(
274
301
  CodeBlockLine,
275
302
  {
276
303
  number: index + 1,
@@ -283,7 +310,7 @@ function CodeBlock({
283
310
  )) }) })
284
311
  }
285
312
  ),
286
- clipped && /* @__PURE__ */ jsx(
313
+ clipped && /* @__PURE__ */ jsx3(
287
314
  CodeBlockExpander,
288
315
  {
289
316
  expanded,
@@ -304,7 +331,7 @@ function CodeBlockLine({
304
331
  emphasised,
305
332
  slotName = "code-block-line"
306
333
  }) {
307
- return /* @__PURE__ */ jsxs(
334
+ return /* @__PURE__ */ jsxs2(
308
335
  "span",
309
336
  {
310
337
  "data-highlighted": emphasised ? "" : void 0,
@@ -314,7 +341,7 @@ function CodeBlockLine({
314
341
  ),
315
342
  "data-slot": slotName,
316
343
  children: [
317
- lineNumbers && /* @__PURE__ */ jsx(
344
+ lineNumbers && /* @__PURE__ */ jsx3(
318
345
  "span",
319
346
  {
320
347
  "data-slot": "code-block-gutter",
@@ -323,7 +350,7 @@ function CodeBlockLine({
323
350
  children: number
324
351
  }
325
352
  ),
326
- markup === void 0 ? /* @__PURE__ */ jsx("span", { "data-slot": "code-block-source", children: line }) : /* @__PURE__ */ jsx(
353
+ markup === void 0 ? /* @__PURE__ */ jsx3("span", { "data-slot": "code-block-source", children: line }) : /* @__PURE__ */ jsx3(
327
354
  "span",
328
355
  {
329
356
  "data-slot": "code-block-source",
@@ -341,20 +368,20 @@ function CodeBlockExpander({
341
368
  onToggle,
342
369
  slotName = "code-block-expander"
343
370
  }) {
344
- return /* @__PURE__ */ jsxs(
371
+ return /* @__PURE__ */ jsxs2(
345
372
  "div",
346
373
  {
347
374
  className: "inset-x-0 bottom-0 pt-10 pb-2 absolute flex justify-center",
348
375
  "data-slot": slotName,
349
376
  children: [
350
- !expanded && /* @__PURE__ */ jsx(
377
+ !expanded && /* @__PURE__ */ jsx3(
351
378
  "span",
352
379
  {
353
380
  "aria-hidden": "true",
354
381
  className: "inset-0 pointer-events-none absolute bg-gradient-to-t from-card to-transparent"
355
382
  }
356
383
  ),
357
- /* @__PURE__ */ jsx(
384
+ /* @__PURE__ */ jsx3(
358
385
  Button,
359
386
  {
360
387
  type: "button",
@@ -369,6 +396,13 @@ function CodeBlockExpander({
369
396
  );
370
397
  }
371
398
 
399
+ // src/components/ui/json-viewer.tsx
400
+ import * as React4 from "react";
401
+
402
+ // src/components/ui/json-node.tsx
403
+ import { ChevronRight } from "lucide-react";
404
+ import * as React3 from "react";
405
+
372
406
  // src/lib/json-value.ts
373
407
  var CIRCULAR_MARKER = "[Circular]";
374
408
  function jsonKind(value) {
@@ -427,6 +461,9 @@ function serialisable(value, ancestors) {
427
461
  function stringifyJson(value) {
428
462
  return JSON.stringify(serialisable(value, []), null, 2) ?? "null";
429
463
  }
464
+
465
+ // src/components/ui/json-node.tsx
466
+ import { Fragment, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
430
467
  var LEAF_CLASS = {
431
468
  string: "text-success",
432
469
  number: "text-primary",
@@ -453,7 +490,7 @@ function JsonKey({
453
490
  name,
454
491
  slotName = "json-viewer-key"
455
492
  }) {
456
- return /* @__PURE__ */ jsxs("span", { className: "font-medium text-foreground", "data-slot": slotName, children: [
493
+ return /* @__PURE__ */ jsxs3("span", { className: "font-medium text-foreground", "data-slot": slotName, children: [
457
494
  name,
458
495
  ":"
459
496
  ] });
@@ -470,26 +507,26 @@ function JsonNode({
470
507
  const kind = jsonKind(value);
471
508
  const branch = isBranch(kind);
472
509
  const circular = branch && ancestors.includes(value);
473
- const [open, setOpen] = React2.useState(depth < initialDepth);
474
- const entries = React2.useMemo(
510
+ const [open, setOpen] = React3.useState(depth < initialDepth);
511
+ const entries = React3.useMemo(
475
512
  () => branch && !circular ? entriesOf(value) : [],
476
513
  [branch, circular, value]
477
514
  );
478
- const trail = React2.useMemo(
515
+ const trail = React3.useMemo(
479
516
  () => branch ? [...ancestors, value] : ancestors,
480
517
  [branch, ancestors, value]
481
518
  );
482
519
  if (!branch || circular) {
483
- return /* @__PURE__ */ jsxs("div", { className: "gap-2 py-0.5 pl-5 flex", "data-slot": slotName, children: [
484
- name !== void 0 && /* @__PURE__ */ jsx(JsonKey, { name }),
485
- circular ? /* @__PURE__ */ jsx(
520
+ return /* @__PURE__ */ jsxs3("div", { className: "gap-2 py-0.5 pl-5 flex", "data-slot": slotName, children: [
521
+ name !== void 0 && /* @__PURE__ */ jsx4(JsonKey, { name }),
522
+ circular ? /* @__PURE__ */ jsx4(
486
523
  "span",
487
524
  {
488
525
  "data-slot": "json-viewer-circular",
489
526
  className: "text-muted-foreground italic",
490
527
  children: labels.circularLabel
491
528
  }
492
- ) : /* @__PURE__ */ jsx(
529
+ ) : /* @__PURE__ */ jsx4(
493
530
  "span",
494
531
  {
495
532
  "data-slot": "json-viewer-value",
@@ -500,8 +537,8 @@ function JsonNode({
500
537
  ] });
501
538
  }
502
539
  const [opening, closing] = BRACKETS[kind === "array" ? "array" : "object"];
503
- return /* @__PURE__ */ jsxs("div", { "data-slot": slotName, children: [
504
- /* @__PURE__ */ jsxs(
540
+ return /* @__PURE__ */ jsxs3("div", { "data-slot": slotName, children: [
541
+ /* @__PURE__ */ jsxs3(
505
542
  "button",
506
543
  {
507
544
  type: "button",
@@ -514,7 +551,7 @@ function JsonNode({
514
551
  focusRing
515
552
  ),
516
553
  children: [
517
- /* @__PURE__ */ jsx(
554
+ /* @__PURE__ */ jsx4(
518
555
  ChevronRight,
519
556
  {
520
557
  "aria-hidden": "true",
@@ -524,10 +561,10 @@ function JsonNode({
524
561
  )
525
562
  }
526
563
  ),
527
- name !== void 0 && /* @__PURE__ */ jsx(JsonKey, { name }),
528
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: opening }),
529
- !open && /* @__PURE__ */ jsxs(Fragment, { children: [
530
- /* @__PURE__ */ jsx(
564
+ name !== void 0 && /* @__PURE__ */ jsx4(JsonKey, { name }),
565
+ /* @__PURE__ */ jsx4("span", { className: "text-muted-foreground", children: opening }),
566
+ !open && /* @__PURE__ */ jsxs3(Fragment, { children: [
567
+ /* @__PURE__ */ jsx4(
531
568
  "span",
532
569
  {
533
570
  "data-slot": "json-viewer-summary",
@@ -535,13 +572,13 @@ function JsonNode({
535
572
  children: labels.entriesLabel(entries.length)
536
573
  }
537
574
  ),
538
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: closing })
575
+ /* @__PURE__ */ jsx4("span", { className: "text-muted-foreground", children: closing })
539
576
  ] })
540
577
  ]
541
578
  }
542
579
  ),
543
- open && /* @__PURE__ */ jsxs("div", { className: "ml-1.5 pl-3 border-l border-border", children: [
544
- entries.map(([key, item]) => /* @__PURE__ */ jsx(
580
+ open && /* @__PURE__ */ jsxs3("div", { className: "ml-1.5 pl-3 border-l border-border", children: [
581
+ entries.map(([key, item]) => /* @__PURE__ */ jsx4(
545
582
  JsonNode,
546
583
  {
547
584
  name: key,
@@ -553,10 +590,13 @@ function JsonNode({
553
590
  },
554
591
  key
555
592
  )),
556
- /* @__PURE__ */ jsx("div", { className: "pl-5 text-muted-foreground", children: closing })
593
+ /* @__PURE__ */ jsx4("div", { className: "pl-5 text-muted-foreground", children: closing })
557
594
  ] })
558
595
  ] });
559
596
  }
597
+
598
+ // src/components/ui/json-viewer.tsx
599
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
560
600
  var jsonViewerLabels = {
561
601
  copyLabel: "Copy",
562
602
  copiedLabel: "Copied",
@@ -587,7 +627,7 @@ function JsonViewer({
587
627
  circularLabel,
588
628
  entriesLabel
589
629
  });
590
- const labels = React2.useMemo(
630
+ const labels = React4.useMemo(
591
631
  () => ({
592
632
  expandLabel: text.expandLabel,
593
633
  collapseLabel: text.collapseLabel,
@@ -601,7 +641,7 @@ function JsonViewer({
601
641
  text.entriesLabel
602
642
  ]
603
643
  );
604
- return /* @__PURE__ */ jsxs(
644
+ return /* @__PURE__ */ jsxs4(
605
645
  "div",
606
646
  {
607
647
  className: cn(
@@ -613,7 +653,7 @@ function JsonViewer({
613
653
  ...props,
614
654
  "data-slot": slotName,
615
655
  children: [
616
- /* @__PURE__ */ jsx(
656
+ /* @__PURE__ */ jsx5(
617
657
  CopyButton,
618
658
  {
619
659
  value: stringifyJson(value),
@@ -622,13 +662,13 @@ function JsonViewer({
622
662
  className: "top-2 right-2 absolute z-10 text-muted-foreground"
623
663
  }
624
664
  ),
625
- /* @__PURE__ */ jsx(
665
+ /* @__PURE__ */ jsx5(
626
666
  "div",
627
667
  {
628
668
  "data-slot": "json-viewer-body",
629
669
  style: { maxHeight },
630
670
  className: "p-4 pr-12 font-mono text-sm leading-6 overflow-auto rounded-[inherit]",
631
- children: /* @__PURE__ */ jsx(
671
+ children: /* @__PURE__ */ jsx5(
632
672
  JsonNode,
633
673
  {
634
674
  value,
@@ -644,7 +684,11 @@ function JsonViewer({
644
684
  }
645
685
  );
646
686
  }
647
-
648
- export { Code, CodeBlock, JsonViewer, codeBlockLabels, jsonViewerLabels };
649
- //# sourceMappingURL=code.js.map
687
+ export {
688
+ Code,
689
+ CodeBlock,
690
+ JsonViewer,
691
+ codeBlockLabels,
692
+ jsonViewerLabels
693
+ };
650
694
  //# sourceMappingURL=code.js.map