@wow-two-beta/ui 0.0.57 → 0.0.58
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/actions/button/Button.d.ts +0 -9
- package/dist/actions/buttonGroup/ButtonGroup.d.ts +2 -2
- package/dist/actions/disclosureButton/DisclosureButton.d.ts +1 -1
- package/dist/actions/index.js +4 -4
- package/dist/actions/speedDial/SpeedDial.d.ts +2 -2
- package/dist/actions/toggleButton/ToggleButton.d.ts +1 -1
- package/dist/actions/toggleButtonGroup/ToggleButtonGroup.d.ts +1 -1
- package/dist/{chunk-VR5HH4SX.js → chunk-4XWLEKH2.js} +10 -4
- package/dist/chunk-4XWLEKH2.js.map +1 -0
- package/dist/{chunk-3GZOE7JF.js → chunk-577JZ2A2.js} +3 -3
- package/dist/{chunk-3GZOE7JF.js.map → chunk-577JZ2A2.js.map} +1 -1
- package/dist/{chunk-BI6JZY2O.js → chunk-DJJOQWOG.js} +6 -6
- package/dist/chunk-DJJOQWOG.js.map +1 -0
- package/dist/{chunk-FEXH7YWU.js → chunk-EEHJHPAP.js} +30 -30
- package/dist/chunk-EEHJHPAP.js.map +1 -0
- package/dist/{chunk-5Y43MUOK.js → chunk-EJCO7AWR.js} +11 -11
- package/dist/chunk-EJCO7AWR.js.map +1 -0
- package/dist/{chunk-ZFNGOAHR.js → chunk-EX4AOJCN.js} +58 -58
- package/dist/chunk-EX4AOJCN.js.map +1 -0
- package/dist/{chunk-4WYHY6KV.js → chunk-FNSC4LAL.js} +3 -3
- package/dist/{chunk-4WYHY6KV.js.map → chunk-FNSC4LAL.js.map} +1 -1
- package/dist/{chunk-WOKIYORV.js → chunk-FYG23O4O.js} +262 -28
- package/dist/chunk-FYG23O4O.js.map +1 -0
- package/dist/{chunk-WPTF6ZRR.js → chunk-GSAOM2ZR.js} +67 -38
- package/dist/chunk-GSAOM2ZR.js.map +1 -0
- package/dist/{chunk-JOOE4KS5.js → chunk-HG7NX6GP.js} +509 -380
- package/dist/chunk-HG7NX6GP.js.map +1 -0
- package/dist/{chunk-XDP6GEBA.js → chunk-JYGC5SRP.js} +39 -5
- package/dist/chunk-JYGC5SRP.js.map +1 -0
- package/dist/{chunk-4QOCAFCA.js → chunk-MTD4RTGO.js} +19 -19
- package/dist/chunk-MTD4RTGO.js.map +1 -0
- package/dist/{chunk-USGZGMLY.js → chunk-NR5DYKSJ.js} +3 -3
- package/dist/{chunk-USGZGMLY.js.map → chunk-NR5DYKSJ.js.map} +1 -1
- package/dist/{chunk-VYOQYXK6.js → chunk-OBW7JUNL.js} +12 -12
- package/dist/chunk-OBW7JUNL.js.map +1 -0
- package/dist/{chunk-UI4RT5JF.js → chunk-TTSJZEL7.js} +25 -25
- package/dist/chunk-TTSJZEL7.js.map +1 -0
- package/dist/{chunk-5PMOT5MD.js → chunk-V267IMBH.js} +86 -4
- package/dist/chunk-V267IMBH.js.map +1 -0
- package/dist/{chunk-ZH6BB54G.js → chunk-XDATW7NF.js} +3 -3
- package/dist/{chunk-ZH6BB54G.js.map → chunk-XDATW7NF.js.map} +1 -1
- package/dist/{chunk-4OKJVYBV.js → chunk-Y5GS4CLT.js} +221 -186
- package/dist/chunk-Y5GS4CLT.js.map +1 -0
- package/dist/display/accordion/Accordion.d.ts +15 -11
- package/dist/display/activityFeed/ActivityFeed.d.ts +2 -2
- package/dist/display/annotationMarker/AnnotationMarker.d.ts +6 -7
- package/dist/display/audioPlayer/AudioPlayer.d.ts +1 -1
- package/dist/display/audioWaveform/AudioWaveform.d.ts +1 -1
- package/dist/display/avatar/Avatar.d.ts +1 -1
- package/dist/display/badgeOverlay/BadgeOverlay.d.ts +1 -1
- package/dist/display/carousel/Carousel.d.ts +1 -1
- package/dist/display/chatBubble/ChatBubble.d.ts +2 -2
- package/dist/display/collapsible/Collapsible.d.ts +2 -2
- package/dist/display/commentThread/CommentThread.d.ts +1 -1
- package/dist/display/confetti/Confetti.d.ts +2 -2
- package/dist/display/countBadge/CountBadge.d.ts +3 -4
- package/dist/display/countUp/CountUp.d.ts +2 -2
- package/dist/display/dataGrid/DataGrid.d.ts +2 -2
- package/dist/display/dataTable/DataTable.d.ts +5 -5
- package/dist/display/diffViewer/DiffViewer.d.ts +1 -1
- package/dist/display/eventCalendar/EventCalendar.d.ts +1 -1
- package/dist/display/gantt/Gantt.d.ts +1 -1
- package/dist/display/gradientText/GradientText.d.ts +2 -2
- package/dist/display/heatmapCalendar/HeatmapCalendar.d.ts +1 -1
- package/dist/display/highlight/Highlight.d.ts +2 -2
- package/dist/display/index.js +6 -6
- package/dist/display/list/List.d.ts +2 -2
- package/dist/display/marquee/Marquee.d.ts +1 -1
- package/dist/display/messageList/MessageList.d.ts +3 -3
- package/dist/display/notificationDot/NotificationDot.d.ts +1 -1
- package/dist/display/pdfViewer/PDFViewer.d.ts +1 -1
- package/dist/display/reactionBar/ReactionBar.d.ts +6 -6
- package/dist/display/scrollReveal/ScrollReveal.d.ts +1 -1
- package/dist/display/sectionHeader/SectionHeader.d.ts +1 -1
- package/dist/display/separator/Separator.d.ts +2 -3
- package/dist/display/sparkline/Sparkline.d.ts +1 -1
- package/dist/display/status/Status.d.ts +1 -1
- package/dist/display/swipeActions/SwipeActions.d.ts +1 -1
- package/dist/display/table/Table.d.ts +17 -5
- package/dist/display/table/index.d.ts +1 -1
- package/dist/display/tabs/Tabs.d.ts +1 -1
- package/dist/display/text/Text.variants.d.ts +14 -14
- package/dist/display/threadView/ThreadView.d.ts +2 -2
- package/dist/display/tilt/Tilt.d.ts +2 -3
- package/dist/display/tooltip/Tooltip.d.ts +2 -2
- package/dist/display/tree/Tree.d.ts +2 -2
- package/dist/display/typewriter/Typewriter.d.ts +2 -2
- package/dist/feedback/index.js +6 -6
- package/dist/feedback/liveCursor/LiveCursor.d.ts +4 -6
- package/dist/feedback/loadingOverlay/LoadingOverlay.d.ts +5 -6
- package/dist/feedback/notificationCenter/NotificationCenter.d.ts +1 -1
- package/dist/feedback/onboardingChecklist/OnboardingChecklist.d.ts +3 -3
- package/dist/feedback/presenceIndicator/PresenceIndicator.d.ts +1 -1
- package/dist/feedback/statusIndicator/StatusIndicator.d.ts +1 -1
- package/dist/feedback/toaster/Toaster.d.ts +2 -2
- package/dist/feedback/tour/Tour.d.ts +2 -2
- package/dist/feedback/trendIndicator/TrendIndicator.d.ts +2 -2
- package/dist/feedback/typingIndicator/TypingIndicator.d.ts +1 -1
- package/dist/feedback/undoBar/UndoBar.d.ts +4 -4
- package/dist/forms/addressForm/AddressForm.d.ts +3 -3
- package/dist/forms/characterCount/CharacterCount.d.ts +1 -1
- package/dist/forms/chatComposer/ChatComposer.d.ts +2 -2
- package/dist/forms/checkbox/Checkbox.d.ts +1 -1
- package/dist/forms/checkboxGroup/CheckboxGroup.d.ts +1 -1
- package/dist/forms/codeEditor/CodeEditor.d.ts +2 -2
- package/dist/forms/colorArea/ColorArea.d.ts +1 -1
- package/dist/forms/colorField/ColorField.d.ts +1 -1
- package/dist/forms/colorPicker/ColorPicker.d.ts +2 -2
- package/dist/forms/colorSlider/ColorSlider.d.ts +1 -1
- package/dist/forms/colorSwatch/ColorSwatch.variants.d.ts +14 -14
- package/dist/forms/colorSwatchPicker/ColorSwatchPicker.d.ts +2 -2
- package/dist/forms/colorWheel/ColorWheel.d.ts +1 -1
- package/dist/forms/combobox/Combobox.d.ts +4 -4
- package/dist/forms/cronInput/CronInput.d.ts +2 -2
- package/dist/forms/datePicker/DatePicker.d.ts +1 -1
- package/dist/forms/dateRangePicker/DateRangePicker.d.ts +1 -1
- package/dist/forms/editable/Editable.d.ts +7 -7
- package/dist/forms/emojiPicker/EmojiPicker.d.ts +1 -1
- package/dist/forms/fileUpload/FileUpload.d.ts +1 -1
- package/dist/forms/fontPicker/FontPicker.d.ts +1 -1
- package/dist/forms/gradientPicker/GradientPicker.d.ts +1 -1
- package/dist/forms/iconPicker/IconPicker.d.ts +1 -1
- package/dist/forms/index.js +11 -11
- package/dist/forms/jsonEditor/JSONEditor.d.ts +3 -3
- package/dist/forms/knob/Knob.d.ts +2 -2
- package/dist/forms/label/Label.d.ts +1 -1
- package/dist/forms/listbox/Listbox.d.ts +8 -4
- package/dist/forms/markdownEditor/MarkdownEditor.d.ts +1 -1
- package/dist/forms/multiSelect/MultiSelect.d.ts +4 -4
- package/dist/forms/passwordInput/PasswordInput.d.ts +1 -1
- package/dist/forms/passwordStrength/PasswordStrength.d.ts +1 -1
- package/dist/forms/phoneInput/PhoneInput.d.ts +3 -3
- package/dist/forms/pinInput/PinInput.d.ts +2 -2
- package/dist/forms/radioGroup/RadioGroup.d.ts +1 -1
- package/dist/forms/reactionPicker/ReactionPicker.d.ts +1 -1
- package/dist/forms/recurrenceEditor/RecurrenceEditor.d.ts +2 -2
- package/dist/forms/searchInput/SearchInput.d.ts +1 -1
- package/dist/forms/select/Select.d.ts +14 -7
- package/dist/forms/select/Select.variants.d.ts +46 -3
- package/dist/forms/stepper/Stepper.d.ts +1 -1
- package/dist/forms/tagsInput/TagsInput.d.ts +2 -2
- package/dist/forms/timePicker/TimePicker.d.ts +1 -1
- package/dist/forms/wizard/Wizard.d.ts +5 -5
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/useTypeahead.d.ts +37 -0
- package/dist/icons/index.js +1 -1
- package/dist/index.js +18 -18
- package/dist/layout/appShell/AppShell.d.ts +2 -2
- package/dist/layout/frame/Frame.d.ts +1 -1
- package/dist/layout/grid/Grid.d.ts +17 -5
- package/dist/layout/grid/Grid.variants.d.ts +15 -0
- package/dist/layout/grid/index.d.ts +1 -1
- package/dist/layout/index.d.ts +2 -0
- package/dist/layout/index.js +9 -9
- package/dist/layout/inline/Inline.d.ts +5 -0
- package/dist/layout/navbar/Navbar.d.ts +37 -0
- package/dist/layout/navbar/Navbar.variants.d.ts +76 -0
- package/dist/layout/navbar/index.d.ts +2 -0
- package/dist/layout/pullToRefresh/PullToRefresh.d.ts +1 -1
- package/dist/layout/resizablePanels/ResizablePanels.d.ts +1 -1
- package/dist/layout/section/Section.d.ts +26 -0
- package/dist/layout/section/Section.variants.d.ts +62 -0
- package/dist/layout/section/index.d.ts +2 -0
- package/dist/nav/commandPalette/CommandPalette.d.ts +1 -1
- package/dist/nav/contextMenu/ContextMenu.d.ts +1 -1
- package/dist/nav/index.js +8 -8
- package/dist/nav/menu/Menu.d.ts +1 -1
- package/dist/nav/navItem/NavItem.d.ts +2 -3
- package/dist/nav/tableOfContents/TableOfContents.d.ts +1 -1
- package/dist/overlays/actionSheet/ActionSheet.d.ts +1 -1
- package/dist/overlays/backdrop/Backdrop.d.ts +3 -6
- package/dist/overlays/dialog/Dialog.d.ts +1 -1
- package/dist/overlays/drawer/Drawer.d.ts +1 -1
- package/dist/overlays/index.js +8 -8
- package/dist/overlays/popover/Popover.d.ts +1 -1
- package/dist/primitives/anchoredPositioner/AnchoredPositioner.d.ts +1 -1
- package/dist/primitives/dismissableLayer/DismissableLayer.d.ts +2 -2
- package/dist/primitives/index.js +1 -1
- package/dist/primitives/presence/Presence.d.ts +3 -3
- package/dist/primitives/rovingFocusGroup/RovingFocusGroup.d.ts +3 -6
- package/dist/primitives/scrollLockProvider/ScrollLockProvider.d.ts +2 -2
- package/dist/utils/Environment.d.ts +8 -0
- package/dist/utils/SurfaceStyles.d.ts +7 -0
- package/dist/utils/Tones.d.ts +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-4OKJVYBV.js.map +0 -1
- package/dist/chunk-4QOCAFCA.js.map +0 -1
- package/dist/chunk-5PMOT5MD.js.map +0 -1
- package/dist/chunk-5Y43MUOK.js.map +0 -1
- package/dist/chunk-BI6JZY2O.js.map +0 -1
- package/dist/chunk-FEXH7YWU.js.map +0 -1
- package/dist/chunk-JOOE4KS5.js.map +0 -1
- package/dist/chunk-UI4RT5JF.js.map +0 -1
- package/dist/chunk-VR5HH4SX.js.map +0 -1
- package/dist/chunk-VYOQYXK6.js.map +0 -1
- package/dist/chunk-WOKIYORV.js.map +0 -1
- package/dist/chunk-WPTF6ZRR.js.map +0 -1
- package/dist/chunk-XDP6GEBA.js.map +0 -1
- package/dist/chunk-ZFNGOAHR.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/overlays/alertDialog/AlertDialog.tsx","../src/overlays/popover/Popover.tsx","../src/overlays/hoverCard/HoverCard.tsx","../src/overlays/actionSheet/ActionSheet.tsx","../src/overlays/bottomSheet/BottomSheet.tsx"],"names":["AlertDialogContent","AlertDialogAction","AlertDialogCancel","jsx","forwardRef","PopoverTrigger","PopoverContent","createContext","useContext","useRef","useMemo","HoverCardContent","ActionSheetAction","ActionSheetCancel","BottomSheet","useState","useEffect","jsxs","FocusScope"],"mappings":"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","file":"chunk-4QOCAFCA.js","sourcesContent":["import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport {\n Dialog,\n DialogBody,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n DialogClose,\n type DialogProps,\n type DialogContentProps,\n} from '../dialog';\n\nexport type AlertDialogProps = Omit<DialogProps, 'role' | 'dismissOnOutsideClick'>;\n\nexport function AlertDialog(props: AlertDialogProps) {\n return <Dialog {...props} role=\"alertdialog\" dismissOnOutsideClick={false} />;\n}\n\nexport const AlertDialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function AlertDialogContent(props, ref) {\n return <DialogContent ref={ref} {...props} />;\n },\n);\n\nexport interface AlertDialogActionProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Runs before the dialog closes. */\n onAction?: () => void;\n children: ReactNode;\n}\n\nexport const AlertDialogAction = forwardRef<HTMLButtonElement, AlertDialogActionProps>(\n function AlertDialogAction({ onAction, onClick, className, children, ...rest }, ref) {\n return (\n <DialogClose\n ref={ref}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n onAction?.();\n }}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </DialogClose>\n );\n },\n);\n\nexport interface AlertDialogCancelProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const AlertDialogCancel = forwardRef<HTMLButtonElement, AlertDialogCancelProps>(\n function AlertDialogCancel({ className, children, ...rest }, ref) {\n return (\n <DialogClose\n ref={ref}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-md border border-border bg-background px-4 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </DialogClose>\n );\n },\n);\n\ntype AlertDialogComponent = typeof AlertDialog & {\n Trigger: typeof DialogTrigger;\n Content: typeof AlertDialogContent;\n Header: typeof DialogHeader;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Action: typeof AlertDialogAction;\n Cancel: typeof AlertDialogCancel;\n};\n\n(AlertDialog as AlertDialogComponent).Trigger = DialogTrigger;\n(AlertDialog as AlertDialogComponent).Content = AlertDialogContent;\n(AlertDialog as AlertDialogComponent).Header = DialogHeader;\n(AlertDialog as AlertDialogComponent).Title = DialogTitle;\n(AlertDialog as AlertDialogComponent).Description = DialogDescription;\n(AlertDialog as AlertDialogComponent).Body = DialogBody;\n(AlertDialog as AlertDialogComponent).Footer = DialogFooter;\n(AlertDialog as AlertDialogComponent).Action = AlertDialogAction;\n(AlertDialog as AlertDialogComponent).Cancel = AlertDialogCancel;\n\nexport default AlertDialog as AlertDialogComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n AnchoredPositioner,\n DismissableLayer,\n OverlayArrow,\n Portal,\n Slot,\n type AnchoredPositionerProps,\n type OverlayArrowProps,\n} from '../../primitives';\n\ninterface PopoverContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n /** Trigger node held in state so an initially-open popover re-renders anchored. */\n triggerNode: HTMLElement | null;\n onTriggerChange: (node: HTMLElement | null) => void;\n placement: AnchoredPositionerProps['placement'];\n offset: number;\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null);\n\nfunction usePopoverContext() {\n const ctx = useContext(PopoverContext);\n if (!ctx) throw new Error('Popover.* must be used inside <Popover>');\n return ctx;\n}\n\nexport interface PopoverProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: AnchoredPositionerProps['placement'];\n offset?: number;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n children: ReactNode;\n}\n\nexport function Popover({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom',\n offset = 8,\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n children,\n}: PopoverProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const [triggerNode, setTriggerNode] = useState<HTMLElement | null>(null);\n\n const ctx = useMemo<PopoverContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n triggerNode,\n onTriggerChange: setTriggerNode,\n placement,\n offset,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, triggerNode, placement, offset, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <PopoverContext.Provider value={ctx}>{children}</PopoverContext.Provider>;\n}\n\nexport interface PopoverTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const PopoverTrigger = forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n function PopoverTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = usePopoverContext();\n const { triggerRef, onTriggerChange } = ctx;\n const Component = asChild ? Slot : 'button';\n // Memoized so the callback ref isn't re-invoked (null → node) every render.\n const composedRef = useMemo(\n () =>\n composeRefs<HTMLButtonElement>(\n forwardedRef,\n triggerRef as React.MutableRefObject<HTMLButtonElement | null>,\n onTriggerChange,\n ),\n [forwardedRef, triggerRef, onTriggerChange],\n );\n return (\n <Component\n ref={composedRef as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(!ctx.open);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\n/** Represents the prop surface of the `Popover.Content`. */\nexport interface PopoverContentProps\n extends HTMLAttributes<HTMLDivElement>,\n SurfaceVariants {\n /** Skips the surface chrome (bg/border/shadow); keeps only z-index + animation. */\n bare?: boolean;\n children: ReactNode;\n}\n\n/** Contains the default chrome width that preserves the historical look. */\nconst DEFAULT_WIDTH = 'w-72';\n\nexport const PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(\n function PopoverContent(\n { bare, variant, tone, radius, padding, elevation, className, children, ...rest },\n forwardedRef,\n ) {\n const ctx = usePopoverContext();\n if (!ctx.open) return null;\n /* Default to lg padding when chrome is on (matches old `p-4`); consumer can override. */\n const resolvedPadding = padding ?? (bare ? 'none' : 'lg');\n return (\n <Portal>\n {/* z-index sits on the SC root — transform creates the stacking context.\n z-popover (80) so a popover opened from a Dialog (z-modal, 70) paints\n above it — both portal to body, so equal z would resolve by DOM order. */}\n <AnchoredPositioner\n anchor={ctx.triggerNode}\n placement={ctx.placement}\n offset={ctx.offset}\n className=\"z-popover\"\n >\n <FocusScope asChild trapped loop>\n <DismissableLayer\n disableEscape={!ctx.dismissOnEscape}\n onEscape={() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }}\n disableOutsideClick={!ctx.dismissOnOutsideClick}\n onOutsidePointerDown={(e) => {\n if (ctx.triggerRef.current?.contains(e.target as Node)) return;\n ctx.setOpen(false);\n }}\n >\n <div\n ref={forwardedRef}\n role=\"dialog\"\n data-state=\"open\"\n className={cn(\n 'outline-none animate-in fade-in-0 zoom-in-95',\n !bare &&\n cn(\n DEFAULT_WIDTH,\n surfaceVariants({\n variant,\n tone,\n radius,\n padding: resolvedPadding,\n elevation,\n }),\n ),\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </DismissableLayer>\n </FocusScope>\n </AnchoredPositioner>\n </Portal>\n );\n },\n);\n\nexport function PopoverArrow({ className, ...rest }: OverlayArrowProps) {\n return <OverlayArrow className={cn('text-popover', className)} {...rest} />;\n}\n\ntype PopoverComponent = typeof Popover & {\n Trigger: typeof PopoverTrigger;\n Content: typeof PopoverContent;\n Arrow: typeof PopoverArrow;\n};\n\n(Popover as PopoverComponent).Trigger = PopoverTrigger;\n(Popover as PopoverComponent).Content = PopoverContent;\n(Popover as PopoverComponent).Arrow = PopoverArrow;\n\nexport default Popover as PopoverComponent;\n","import {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled, useEscape } from '../../hooks';\nimport {\n AnchoredPositioner,\n OverlayArrow,\n Portal,\n type AnchoredPositionerProps,\n type OverlayArrowProps,\n} from '../../primitives';\n\ninterface HoverCardContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n show: () => void;\n hide: () => void;\n cancelHide: () => void;\n placement: AnchoredPositionerProps['placement'];\n offset: number;\n}\n\nconst HoverCardContext = createContext<HoverCardContextValue | null>(null);\n\nfunction useHoverCardContext() {\n const ctx = useContext(HoverCardContext);\n if (!ctx) throw new Error('HoverCard.* must be used inside <HoverCard>');\n return ctx;\n}\n\nexport interface HoverCardProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n openDelay?: number;\n closeDelay?: number;\n placement?: AnchoredPositionerProps['placement'];\n offset?: number;\n children: ReactNode;\n}\n\nexport function HoverCard({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n openDelay = 700,\n closeDelay = 300,\n placement = 'bottom',\n offset = 8,\n children,\n}: HoverCardProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = useCallback(() => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = null;\n closeTimer.current = null;\n }, []);\n\n const show = useCallback(() => {\n clear();\n openTimer.current = setTimeout(() => setOpen(true), openDelay);\n }, [clear, openDelay, setOpen]);\n\n const hide = useCallback(() => {\n clear();\n closeTimer.current = setTimeout(() => setOpen(false), closeDelay);\n }, [clear, closeDelay, setOpen]);\n\n const cancelHide = useCallback(() => {\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n }, []);\n\n // Clear pending timers on unmount — avoids setState-after-unmount.\n useEffect(() => clear, [clear]);\n\n // WCAG 1.4.13 — hover content must be dismissible without moving the pointer.\n useEscape(() => {\n clear();\n setOpen(false);\n }, open);\n\n const ctx = useMemo<HoverCardContextValue>(\n () => ({ open, setOpen, triggerRef, show, hide, cancelHide, placement, offset }),\n [open, setOpen, show, hide, cancelHide, placement, offset],\n );\n\n return <HoverCardContext.Provider value={ctx}>{children}</HoverCardContext.Provider>;\n}\n\nexport interface HoverCardTriggerProps {\n asChild?: boolean;\n children: ReactElement;\n}\n\nexport function HoverCardTrigger({ children }: HoverCardTriggerProps) {\n const ctx = useHoverCardContext();\n if (!isValidElement(children)) return children;\n const trigger = children as ReactElement<{\n ref?: Ref<HTMLElement>;\n onPointerEnter?: (e: React.PointerEvent) => void;\n onPointerLeave?: (e: React.PointerEvent) => void;\n onFocus?: (e: React.FocusEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n }> & { ref?: Ref<HTMLElement> };\n\n return cloneElement(trigger, {\n ref: composeRefs((node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }, trigger.ref),\n onPointerEnter: (e: React.PointerEvent) => {\n trigger.props.onPointerEnter?.(e);\n ctx.show();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n trigger.props.onPointerLeave?.(e);\n ctx.hide();\n },\n onFocus: (e: React.FocusEvent) => {\n trigger.props.onFocus?.(e);\n ctx.show();\n },\n onBlur: (e: React.FocusEvent) => {\n trigger.props.onBlur?.(e);\n ctx.hide();\n },\n });\n}\n\nexport interface HoverCardContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const HoverCardContent = forwardRef<HTMLDivElement, HoverCardContentProps>(\n function HoverCardContent({ className, children, onPointerEnter, onPointerLeave, ...rest }, forwardedRef) {\n const ctx = useHoverCardContext();\n if (!ctx.open) return null;\n return (\n <Portal>\n <AnchoredPositioner\n anchor={ctx.triggerRef.current}\n placement={ctx.placement}\n offset={ctx.offset}\n className=\"z-dropdown\"\n >\n <div\n ref={forwardedRef}\n data-state=\"open\"\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n ctx.cancelHide();\n }}\n onPointerLeave={(e) => {\n onPointerLeave?.(e);\n ctx.hide();\n }}\n className={cn(\n 'w-64 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none animate-in fade-in-0 zoom-in-95',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </AnchoredPositioner>\n </Portal>\n );\n },\n);\n\nexport function HoverCardArrow({ className, ...rest }: OverlayArrowProps) {\n return <OverlayArrow className={cn('text-popover', className)} {...rest} />;\n}\n\ntype HoverCardComponent = typeof HoverCard & {\n Trigger: typeof HoverCardTrigger;\n Content: typeof HoverCardContent;\n Arrow: typeof HoverCardArrow;\n};\n\n(HoverCard as HoverCardComponent).Trigger = HoverCardTrigger;\n(HoverCard as HoverCardComponent).Content = HoverCardContent;\n(HoverCard as HoverCardComponent).Arrow = HoverCardArrow;\n\nexport default HoverCard as HoverCardComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useMemo,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerTitle } from '../drawer';\n\ninterface ActionSheetContextValue {\n setOpen: (open: boolean) => void;\n}\n\nconst ActionSheetContext = createContext<ActionSheetContextValue | null>(null);\n\nfunction useActionSheetContext() {\n const ctx = useContext(ActionSheetContext);\n if (!ctx) throw new Error('ActionSheet.* must be used inside <ActionSheet>');\n return ctx;\n}\n\nexport interface ActionSheetProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n title?: ReactNode;\n description?: ReactNode;\n className?: string;\n children: ReactNode;\n}\n\n/**\n * iOS-style action sheet — opinionated bottom Drawer with stacked button rows\n * and a separated Cancel.\n */\nexport function ActionSheet({\n open,\n defaultOpen,\n onOpenChange,\n title,\n description,\n className,\n children,\n}: ActionSheetProps) {\n // We can't intercept `setOpen` from Drawer's context directly, so the\n // ActionSheet owns the open state and drives Drawer fully controlled —\n // that way `ctx.setOpen` works in both controlled and uncontrolled modes.\n const [resolvedOpen, setOpen] = useControlled({\n controlled: open,\n default: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n\n const ctx = useMemo<ActionSheetContextValue>(() => ({ setOpen }), [setOpen]);\n\n return (\n <ActionSheetContext.Provider value={ctx}>\n <Drawer open={resolvedOpen} onOpenChange={setOpen} side=\"bottom\">\n <DrawerContent\n className={cn(\n 'mx-auto max-w-md rounded-t-xl bg-card p-2 text-card-foreground',\n className,\n )}\n >\n {(title || description) && (\n <div className=\"px-3 py-2 text-center\">\n {title && (\n <DrawerTitle className=\"text-sm font-medium text-muted-foreground\">\n {title}\n </DrawerTitle>\n )}\n {description && (\n <DrawerDescription className=\"mt-1 text-xs text-muted-foreground\">\n {description}\n </DrawerDescription>\n )}\n </div>\n )}\n <div className=\"flex flex-col gap-px overflow-hidden rounded-lg bg-border\">\n {children}\n </div>\n </DrawerContent>\n </Drawer>\n </ActionSheetContext.Provider>\n );\n}\n\nexport interface ActionSheetActionProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n onSelect?: () => void;\n destructive?: boolean;\n}\n\nexport const ActionSheetAction = forwardRef<HTMLButtonElement, ActionSheetActionProps>(\n function ActionSheetAction(\n { className, onSelect, destructive, onClick, children, type = 'button', ...rest },\n ref,\n ) {\n const ctx = useActionSheetContext();\n return (\n <button\n ref={ref}\n type={type}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n onSelect?.();\n ctx.setOpen(false);\n }}\n className={cn(\n 'flex h-12 w-full items-center justify-center bg-card px-4 text-base font-medium transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n destructive ? 'text-destructive' : 'text-foreground',\n className,\n )}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n\nexport type ActionSheetCancelProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionSheetCancel = forwardRef<HTMLButtonElement, ActionSheetCancelProps>(\n function ActionSheetCancel({ className, onClick, children = 'Cancel', type = 'button', ...rest }, ref) {\n const ctx = useActionSheetContext();\n return (\n <button\n ref={ref}\n type={type}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(false);\n }}\n className={cn(\n 'mt-2 flex h-12 w-full items-center justify-center rounded-lg bg-card text-base font-semibold text-foreground shadow-sm transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n\ntype ActionSheetComponent = typeof ActionSheet & {\n Action: typeof ActionSheetAction;\n Cancel: typeof ActionSheetCancel;\n};\n\n(ActionSheet as ActionSheetComponent).Action = ActionSheetAction;\n(ActionSheet as ActionSheetComponent).Cancel = ActionSheetCancel;\n\nexport default ActionSheet as ActionSheetComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, ScrollLockProvider } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayChromeProvider,\n OverlayDescription,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\ntype SnapPoint = number | string;\n\ninterface BottomSheetContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n currentSnap: number;\n setCurrentSnap: (i: number) => void;\n snapPoints: SnapPoint[];\n}\n\nconst BottomSheetContext = createContext<BottomSheetContextValue | null>(null);\n\nexport function useBottomSheet() {\n const ctx = useContext(BottomSheetContext);\n if (!ctx) throw new Error('useBottomSheet must be used inside <BottomSheet>');\n return ctx;\n}\n\nfunction resolveSnapPx(point: SnapPoint, viewport: number): number {\n if (typeof point === 'number') return point;\n const trimmed = point.trim();\n if (trimmed.endsWith('vh')) return (parseFloat(trimmed) / 100) * viewport;\n if (trimmed.endsWith('px')) return parseFloat(trimmed);\n if (trimmed.endsWith('%')) return (parseFloat(trimmed) / 100) * viewport;\n // Fallback: try parseFloat as px.\n const n = parseFloat(trimmed);\n return Number.isFinite(n) ? n : 0;\n}\n\n/** Represents the prop surface of `BottomSheet`. */\nexport interface BottomSheetProps extends HTMLAttributes<HTMLDivElement>, SurfaceVariants {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n snapPoints?: SnapPoint[];\n initialSnap?: number;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n dragToDismiss?: boolean;\n children: ReactNode;\n}\n\n/**\n * Mobile bottom sheet with drag handle + snap points. Pointer-event drag\n * between heights; releasing snaps to the nearest point. Past the lowest\n * snap with `dragToDismiss`, the sheet closes.\n */\nexport const BottomSheet = forwardRef<HTMLDivElement, BottomSheetProps>(function BottomSheet(\n {\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n snapPoints = ['40vh', '90vh'],\n initialSnap = 0,\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n dragToDismiss = true,\n variant,\n tone,\n radius,\n padding,\n elevation,\n className,\n children,\n ...rest\n },\n forwardedRef,\n) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const [currentSnap, setCurrentSnap] = useState(\n Math.min(initialSnap, snapPoints.length - 1),\n );\n const sheetRef = useRef<HTMLDivElement | null>(null);\n const startYRef = useRef<number | null>(null);\n const startHeightRef = useRef(0);\n const [dragHeight, setDragHeight] = useState<number | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n // Reset to initialSnap each time we re-open.\n useEffect(() => {\n if (open) setCurrentSnap(Math.min(initialSnap, snapPoints.length - 1));\n }, [open, initialSnap, snapPoints.length]);\n\n const ctx = useMemo<BottomSheetContextValue>(\n () => ({ open, setOpen, currentSnap, setCurrentSnap, snapPoints }),\n [open, setOpen, currentSnap, snapPoints],\n );\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId, descriptionId, close: () => setOpen(false) }),\n [titleId, descriptionId, setOpen],\n );\n\n const handlePointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n startYRef.current = e.clientY;\n const rect = sheetRef.current?.getBoundingClientRect();\n startHeightRef.current = rect ? rect.height : 0;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n };\n\n const handlePointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (startYRef.current == null) return;\n const dy = e.clientY - startYRef.current;\n setDragHeight(Math.max(0, startHeightRef.current - dy));\n };\n\n const handlePointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (startYRef.current == null) return;\n startYRef.current = null;\n (e.currentTarget as HTMLElement).releasePointerCapture?.(e.pointerId);\n\n const viewport = typeof window !== 'undefined' ? window.innerHeight : 800;\n const heights = snapPoints.map((p) => resolveSnapPx(p, viewport));\n const liveHeight = dragHeight ?? heights[currentSnap] ?? 0;\n setDragHeight(null);\n\n // Below lowest snap by 60px → dismiss.\n if (dragToDismiss && liveHeight < (heights[0] ?? 0) - 60) {\n setOpen(false);\n return;\n }\n // Snap to nearest.\n let bestIdx = 0;\n let bestDist = Number.POSITIVE_INFINITY;\n heights.forEach((h, i) => {\n const d = Math.abs(h - liveHeight);\n if (d < bestDist) {\n bestDist = d;\n bestIdx = i;\n }\n });\n setCurrentSnap(bestIdx);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'ArrowUp' && currentSnap < snapPoints.length - 1) {\n e.preventDefault();\n setCurrentSnap(currentSnap + 1);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (currentSnap > 0) setCurrentSnap(currentSnap - 1);\n else if (dragToDismiss) setOpen(false);\n }\n };\n\n if (!open) return null;\n\n const heightStyle: string | number = (() => {\n if (dragHeight != null) return `${dragHeight}px`;\n const point = snapPoints[currentSnap];\n if (typeof point === 'number') return `${point}px`;\n return point ?? '40vh';\n })();\n\n return (\n <BottomSheetContext.Provider value={ctx}>\n <Portal>\n <ScrollLockProvider>\n <Backdrop\n inline\n onClick={() => {\n if (dismissOnOutsideClick) setOpen(false);\n }}\n />\n <FocusScope asChild trapped loop>\n <DismissableLayer\n disableEscape={!dismissOnEscape}\n onEscape={() => setOpen(false)}\n disableOutsideClick\n >\n <div\n ref={(el) => {\n sheetRef.current = el;\n if (typeof forwardedRef === 'function') forwardedRef(el);\n else if (forwardedRef) (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n style={{\n height: heightStyle,\n transition: dragHeight == null ? 'height 220ms ease-out' : 'none',\n }}\n className={cn(\n 'fixed inset-x-0 bottom-0 z-modal flex flex-col rounded-t-xl border-t outline-none',\n surfaceVariants({\n variant: variant ?? 'elevated',\n tone,\n radius: radius ?? 'none',\n padding: padding ?? 'none',\n elevation: elevation ?? 5,\n }),\n className,\n )}\n {...rest}\n >\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n aria-valuenow={currentSnap}\n aria-valuemin={0}\n aria-valuemax={snapPoints.length - 1}\n tabIndex={0}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n onKeyDown={handleKeyDown}\n className=\"flex h-7 cursor-ns-resize items-center justify-center focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n >\n <span className=\"h-1 w-10 rounded-full bg-border-strong\" aria-hidden=\"true\" />\n </div>\n <div className=\"flex-1 overflow-y-auto px-4 pb-4\">\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </div>\n </DismissableLayer>\n </FocusScope>\n </ScrollLockProvider>\n </Portal>\n </BottomSheetContext.Provider>\n );\n});\n\n// Re-export shared chrome subcomponents under the BottomSheet namespace — they\n// wire `id={titleId}` / `id={descriptionId}` so the sheet's `aria-labelledby` /\n// `aria-describedby` resolve to an accessible name.\nexport const BottomSheetTitle = OverlayTitle;\nexport const BottomSheetDescription = OverlayDescription;\n\ntype BottomSheetComponent = typeof BottomSheet & {\n Title: typeof BottomSheetTitle;\n Description: typeof BottomSheetDescription;\n};\n\n(BottomSheet as BottomSheetComponent).Title = BottomSheetTitle;\n(BottomSheet as BottomSheetComponent).Description = BottomSheetDescription;\n\nexport default BottomSheet as BottomSheetComponent;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/index.ts","../src/hooks/useControlled.ts","../src/hooks/useDisclosure.ts","../src/hooks/useEventListener.ts","../src/hooks/useOutsideClick.ts","../src/hooks/useEscape.ts","../src/hooks/useFocusTrap.ts","../src/hooks/useResizeObserver.ts","../src/hooks/useMediaQuery.ts","../src/hooks/useReducedMotion.ts","../src/hooks/useClipboard.ts","../src/hooks/useDebounceHandler.ts"],"names":["useState","useCallback","useRef","useLayoutEffect","useEffect"],"mappings":"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","file":"chunk-5PMOT5MD.js","sourcesContent":["export { useId } from './useId';\nexport { useControlled } from './useControlled';\nexport { useDisclosure, type DisclosureControls } from './useDisclosure';\nexport { useEventListener } from './useEventListener';\nexport { useOutsideClick } from './useOutsideClick';\nexport { useEscape } from './useEscape';\nexport { useFocusTrap } from './useFocusTrap';\nexport { useScrollLock } from './useScrollLock';\nexport { useResizeObserver } from './useResizeObserver';\nexport { useMediaQuery } from './useMediaQuery';\nexport { useReducedMotion } from './useReducedMotion';\nexport { useClipboard, type UseClipboardOptions, type ClipboardControls } from './useClipboard';\nexport { useDebounceHandler } from './useDebounceHandler';\n","import { useCallback, useLayoutEffect, useRef, useState } from 'react';\n\ninterface UseControlledOptions<T> {\n controlled: T | undefined;\n default: T;\n onChange?: (value: T) => void;\n}\n\n/**\n * Standard controlled/uncontrolled pattern.\n *\n * - If `controlled` is defined, the component is controlled — internal state is\n * ignored, `setValue` only fires `onChange`.\n * - Otherwise the component owns its state, `setValue` updates it, and `onChange`\n * still fires for consumers that want to observe changes.\n */\nexport function useControlled<T>({\n controlled,\n default: defaultValue,\n onChange,\n}: UseControlledOptions<T>): [T, (value: T) => void] {\n const [uncontrolled, setUncontrolled] = useState<T>(defaultValue);\n const onChangeRef = useRef(onChange);\n useLayoutEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const isControlled = controlled !== undefined;\n const value = isControlled ? controlled : uncontrolled;\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [value, setValue];\n}\n","import { useCallback, useState } from 'react';\n\nexport interface DisclosureControls {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n setOpen: (next: boolean) => void;\n}\n\n/**\n * Minimal open/close state with stable callbacks. The standard backbone for\n * Modal, Drawer, Popover, Menu, Accordion, etc. Use `useControlled` underneath\n * when the consumer may also pass a controlled `open` prop.\n */\nexport function useDisclosure(initial = false): DisclosureControls {\n const [isOpen, setIsOpen] = useState(initial);\n const open = useCallback(() => setIsOpen(true), []);\n const close = useCallback(() => setIsOpen(false), []);\n const toggle = useCallback(() => setIsOpen((o) => !o), []);\n return { isOpen, open, close, toggle, setOpen: setIsOpen };\n}\n","import { useEffect, useLayoutEffect, useRef } from 'react';\n\ntype Target = Window | Document | HTMLElement | null;\n\n/**\n * Add an event listener and clean it up automatically. Handler is read from\n * a ref so consumers don't need to memoize it.\n */\nexport function useEventListener<K extends string>(\n event: K,\n handler: (event: Event) => void,\n target: Target = document,\n options?: boolean | AddEventListenerOptions,\n): void {\n const handlerRef = useRef(handler);\n const optionsRef = useRef(options);\n useLayoutEffect(() => {\n handlerRef.current = handler;\n optionsRef.current = options;\n }, [handler, options]);\n\n useEffect(() => {\n if (!target) return;\n // Capture options at attach time — remove must use the same capture flag.\n const listenerOptions = optionsRef.current;\n const listener = (e: Event) => handlerRef.current(e);\n target.addEventListener(event, listener, listenerOptions);\n return () => target.removeEventListener(event, listener, listenerOptions);\n }, [event, target]);\n}\n","import { useEffect, useLayoutEffect, useRef, type RefObject } from 'react';\n\n/**\n * Fire `handler` when the user clicks outside any of the provided refs.\n * Uses `pointerdown` so it fires before focus shifts (avoids losing focus\n * inside an overlay before a click on a trigger registers).\n */\nexport function useOutsideClick(\n refs: RefObject<HTMLElement | null> | RefObject<HTMLElement | null>[],\n handler: (event: PointerEvent) => void,\n enabled = true,\n): void {\n const handlerRef = useRef(handler);\n const refsRef = useRef(refs);\n useLayoutEffect(() => {\n handlerRef.current = handler;\n refsRef.current = refs;\n }, [handler, refs]);\n\n useEffect(() => {\n if (!enabled) return;\n\n const onPointerDown = (e: PointerEvent) => {\n const target = e.target as Node | null;\n if (!target) return;\n const refList = Array.isArray(refsRef.current) ? refsRef.current : [refsRef.current];\n for (const ref of refList) {\n if (ref.current && ref.current.contains(target)) return;\n }\n handlerRef.current(e);\n };\n\n document.addEventListener('pointerdown', onPointerDown, true);\n return () => document.removeEventListener('pointerdown', onPointerDown, true);\n }, [enabled]);\n}\n","import { useEffect, useLayoutEffect, useRef } from 'react';\n\n/**\n * Fire `handler` when the Escape key is pressed at the document level.\n * For nested overlays, the topmost should call `event.stopPropagation()` in\n * its handler — `DismissableLayer` handles this stack-style.\n */\nexport function useEscape(handler: (event: KeyboardEvent) => void, enabled = true): void {\n const handlerRef = useRef(handler);\n useLayoutEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n useEffect(() => {\n if (!enabled) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') handlerRef.current(e);\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [enabled]);\n}\n","import { useEffect, type RefObject } from 'react';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(',');\n\nfunction isVisible(el: HTMLElement): boolean {\n // checkVisibility covers display/visibility/content-visibility; the\n // getClientRects fallback (older engines) still includes position:fixed\n // elements, which `offsetParent !== null` would wrongly exclude.\n return el.checkVisibility?.() ?? el.getClientRects().length > 0;\n}\n\nfunction getFocusable(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => el.getAttribute('aria-hidden') !== 'true' && isVisible(el),\n );\n}\n\n/**\n * Trap Tab / Shift+Tab focus inside the referenced element. On mount, focuses\n * the first focusable child (unless already focused inside). On unmount,\n * returns focus to the element that had it before mounting.\n *\n * For richer behavior (sentinels, nested traps), wrap `FocusScope` instead —\n * this hook is the lower primitive.\n */\nexport function useFocusTrap(ref: RefObject<HTMLElement | null>, enabled = true): void {\n useEffect(() => {\n if (!enabled || !ref.current) return;\n const container = ref.current;\n const previouslyFocused = document.activeElement as HTMLElement | null;\n\n const previousTabIndex = container.getAttribute('tabindex');\n let tabIndexMutated = false;\n\n const focusables = getFocusable(container);\n if (focusables.length > 0 && !container.contains(document.activeElement)) {\n focusables[0]?.focus();\n } else if (focusables.length === 0) {\n container.tabIndex = -1;\n tabIndexMutated = true;\n container.focus();\n }\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const items = getFocusable(container);\n if (items.length === 0) {\n e.preventDefault();\n return;\n }\n const first = items[0];\n const last = items[items.length - 1];\n if (!first || !last) return;\n const active = document.activeElement;\n if (e.shiftKey && active === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n if (tabIndexMutated) {\n if (previousTabIndex === null) container.removeAttribute('tabindex');\n else container.setAttribute('tabindex', previousTabIndex);\n }\n previouslyFocused?.focus?.();\n };\n }, [ref, enabled]);\n}\n","import { useEffect, useLayoutEffect, useRef, type RefObject } from 'react';\n\n/**\n * Run `callback` whenever the referenced element's size changes. Returns\n * synchronously after layout, before paint. Cleans up automatically.\n */\nexport function useResizeObserver<T extends HTMLElement>(\n ref: RefObject<T | null>,\n callback: (entry: ResizeObserverEntry) => void,\n enabled = true,\n): void {\n const callbackRef = useRef(callback);\n useLayoutEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (!enabled || !ref.current || typeof ResizeObserver === 'undefined') return;\n const element = ref.current;\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) callbackRef.current(entry);\n });\n observer.observe(element);\n return () => observer.disconnect();\n }, [ref, enabled]);\n}\n","import { useCallback, useSyncExternalStore } from 'react';\n\n/**\n * Reactively follow a CSS media query. Pass a query string like\n * `'(min-width: 768px)'` or `'(prefers-reduced-motion: reduce)'`.\n * SSR-safe — renders `false` on the server, syncs to the real value on the client.\n */\nexport function useMediaQuery(query: string): boolean {\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n const mql = window.matchMedia(query);\n mql.addEventListener('change', onStoreChange);\n return () => mql.removeEventListener('change', onStoreChange);\n },\n [query],\n );\n\n return useSyncExternalStore(\n subscribe,\n () => window.matchMedia(query).matches,\n () => false,\n );\n}\n","import { useMediaQuery } from './useMediaQuery';\n\n/**\n * Returns `true` when the user has requested reduced motion via OS settings.\n * Components should short-circuit looping/transitional animations to a\n * static final state when this is `true`.\n */\nexport function useReducedMotion(): boolean {\n return useMediaQuery('(prefers-reduced-motion: reduce)');\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseClipboardOptions {\n /** Reset `copied` back to false after this many ms. Default 2000. Set 0 to keep state until explicitly reset. */\n resetAfter?: number;\n}\n\nexport interface ClipboardControls {\n /** True for `resetAfter` ms after a successful copy. */\n copied: boolean;\n /** Last error from `navigator.clipboard.writeText`, if any. */\n error: Error | null;\n /** Write `text` to the system clipboard. Returns the promise. */\n copy: (text: string) => Promise<void>;\n /** Force-clear the `copied` flag. */\n reset: () => void;\n}\n\n/**\n * Wraps `navigator.clipboard.writeText` with a transient `copied` flag for\n * post-action UI (icon swap, \"Copied!\" tooltip). Pass `resetAfter: 0` to\n * keep `copied` true until you call `reset()`.\n */\nexport function useClipboard({ resetAfter = 2000 }: UseClipboardOptions = {}): ClipboardControls {\n const [copied, setCopied] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const reset = useCallback(() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n setCopied(false);\n setError(null);\n }, []);\n\n const copy = useCallback(\n async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setError(null);\n setCopied(true);\n if (resetAfter > 0) {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setCopied(false), resetAfter);\n }\n } catch (err) {\n setCopied(false);\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n },\n [resetAfter],\n );\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return { copied, error, copy, reset };\n}\n","import { useCallback, useRef } from 'react';\nimport type { SyntheticEvent } from 'react';\n\n/**\n * Throttle a React event handler. First call in a `ms` window fires; subsequent\n * within the window are swallowed via `event.preventDefault()`. When `ms` is\n * `undefined`, the handler passes through unchanged. Use to prevent rapid-fire\n * gestures (double-clicks, double-submits, repeated touches) without wiring\n * timer state in the consumer.\n *\n * Functionally a *throttle* (first wins). The `Debounce` naming is kept for\n * vocabulary consistency with the `debounceMs` props on consuming components.\n */\nexport function useDebounceHandler<E extends SyntheticEvent>(\n handler: ((event: E) => void) | undefined,\n ms: number | undefined,\n): (event: E) => void {\n const lastTimeRef = useRef(0);\n return useCallback(\n (event: E) => {\n if (ms !== undefined) {\n const now = Date.now();\n if (now - lastTimeRef.current < ms) {\n event.preventDefault();\n return;\n }\n lastTimeRef.current = now;\n }\n handler?.(event);\n },\n [handler, ms],\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/overlays/dialog/Dialog.tsx"],"names":["DialogTrigger","DialogContent"],"mappings":"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","file":"chunk-5Y43MUOK.js","sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, ScrollLockProvider, Slot } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayBody,\n OverlayChromeProvider,\n OverlayCloseButton,\n OverlayDescription,\n OverlayFooter,\n OverlayHeader,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n titleId: string;\n descriptionId: string;\n role: 'dialog' | 'alertdialog';\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nfunction useDialogContext() {\n const ctx = useContext(DialogContext);\n if (!ctx) throw new Error('Dialog.* must be used inside <Dialog>');\n return ctx;\n}\n\nexport interface DialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n /** Internal — `AlertDialog` overrides this. */\n role?: 'dialog' | 'alertdialog';\n children: ReactNode;\n}\n\nexport function Dialog({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n role = 'dialog',\n children,\n}: DialogProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n const ctx = useMemo<DialogContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n titleId,\n descriptionId,\n role,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, titleId, descriptionId, role, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <DialogContext.Provider value={ctx}>{children}</DialogContext.Provider>;\n}\n\nexport interface DialogTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const DialogTrigger = forwardRef<HTMLButtonElement, DialogTriggerProps>(\n function DialogTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDialogContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef as React.MutableRefObject<HTMLButtonElement | null>) as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(true);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\n/** Represents the prop surface of `Dialog.Content`. */\nexport interface DialogContentProps extends HTMLAttributes<HTMLDivElement>, SurfaceVariants {\n /** Disables the default backdrop when true. */\n hideBackdrop?: boolean;\n /** Applies a backdrop blur. */\n blur?: boolean;\n children: ReactNode;\n}\n\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function DialogContent(\n {\n hideBackdrop,\n blur,\n variant,\n tone,\n radius,\n padding,\n elevation,\n className,\n children,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useDialogContext();\n\n const close = useCallback(() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }, [ctx]);\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),\n [ctx.titleId, ctx.descriptionId, close],\n );\n\n if (!ctx.open) return null;\n return (\n <Portal>\n <ScrollLockProvider>\n {!hideBackdrop && <Backdrop inline blur={blur} />}\n {/* The centering wrapper covers the backdrop, so outside-click dismissal\n lives here — a click on the padding area (target === currentTarget)\n counts as outside. The Backdrop stays purely visual. */}\n <div\n className=\"fixed inset-0 z-modal grid place-items-center overflow-y-auto p-4\"\n onClick={(e) => {\n if (e.target !== e.currentTarget) return;\n if (ctx.dismissOnOutsideClick) ctx.setOpen(false);\n }}\n >\n <FocusScope asChild trapped loop>\n <DismissableLayer\n disableEscape={!ctx.dismissOnEscape}\n onEscape={() => ctx.setOpen(false)}\n disableOutsideClick\n >\n <div\n ref={forwardedRef}\n role={ctx.role}\n aria-modal=\"true\"\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-state=\"open\"\n className={cn(\n 'relative w-full max-w-lg animate-in fade-in-0 zoom-in-95',\n surfaceVariants({\n variant: variant ?? 'elevated',\n tone,\n radius: radius ?? 'lg',\n padding: padding ?? 'xl',\n elevation,\n }),\n className,\n )}\n {...rest}\n >\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </DismissableLayer>\n </FocusScope>\n </div>\n </ScrollLockProvider>\n </Portal>\n );\n },\n);\n\n// Re-export shared chrome subcomponents under the Dialog namespace.\nexport const DialogHeader = OverlayHeader;\nexport const DialogTitle = OverlayTitle;\nexport const DialogDescription = OverlayDescription;\nexport const DialogBody = OverlayBody;\nexport const DialogFooter = OverlayFooter;\nexport const DialogClose = OverlayCloseButton;\n\ntype DialogComponent = typeof Dialog & {\n Trigger: typeof DialogTrigger;\n Content: typeof DialogContent;\n Header: typeof DialogHeader;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Close: typeof DialogClose;\n};\n\n(Dialog as DialogComponent).Trigger = DialogTrigger;\n(Dialog as DialogComponent).Content = DialogContent;\n(Dialog as DialogComponent).Header = DialogHeader;\n(Dialog as DialogComponent).Title = DialogTitle;\n(Dialog as DialogComponent).Description = DialogDescription;\n(Dialog as DialogComponent).Body = DialogBody;\n(Dialog as DialogComponent).Footer = DialogFooter;\n(Dialog as DialogComponent).Close = DialogClose;\n\nexport default Dialog as DialogComponent;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/overlays/backdrop/Backdrop.tsx"],"names":["Backdrop"],"mappings":";;;;;AAmBO,IAAM,WAAW,UAAA,CAA0C,SAASA,SAAAA,CACzE,EAAE,OAAO,IAAA,EAAM,IAAA,EAAM,aAAA,GAAgB,MAAA,EAAQ,QAAQ,SAAA,EAAW,KAAA,EAAO,GAAG,IAAA,IAC1E,GAAA,EACA;AACA,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,IAAA,mBACJ,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,YAAA,EAAY,OAAO,MAAA,GAAS,QAAA;AAAA,MAC5B,KAAA,EAAO,EAAE,aAAA,EAAe,GAAG,KAAA,EAAM;AAAA,MACjC,SAAA,EAAW,EAAA;AAAA,QACT,0DAAA;AAAA,QACA,IAAA,IAAQ,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEF,EAAA,OAAO,MAAA,GAAS,IAAA,mBAAO,GAAA,CAAC,MAAA,EAAA,EAAQ,QAAA,EAAA,IAAA,EAAK,CAAA;AACvC,CAAC","file":"chunk-BI6JZY2O.js","sourcesContent":["import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { Portal } from '../../primitives';\n\nexport interface BackdropProps extends HTMLAttributes<HTMLDivElement> {\n /** Mount state. Default `true`. */\n open?: boolean;\n /** Apply backdrop-blur. */\n blur?: boolean;\n /** When `'none'`, clicks pass through. Default `'auto'`. */\n pointerEvents?: 'auto' | 'none';\n /** Skip the Portal wrap — render in place. */\n inline?: boolean;\n}\n\n/**\n * Fixed-position scrim. Used by Dialog / Drawer / LoadingOverlay; also a\n * public component for custom overlay surfaces.\n */\nexport const Backdrop = forwardRef<HTMLDivElement, BackdropProps>(function Backdrop(\n { open = true, blur, pointerEvents = 'auto', inline, className, style, ...rest },\n ref,\n) {\n if (!open) return null;\n const node = (\n <div\n ref={ref}\n data-state={open ? 'open' : 'closed'}\n style={{ pointerEvents, ...style }}\n className={cn(\n 'fixed inset-0 z-overlay bg-black/50 animate-in fade-in-0',\n blur && 'backdrop-blur-sm',\n className,\n )}\n {...rest}\n />\n );\n return inline ? node : <Portal>{node}</Portal>;\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/nav/breadcrumb/Breadcrumb.tsx","../src/nav/pagination/Pagination.tsx","../src/nav/navItem/NavItem.tsx","../src/nav/menu/Menu.variants.ts","../src/nav/menu/Menu.tsx","../src/nav/dropdownMenu/DropdownMenu.tsx","../src/nav/contextMenu/ContextMenu.tsx","../src/nav/menubar/Menubar.variants.ts","../src/nav/menubar/Menubar.tsx","../src/nav/navigationMenu/NavigationMenu.tsx","../src/nav/commandPalette/CommandPalette.tsx","../src/nav/scrollSpy/ScrollSpy.tsx","../src/nav/tableOfContents/TableOfContents.tsx"],"names":["forwardRef","jsxs","jsx","ChevronRight","MenuItem","createContext","useContext","useRef","useMemo","DropdownMenuTrigger","useCallback","useState","useEffect","ContextMenuTrigger","Menubar","MenubarTrigger","NavigationMenu","NavigationMenuList","NavigationMenuItem","useId","NavigationMenuTrigger","NavigationMenuLink","NavigationMenuContent","CommandPaletteContent","CommandPaletteInput","CommandPaletteList","CommandPaletteItem","CommandPaletteEmpty","Fragment","TableOfContents"],"mappings":"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","file":"chunk-FEXH7YWU.js","sourcesContent":["import { Fragment, forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport interface BreadcrumbItem {\n label: ReactNode;\n /** Make this item a link. Last item is typically rendered as plain text. */\n href?: string;\n}\n\nexport interface BreadcrumbProps extends ComponentPropsWithoutRef<'nav'> {\n items: BreadcrumbItem[];\n /** Custom separator element. Default chevron-right icon. */\n separator?: ReactNode;\n}\n\n/**\n * Linear position trail — list of links + separators. The last item is\n * always rendered as `aria-current=\"page\"` and not a link. Use the L5\n * collapsing version when the chain gets long.\n */\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(\n ({ items, separator, className, ...props }, ref) => {\n const sep = separator ?? <Icon icon={ChevronRight} size={14} />;\n return (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={cn('text-sm', className)} {...props}>\n <ol className=\"flex flex-wrap items-center gap-1.5\">\n {items.map((item, i) => {\n const isLast = i === items.length - 1;\n return (\n <Fragment key={i}>\n <li>\n {item.href && !isLast ? (\n <a\n href={item.href}\n className=\"text-muted-foreground hover:text-foreground hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm\"\n >\n {item.label}\n </a>\n ) : (\n <span aria-current={isLast ? 'page' : undefined} className=\"text-foreground\">\n {item.label}\n </span>\n )}\n </li>\n {!isLast && (\n <li aria-hidden=\"true\" className=\"text-subtle-foreground\">\n {sep}\n </li>\n )}\n </Fragment>\n );\n })}\n </ol>\n </nav>\n );\n },\n);\nBreadcrumb.displayName = 'Breadcrumb';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport interface PaginationProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'onChange'> {\n /** Total page count (1-based). */\n total: number;\n /** Current page (1-based). */\n page: number;\n /** Fires with the new page on click. */\n onPageChange: (page: number) => void;\n /** Number of page buttons surrounding the current. Default `1` (so 1 + current + 1 = 3). */\n siblings?: number;\n /** Hide first/last buttons (just show prev/next + numbers). */\n hideFirstLast?: boolean;\n}\n\nfunction range(start: number, end: number): number[] {\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n}\n\nfunction buildPages(total: number, page: number, siblings: number): (number | 'ellipsis')[] {\n if (total <= 1) return [1];\n const left = Math.max(2, page - siblings);\n const right = Math.min(total - 1, page + siblings);\n const pages: (number | 'ellipsis')[] = [1];\n if (left > 2) pages.push('ellipsis');\n pages.push(...range(left, right));\n if (right < total - 1) pages.push('ellipsis');\n if (total > 1) pages.push(total);\n return pages;\n}\n\n/**\n * Compact page-number row with prev/next + ellipses for skipped ranges.\n * Stateless — consumer drives `page` and reacts to `onPageChange`.\n */\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n (\n { total, page, onPageChange, siblings = 1, hideFirstLast = false, className, ...props },\n ref,\n ) => {\n const pages = buildPages(total, page, siblings);\n const go = (p: number) => onPageChange(Math.min(total, Math.max(1, p)));\n\n const baseBtn =\n 'inline-flex h-8 min-w-8 items-center justify-center rounded-md border border-transparent px-2 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50';\n\n return (\n <nav ref={ref} aria-label=\"Pagination\" className={cn('inline-flex items-center gap-1', className)} {...props}>\n {!hideFirstLast && (\n <button\n type=\"button\"\n aria-label=\"First page\"\n disabled={page <= 1}\n onClick={() => go(1)}\n className={cn(baseBtn, 'hover:bg-muted')}\n >\n <Icon icon={ChevronsLeft} size={16} />\n </button>\n )}\n <button\n type=\"button\"\n aria-label=\"Previous page\"\n disabled={page <= 1}\n onClick={() => go(page - 1)}\n className={cn(baseBtn, 'hover:bg-muted')}\n >\n <Icon icon={ChevronLeft} size={16} />\n </button>\n {pages.map((p, i) =>\n p === 'ellipsis' ? (\n <span key={`e-${i}`} className=\"px-1 text-muted-foreground\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n aria-current={p === page ? 'page' : undefined}\n onClick={() => go(p)}\n className={cn(\n baseBtn,\n p === page ? 'border-primary bg-primary text-primary-foreground' : 'hover:bg-muted',\n )}\n >\n {p}\n </button>\n ),\n )}\n <button\n type=\"button\"\n aria-label=\"Next page\"\n disabled={page >= total}\n onClick={() => go(page + 1)}\n className={cn(baseBtn, 'hover:bg-muted')}\n >\n <Icon icon={ChevronRight} size={16} />\n </button>\n {!hideFirstLast && (\n <button\n type=\"button\"\n aria-label=\"Last page\"\n disabled={page >= total}\n onClick={() => go(total)}\n className={cn(baseBtn, 'hover:bg-muted')}\n >\n <Icon icon={ChevronsRight} size={16} />\n </button>\n )}\n </nav>\n );\n },\n);\nPagination.displayName = 'Pagination';\n","import { forwardRef, type AnchorHTMLAttributes, type ReactNode } from 'react';\nimport { cn, dataAttr } from '../../utils';\nimport { Slot } from '../../primitives';\n\nexport interface NavItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n /** When true, render the child element instead of an `<a>` (router Link). */\n asChild?: boolean;\n /** Optional leading icon. */\n icon?: ReactNode;\n /** Visual label. */\n children: ReactNode;\n /** Trailing slot — typically a count badge or status dot. */\n trailing?: ReactNode;\n /** Mark active (visual + `aria-current=\"page\"`). */\n isActive?: boolean;\n /** Visual size. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst SIZE: Record<NonNullable<NavItemProps['size']>, string> = {\n sm: 'h-8 px-2 text-sm gap-2',\n md: 'h-9 px-2.5 text-sm gap-2.5',\n lg: 'h-11 px-3 text-base gap-3',\n};\n\n/**\n * Sidebar / nav row — icon + label + trailing slot + active state. Use as\n * a clickable Link (default `<a>`) or pass `asChild` to forward to a router\n * Link. Sets `aria-current=\"page\"` when `isActive`.\n */\nexport const NavItem = forwardRef<HTMLAnchorElement, NavItemProps>(\n ({ asChild, icon, children, trailing, isActive, size = 'md', className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n return (\n <Comp\n ref={ref}\n aria-current={isActive ? 'page' : undefined}\n data-active={dataAttr(isActive)}\n className={cn(\n 'group inline-flex w-full items-center rounded-md font-medium text-foreground transition-colors',\n 'hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'data-[active]:bg-primary-soft data-[active]:text-primary-soft-foreground',\n SIZE[size],\n className,\n )}\n {...(props as AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {icon && <span className=\"text-muted-foreground group-data-[active]:text-current\">{icon}</span>}\n <span className=\"flex-1 truncate text-left\">{children}</span>\n {trailing && <span className=\"shrink-0\">{trailing}</span>}\n </Comp>\n );\n },\n);\nNavItem.displayName = 'NavItem';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const menuVariants = tv({\n base: 'flex min-w-[8rem] flex-col gap-0.5 rounded-md border border-border bg-popover p-1 text-sm text-popover-foreground shadow-md outline-none',\n});\n\nexport const menuItemVariants = tv({\n base: 'relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors focus:bg-muted focus:text-foreground hover:bg-muted hover:text-foreground',\n variants: {\n state: {\n default: 'text-popover-foreground',\n destructive: 'text-destructive focus:bg-destructive-soft hover:bg-destructive-soft',\n disabled: 'pointer-events-none opacity-50',\n },\n },\n defaultVariants: { state: 'default' },\n});\n\nexport const menuLabelVariants = tv({\n base: 'px-2 py-1.5 text-xs font-semibold text-muted-foreground',\n});\n\nexport const menuSeparatorVariants = tv({\n base: '-mx-1 my-1 h-px bg-border',\n});\n\nexport type MenuVariants = VariantProps<typeof menuVariants>;\nexport type MenuItemVariants = VariantProps<typeof menuItemVariants>;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { AnchoredPositioner, DismissableLayer, Portal } from '../../primitives';\nimport {\n menuItemVariants,\n menuLabelVariants,\n menuSeparatorVariants,\n menuVariants,\n type MenuItemVariants,\n} from './Menu.variants';\n\ninterface MenuItemEntry {\n id: string;\n ref: HTMLButtonElement | null;\n disabled: boolean;\n}\n\ninterface MenuContextValue {\n registerItem: (entry: MenuItemEntry) => void;\n unregisterItem: (id: string) => void;\n itemsRef: React.MutableRefObject<MenuItemEntry[]>;\n onClose: () => void;\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null);\n\nfunction useMenuContext() {\n const ctx = useContext(MenuContext);\n if (!ctx) throw new Error('Menu.Item / Group / Label / Separator must be used inside <Menu>');\n return ctx;\n}\n\n/** Represents the prop surface of `Menu`. */\nexport interface MenuProps extends SurfaceVariants {\n open: boolean;\n anchor: HTMLElement | null;\n onClose: () => void;\n placement?: React.ComponentProps<typeof AnchoredPositioner>['placement'];\n offset?: number;\n /** Keydown observed on the menu container — lets wrappers (e.g. Menubar) add navigation. */\n onKeyDown?: (e: KeyboardEvent<HTMLDivElement>) => void;\n /** Labels the menu for screen readers. */\n 'aria-label'?: string;\n className?: string;\n children: ReactNode;\n}\n\nexport function Menu({\n open,\n anchor,\n onClose,\n placement = 'bottom-start',\n offset = 6,\n onKeyDown,\n 'aria-label': ariaLabel,\n variant,\n tone,\n radius,\n padding,\n elevation,\n className,\n children,\n}: MenuProps) {\n const itemsRef = useRef<MenuItemEntry[]>([]);\n\n const registerItem = useCallback((entry: MenuItemEntry) => {\n const idx = itemsRef.current.findIndex((i) => i.id === entry.id);\n if (idx >= 0) itemsRef.current[idx] = entry;\n else itemsRef.current.push(entry);\n }, []);\n const unregisterItem = useCallback((id: string) => {\n itemsRef.current = itemsRef.current.filter((i) => i.id !== id);\n }, []);\n\n const ctx = useMemo<MenuContextValue>(\n () => ({ registerItem, unregisterItem, itemsRef, onClose }),\n [registerItem, unregisterItem, onClose],\n );\n\n if (!open) return null;\n return (\n <MenuContext.Provider value={ctx}>\n <Portal>\n <AnchoredPositioner\n anchor={anchor}\n placement={placement}\n offset={offset}\n className=\"z-dropdown\"\n >\n <FocusScope asChild trapped loop>\n <DismissableLayer\n onEscape={onClose}\n onOutsidePointerDown={(e) => {\n if (anchor?.contains(e.target as Node)) return;\n onClose();\n }}\n >\n <div\n role=\"menu\"\n aria-label={ariaLabel}\n className={cn(\n surfaceVariants({\n variant: variant ?? 'surface',\n tone,\n radius: radius ?? 'md',\n padding: padding ?? 'xs',\n elevation,\n }),\n menuVariants(),\n className,\n )}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (e.key === 'Tab') {\n e.preventDefault();\n onClose();\n }\n }}\n >\n {children}\n </div>\n </DismissableLayer>\n </FocusScope>\n </AnchoredPositioner>\n </Portal>\n </MenuContext.Provider>\n );\n}\n\nexport interface MenuItemProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onSelect'>,\n MenuItemVariants {\n /** Fired when the item is activated (Enter / Space / click). Menu closes after. */\n onSelect?: () => void;\n /** Disable activation. */\n disabled?: boolean;\n}\n\nexport const MenuItem = forwardRef<HTMLButtonElement, MenuItemProps>(function MenuItem(\n { onSelect, disabled = false, state, className, onClick, onKeyDown, children, ...rest },\n forwardedRef,\n) {\n const ctx = useMenuContext();\n const id = useId();\n const ref = useRef<HTMLButtonElement | null>(null);\n\n useEffect(() => {\n ctx.registerItem({ id, ref: ref.current, disabled });\n return () => ctx.unregisterItem(id);\n }, [ctx, id, disabled]);\n\n const moveFocus = useCallback(\n (target: 1 | -1 | 'first' | 'last') => {\n const list = ctx.itemsRef.current.filter((i) => !i.disabled);\n if (list.length === 0) return;\n if (target === 'first' || target === 'last') {\n list[target === 'first' ? 0 : list.length - 1]?.ref?.focus();\n return;\n }\n const idx = list.findIndex((i) => i.id === id);\n let nextIdx = idx + target;\n if (idx === -1) nextIdx = target === 1 ? 0 : list.length - 1;\n if (nextIdx < 0) nextIdx = list.length - 1;\n if (nextIdx >= list.length) nextIdx = 0;\n list[nextIdx]?.ref?.focus();\n },\n [ctx, id],\n );\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented || disabled) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n e.preventDefault();\n moveFocus('first');\n break;\n case 'End':\n e.preventDefault();\n moveFocus('last');\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n onSelect?.();\n ctx.onClose();\n break;\n }\n };\n\n const itemState = state ?? (disabled ? 'disabled' : 'default');\n return (\n <button\n ref={composeRefs(forwardedRef, ref)}\n type=\"button\"\n role=\"menuitem\"\n disabled={disabled}\n aria-disabled={disabled || undefined}\n data-disabled={disabled ? '' : undefined}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || disabled) return;\n onSelect?.();\n ctx.onClose();\n }}\n onKeyDown={handleKeyDown}\n className={cn(menuItemVariants({ state: itemState }), className)}\n {...rest}\n >\n {children}\n </button>\n );\n});\n\nexport interface MenuGroupProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n children: ReactNode;\n}\n\nexport function MenuGroup({ label, children, className, ...rest }: MenuGroupProps) {\n const labelId = useId();\n return (\n <div\n role=\"group\"\n aria-labelledby={label ? labelId : undefined}\n className={className}\n {...rest}\n >\n {label && (\n <div id={labelId} className={menuLabelVariants()}>\n {label}\n </div>\n )}\n {children}\n </div>\n );\n}\n\nexport function MenuLabel({\n children,\n className,\n ...rest\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={cn(menuLabelVariants(), className)} {...rest}>\n {children}\n </div>\n );\n}\n\nexport function MenuSeparator(props: HTMLAttributes<HTMLDivElement>) {\n return <div role=\"separator\" className={menuSeparatorVariants()} {...props} />;\n}\n\ntype MenuComponent = typeof Menu & {\n Item: typeof MenuItem;\n Group: typeof MenuGroup;\n Label: typeof MenuLabel;\n Separator: typeof MenuSeparator;\n};\n\n(Menu as MenuComponent).Item = MenuItem;\n(Menu as MenuComponent).Group = MenuGroup;\n(Menu as MenuComponent).Label = MenuLabel;\n(Menu as MenuComponent).Separator = MenuSeparator;\n\nexport default Menu as MenuComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { composeRefs } from '../../utils';\nimport { Slot } from '../../primitives';\nimport { useControlled } from '../../hooks';\nimport {\n Menu,\n MenuItem,\n MenuGroup,\n MenuLabel,\n MenuSeparator,\n type MenuProps,\n} from '../menu';\n\ninterface DropdownMenuContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n /** Trigger node kept in state so anchored content re-renders once the ref attaches. */\n triggerNode: HTMLButtonElement | null;\n setTriggerNode: (node: HTMLButtonElement | null) => void;\n placement: MenuProps['placement'];\n offset: number;\n}\n\nconst DropdownMenuContext = createContext<DropdownMenuContextValue | null>(null);\n\nfunction useDropdownMenuContext() {\n const ctx = useContext(DropdownMenuContext);\n if (!ctx) throw new Error('DropdownMenu.* must be used inside <DropdownMenu>');\n return ctx;\n}\n\nexport interface DropdownMenuProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: MenuProps['placement'];\n offset?: number;\n children: ReactNode;\n}\n\nexport function DropdownMenu({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom-start',\n offset = 6,\n children,\n}: DropdownMenuProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const [triggerNode, setTriggerNode] = useState<HTMLButtonElement | null>(null);\n\n const ctx = useMemo<DropdownMenuContextValue>(\n () => ({ open, setOpen, triggerRef, triggerNode, setTriggerNode, placement, offset }),\n [open, setOpen, triggerNode, placement, offset],\n );\n\n return <DropdownMenuContext.Provider value={ctx}>{children}</DropdownMenuContext.Provider>;\n}\n\nexport interface DropdownMenuTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Render the trigger as the single child (e.g., `<Button>`). */\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const DropdownMenuTrigger = forwardRef<HTMLButtonElement, DropdownMenuTriggerProps>(\n function DropdownMenuTrigger(\n { asChild, onClick, onKeyDown, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useDropdownMenuContext();\n const Component = asChild ? Slot : 'button';\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(!ctx.open);\n },\n [ctx, onClick],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n ctx.setOpen(true);\n }\n },\n [ctx, onKeyDown],\n );\n\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef, ctx.setTriggerNode) as never}\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport interface DropdownMenuContentProps {\n className?: string;\n 'aria-label'?: string;\n children: ReactNode;\n}\n\nexport function DropdownMenuContent({\n className,\n 'aria-label': ariaLabel,\n children,\n}: DropdownMenuContentProps) {\n const ctx = useDropdownMenuContext();\n return (\n <Menu\n open={ctx.open}\n anchor={ctx.triggerNode}\n onClose={() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }}\n placement={ctx.placement}\n offset={ctx.offset}\n aria-label={ariaLabel}\n className={className}\n >\n {children}\n </Menu>\n );\n}\n\ntype DropdownMenuComponent = typeof DropdownMenu & {\n Trigger: typeof DropdownMenuTrigger;\n Content: typeof DropdownMenuContent;\n Item: typeof MenuItem;\n Group: typeof MenuGroup;\n Label: typeof MenuLabel;\n Separator: typeof MenuSeparator;\n};\n\n(DropdownMenu as DropdownMenuComponent).Trigger = DropdownMenuTrigger;\n(DropdownMenu as DropdownMenuComponent).Content = DropdownMenuContent;\n(DropdownMenu as DropdownMenuComponent).Item = MenuItem;\n(DropdownMenu as DropdownMenuComponent).Group = MenuGroup;\n(DropdownMenu as DropdownMenuComponent).Label = MenuLabel;\n(DropdownMenu as DropdownMenuComponent).Separator = MenuSeparator;\n\nexport default DropdownMenu as DropdownMenuComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { composeRefs } from '../../utils';\nimport { Slot } from '../../primitives';\nimport {\n Menu,\n MenuItem,\n MenuGroup,\n MenuLabel,\n MenuSeparator,\n type MenuProps,\n} from '../menu';\n\ninterface ContextMenuContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n anchor: HTMLElement | null;\n setAnchor: (el: HTMLElement | null) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n}\n\nconst ContextMenuContext = createContext<ContextMenuContextValue | null>(null);\n\nfunction useContextMenuContext() {\n const ctx = useContext(ContextMenuContext);\n if (!ctx) throw new Error('ContextMenu.* must be used inside <ContextMenu>');\n return ctx;\n}\n\nexport interface ContextMenuProps {\n children: ReactNode;\n}\n\n/**\n * Build a virtual element at coordinates — Floating UI accepts a\n * getBoundingClientRect-only object as a \"reference\".\n */\nfunction makeVirtualAnchor(x: number, y: number): HTMLElement {\n const el = document.createElement('div');\n el.style.position = 'fixed';\n el.style.left = `${x}px`;\n el.style.top = `${y}px`;\n el.style.width = '0px';\n el.style.height = '0px';\n el.style.pointerEvents = 'none';\n document.body.appendChild(el);\n return el;\n}\n\nexport function ContextMenu({ children }: ContextMenuProps) {\n const [open, setOpen] = useState(false);\n const [anchor, setAnchorState] = useState<HTMLElement | null>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const setAnchor = useCallback((el: HTMLElement | null) => {\n setAnchorState((prev) => {\n if (prev && prev.parentNode === document.body) prev.remove();\n return el;\n });\n }, []);\n\n const handleSetOpen = useCallback(\n (next: boolean) => {\n setOpen(next);\n if (!next) setAnchor(null);\n },\n [setAnchor],\n );\n\n // Remove the body-appended virtual anchor when it is replaced or on unmount.\n useEffect(() => {\n if (!anchor) return;\n return () => {\n if (anchor.parentNode === document.body) anchor.remove();\n };\n }, [anchor]);\n\n const ctx = useMemo<ContextMenuContextValue>(\n () => ({ open, setOpen: handleSetOpen, anchor, setAnchor, triggerRef }),\n [open, handleSetOpen, anchor, setAnchor],\n );\n\n return <ContextMenuContext.Provider value={ctx}>{children}</ContextMenuContext.Provider>;\n}\n\nexport interface ContextMenuTriggerProps extends HTMLAttributes<HTMLDivElement> {\n asChild?: boolean;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const ContextMenuTrigger = forwardRef<HTMLDivElement, ContextMenuTriggerProps>(\n function ContextMenuTrigger(\n { asChild, disabled, onContextMenu, onPointerDown, onPointerCancel, onPointerUp, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useContextMenuContext();\n const longPressTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const Component = asChild ? Slot : 'div';\n\n const handleContextMenu = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n onContextMenu?.(e);\n if (e.defaultPrevented || disabled) return;\n e.preventDefault();\n ctx.setAnchor(makeVirtualAnchor(e.clientX, e.clientY));\n ctx.setOpen(true);\n },\n [ctx, disabled, onContextMenu],\n );\n\n const clearLongPress = useCallback(() => {\n if (longPressTimer.current) clearTimeout(longPressTimer.current);\n longPressTimer.current = null;\n }, []);\n\n // Clear a pending long-press timer if the trigger unmounts mid-press.\n useEffect(() => () => clearLongPress(), [clearLongPress]);\n\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef) as never}\n onContextMenu={handleContextMenu}\n onPointerDown={(e: React.PointerEvent<HTMLDivElement>) => {\n onPointerDown?.(e);\n if (e.defaultPrevented || disabled || e.pointerType !== 'touch') return;\n const x = e.clientX;\n const y = e.clientY;\n longPressTimer.current = setTimeout(() => {\n ctx.setAnchor(makeVirtualAnchor(x, y));\n ctx.setOpen(true);\n }, 600);\n }}\n onPointerUp={(e: React.PointerEvent<HTMLDivElement>) => {\n onPointerUp?.(e);\n clearLongPress();\n }}\n onPointerCancel={(e: React.PointerEvent<HTMLDivElement>) => {\n onPointerCancel?.(e);\n clearLongPress();\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport interface ContextMenuContentProps {\n className?: string;\n placement?: MenuProps['placement'];\n offset?: number;\n 'aria-label'?: string;\n children: ReactNode;\n}\n\nexport function ContextMenuContent({\n className,\n placement = 'bottom-start',\n offset = 2,\n 'aria-label': ariaLabel,\n children,\n}: ContextMenuContentProps) {\n const ctx = useContextMenuContext();\n return (\n <Menu\n open={ctx.open}\n anchor={ctx.anchor}\n onClose={() => ctx.setOpen(false)}\n placement={placement}\n offset={offset}\n aria-label={ariaLabel}\n className={className}\n >\n {children}\n </Menu>\n );\n}\n\ntype ContextMenuComponent = typeof ContextMenu & {\n Trigger: typeof ContextMenuTrigger;\n Content: typeof ContextMenuContent;\n Item: typeof MenuItem;\n Group: typeof MenuGroup;\n Label: typeof MenuLabel;\n Separator: typeof MenuSeparator;\n};\n\n(ContextMenu as ContextMenuComponent).Trigger = ContextMenuTrigger;\n(ContextMenu as ContextMenuComponent).Content = ContextMenuContent;\n(ContextMenu as ContextMenuComponent).Item = MenuItem;\n(ContextMenu as ContextMenuComponent).Group = MenuGroup;\n(ContextMenu as ContextMenuComponent).Label = MenuLabel;\n(ContextMenu as ContextMenuComponent).Separator = MenuSeparator;\n\nexport default ContextMenu as ContextMenuComponent;\n","import { tv, type VariantProps } from '../../utils';\n\nexport const menubarVariants = tv({\n base: 'flex items-center gap-1 rounded-md border border-border bg-background p-1',\n});\n\nexport const menubarTriggerVariants = tv({\n base: 'inline-flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium text-foreground outline-none transition-colors hover:bg-muted focus-visible:bg-muted data-[state=open]:bg-muted',\n});\n\nexport type MenubarVariants = VariantProps<typeof menubarVariants>;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n Menu,\n MenuItem,\n MenuGroup,\n MenuLabel,\n MenuSeparator,\n type MenuProps,\n} from '../menu';\nimport { menubarTriggerVariants, menubarVariants } from './Menubar.variants';\n\ninterface MenubarContextValue {\n activeId: string | null;\n setActiveId: (id: string | null) => void;\n registerTrigger: (id: string, ref: HTMLButtonElement | null) => void;\n unregisterTrigger: (id: string) => void;\n triggersRef: React.MutableRefObject<{ id: string; ref: HTMLButtonElement | null }[]>;\n /** Focuses the trigger adjacent to `fromId`; switches the open menu when one is open. */\n moveAcross: (fromId: string, direction: 1 | -1) => void;\n}\n\nconst MenubarContext = createContext<MenubarContextValue | null>(null);\n\nfunction useMenubarContext() {\n const ctx = useContext(MenubarContext);\n if (!ctx) throw new Error('Menubar.* must be used inside <Menubar>');\n return ctx;\n}\n\ninterface MenubarMenuContextValue {\n id: string;\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n /** Trigger node kept in state so anchored content re-renders once the ref attaches. */\n triggerNode: HTMLButtonElement | null;\n setTriggerNode: (node: HTMLButtonElement | null) => void;\n}\n\nconst MenubarMenuContext = createContext<MenubarMenuContextValue | null>(null);\n\nfunction useMenubarMenuContext() {\n const ctx = useContext(MenubarMenuContext);\n if (!ctx) throw new Error('Menubar.Trigger / Content must be used inside <Menubar.Menu>');\n return ctx;\n}\n\nexport interface MenubarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n /** Id of the currently-open menu, or `null` if none. */\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string | null) => void;\n children: ReactNode;\n}\n\nexport const Menubar = forwardRef<HTMLDivElement, MenubarProps>(function Menubar(\n { value, defaultValue = null, onValueChange, className, children, ...rest },\n ref,\n) {\n const [activeId, setActiveId] = useControlled<string | null>({\n controlled: value,\n default: defaultValue,\n onChange: onValueChange,\n });\n\n const triggersRef = useRef<{ id: string; ref: HTMLButtonElement | null }[]>([]);\n\n const registerTrigger = useCallback((id: string, triggerRef: HTMLButtonElement | null) => {\n const idx = triggersRef.current.findIndex((t) => t.id === id);\n if (idx >= 0) triggersRef.current[idx] = { id, ref: triggerRef };\n else triggersRef.current.push({ id, ref: triggerRef });\n }, []);\n const unregisterTrigger = useCallback((id: string) => {\n triggersRef.current = triggersRef.current.filter((t) => t.id !== id);\n }, []);\n\n const moveAcross = useCallback(\n (fromId: string, direction: 1 | -1) => {\n const list = triggersRef.current;\n const idx = list.findIndex((t) => t.id === fromId);\n if (idx === -1) return;\n let nextIdx = idx + direction;\n if (nextIdx < 0) nextIdx = list.length - 1;\n if (nextIdx >= list.length) nextIdx = 0;\n const next = list[nextIdx];\n if (!next) return;\n next.ref?.focus();\n // If a menu is already open, switch the open menu to follow focus.\n if (activeId !== null) setActiveId(next.id);\n },\n [activeId, setActiveId],\n );\n\n const ctx = useMemo<MenubarContextValue>(\n () => ({ activeId, setActiveId, registerTrigger, unregisterTrigger, triggersRef, moveAcross }),\n [activeId, setActiveId, registerTrigger, unregisterTrigger, moveAcross],\n );\n\n return (\n <MenubarContext.Provider value={ctx}>\n <div\n ref={ref}\n role=\"menubar\"\n className={cn(menubarVariants(), className)}\n {...rest}\n >\n {children}\n </div>\n </MenubarContext.Provider>\n );\n});\n\nexport interface MenubarMenuProps {\n /** Stable id for this menu — used for active-menu tracking. */\n value: string;\n children: ReactNode;\n}\n\nexport function MenubarMenu({ value, children }: MenubarMenuProps) {\n const ctx = useMenubarContext();\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const [triggerNode, setTriggerNode] = useState<HTMLButtonElement | null>(null);\n\n const open = ctx.activeId === value;\n const setOpen = useCallback(\n (next: boolean) => {\n ctx.setActiveId(next ? value : null);\n },\n [ctx, value],\n );\n\n const menuCtx = useMemo<MenubarMenuContextValue>(\n () => ({ id: value, open, setOpen, triggerRef, triggerNode, setTriggerNode }),\n [value, open, setOpen, triggerNode],\n );\n\n return <MenubarMenuContext.Provider value={menuCtx}>{children}</MenubarMenuContext.Provider>;\n}\n\nexport interface MenubarTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const MenubarTrigger = forwardRef<HTMLButtonElement, MenubarTriggerProps>(\n function MenubarTrigger(\n { className, onClick, onKeyDown, onPointerEnter, children, ...rest },\n forwardedRef,\n ) {\n const bar = useMenubarContext();\n const menu = useMenubarMenuContext();\n\n useEffect(() => {\n bar.registerTrigger(menu.id, menu.triggerRef.current);\n return () => bar.unregisterTrigger(menu.id);\n }, [bar, menu.id, menu.triggerRef]);\n\n return (\n <button\n ref={composeRefs(forwardedRef, menu.triggerRef, menu.setTriggerNode)}\n type=\"button\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={menu.open}\n data-state={menu.open ? 'open' : 'closed'}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n menu.setOpen(!menu.open);\n }}\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n // If any menu is open, switching the trigger pointer-over switches the active menu.\n if (bar.activeId !== null && bar.activeId !== menu.id) {\n bar.setActiveId(menu.id);\n }\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n switch (e.key) {\n case 'ArrowRight':\n e.preventDefault();\n bar.moveAcross(menu.id, 1);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n bar.moveAcross(menu.id, -1);\n break;\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n e.preventDefault();\n menu.setOpen(true);\n break;\n case 'Home':\n e.preventDefault();\n bar.triggersRef.current[0]?.ref?.focus();\n break;\n case 'End': {\n e.preventDefault();\n const list = bar.triggersRef.current;\n list[list.length - 1]?.ref?.focus();\n break;\n }\n }\n }}\n className={cn(menubarTriggerVariants(), className)}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n\nexport interface MenubarContentProps {\n className?: string;\n placement?: MenuProps['placement'];\n offset?: number;\n 'aria-label'?: string;\n children: ReactNode;\n}\n\nexport function MenubarContent({\n className,\n placement = 'bottom-start',\n offset = 4,\n 'aria-label': ariaLabel,\n children,\n}: MenubarContentProps) {\n const bar = useMenubarContext();\n const menu = useMenubarMenuContext();\n return (\n <Menu\n open={menu.open}\n anchor={menu.triggerNode}\n onClose={() => {\n menu.setOpen(false);\n requestAnimationFrame(() => menu.triggerRef.current?.focus());\n }}\n onKeyDown={(e) => {\n // Arrow across menus while a popup is open — close current, open adjacent.\n switch (e.key) {\n case 'ArrowRight':\n e.preventDefault();\n bar.moveAcross(menu.id, 1);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n bar.moveAcross(menu.id, -1);\n break;\n }\n }}\n placement={placement}\n offset={offset}\n aria-label={ariaLabel}\n className={className}\n >\n {children}\n </Menu>\n );\n}\n\ntype MenubarComponent = typeof Menubar & {\n Menu: typeof MenubarMenu;\n Trigger: typeof MenubarTrigger;\n Content: typeof MenubarContent;\n Item: typeof MenuItem;\n Group: typeof MenuGroup;\n Label: typeof MenuLabel;\n Separator: typeof MenuSeparator;\n};\n\n(Menubar as MenubarComponent).Menu = MenubarMenu;\n(Menubar as MenubarComponent).Trigger = MenubarTrigger;\n(Menubar as MenubarComponent).Content = MenubarContent;\n(Menubar as MenubarComponent).Item = MenuItem;\n(Menubar as MenubarComponent).Group = MenuGroup;\n(Menubar as MenubarComponent).Label = MenuLabel;\n(Menubar as MenubarComponent).Separator = MenuSeparator;\n\nexport default Menubar as MenubarComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn, surfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n AnchoredPositioner,\n DismissableLayer,\n Portal,\n RovingFocusGroup,\n useRovingFocusItem,\n} from '../../primitives';\n\ninterface NavigationMenuContextValue {\n activeId: string | null;\n setActiveId: (id: string | null) => void;\n}\n\nconst NavigationMenuContext = createContext<NavigationMenuContextValue | null>(null);\n\nfunction useNavContext() {\n const ctx = useContext(NavigationMenuContext);\n if (!ctx) throw new Error('NavigationMenu.* must be used inside <NavigationMenu>');\n return ctx;\n}\n\ninterface NavigationMenuItemContextValue {\n value: string;\n open: boolean;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n contentId: string;\n triggerId: string;\n}\n\nconst NavigationMenuItemContext = createContext<NavigationMenuItemContextValue | null>(null);\n\nfunction useNavItemContext() {\n const ctx = useContext(NavigationMenuItemContext);\n if (!ctx)\n throw new Error('NavigationMenu.Trigger / Content must be used inside <NavigationMenu.Item>');\n return ctx;\n}\n\nexport interface NavigationMenuProps extends Omit<HTMLAttributes<HTMLElement>, 'defaultValue'> {\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string | null) => void;\n}\n\nexport const NavigationMenu = forwardRef<HTMLElement, NavigationMenuProps>(\n function NavigationMenu(\n {\n value,\n defaultValue = null,\n onValueChange,\n 'aria-label': ariaLabel = 'Main navigation',\n className,\n children,\n ...rest\n },\n ref,\n ) {\n const [activeId, setActiveId] = useControlled<string | null>({\n controlled: value,\n default: defaultValue,\n onChange: onValueChange,\n });\n\n const ctx = useMemo<NavigationMenuContextValue>(\n () => ({ activeId, setActiveId }),\n [activeId, setActiveId],\n );\n\n return (\n <NavigationMenuContext.Provider value={ctx}>\n <nav\n ref={ref}\n aria-label={ariaLabel}\n className={cn('relative', className)}\n {...rest}\n >\n {children}\n </nav>\n </NavigationMenuContext.Provider>\n );\n },\n);\n\nexport interface NavigationMenuListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const NavigationMenuList = forwardRef<HTMLDivElement, NavigationMenuListProps>(\n function NavigationMenuList({ className, children, ...rest }, ref) {\n return (\n <RovingFocusGroup\n ref={ref}\n orientation=\"horizontal\"\n loop\n role=\"list\"\n className={cn('flex items-center gap-1', className)}\n {...rest}\n >\n {children}\n </RovingFocusGroup>\n );\n },\n);\n\nexport interface NavigationMenuItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Stable id for active-state tracking. Required when item has a Trigger + Content. */\n value: string;\n children: ReactNode;\n}\n\nexport const NavigationMenuItem = forwardRef<HTMLLIElement, NavigationMenuItemProps>(\n function NavigationMenuItem({ value, className, children, ...rest }, ref) {\n const nav = useNavContext();\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const contentId = useId();\n const triggerId = useId();\n const open = nav.activeId === value;\n\n const itemCtx = useMemo<NavigationMenuItemContextValue>(\n () => ({ value, open, triggerRef, contentId, triggerId }),\n [value, open, contentId, triggerId],\n );\n\n return (\n <NavigationMenuItemContext.Provider value={itemCtx}>\n <li ref={ref} className={cn('relative', className)} {...rest}>\n {children}\n </li>\n </NavigationMenuItemContext.Provider>\n );\n },\n);\n\nexport interface NavigationMenuTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const NavigationMenuTrigger = forwardRef<HTMLButtonElement, NavigationMenuTriggerProps>(\n function NavigationMenuTrigger(\n { className, onClick, onPointerEnter, onKeyDown, onFocus, children, ...rest },\n ref,\n ) {\n const nav = useNavContext();\n const item = useNavItemContext();\n const roving = useRovingFocusItem();\n return (\n <button\n ref={(node) => {\n item.triggerRef.current = node;\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n id={item.triggerId}\n type=\"button\"\n aria-haspopup=\"true\"\n aria-expanded={item.open}\n aria-controls={item.contentId}\n data-state={item.open ? 'open' : 'closed'}\n tabIndex={roving.tabIndex}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n nav.setActiveId(item.open ? null : item.value);\n }}\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n if (nav.activeId !== null && nav.activeId !== item.value) {\n nav.setActiveId(item.value);\n }\n }}\n onFocus={(e) => {\n onFocus?.(e);\n roving.onFocus();\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n roving.onKeyDown(e);\n }}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:bg-muted',\n className,\n )}\n {...rest}\n >\n {children}\n <ChevronDown\n className={cn('h-4 w-4 transition-transform', item.open && 'rotate-180')}\n />\n </button>\n );\n },\n);\n\nexport interface NavigationMenuLinkProps\n extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const NavigationMenuLink = forwardRef<HTMLAnchorElement, NavigationMenuLinkProps>(\n function NavigationMenuLink({ className, onKeyDown, onFocus, children, ...rest }, ref) {\n const roving = useRovingFocusItem();\n return (\n <a\n ref={(node) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n tabIndex={roving.tabIndex}\n onFocus={(e) => {\n onFocus?.(e);\n roving.onFocus();\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n roving.onKeyDown(e);\n }}\n className={cn(\n 'inline-flex items-center rounded-md px-3 py-1.5 text-sm font-medium text-foreground transition-colors hover:bg-muted hover:underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </a>\n );\n },\n);\n\nexport interface NavigationMenuContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const NavigationMenuContent = forwardRef<HTMLDivElement, NavigationMenuContentProps>(\n function NavigationMenuContent({ className, children, ...rest }, ref) {\n const nav = useNavContext();\n const item = useNavItemContext();\n\n const handleClose = useCallback(() => {\n nav.setActiveId(null);\n requestAnimationFrame(() => item.triggerRef.current?.focus());\n }, [nav, item.triggerRef]);\n\n // Close on outside click that lands outside the trigger AND outside the content.\n useEffect(() => {\n // Use the existing DismissableLayer below — this effect intentionally empty.\n }, []);\n\n if (!item.open) return null;\n return (\n <Portal>\n <AnchoredPositioner\n anchor={item.triggerRef.current}\n placement=\"bottom-start\"\n offset={6}\n className=\"z-dropdown\"\n >\n <DismissableLayer\n onEscape={handleClose}\n onOutsidePointerDown={(e) => {\n if (item.triggerRef.current?.contains(e.target as Node)) return;\n nav.setActiveId(null);\n }}\n >\n <div\n ref={ref}\n id={item.contentId}\n aria-labelledby={item.triggerId}\n data-state=\"open\"\n className={cn(\n 'min-w-[12rem] outline-none animate-in fade-in-0 zoom-in-95',\n surfaceVariants({ variant: 'surface', radius: 'md', padding: 'md' }),\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </DismissableLayer>\n </AnchoredPositioner>\n </Portal>\n );\n },\n);\n\ntype NavigationMenuComponent = typeof NavigationMenu & {\n List: typeof NavigationMenuList;\n Item: typeof NavigationMenuItem;\n Trigger: typeof NavigationMenuTrigger;\n Content: typeof NavigationMenuContent;\n Link: typeof NavigationMenuLink;\n};\n\n(NavigationMenu as NavigationMenuComponent).List = NavigationMenuList;\n(NavigationMenu as NavigationMenuComponent).Item = NavigationMenuItem;\n(NavigationMenu as NavigationMenuComponent).Trigger = NavigationMenuTrigger;\n(NavigationMenu as NavigationMenuComponent).Content = NavigationMenuContent;\n(NavigationMenu as NavigationMenuComponent).Link = NavigationMenuLink;\n\nexport default NavigationMenu as NavigationMenuComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { Search } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\nimport { Dialog, DialogContent } from '../../overlays/dialog';\nimport {\n listboxEmptyVariants,\n listboxGroupLabelVariants,\n listboxItemVariants,\n listboxSeparatorVariants,\n} from '../../forms/listbox/Listbox.variants';\n\ninterface CommandItemEntry {\n id: string;\n value: string;\n searchText: string;\n disabled: boolean;\n onSelect: () => void;\n closeOnSelect: boolean;\n}\n\ninterface CommandPaletteContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n inputValue: string;\n setInputValue: (input: string) => void;\n activeId: string | null;\n setActiveId: (id: string | null) => void;\n itemsRef: React.MutableRefObject<CommandItemEntry[]>;\n registerItem: (entry: CommandItemEntry) => void;\n unregisterItem: (id: string) => void;\n /** Bumped on every register/unregister — lets consumers observe the mutable registry. */\n registryVersion: number;\n filter: (searchText: string, search: string) => boolean;\n inputId: string;\n listboxId: string;\n inputRef: React.MutableRefObject<HTMLInputElement | null>;\n}\n\nconst CommandPaletteContext = createContext<CommandPaletteContextValue | null>(null);\n\nfunction useCommandPaletteContext() {\n const ctx = useContext(CommandPaletteContext);\n if (!ctx) throw new Error('CommandPalette.* must be used inside <CommandPalette>');\n return ctx;\n}\n\nconst defaultFilter = (searchText: string, search: string) =>\n searchText.toLowerCase().includes(search.toLowerCase());\n\nexport interface CommandPaletteProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (input: string) => void;\n triggerKey?: string;\n filter?: (searchText: string, search: string) => boolean;\n children: ReactNode;\n}\n\nexport function CommandPalette({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n inputValue: inputProp,\n defaultInputValue,\n onInputChange,\n triggerKey,\n filter = defaultFilter,\n children,\n}: CommandPaletteProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const [inputValue, setInputValue] = useControlled({\n controlled: inputProp,\n default: defaultInputValue ?? '',\n onChange: onInputChange,\n });\n\n const itemsRef = useRef<CommandItemEntry[]>([]);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [activeId, setActiveId] = useState<string | null>(null);\n // Items register via effects after render — bump a version so renders/effects\n // that read the mutable registry recompute once items exist (fresh-open flow).\n const [registryVersion, setRegistryVersion] = useState(0);\n const inputId = useId();\n const listboxId = useId();\n\n const registerItem = useCallback((entry: CommandItemEntry) => {\n const idx = itemsRef.current.findIndex((i) => i.id === entry.id);\n if (idx >= 0) itemsRef.current[idx] = entry;\n else itemsRef.current.push(entry);\n setRegistryVersion((v) => v + 1);\n }, []);\n\n const unregisterItem = useCallback((id: string) => {\n itemsRef.current = itemsRef.current.filter((i) => i.id !== id);\n setRegistryVersion((v) => v + 1);\n }, []);\n\n // Global keybinding (cmd-/ctrl-K).\n useEffect(() => {\n if (!triggerKey) return;\n const onKey = (e: KeyboardEvent | globalThis.KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === triggerKey.toLowerCase()) {\n e.preventDefault();\n setOpen(true);\n }\n };\n document.addEventListener('keydown', onKey as (e: globalThis.KeyboardEvent) => void);\n return () =>\n document.removeEventListener(\n 'keydown',\n onKey as (e: globalThis.KeyboardEvent) => void,\n );\n }, [triggerKey, setOpen]);\n\n // Reset search + active id on open/close transitions.\n useEffect(() => {\n if (!open) {\n setActiveId(null);\n }\n }, [open]);\n\n const ctx = useMemo<CommandPaletteContextValue>(\n () => ({\n open,\n setOpen,\n inputValue,\n setInputValue,\n activeId,\n setActiveId,\n itemsRef,\n registerItem,\n unregisterItem,\n registryVersion,\n filter,\n inputId,\n listboxId,\n inputRef,\n }),\n [\n open,\n setOpen,\n inputValue,\n setInputValue,\n activeId,\n registerItem,\n unregisterItem,\n registryVersion,\n filter,\n inputId,\n listboxId,\n ],\n );\n\n return (\n <CommandPaletteContext.Provider value={ctx}>\n <Dialog open={open} onOpenChange={setOpen}>\n {children}\n </Dialog>\n </CommandPaletteContext.Provider>\n );\n}\n\nexport type CommandPaletteContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CommandPaletteContent = forwardRef<HTMLDivElement, CommandPaletteContentProps>(\n function CommandPaletteContent({ className, children, ...rest }, forwardedRef) {\n return (\n <DialogContent\n ref={forwardedRef}\n className={cn('w-full max-w-xl gap-0 overflow-hidden p-0', className)}\n {...rest}\n >\n {children}\n </DialogContent>\n );\n },\n);\n\nexport type CommandPaletteInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'onChange'\n>;\n\nexport const CommandPaletteInput = forwardRef<HTMLInputElement, CommandPaletteInputProps>(\n function CommandPaletteInput(\n { className, placeholder = 'Type a command…', onKeyDown, ...rest },\n forwardedRef,\n ) {\n const ctx = useCommandPaletteContext();\n\n // Keep DOM focus on the input whenever palette is open.\n useEffect(() => {\n if (ctx.open && ctx.inputRef.current) ctx.inputRef.current.focus();\n }, [ctx.open, ctx.inputRef]);\n\n const visibleItems = useCallback(() => {\n return ctx.itemsRef.current.filter(\n (i) => !i.disabled && (ctx.inputValue === '' || ctx.filter(i.searchText, ctx.inputValue)),\n );\n }, [ctx]);\n\n // Auto-set first match when the filter or the item registry changes.\n useEffect(() => {\n const list = visibleItems();\n if (list.length > 0 && !list.some((i) => i.id === ctx.activeId)) {\n ctx.setActiveId(list[0]!.id);\n } else if (list.length === 0) {\n ctx.setActiveId(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ctx.inputValue, ctx.registryVersion]);\n\n const moveActive = (direction: 1 | -1) => {\n const list = visibleItems();\n if (list.length === 0) return;\n const idx = list.findIndex((i) => i.id === ctx.activeId);\n let nextIdx = idx + direction;\n if (idx === -1) nextIdx = direction === 1 ? 0 : list.length - 1;\n if (nextIdx < 0) nextIdx = list.length - 1;\n if (nextIdx >= list.length) nextIdx = 0;\n ctx.setActiveId(list[nextIdx]!.id);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveActive(-1);\n break;\n case 'Home':\n if (e.target === ctx.inputRef.current) {\n const list = visibleItems();\n if (list.length > 0) ctx.setActiveId(list[0]!.id);\n }\n break;\n case 'End':\n if (e.target === ctx.inputRef.current) {\n const list = visibleItems();\n if (list.length > 0) ctx.setActiveId(list[list.length - 1]!.id);\n }\n break;\n case 'Enter': {\n if (!ctx.activeId) return;\n const entry = ctx.itemsRef.current.find((i) => i.id === ctx.activeId);\n if (!entry || entry.disabled) return;\n e.preventDefault();\n entry.onSelect();\n if (entry.closeOnSelect) ctx.setOpen(false);\n break;\n }\n }\n };\n\n return (\n <div className=\"flex items-center gap-2 border-b border-border px-3\">\n <Icon icon={Search} size={16} className=\"text-muted-foreground\" />\n <input\n {...rest}\n ref={(el) => {\n ctx.inputRef.current = el;\n if (typeof forwardedRef === 'function') forwardedRef(el);\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLInputElement | null>).current = el;\n }}\n id={ctx.inputId}\n type=\"text\"\n role=\"combobox\"\n aria-expanded\n aria-controls={ctx.listboxId}\n aria-activedescendant={ctx.activeId ?? undefined}\n aria-autocomplete=\"list\"\n placeholder={placeholder}\n value={ctx.inputValue}\n onChange={(e) => ctx.setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex h-12 w-full bg-transparent text-sm text-foreground placeholder:text-subtle-foreground outline-none disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n />\n </div>\n );\n },\n);\n\nexport type CommandPaletteListProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CommandPaletteList = forwardRef<HTMLDivElement, CommandPaletteListProps>(\n function CommandPaletteList({ className, children, ...rest }, forwardedRef) {\n const ctx = useCommandPaletteContext();\n return (\n <div\n ref={forwardedRef}\n id={ctx.listboxId}\n role=\"listbox\"\n aria-labelledby={ctx.inputId}\n className={cn('max-h-80 overflow-y-auto p-1', className)}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nexport interface CommandPaletteGroupProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n}\n\nexport function CommandPaletteGroup({\n label,\n children,\n className,\n ...rest\n}: CommandPaletteGroupProps) {\n const labelId = useId();\n return (\n <div\n role=\"group\"\n aria-labelledby={label ? labelId : undefined}\n className={className}\n {...rest}\n >\n {label && (\n <div id={labelId} className={listboxGroupLabelVariants()}>\n {label}\n </div>\n )}\n {children}\n </div>\n );\n}\n\nexport function CommandPaletteSeparator(props: HTMLAttributes<HTMLDivElement>) {\n return <div role=\"separator\" className={listboxSeparatorVariants()} {...props} />;\n}\n\nexport interface CommandPaletteItemProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n /** Text used by the filter; defaults to `value`. Pass when children include icons. */\n searchText?: string;\n disabled?: boolean;\n onSelect?: () => void;\n closeOnSelect?: boolean;\n children: ReactNode;\n}\n\nexport const CommandPaletteItem = forwardRef<HTMLDivElement, CommandPaletteItemProps>(\n function CommandPaletteItem(\n {\n value,\n searchText,\n disabled = false,\n onSelect,\n closeOnSelect = true,\n className,\n children,\n onClick,\n onPointerEnter,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useCommandPaletteContext();\n const id = useId();\n\n // Resolve text for filter — fall back to children if string.\n const resolvedSearch =\n searchText ??\n (typeof children === 'string' ? children : Array.isArray(children) ? children.filter((c) => typeof c === 'string').join(' ') : value);\n\n // Depend on the stable callbacks, not `ctx` — registering bumps the registry\n // version (new ctx identity), which would otherwise re-run this effect forever.\n const { registerItem, unregisterItem } = ctx;\n useEffect(() => {\n registerItem({\n id,\n value,\n searchText: resolvedSearch,\n disabled,\n onSelect: () => onSelect?.(),\n closeOnSelect,\n });\n return () => unregisterItem(id);\n }, [registerItem, unregisterItem, id, value, resolvedSearch, disabled, onSelect, closeOnSelect]);\n\n // Hide if filtered out.\n const matches = ctx.inputValue === '' || ctx.filter(resolvedSearch, ctx.inputValue);\n if (!matches) return null;\n\n const isActive = ctx.activeId === id;\n const state = disabled ? 'disabled' : isActive ? 'active' : 'default';\n\n return (\n <div\n ref={forwardedRef}\n id={id}\n role=\"option\"\n aria-selected={isActive}\n aria-disabled={disabled || undefined}\n data-active={isActive ? '' : undefined}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || disabled) return;\n onSelect?.();\n if (closeOnSelect) ctx.setOpen(false);\n }}\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n if (!disabled) ctx.setActiveId(id);\n }}\n className={cn(listboxItemVariants({ state }), className)}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nexport type CommandPaletteEmptyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CommandPaletteEmpty = forwardRef<HTMLDivElement, CommandPaletteEmptyProps>(\n function CommandPaletteEmpty({ className, children, ...rest }, forwardedRef) {\n const ctx = useCommandPaletteContext();\n // Show only when zero items match.\n const matchCount = ctx.itemsRef.current.filter(\n (i) => ctx.inputValue === '' || ctx.filter(i.searchText, ctx.inputValue),\n ).length;\n if (matchCount > 0) return null;\n return (\n <div\n ref={forwardedRef}\n role=\"presentation\"\n className={cn(listboxEmptyVariants(), className)}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\ntype CommandPaletteComponent = typeof CommandPalette & {\n Content: typeof CommandPaletteContent;\n Input: typeof CommandPaletteInput;\n List: typeof CommandPaletteList;\n Group: typeof CommandPaletteGroup;\n Item: typeof CommandPaletteItem;\n Empty: typeof CommandPaletteEmpty;\n Separator: typeof CommandPaletteSeparator;\n};\n\n(CommandPalette as CommandPaletteComponent).Content = CommandPaletteContent;\n(CommandPalette as CommandPaletteComponent).Input = CommandPaletteInput;\n(CommandPalette as CommandPaletteComponent).List = CommandPaletteList;\n(CommandPalette as CommandPaletteComponent).Group = CommandPaletteGroup;\n(CommandPalette as CommandPaletteComponent).Item = CommandPaletteItem;\n(CommandPalette as CommandPaletteComponent).Empty = CommandPaletteEmpty;\n(CommandPalette as CommandPaletteComponent).Separator = CommandPaletteSeparator;\n\nexport default CommandPalette as CommandPaletteComponent;\n","import { useEffect, useState, type ReactNode } from 'react';\n\nexport interface UseScrollSpyOptions {\n rootMargin?: string;\n threshold?: number | number[];\n /** Element to observe within. Defaults to viewport. */\n root?: Element | Document | null;\n}\n\n/**\n * Track which of `ids` is currently the topmost in-view section.\n * Uses `IntersectionObserver` — returns `null` until the first intersection.\n */\nexport function useScrollSpy(\n ids: string[],\n { rootMargin = '0px 0px -60% 0px', threshold = 0, root = null }: UseScrollSpyOptions = {},\n): string | null {\n const [activeId, setActiveId] = useState<string | null>(null);\n\n useEffect(() => {\n if (typeof IntersectionObserver === 'undefined' || ids.length === 0) return;\n\n const seen = new Map<string, number>(); // id → top offset\n const elements = ids\n .map((id) => document.getElementById(id))\n .filter((el): el is HTMLElement => el != null);\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const e of entries) {\n if (e.isIntersecting) {\n seen.set(e.target.id, e.boundingClientRect.top);\n } else {\n seen.delete(e.target.id);\n }\n }\n if (seen.size === 0) return;\n // Pick the section whose top is closest to (but above) the rootMargin band.\n let bestId: string | null = null;\n let bestTop = Number.POSITIVE_INFINITY;\n for (const [id, top] of seen) {\n if (top < bestTop) {\n bestTop = top;\n bestId = id;\n }\n }\n setActiveId(bestId);\n },\n { rootMargin, threshold, root: root as Element | Document | null },\n );\n\n for (const el of elements) observer.observe(el);\n return () => observer.disconnect();\n }, [ids, rootMargin, threshold, root]);\n\n return activeId;\n}\n\nexport interface ScrollSpyProps extends UseScrollSpyOptions {\n ids: string[];\n onActiveChange?: (id: string | null) => void;\n children?: (ctx: { activeId: string | null }) => ReactNode;\n}\n\n/**\n * Render-prop variant of `useScrollSpy`. Emits `activeId` via callback or\n * render prop. Renders nothing by default.\n */\nexport function ScrollSpy({\n ids,\n rootMargin,\n threshold,\n root,\n onActiveChange,\n children,\n}: ScrollSpyProps) {\n const activeId = useScrollSpy(ids, { rootMargin, threshold, root });\n\n useEffect(() => {\n onActiveChange?.(activeId);\n }, [activeId, onActiveChange]);\n\n return children ? <>{children({ activeId })}</> : null;\n}\n","import {\n forwardRef,\n useEffect,\n useMemo,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useScrollSpy } from '../scrollSpy/ScrollSpy';\n\nexport interface TableOfContentsItem {\n id: string;\n label: ReactNode;\n /** Indent level. 0 = top, 1 = nested, … */\n depth?: number;\n}\n\nexport interface TableOfContentsProps extends HTMLAttributes<HTMLElement> {\n items?: TableOfContentsItem[];\n /** Auto-extract from this element's headings. */\n source?: RefObject<HTMLElement>;\n /** CSS selector used with `source`. Default `h2, h3`. */\n headingSelector?: string;\n /** Override the auto-derived active id. */\n activeId?: string | null;\n /** Apply `sticky top-4 self-start` helper classes. */\n sticky?: boolean;\n}\n\nfunction depthFromTagName(tag: string): number {\n const match = /^H([1-6])$/i.exec(tag);\n return match ? Number(match[1]) - 2 : 0; // h2 → 0, h3 → 1, h4 → 2\n}\n\n/**\n * Outline of headings — `items` (explicit) or `source` (auto-extract).\n * Active entry derived from `useScrollSpy` over the headings' IDs.\n */\nexport const TableOfContents = forwardRef<HTMLElement, TableOfContentsProps>(\n function TableOfContents(\n {\n items: itemsProp,\n source,\n headingSelector = 'h2, h3',\n activeId: activeIdProp,\n sticky,\n className,\n ...rest\n },\n ref,\n ) {\n const [extracted, setExtracted] = useState<TableOfContentsItem[]>([]);\n\n useEffect(() => {\n if (itemsProp || !source?.current) return;\n const root = source.current;\n const headings = Array.from(root.querySelectorAll<HTMLElement>(headingSelector));\n const list = headings\n .filter((h) => h.id)\n .map((h) => ({\n id: h.id,\n label: h.textContent ?? '',\n depth: Math.max(0, depthFromTagName(h.tagName)),\n }));\n setExtracted(list);\n }, [itemsProp, source, headingSelector]);\n\n const items = itemsProp ?? extracted;\n const ids = useMemo(() => items.map((i) => i.id), [items]);\n const spyId = useScrollSpy(ids);\n const activeId = activeIdProp !== undefined ? activeIdProp : spyId;\n\n if (items.length === 0) return null;\n\n return (\n <nav\n ref={ref}\n aria-label=\"Table of contents\"\n className={cn(sticky && 'sticky top-4 self-start', className)}\n {...rest}\n >\n <ul className=\"space-y-1 text-sm\">\n {items.map((item) => {\n const isActive = item.id === activeId;\n const depth = item.depth ?? 0;\n return (\n <li\n key={item.id}\n style={{ paddingLeft: depth * 12 }}\n >\n <a\n href={`#${item.id}`}\n aria-current={isActive ? 'location' : undefined}\n className={cn(\n 'block rounded-sm px-2 py-1 transition-colors',\n isActive\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:bg-muted/40 hover:text-foreground',\n )}\n >\n {item.label}\n </a>\n </li>\n );\n })}\n </ul>\n </nav>\n );\n },\n);\n"]}
|