@ansh-ui/react 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/dist/chunk-5CFQFMP5.js +178 -0
  3. package/dist/chunk-5CFQFMP5.js.map +1 -0
  4. package/dist/chunk-6VRF7X5C.cjs +164 -0
  5. package/dist/chunk-6VRF7X5C.cjs.map +1 -0
  6. package/dist/chunk-AVPEA5PB.cjs +718 -0
  7. package/dist/chunk-AVPEA5PB.cjs.map +1 -0
  8. package/dist/chunk-C32LKF23.cjs +198 -0
  9. package/dist/chunk-C32LKF23.cjs.map +1 -0
  10. package/dist/chunk-C5JG6TMM.cjs +1200 -0
  11. package/dist/chunk-C5JG6TMM.cjs.map +1 -0
  12. package/dist/chunk-DATBU46V.cjs +614 -0
  13. package/dist/chunk-DATBU46V.cjs.map +1 -0
  14. package/dist/chunk-EGG4CP7C.js +320 -0
  15. package/dist/chunk-EGG4CP7C.js.map +1 -0
  16. package/dist/chunk-H34OXXJU.js +55 -0
  17. package/dist/chunk-H34OXXJU.js.map +1 -0
  18. package/dist/chunk-HO2YSF5O.js +187 -0
  19. package/dist/chunk-HO2YSF5O.js.map +1 -0
  20. package/dist/chunk-HPGCILO4.js +760 -0
  21. package/dist/chunk-HPGCILO4.js.map +1 -0
  22. package/dist/chunk-IBXLC5IE.js +154 -0
  23. package/dist/chunk-IBXLC5IE.js.map +1 -0
  24. package/dist/chunk-LDCZQP3R.js +1185 -0
  25. package/dist/chunk-LDCZQP3R.js.map +1 -0
  26. package/dist/chunk-LXCIXR5T.js +27 -0
  27. package/dist/chunk-LXCIXR5T.js.map +1 -0
  28. package/dist/chunk-O2PX54KX.js +94 -0
  29. package/dist/chunk-O2PX54KX.js.map +1 -0
  30. package/dist/chunk-OHBWBXLO.cjs +101 -0
  31. package/dist/chunk-OHBWBXLO.cjs.map +1 -0
  32. package/dist/chunk-OJN5JBNP.cjs +776 -0
  33. package/dist/chunk-OJN5JBNP.cjs.map +1 -0
  34. package/dist/chunk-OLTS6G5M.js +606 -0
  35. package/dist/chunk-OLTS6G5M.js.map +1 -0
  36. package/dist/chunk-PO5DU3FU.cjs +29 -0
  37. package/dist/chunk-PO5DU3FU.cjs.map +1 -0
  38. package/dist/chunk-QO3E7TJS.js +2940 -0
  39. package/dist/chunk-QO3E7TJS.js.map +1 -0
  40. package/dist/chunk-RHTLNSVW.cjs +2976 -0
  41. package/dist/chunk-RHTLNSVW.cjs.map +1 -0
  42. package/dist/chunk-SFU5EPSN.cjs +61 -0
  43. package/dist/chunk-SFU5EPSN.cjs.map +1 -0
  44. package/dist/chunk-T4AK2KLM.js +699 -0
  45. package/dist/chunk-T4AK2KLM.js.map +1 -0
  46. package/dist/chunk-WGYNCSTP.cjs +333 -0
  47. package/dist/chunk-WGYNCSTP.cjs.map +1 -0
  48. package/dist/chunk-XEP6P7E6.js +279 -0
  49. package/dist/chunk-XEP6P7E6.js.map +1 -0
  50. package/dist/chunk-XMXECSQO.cjs +286 -0
  51. package/dist/chunk-XMXECSQO.cjs.map +1 -0
  52. package/dist/chunk-ZWAFLHC2.cjs +181 -0
  53. package/dist/chunk-ZWAFLHC2.cjs.map +1 -0
  54. package/dist/data.cjs +71 -0
  55. package/dist/data.cjs.map +1 -0
  56. package/dist/data.d.cts +316 -0
  57. package/dist/data.d.ts +316 -0
  58. package/dist/data.js +6 -0
  59. package/dist/data.js.map +1 -0
  60. package/dist/form.cjs +153 -0
  61. package/dist/form.cjs.map +1 -0
  62. package/dist/form.d.cts +660 -0
  63. package/dist/form.d.ts +660 -0
  64. package/dist/form.js +8 -0
  65. package/dist/form.js.map +1 -0
  66. package/dist/index.cjs +1641 -0
  67. package/dist/index.cjs.map +1 -0
  68. package/dist/index.d.cts +552 -0
  69. package/dist/index.d.ts +552 -0
  70. package/dist/index.js +956 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/layout.cjs +68 -0
  73. package/dist/layout.cjs.map +1 -0
  74. package/dist/layout.d.cts +169 -0
  75. package/dist/layout.d.ts +169 -0
  76. package/dist/layout.js +7 -0
  77. package/dist/layout.js.map +1 -0
  78. package/dist/motion-CQmCq6_k.d.ts +395 -0
  79. package/dist/motion-CSX4g2N8.d.cts +395 -0
  80. package/dist/motion.cjs +79 -0
  81. package/dist/motion.cjs.map +1 -0
  82. package/dist/motion.d.cts +4 -0
  83. package/dist/motion.d.ts +4 -0
  84. package/dist/motion.js +6 -0
  85. package/dist/motion.js.map +1 -0
  86. package/dist/navigation.cjs +48 -0
  87. package/dist/navigation.cjs.map +1 -0
  88. package/dist/navigation.d.cts +210 -0
  89. package/dist/navigation.d.ts +210 -0
  90. package/dist/navigation.js +7 -0
  91. package/dist/navigation.js.map +1 -0
  92. package/dist/overlay.cjs +69 -0
  93. package/dist/overlay.cjs.map +1 -0
  94. package/dist/overlay.d.cts +330 -0
  95. package/dist/overlay.d.ts +330 -0
  96. package/dist/overlay.js +8 -0
  97. package/dist/overlay.js.map +1 -0
  98. package/dist/position-DVScKcaa.d.cts +66 -0
  99. package/dist/position-DVScKcaa.d.ts +66 -0
  100. package/dist/primitives.cjs +162 -0
  101. package/dist/primitives.cjs.map +1 -0
  102. package/dist/primitives.d.cts +294 -0
  103. package/dist/primitives.d.ts +294 -0
  104. package/dist/primitives.js +9 -0
  105. package/dist/primitives.js.map +1 -0
  106. package/dist/sidebar-D-PafAXw.d.cts +71 -0
  107. package/dist/sidebar-D-PafAXw.d.ts +71 -0
  108. package/dist/styles.css +5575 -0
  109. package/dist/use-observers-B9qtimrk.d.cts +99 -0
  110. package/dist/use-observers-B9qtimrk.d.ts +99 -0
  111. package/package.json +92 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/command-palette.tsx","../src/components/overlay/popover.tsx","../src/components/overlay/tooltip.tsx","../src/components/overlay/dialog.tsx","../src/components/overlay/drawer.tsx","../src/components/overlay/menu.tsx"],"names":["useState","useRef","useId","useMemo","useEffect","useCallback","jsx","jsxs","createContext","useContext","useControllableState","Slot","usePresence","useAnchoredPosition","useDismiss","useFocusTrap","useAutoFocus","useFocusRestore","Portal","cx","Fragment","useScrollLock","MenuSurface","state","index"],"mappings":"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","file":"chunk-C5JG6TMM.cjs","sourcesContent":["import { type ReactNode, useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'\n\n/**\n * A command palette.\n *\n * The interaction is easy; the accessibility is where these usually go wrong. This one implements\n * the combobox pattern properly:\n *\n * - Focus stays in the input the whole time. Arrow keys move a *virtual* selection, announced via\n * `aria-activedescendant`, rather than moving DOM focus — so the user can keep typing.\n * - The list is `role=\"listbox\"` with `role=\"option\"` children and correct `aria-selected`.\n * - Focus is restored to whatever was focused before opening, so keyboard users aren't dumped at\n * the top of the document on close.\n * - Focus is trapped while open, so Tab can't escape to the page behind the scrim.\n *\n * Filtering is a subsequence match rather than a substring one: typing `nds` should find\n * \"**N**ew **D**ata**s**ource\", which is what anyone who has used a palette expects.\n */\n\nexport interface CommandItem {\n id: string\n label: string\n /** Optional grouping heading. Items with the same group render together. */\n group?: string\n /** Leading icon. */\n icon?: ReactNode\n /** Shortcut hint shown on the right, e.g. `'⌘K'`. Display only. */\n shortcut?: string\n /** Extra text matched against the query but not displayed. */\n keywords?: string\n onSelect?: () => void\n}\n\nexport interface CommandPaletteProps {\n items: readonly CommandItem[]\n open: boolean\n onOpenChange: (open: boolean) => void\n placeholder?: string\n emptyMessage?: string\n}\n\n/**\n * Subsequence match with a crude relevance score.\n *\n * Returns `-1` for no match. Contiguous runs score higher, and a match at the start of the label\n * scores higher still, so \"set\" ranks \"**Set**tings\" above \"As**set** manager\".\n */\nfunction score(query: string, text: string): number {\n if (query.length === 0) return 0\n\n const q = query.toLowerCase()\n const t = text.toLowerCase()\n\n let queryIndex = 0\n let total = 0\n let run = 0\n\n for (let i = 0; i < t.length && queryIndex < q.length; i++) {\n if (t[i] === q[queryIndex]) {\n run++\n // Contiguity bonus, plus a bonus for matching near the start.\n total += run * 2 + (i === 0 ? 8 : 0)\n queryIndex++\n } else {\n run = 0\n }\n }\n\n return queryIndex === q.length ? total : -1\n}\n\nexport function CommandPalette({\n items,\n open,\n onOpenChange,\n placeholder = 'Type a command or search…',\n emptyMessage = 'No results found.',\n}: CommandPaletteProps) {\n const [query, setQuery] = useState('')\n const [active, setActive] = useState(0)\n\n const inputRef = useRef<HTMLInputElement | null>(null)\n const dialogRef = useRef<HTMLDivElement | null>(null)\n /** Whatever had focus before opening, so it can be restored on close. */\n const restoreFocusRef = useRef<HTMLElement | null>(null)\n\n const listId = useId()\n\n const results = useMemo(() => {\n if (query.trim() === '') return [...items]\n return items\n .map((item) => ({\n item,\n score: Math.max(score(query, item.label), score(query, item.keywords ?? '')),\n }))\n .filter((entry) => entry.score >= 0)\n .sort((a, b) => b.score - a.score)\n .map((entry) => entry.item)\n }, [items, query])\n\n // Reset the cursor whenever the result set changes, or the highlight can point past the end.\n useEffect(() => setActive(0), [query, items])\n\n const close = useCallback(() => {\n onOpenChange(false)\n setQuery('')\n }, [onOpenChange])\n\n const select = useCallback(\n (item: CommandItem | undefined) => {\n if (!item) return\n item.onSelect?.()\n close()\n },\n [close],\n )\n\n // --- Open/close lifecycle ------------------------------------------------\n useEffect(() => {\n if (!open) return\n\n restoreFocusRef.current = document.activeElement as HTMLElement | null\n // Focus after paint, or the input isn't in the document yet.\n const raf = requestAnimationFrame(() => inputRef.current?.focus())\n\n // A modal surface must not leave the page behind it scrollable.\n const previousOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n\n return () => {\n cancelAnimationFrame(raf)\n document.body.style.overflow = previousOverflow\n // Restoring focus is what stops a keyboard user being dumped at the top of the document.\n restoreFocusRef.current?.focus?.()\n }\n }, [open])\n\n // --- Keyboard ------------------------------------------------------------\n const onKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n // Wraps, because a palette with five items shouldn't dead-end at the bottom.\n setActive((i) => (results.length === 0 ? 0 : (i + 1) % results.length))\n break\n case 'ArrowUp':\n event.preventDefault()\n setActive((i) => (results.length === 0 ? 0 : (i - 1 + results.length) % results.length))\n break\n case 'Home':\n event.preventDefault()\n setActive(0)\n break\n case 'End':\n event.preventDefault()\n setActive(Math.max(0, results.length - 1))\n break\n case 'Enter':\n event.preventDefault()\n select(results[active])\n break\n case 'Escape':\n event.preventDefault()\n close()\n break\n case 'Tab': {\n // Trap focus. The palette has exactly one focusable element, so Tab simply stays put —\n // but it must be prevented, or focus escapes to the page behind the scrim.\n event.preventDefault()\n break\n }\n }\n }\n\n // Keep the highlighted row in view during keyboard navigation.\n useEffect(() => {\n if (!open) return\n const node = document.getElementById(`${listId}-option-${active}`)\n // Optional-called: `scrollIntoView` is absent in jsdom and in some embedded webviews. Keeping\n // the selection visible is a nicety; throwing because the host lacks the method would take the\n // whole palette down, which is not a trade worth making.\n node?.scrollIntoView?.({ block: 'nearest' })\n }, [active, listId, open])\n\n if (!open) return null\n\n // Group headings are emitted when the group changes, so ordering by relevance still produces\n // sensible headings rather than repeating them.\n let lastGroup: string | undefined\n\n return (\n <div\n className=\"ansh-cmdk__backdrop\"\n // Clicking the scrim dismisses, but only when the click started on the scrim itself —\n // otherwise a drag that ends outside the dialog closes it unexpectedly.\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) close()\n }}\n >\n <div\n ref={dialogRef}\n className=\"ansh-cmdk\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n >\n <input\n ref={inputRef}\n className=\"ansh-cmdk__input\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n // The combobox contract: focus stays here while the selection moves virtually.\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={results.length > 0 ? `${listId}-option-${active}` : undefined}\n autoComplete=\"off\"\n spellCheck={false}\n />\n\n {results.length === 0 ? (\n <div className=\"ansh-cmdk__empty\">{emptyMessage}</div>\n ) : (\n <ul className=\"ansh-cmdk__list\" id={listId} role=\"listbox\" aria-label=\"Commands\">\n {results.map((item, index) => {\n const heading = item.group && item.group !== lastGroup ? item.group : null\n lastGroup = item.group\n\n return (\n <li key={item.id} role=\"presentation\">\n {heading ? (\n <div className=\"ansh-cmdk__group\" role=\"presentation\">\n {heading}\n </div>\n ) : null}\n <div\n id={`${listId}-option-${index}`}\n className=\"ansh-cmdk__item\"\n role=\"option\"\n aria-selected={index === active}\n // Pointer hover moves the selection so mouse and keyboard agree on what\n // Enter will do.\n onMouseEnter={() => setActive(index)}\n onClick={() => select(item)}\n >\n {item.icon}\n <span>{item.label}</span>\n {item.shortcut ? <kbd className=\"ansh-cmdk__kbd\">{item.shortcut}</kbd> : null}\n </div>\n </li>\n )\n })}\n </ul>\n )}\n </div>\n </div>\n )\n}\n\n/**\n * Bind a keyboard shortcut that toggles state — `⌘K` by default.\n *\n * ```tsx\n * const [open, setOpen] = useState(false)\n * useCommandShortcut(() => setOpen((v) => !v))\n * ```\n */\nexport function useCommandShortcut(toggle: () => void, key = 'k'): void {\n const toggleRef = useRef(toggle)\n toggleRef.current = toggle\n\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n // `metaKey` on macOS, `ctrlKey` elsewhere — checking both is simpler and correct on each.\n if (event.key.toLowerCase() === key && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n toggleRef.current()\n }\n }\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [key])\n}\n","import {\n type ReactNode,\n createContext,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { type Placement } from '../../primitives/position'\nimport { cx } from '../../primitives/compose'\nimport { Portal } from '../../primitives/portal'\nimport { Slot } from '../../primitives/slot'\nimport { useAnchoredPosition } from '../../primitives/use-anchored-position'\nimport { useControllableState } from '../../primitives/use-controllable-state'\nimport { useDismiss } from '../../primitives/use-dismiss'\nimport { useFocusTrap, useAutoFocus, useFocusRestore } from '../../primitives/focus'\nimport { usePresence } from '../../primitives/presence'\n\n/**\n * A popover.\n *\n * The compound API (`Popover` / `PopoverTrigger` / `PopoverContent`) rather than a single component\n * with a `content` prop, because the trigger needs attributes that only the popover can supply —\n * `aria-expanded`, `aria-controls` — and a `content` prop can't put them anywhere.\n *\n * Focus moves into the content on open and returns to the trigger on close, and Tab is trapped\n * inside. A popover containing a form that lets Tab wander onto the page behind it is a popover\n * keyboard users cannot fill in.\n */\n\ninterface PopoverContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.MutableRefObject<HTMLElement | null>\n contentId: string\n placement: Placement\n offset: number\n modal: boolean\n}\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null)\n\nfunction usePopover(component: string): PopoverContextValue {\n const context = useContext(PopoverContext)\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Popover>.`)\n }\n return context\n}\n\nexport interface PopoverProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n placement?: Placement\n /** Gap from the trigger, in px. Default `8`. */\n offset?: number\n /** Trap focus and block interaction behind. Default `false` — most popovers are non-modal. */\n modal?: boolean\n children: ReactNode\n}\n\nexport function Popover({\n open,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom',\n offset = 8,\n modal = false,\n children,\n}: PopoverProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = useRef<HTMLElement | null>(null)\n const contentId = useId()\n\n const context = useMemo(\n () => ({ open: isOpen, setOpen, triggerRef, contentId, placement, offset, modal }),\n [isOpen, setOpen, contentId, placement, offset, modal],\n )\n\n return <PopoverContext.Provider value={context}>{children}</PopoverContext.Provider>\n}\n\nexport interface PopoverTriggerProps extends React.HTMLAttributes<HTMLElement> {\n /** Render into the child element rather than emitting a `<button>`. */\n asChild?: boolean\n children: ReactNode\n}\n\nexport function PopoverTrigger({ asChild = false, children, ...rest }: PopoverTriggerProps) {\n const { open, setOpen, triggerRef, contentId } = usePopover('PopoverTrigger')\n // Widened to `ElementType`: the union of `Slot` and `'button'` makes TypeScript intersect their\n // two ref signatures, which nothing can satisfy. The runtime behaviour is identical.\n const Component = (asChild ? Slot : 'button') as React.ElementType\n\n return (\n <Component\n ref={triggerRef as React.Ref<HTMLElement>}\n {...(asChild ? null : { type: 'button' as const })}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-controls={open ? contentId : undefined}\n {...rest}\n onClick={(event: React.MouseEvent<HTMLElement>) => {\n rest.onClick?.(event)\n if (event.defaultPrevented) return\n setOpen(!open)\n }}\n >\n {children}\n </Component>\n )\n}\n\nexport interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Draw an arrow pointing at the trigger. Default `false`. */\n arrow?: boolean\n /** Match the trigger's width — for a popover acting as a dropdown panel. */\n matchWidth?: boolean\n /** Accessible name. Required unless the content contains its own heading. */\n label?: string\n children: ReactNode\n}\n\nexport function PopoverContent({\n arrow = false,\n matchWidth = false,\n label,\n className,\n style,\n children,\n ...rest\n}: PopoverContentProps) {\n const { open, setOpen, triggerRef, contentId, placement, offset, modal } =\n usePopover('PopoverContent')\n\n const contentRef = useRef<HTMLDivElement | null>(null)\n const { mounted, state } = usePresence(open, contentRef)\n\n const position = useAnchoredPosition(triggerRef, contentRef, mounted, {\n placement,\n offset,\n matchWidth,\n arrowSize: arrow ? 10 : 0,\n })\n\n useDismiss(contentRef, open, () => setOpen(false), { ignore: [triggerRef] })\n useFocusTrap(contentRef, open && modal)\n useAutoFocus(contentRef, open)\n useFocusRestore(open)\n\n if (!mounted) return null\n\n return (\n <Portal>\n <div\n ref={contentRef}\n id={contentId}\n role=\"dialog\"\n aria-modal={modal || undefined}\n {...(label ? { 'aria-label': label } : null)}\n tabIndex={-1}\n data-state={state}\n data-side={position.side}\n className={cx('ansh-popover', className)}\n style={{ ...position.style, ...style }}\n {...rest}\n >\n {children}\n {arrow && position.arrowStyle ? (\n <span className=\"ansh-popover__arrow\" style={position.arrowStyle} aria-hidden=\"true\" />\n ) : null}\n </div>\n </Portal>\n )\n}\n\n// --- HoverCard ------------------------------------------------------------\n\nexport interface HoverCardProps {\n /** The card's contents. */\n content: ReactNode\n /** Delay before opening, in ms. Default `500`. */\n openDelay?: number\n /** Delay before closing, in ms. Default `200`. */\n closeDelay?: number\n placement?: Placement\n className?: string\n children: ReactNode\n}\n\n/**\n * A rich preview shown on hover — a user card on an @mention, a link preview.\n *\n * Two delays, not one. The open delay stops cards firing as the pointer sweeps across a paragraph\n * of links. The close delay is what lets the pointer travel from the trigger to the card without it\n * vanishing en route, which is the failure that makes hover cards feel broken.\n *\n * Hover-only content is invisible to keyboard and touch users, so this also opens on focus. It is\n * strictly for *supplementary* information — anything essential belongs in a click-opened popover.\n */\nexport function HoverCard({\n content,\n openDelay = 500,\n closeDelay = 200,\n placement = 'bottom',\n className,\n children,\n}: HoverCardProps) {\n const [open, setOpen] = useState(false)\n const triggerRef = useRef<HTMLSpanElement | null>(null)\n const cardRef = useRef<HTMLDivElement | null>(null)\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const id = useId()\n\n const { mounted, state } = usePresence(open, cardRef)\n const position = useAnchoredPosition(triggerRef, cardRef, mounted, { placement, offset: 8 })\n\n const schedule = (next: boolean) => {\n clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => setOpen(next), next ? openDelay : closeDelay)\n }\n\n useEffect(() => () => clearTimeout(timerRef.current), [])\n\n return (\n <>\n <span\n ref={triggerRef}\n className=\"ansh-hovercard__trigger\"\n // `aria-describedby` rather than `aria-details`: support for details is still patchy, and\n // a description is the honest relationship for supplementary content.\n aria-describedby={open ? id : undefined}\n onMouseEnter={() => schedule(true)}\n onMouseLeave={() => schedule(false)}\n onFocus={() => setOpen(true)}\n onBlur={() => setOpen(false)}\n >\n {children}\n </span>\n\n {mounted ? (\n <Portal>\n <div\n ref={cardRef}\n id={id}\n role=\"tooltip\"\n data-state={state}\n className={cx('ansh-hovercard', className)}\n style={position.style}\n // Keeping the card open while the pointer is over it is what makes its contents\n // clickable at all.\n onMouseEnter={() => schedule(true)}\n onMouseLeave={() => schedule(false)}\n >\n {content}\n </div>\n </Portal>\n ) : null}\n </>\n )\n}\n","import {\n type ReactNode,\n createContext,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { type Placement } from '../../primitives/position'\nimport { cx } from '../../primitives/compose'\nimport { Portal } from '../../primitives/portal'\nimport { Slot } from '../../primitives/slot'\nimport { useAnchoredPosition } from '../../primitives/use-anchored-position'\nimport { usePresence } from '../../primitives/presence'\n\n/**\n * Tooltips.\n *\n * The rules this follows, all from WCAG 1.4.13 (Content on Hover or Focus) and the ARIA practices:\n *\n * - **Focus shows it too.** A tooltip only on hover doesn't exist for keyboard users.\n * - **Escape dismisses it** without moving focus, for anyone whose magnifier it is covering.\n * - **It is a description, not a name.** Wired with `aria-describedby`, so the trigger keeps its\n * own label. Using it as the label means an icon button announces nothing until the tooltip\n * opens, which on touch is never.\n * - **It never contains interactive content.** There is no way to reach a button inside a tooltip\n * with a keyboard. That's what `HoverCard` and `Popover` are for.\n *\n * Never put essential information here: tooltips do not appear on touch devices at all.\n */\n\ninterface TooltipGroupValue {\n /** Whether some tooltip in the group is already open — the next skips its delay. */\n active: boolean\n setActive: (active: boolean) => void\n delay: number\n}\n\nconst TooltipGroupContext = createContext<TooltipGroupValue | null>(null)\n\nexport interface TooltipProviderProps {\n /** Delay before the first tooltip in a group opens, in ms. Default `600`. */\n delay?: number\n children: ReactNode\n}\n\n/**\n * Share a delay across a set of tooltips.\n *\n * Once one is open, moving to a neighbour shows its tooltip immediately. Without this, scanning a\n * toolbar means waiting out the delay on every single button — the behaviour every desktop OS gets\n * right and most web implementations miss.\n */\nexport function TooltipProvider({ delay = 600, children }: TooltipProviderProps) {\n const [active, setActive] = useState(false)\n const value = useMemo(() => ({ active, setActive, delay }), [active, delay])\n return <TooltipGroupContext.Provider value={value}>{children}</TooltipGroupContext.Provider>\n}\n\nexport interface TooltipProps {\n /** The tooltip text. Keep it short — it is read as one description. */\n content: ReactNode\n placement?: Placement\n /** Override the group delay, in ms. */\n delay?: number\n /** Draw an arrow. Default `true`. */\n arrow?: boolean\n disabled?: boolean\n className?: string\n children: ReactNode\n}\n\nexport function Tooltip({\n content,\n placement = 'top',\n delay,\n arrow = true,\n disabled = false,\n className,\n children,\n}: TooltipProps) {\n const group = useContext(TooltipGroupContext)\n const [open, setOpen] = useState(false)\n\n const triggerRef = useRef<HTMLElement | null>(null)\n const tipRef = useRef<HTMLDivElement | null>(null)\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const id = useId()\n\n const { mounted, state } = usePresence(open, tipRef)\n const position = useAnchoredPosition(triggerRef, tipRef, mounted, {\n placement,\n offset: 6,\n arrowSize: arrow ? 8 : 0,\n })\n\n const effectiveDelay = delay ?? group?.delay ?? 600\n\n const show = (immediate = false) => {\n if (disabled) return\n clearTimeout(timerRef.current)\n // Skip the delay when a sibling tooltip is already open, or on focus — a keyboard user has\n // already made a deliberate move and shouldn't be made to wait.\n if (immediate || group?.active) {\n setOpen(true)\n group?.setActive(true)\n return\n }\n timerRef.current = setTimeout(() => {\n setOpen(true)\n group?.setActive(true)\n }, effectiveDelay)\n }\n\n const hide = () => {\n clearTimeout(timerRef.current)\n setOpen(false)\n // Grace period before the group goes cold, so moving between adjacent triggers stays instant.\n timerRef.current = setTimeout(() => group?.setActive(false), 200)\n }\n\n useEffect(() => () => clearTimeout(timerRef.current), [])\n\n // WCAG 1.4.13: dismissable without moving the pointer or focus.\n useEffect(() => {\n if (!open) return\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setOpen(false)\n group?.setActive(false)\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [open, group])\n\n return (\n <>\n <Slot\n ref={triggerRef as React.Ref<HTMLElement>}\n aria-describedby={open ? id : undefined}\n onMouseEnter={() => show()}\n onMouseLeave={hide}\n onFocus={() => show(true)}\n onBlur={hide}\n >\n {children}\n </Slot>\n\n {mounted && !disabled ? (\n <Portal>\n <div\n ref={tipRef}\n id={id}\n role=\"tooltip\"\n data-state={state}\n data-side={position.side}\n className={cx('ansh-tooltip', className)}\n style={position.style}\n >\n {content}\n {arrow && position.arrowStyle ? (\n <span\n className=\"ansh-tooltip__arrow\"\n style={position.arrowStyle}\n aria-hidden=\"true\"\n />\n ) : null}\n </div>\n </Portal>\n ) : null}\n </>\n )\n}\n","import { type ReactNode, useCallback, useId, useRef } from 'react'\nimport { cx } from '../../primitives/compose'\nimport { Portal } from '../../primitives/portal'\nimport { useAutoFocus, useFocusRestore, useFocusTrap } from '../../primitives/focus'\nimport { usePresence } from '../../primitives/presence'\nimport { useDismiss, useScrollLock } from '../../primitives/use-dismiss'\n\nexport type DialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nexport interface DialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** The dialog's accessible name. Required — a dialog announced as just \"dialog\" is useless. */\n title: ReactNode\n /** Supporting text, wired to `aria-describedby`. */\n description?: ReactNode\n size?: DialogSize\n /** Actions row, pinned below the scrollable body. */\n footer?: ReactNode\n /** Show the ✕ button. Default `true`. */\n showClose?: boolean\n /** Allow closing via scrim click and Escape. Default `true`. */\n dismissable?: boolean\n /** Element to focus on open. Defaults to the first tabbable one. */\n initialFocus?: React.RefObject<HTMLElement | null>\n className?: string\n children?: ReactNode\n}\n\n/**\n * A modal dialog.\n *\n * Not `<dialog showModal>`: the native element's top-layer behaviour is genuinely better, but its\n * backdrop cannot be animated consistently, `::backdrop` inherits nothing, and closing behaviour\n * differs enough across browsers to need working around anyway. The pieces the native element gives\n * for free — focus trap, scroll lock, inert background, focus restore — are all here explicitly.\n *\n * `title` is a required prop rather than an optional slot. Every accessibility audit of a component\n * library turns up unnamed dialogs, and the reliable fix is to make the name impossible to omit.\n */\nexport function Dialog({\n open,\n onOpenChange,\n title,\n description,\n size = 'md',\n footer,\n showClose = true,\n dismissable = true,\n initialFocus,\n className,\n children,\n}: DialogProps) {\n const panelRef = useRef<HTMLDivElement | null>(null)\n const id = useId()\n const titleId = `${id}-title`\n const descriptionId = `${id}-description`\n\n const { mounted, state } = usePresence(open, panelRef)\n\n const close = useCallback(() => {\n if (dismissable) onOpenChange(false)\n }, [dismissable, onOpenChange])\n\n useDismiss(panelRef, open, close, { outsidePress: dismissable, escapeKey: dismissable })\n useFocusTrap(panelRef, open)\n useAutoFocus(panelRef, open, initialFocus)\n useFocusRestore(open)\n useScrollLock(open)\n\n if (!mounted) return null\n\n return (\n <Portal>\n <div className=\"ansh-dialog__layer\" data-state={state}>\n {/* The scrim is not a button and takes no focus — it's decorative. Dismissal is handled\n by `useDismiss` on a pointerdown outside the panel, which also covers the gap around\n the panel that isn't the scrim element itself. */}\n <div className=\"ansh-dialog__scrim\" data-state={state} aria-hidden=\"true\" />\n\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n {...(description ? { 'aria-describedby': descriptionId } : null)}\n tabIndex={-1}\n data-state={state}\n className={cx('ansh-dialog', `ansh-dialog--${size}`, className)}\n >\n <header className=\"ansh-dialog__header\">\n <div className=\"ansh-dialog__heading\">\n <h2 className=\"ansh-dialog__title\" id={titleId}>\n {title}\n </h2>\n {description ? (\n <p className=\"ansh-dialog__description\" id={descriptionId}>\n {description}\n </p>\n ) : null}\n </div>\n\n {showClose ? (\n <button\n type=\"button\"\n className=\"ansh-dialog__close ansh-focusable\"\n aria-label=\"Close dialog\"\n onClick={() => onOpenChange(false)}\n >\n <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n ) : null}\n </header>\n\n {children ? <div className=\"ansh-dialog__body\">{children}</div> : null}\n {footer ? <footer className=\"ansh-dialog__footer\">{footer}</footer> : null}\n </div>\n </div>\n </Portal>\n )\n}\n\nexport interface AlertDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: ReactNode\n description: ReactNode\n /** Confirm button text. Default `'Confirm'`. */\n confirmLabel?: string\n cancelLabel?: string\n /** Style the confirm action as destructive. */\n destructive?: boolean\n onConfirm: () => void | Promise<void>\n onCancel?: () => void\n /** Disable the buttons while an async confirm runs. */\n busy?: boolean\n className?: string\n}\n\n/**\n * A confirmation dialog.\n *\n * `role=\"alertdialog\"` and `aria-describedby` on the message, which makes a screen reader read the\n * consequence immediately on open rather than waiting for the user to navigate to it. That is the\n * entire difference from a regular dialog, and it matters precisely because these appear before\n * irreversible actions.\n *\n * It is deliberately **not** dismissable by clicking the scrim: an accidental click outside should\n * not silently cancel a decision the user was asked to make. Escape still works, because trapping\n * someone in a dialog is worse.\n *\n * Focus starts on **Cancel**, not Confirm. A keyboard user who hits Enter reflexively should not\n * delete their account.\n */\nexport function AlertDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n destructive = false,\n onConfirm,\n onCancel,\n busy = false,\n className,\n}: AlertDialogProps) {\n const panelRef = useRef<HTMLDivElement | null>(null)\n const cancelRef = useRef<HTMLButtonElement | null>(null)\n const id = useId()\n\n const { mounted, state } = usePresence(open, panelRef)\n\n const cancel = useCallback(() => {\n onCancel?.()\n onOpenChange(false)\n }, [onCancel, onOpenChange])\n\n useDismiss(panelRef, open, cancel, { outsidePress: false, escapeKey: true })\n useFocusTrap(panelRef, open)\n useAutoFocus(panelRef, open, cancelRef)\n useFocusRestore(open)\n useScrollLock(open)\n\n if (!mounted) return null\n\n return (\n <Portal>\n <div className=\"ansh-dialog__layer\" data-state={state}>\n <div className=\"ansh-dialog__scrim\" data-state={state} aria-hidden=\"true\" />\n\n <div\n ref={panelRef}\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-labelledby={`${id}-title`}\n aria-describedby={`${id}-description`}\n tabIndex={-1}\n data-state={state}\n className={cx('ansh-dialog', 'ansh-dialog--sm', 'ansh-dialog--alert', className)}\n >\n <div className=\"ansh-dialog__body\">\n {destructive ? (\n <span\n className=\"ansh-dialog__alert-icon ansh-dialog__alert-icon--danger\"\n aria-hidden=\"true\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n >\n <path d=\"M12 8v5\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"16.5\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n <path\n d=\"M10.3 3.9L2.6 17.4A2 2 0 004.3 20.4h15.4a2 2 0 001.7-3L13.7 3.9a2 2 0 00-3.4 0z\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n ) : null}\n\n <h2 className=\"ansh-dialog__title\" id={`${id}-title`}>\n {title}\n </h2>\n <p className=\"ansh-dialog__description\" id={`${id}-description`}>\n {description}\n </p>\n </div>\n\n <footer className=\"ansh-dialog__footer\">\n <button\n ref={cancelRef}\n type=\"button\"\n className=\"ansh-btn ansh-btn--ghost ansh-btn--sm ansh-focusable\"\n disabled={busy}\n onClick={cancel}\n >\n {cancelLabel}\n </button>\n <button\n type=\"button\"\n className={cx(\n 'ansh-btn',\n 'ansh-btn--sm',\n destructive ? 'ansh-btn--danger' : 'ansh-btn--solid',\n 'ansh-focusable',\n )}\n disabled={busy}\n onClick={() => void onConfirm()}\n >\n {busy ? <span className=\"ansh-spinner ansh-spinner--sm\" aria-hidden=\"true\" /> : null}\n {confirmLabel}\n </button>\n </footer>\n </div>\n </div>\n </Portal>\n )\n}\n\n/** Layout helper for a dialog's action row. Right-aligned, reversed on narrow screens. */\nexport function DialogFooter({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cx('ansh-dialog__actions', className)}>{children}</div>\n}\n","import { type ReactNode, useCallback, useId, useRef } from 'react'\nimport { cx } from '../../primitives/compose'\nimport { Portal } from '../../primitives/portal'\nimport { useAutoFocus, useFocusRestore, useFocusTrap } from '../../primitives/focus'\nimport { usePresence } from '../../primitives/presence'\nimport { useDismiss, useScrollLock } from '../../primitives/use-dismiss'\n\nexport type DrawerSide = 'left' | 'right' | 'top' | 'bottom'\n\nexport interface DrawerProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Which edge it slides from. Default `'right'`. */\n side?: DrawerSide\n title: ReactNode\n description?: ReactNode\n /** Width for left/right, height for top/bottom. Default `'22rem'`. */\n size?: string\n footer?: ReactNode\n showClose?: boolean\n /** Block interaction behind and lock scroll. Default `true`. */\n modal?: boolean\n dismissable?: boolean\n className?: string\n children?: ReactNode\n}\n\n/**\n * A panel that slides in from an edge.\n *\n * Same accessibility contract as `Dialog` — it is a dialog, just positioned differently. The reason\n * it exists separately is that the *content* pattern differs: drawers hold navigation, filters and\n * detail views that stay open while the user works, so they support a non-modal mode where the page\n * behind stays usable.\n *\n * On a phone a bottom drawer is the right shape for what would be a dialog on a desktop; that's a\n * layout decision for the consumer, which is why `side` is a plain prop rather than a breakpoint\n * rule baked in here.\n */\nexport function Drawer({\n open,\n onOpenChange,\n side = 'right',\n title,\n description,\n size = '22rem',\n footer,\n showClose = true,\n modal = true,\n dismissable = true,\n className,\n children,\n}: DrawerProps) {\n const panelRef = useRef<HTMLDivElement | null>(null)\n const id = useId()\n\n const { mounted, state } = usePresence(open, panelRef)\n\n const close = useCallback(() => {\n if (dismissable) onOpenChange(false)\n }, [dismissable, onOpenChange])\n\n useDismiss(panelRef, open, close, { outsidePress: dismissable && modal, escapeKey: dismissable })\n useFocusTrap(panelRef, open && modal)\n useAutoFocus(panelRef, open)\n useFocusRestore(open)\n useScrollLock(open && modal)\n\n if (!mounted) return null\n\n const horizontal = side === 'left' || side === 'right'\n\n return (\n <Portal>\n <div\n className={cx('ansh-drawer__layer', !modal && 'ansh-drawer__layer--inline')}\n data-state={state}\n >\n {modal ? (\n <div className=\"ansh-dialog__scrim\" data-state={state} aria-hidden=\"true\" />\n ) : null}\n\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal={modal || undefined}\n aria-labelledby={`${id}-title`}\n {...(description ? { 'aria-describedby': `${id}-description` } : null)}\n tabIndex={-1}\n data-state={state}\n data-side={side}\n className={cx('ansh-drawer', `ansh-drawer--${side}`, className)}\n // The size travels as a custom property so the closed-state transform can be written in\n // terms of it — `translateX(100%)` alone breaks when the panel has a max-width.\n style={{\n [horizontal ? 'width' : 'height']: size,\n ['--ansh-drawer-size' as string]: size,\n }}\n >\n <header className=\"ansh-drawer__header\">\n <div className=\"ansh-dialog__heading\">\n <h2 className=\"ansh-dialog__title\" id={`${id}-title`}>\n {title}\n </h2>\n {description ? (\n <p className=\"ansh-dialog__description\" id={`${id}-description`}>\n {description}\n </p>\n ) : null}\n </div>\n\n {showClose ? (\n <button\n type=\"button\"\n className=\"ansh-dialog__close ansh-focusable\"\n aria-label=\"Close panel\"\n onClick={() => onOpenChange(false)}\n >\n <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n ) : null}\n </header>\n\n <div className=\"ansh-drawer__body\">{children}</div>\n {footer ? <footer className=\"ansh-drawer__footer\">{footer}</footer> : null}\n </div>\n </div>\n </Portal>\n )\n}\n","import { type ReactNode, useCallback, useEffect, useId, useRef, useState } from 'react'\nimport { type Placement } from '../../primitives/position'\nimport { cx } from '../../primitives/compose'\nimport { Portal } from '../../primitives/portal'\nimport { Slot } from '../../primitives/slot'\nimport { useAnchoredPosition } from '../../primitives/use-anchored-position'\nimport { useDismiss } from '../../primitives/use-dismiss'\nimport { usePresence } from '../../primitives/presence'\n\n/**\n * Menus — dropdown and context.\n *\n * Data-driven (`items={[…]}`) rather than compound. Menus are almost always built from a\n * configuration array anyway — permissions filter entries, a selection decides what's enabled — and\n * expressing that as JSX children means `{canDelete && <MenuItem …/>}` scattered through the tree,\n * which breaks keyboard navigation indices in ways that are painful to debug.\n *\n * Follows the ARIA menu pattern, where **DOM focus moves to the item** (unlike a listbox, which\n * keeps focus on the container). That's what makes Right/Left arrow submenu traversal work the way\n * it does in every desktop application.\n */\n\ninterface MenuItemBase {\n id?: string\n disabled?: boolean\n}\n\nexport interface MenuAction extends MenuItemBase {\n type?: 'item'\n label: ReactNode\n icon?: ReactNode\n /** Display-only shortcut hint, e.g. `'⌘S'`. */\n shortcut?: string\n /** Style as destructive, and mark it in the accessible name. */\n danger?: boolean\n onSelect?: () => void\n}\n\nexport interface MenuCheckbox extends MenuItemBase {\n type: 'checkbox'\n label: ReactNode\n checked: boolean\n onChange: (checked: boolean) => void\n shortcut?: string\n}\n\nexport interface MenuRadioGroup {\n type: 'radio'\n value: string\n onChange: (value: string) => void\n options: ReadonlyArray<{ value: string; label: ReactNode; disabled?: boolean }>\n}\n\nexport interface MenuSubmenu extends MenuItemBase {\n type: 'submenu'\n label: ReactNode\n icon?: ReactNode\n items: readonly MenuEntry[]\n}\n\nexport type MenuEntry =\n | MenuAction\n | MenuCheckbox\n | MenuRadioGroup\n | MenuSubmenu\n | { type: 'separator' }\n | { type: 'label'; label: ReactNode }\n\n/** Flatten to the rows that can actually receive focus, for keyboard navigation. */\ninterface Focusable {\n entry: MenuEntry\n /** For radio groups, which option this row is. */\n optionIndex?: number\n disabled: boolean\n}\n\nfunction flatten(items: readonly MenuEntry[]): Focusable[] {\n const rows: Focusable[] = []\n for (const entry of items) {\n if ('type' in entry && (entry.type === 'separator' || entry.type === 'label')) continue\n if ('type' in entry && entry.type === 'radio') {\n entry.options.forEach((option, optionIndex) => {\n rows.push({ entry, optionIndex, disabled: option.disabled ?? false })\n })\n continue\n }\n rows.push({ entry, disabled: (entry as MenuItemBase).disabled ?? false })\n }\n return rows\n}\n\nexport interface MenuProps {\n items: readonly MenuEntry[]\n placement?: Placement\n /** Accessible name for the menu itself. */\n label?: string\n className?: string\n /** The control that opens the menu. */\n children: ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\n/**\n * A dropdown menu.\n *\n * ```tsx\n * <DropdownMenu items={[\n * { label: 'Edit', shortcut: '⌘E', onSelect: edit },\n * { type: 'separator' },\n * { label: 'Delete', danger: true, onSelect: remove },\n * ]}>\n * <IconButton label=\"Actions\" />\n * </DropdownMenu>\n * ```\n */\nexport function DropdownMenu({\n items,\n placement = 'bottom-start',\n label = 'Menu',\n className,\n children,\n open: controlledOpen,\n onOpenChange,\n}: MenuProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false)\n const open = controlledOpen ?? uncontrolledOpen\n const setOpen = useCallback(\n (next: boolean) => {\n setUncontrolledOpen(next)\n onOpenChange?.(next)\n },\n [onOpenChange],\n )\n\n const triggerRef = useRef<HTMLElement | null>(null)\n const menuRef = useRef<HTMLDivElement | null>(null)\n const menuId = useId()\n\n const { mounted, state } = usePresence(open, menuRef)\n const position = useAnchoredPosition(triggerRef, menuRef, mounted, { placement, offset: 6 })\n useDismiss(menuRef, open, () => setOpen(false), { ignore: [triggerRef] })\n\n return (\n <>\n <Slot\n ref={triggerRef as React.Ref<HTMLElement>}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n onClick={() => setOpen(!open)}\n onKeyDown={(event: React.KeyboardEvent) => {\n // ArrowDown opens *and* lands on the first item, which is the single most-used path\n // into a menu for keyboard users.\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault()\n setOpen(true)\n }\n }}\n >\n {children}\n </Slot>\n\n {mounted ? (\n <Portal>\n <MenuSurface\n ref={menuRef}\n id={menuId}\n items={items}\n label={label}\n state={state}\n style={position.style}\n className={className}\n onClose={() => {\n setOpen(false)\n triggerRef.current?.focus?.()\n }}\n />\n </Portal>\n ) : null}\n </>\n )\n}\n\nexport interface ContextMenuProps {\n items: readonly MenuEntry[]\n label?: string\n className?: string\n children: ReactNode\n}\n\n/**\n * A right-click menu.\n *\n * Also opens on the **context-menu key** and on Shift+F10, which is how keyboard users reach one —\n * a right-click-only implementation is inaccessible, and it is the most commonly missed keyboard\n * binding in the whole component set.\n *\n * Anchored to the pointer via a zero-size virtual rect, so the existing positioning code flips and\n * shifts it near the viewport edges without needing a separate path.\n */\nexport function ContextMenu({\n items,\n label = 'Context menu',\n className,\n children,\n}: ContextMenuProps) {\n const [point, setPoint] = useState<{ x: number; y: number } | null>(null)\n const menuRef = useRef<HTMLDivElement | null>(null)\n const anchorRef = useRef<HTMLSpanElement | null>(null)\n const menuId = useId()\n\n const open = point !== null\n const { mounted, state } = usePresence(open, menuRef)\n const position = useAnchoredPosition(anchorRef, menuRef, mounted, {\n placement: 'bottom-start',\n offset: 2,\n })\n\n useDismiss(menuRef, open, () => setPoint(null))\n\n return (\n <>\n <span\n className=\"ansh-contextmenu__area\"\n onContextMenu={(event) => {\n event.preventDefault()\n setPoint({ x: event.clientX, y: event.clientY })\n }}\n onKeyDown={(event) => {\n if (event.key === 'ContextMenu' || (event.shiftKey && event.key === 'F10')) {\n event.preventDefault()\n const rect = event.currentTarget.getBoundingClientRect()\n setPoint({ x: rect.left + 8, y: rect.top + 8 })\n }\n }}\n >\n {children}\n </span>\n\n {/* A zero-size anchor placed at the pointer. Cheaper than teaching the positioner about\n virtual elements, and it inherits flip/shift behaviour for free. */}\n {point ? (\n <span\n ref={anchorRef}\n aria-hidden=\"true\"\n style={{ position: 'fixed', left: point.x, top: point.y, width: 0, height: 0 }}\n />\n ) : null}\n\n {mounted ? (\n <Portal>\n <MenuSurface\n ref={menuRef}\n id={menuId}\n items={items}\n label={label}\n state={state}\n style={position.style}\n className={className}\n onClose={() => setPoint(null)}\n />\n </Portal>\n ) : null}\n </>\n )\n}\n\n// --- The menu surface itself ---------------------------------------------\n\ninterface MenuSurfaceProps {\n id: string\n items: readonly MenuEntry[]\n label: string\n state: 'open' | 'closed'\n style: React.CSSProperties\n className?: string | undefined\n onClose: () => void\n}\n\nconst MenuSurface = function MenuSurface({\n ref,\n id,\n items,\n label,\n state,\n style,\n className,\n onClose,\n}: MenuSurfaceProps & { ref: React.Ref<HTMLDivElement> }) {\n const rows = flatten(items)\n const itemRefs = useRef<Array<HTMLElement | null>>([])\n const [active, setActive] = useState(() => rows.findIndex((row) => !row.disabled))\n const [openSubmenu, setOpenSubmenu] = useState<number | null>(null)\n const typeaheadRef = useRef({\n buffer: '',\n timer: undefined as ReturnType<typeof setTimeout> | undefined,\n })\n\n // Focus the first enabled item on open. The ARIA menu pattern puts DOM focus on the item, which\n // is what allows Right-arrow to hand focus to a submenu and Left-arrow to take it back.\n useEffect(() => {\n itemRefs.current[active]?.focus()\n // Only on mount: afterwards focus follows the keyboard handler below.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const move = (delta: number) => {\n if (rows.length === 0) return\n let next = active\n for (let attempts = 0; attempts < rows.length; attempts++) {\n next = (next + delta + rows.length) % rows.length\n if (!rows[next]?.disabled) break\n }\n setActive(next)\n itemRefs.current[next]?.focus()\n }\n\n const activate = (index: number) => {\n const row = rows[index]\n if (!row || row.disabled) return\n const { entry } = row\n\n if ('type' in entry && entry.type === 'submenu') {\n setOpenSubmenu(index)\n return\n }\n if ('type' in entry && entry.type === 'checkbox') {\n entry.onChange(!entry.checked)\n // Checkbox items keep the menu open: toggling three view options should not require\n // reopening the menu twice.\n return\n }\n if ('type' in entry && entry.type === 'radio') {\n entry.onChange(entry.options[row.optionIndex!]!.value)\n onClose()\n return\n }\n ;(entry as MenuAction).onSelect?.()\n onClose()\n }\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n move(1)\n break\n case 'ArrowUp':\n event.preventDefault()\n move(-1)\n break\n case 'Home':\n event.preventDefault()\n setActive(0)\n itemRefs.current[0]?.focus()\n break\n case 'End':\n event.preventDefault()\n setActive(rows.length - 1)\n itemRefs.current[rows.length - 1]?.focus()\n break\n case 'Enter':\n case ' ':\n event.preventDefault()\n activate(active)\n break\n case 'ArrowRight': {\n const row = rows[active]\n if (row && 'type' in row.entry && row.entry.type === 'submenu') {\n event.preventDefault()\n setOpenSubmenu(active)\n }\n break\n }\n case 'Escape':\n event.preventDefault()\n onClose()\n break\n case 'Tab':\n // A menu is a single stop in the tab order; Tab closes it rather than walking the items.\n event.preventDefault()\n onClose()\n break\n default: {\n if (event.key.length !== 1) return\n const state = typeaheadRef.current\n clearTimeout(state.timer)\n state.buffer += event.key.toLowerCase()\n state.timer = setTimeout(() => {\n state.buffer = ''\n }, 600)\n\n const match = rows.findIndex((row, index) => {\n if (row.disabled || index === active) return false\n const text =\n typeof (row.entry as MenuAction).label === 'string'\n ? ((row.entry as MenuAction).label as string)\n : ''\n return text.toLowerCase().startsWith(state.buffer)\n })\n if (match >= 0) {\n setActive(match)\n itemRefs.current[match]?.focus()\n }\n }\n }\n }\n\n let rowIndex = -1\n\n return (\n <div\n ref={ref}\n id={id}\n role=\"menu\"\n aria-label={label}\n data-state={state}\n className={cx('ansh-menu', className)}\n style={style}\n onKeyDown={onKeyDown}\n >\n {items.map((entry, entryIndex) => {\n if ('type' in entry && entry.type === 'separator') {\n return <div key={`sep-${entryIndex}`} role=\"separator\" className=\"ansh-menu__separator\" />\n }\n\n if ('type' in entry && entry.type === 'label') {\n return (\n <div key={`label-${entryIndex}`} role=\"presentation\" className=\"ansh-menu__label\">\n {entry.label}\n </div>\n )\n }\n\n if ('type' in entry && entry.type === 'radio') {\n return (\n <div key={`radio-${entryIndex}`} role=\"group\" className=\"ansh-menu__group\">\n {entry.options.map((option) => {\n rowIndex++\n const index = rowIndex\n return (\n <div\n key={option.value}\n ref={(node) => {\n itemRefs.current[index] = node\n }}\n role=\"menuitemradio\"\n aria-checked={entry.value === option.value}\n aria-disabled={option.disabled || undefined}\n tabIndex={index === active ? 0 : -1}\n className={cx(\n 'ansh-menu__item',\n option.disabled && 'ansh-menu__item--disabled',\n )}\n onClick={() => activate(index)}\n onMouseEnter={() => !option.disabled && setActive(index)}\n >\n <span\n className={cx(\n 'ansh-menu__indicator',\n entry.value === option.value && 'ansh-menu__indicator--on',\n )}\n aria-hidden=\"true\"\n />\n <span className=\"ansh-menu__text\">{option.label}</span>\n </div>\n )\n })}\n </div>\n )\n }\n\n rowIndex++\n const index = rowIndex\n\n if ('type' in entry && entry.type === 'checkbox') {\n return (\n <div\n key={entry.id ?? `check-${entryIndex}`}\n ref={(node) => {\n itemRefs.current[index] = node\n }}\n role=\"menuitemcheckbox\"\n aria-checked={entry.checked}\n aria-disabled={entry.disabled || undefined}\n tabIndex={index === active ? 0 : -1}\n className={cx('ansh-menu__item', entry.disabled && 'ansh-menu__item--disabled')}\n onClick={() => activate(index)}\n onMouseEnter={() => !entry.disabled && setActive(index)}\n >\n <span\n className={cx(\n 'ansh-menu__indicator',\n 'ansh-menu__indicator--check',\n entry.checked && 'ansh-menu__indicator--on',\n )}\n aria-hidden=\"true\"\n >\n <svg viewBox=\"0 0 14 14\" width=\"10\" height=\"10\">\n <path\n d=\"M2.5 7.5l3 3 6-6.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n </span>\n <span className=\"ansh-menu__text\">{entry.label}</span>\n {entry.shortcut ? <kbd className=\"ansh-menu__shortcut\">{entry.shortcut}</kbd> : null}\n </div>\n )\n }\n\n if ('type' in entry && entry.type === 'submenu') {\n return (\n <Submenu\n key={entry.id ?? `sub-${entryIndex}`}\n ref={(node) => {\n itemRefs.current[index] = node\n }}\n entry={entry}\n active={index === active}\n open={openSubmenu === index}\n onOpenChange={(next) => setOpenSubmenu(next ? index : null)}\n onHover={() => setActive(index)}\n onCloseAll={onClose}\n />\n )\n }\n\n const action = entry as MenuAction\n return (\n <div\n key={action.id ?? `item-${entryIndex}`}\n ref={(node) => {\n itemRefs.current[index] = node\n }}\n role=\"menuitem\"\n aria-disabled={action.disabled || undefined}\n tabIndex={index === active ? 0 : -1}\n className={cx(\n 'ansh-menu__item',\n action.danger && 'ansh-menu__item--danger',\n action.disabled && 'ansh-menu__item--disabled',\n )}\n onClick={() => activate(index)}\n onMouseEnter={() => !action.disabled && setActive(index)}\n >\n {action.icon ? <span className=\"ansh-menu__icon\">{action.icon}</span> : null}\n <span className=\"ansh-menu__text\">{action.label}</span>\n {action.shortcut ? <kbd className=\"ansh-menu__shortcut\">{action.shortcut}</kbd> : null}\n </div>\n )\n })}\n </div>\n )\n}\n\ninterface SubmenuProps {\n ref: React.Ref<HTMLDivElement>\n entry: MenuSubmenu\n active: boolean\n open: boolean\n onOpenChange: (open: boolean) => void\n onHover: () => void\n onCloseAll: () => void\n}\n\nfunction Submenu({ ref, entry, active, open, onOpenChange, onHover, onCloseAll }: SubmenuProps) {\n const triggerRef = useRef<HTMLDivElement | null>(null)\n const panelRef = useRef<HTMLDivElement | null>(null)\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const id = useId()\n\n const { mounted, state } = usePresence(open, panelRef)\n const position = useAnchoredPosition(triggerRef, panelRef, mounted, {\n placement: 'right-start',\n offset: 2,\n })\n\n useEffect(() => () => clearTimeout(timerRef.current), [])\n\n return (\n <>\n <div\n ref={(node) => {\n triggerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? id : undefined}\n aria-disabled={entry.disabled || undefined}\n tabIndex={active ? 0 : -1}\n className={cx(\n 'ansh-menu__item',\n 'ansh-menu__item--submenu',\n entry.disabled && 'ansh-menu__item--disabled',\n )}\n onMouseEnter={() => {\n onHover()\n // A short delay before opening on hover, so dragging the pointer diagonally across a\n // submenu trigger toward another item doesn't flash a panel open.\n clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => onOpenChange(true), 120)\n }}\n onMouseLeave={() => {\n clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => onOpenChange(false), 200)\n }}\n onClick={() => onOpenChange(!open)}\n >\n {entry.icon ? <span className=\"ansh-menu__icon\">{entry.icon}</span> : null}\n <span className=\"ansh-menu__text\">{entry.label}</span>\n <span className=\"ansh-menu__chevron\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 12 12\" width=\"12\" height=\"12\">\n <path\n d=\"M4.5 2.5L8 6l-3.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </div>\n\n {mounted ? (\n <Portal>\n <div\n onMouseEnter={() => clearTimeout(timerRef.current)}\n onMouseLeave={() => {\n timerRef.current = setTimeout(() => onOpenChange(false), 200)\n }}\n onKeyDown={(event) => {\n // Left arrow closes the submenu and returns focus to its trigger — the inverse of\n // the Right arrow that opened it.\n if (event.key === 'ArrowLeft') {\n event.preventDefault()\n event.stopPropagation()\n onOpenChange(false)\n triggerRef.current?.focus()\n }\n }}\n >\n <MenuSurface\n ref={panelRef}\n id={id}\n items={entry.items}\n label={typeof entry.label === 'string' ? entry.label : 'Submenu'}\n state={state}\n style={position.style}\n onClose={onCloseAll}\n />\n </div>\n </Portal>\n ) : null}\n </>\n )\n}\n"]}