@orangecheck/design 0.8.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { DEFAULT_OC_THEME, OC_DEFAULT_ACCENT, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, OcAppearanceMenuProps, OcAurora, OcAuroraProps, OcTheme, OcThemeBridge, OcThemeId, OcThemePicker, OcThemePickerProps, OcThemeProvider, OcThemeProviderProps, accentFor, cn, getOcThemeInitScript, isKnownTheme, resolveTheme, useOcSkin } from './tokens.mjs';
2
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithActionProps, AlertWithCountdown, AlertWithCountdownProps, Badge, Bar, BarProps, BitcoinAddress, BitcoinAddressProps, Button, Card, CardProps, Checkbox, ConfirmHost, ConfirmOptions, CopyButton, CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, ModalProps, Pagination, PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, PromptOptions, QrCode, QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, SkeletonProps, Sparkline, SparklineProps, StatBlock, StatBlockProps, StatusPill, StatusPillProps, StatusPillSpec, StatusPillVariant, StatusTone, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, WorkingProps, badgeVariants, buttonVariants, confirm, makeStatusPill, prompt } from './primitives.mjs';
2
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithActionProps, AlertWithCountdown, AlertWithCountdownProps, Badge, Bar, BarProps, BitcoinAddress, BitcoinAddressProps, Button, Card, CardProps, Checkbox, ConfirmHost, ConfirmOptions, CopyButton, CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, ModalProps, Pagination, PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, PromptOptions, QrCode, QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, SkeletonProps, Sparkline, SparklineProps, StatBlock, StatBlockProps, StatusPill, StatusPillProps, StatusPillSpec, StatusPillVariant, StatusTone, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Tooltip, TooltipProps, Working, WorkingPanel, WorkingProps, badgeVariants, buttonVariants, confirm, makeStatusPill, prompt } from './primitives.mjs';
3
3
  export { Callout, CalloutProps, CalloutTone, DataRow, DataRowProps, DefinitionItem, DefinitionList, DefinitionListProps, EmptyState, EmptyStateCta, EmptyStateProps, HelpHint, HelpHintProps, SectionHeader, SectionHeaderProps, StatCard, StatCardProps, StatGrid, StatGridProps, StatItem, StatTile } from './composites.mjs';
4
4
  export { AppShell, AppShellProps, EcosystemSlug, EcosystemSwitcher, EcosystemSwitcherProps, FAMILY_PROPERTIES, FamilyCategory, FamilyProperty, LayoutSubHeader, LayoutSubHeaderProps, LayoutSubHeaderTag, OcAccountMenu, OcAccountMenuBuildInfo, OcAccountMenuItem, OcAccountMenuProps, OcAccountMenuSession, OcAccountMenuView, OcAccountMenuViewProps, OcDashboardHub, OcDashboardHubProps, OcDashboardShell, OcDashboardShellProps, OcDashboardTool, OcLogoDropdown, OcLogoDropdownProps, OcPrimaryNav, OcPrimaryNavLink, OcPrimaryNavProps, SITE_STATE_LABEL, SiteState, findFamilyProperty } from './chrome.mjs';
5
5
  export { ExplorerNetwork, ExplorerTarget, REFERENCE_BTC_USD, SpotPrice, UseSpotPriceOptions, asOf, explorerUrl, formatSats, formatSatsCompact, priceBoth, relativeTime, satsToUsd, shortenAddress, usdToSats, useSpotPrice } from './format.mjs';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { DEFAULT_OC_THEME, OC_DEFAULT_ACCENT, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, OcAppearanceMenuProps, OcAurora, OcAuroraProps, OcTheme, OcThemeBridge, OcThemeId, OcThemePicker, OcThemePickerProps, OcThemeProvider, OcThemeProviderProps, accentFor, cn, getOcThemeInitScript, isKnownTheme, resolveTheme, useOcSkin } from './tokens.js';
2
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithActionProps, AlertWithCountdown, AlertWithCountdownProps, Badge, Bar, BarProps, BitcoinAddress, BitcoinAddressProps, Button, Card, CardProps, Checkbox, ConfirmHost, ConfirmOptions, CopyButton, CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, ModalProps, Pagination, PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, PromptOptions, QrCode, QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, SkeletonProps, Sparkline, SparklineProps, StatBlock, StatBlockProps, StatusPill, StatusPillProps, StatusPillSpec, StatusPillVariant, StatusTone, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, WorkingProps, badgeVariants, buttonVariants, confirm, makeStatusPill, prompt } from './primitives.js';
2
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithActionProps, AlertWithCountdown, AlertWithCountdownProps, Badge, Bar, BarProps, BitcoinAddress, BitcoinAddressProps, Button, Card, CardProps, Checkbox, ConfirmHost, ConfirmOptions, CopyButton, CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, ModalProps, Pagination, PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, PromptOptions, QrCode, QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, SkeletonProps, Sparkline, SparklineProps, StatBlock, StatBlockProps, StatusPill, StatusPillProps, StatusPillSpec, StatusPillVariant, StatusTone, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Tooltip, TooltipProps, Working, WorkingPanel, WorkingProps, badgeVariants, buttonVariants, confirm, makeStatusPill, prompt } from './primitives.js';
3
3
  export { Callout, CalloutProps, CalloutTone, DataRow, DataRowProps, DefinitionItem, DefinitionList, DefinitionListProps, EmptyState, EmptyStateCta, EmptyStateProps, HelpHint, HelpHintProps, SectionHeader, SectionHeaderProps, StatCard, StatCardProps, StatGrid, StatGridProps, StatItem, StatTile } from './composites.js';
4
4
  export { AppShell, AppShellProps, EcosystemSlug, EcosystemSwitcher, EcosystemSwitcherProps, FAMILY_PROPERTIES, FamilyCategory, FamilyProperty, LayoutSubHeader, LayoutSubHeaderProps, LayoutSubHeaderTag, OcAccountMenu, OcAccountMenuBuildInfo, OcAccountMenuItem, OcAccountMenuProps, OcAccountMenuSession, OcAccountMenuView, OcAccountMenuViewProps, OcDashboardHub, OcDashboardHubProps, OcDashboardShell, OcDashboardShellProps, OcDashboardTool, OcLogoDropdown, OcLogoDropdownProps, OcPrimaryNav, OcPrimaryNavLink, OcPrimaryNavProps, SITE_STATE_LABEL, SiteState, findFamilyProperty } from './chrome.js';
5
5
  export { ExplorerNetwork, ExplorerTarget, REFERENCE_BTC_USD, SpotPrice, UseSpotPriceOptions, asOf, explorerUrl, formatSats, formatSatsCompact, priceBoth, relativeTime, satsToUsd, shortenAddress, usdToSats, useSpotPrice } from './format.js';
package/dist/index.js CHANGED
@@ -1469,6 +1469,141 @@ function PopoverContent({
1469
1469
  function PopoverAnchor({ ...props }) {
1470
1470
  return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Anchor, { "data-slot": "popover-anchor", ...props });
1471
1471
  }
1472
+ var TOOLTIP_SURFACE_CLASS = "bg-popover text-popover-foreground border-border rounded-md border p-2.5 shadow-md";
1473
+ var TOOLTIP_MOTION_CLASS = "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 origin-(--radix-popover-content-transform-origin) duration-150 ease-out";
1474
+ function compose(theirs, ours) {
1475
+ return (e) => {
1476
+ theirs?.(e);
1477
+ ours(e);
1478
+ };
1479
+ }
1480
+ var lastInputWasKeyboard = false;
1481
+ var modalityInstalled = false;
1482
+ function installModalityTracking() {
1483
+ if (modalityInstalled || typeof window === "undefined") return;
1484
+ modalityInstalled = true;
1485
+ window.addEventListener("keydown", () => lastInputWasKeyboard = true, true);
1486
+ window.addEventListener("pointerdown", () => lastInputWasKeyboard = false, true);
1487
+ }
1488
+ function Tooltip({
1489
+ content,
1490
+ children,
1491
+ side = "bottom",
1492
+ align = "start",
1493
+ sideOffset = 8,
1494
+ collisionPadding = 12,
1495
+ openDelay = 300,
1496
+ closeDelay = 90,
1497
+ disabled = false,
1498
+ portal = true,
1499
+ zIndexClassName = "z-50",
1500
+ contentClassName
1501
+ }) {
1502
+ const [hovering, setHovering] = React2__namespace.useState(false);
1503
+ const [focusing, setFocusing] = React2__namespace.useState(false);
1504
+ const [isFinePointer, setIsFinePointer] = React2__namespace.useState(false);
1505
+ const openTimer = React2__namespace.useRef(null);
1506
+ const closeTimer = React2__namespace.useRef(null);
1507
+ React2__namespace.useEffect(() => {
1508
+ installModalityTracking();
1509
+ const mq = window.matchMedia("(hover: hover) and (pointer: fine)");
1510
+ const apply = () => setIsFinePointer(mq.matches);
1511
+ apply();
1512
+ mq.addEventListener("change", apply);
1513
+ return () => mq.removeEventListener("change", apply);
1514
+ }, []);
1515
+ const clearTimers = React2__namespace.useCallback(() => {
1516
+ if (openTimer.current) clearTimeout(openTimer.current);
1517
+ if (closeTimer.current) clearTimeout(closeTimer.current);
1518
+ }, []);
1519
+ React2__namespace.useEffect(() => clearTimers, [clearTimers]);
1520
+ React2__namespace.useEffect(() => {
1521
+ if (disabled) {
1522
+ clearTimers();
1523
+ setHovering(false);
1524
+ }
1525
+ }, [disabled, clearTimers]);
1526
+ const handlePointerEnter = () => {
1527
+ if (!isFinePointer) return;
1528
+ if (closeTimer.current) clearTimeout(closeTimer.current);
1529
+ openTimer.current = setTimeout(() => setHovering(true), openDelay);
1530
+ };
1531
+ const handlePointerLeave = () => {
1532
+ if (openTimer.current) clearTimeout(openTimer.current);
1533
+ closeTimer.current = setTimeout(() => setHovering(false), closeDelay);
1534
+ };
1535
+ const handlePointerDown = () => {
1536
+ clearTimers();
1537
+ setHovering(false);
1538
+ setFocusing(false);
1539
+ };
1540
+ const handleFocus = () => {
1541
+ if (lastInputWasKeyboard) {
1542
+ clearTimers();
1543
+ setFocusing(true);
1544
+ }
1545
+ };
1546
+ const handleBlur = () => {
1547
+ clearTimers();
1548
+ setFocusing(false);
1549
+ };
1550
+ const handleKeyDown = (e) => {
1551
+ if (e.key === "Escape") {
1552
+ clearTimers();
1553
+ setHovering(false);
1554
+ setFocusing(false);
1555
+ }
1556
+ };
1557
+ const effectiveOpen = !disabled && (isFinePointer && hovering || focusing);
1558
+ const extra = {};
1559
+ const childProps = children.props;
1560
+ extra.onPointerEnter = compose(childProps.onPointerEnter, handlePointerEnter);
1561
+ extra.onPointerLeave = compose(childProps.onPointerLeave, handlePointerLeave);
1562
+ extra.onPointerDown = compose(childProps.onPointerDown, handlePointerDown);
1563
+ extra.onFocus = compose(childProps.onFocus, handleFocus);
1564
+ extra.onBlur = compose(childProps.onBlur, handleBlur);
1565
+ extra.onKeyDown = compose(childProps.onKeyDown, handleKeyDown);
1566
+ const trigger = React2__namespace.cloneElement(children, extra);
1567
+ const contentEl = /* @__PURE__ */ jsxRuntime.jsx(
1568
+ PopoverPrimitive__namespace.Content,
1569
+ {
1570
+ side,
1571
+ align,
1572
+ sideOffset,
1573
+ collisionPadding,
1574
+ "aria-hidden": true,
1575
+ onOpenAutoFocus: (e) => e.preventDefault(),
1576
+ onCloseAutoFocus: (e) => e.preventDefault(),
1577
+ onFocusOutside: (e) => e.preventDefault(),
1578
+ className: cn(
1579
+ TOOLTIP_SURFACE_CLASS,
1580
+ TOOLTIP_MOTION_CLASS,
1581
+ "pointer-events-none",
1582
+ zIndexClassName,
1583
+ contentClassName
1584
+ ),
1585
+ children: content
1586
+ }
1587
+ );
1588
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1589
+ PopoverPrimitive__namespace.Root,
1590
+ {
1591
+ open: effectiveOpen,
1592
+ onOpenChange: (o) => {
1593
+ if (!o) {
1594
+ clearTimers();
1595
+ setHovering(false);
1596
+ setFocusing(false);
1597
+ }
1598
+ },
1599
+ modal: false,
1600
+ children: [
1601
+ /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Anchor, { asChild: true, children: trigger }),
1602
+ portal ? /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: contentEl }) : contentEl
1603
+ ]
1604
+ }
1605
+ );
1606
+ }
1472
1607
  var Accordion = AccordionPrimitive__namespace.Root;
1473
1608
  var AccordionItem = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Item, { ref, className: cn("border-b", className), ...props }));
1474
1609
  AccordionItem.displayName = "AccordionItem";
@@ -1694,20 +1829,24 @@ function Card({
1694
1829
  "section",
1695
1830
  {
1696
1831
  id,
1697
- className: cn("terminal flex flex-col rounded-sm border scroll-mt-16", toneClass, className),
1832
+ className: cn(
1833
+ "terminal flex flex-col rounded-sm border scroll-mt-16",
1834
+ toneClass,
1835
+ className
1836
+ ),
1698
1837
  children: [
1699
1838
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "terminal-title flex items-center justify-between gap-3", children: [
1700
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1839
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
1701
1840
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "terminal-dot", "aria-hidden": true }),
1702
1841
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "terminal-dot opacity-70", "aria-hidden": true }),
1703
1842
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "terminal-dot opacity-50", "aria-hidden": true }),
1704
1843
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 truncate", children: title }),
1705
- subtitle && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground/70 ml-1 truncate text-[10px] tracking-normal normal-case", children: [
1844
+ subtitle && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground/70 ml-1 min-w-0 truncate text-[10px] tracking-normal normal-case", children: [
1706
1845
  "\xB7 ",
1707
1846
  subtitle
1708
1847
  ] })
1709
1848
  ] }),
1710
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1849
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
1711
1850
  refreshedAt && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/60 hidden text-[10px] tracking-normal normal-case sm:inline", children: refreshedAt }),
1712
1851
  actions,
1713
1852
  expandable && /* @__PURE__ */ jsxRuntime.jsx(
@@ -2719,6 +2858,31 @@ function MenuCategoryChip({ category }) {
2719
2858
  }
2720
2859
  );
2721
2860
  }
2861
+ function SwitcherTooltipCard({ current }) {
2862
+ const prop = findFamilyProperty(current);
2863
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-[13rem] max-w-[calc(100vw-1.5rem)]", children: [
2864
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col leading-tight", children: [
2865
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-wrap items-baseline gap-x-1.5", children: [
2866
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-mono text-[9px] tracking-widest uppercase", children: "you\u2019re on" }),
2867
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary font-display text-[12px] font-semibold tracking-tight", children: prop?.label ?? "orangecheck family" })
2868
+ ] }),
2869
+ prop?.sub && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground mt-0.5 font-mono text-[10px] tracking-wide", children: prop.sub })
2870
+ ] }),
2871
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-border -mx-2.5 my-2 border-t" }),
2872
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
2873
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { "aria-hidden": true, className: "text-muted-foreground h-3 w-3 shrink-0" }),
2874
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary font-mono text-[10px] font-medium tracking-widest uppercase", children: "click" }),
2875
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-mono text-[10px]", children: "\xB7" }),
2876
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-mono text-[10px] tracking-wide", children: "switch site" })
2877
+ ] }),
2878
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1.5 flex items-center gap-1.5", children: [
2879
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CornerDownLeft, { "aria-hidden": true, className: "text-muted-foreground h-3 w-3 shrink-0" }),
2880
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary font-mono text-[10px] font-medium tracking-widest uppercase", children: "double-click" }),
2881
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-mono text-[10px]", children: "\xB7" }),
2882
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-mono text-[10px] tracking-wide", children: "home" })
2883
+ ] })
2884
+ ] });
2885
+ }
2722
2886
  function OcLogoDropdown({
2723
2887
  current,
2724
2888
  homeHref = "/",
@@ -2768,31 +2932,45 @@ function OcLogoDropdown({
2768
2932
  "data-oc-current-category": currentCategory,
2769
2933
  "data-oc-site-state": siteState,
2770
2934
  children: [
2771
- /* @__PURE__ */ jsxRuntime.jsxs(
2772
- "button",
2935
+ /* @__PURE__ */ jsxRuntime.jsx(
2936
+ Tooltip,
2773
2937
  {
2774
- type: "button",
2775
- "aria-haspopup": "menu",
2776
- "aria-expanded": open,
2777
- "aria-controls": menuId,
2778
- "aria-label": "OrangeCheck family \xB7 click to open property menu, double-click to go home",
2779
- title: "single-click \xB7 family menu \xB7 double-click \xB7 go home",
2780
- onClick: handleTriggerClick,
2781
- className: triggerClassName ?? "group hover:bg-accent/30 -mx-1.5 -my-1 flex min-h-[40px] items-center gap-2 rounded-sm px-1.5 py-1 transition-colors " + (open ? "bg-accent/20" : ""),
2782
- "data-oc-logo-dropdown-trigger": "",
2783
- "data-oc-logo-dropdown-open": open ? "true" : "false",
2784
- children: [
2785
- children,
2786
- /* @__PURE__ */ jsxRuntime.jsx(CategoryChip, { category: currentCategory }),
2787
- /* @__PURE__ */ jsxRuntime.jsx(SiteStateBadge, { state: siteState }),
2788
- /* @__PURE__ */ jsxRuntime.jsx(
2789
- lucideReact.ChevronDown,
2790
- {
2791
- "aria-hidden": true,
2792
- className: "text-muted-foreground/70 group-hover:text-foreground/80 h-3.5 w-3.5 shrink-0 transition-transform duration-200 " + (open ? "rotate-180" : "")
2793
- }
2794
- )
2795
- ]
2938
+ content: /* @__PURE__ */ jsxRuntime.jsx(SwitcherTooltipCard, { current }),
2939
+ disabled: open,
2940
+ side: "bottom",
2941
+ align: "start",
2942
+ sideOffset: 8,
2943
+ zIndexClassName: "z-[70]",
2944
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
2945
+ "button",
2946
+ {
2947
+ type: "button",
2948
+ "aria-haspopup": "menu",
2949
+ "aria-expanded": open,
2950
+ "aria-controls": menuId,
2951
+ "aria-label": "orangecheck family menu",
2952
+ onClick: handleTriggerClick,
2953
+ className: cn(
2954
+ // focus indicator is guaranteed even if a consumer overrides triggerClassName
2955
+ "focus-visible:ring-primary/60 rounded-sm focus-visible:ring-2 focus-visible:outline-none",
2956
+ triggerClassName ?? "group hover:bg-accent/30 -mx-1.5 -my-1 flex min-h-[40px] items-center gap-2 rounded-sm px-1.5 py-1 transition-colors " + (open ? "bg-accent/20" : "")
2957
+ ),
2958
+ "data-oc-logo-dropdown-trigger": "",
2959
+ "data-oc-logo-dropdown-open": open ? "true" : "false",
2960
+ children: [
2961
+ children,
2962
+ /* @__PURE__ */ jsxRuntime.jsx(CategoryChip, { category: currentCategory }),
2963
+ /* @__PURE__ */ jsxRuntime.jsx(SiteStateBadge, { state: siteState }),
2964
+ /* @__PURE__ */ jsxRuntime.jsx(
2965
+ lucideReact.ChevronDown,
2966
+ {
2967
+ "aria-hidden": true,
2968
+ className: "text-muted-foreground/70 group-hover:text-foreground/80 h-3.5 w-3.5 shrink-0 transition-transform duration-200 " + (open ? "rotate-180" : "")
2969
+ }
2970
+ )
2971
+ ]
2972
+ }
2973
+ )
2796
2974
  }
2797
2975
  ),
2798
2976
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2821,7 +2999,7 @@ function OcLogoDropdown({
2821
2999
  {
2822
3000
  id: menuId,
2823
3001
  role: "menu",
2824
- "aria-label": "OrangeCheck family",
3002
+ "aria-label": "orangecheck family",
2825
3003
  className: popoverClassName ?? "bg-background absolute top-full left-0 z-[60] mt-2 w-[min(20rem,calc(100vw-1rem))] border shadow-lg",
2826
3004
  "data-oc-logo-dropdown-popover": "",
2827
3005
  children: [
@@ -4082,6 +4260,7 @@ exports.Textarea = Textarea;
4082
4260
  exports.ThemeToggle = ThemeToggle;
4083
4261
  exports.ThemeToggleLink = ThemeToggleLink;
4084
4262
  exports.Toaster = Toaster;
4263
+ exports.Tooltip = Tooltip;
4085
4264
  exports.Working = Working;
4086
4265
  exports.WorkingPanel = WorkingPanel;
4087
4266
  exports.accentFor = accentFor;