@orangecheck/design 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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";
@@ -2719,6 +2854,31 @@ function MenuCategoryChip({ category }) {
2719
2854
  }
2720
2855
  );
2721
2856
  }
2857
+ function SwitcherTooltipCard({ current }) {
2858
+ const prop = findFamilyProperty(current);
2859
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-[13rem] max-w-[calc(100vw-1.5rem)]", children: [
2860
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col leading-tight", children: [
2861
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-wrap items-baseline gap-x-1.5", children: [
2862
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-mono text-[9px] tracking-widest uppercase", children: "you\u2019re on" }),
2863
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary font-display text-[12px] font-semibold tracking-tight", children: prop?.label ?? "orangecheck family" })
2864
+ ] }),
2865
+ prop?.sub && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground mt-0.5 font-mono text-[10px] tracking-wide", children: prop.sub })
2866
+ ] }),
2867
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-border -mx-2.5 my-2 border-t" }),
2868
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
2869
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { "aria-hidden": true, className: "text-muted-foreground h-3 w-3 shrink-0" }),
2870
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary font-mono text-[10px] font-medium tracking-widest uppercase", children: "click" }),
2871
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-mono text-[10px]", children: "\xB7" }),
2872
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-mono text-[10px] tracking-wide", children: "switch site" })
2873
+ ] }),
2874
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1.5 flex items-center gap-1.5", children: [
2875
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CornerDownLeft, { "aria-hidden": true, className: "text-muted-foreground h-3 w-3 shrink-0" }),
2876
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary font-mono text-[10px] font-medium tracking-widest uppercase", children: "double-click" }),
2877
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-mono text-[10px]", children: "\xB7" }),
2878
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-mono text-[10px] tracking-wide", children: "home" })
2879
+ ] })
2880
+ ] });
2881
+ }
2722
2882
  function OcLogoDropdown({
2723
2883
  current,
2724
2884
  homeHref = "/",
@@ -2768,31 +2928,45 @@ function OcLogoDropdown({
2768
2928
  "data-oc-current-category": currentCategory,
2769
2929
  "data-oc-site-state": siteState,
2770
2930
  children: [
2771
- /* @__PURE__ */ jsxRuntime.jsxs(
2772
- "button",
2931
+ /* @__PURE__ */ jsxRuntime.jsx(
2932
+ Tooltip,
2773
2933
  {
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
- ]
2934
+ content: /* @__PURE__ */ jsxRuntime.jsx(SwitcherTooltipCard, { current }),
2935
+ disabled: open,
2936
+ side: "bottom",
2937
+ align: "start",
2938
+ sideOffset: 8,
2939
+ zIndexClassName: "z-[70]",
2940
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
2941
+ "button",
2942
+ {
2943
+ type: "button",
2944
+ "aria-haspopup": "menu",
2945
+ "aria-expanded": open,
2946
+ "aria-controls": menuId,
2947
+ "aria-label": "orangecheck family menu",
2948
+ onClick: handleTriggerClick,
2949
+ className: cn(
2950
+ // focus indicator is guaranteed even if a consumer overrides triggerClassName
2951
+ "focus-visible:ring-primary/60 rounded-sm focus-visible:ring-2 focus-visible:outline-none",
2952
+ 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" : "")
2953
+ ),
2954
+ "data-oc-logo-dropdown-trigger": "",
2955
+ "data-oc-logo-dropdown-open": open ? "true" : "false",
2956
+ children: [
2957
+ children,
2958
+ /* @__PURE__ */ jsxRuntime.jsx(CategoryChip, { category: currentCategory }),
2959
+ /* @__PURE__ */ jsxRuntime.jsx(SiteStateBadge, { state: siteState }),
2960
+ /* @__PURE__ */ jsxRuntime.jsx(
2961
+ lucideReact.ChevronDown,
2962
+ {
2963
+ "aria-hidden": true,
2964
+ 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" : "")
2965
+ }
2966
+ )
2967
+ ]
2968
+ }
2969
+ )
2796
2970
  }
2797
2971
  ),
2798
2972
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2821,7 +2995,7 @@ function OcLogoDropdown({
2821
2995
  {
2822
2996
  id: menuId,
2823
2997
  role: "menu",
2824
- "aria-label": "OrangeCheck family",
2998
+ "aria-label": "orangecheck family",
2825
2999
  className: popoverClassName ?? "bg-background absolute top-full left-0 z-[60] mt-2 w-[min(20rem,calc(100vw-1rem))] border shadow-lg",
2826
3000
  "data-oc-logo-dropdown-popover": "",
2827
3001
  children: [
@@ -4082,6 +4256,7 @@ exports.Textarea = Textarea;
4082
4256
  exports.ThemeToggle = ThemeToggle;
4083
4257
  exports.ThemeToggleLink = ThemeToggleLink;
4084
4258
  exports.Toaster = Toaster;
4259
+ exports.Tooltip = Tooltip;
4085
4260
  exports.Working = Working;
4086
4261
  exports.WorkingPanel = WorkingPanel;
4087
4262
  exports.accentFor = accentFor;