@exxatdesignux/ui 0.5.1 → 0.5.2

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 (80) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/components/data-table/filter-text-value-input.js +1 -1
  3. package/dist/components/data-table/filter-text-value-input.js.map +1 -1
  4. package/dist/components/data-table/index.js +3 -3
  5. package/dist/components/data-table/index.js.map +1 -1
  6. package/dist/components/data-table/pagination.js +3 -3
  7. package/dist/components/data-table/pagination.js.map +1 -1
  8. package/dist/components/data-views/data-row-list.js +1 -1
  9. package/dist/components/data-views/data-row-list.js.map +1 -1
  10. package/dist/components/data-views/hub-table.js +6 -6
  11. package/dist/components/data-views/hub-table.js.map +1 -1
  12. package/dist/components/data-views/index.js +6 -6
  13. package/dist/components/data-views/index.js.map +1 -1
  14. package/dist/components/table-properties/column-row.js +1 -1
  15. package/dist/components/table-properties/column-row.js.map +1 -1
  16. package/dist/components/table-properties/drawer-button.js +5 -5
  17. package/dist/components/table-properties/drawer-button.js.map +1 -1
  18. package/dist/components/table-properties/drawer.js +5 -5
  19. package/dist/components/table-properties/drawer.js.map +1 -1
  20. package/dist/components/table-properties/filter-card.js +2 -2
  21. package/dist/components/table-properties/filter-card.js.map +1 -1
  22. package/dist/components/table-properties/index.js +5 -5
  23. package/dist/components/table-properties/index.js.map +1 -1
  24. package/dist/components/table-properties/sort-card.js +1 -1
  25. package/dist/components/table-properties/sort-card.js.map +1 -1
  26. package/dist/components/templates/index.js +4 -4
  27. package/dist/components/templates/index.js.map +1 -1
  28. package/dist/components/templates/list-page.js +4 -4
  29. package/dist/components/templates/list-page.js.map +1 -1
  30. package/dist/components/ui/banner.d.ts +2 -2
  31. package/dist/components/ui/banner.js +1 -1
  32. package/dist/components/ui/banner.js.map +1 -1
  33. package/dist/components/ui/coach-mark.js +1 -1
  34. package/dist/components/ui/coach-mark.js.map +1 -1
  35. package/dist/components/ui/context-menu.js +1 -1
  36. package/dist/components/ui/context-menu.js.map +1 -1
  37. package/dist/components/ui/date-picker-field.js +1 -1
  38. package/dist/components/ui/date-picker-field.js.map +1 -1
  39. package/dist/components/ui/dropdown-menu.js +2 -2
  40. package/dist/components/ui/dropdown-menu.js.map +1 -1
  41. package/dist/components/ui/export-drawer.js +3 -3
  42. package/dist/components/ui/export-drawer.js.map +1 -1
  43. package/dist/components/ui/hover-card.js +1 -1
  44. package/dist/components/ui/hover-card.js.map +1 -1
  45. package/dist/components/ui/key-metrics.js +6 -6
  46. package/dist/components/ui/key-metrics.js.map +1 -1
  47. package/dist/components/ui/page-header.js +1 -1
  48. package/dist/components/ui/page-header.js.map +1 -1
  49. package/dist/components/ui/popover.js +1 -1
  50. package/dist/components/ui/popover.js.map +1 -1
  51. package/dist/components/ui/select.js +1 -1
  52. package/dist/components/ui/select.js.map +1 -1
  53. package/dist/components/ui/sheet.js +1 -1
  54. package/dist/components/ui/sheet.js.map +1 -1
  55. package/dist/components/ui/sidebar.d.ts +1 -1
  56. package/dist/components/ui/sidebar.js +3 -3
  57. package/dist/components/ui/sidebar.js.map +1 -1
  58. package/dist/components/ui/tip.js +1 -1
  59. package/dist/components/ui/tip.js.map +1 -1
  60. package/dist/components/ui/tooltip.js +1 -1
  61. package/dist/components/ui/tooltip.js.map +1 -1
  62. package/dist/components/ui/view-segmented-control.js +1 -1
  63. package/dist/components/ui/view-segmented-control.js.map +1 -1
  64. package/dist/index.js +16 -16
  65. package/dist/index.js.map +1 -1
  66. package/package.json +1 -1
  67. package/src/components/data-views/data-row-list.tsx +1 -1
  68. package/src/components/ui/banner.tsx +0 -2
  69. package/src/components/ui/coach-mark.tsx +1 -2
  70. package/src/components/ui/context-menu.tsx +1 -1
  71. package/src/components/ui/dropdown-menu.tsx +2 -2
  72. package/src/components/ui/hover-card.tsx +1 -1
  73. package/src/components/ui/key-metrics.tsx +4 -4
  74. package/src/components/ui/popover.tsx +1 -1
  75. package/src/components/ui/select.tsx +1 -1
  76. package/src/components/ui/sheet.tsx +1 -1
  77. package/src/components/ui/sidebar.tsx +3 -3
  78. package/src/components/ui/tooltip.tsx +1 -1
  79. package/template/package.json +10 -0
  80. package/tokens/hooks-index.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/avatar.tsx","../../../src/components/ui/button.tsx","../../../src/components/ui/separator.tsx","../../../src/components/ui/tooltip.tsx","../../../src/components/ui/page-header.tsx"],"names":["AvatarPrimitive","cva","jsx","SeparatorPrimitive","TooltipPrimitive","jsxs"],"mappings":"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","file":"page-header.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check, Plus } from \"lucide-react\"\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Badge } from \"./badge\"\n\n/** Maps to Shadcn Studio avatar demos (shape / ring / stack). Uses theme tokens only. */\nconst avatarRootVariants = cva(\n \"group/avatar relative flex shrink-0 overflow-hidden select-none\",\n {\n variants: {\n size: {\n sm: \"size-6\",\n default: \"size-8\",\n lg: \"size-10\",\n },\n shape: {\n circle: \"rounded-full\",\n square: \"rounded-none\",\n \"rounded-sm\": \"rounded-sm\",\n \"rounded-md\": \"rounded-md\",\n \"rounded-lg\": \"rounded-lg\",\n \"rounded-xl\": \"rounded-xl\",\n },\n variant: {\n default: \"\",\n ring: \"ring-2 ring-ring\",\n \"ring-offset\": \"ring-2 ring-ring ring-offset-2 ring-offset-background\",\n group: \"ring-2 ring-background\",\n },\n },\n defaultVariants: {\n size: \"default\",\n shape: \"circle\",\n variant: \"default\",\n },\n }\n)\n\nconst AVATAR_INSET_AFTER: Record<NonNullable<VariantProps<typeof avatarRootVariants>[\"shape\"]>, string> = {\n circle: \"after:rounded-full\",\n square: \"after:rounded-none\",\n \"rounded-sm\": \"after:rounded-sm\",\n \"rounded-md\": \"after:rounded-md\",\n \"rounded-lg\": \"after:rounded-lg\",\n \"rounded-xl\": \"after:rounded-xl\",\n}\n\nconst avatarImageShape = cn(\n \"aspect-square size-full object-cover\",\n \"group-data-[shape=circle]/avatar:rounded-full\",\n \"group-data-[shape=square]/avatar:rounded-none\",\n \"group-data-[shape=rounded-sm]/avatar:rounded-sm\",\n \"group-data-[shape=rounded-md]/avatar:rounded-md\",\n \"group-data-[shape=rounded-lg]/avatar:rounded-lg\",\n \"group-data-[shape=rounded-xl]/avatar:rounded-xl\"\n)\n\nconst avatarFallbackShape = cn(\n \"flex size-full items-center justify-center bg-muted text-sm text-muted-foreground\",\n \"group-data-[shape=circle]/avatar:rounded-full\",\n \"group-data-[shape=square]/avatar:rounded-none\",\n \"group-data-[shape=rounded-sm]/avatar:rounded-sm\",\n \"group-data-[shape=rounded-md]/avatar:rounded-md\",\n \"group-data-[shape=rounded-lg]/avatar:rounded-lg\",\n \"group-data-[shape=rounded-xl]/avatar:rounded-xl\",\n \"group-data-[size=sm]/avatar:text-xs\"\n)\n\ntype AvatarProps = React.ComponentProps<typeof AvatarPrimitive.Root> &\n VariantProps<typeof avatarRootVariants> & {\n /**\n * Subtle inner hairline on the avatar edge (token `border-border`).\n * Default **false** — full-bleed circle for photos/logos (Shadcn Studio–style profile look).\n */\n insetBorder?: boolean\n }\n\nfunction Avatar({\n className,\n size = \"default\",\n shape = \"circle\",\n variant = \"default\",\n insetBorder = false,\n ...props\n}: AvatarProps) {\n const shapeKey = shape ?? \"circle\"\n const insetClass =\n insetBorder &&\n cn(\n \"after:pointer-events-none after:absolute after:inset-0 after:border after:border-border after:mix-blend-darken dark:after:mix-blend-lighten\",\n AVATAR_INSET_AFTER[shapeKey]\n )\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n data-shape={shape}\n className={cn(avatarRootVariants({ size, shape, variant }), insetClass, className)}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n referrerPolicy = \"no-referrer\",\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n referrerPolicy={referrerPolicy}\n className={cn(avatarImageShape, 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(avatarFallbackShape, className)}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"absolute end-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n className\n )}\n {...props}\n />\n )\n}\n\n/**\n * A row of avatars with an overflow counter — **never overlapping**.\n *\n * Overlapping face piles (Slack / GitHub style) have known UX problems in\n * dense product chrome: ring-on-background contrast is fragile in dark mode,\n * click targets stack, and screen readers announce ambiguous groupings.\n * `AvatarGroup` therefore renders children side-by-side with a small inline\n * gap. See `.cursor/rules/exxat-person-identity-display.mdc` (MUST NOT —\n * overlapping avatars) and the `PageHeader` collaboration variant which\n * uses the same gapped row.\n */\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"group/avatar-group flex items-center gap-1.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className\n )}\n {...props}\n />\n )\n}\n\n// ── Shadcn Studio–style compositions (tokens + a11y checklist: sr-only status, meaningful alt on image) ──\n\ntype AvatarShape = NonNullable<VariantProps<typeof avatarRootVariants>[\"shape\"]>\ntype AvatarVariant = NonNullable<VariantProps<typeof avatarRootVariants>[\"variant\"]>\ntype AvatarSize = NonNullable<VariantProps<typeof avatarRootVariants>[\"size\"]>\n\ntype AvatarInitialsProps = Omit<AvatarProps, \"children\"> & {\n initials: string\n /** When true, initials are hidden from accessibility tree (pair with visible name). Default true. */\n decorative?: boolean\n /** Extra classes on `AvatarFallback` (e.g. font weight). */\n fallbackClassName?: string\n}\n\n/** Initials-only chip using `--avatar-initials-bg` / `--avatar-initials-fg` (Exxat tokens). */\nfunction AvatarInitials({\n initials,\n decorative = true,\n fallbackClassName,\n className,\n ...avatarProps\n}: AvatarInitialsProps) {\n return (\n <Avatar className={className} {...avatarProps}>\n <AvatarFallback\n aria-hidden={decorative ? true : undefined}\n className={cn(\n \"border-0 bg-[var(--avatar-initials-bg)] font-semibold text-[var(--avatar-initials-fg)]\",\n fallbackClassName\n )}\n >\n {initials}\n </AvatarFallback>\n </Avatar>\n )\n}\n\ntype AvatarStatusTone = \"online\" | \"busy\" | \"away\"\n\nconst avatarStatusDot: Record<AvatarStatusTone, string> = {\n online: \"bg-emerald-600 dark:bg-emerald-400\",\n busy: \"bg-destructive\",\n away: \"bg-amber-600 dark:bg-amber-400\",\n}\n\n/** Presence dot (Studio avatars 7–9). Wraps a single `Avatar`. */\nfunction AvatarStatus({\n children,\n status,\n label,\n className,\n position = \"bottom-end\",\n}: {\n children: React.ReactNode\n status: AvatarStatusTone\n /** Announced to screen readers (e.g. \"Busy\"). */\n label: string\n className?: string\n /** `bottom-end` matches `AvatarBadge`; `top-end` matches some Studio away demos. */\n position?: \"bottom-end\" | \"top-end\"\n}) {\n const pos =\n position === \"top-end\"\n ? \"-top-0.5 -end-0.5 bottom-auto start-auto\"\n : \"-end-0.5 -bottom-0.5 top-auto start-auto\"\n return (\n <span className={cn(\"relative inline-flex w-fit shrink-0\", className)}>\n {children}\n <span\n className={cn(\n \"pointer-events-none absolute z-10 size-3 rounded-full border-2 border-background\",\n pos,\n avatarStatusDot[status]\n )}\n aria-hidden\n />\n <span className=\"sr-only\">{label}</span>\n </span>\n )\n}\n\n/** Numeric badge overlay (Studio avatar 11). */\nfunction AvatarNotificationCount({\n children,\n count,\n className,\n badgeClassName,\n}: {\n children: React.ReactNode\n count: number | string\n className?: string\n badgeClassName?: string\n}) {\n return (\n <span className={cn(\"relative inline-flex w-fit shrink-0\", className)}>\n {children}\n <Badge\n className={cn(\n \"absolute -top-2.5 -end-2.5 z-10 h-5 min-w-5 justify-center px-1 tabular-nums\",\n badgeClassName\n )}\n >\n {count}\n </Badge>\n </span>\n )\n}\n\n/** Verified check overlay (Studio avatar 12) — primary token fill. */\nfunction AvatarVerified({\n children,\n label = \"Verified\",\n className,\n}: {\n children: React.ReactNode\n label?: string\n className?: string\n}) {\n return (\n <span className={cn(\"relative inline-flex w-fit shrink-0\", className)}>\n {children}\n <span className=\"pointer-events-none absolute -top-1.5 -end-1.5 z-10 inline-flex size-4 items-center justify-center rounded-full bg-primary text-primary-foreground shadow-sm\">\n <Check className=\"size-2.5\" strokeWidth={3} aria-hidden />\n <span className=\"sr-only\">{label}</span>\n </span>\n </span>\n )\n}\n\n/** Leo assistant mark — centralized; same icon treatment as Ask Leo sidebar. */\nfunction AvatarLeoAssistant({\n className,\n size = \"sm\",\n ...props\n}: Omit<AvatarProps, \"children\" | \"shape\">) {\n return (\n <Avatar size={size} shape=\"circle\" insetBorder={false} className={className} {...props}>\n <AvatarFallback className=\"bg-brand/15 p-0\">\n <span className=\"sr-only\">Leo</span>\n <i\n className=\"fa-duotone fa-solid fa-star-christmas text-xs text-brand\"\n aria-hidden=\"true\"\n />\n </AvatarFallback>\n </Avatar>\n )\n}\n\n/** “Add profile” affordance (Studio avatar 10). `onClick` on the button. */\nfunction AvatarPlusAction({\n children,\n actionLabel,\n onClick,\n className,\n buttonClassName,\n}: {\n children: React.ReactNode\n actionLabel: string\n onClick?: () => void\n className?: string\n buttonClassName?: string\n}) {\n return (\n <span className={cn(\"relative inline-flex w-fit shrink-0\", className)}>\n {children}\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"focus-visible:ring-ring/50 absolute -end-1 -bottom-1 z-10 inline-flex size-7 cursor-pointer items-center justify-center rounded-full bg-background shadow-sm ring-1 ring-border focus-visible:ring-[3px] focus-visible:outline-none\",\n buttonClassName\n )}\n >\n <Plus className=\"size-4 text-muted-foreground\" aria-hidden />\n <span className=\"sr-only\">{actionLabel}</span>\n </button>\n </span>\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarBadge,\n AvatarInitials,\n AvatarStatus,\n AvatarNotificationCount,\n AvatarVerified,\n AvatarPlusAction,\n AvatarLeoAssistant,\n avatarRootVariants,\n}\nexport type {\n AvatarProps,\n AvatarInitialsProps,\n AvatarShape,\n AvatarVariant,\n AvatarSize,\n AvatarStatusTone,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n outline:\n \"border-input bg-background hover:bg-interactive-hover hover:text-interactive-hover-foreground aria-expanded:bg-interactive-hover aria-expanded:text-interactive-hover-foreground dark:bg-input/15 dark:hover:bg-input/25\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost:\n \"hover:bg-interactive-hover hover:text-interactive-hover-foreground aria-expanded:bg-interactive-hover aria-expanded:text-interactive-hover-foreground dark:hover:bg-interactive-hover-subtle\",\n destructive:\n \"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pe-2.5 has-data-[icon=inline-start]:ps-2.5\",\n xs: \"h-6 gap-1 px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1 px-3 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pe-2 has-data-[icon=inline-start]:ps-2 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pe-3.5 has-data-[icon=inline-start]:ps-3.5\",\n icon: \"size-9\",\n \"icon-xs\":\n \"size-6 in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-8 in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }\n>(({ className, variant = \"default\", size = \"default\", asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size }), className)}\n {...props}\n />\n )\n})\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\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]:w-px data-[orientation=vertical]:self-stretch\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\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 <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return (\n <TooltipPrimitive.Trigger\n data-slot=\"tooltip-trigger\"\n suppressHydrationWarning\n className={cn(\"cursor-pointer\", className)}\n {...props}\n />\n )\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\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 \"z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pe-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }\n","\"use client\"\n\n/**\n * PageHeader — Full-width content area header.\n *\n * Sits at the top of a page's main content, BELOW the breadcrumb / topbar.\n * Uses Ivy Presto (Adobe Fonts) for the title via the `--font-heading`\n * CSS variable.\n *\n * **Variant `collaboration`** — optional access line + collaborator faces\n * (or **Add collaborator** when the roster is empty) ahead of the primary\n * `actions` slot. The full **Invite people** flow lives in the consuming\n * page's `actions` overflow menu — this primitive only renders the face row.\n *\n * WCAG 2.1 AA:\n * - `<h1>` landmark — one per page (WCAG 1.3.1)\n * - Sufficient colour contrast >= 4.5:1 on title + subtitle (SC 1.4.3)\n * - Face row: `role=\"group\"` + aggregate `aria-label`; each face has a\n * `Tooltip` name (SC 4.1.2)\n *\n * Promotion note: this file lived at `apps/web/components/page-header.tsx`\n * until 2026-05-20. It moved into `@exxatdesignux/ui` so other apps (and\n * future docs sites) can compose hub headers without duplicating the\n * collaboration variant, h1 styling, or face-row a11y wiring. The\n * `CollaboratorAccessRole` union is duplicated here as a narrow string\n * literal so the primitive stays free of `apps/web/lib/` couplings — the\n * authoritative role labels / icons / capability helpers continue to live\n * in `apps/web/lib/collaborator-access.ts`.\n */\n\nimport * as React from \"react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\"\nimport { Button } from \"./button\"\nimport { Separator } from \"./separator\"\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"./tooltip\"\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Library access role for shared hubs. Mirrors\n * `apps/web/lib/collaborator-access.ts > CollaboratorAccessRole` — kept\n * structurally identical so the apps/web type and this type are mutually\n * assignable wherever consumers pass collaborator rosters to `PageHeader`.\n */\nexport type PageHeaderCollaboratorAccessRole =\n | \"owner\"\n | \"editor\"\n | \"commenter\"\n | \"viewer\"\n\nexport type PageHeaderVariant = \"default\" | \"collaboration\"\n\nexport interface PageHeaderCollaborator {\n id: string\n name: string\n imageUrl?: string | null\n initials?: string\n email?: string\n access?: PageHeaderCollaboratorAccessRole\n /** Org / directory role tags (e.g. Faculty, Program coordinator). */\n roles?: string[]\n}\n\nexport interface PageHeaderProps {\n /** Primary page title — rendered as `<h1>` in Ivy Presto serif. */\n title: string\n /** Short descriptor or date shown below the title (and below `accessInfo` when set). */\n subtitle?: React.ReactNode\n /** Layout preset — `collaboration` enables access line + face row ahead of `actions`. */\n variant?: PageHeaderVariant\n /**\n * Role / access copy or badges — rendered between the title and subtitle\n * when `variant=\"collaboration\"` (e.g. lock icon + \"Editors can modify\").\n */\n accessInfo?: React.ReactNode\n /** People with access — shown as a horizontal row of faces when `variant=\"collaboration\"`. */\n collaborators?: PageHeaderCollaborator[]\n /** Max faces before a `+N` chip — default 3. */\n collaboratorDisplayLimit?: number\n /** Opens the invite collaborators sheet when a face, overflow chip, or empty-state CTA is activated. */\n onCollaboratorsOpen?: () => void\n /** Label for the empty-roster header control — default `\"Add collaborator\"`. */\n addCollaboratorLabel?: string\n /** Optional slot for right-aligned actions (buttons, selectors, etc.). */\n actions?: React.ReactNode\n /** Extra className for the outer wrapper. */\n className?: string\n /** When false, the title + subtitle are visually hidden (actions remain). */\n showTitleBlock?: boolean\n}\n\nfunction PageHeaderCollaborationAccess({\n people,\n limit,\n onOpenCollaborators,\n addCollaboratorLabel,\n}: {\n people: PageHeaderCollaborator[]\n limit: number\n onOpenCollaborators?: () => void\n addCollaboratorLabel: string\n}) {\n if (people.length === 0) {\n return (\n <div\n role=\"group\"\n aria-label=\"People with access\"\n className=\"flex shrink-0 items-center\"\n >\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"lg\"\n onClick={onOpenCollaborators}\n disabled={!onOpenCollaborators}\n >\n <i className=\"fa-light fa-user-plus\" aria-hidden=\"true\" />\n {addCollaboratorLabel}\n </Button>\n </div>\n )\n }\n\n const visible = people.slice(0, limit)\n const overflow = Math.max(0, people.length - visible.length)\n const names = people.map((p) => p.name).join(\", \")\n\n return (\n <div\n role=\"group\"\n aria-label={names ? `People with access: ${names}` : \"People with access\"}\n className=\"flex shrink-0 items-center gap-2 sm:gap-2.5\"\n >\n <div className=\"flex shrink-0 items-center gap-1.5\">\n {visible.map((c) => (\n <Tooltip key={c.id}>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className=\"relative shrink-0 rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n aria-label={`Open collaborators — ${c.name}`}\n onClick={onOpenCollaborators}\n disabled={!onOpenCollaborators}\n >\n <Avatar size=\"sm\" shape=\"circle\" className=\"pointer-events-none\">\n {c.imageUrl ? (\n <AvatarImage src={c.imageUrl} alt=\"\" referrerPolicy=\"no-referrer\" />\n ) : null}\n <AvatarFallback className=\"text-xs font-semibold\">\n {(c.initials ?? c.name.slice(0, 2)).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{c.name}</TooltipContent>\n </Tooltip>\n ))}\n {overflow > 0 && (\n <button\n type=\"button\"\n className=\"flex size-6 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-semibold tabular-nums text-muted-foreground ring-1 ring-border/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n aria-label={`Open collaborators — ${overflow} more people with access`}\n onClick={onOpenCollaborators}\n disabled={!onOpenCollaborators}\n >\n +{overflow}\n </button>\n )}\n </div>\n </div>\n )\n}\n\nexport function PageHeader({\n title,\n subtitle,\n variant = \"default\",\n accessInfo,\n collaborators,\n collaboratorDisplayLimit = 3,\n onCollaboratorsOpen,\n addCollaboratorLabel = \"Add collaborator\",\n actions,\n className,\n showTitleBlock = true,\n}: PageHeaderProps) {\n const isCollaboration = variant === \"collaboration\"\n const showAccess = Boolean(isCollaboration && accessInfo)\n const showCollaborationAccess = isCollaboration\n const showActionsColumn = Boolean(actions) || showCollaborationAccess\n const showCollaboratorActionsSeparator =\n showCollaborationAccess && Boolean(actions)\n\n return (\n <div\n className={cn(\n \"flex flex-col gap-1 px-4 pt-2 pb-4 lg:px-6\",\n \"sm:flex-row sm:items-end sm:gap-4\",\n showTitleBlock ? \"sm:justify-between\" : \"sm:justify-end\",\n className,\n )}\n >\n {/* Title block — hidden visually when showTitleBlock is false; keep h1 for a11y. */}\n <div className={cn(\"flex min-w-0 flex-col gap-0.5\", !showTitleBlock && \"sr-only\")}>\n <h1\n className=\"text-2xl font-semibold tracking-tight leading-tight text-foreground\"\n style={{ fontFamily: \"var(--font-heading)\" }}\n suppressHydrationWarning\n >\n {title}\n </h1>\n {showAccess && (\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1 text-xs leading-snug text-muted-foreground\">\n {accessInfo}\n </div>\n )}\n {subtitle && (\n <p className=\"text-sm text-muted-foreground leading-none\">{subtitle}</p>\n )}\n </div>\n\n {showActionsColumn && (\n <div className=\"flex flex-wrap items-center gap-2 sm:gap-3 shrink-0 sm:ms-auto sm:justify-end\">\n {showCollaborationAccess ? (\n <PageHeaderCollaborationAccess\n people={collaborators ?? []}\n limit={collaboratorDisplayLimit}\n onOpenCollaborators={onCollaboratorsOpen}\n addCollaboratorLabel={addCollaboratorLabel}\n />\n ) : null}\n {showCollaboratorActionsSeparator ? (\n <Separator\n orientation=\"vertical\"\n decorative\n className=\"h-8 shrink-0\"\n />\n ) : null}\n {actions}\n </div>\n )}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/avatar.tsx","../../../src/components/ui/button.tsx","../../../src/components/ui/separator.tsx","../../../src/components/ui/tooltip.tsx","../../../src/components/ui/page-header.tsx"],"names":["AvatarPrimitive","cva","jsx","SeparatorPrimitive","TooltipPrimitive","jsxs"],"mappings":"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","file":"page-header.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check, Plus } from \"lucide-react\"\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Badge } from \"./badge\"\n\n/** Maps to Shadcn Studio avatar demos (shape / ring / stack). Uses theme tokens only. */\nconst avatarRootVariants = cva(\n \"group/avatar relative flex shrink-0 overflow-hidden select-none\",\n {\n variants: {\n size: {\n sm: \"size-6\",\n default: \"size-8\",\n lg: \"size-10\",\n },\n shape: {\n circle: \"rounded-full\",\n square: \"rounded-none\",\n \"rounded-sm\": \"rounded-sm\",\n \"rounded-md\": \"rounded-md\",\n \"rounded-lg\": \"rounded-lg\",\n \"rounded-xl\": \"rounded-xl\",\n },\n variant: {\n default: \"\",\n ring: \"ring-2 ring-ring\",\n \"ring-offset\": \"ring-2 ring-ring ring-offset-2 ring-offset-background\",\n group: \"ring-2 ring-background\",\n },\n },\n defaultVariants: {\n size: \"default\",\n shape: \"circle\",\n variant: \"default\",\n },\n }\n)\n\nconst AVATAR_INSET_AFTER: Record<NonNullable<VariantProps<typeof avatarRootVariants>[\"shape\"]>, string> = {\n circle: \"after:rounded-full\",\n square: \"after:rounded-none\",\n \"rounded-sm\": \"after:rounded-sm\",\n \"rounded-md\": \"after:rounded-md\",\n \"rounded-lg\": \"after:rounded-lg\",\n \"rounded-xl\": \"after:rounded-xl\",\n}\n\nconst avatarImageShape = cn(\n \"aspect-square size-full object-cover\",\n \"group-data-[shape=circle]/avatar:rounded-full\",\n \"group-data-[shape=square]/avatar:rounded-none\",\n \"group-data-[shape=rounded-sm]/avatar:rounded-sm\",\n \"group-data-[shape=rounded-md]/avatar:rounded-md\",\n \"group-data-[shape=rounded-lg]/avatar:rounded-lg\",\n \"group-data-[shape=rounded-xl]/avatar:rounded-xl\"\n)\n\nconst avatarFallbackShape = cn(\n \"flex size-full items-center justify-center bg-muted text-sm text-muted-foreground\",\n \"group-data-[shape=circle]/avatar:rounded-full\",\n \"group-data-[shape=square]/avatar:rounded-none\",\n \"group-data-[shape=rounded-sm]/avatar:rounded-sm\",\n \"group-data-[shape=rounded-md]/avatar:rounded-md\",\n \"group-data-[shape=rounded-lg]/avatar:rounded-lg\",\n \"group-data-[shape=rounded-xl]/avatar:rounded-xl\",\n \"group-data-[size=sm]/avatar:text-xs\"\n)\n\ntype AvatarProps = React.ComponentProps<typeof AvatarPrimitive.Root> &\n VariantProps<typeof avatarRootVariants> & {\n /**\n * Subtle inner hairline on the avatar edge (token `border-border`).\n * Default **false** — full-bleed circle for photos/logos (Shadcn Studio–style profile look).\n */\n insetBorder?: boolean\n }\n\nfunction Avatar({\n className,\n size = \"default\",\n shape = \"circle\",\n variant = \"default\",\n insetBorder = false,\n ...props\n}: AvatarProps) {\n const shapeKey = shape ?? \"circle\"\n const insetClass =\n insetBorder &&\n cn(\n \"after:pointer-events-none after:absolute after:inset-0 after:border after:border-border after:mix-blend-darken dark:after:mix-blend-lighten\",\n AVATAR_INSET_AFTER[shapeKey]\n )\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n data-shape={shape}\n className={cn(avatarRootVariants({ size, shape, variant }), insetClass, className)}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n referrerPolicy = \"no-referrer\",\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n referrerPolicy={referrerPolicy}\n className={cn(avatarImageShape, 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(avatarFallbackShape, className)}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"absolute end-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n className\n )}\n {...props}\n />\n )\n}\n\n/**\n * A row of avatars with an overflow counter — **never overlapping**.\n *\n * Overlapping face piles (Slack / GitHub style) have known UX problems in\n * dense product chrome: ring-on-background contrast is fragile in dark mode,\n * click targets stack, and screen readers announce ambiguous groupings.\n * `AvatarGroup` therefore renders children side-by-side with a small inline\n * gap. See `.cursor/rules/exxat-person-identity-display.mdc` (MUST NOT —\n * overlapping avatars) and the `PageHeader` collaboration variant which\n * uses the same gapped row.\n */\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"group/avatar-group flex items-center gap-1.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className\n )}\n {...props}\n />\n )\n}\n\n// ── Shadcn Studio–style compositions (tokens + a11y checklist: sr-only status, meaningful alt on image) ──\n\ntype AvatarShape = NonNullable<VariantProps<typeof avatarRootVariants>[\"shape\"]>\ntype AvatarVariant = NonNullable<VariantProps<typeof avatarRootVariants>[\"variant\"]>\ntype AvatarSize = NonNullable<VariantProps<typeof avatarRootVariants>[\"size\"]>\n\ntype AvatarInitialsProps = Omit<AvatarProps, \"children\"> & {\n initials: string\n /** When true, initials are hidden from accessibility tree (pair with visible name). Default true. */\n decorative?: boolean\n /** Extra classes on `AvatarFallback` (e.g. font weight). */\n fallbackClassName?: string\n}\n\n/** Initials-only chip using `--avatar-initials-bg` / `--avatar-initials-fg` (Exxat tokens). */\nfunction AvatarInitials({\n initials,\n decorative = true,\n fallbackClassName,\n className,\n ...avatarProps\n}: AvatarInitialsProps) {\n return (\n <Avatar className={className} {...avatarProps}>\n <AvatarFallback\n aria-hidden={decorative ? true : undefined}\n className={cn(\n \"border-0 bg-[var(--avatar-initials-bg)] font-semibold text-[var(--avatar-initials-fg)]\",\n fallbackClassName\n )}\n >\n {initials}\n </AvatarFallback>\n </Avatar>\n )\n}\n\ntype AvatarStatusTone = \"online\" | \"busy\" | \"away\"\n\nconst avatarStatusDot: Record<AvatarStatusTone, string> = {\n online: \"bg-emerald-600 dark:bg-emerald-400\",\n busy: \"bg-destructive\",\n away: \"bg-amber-600 dark:bg-amber-400\",\n}\n\n/** Presence dot (Studio avatars 7–9). Wraps a single `Avatar`. */\nfunction AvatarStatus({\n children,\n status,\n label,\n className,\n position = \"bottom-end\",\n}: {\n children: React.ReactNode\n status: AvatarStatusTone\n /** Announced to screen readers (e.g. \"Busy\"). */\n label: string\n className?: string\n /** `bottom-end` matches `AvatarBadge`; `top-end` matches some Studio away demos. */\n position?: \"bottom-end\" | \"top-end\"\n}) {\n const pos =\n position === \"top-end\"\n ? \"-top-0.5 -end-0.5 bottom-auto start-auto\"\n : \"-end-0.5 -bottom-0.5 top-auto start-auto\"\n return (\n <span className={cn(\"relative inline-flex w-fit shrink-0\", className)}>\n {children}\n <span\n className={cn(\n \"pointer-events-none absolute z-10 size-3 rounded-full border-2 border-background\",\n pos,\n avatarStatusDot[status]\n )}\n aria-hidden\n />\n <span className=\"sr-only\">{label}</span>\n </span>\n )\n}\n\n/** Numeric badge overlay (Studio avatar 11). */\nfunction AvatarNotificationCount({\n children,\n count,\n className,\n badgeClassName,\n}: {\n children: React.ReactNode\n count: number | string\n className?: string\n badgeClassName?: string\n}) {\n return (\n <span className={cn(\"relative inline-flex w-fit shrink-0\", className)}>\n {children}\n <Badge\n className={cn(\n \"absolute -top-2.5 -end-2.5 z-10 h-5 min-w-5 justify-center px-1 tabular-nums\",\n badgeClassName\n )}\n >\n {count}\n </Badge>\n </span>\n )\n}\n\n/** Verified check overlay (Studio avatar 12) — primary token fill. */\nfunction AvatarVerified({\n children,\n label = \"Verified\",\n className,\n}: {\n children: React.ReactNode\n label?: string\n className?: string\n}) {\n return (\n <span className={cn(\"relative inline-flex w-fit shrink-0\", className)}>\n {children}\n <span className=\"pointer-events-none absolute -top-1.5 -end-1.5 z-10 inline-flex size-4 items-center justify-center rounded-full bg-primary text-primary-foreground shadow-sm\">\n <Check className=\"size-2.5\" strokeWidth={3} aria-hidden />\n <span className=\"sr-only\">{label}</span>\n </span>\n </span>\n )\n}\n\n/** Leo assistant mark — centralized; same icon treatment as Ask Leo sidebar. */\nfunction AvatarLeoAssistant({\n className,\n size = \"sm\",\n ...props\n}: Omit<AvatarProps, \"children\" | \"shape\">) {\n return (\n <Avatar size={size} shape=\"circle\" insetBorder={false} className={className} {...props}>\n <AvatarFallback className=\"bg-brand/15 p-0\">\n <span className=\"sr-only\">Leo</span>\n <i\n className=\"fa-duotone fa-solid fa-star-christmas text-xs text-brand\"\n aria-hidden=\"true\"\n />\n </AvatarFallback>\n </Avatar>\n )\n}\n\n/** “Add profile” affordance (Studio avatar 10). `onClick` on the button. */\nfunction AvatarPlusAction({\n children,\n actionLabel,\n onClick,\n className,\n buttonClassName,\n}: {\n children: React.ReactNode\n actionLabel: string\n onClick?: () => void\n className?: string\n buttonClassName?: string\n}) {\n return (\n <span className={cn(\"relative inline-flex w-fit shrink-0\", className)}>\n {children}\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"focus-visible:ring-ring/50 absolute -end-1 -bottom-1 z-10 inline-flex size-7 cursor-pointer items-center justify-center rounded-full bg-background shadow-sm ring-1 ring-border focus-visible:ring-[3px] focus-visible:outline-none\",\n buttonClassName\n )}\n >\n <Plus className=\"size-4 text-muted-foreground\" aria-hidden />\n <span className=\"sr-only\">{actionLabel}</span>\n </button>\n </span>\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarBadge,\n AvatarInitials,\n AvatarStatus,\n AvatarNotificationCount,\n AvatarVerified,\n AvatarPlusAction,\n AvatarLeoAssistant,\n avatarRootVariants,\n}\nexport type {\n AvatarProps,\n AvatarInitialsProps,\n AvatarShape,\n AvatarVariant,\n AvatarSize,\n AvatarStatusTone,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n outline:\n \"border-input bg-background hover:bg-interactive-hover hover:text-interactive-hover-foreground aria-expanded:bg-interactive-hover aria-expanded:text-interactive-hover-foreground dark:bg-input/15 dark:hover:bg-input/25\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost:\n \"hover:bg-interactive-hover hover:text-interactive-hover-foreground aria-expanded:bg-interactive-hover aria-expanded:text-interactive-hover-foreground dark:hover:bg-interactive-hover-subtle\",\n destructive:\n \"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pe-2.5 has-data-[icon=inline-start]:ps-2.5\",\n xs: \"h-6 gap-1 px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1 px-3 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pe-2 has-data-[icon=inline-start]:ps-2 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pe-3.5 has-data-[icon=inline-start]:ps-3.5\",\n icon: \"size-9\",\n \"icon-xs\":\n \"size-6 in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-8 in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }\n>(({ className, variant = \"default\", size = \"default\", asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size }), className)}\n {...props}\n />\n )\n})\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\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]:w-px data-[orientation=vertical]:self-stretch\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\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 <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return (\n <TooltipPrimitive.Trigger\n data-slot=\"tooltip-trigger\"\n suppressHydrationWarning\n className={cn(\"cursor-pointer\", className)}\n {...props}\n />\n )\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\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 \"z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pe-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-end-2 data-[side=right]:slide-in-from-start-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }\n","\"use client\"\n\n/**\n * PageHeader — Full-width content area header.\n *\n * Sits at the top of a page's main content, BELOW the breadcrumb / topbar.\n * Uses Ivy Presto (Adobe Fonts) for the title via the `--font-heading`\n * CSS variable.\n *\n * **Variant `collaboration`** — optional access line + collaborator faces\n * (or **Add collaborator** when the roster is empty) ahead of the primary\n * `actions` slot. The full **Invite people** flow lives in the consuming\n * page's `actions` overflow menu — this primitive only renders the face row.\n *\n * WCAG 2.1 AA:\n * - `<h1>` landmark — one per page (WCAG 1.3.1)\n * - Sufficient colour contrast >= 4.5:1 on title + subtitle (SC 1.4.3)\n * - Face row: `role=\"group\"` + aggregate `aria-label`; each face has a\n * `Tooltip` name (SC 4.1.2)\n *\n * Promotion note: this file lived at `apps/web/components/page-header.tsx`\n * until 2026-05-20. It moved into `@exxatdesignux/ui` so other apps (and\n * future docs sites) can compose hub headers without duplicating the\n * collaboration variant, h1 styling, or face-row a11y wiring. The\n * `CollaboratorAccessRole` union is duplicated here as a narrow string\n * literal so the primitive stays free of `apps/web/lib/` couplings — the\n * authoritative role labels / icons / capability helpers continue to live\n * in `apps/web/lib/collaborator-access.ts`.\n */\n\nimport * as React from \"react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\"\nimport { Button } from \"./button\"\nimport { Separator } from \"./separator\"\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"./tooltip\"\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Library access role for shared hubs. Mirrors\n * `apps/web/lib/collaborator-access.ts > CollaboratorAccessRole` — kept\n * structurally identical so the apps/web type and this type are mutually\n * assignable wherever consumers pass collaborator rosters to `PageHeader`.\n */\nexport type PageHeaderCollaboratorAccessRole =\n | \"owner\"\n | \"editor\"\n | \"commenter\"\n | \"viewer\"\n\nexport type PageHeaderVariant = \"default\" | \"collaboration\"\n\nexport interface PageHeaderCollaborator {\n id: string\n name: string\n imageUrl?: string | null\n initials?: string\n email?: string\n access?: PageHeaderCollaboratorAccessRole\n /** Org / directory role tags (e.g. Faculty, Program coordinator). */\n roles?: string[]\n}\n\nexport interface PageHeaderProps {\n /** Primary page title — rendered as `<h1>` in Ivy Presto serif. */\n title: string\n /** Short descriptor or date shown below the title (and below `accessInfo` when set). */\n subtitle?: React.ReactNode\n /** Layout preset — `collaboration` enables access line + face row ahead of `actions`. */\n variant?: PageHeaderVariant\n /**\n * Role / access copy or badges — rendered between the title and subtitle\n * when `variant=\"collaboration\"` (e.g. lock icon + \"Editors can modify\").\n */\n accessInfo?: React.ReactNode\n /** People with access — shown as a horizontal row of faces when `variant=\"collaboration\"`. */\n collaborators?: PageHeaderCollaborator[]\n /** Max faces before a `+N` chip — default 3. */\n collaboratorDisplayLimit?: number\n /** Opens the invite collaborators sheet when a face, overflow chip, or empty-state CTA is activated. */\n onCollaboratorsOpen?: () => void\n /** Label for the empty-roster header control — default `\"Add collaborator\"`. */\n addCollaboratorLabel?: string\n /** Optional slot for right-aligned actions (buttons, selectors, etc.). */\n actions?: React.ReactNode\n /** Extra className for the outer wrapper. */\n className?: string\n /** When false, the title + subtitle are visually hidden (actions remain). */\n showTitleBlock?: boolean\n}\n\nfunction PageHeaderCollaborationAccess({\n people,\n limit,\n onOpenCollaborators,\n addCollaboratorLabel,\n}: {\n people: PageHeaderCollaborator[]\n limit: number\n onOpenCollaborators?: () => void\n addCollaboratorLabel: string\n}) {\n if (people.length === 0) {\n return (\n <div\n role=\"group\"\n aria-label=\"People with access\"\n className=\"flex shrink-0 items-center\"\n >\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"lg\"\n onClick={onOpenCollaborators}\n disabled={!onOpenCollaborators}\n >\n <i className=\"fa-light fa-user-plus\" aria-hidden=\"true\" />\n {addCollaboratorLabel}\n </Button>\n </div>\n )\n }\n\n const visible = people.slice(0, limit)\n const overflow = Math.max(0, people.length - visible.length)\n const names = people.map((p) => p.name).join(\", \")\n\n return (\n <div\n role=\"group\"\n aria-label={names ? `People with access: ${names}` : \"People with access\"}\n className=\"flex shrink-0 items-center gap-2 sm:gap-2.5\"\n >\n <div className=\"flex shrink-0 items-center gap-1.5\">\n {visible.map((c) => (\n <Tooltip key={c.id}>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className=\"relative shrink-0 rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n aria-label={`Open collaborators — ${c.name}`}\n onClick={onOpenCollaborators}\n disabled={!onOpenCollaborators}\n >\n <Avatar size=\"sm\" shape=\"circle\" className=\"pointer-events-none\">\n {c.imageUrl ? (\n <AvatarImage src={c.imageUrl} alt=\"\" referrerPolicy=\"no-referrer\" />\n ) : null}\n <AvatarFallback className=\"text-xs font-semibold\">\n {(c.initials ?? c.name.slice(0, 2)).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{c.name}</TooltipContent>\n </Tooltip>\n ))}\n {overflow > 0 && (\n <button\n type=\"button\"\n className=\"flex size-6 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-semibold tabular-nums text-muted-foreground ring-1 ring-border/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n aria-label={`Open collaborators — ${overflow} more people with access`}\n onClick={onOpenCollaborators}\n disabled={!onOpenCollaborators}\n >\n +{overflow}\n </button>\n )}\n </div>\n </div>\n )\n}\n\nexport function PageHeader({\n title,\n subtitle,\n variant = \"default\",\n accessInfo,\n collaborators,\n collaboratorDisplayLimit = 3,\n onCollaboratorsOpen,\n addCollaboratorLabel = \"Add collaborator\",\n actions,\n className,\n showTitleBlock = true,\n}: PageHeaderProps) {\n const isCollaboration = variant === \"collaboration\"\n const showAccess = Boolean(isCollaboration && accessInfo)\n const showCollaborationAccess = isCollaboration\n const showActionsColumn = Boolean(actions) || showCollaborationAccess\n const showCollaboratorActionsSeparator =\n showCollaborationAccess && Boolean(actions)\n\n return (\n <div\n className={cn(\n \"flex flex-col gap-1 px-4 pt-2 pb-4 lg:px-6\",\n \"sm:flex-row sm:items-end sm:gap-4\",\n showTitleBlock ? \"sm:justify-between\" : \"sm:justify-end\",\n className,\n )}\n >\n {/* Title block — hidden visually when showTitleBlock is false; keep h1 for a11y. */}\n <div className={cn(\"flex min-w-0 flex-col gap-0.5\", !showTitleBlock && \"sr-only\")}>\n <h1\n className=\"text-2xl font-semibold tracking-tight leading-tight text-foreground\"\n style={{ fontFamily: \"var(--font-heading)\" }}\n suppressHydrationWarning\n >\n {title}\n </h1>\n {showAccess && (\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1 text-xs leading-snug text-muted-foreground\">\n {accessInfo}\n </div>\n )}\n {subtitle && (\n <p className=\"text-sm text-muted-foreground leading-none\">{subtitle}</p>\n )}\n </div>\n\n {showActionsColumn && (\n <div className=\"flex flex-wrap items-center gap-2 sm:gap-3 shrink-0 sm:ms-auto sm:justify-end\">\n {showCollaborationAccess ? (\n <PageHeaderCollaborationAccess\n people={collaborators ?? []}\n limit={collaboratorDisplayLimit}\n onOpenCollaborators={onCollaboratorsOpen}\n addCollaboratorLabel={addCollaboratorLabel}\n />\n ) : null}\n {showCollaboratorActionsSeparator ? (\n <Separator\n orientation=\"vertical\"\n decorative\n className=\"h-8 shrink-0\"\n />\n ) : null}\n {actions}\n </div>\n )}\n </div>\n )\n}\n"]}
@@ -34,7 +34,7 @@ function PopoverContent({
34
34
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
35
35
  "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
36
36
  "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",
37
- "data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",
37
+ "data-[side=left]:slide-in-from-end-2 data-[side=right]:slide-in-from-start-2",
38
38
  className
39
39
  ),
40
40
  ...props
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/popover.tsx"],"names":["PopoverPrimitive"],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACCA,SAAS,OAAA,CAAQ,EAAE,GAAG,KAAA,EAAM,EAAuD;AACjF,EAAA,uBAAO,GAAA,CAACA,SAAA,CAAiB,IAAA,EAAjB,EAAuB,GAAG,KAAA,EAAO,CAAA;AAC3C;AAEA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0D;AACtG,EAAA,uBAAO,GAAA,CAACA,SAAA,CAAiB,OAAA,EAAjB,EAAyB,SAAA,EAAW,GAAG,gBAAA,EAAkB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC1F;AAEA,SAAS,aAAA,CAAc,EAAE,GAAG,KAAA,EAAM,EAAyD;AACzF,EAAA,uBAAO,GAAA,CAACA,SAAA,CAAiB,MAAA,EAAjB,EAAyB,GAAG,KAAA,EAAO,CAAA;AAC7C;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACE,GAAA,CAACA,SAAA,CAAiB,MAAA,EAAjB,EACC,QAAA,kBAAA,GAAA;AAAA,IAACA,SAAA,CAAiB,OAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,wEAAA;AAAA,QACA,8DAAA;AAAA,QACA,4DAAA;AAAA,QACA,8DAAA;AAAA,QACA,+EAAA;AAAA,QACA,+EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ","file":"popover.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\nimport { cn } from \"../../lib/utils\"\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root {...props} />\n}\n\nfunction PopoverTrigger({ className, ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger className={cn(\"cursor-pointer\", className)} {...props} />\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"start\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 rounded-lg border border-border bg-popover shadow-md outline-none\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nexport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger }\n"]}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/popover.tsx"],"names":["PopoverPrimitive"],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACCA,SAAS,OAAA,CAAQ,EAAE,GAAG,KAAA,EAAM,EAAuD;AACjF,EAAA,uBAAO,GAAA,CAACA,SAAA,CAAiB,IAAA,EAAjB,EAAuB,GAAG,KAAA,EAAO,CAAA;AAC3C;AAEA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0D;AACtG,EAAA,uBAAO,GAAA,CAACA,SAAA,CAAiB,OAAA,EAAjB,EAAyB,SAAA,EAAW,GAAG,gBAAA,EAAkB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC1F;AAEA,SAAS,aAAA,CAAc,EAAE,GAAG,KAAA,EAAM,EAAyD;AACzF,EAAA,uBAAO,GAAA,CAACA,SAAA,CAAiB,MAAA,EAAjB,EAAyB,GAAG,KAAA,EAAO,CAAA;AAC7C;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACE,GAAA,CAACA,SAAA,CAAiB,MAAA,EAAjB,EACC,QAAA,kBAAA,GAAA;AAAA,IAACA,SAAA,CAAiB,OAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,wEAAA;AAAA,QACA,8DAAA;AAAA,QACA,4DAAA;AAAA,QACA,8DAAA;AAAA,QACA,+EAAA;AAAA,QACA,8EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ","file":"popover.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\nimport { cn } from \"../../lib/utils\"\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root {...props} />\n}\n\nfunction PopoverTrigger({ className, ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger className={cn(\"cursor-pointer\", className)} {...props} />\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"start\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 rounded-lg border border-border bg-popover shadow-md outline-none\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-end-2 data-[side=right]:slide-in-from-start-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nexport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger }\n"]}
@@ -65,7 +65,7 @@ function SelectContent({
65
65
  {
66
66
  "data-slot": "select-content",
67
67
  "data-align-trigger": position === "item-aligned",
68
- className: cn("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 rtl:data-[side=left]:translate-x-1 data-[side=right]:translate-x-1 rtl:data-[side=right]:-translate-x-1 data-[side=top]:-translate-y-1", className),
68
+ className: cn("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-end-2 data-[side=right]:slide-in-from-start-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 rtl:data-[side=left]:translate-x-1 data-[side=right]:translate-x-1 rtl:data-[side=right]:-translate-x-1 data-[side=top]:-translate-y-1", className),
69
69
  position,
70
70
  align,
71
71
  ...props,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/select.tsx"],"names":["SelectPrimitive"],"mappings":"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","file":"select.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return (\n <SelectPrimitive.Group\n data-slot=\"select-group\"\n className={cn(\"scroll-my-1 p-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"flex w-fit cursor-pointer items-center justify-between gap-1.5 rounded-md border border-input bg-transparent py-2 pe-2 ps-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/15 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <i className=\"fa-light fa-chevron-down pointer-events-none size-4 text-muted-foreground\" aria-hidden=\"true\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n data-align-trigger={position === \"item-aligned\"}\n className={cn(\"relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", position ===\"popper\"&&\"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 rtl:data-[side=left]:translate-x-1 data-[side=right]:translate-x-1 rtl:data-[side=right]:-translate-x-1 data-[side=top]:-translate-y-1\", className )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n data-position={position}\n className={cn(\n \"data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)\",\n position === \"popper\" && \"\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"px-1.5 py-1 text-xs text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pe-8 ps-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_i]:pointer-events-none [&_svg]:shrink-0 [&_i]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute end-2 flex size-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <i className=\"fa-light fa-check pointer-events-none\" aria-hidden=\"true\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"pointer-events-none -mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <i className=\"fa-light fa-chevron-up\" aria-hidden=\"true\"\n />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <i className=\"fa-light fa-chevron-down\" aria-hidden=\"true\"\n />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/select.tsx"],"names":["SelectPrimitive"],"mappings":"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","file":"select.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return (\n <SelectPrimitive.Group\n data-slot=\"select-group\"\n className={cn(\"scroll-my-1 p-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"flex w-fit cursor-pointer items-center justify-between gap-1.5 rounded-md border border-input bg-transparent py-2 pe-2 ps-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/15 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <i className=\"fa-light fa-chevron-down pointer-events-none size-4 text-muted-foreground\" aria-hidden=\"true\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n data-align-trigger={position === \"item-aligned\"}\n className={cn(\"relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-end-2 data-[side=right]:slide-in-from-start-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", position ===\"popper\"&&\"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 rtl:data-[side=left]:translate-x-1 data-[side=right]:translate-x-1 rtl:data-[side=right]:-translate-x-1 data-[side=top]:-translate-y-1\", className )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n data-position={position}\n className={cn(\n \"data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)\",\n position === \"popper\" && \"\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"px-1.5 py-1 text-xs text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pe-8 ps-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_i]:pointer-events-none [&_svg]:shrink-0 [&_i]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute end-2 flex size-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <i className=\"fa-light fa-check pointer-events-none\" aria-hidden=\"true\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"pointer-events-none -mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <i className=\"fa-light fa-chevron-up\" aria-hidden=\"true\"\n />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <i className=\"fa-light fa-chevron-down\" aria-hidden=\"true\"\n />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n"]}
@@ -103,7 +103,7 @@ function SheetContent({
103
103
  "data-slot": "sheet-content",
104
104
  "data-side": side,
105
105
  className: cn(
106
- "fixed z-50 flex flex-col gap-4 bg-background bg-clip-padding text-sm shadow-lg outline-none duration-300 ease-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-e data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-s data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-6 data-[side=left]:data-open:slide-in-from-left-6 data-[side=right]:data-open:slide-in-from-right-6 data-[side=top]:data-open:slide-in-from-top-6 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-6 data-[side=left]:data-closed:slide-out-to-left-6 data-[side=right]:data-closed:slide-out-to-right-6 data-[side=top]:data-closed:slide-out-to-top-6",
106
+ "fixed z-50 flex flex-col gap-4 bg-background bg-clip-padding text-sm shadow-lg outline-none duration-300 ease-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:start-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-e data-[side=right]:inset-y-0 data-[side=right]:end-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-s data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-6 data-[side=left]:data-open:slide-in-from-start-6 data-[side=right]:data-open:slide-in-from-end-6 data-[side=top]:data-open:slide-in-from-top-6 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-6 data-[side=left]:data-closed:slide-out-to-start-6 data-[side=right]:data-closed:slide-out-to-end-6 data-[side=top]:data-closed:slide-out-to-top-6",
107
107
  className
108
108
  ),
109
109
  ...props,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/button.tsx","../../../src/components/ui/sheet.tsx"],"names":["jsx","SheetPrimitive"],"mappings":"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","file":"sheet.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n outline:\n \"border-input bg-background hover:bg-interactive-hover hover:text-interactive-hover-foreground aria-expanded:bg-interactive-hover aria-expanded:text-interactive-hover-foreground dark:bg-input/15 dark:hover:bg-input/25\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost:\n \"hover:bg-interactive-hover hover:text-interactive-hover-foreground aria-expanded:bg-interactive-hover aria-expanded:text-interactive-hover-foreground dark:hover:bg-interactive-hover-subtle\",\n destructive:\n \"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pe-2.5 has-data-[icon=inline-start]:ps-2.5\",\n xs: \"h-6 gap-1 px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1 px-3 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pe-2 has-data-[icon=inline-start]:ps-2 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pe-3.5 has-data-[icon=inline-start]:ps-3.5\",\n icon: \"size-9\",\n \"icon-xs\":\n \"size-6 in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-8 in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }\n>(({ className, variant = \"default\", size = \"default\", asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size }), className)}\n {...props}\n />\n )\n})\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\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 \"fixed inset-0 z-50 bg-overlay duration-300 ease-out supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n showOverlay = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n showOverlay?: boolean\n}) {\n return (\n <SheetPortal>\n {showOverlay && <SheetOverlay />}\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n \"fixed z-50 flex flex-col gap-4 bg-background bg-clip-padding text-sm shadow-lg outline-none duration-300 ease-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-e data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-s data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-6 data-[side=left]:data-open:slide-in-from-left-6 data-[side=right]:data-open:slide-in-from-right-6 data-[side=top]:data-open:slide-in-from-top-6 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-6 data-[side=left]:data-closed:slide-out-to-left-6 data-[side=right]:data-closed:slide-out-to-right-6 data-[side=top]:data-closed:slide-out-to-top-6\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close data-slot=\"sheet-close\" asChild>\n <Button\n variant=\"ghost\"\n className=\"absolute top-3 end-3\"\n size=\"icon-sm\"\n >\n <i className=\"fa-light fa-xmark\" aria-hidden=\"true\" />\n <span className=\"sr-only\">Close</span>\n </Button>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-0.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", 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(\n \"text-base font-medium text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/button.tsx","../../../src/components/ui/sheet.tsx"],"names":["jsx","SheetPrimitive"],"mappings":"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","file":"sheet.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n outline:\n \"border-input bg-background hover:bg-interactive-hover hover:text-interactive-hover-foreground aria-expanded:bg-interactive-hover aria-expanded:text-interactive-hover-foreground dark:bg-input/15 dark:hover:bg-input/25\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost:\n \"hover:bg-interactive-hover hover:text-interactive-hover-foreground aria-expanded:bg-interactive-hover aria-expanded:text-interactive-hover-foreground dark:hover:bg-interactive-hover-subtle\",\n destructive:\n \"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pe-2.5 has-data-[icon=inline-start]:ps-2.5\",\n xs: \"h-6 gap-1 px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1 px-3 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pe-2 has-data-[icon=inline-start]:ps-2 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pe-3.5 has-data-[icon=inline-start]:ps-3.5\",\n icon: \"size-9\",\n \"icon-xs\":\n \"size-6 in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-8 in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }\n>(({ className, variant = \"default\", size = \"default\", asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size }), className)}\n {...props}\n />\n )\n})\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\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 \"fixed inset-0 z-50 bg-overlay duration-300 ease-out supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n showOverlay = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n showOverlay?: boolean\n}) {\n return (\n <SheetPortal>\n {showOverlay && <SheetOverlay />}\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n \"fixed z-50 flex flex-col gap-4 bg-background bg-clip-padding text-sm shadow-lg outline-none duration-300 ease-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:start-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-e data-[side=right]:inset-y-0 data-[side=right]:end-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-s data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-6 data-[side=left]:data-open:slide-in-from-start-6 data-[side=right]:data-open:slide-in-from-end-6 data-[side=top]:data-open:slide-in-from-top-6 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-6 data-[side=left]:data-closed:slide-out-to-start-6 data-[side=right]:data-closed:slide-out-to-end-6 data-[side=top]:data-closed:slide-out-to-top-6\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close data-slot=\"sheet-close\" asChild>\n <Button\n variant=\"ghost\"\n className=\"absolute top-3 end-3\"\n size=\"icon-sm\"\n >\n <i className=\"fa-light fa-xmark\" aria-hidden=\"true\" />\n <span className=\"sr-only\">Close</span>\n </Button>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-0.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", 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(\n \"text-base font-medium text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n"]}
@@ -44,7 +44,7 @@ declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: se
44
44
  open?: boolean;
45
45
  onOpenChange?: (open: boolean) => void;
46
46
  }): react_jsx_runtime.JSX.Element;
47
- declare function Sidebar({ side, variant, collapsible, className, children, dir, ...props }: React.ComponentProps<"div"> & {
47
+ declare function Sidebar({ side, variant, collapsible, className, children, dir: _dir, ...props }: React.ComponentProps<"div"> & {
48
48
  side?: "left" | "right";
49
49
  variant?: "sidebar" | "floating" | "inset";
50
50
  collapsible?: "offcanvas" | "icon" | "none";
@@ -153,7 +153,7 @@ function TooltipContent({
153
153
  "data-slot": "tooltip-content",
154
154
  sideOffset,
155
155
  className: cn(
156
- "z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pe-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
156
+ "z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pe-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-end-2 data-[side=right]:slide-in-from-start-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
157
157
  className
158
158
  ),
159
159
  ...props,
@@ -208,7 +208,7 @@ function SidebarProvider({
208
208
  const fromCookie = readSidebarStateCookie();
209
209
  if (fromCookie === void 0) return;
210
210
  _setOpen((prev) => prev === fromCookie ? prev : fromCookie);
211
- }, []);
211
+ }, [openProp]);
212
212
  const setOpen = React4.useCallback(
213
213
  (value, opts) => {
214
214
  const openState = typeof value === "function" ? value(open) : value;
@@ -288,7 +288,7 @@ function Sidebar({
288
288
  collapsible = "offcanvas",
289
289
  className,
290
290
  children,
291
- dir,
291
+ dir: _dir,
292
292
  ...props
293
293
  }) {
294
294
  const { isMobile, state, setOpen } = useSidebar();