@codapet/design-system 0.8.3 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +20 -0
- package/dist/index.d.mts +32 -3
- package/dist/index.mjs +70 -23
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -1
package/AGENTS.md
CHANGED
|
@@ -72,6 +72,26 @@ These are the foot-guns. Knowing them prevents most "why does my Button look wro
|
|
|
72
72
|
- `Dialog`/`Drawer` are the standard Radix/Vaul primitives.
|
|
73
73
|
- **`SmartDialog*`** is a CodaPet addition: same API surface, but renders `Drawer` on `≤600px` and `Dialog` above. Prefer it for any modal that should bottom-sheet on mobile. Replace every `Dialog` token with `SmartDialog` (`SmartDialogTrigger`, `SmartDialogContent`, etc.).
|
|
74
74
|
|
|
75
|
+
### Tooltip / RichTooltip
|
|
76
|
+
|
|
77
|
+
- `TooltipContent` (the plain text tooltip) defaults to brand blue (`bg-primary`), including its arrow. The arrow used to be hardcoded — it now honors two extra props so a restyled body and its arrow stay in sync:
|
|
78
|
+
- `arrowClassName?: string` — merged (via `cn`) onto the arrow. Recolor it to match a custom surface.
|
|
79
|
+
- `hideArrow?: boolean` — omit the arrow entirely.
|
|
80
|
+
- White-tooltip example (recolor body **and** arrow together, otherwise the arrow stays blue). If the body has a shadow, add a matching **`drop-shadow`** to the arrow — a plain `shadow-*` won't follow the diamond shape and a white arrow is invisible without it:
|
|
81
|
+
```tsx
|
|
82
|
+
<TooltipContent
|
|
83
|
+
className="bg-white text-foreground shadow-md"
|
|
84
|
+
arrowClassName="bg-white fill-white drop-shadow-[0_2px_2px_rgba(0,0,0,0.12)]"
|
|
85
|
+
/>
|
|
86
|
+
```
|
|
87
|
+
- `RichTooltipContent` (icon + heading + body, optionally `dismissible`) is dark by default. Its surface, text and arrow are no longer hardcoded:
|
|
88
|
+
- `variant?: "dark" | "light"` — `"dark"` (default) is the original dark surface + white text; `"light"` is a white surface + dark text, and **ships a soft `shadow-md` on the surface plus a matching `drop-shadow` on the arrow** so it's visible on light backgrounds out of the box. Both look correct in either app theme. Pick a variant instead of hand-rolling colors.
|
|
89
|
+
- `surfaceClassName?: string` — merged onto the inner surface `div`. Overrides the background (and text, since text color lives on the same element): `surfaceClassName="bg-white text-foreground"`.
|
|
90
|
+
- `arrowClassName?: string` — merged onto the arrow so it matches a custom surface (e.g. `arrowClassName="fill-white"`). When you give the surface a shadow via `surfaceClassName`, pair it with a `drop-shadow` here (e.g. `arrowClassName="fill-white drop-shadow-[0_2px_2px_rgba(0,0,0,0.12)]"`).
|
|
91
|
+
- `hideArrow?: boolean` — omit the arrow.
|
|
92
|
+
- `className` still lands on the **outer** (transparent) positioning wrapper, not the visible surface — that's why `className="bg-white"` alone never worked. Use `surfaceClassName`/`variant` for appearance.
|
|
93
|
+
- Exported types: `TooltipContentProps`, `RichTooltipContentProps`, `RichTooltipVariant`. All new props are optional and defaults are unchanged, so existing usages render identically.
|
|
94
|
+
|
|
75
95
|
## Components added on top of shadcn
|
|
76
96
|
|
|
77
97
|
These don't exist in shadcn — reach for them instead of building your own:
|
package/dist/index.d.mts
CHANGED
|
@@ -724,15 +724,44 @@ declare function Tooltip({ persistent, ...props }: React$1.ComponentProps<typeof
|
|
|
724
724
|
persistent?: boolean;
|
|
725
725
|
}): react_jsx_runtime.JSX.Element;
|
|
726
726
|
declare function TooltipTrigger({ ...props }: React$1.ComponentProps<typeof TooltipPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
|
|
727
|
-
|
|
727
|
+
interface TooltipContentProps extends React$1.ComponentProps<typeof TooltipPrimitive.Content> {
|
|
728
|
+
/** Omit the arrow entirely. Defaults to `false`. */
|
|
729
|
+
hideArrow?: boolean;
|
|
730
|
+
/**
|
|
731
|
+
* Classes merged (via `cn`) onto the arrow. Use to recolor it so it matches a
|
|
732
|
+
* custom surface, e.g. `arrowClassName="bg-white fill-white"`.
|
|
733
|
+
*/
|
|
734
|
+
arrowClassName?: string;
|
|
735
|
+
}
|
|
736
|
+
declare function TooltipContent({ className, sideOffset, hideArrow, arrowClassName, children, ...props }: TooltipContentProps): react_jsx_runtime.JSX.Element;
|
|
737
|
+
type RichTooltipVariant = 'dark' | 'light';
|
|
728
738
|
interface RichTooltipContentProps extends Omit<React$1.ComponentProps<typeof TooltipPrimitive.Content>, 'children'> {
|
|
729
739
|
icon?: React$1.ReactNode;
|
|
730
740
|
heading?: string;
|
|
731
741
|
dismissible?: boolean;
|
|
732
742
|
onDismiss?: () => void;
|
|
733
743
|
children: React$1.ReactNode;
|
|
744
|
+
/**
|
|
745
|
+
* Preset surface + text + arrow combo. `"dark"` (default) keeps the original
|
|
746
|
+
* dark surface with white text; `"light"` renders a white surface with dark
|
|
747
|
+
* text. Both look correct out of the box regardless of the app theme.
|
|
748
|
+
*/
|
|
749
|
+
variant?: RichTooltipVariant;
|
|
750
|
+
/**
|
|
751
|
+
* Classes merged (via `cn`) onto the inner surface `div`, so the background
|
|
752
|
+
* (and text color) can be overridden, e.g. `surfaceClassName="bg-white text-foreground"`.
|
|
753
|
+
* Wins over the `variant` defaults.
|
|
754
|
+
*/
|
|
755
|
+
surfaceClassName?: string;
|
|
756
|
+
/**
|
|
757
|
+
* Classes merged (via `cn`) onto the arrow so it matches a custom surface,
|
|
758
|
+
* e.g. `arrowClassName="fill-white"`. Wins over the `variant` defaults.
|
|
759
|
+
*/
|
|
760
|
+
arrowClassName?: string;
|
|
761
|
+
/** Omit the arrow entirely. Defaults to `false`. */
|
|
762
|
+
hideArrow?: boolean;
|
|
734
763
|
}
|
|
735
|
-
declare function RichTooltipContent({ className, sideOffset, icon, heading, dismissible, onDismiss, children, ...props }: RichTooltipContentProps): react_jsx_runtime.JSX.Element;
|
|
764
|
+
declare function RichTooltipContent({ className, sideOffset, icon, heading, dismissible, onDismiss, children, variant, surfaceClassName, arrowClassName, hideArrow, ...props }: RichTooltipContentProps): react_jsx_runtime.JSX.Element;
|
|
736
765
|
|
|
737
766
|
type SidebarContextProps = {
|
|
738
767
|
state: 'expanded' | 'collapsed';
|
|
@@ -930,4 +959,4 @@ declare function cn(...inputs: ClassValue[]): string;
|
|
|
930
959
|
|
|
931
960
|
declare function useIsMobile(): boolean;
|
|
932
961
|
|
|
933
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertBanner, type AlertBannerProps, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, AutoResizeTextarea, Avatar, AvatarFallback, AvatarImage, Badge, BadgeActionable, type BadgeActionableProps, BadgeInformative, BadgeInformativeGroup, BadgeInformativeItem, type BadgeInformativeProps, BadgeNumber, type BadgeNumberProps, Body, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, type DateFormat, DateInput, type DateInputProps, DateRangeInput, type DateRangeInputProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DisplayHeading, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DropdownSelect, DropdownSelectContent, type DropdownSelectContentProps, DropdownSelectLabel, type DropdownSelectLabelProps, DropdownSelectOption, type DropdownSelectOptionProps, type DropdownSelectProps, DropdownSelectTrigger, type DropdownSelectTriggerProps, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HeadingL, HeadingLMedium, HeadingM, HeadingMMedium, HeadingS, HeadingSMedium, HeadingXL, HeadingXLMedium, HeadingXS, HeadingXSMedium, HeadingXXS, HeadingXXSMedium, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MultiSelectFreeText, type MultiSelectFreeTextOption, type MultiSelectFreeTextProps, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, OptionCard, type OptionCardProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, ProgressBar, type ProgressBarProps, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RichTooltipContent, type RichTooltipContentProps, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, type SearchSuggestion, SearchableSelect, SearchableSelectContent, SearchableSelectEmpty, SearchableSelectGroup, SearchableSelectItem, type SearchableSelectOption, type SearchableSelectProps, SearchableSelectTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, SmartDialog, SmartDialogClose, SmartDialogContent, SmartDialogDescription, SmartDialogFooter, SmartDialogHeader, SmartDialogTitle, SmartDialogTrigger, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, type TabsTriggerProps, Textarea, type TextareaProps, ThemeProvider, ThemeToggle, type TimeFormat, TimeInput, type TimeInputProps, type TimeValue, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, alertBannerVariants, badgeActionableVariants, badgeInformativeVariants, badgeNumberVariants, badgeVariants, bodyTextVariants, buttonVariants, cn, displayTextVariants, inputVariants, labelTextVariants, navigationMenuTriggerStyle, optionCardVariants, progressBarVariants, tabsTriggerVariants, toggleVariants, useFormField, useIsMobile, useSidebar };
|
|
962
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertBanner, type AlertBannerProps, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, AutoResizeTextarea, Avatar, AvatarFallback, AvatarImage, Badge, BadgeActionable, type BadgeActionableProps, BadgeInformative, BadgeInformativeGroup, BadgeInformativeItem, type BadgeInformativeProps, BadgeNumber, type BadgeNumberProps, Body, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, type DateFormat, DateInput, type DateInputProps, DateRangeInput, type DateRangeInputProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DisplayHeading, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DropdownSelect, DropdownSelectContent, type DropdownSelectContentProps, DropdownSelectLabel, type DropdownSelectLabelProps, DropdownSelectOption, type DropdownSelectOptionProps, type DropdownSelectProps, DropdownSelectTrigger, type DropdownSelectTriggerProps, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HeadingL, HeadingLMedium, HeadingM, HeadingMMedium, HeadingS, HeadingSMedium, HeadingXL, HeadingXLMedium, HeadingXS, HeadingXSMedium, HeadingXXS, HeadingXXSMedium, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MultiSelectFreeText, type MultiSelectFreeTextOption, type MultiSelectFreeTextProps, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, OptionCard, type OptionCardProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, ProgressBar, type ProgressBarProps, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RichTooltipContent, type RichTooltipContentProps, type RichTooltipVariant, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, type SearchSuggestion, SearchableSelect, SearchableSelectContent, SearchableSelectEmpty, SearchableSelectGroup, SearchableSelectItem, type SearchableSelectOption, type SearchableSelectProps, SearchableSelectTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, SmartDialog, SmartDialogClose, SmartDialogContent, SmartDialogDescription, SmartDialogFooter, SmartDialogHeader, SmartDialogTitle, SmartDialogTrigger, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, type TabsTriggerProps, Textarea, type TextareaProps, ThemeProvider, ThemeToggle, type TimeFormat, TimeInput, type TimeInputProps, type TimeValue, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, type TooltipContentProps, TooltipProvider, TooltipTrigger, alertBannerVariants, badgeActionableVariants, badgeInformativeVariants, badgeNumberVariants, badgeVariants, bodyTextVariants, buttonVariants, cn, displayTextVariants, inputVariants, labelTextVariants, navigationMenuTriggerStyle, optionCardVariants, progressBarVariants, tabsTriggerVariants, toggleVariants, useFormField, useIsMobile, useSidebar };
|
package/dist/index.mjs
CHANGED
|
@@ -5889,9 +5889,9 @@ function Skeleton({ className, ...props }) {
|
|
|
5889
5889
|
}
|
|
5890
5890
|
|
|
5891
5891
|
// src/components/ui/tooltip.tsx
|
|
5892
|
-
import * as React48 from "react";
|
|
5893
5892
|
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
5894
5893
|
import { X as X4 } from "lucide-react";
|
|
5894
|
+
import * as React48 from "react";
|
|
5895
5895
|
import { jsx as jsx51, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
5896
5896
|
function TooltipProvider({
|
|
5897
5897
|
delayDuration = 0,
|
|
@@ -5942,6 +5942,8 @@ function TooltipTrigger({
|
|
|
5942
5942
|
function TooltipContent({
|
|
5943
5943
|
className,
|
|
5944
5944
|
sideOffset = 0,
|
|
5945
|
+
hideArrow = false,
|
|
5946
|
+
arrowClassName,
|
|
5945
5947
|
children,
|
|
5946
5948
|
...props
|
|
5947
5949
|
}) {
|
|
@@ -5951,17 +5953,39 @@ function TooltipContent({
|
|
|
5951
5953
|
"data-slot": "tooltip-content",
|
|
5952
5954
|
sideOffset,
|
|
5953
5955
|
className: cn(
|
|
5954
|
-
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
|
|
5956
|
+
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance ",
|
|
5955
5957
|
className
|
|
5956
5958
|
),
|
|
5957
5959
|
...props,
|
|
5958
5960
|
children: [
|
|
5959
5961
|
children,
|
|
5960
|
-
/* @__PURE__ */ jsx51(
|
|
5962
|
+
!hideArrow && /* @__PURE__ */ jsx51(
|
|
5963
|
+
TooltipPrimitive.Arrow,
|
|
5964
|
+
{
|
|
5965
|
+
className: cn(
|
|
5966
|
+
"bg-primary fill-primary z-10 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]",
|
|
5967
|
+
arrowClassName
|
|
5968
|
+
)
|
|
5969
|
+
}
|
|
5970
|
+
)
|
|
5961
5971
|
]
|
|
5962
5972
|
}
|
|
5963
5973
|
) });
|
|
5964
5974
|
}
|
|
5975
|
+
var richTooltipVariants = {
|
|
5976
|
+
dark: {
|
|
5977
|
+
surface: "bg-gray-surface-dark",
|
|
5978
|
+
text: "text-white",
|
|
5979
|
+
mutedText: "text-white/70 hover:text-white",
|
|
5980
|
+
arrow: "fill-gray-surface-dark"
|
|
5981
|
+
},
|
|
5982
|
+
light: {
|
|
5983
|
+
surface: "bg-white shadow-md",
|
|
5984
|
+
text: "text-gray-surface-dark",
|
|
5985
|
+
mutedText: "text-gray-surface-dark/70 hover:text-gray-surface-dark",
|
|
5986
|
+
arrow: "fill-white drop-shadow-[0_2px_2px_rgba(0,0,0,0.12)]"
|
|
5987
|
+
}
|
|
5988
|
+
};
|
|
5965
5989
|
function RichTooltipContent({
|
|
5966
5990
|
className,
|
|
5967
5991
|
sideOffset = 4,
|
|
@@ -5970,6 +5994,10 @@ function RichTooltipContent({
|
|
|
5970
5994
|
dismissible = false,
|
|
5971
5995
|
onDismiss,
|
|
5972
5996
|
children,
|
|
5997
|
+
variant = "dark",
|
|
5998
|
+
surfaceClassName,
|
|
5999
|
+
arrowClassName,
|
|
6000
|
+
hideArrow = false,
|
|
5973
6001
|
...props
|
|
5974
6002
|
}) {
|
|
5975
6003
|
const close = React48.useContext(TooltipCloseContext);
|
|
@@ -5977,6 +6005,7 @@ function RichTooltipContent({
|
|
|
5977
6005
|
close?.();
|
|
5978
6006
|
onDismiss?.();
|
|
5979
6007
|
};
|
|
6008
|
+
const styles = richTooltipVariants[variant] ?? richTooltipVariants.dark;
|
|
5980
6009
|
return /* @__PURE__ */ jsx51(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs30(
|
|
5981
6010
|
TooltipPrimitive.Content,
|
|
5982
6011
|
{
|
|
@@ -5991,29 +6020,43 @@ function RichTooltipContent({
|
|
|
5991
6020
|
},
|
|
5992
6021
|
...props,
|
|
5993
6022
|
children: [
|
|
5994
|
-
/* @__PURE__ */ jsxs30(
|
|
5995
|
-
|
|
5996
|
-
|
|
5997
|
-
|
|
5998
|
-
|
|
5999
|
-
|
|
6000
|
-
|
|
6001
|
-
|
|
6002
|
-
|
|
6003
|
-
|
|
6004
|
-
|
|
6005
|
-
className: "flex
|
|
6006
|
-
|
|
6007
|
-
|
|
6008
|
-
|
|
6009
|
-
|
|
6010
|
-
|
|
6011
|
-
|
|
6023
|
+
/* @__PURE__ */ jsxs30(
|
|
6024
|
+
"div",
|
|
6025
|
+
{
|
|
6026
|
+
className: cn(
|
|
6027
|
+
"flex items-start gap-3 rounded-[12px] px-3 py-4 text-sm leading-5 max-w-sm",
|
|
6028
|
+
styles.surface,
|
|
6029
|
+
styles.text,
|
|
6030
|
+
surfaceClassName
|
|
6031
|
+
),
|
|
6032
|
+
children: [
|
|
6033
|
+
icon && /* @__PURE__ */ jsx51("span", { className: "flex items-center justify-center shrink-0 size-5 [&_svg]:size-5", children: icon }),
|
|
6034
|
+
/* @__PURE__ */ jsxs30("div", { className: "flex flex-1 flex-col gap-2 min-w-0", children: [
|
|
6035
|
+
heading && /* @__PURE__ */ jsx51("p", { className: "font-semibold text-sm leading-5", children: heading }),
|
|
6036
|
+
/* @__PURE__ */ jsx51("div", { className: "font-normal text-sm leading-5", children })
|
|
6037
|
+
] }),
|
|
6038
|
+
dismissible && /* @__PURE__ */ jsx51(
|
|
6039
|
+
"button",
|
|
6040
|
+
{
|
|
6041
|
+
type: "button",
|
|
6042
|
+
onClick: handleDismiss,
|
|
6043
|
+
className: cn(
|
|
6044
|
+
"flex items-center justify-center shrink-0 size-5 transition-colors cursor-pointer",
|
|
6045
|
+
styles.mutedText
|
|
6046
|
+
),
|
|
6047
|
+
"aria-label": "Dismiss",
|
|
6048
|
+
children: /* @__PURE__ */ jsx51(X4, { className: "size-3.5" })
|
|
6049
|
+
}
|
|
6050
|
+
)
|
|
6051
|
+
]
|
|
6052
|
+
}
|
|
6053
|
+
),
|
|
6054
|
+
!hideArrow && /* @__PURE__ */ jsx51(
|
|
6012
6055
|
TooltipPrimitive.Arrow,
|
|
6013
6056
|
{
|
|
6014
6057
|
width: 16,
|
|
6015
6058
|
height: 12,
|
|
6016
|
-
className:
|
|
6059
|
+
className: cn(styles.arrow, arrowClassName)
|
|
6017
6060
|
}
|
|
6018
6061
|
)
|
|
6019
6062
|
]
|
|
@@ -7001,6 +7044,7 @@ function useTabIndicator(listRef, orientation) {
|
|
|
7001
7044
|
position: "absolute",
|
|
7002
7045
|
bottom: 0,
|
|
7003
7046
|
left: 0,
|
|
7047
|
+
zIndex: 1,
|
|
7004
7048
|
height: "2px",
|
|
7005
7049
|
width: activeEl.offsetWidth,
|
|
7006
7050
|
transform: `translateX(${activeEl.offsetLeft}px)`,
|
|
@@ -7013,6 +7057,7 @@ function useTabIndicator(listRef, orientation) {
|
|
|
7013
7057
|
position: "absolute",
|
|
7014
7058
|
left: 0,
|
|
7015
7059
|
top: 0,
|
|
7060
|
+
zIndex: 1,
|
|
7016
7061
|
width: "2px",
|
|
7017
7062
|
height: activeEl.offsetHeight,
|
|
7018
7063
|
transform: `translateY(${activeEl.offsetTop}px)`,
|
|
@@ -7086,7 +7131,9 @@ function TabsList({
|
|
|
7086
7131
|
"data-slot": "tabs-list",
|
|
7087
7132
|
className: cn(
|
|
7088
7133
|
"text-muted-foreground relative",
|
|
7089
|
-
|
|
7134
|
+
// The gray track is an inset shadow rather than a border so it lives
|
|
7135
|
+
// inside the padding box, letting the active indicator paint over it.
|
|
7136
|
+
orientation === "vertical" ? "flex flex-col shadow-[inset_1px_0_0_0_var(--gray-stroke-default)]" : "flex w-fit items-center overflow-x-auto shadow-[inset_0_-1px_0_0_var(--gray-stroke-default)]",
|
|
7090
7137
|
className
|
|
7091
7138
|
),
|
|
7092
7139
|
...props,
|