@alankrit2/ui 0.4.1 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/use-controlled.ts","../src/hooks/use-focus-trap.ts","../src/hooks/use-escape-keydown.ts","../src/hooks/use-body-scroll-lock.ts","../src/hooks/use-id.ts","../src/utils/compose-refs.ts","../src/primitives/slot.tsx","../src/components/dialog/dialog-context.ts","../src/components/dialog/dialog.tsx","../src/components/button/button.tsx","../src/hooks/use-click-outside.ts","../src/components/dropdown/dropdown.tsx","../src/components/tabs/tabs.tsx","../src/components/toggle/toggle.tsx"],"names":["React","React2","React3","React4","React5","React6","React7","React8","jsx","ReactDOM","React9","useEffect","React10","createPortal","createContext","useContext","useId"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from 'react';\n\ninterface UseControlledOptions<T> {\n /** Controlled value */\n value?: T;\n /** Default value for uncontrolled mode */\n defaultValue?: T;\n /** Change handler */\n onChange?: (value: T) => void;\n}\n\n/**\n * Hook for managing controlled/uncontrolled state pattern.\n * Supports both controlled (value + onChange) and uncontrolled (defaultValue) modes.\n * \n * @example\n * // Controlled\n * const [value, setValue] = useControlled({ value: externalValue, onChange: setExternalValue });\n * \n * // Uncontrolled\n * const [value, setValue] = useControlled({ defaultValue: false });\n */\nexport function useControlled<T>({\n value: valueProp,\n defaultValue,\n onChange,\n}: UseControlledOptions<T>): [T, (newValue: T) => void] {\n const [valueState, setValueState] = React.useState<T>(defaultValue as T);\n const isControlled = valueProp !== undefined;\n\n const value = isControlled ? valueProp : valueState;\n\n const setValue = React.useCallback(\n (newValue: T) => {\n if (!isControlled) {\n setValueState(newValue);\n }\n onChange?.(newValue);\n },\n [isControlled, onChange]\n );\n\n return [value as T, setValue];\n}\n","import * as React from 'react';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'textarea:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\n/**\n * Hook for trapping focus within a container.\n * Handles Tab/Shift+Tab cycling and prevents focus escape.\n * \n * @param containerRef - Ref to the container element\n * @param enabled - Whether the focus trap is active\n * @param autoFocus - Whether to auto-focus the first element on mount\n */\nexport function useFocusTrap(\n containerRef: React.RefObject<HTMLElement | null>,\n enabled = true,\n autoFocus = true\n) {\n const previouslyFocusedElement = React.useRef<HTMLElement | null>(null);\n\n React.useEffect(() => {\n if (!enabled || !containerRef.current) return;\n\n const container = containerRef.current;\n\n // Store the previously focused element\n previouslyFocusedElement.current = document.activeElement as HTMLElement;\n\n // Get all focusable elements\n const getFocusableElements = (): HTMLElement[] => {\n return Array.from(\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n );\n };\n\n // Auto-focus first element if enabled\n if (autoFocus) {\n const focusableElements = getFocusableElements();\n if (focusableElements.length > 0) {\n focusableElements[0].focus();\n }\n }\n\n // Handle Tab key to cycle focus\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n const focusableElements = getFocusableElements();\n if (focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n if (event.shiftKey) {\n // Shift + Tab: move focus to last element if on first\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else {\n // Tab: move focus to first element if on last\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n };\n\n container.addEventListener('keydown', handleKeyDown);\n\n return () => {\n container.removeEventListener('keydown', handleKeyDown);\n\n // Restore focus to previously focused element\n if (previouslyFocusedElement.current) {\n previouslyFocusedElement.current.focus();\n }\n };\n }, [enabled, autoFocus, containerRef]);\n}\n","import * as React from 'react';\n\n/**\n * Hook for handling Escape key press events.\n * Automatically cleans up event listener on unmount.\n */\nexport function useEscapeKeydown(\n handler: (event: KeyboardEvent) => void,\n enabled = true\n) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n handler(event);\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [handler, enabled]);\n}\n","import * as React from 'react';\n\n/**\n * Hook for preventing body scroll when a modal/dialog is open.\n * This is an accessibility requirement to prevent background scrolling.\n */\nexport function useBodyScrollLock(enabled = true) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const originalOverflow = document.body.style.overflow;\n const originalPaddingRight = document.body.style.paddingRight;\n\n // Prevent scroll\n document.body.style.overflow = 'hidden';\n\n // Prevent layout shift by adding padding to compensate for scrollbar\n const scrollbarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n return () => {\n document.body.style.overflow = originalOverflow;\n document.body.style.paddingRight = originalPaddingRight;\n };\n }, [enabled]);\n}\n","import * as React from 'react';\n\nlet count = 0;\nfunction generateId() {\n return `headless-ui-${++count}`;\n}\n\n/**\n * Hook for generating stable, unique IDs.\n * Uses React's useId when available, with a fallback for older versions.\n */\nexport function useStableId(idProp?: string): string {\n const [id] = React.useState(() => idProp || generateId());\n return idProp || id;\n}\n","/**\n * Composes multiple refs into a single ref callback.\n * Useful when you need to forward a ref while also using it internally.\n */\nexport function composeRefs<T>(...refs: Array<React.Ref<T> | undefined>) {\n return (node: T | null) => {\n refs.forEach((ref) => {\n if (!ref) return;\n\n if (typeof ref === 'function') {\n ref(node);\n } else {\n (ref as React.MutableRefObject<T | null>).current = node;\n }\n });\n };\n}\n","import * as React from 'react';\nimport { composeRefs } from '../utils/compose-refs';\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/**\n * Slot component for the asChild pattern.\n * When asChild is true, merges props with the child element instead of rendering a wrapper.\n */\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>(\n (props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (!React.isValidElement(children)) {\n return null;\n }\n\n return React.cloneElement(children, {\n ...mergeProps(slotProps, children.props),\n ref: forwardedRef\n ? composeRefs(forwardedRef, (children as any).ref)\n : (children as any).ref,\n });\n }\n);\n\nSlot.displayName = 'Slot';\n\n/**\n * Merges props from the Slot with props from the child element.\n * Event handlers are composed, other props from child take precedence.\n */\nfunction mergeProps(slotProps: any, childProps: any) {\n const merged = { ...childProps };\n\n for (const key in childProps) {\n const slotValue = slotProps[key];\n const childValue = childProps[key];\n\n // Compose event handlers\n if (/^on[A-Z]/.test(key)) {\n if (slotValue && childValue) {\n merged[key] = (...args: any[]) => {\n childValue(...args);\n slotValue(...args);\n };\n } else if (slotValue) {\n merged[key] = slotValue;\n }\n }\n // Child props take precedence for non-event handlers\n else if (key === 'style') {\n merged[key] = { ...slotValue, ...childValue };\n } else if (key === 'className') {\n merged[key] = [slotValue, childValue].filter(Boolean).join(' ');\n }\n }\n\n // Add slot props that don't exist in child\n for (const key in slotProps) {\n if (!(key in childProps)) {\n merged[key] = slotProps[key];\n }\n }\n\n return merged;\n}\n","import * as React from 'react';\n\nexport interface DialogContextValue {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n contentRef: React.RefObject<HTMLElement | null>;\n titleId: string;\n descriptionId: string;\n}\n\nexport const DialogContext = React.createContext<DialogContextValue | null>(\n null\n);\n\n/**\n * Hook to access Dialog context.\n * Throws an error if used outside of a Dialog component.\n */\nexport function useDialogContext(componentName: string): DialogContextValue {\n const context = React.useContext(DialogContext);\n\n if (!context) {\n throw new Error(\n `<${componentName}> must be used within a <Dialog> component.`\n );\n }\n\n return context;\n}\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useControlled } from '../../hooks/use-controlled';\nimport { useFocusTrap } from '../../hooks/use-focus-trap';\nimport { useEscapeKeydown } from '../../hooks/use-escape-keydown';\nimport { useBodyScrollLock } from '../../hooks/use-body-scroll-lock';\nimport { useStableId } from '../../hooks/use-id';\nimport { Slot } from '../../primitives/slot';\nimport { DialogContext, useDialogContext } from './dialog-context';\nimport type {\n DialogProps,\n DialogTriggerProps,\n DialogPortalProps,\n DialogOverlayProps,\n DialogContentProps,\n DialogTitleProps,\n DialogDescriptionProps,\n DialogCloseProps,\n} from './types';\n\n/**\n * Dialog Root Component\n * \n * Provides context for all Dialog sub-components.\n * Supports both controlled and uncontrolled state.\n * \n * @example\n * // Controlled\n * <Dialog open={open} onOpenChange={setOpen}>\n * ...\n * </Dialog>\n * \n * // Uncontrolled\n * <Dialog defaultOpen={false}>\n * ...\n * </Dialog>\n */\nexport function Dialog({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n children,\n}: DialogProps) {\n const [open, setOpen] = useControlled({\n value: openProp,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n\n const triggerRef = React.useRef<HTMLElement>(null);\n const contentRef = React.useRef<HTMLElement>(null);\n const titleId = useStableId();\n const descriptionId = useStableId();\n\n const contextValue = React.useMemo(\n () => ({\n open,\n onOpenChange: setOpen,\n triggerRef,\n contentRef,\n titleId,\n descriptionId,\n }),\n [open, setOpen, titleId, descriptionId]\n );\n\n return (\n <DialogContext.Provider value={contextValue}>\n {children}\n </DialogContext.Provider>\n );\n}\n\n/**\n * Dialog Trigger Component\n * \n * Button that opens the dialog when clicked.\n * Supports asChild pattern for custom elements.\n * \n * @example\n * <Dialog.Trigger>Open Dialog</Dialog.Trigger>\n * \n * // With asChild\n * <Dialog.Trigger asChild>\n * <button className=\"custom-button\">Open</button>\n * </Dialog.Trigger>\n */\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, DialogTriggerProps>(\n ({ asChild = false, children, onClick, ...props }, forwardedRef) => {\n const { onOpenChange, triggerRef } = useDialogContext('Dialog.Trigger');\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n onOpenChange(true);\n };\n\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={(node: any) => {\n if (forwardedRef) {\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else {\n forwardedRef.current = node;\n }\n }\n (triggerRef as React.MutableRefObject<HTMLElement | null>).current =\n node;\n }}\n type={asChild ? undefined : 'button'}\n onClick={handleClick}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\n\nDialogTrigger.displayName = 'Dialog.Trigger';\n\n/**\n * Dialog Portal Component\n * \n * Renders children in a portal outside the DOM hierarchy.\n * Only renders when dialog is open.\n * \n * @example\n * <Dialog.Portal>\n * <Dialog.Overlay />\n * <Dialog.Content>...</Dialog.Content>\n * </Dialog.Portal>\n */\nfunction DialogPortal({ container, children }: DialogPortalProps) {\n const { open } = useDialogContext('Dialog.Portal');\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!open || !mounted) return null;\n\n return ReactDOM.createPortal(\n children,\n container || document.body\n );\n}\n\n/**\n * Dialog Overlay Component\n * \n * Semi-transparent backdrop behind the dialog.\n * Clicking it closes the dialog.\n * \n * @example\n * <Dialog.Overlay style={{ backgroundColor: 'rgba(0, 0, 0, 0.5)' }} />\n */\nconst DialogOverlay = React.forwardRef<HTMLDivElement, DialogOverlayProps>(\n ({ onClick, ...props }, forwardedRef) => {\n const { onOpenChange } = useDialogContext('Dialog.Overlay');\n\n const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n onOpenChange(false);\n };\n\n return (\n <div\n ref={forwardedRef}\n onClick={handleClick}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9998,\n }}\n {...props}\n />\n );\n }\n);\n\nDialogOverlay.displayName = 'Dialog.Overlay';\n\n/**\n * Dialog Content Component\n * \n * Main container for dialog content.\n * Implements focus trap, keyboard handling, and ARIA attributes.\n * \n * @example\n * <Dialog.Content>\n * <Dialog.Title>Title</Dialog.Title>\n * <Dialog.Description>Description</Dialog.Description>\n * <Dialog.Close>Close</Dialog.Close>\n * </Dialog.Content>\n */\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n (\n { onEscapeKeyDown, onOverlayClick, children, ...props },\n forwardedRef\n ) => {\n const { open, onOpenChange, contentRef, titleId, descriptionId } =\n useDialogContext('Dialog.Content');\n\n // Focus trap\n useFocusTrap(contentRef, open, true);\n\n // Body scroll lock\n useBodyScrollLock(open);\n\n // Escape key handling\n useEscapeKeydown(\n (event) => {\n onEscapeKeyDown?.(event);\n onOpenChange(false);\n },\n open\n );\n\n // Prevent clicks inside content from closing dialog\n const handleContentClick = (event: React.MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n };\n\n return (\n <div\n ref={(node) => {\n if (forwardedRef) {\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else {\n forwardedRef.current = node;\n }\n }\n (contentRef as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n onClick={handleContentClick}\n style={{\n position: 'fixed',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex: 9999,\n }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nDialogContent.displayName = 'Dialog.Content';\n\n/**\n * Dialog Title Component\n * \n * Title for the dialog, linked via aria-labelledby.\n * \n * @example\n * <Dialog.Title>Confirm Action</Dialog.Title>\n */\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(\n ({ children, ...props }, forwardedRef) => {\n const { titleId } = useDialogContext('Dialog.Title');\n\n return (\n <h2 ref={forwardedRef} id={titleId} {...props}>\n {children}\n </h2>\n );\n }\n);\n\nDialogTitle.displayName = 'Dialog.Title';\n\n/**\n * Dialog Description Component\n * \n * Description for the dialog, linked via aria-describedby.\n * \n * @example\n * <Dialog.Description>This action cannot be undone.</Dialog.Description>\n */\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n DialogDescriptionProps\n>(({ children, ...props }, forwardedRef) => {\n const { descriptionId } = useDialogContext('Dialog.Description');\n\n return (\n <p ref={forwardedRef} id={descriptionId} {...props}>\n {children}\n </p>\n );\n});\n\nDialogDescription.displayName = 'Dialog.Description';\n\n/**\n * Dialog Close Component\n * \n * Button that closes the dialog when clicked.\n * Supports asChild pattern for custom elements.\n * \n * @example\n * <Dialog.Close>Cancel</Dialog.Close>\n * \n * // With asChild\n * <Dialog.Close asChild>\n * <button className=\"custom-button\">Close</button>\n * </Dialog.Close>\n */\nconst DialogClose = React.forwardRef<HTMLButtonElement, DialogCloseProps>(\n ({ asChild = false, children, onClick, ...props }, forwardedRef) => {\n const { onOpenChange } = useDialogContext('Dialog.Close');\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n onOpenChange(false);\n };\n\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={forwardedRef}\n type={asChild ? undefined : 'button'}\n onClick={handleClick}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\n\nDialogClose.displayName = 'Dialog.Close';\n\n// Attach sub-components to Dialog\nDialog.Trigger = DialogTrigger;\nDialog.Portal = DialogPortal;\nDialog.Overlay = DialogOverlay;\nDialog.Content = DialogContent;\nDialog.Title = DialogTitle;\nDialog.Description = DialogDescription;\nDialog.Close = DialogClose;\n\n// Type augmentation for compound components\nexport interface DialogComponent extends React.FC<DialogProps> {\n Trigger: typeof DialogTrigger;\n Portal: typeof DialogPortal;\n Overlay: typeof DialogOverlay;\n Content: typeof DialogContent;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Close: typeof DialogClose;\n}\n\nexport default Dialog as DialogComponent;\n","import * as React from 'react';\nimport { Slot } from '../../primitives/slot';\nimport { ButtonProps } from './types';\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return <Comp ref={ref} {...props} />;\n }\n);\n\nButton.displayName = 'Button';\n\nexport default Button;\n","import { useEffect } from 'react';\n\ntype Handler = (event: MouseEvent | TouchEvent) => void;\n\nexport function useClickOutside(\n ref: React.RefObject<HTMLElement | null>,\n handler: Handler,\n enabled: boolean = true\n) {\n useEffect(() => {\n if (!enabled) return;\n\n const listener = (event: MouseEvent | TouchEvent) => {\n const el = ref.current;\n if (!el || el.contains(event.target as Node)) {\n return;\n }\n handler(event);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref, handler, enabled]);\n}\n","import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { useControlled } from '../../hooks/use-controlled';\nimport { useClickOutside } from '../../hooks/use-click-outside';\nimport { useEscapeKeydown } from '../../hooks/use-escape-keydown';\nimport { Slot } from '../../primitives/slot';\nimport { composeRefs } from '../../utils/compose-refs';\nimport {\n DropdownProps,\n DropdownTriggerProps,\n DropdownContentProps,\n DropdownItemProps,\n DropdownContextValue,\n} from './types';\n\nconst DropdownContext = React.createContext<DropdownContextValue | undefined>(undefined);\n\nconst useDropdown = () => {\n const context = React.useContext(DropdownContext);\n if (!context) {\n throw new Error('useDropdown must be used within a Dropdown');\n }\n return context;\n};\n\nexport function Dropdown({\n children,\n open: openProp,\n onOpenChange: setOpenProp,\n defaultOpen = false,\n}: DropdownProps) {\n const [open, setOpen] = useControlled({\n value: openProp,\n onChange: setOpenProp,\n defaultValue: defaultOpen,\n });\n\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n const contextValue = React.useMemo(\n () => ({\n open: !!open,\n onOpenChange: setOpen,\n triggerRef,\n }),\n [open, setOpen]\n );\n\n return (\n <DropdownContext.Provider value={contextValue}>\n {children}\n </DropdownContext.Provider>\n );\n}\n\nconst DropdownTrigger = React.forwardRef<HTMLButtonElement, DropdownTriggerProps>(\n ({ asChild, onClick, ...props }, ref) => {\n const { open, onOpenChange, triggerRef } = useDropdown();\n const Comp = asChild ? Slot : 'button';\n const composedRef = composeRefs(ref, triggerRef);\n\n return (\n <Comp\n ref={composedRef}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n data-state={open ? 'open' : 'closed'}\n onClick={(e) => {\n onClick?.(e);\n onOpenChange(!open);\n }}\n {...props}\n />\n );\n }\n);\nDropdownTrigger.displayName = 'Dropdown.Trigger';\n\nconst DropdownContent = React.forwardRef<HTMLDivElement, DropdownContentProps>(\n ({ children, style, sideOffset = 4, align = 'center', ...props }, ref) => {\n const { open, onOpenChange, triggerRef } = useDropdown();\n const contentRef = React.useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, contentRef);\n const [position, setPosition] = React.useState<{ top: number; left: number }>({ top: 0, left: 0 });\n\n useClickOutside(contentRef, (e) => {\n // Ignore clicks on the trigger to avoid double-toggling\n if (triggerRef.current?.contains(e.target as Node)) {\n return;\n }\n onOpenChange(false);\n }, open);\n\n useEscapeKeydown(() => onOpenChange(false));\n\n React.useEffect(() => {\n if (open && triggerRef.current && contentRef.current) {\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n \n let top = triggerRect.bottom + sideOffset + window.scrollY;\n let left = triggerRect.left + window.scrollX;\n \n if (align === 'center') {\n left = triggerRect.left + window.scrollX + (triggerRect.width / 2) - (contentRect.width / 2);\n } else if (align === 'end') {\n left = triggerRect.right + window.scrollX - contentRect.width;\n }\n \n // Basic boundary check (optional, can be improved)\n // if (left < 0) left = 10;\n \n setPosition({ top, left });\n }\n }, [open, sideOffset, align]);\n\n if (!open) return null;\n\n return createPortal(\n <div\n ref={composedRef}\n role=\"menu\"\n style={{\n position: 'absolute',\n top: position.top,\n left: position.left,\n zIndex: 50,\n ...style,\n }}\n data-state={open ? 'open' : 'closed'}\n {...props}\n >\n {children}\n </div>,\n document.body\n );\n }\n);\nDropdownContent.displayName = 'Dropdown.Content';\n\nconst DropdownItem = React.forwardRef<HTMLDivElement, DropdownItemProps>(\n ({ asChild, onClick, onSelect, disabled, ...props }, ref) => {\n const { onOpenChange } = useDropdown();\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n ref={ref}\n role=\"menuitem\"\n aria-disabled={disabled}\n data-disabled={disabled}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n onSelect?.(e);\n onOpenChange(false);\n }}\n {...props}\n />\n );\n }\n);\nDropdownItem.displayName = 'Dropdown.Item';\n\n// Attach subcomponents\nconst DropdownRoot = Dropdown as any;\nDropdownRoot.Trigger = DropdownTrigger;\nDropdownRoot.Content = DropdownContent;\nDropdownRoot.Item = DropdownItem;\n\nexport default DropdownRoot;\n","\nimport React, { createContext, useContext, useId } from \"react\";\nimport { useControlled } from \"../../hooks/use-controlled\";\nimport {\n TabsContentProps,\n TabsContextValue,\n TabsListProps,\n TabsProps,\n TabsTriggerProps,\n} from \"./types\";\n\nconst TabsContext = createContext<TabsContextValue | undefined>(undefined);\n\nfunction useTabsContext() {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error(\"Tabs compound components must be used within a Tabs component\");\n }\n return context;\n}\n\nconst Tabs = ({\n defaultValue,\n value: valueProp,\n onValueChange,\n children,\n className,\n}: TabsProps) => {\n const [value, setValue] = useControlled({\n value: valueProp,\n defaultValue,\n onChange: onValueChange,\n });\n\n return (\n <TabsContext.Provider value={{ value, onValueChange: setValue }}>\n <div className={className} data-value={value}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n};\n\nconst TabsList = ({ children, className }: TabsListProps) => {\n return (\n <div role=\"tablist\" className={className}>\n {children}\n </div>\n );\n};\n\nconst TabsTrigger = ({\n value,\n children,\n className,\n disabled,\n}: TabsTriggerProps) => {\n const context = useTabsContext();\n const isActive = context.value === value;\n const id = useId();\n\n return (\n <button\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`tabpanel-${value}`}\n id={`tab-${value}`}\n disabled={disabled}\n data-state={isActive ? \"active\" : \"inactive\"}\n data-disabled={disabled ? \"\" : undefined}\n className={className}\n onClick={() => {\n if (!disabled) {\n context.onValueChange(value);\n }\n }}\n tabIndex={isActive ? 0 : -1}\n >\n {children}\n </button>\n );\n};\n\nconst TabsContent = ({ value, children, className }: TabsContentProps) => {\n const context = useTabsContext();\n const isActive = context.value === value;\n\n if (!isActive) return null;\n\n return (\n <div\n role=\"tabpanel\"\n id={`tabpanel-${value}`}\n aria-labelledby={`tab-${value}`}\n className={className}\n data-state={isActive ? \"active\" : \"inactive\"}\n tabIndex={0}\n >\n {children}\n </div>\n );\n};\n\nTabs.List = TabsList;\nTabs.Trigger = TabsTrigger;\nTabs.Content = TabsContent;\n\nexport { Tabs };\n","\nimport React from \"react\";\nimport { useControlled } from \"../../hooks/use-controlled\";\nimport { ToggleProps } from \"./types\";\nimport { Slot } from \"../../primitives/slot\";\n\nconst Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n defaultPressed = false,\n pressed: pressedProp,\n onPressedChange,\n disabled = false,\n className,\n children,\n asChild = false,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const [pressed, setPressed] = useControlled({\n value: pressedProp,\n defaultValue: defaultPressed,\n onChange: onPressedChange,\n });\n\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n type=\"button\"\n aria-pressed={pressed}\n data-state={pressed ? \"on\" : \"off\"}\n data-disabled={disabled ? \"\" : undefined}\n disabled={disabled}\n className={className}\n aria-label={ariaLabel}\n onClick={() => {\n if (!disabled) {\n setPressed(!pressed);\n }\n }}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\n\nToggle.displayName = \"Toggle\";\n\nexport { Toggle };\n"]}
1
+ {"version":3,"sources":["../src/hooks/use-controlled.ts","../src/hooks/use-focus-trap.ts","../src/hooks/use-escape-keydown.ts","../src/hooks/use-body-scroll-lock.ts","../src/hooks/use-id.ts","../src/utils/compose-refs.ts","../src/primitives/slot.tsx","../src/components/dialog/dialog-context.ts","../src/components/dialog/dialog.tsx","../src/components/button/button.tsx","../src/hooks/use-click-outside.ts","../src/components/dropdown/dropdown.tsx","../src/components/tabs/tabs.tsx","../src/components/toggle/toggle.tsx","../src/components/combobox/combobox.tsx"],"names":["React","React2","React3","React4","React5","React6","React7","React8","jsx","ReactDOM","React9","useEffect","React10","createPortal","createContext","useContext","useId","useState","useRef","useCallback","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from 'react';\n\ninterface UseControlledOptions<T> {\n /** Controlled value */\n value?: T;\n /** Default value for uncontrolled mode */\n defaultValue?: T;\n /** Change handler */\n onChange?: (value: T) => void;\n}\n\n/**\n * Hook for managing controlled/uncontrolled state pattern.\n * Supports both controlled (value + onChange) and uncontrolled (defaultValue) modes.\n * \n * @example\n * // Controlled\n * const [value, setValue] = useControlled({ value: externalValue, onChange: setExternalValue });\n * \n * // Uncontrolled\n * const [value, setValue] = useControlled({ defaultValue: false });\n */\nexport function useControlled<T>({\n value: valueProp,\n defaultValue,\n onChange,\n}: UseControlledOptions<T>): [T, (newValue: T) => void] {\n const [valueState, setValueState] = React.useState<T>(defaultValue as T);\n const isControlled = valueProp !== undefined;\n\n const value = isControlled ? valueProp : valueState;\n\n const setValue = React.useCallback(\n (newValue: T) => {\n if (!isControlled) {\n setValueState(newValue);\n }\n onChange?.(newValue);\n },\n [isControlled, onChange]\n );\n\n return [value as T, setValue];\n}\n","import * as React from 'react';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'textarea:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\n/**\n * Hook for trapping focus within a container.\n * Handles Tab/Shift+Tab cycling and prevents focus escape.\n * \n * @param containerRef - Ref to the container element\n * @param enabled - Whether the focus trap is active\n * @param autoFocus - Whether to auto-focus the first element on mount\n */\nexport function useFocusTrap(\n containerRef: React.RefObject<HTMLElement | null>,\n enabled = true,\n autoFocus = true\n) {\n const previouslyFocusedElement = React.useRef<HTMLElement | null>(null);\n\n React.useEffect(() => {\n if (!enabled || !containerRef.current) return;\n\n const container = containerRef.current;\n\n // Store the previously focused element\n previouslyFocusedElement.current = document.activeElement as HTMLElement;\n\n // Get all focusable elements\n const getFocusableElements = (): HTMLElement[] => {\n return Array.from(\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n );\n };\n\n // Auto-focus first element if enabled\n if (autoFocus) {\n const focusableElements = getFocusableElements();\n if (focusableElements.length > 0) {\n focusableElements[0].focus();\n }\n }\n\n // Handle Tab key to cycle focus\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n const focusableElements = getFocusableElements();\n if (focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n if (event.shiftKey) {\n // Shift + Tab: move focus to last element if on first\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else {\n // Tab: move focus to first element if on last\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n };\n\n container.addEventListener('keydown', handleKeyDown);\n\n return () => {\n container.removeEventListener('keydown', handleKeyDown);\n\n // Restore focus to previously focused element\n if (previouslyFocusedElement.current) {\n previouslyFocusedElement.current.focus();\n }\n };\n }, [enabled, autoFocus, containerRef]);\n}\n","import * as React from 'react';\n\n/**\n * Hook for handling Escape key press events.\n * Automatically cleans up event listener on unmount.\n */\nexport function useEscapeKeydown(\n handler: (event: KeyboardEvent) => void,\n enabled = true\n) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n handler(event);\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [handler, enabled]);\n}\n","import * as React from 'react';\n\n/**\n * Hook for preventing body scroll when a modal/dialog is open.\n * This is an accessibility requirement to prevent background scrolling.\n */\nexport function useBodyScrollLock(enabled = true) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const originalOverflow = document.body.style.overflow;\n const originalPaddingRight = document.body.style.paddingRight;\n\n // Prevent scroll\n document.body.style.overflow = 'hidden';\n\n // Prevent layout shift by adding padding to compensate for scrollbar\n const scrollbarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n return () => {\n document.body.style.overflow = originalOverflow;\n document.body.style.paddingRight = originalPaddingRight;\n };\n }, [enabled]);\n}\n","import * as React from 'react';\n\nlet count = 0;\nfunction generateId() {\n return `headless-ui-${++count}`;\n}\n\n/**\n * Hook for generating stable, unique IDs.\n * Uses React's useId when available, with a fallback for older versions.\n */\nexport function useStableId(idProp?: string): string {\n const [id] = React.useState(() => idProp || generateId());\n return idProp || id;\n}\n","/**\n * Composes multiple refs into a single ref callback.\n * Useful when you need to forward a ref while also using it internally.\n */\nexport function composeRefs<T>(...refs: Array<React.Ref<T> | undefined>) {\n return (node: T | null) => {\n refs.forEach((ref) => {\n if (!ref) return;\n\n if (typeof ref === 'function') {\n ref(node);\n } else {\n (ref as React.MutableRefObject<T | null>).current = node;\n }\n });\n };\n}\n","import * as React from 'react';\nimport { composeRefs } from '../utils/compose-refs';\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/**\n * Slot component for the asChild pattern.\n * When asChild is true, merges props with the child element instead of rendering a wrapper.\n */\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>(\n (props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (!React.isValidElement(children)) {\n return null;\n }\n\n return React.cloneElement(children, {\n ...mergeProps(slotProps, children.props),\n ref: forwardedRef\n ? composeRefs(forwardedRef, (children as any).ref)\n : (children as any).ref,\n });\n }\n);\n\nSlot.displayName = 'Slot';\n\n/**\n * Merges props from the Slot with props from the child element.\n * Event handlers are composed, other props from child take precedence.\n */\nfunction mergeProps(slotProps: any, childProps: any) {\n const merged = { ...childProps };\n\n for (const key in childProps) {\n const slotValue = slotProps[key];\n const childValue = childProps[key];\n\n // Compose event handlers\n if (/^on[A-Z]/.test(key)) {\n if (slotValue && childValue) {\n merged[key] = (...args: any[]) => {\n childValue(...args);\n slotValue(...args);\n };\n } else if (slotValue) {\n merged[key] = slotValue;\n }\n }\n // Child props take precedence for non-event handlers\n else if (key === 'style') {\n merged[key] = { ...slotValue, ...childValue };\n } else if (key === 'className') {\n merged[key] = [slotValue, childValue].filter(Boolean).join(' ');\n }\n }\n\n // Add slot props that don't exist in child\n for (const key in slotProps) {\n if (!(key in childProps)) {\n merged[key] = slotProps[key];\n }\n }\n\n return merged;\n}\n","import * as React from 'react';\n\nexport interface DialogContextValue {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n contentRef: React.RefObject<HTMLElement | null>;\n titleId: string;\n descriptionId: string;\n}\n\nexport const DialogContext = React.createContext<DialogContextValue | null>(\n null\n);\n\n/**\n * Hook to access Dialog context.\n * Throws an error if used outside of a Dialog component.\n */\nexport function useDialogContext(componentName: string): DialogContextValue {\n const context = React.useContext(DialogContext);\n\n if (!context) {\n throw new Error(\n `<${componentName}> must be used within a <Dialog> component.`\n );\n }\n\n return context;\n}\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useControlled } from '../../hooks/use-controlled';\nimport { useFocusTrap } from '../../hooks/use-focus-trap';\nimport { useEscapeKeydown } from '../../hooks/use-escape-keydown';\nimport { useBodyScrollLock } from '../../hooks/use-body-scroll-lock';\nimport { useStableId } from '../../hooks/use-id';\nimport { Slot } from '../../primitives/slot';\nimport { DialogContext, useDialogContext } from './dialog-context';\nimport type {\n DialogProps,\n DialogTriggerProps,\n DialogPortalProps,\n DialogOverlayProps,\n DialogContentProps,\n DialogTitleProps,\n DialogDescriptionProps,\n DialogCloseProps,\n} from './types';\n\n/**\n * Dialog Root Component\n * \n * Provides context for all Dialog sub-components.\n * Supports both controlled and uncontrolled state.\n * \n * @example\n * // Controlled\n * <Dialog open={open} onOpenChange={setOpen}>\n * ...\n * </Dialog>\n * \n * // Uncontrolled\n * <Dialog defaultOpen={false}>\n * ...\n * </Dialog>\n */\nexport function Dialog({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n children,\n}: DialogProps) {\n const [open, setOpen] = useControlled({\n value: openProp,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n\n const triggerRef = React.useRef<HTMLElement>(null);\n const contentRef = React.useRef<HTMLElement>(null);\n const titleId = useStableId();\n const descriptionId = useStableId();\n\n const contextValue = React.useMemo(\n () => ({\n open,\n onOpenChange: setOpen,\n triggerRef,\n contentRef,\n titleId,\n descriptionId,\n }),\n [open, setOpen, titleId, descriptionId]\n );\n\n return (\n <DialogContext.Provider value={contextValue}>\n {children}\n </DialogContext.Provider>\n );\n}\n\n/**\n * Dialog Trigger Component\n * \n * Button that opens the dialog when clicked.\n * Supports asChild pattern for custom elements.\n * \n * @example\n * <Dialog.Trigger>Open Dialog</Dialog.Trigger>\n * \n * // With asChild\n * <Dialog.Trigger asChild>\n * <button className=\"custom-button\">Open</button>\n * </Dialog.Trigger>\n */\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, DialogTriggerProps>(\n ({ asChild = false, children, onClick, ...props }, forwardedRef) => {\n const { onOpenChange, triggerRef } = useDialogContext('Dialog.Trigger');\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n onOpenChange(true);\n };\n\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={(node: any) => {\n if (forwardedRef) {\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else {\n forwardedRef.current = node;\n }\n }\n (triggerRef as React.MutableRefObject<HTMLElement | null>).current =\n node;\n }}\n type={asChild ? undefined : 'button'}\n onClick={handleClick}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\n\nDialogTrigger.displayName = 'Dialog.Trigger';\n\n/**\n * Dialog Portal Component\n * \n * Renders children in a portal outside the DOM hierarchy.\n * Only renders when dialog is open.\n * \n * @example\n * <Dialog.Portal>\n * <Dialog.Overlay />\n * <Dialog.Content>...</Dialog.Content>\n * </Dialog.Portal>\n */\nfunction DialogPortal({ container, children }: DialogPortalProps) {\n const { open } = useDialogContext('Dialog.Portal');\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!open || !mounted) return null;\n\n return ReactDOM.createPortal(\n children,\n container || document.body\n );\n}\n\n/**\n * Dialog Overlay Component\n * \n * Semi-transparent backdrop behind the dialog.\n * Clicking it closes the dialog.\n * \n * @example\n * <Dialog.Overlay style={{ backgroundColor: 'rgba(0, 0, 0, 0.5)' }} />\n */\nconst DialogOverlay = React.forwardRef<HTMLDivElement, DialogOverlayProps>(\n ({ onClick, ...props }, forwardedRef) => {\n const { onOpenChange } = useDialogContext('Dialog.Overlay');\n\n const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n onOpenChange(false);\n };\n\n return (\n <div\n ref={forwardedRef}\n onClick={handleClick}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9998,\n }}\n {...props}\n />\n );\n }\n);\n\nDialogOverlay.displayName = 'Dialog.Overlay';\n\n/**\n * Dialog Content Component\n * \n * Main container for dialog content.\n * Implements focus trap, keyboard handling, and ARIA attributes.\n * \n * @example\n * <Dialog.Content>\n * <Dialog.Title>Title</Dialog.Title>\n * <Dialog.Description>Description</Dialog.Description>\n * <Dialog.Close>Close</Dialog.Close>\n * </Dialog.Content>\n */\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n (\n { onEscapeKeyDown, onOverlayClick, children, ...props },\n forwardedRef\n ) => {\n const { open, onOpenChange, contentRef, titleId, descriptionId } =\n useDialogContext('Dialog.Content');\n\n // Focus trap\n useFocusTrap(contentRef, open, true);\n\n // Body scroll lock\n useBodyScrollLock(open);\n\n // Escape key handling\n useEscapeKeydown(\n (event) => {\n onEscapeKeyDown?.(event);\n onOpenChange(false);\n },\n open\n );\n\n // Prevent clicks inside content from closing dialog\n const handleContentClick = (event: React.MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n };\n\n return (\n <div\n ref={(node) => {\n if (forwardedRef) {\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else {\n forwardedRef.current = node;\n }\n }\n (contentRef as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n onClick={handleContentClick}\n style={{\n position: 'fixed',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex: 9999,\n }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nDialogContent.displayName = 'Dialog.Content';\n\n/**\n * Dialog Title Component\n * \n * Title for the dialog, linked via aria-labelledby.\n * \n * @example\n * <Dialog.Title>Confirm Action</Dialog.Title>\n */\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(\n ({ children, ...props }, forwardedRef) => {\n const { titleId } = useDialogContext('Dialog.Title');\n\n return (\n <h2 ref={forwardedRef} id={titleId} {...props}>\n {children}\n </h2>\n );\n }\n);\n\nDialogTitle.displayName = 'Dialog.Title';\n\n/**\n * Dialog Description Component\n * \n * Description for the dialog, linked via aria-describedby.\n * \n * @example\n * <Dialog.Description>This action cannot be undone.</Dialog.Description>\n */\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n DialogDescriptionProps\n>(({ children, ...props }, forwardedRef) => {\n const { descriptionId } = useDialogContext('Dialog.Description');\n\n return (\n <p ref={forwardedRef} id={descriptionId} {...props}>\n {children}\n </p>\n );\n});\n\nDialogDescription.displayName = 'Dialog.Description';\n\n/**\n * Dialog Close Component\n * \n * Button that closes the dialog when clicked.\n * Supports asChild pattern for custom elements.\n * \n * @example\n * <Dialog.Close>Cancel</Dialog.Close>\n * \n * // With asChild\n * <Dialog.Close asChild>\n * <button className=\"custom-button\">Close</button>\n * </Dialog.Close>\n */\nconst DialogClose = React.forwardRef<HTMLButtonElement, DialogCloseProps>(\n ({ asChild = false, children, onClick, ...props }, forwardedRef) => {\n const { onOpenChange } = useDialogContext('Dialog.Close');\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n onOpenChange(false);\n };\n\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={forwardedRef}\n type={asChild ? undefined : 'button'}\n onClick={handleClick}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\n\nDialogClose.displayName = 'Dialog.Close';\n\n// Attach sub-components to Dialog\nDialog.Trigger = DialogTrigger;\nDialog.Portal = DialogPortal;\nDialog.Overlay = DialogOverlay;\nDialog.Content = DialogContent;\nDialog.Title = DialogTitle;\nDialog.Description = DialogDescription;\nDialog.Close = DialogClose;\n\n// Type augmentation for compound components\nexport interface DialogComponent extends React.FC<DialogProps> {\n Trigger: typeof DialogTrigger;\n Portal: typeof DialogPortal;\n Overlay: typeof DialogOverlay;\n Content: typeof DialogContent;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Close: typeof DialogClose;\n}\n\nexport default Dialog as DialogComponent;\n","import * as React from 'react';\nimport { Slot } from '../../primitives/slot';\nimport { ButtonProps } from './types';\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return <Comp ref={ref} {...props} />;\n }\n);\n\nButton.displayName = 'Button';\n\nexport default Button;\n","import { useEffect } from 'react';\n\ntype Handler = (event: MouseEvent | TouchEvent) => void;\n\nexport function useClickOutside(\n ref: React.RefObject<HTMLElement | null>,\n handler: Handler,\n enabled: boolean = true\n) {\n useEffect(() => {\n if (!enabled) return;\n\n const listener = (event: MouseEvent | TouchEvent) => {\n const el = ref.current;\n if (!el || el.contains(event.target as Node)) {\n return;\n }\n handler(event);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref, handler, enabled]);\n}\n","import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { useControlled } from '../../hooks/use-controlled';\nimport { useClickOutside } from '../../hooks/use-click-outside';\nimport { useEscapeKeydown } from '../../hooks/use-escape-keydown';\nimport { Slot } from '../../primitives/slot';\nimport { composeRefs } from '../../utils/compose-refs';\nimport {\n DropdownProps,\n DropdownTriggerProps,\n DropdownContentProps,\n DropdownItemProps,\n DropdownContextValue,\n} from './types';\n\nconst DropdownContext = React.createContext<DropdownContextValue | undefined>(undefined);\n\nconst useDropdown = () => {\n const context = React.useContext(DropdownContext);\n if (!context) {\n throw new Error('useDropdown must be used within a Dropdown');\n }\n return context;\n};\n\nexport function Dropdown({\n children,\n open: openProp,\n onOpenChange: setOpenProp,\n defaultOpen = false,\n}: DropdownProps) {\n const [open, setOpen] = useControlled({\n value: openProp,\n onChange: setOpenProp,\n defaultValue: defaultOpen,\n });\n\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n const contextValue = React.useMemo(\n () => ({\n open: !!open,\n onOpenChange: setOpen,\n triggerRef,\n }),\n [open, setOpen]\n );\n\n return (\n <DropdownContext.Provider value={contextValue}>\n {children}\n </DropdownContext.Provider>\n );\n}\n\nconst DropdownTrigger = React.forwardRef<HTMLButtonElement, DropdownTriggerProps>(\n ({ asChild, onClick, ...props }, ref) => {\n const { open, onOpenChange, triggerRef } = useDropdown();\n const Comp = asChild ? Slot : 'button';\n const composedRef = composeRefs(ref, triggerRef);\n\n return (\n <Comp\n ref={composedRef}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n data-state={open ? 'open' : 'closed'}\n onClick={(e) => {\n onClick?.(e);\n onOpenChange(!open);\n }}\n {...props}\n />\n );\n }\n);\nDropdownTrigger.displayName = 'Dropdown.Trigger';\n\nconst DropdownContent = React.forwardRef<HTMLDivElement, DropdownContentProps>(\n ({ children, style, sideOffset = 4, align = 'center', ...props }, ref) => {\n const { open, onOpenChange, triggerRef } = useDropdown();\n const contentRef = React.useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, contentRef);\n const [position, setPosition] = React.useState<{ top: number; left: number }>({ top: 0, left: 0 });\n\n useClickOutside(contentRef, (e) => {\n // Ignore clicks on the trigger to avoid double-toggling\n if (triggerRef.current?.contains(e.target as Node)) {\n return;\n }\n onOpenChange(false);\n }, open);\n\n useEscapeKeydown(() => onOpenChange(false));\n\n React.useEffect(() => {\n if (open && triggerRef.current && contentRef.current) {\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n \n let top = triggerRect.bottom + sideOffset + window.scrollY;\n let left = triggerRect.left + window.scrollX;\n \n if (align === 'center') {\n left = triggerRect.left + window.scrollX + (triggerRect.width / 2) - (contentRect.width / 2);\n } else if (align === 'end') {\n left = triggerRect.right + window.scrollX - contentRect.width;\n }\n \n // Basic boundary check (optional, can be improved)\n // if (left < 0) left = 10;\n \n setPosition({ top, left });\n }\n }, [open, sideOffset, align]);\n\n if (!open) return null;\n\n return createPortal(\n <div\n ref={composedRef}\n role=\"menu\"\n style={{\n position: 'absolute',\n top: position.top,\n left: position.left,\n zIndex: 50,\n ...style,\n }}\n data-state={open ? 'open' : 'closed'}\n {...props}\n >\n {children}\n </div>,\n document.body\n );\n }\n);\nDropdownContent.displayName = 'Dropdown.Content';\n\nconst DropdownItem = React.forwardRef<HTMLDivElement, DropdownItemProps>(\n ({ asChild, onClick, onSelect, disabled, ...props }, ref) => {\n const { onOpenChange } = useDropdown();\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n ref={ref}\n role=\"menuitem\"\n aria-disabled={disabled}\n data-disabled={disabled}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n onSelect?.(e);\n onOpenChange(false);\n }}\n {...props}\n />\n );\n }\n);\nDropdownItem.displayName = 'Dropdown.Item';\n\n// Attach subcomponents\nconst DropdownRoot = Dropdown as any;\nDropdownRoot.Trigger = DropdownTrigger;\nDropdownRoot.Content = DropdownContent;\nDropdownRoot.Item = DropdownItem;\n\nexport default DropdownRoot;\n","\nimport React, { createContext, useContext, useId } from \"react\";\nimport { useControlled } from \"../../hooks/use-controlled\";\nimport {\n TabsContentProps,\n TabsContextValue,\n TabsListProps,\n TabsProps,\n TabsTriggerProps,\n} from \"./types\";\n\nconst TabsContext = createContext<TabsContextValue | undefined>(undefined);\n\nfunction useTabsContext() {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error(\"Tabs compound components must be used within a Tabs component\");\n }\n return context;\n}\n\nconst Tabs = ({\n defaultValue,\n value: valueProp,\n onValueChange,\n children,\n className,\n}: TabsProps) => {\n const [value, setValue] = useControlled({\n value: valueProp,\n defaultValue,\n onChange: onValueChange,\n });\n\n return (\n <TabsContext.Provider value={{ value, onValueChange: setValue }}>\n <div className={className} data-value={value}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n};\n\nconst TabsList = ({ children, className }: TabsListProps) => {\n return (\n <div role=\"tablist\" className={className}>\n {children}\n </div>\n );\n};\n\nconst TabsTrigger = ({\n value,\n children,\n className,\n disabled,\n}: TabsTriggerProps) => {\n const context = useTabsContext();\n const isActive = context.value === value;\n const id = useId();\n\n return (\n <button\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`tabpanel-${value}`}\n id={`tab-${value}`}\n disabled={disabled}\n data-state={isActive ? \"active\" : \"inactive\"}\n data-disabled={disabled ? \"\" : undefined}\n className={className}\n onClick={() => {\n if (!disabled) {\n context.onValueChange(value);\n }\n }}\n tabIndex={isActive ? 0 : -1}\n >\n {children}\n </button>\n );\n};\n\nconst TabsContent = ({ value, children, className }: TabsContentProps) => {\n const context = useTabsContext();\n const isActive = context.value === value;\n\n if (!isActive) return null;\n\n return (\n <div\n role=\"tabpanel\"\n id={`tabpanel-${value}`}\n aria-labelledby={`tab-${value}`}\n className={className}\n data-state={isActive ? \"active\" : \"inactive\"}\n tabIndex={0}\n >\n {children}\n </div>\n );\n};\n\nTabs.List = TabsList;\nTabs.Trigger = TabsTrigger;\nTabs.Content = TabsContent;\n\nexport { Tabs };\n","\nimport React from \"react\";\nimport { useControlled } from \"../../hooks/use-controlled\";\nimport { ToggleProps } from \"./types\";\nimport { Slot } from \"../../primitives/slot\";\n\nconst Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n defaultPressed = false,\n pressed: pressedProp,\n onPressedChange,\n disabled = false,\n className,\n children,\n asChild = false,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const [pressed, setPressed] = useControlled({\n value: pressedProp,\n defaultValue: defaultPressed,\n onChange: onPressedChange,\n });\n\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n type=\"button\"\n aria-pressed={pressed}\n data-state={pressed ? \"on\" : \"off\"}\n data-disabled={disabled ? \"\" : undefined}\n disabled={disabled}\n className={className}\n aria-label={ariaLabel}\n onClick={() => {\n if (!disabled) {\n setPressed(!pressed);\n }\n }}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\n\nToggle.displayName = \"Toggle\";\n\nexport { Toggle };\n","\nimport React, {\n createContext,\n useContext,\n useMemo,\n useRef,\n useState,\n useCallback,\n useEffect,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useControlled } from \"../../hooks/use-controlled\";\nimport { useClickOutside } from \"../../hooks/use-click-outside\";\nimport { useStableId } from \"../../hooks/use-id\";\nimport { Slot } from \"../../primitives/slot\";\nimport { composeRefs } from \"../../utils/compose-refs\";\nimport {\n ComboboxProps,\n ComboboxInputProps,\n ComboboxTriggerProps,\n ComboboxContentProps,\n ComboboxItemProps,\n ComboboxContextValue,\n} from \"./types\";\n\nconst ComboboxContext = createContext<ComboboxContextValue | undefined>(\n undefined\n);\n\nconst useCombobox = () => {\n const context = useContext(ComboboxContext);\n if (!context) {\n throw new Error(\"useCombobox must be used within a Combobox\");\n }\n return context;\n};\n\nconst Combobox = ({\n children,\n value: valueProp,\n defaultValue,\n onValueChange,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n inputValue: inputValueProp,\n defaultInputValue = \"\",\n onInputChange,\n className,\n}: ComboboxProps) => {\n const [value, setValue] = useControlled({\n value: valueProp,\n defaultValue: defaultValue,\n onChange: onValueChange,\n });\n\n const [open, setOpen] = useControlled({\n value: openProp,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n\n const [inputValue, setInputValue] = useControlled({\n value: inputValueProp,\n defaultValue: defaultInputValue,\n onChange: onInputChange,\n });\n\n const [activeIndex, setActiveIndex] = useState(-1);\n const [items, setItems] = useState<\n Array<{ value: string; id: string; disabled: boolean }>\n >([]);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const listId = useStableId();\n\n const registerItem = useCallback(\n (item: { value: string; id: string; disabled: boolean }) => {\n setItems((prev) => {\n if (prev.find((i) => i.id === item.id)) return prev;\n return [...prev, item];\n });\n },\n []\n );\n\n const unregisterItem = useCallback((id: string) => {\n setItems((prev) => prev.filter((item) => item.id !== id));\n }, []);\n\n const contextValue = useMemo(\n () => ({\n value: value || \"\",\n onValueChange: setValue,\n inputValue: inputValue || \"\",\n onInputChange: setInputValue,\n open: !!open,\n onOpenChange: setOpen,\n activeIndex,\n setActiveIndex,\n items,\n registerItem,\n unregisterItem,\n listId,\n inputRef,\n triggerRef,\n }),\n [\n value,\n setValue,\n inputValue,\n setInputValue,\n open,\n setOpen,\n activeIndex,\n items,\n registerItem,\n unregisterItem,\n listId,\n ]\n );\n\n return (\n <ComboboxContext.Provider value={contextValue}>\n <div className={className} style={{ position: \"relative\" }}>\n {children}\n </div>\n </ComboboxContext.Provider>\n );\n};\n\nconst ComboboxInput = React.forwardRef<HTMLInputElement, ComboboxInputProps>(\n ({ asChild, onChange, onKeyDown, ...props }, ref) => {\n const {\n inputValue,\n onInputChange,\n open,\n onOpenChange,\n items,\n activeIndex,\n setActiveIndex,\n onValueChange,\n listId,\n inputRef: contextInputRef,\n } = useCombobox();\n\n const composedRef = composeRefs(ref, contextInputRef);\n const Comp = asChild ? Slot : \"input\";\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n if (!open) {\n onOpenChange(true);\n setActiveIndex(0); // If opening, highlight first\n } else {\n setActiveIndex((prev) =>\n prev < items.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!open) {\n onOpenChange(true);\n setActiveIndex(items.length - 1); // If opening, highlight last\n } else {\n setActiveIndex((prev) => {\n return prev > 0 ? prev - 1 : items.length - 1;\n });\n }\n break;\n case \"Enter\":\n if (open && activeIndex >= 0 && items[activeIndex]) {\n e.preventDefault();\n const item = items[activeIndex];\n if (!item.disabled) {\n onValueChange(item.value);\n onInputChange(item.value); // Usually update input on selection\n onOpenChange(false);\n setActiveIndex(-1);\n }\n }\n break;\n case \"Escape\":\n if (open) {\n e.preventDefault();\n onOpenChange(false);\n setActiveIndex(-1);\n }\n break;\n case \"Tab\":\n // Close on tab out\n if(open) {\n onOpenChange(false);\n }\n break;\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n onInputChange(e.target.value);\n if (!open) {\n onOpenChange(true);\n }\n };\n\n const handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n props.onClick?.(e);\n if (!open) {\n onOpenChange(true);\n }\n };\n\n return (\n <Comp\n ref={composedRef}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={open}\n aria-controls={listId}\n aria-activedescendant={\n activeIndex >= 0 && items[activeIndex] ? items[activeIndex].id : undefined\n }\n value={inputValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n {...props}\n />\n );\n }\n);\nComboboxInput.displayName = \"Combobox.Input\";\n\nconst ComboboxTrigger = React.forwardRef<HTMLButtonElement, ComboboxTriggerProps>(\n ({ asChild, onClick, ...props }, ref) => {\n const { open, onOpenChange, inputRef, triggerRef } = useCombobox();\n const composedRef = composeRefs(ref, triggerRef);\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={composedRef}\n aria-expanded={open}\n type=\"button\"\n onClick={(e) => {\n onClick?.(e);\n const nextOpen = !open;\n onOpenChange(nextOpen);\n if (nextOpen) {\n // Focus input when opening via trigger\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n }\n }}\n {...props}\n />\n );\n }\n);\nComboboxTrigger.displayName = \"Combobox.Trigger\";\n\nconst ComboboxContent = React.forwardRef<HTMLDivElement, ComboboxContentProps>(\n ({ asChild, children, portal = false, className, ...props }, ref) => {\n const { open, onOpenChange, listId, inputRef, triggerRef } = useCombobox();\n const contentRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, contentRef);\n \n useClickOutside(contentRef, (e) => {\n const target = e.target as Node;\n if (inputRef.current?.contains(target)) return;\n if (triggerRef.current?.contains(target)) return;\n onOpenChange(false);\n }, open);\n\n if (!open) return null;\n // Actually, if it's inline, clicking outside *should* probably close it too if it's a \"menu\", but often inline comboboxes stay open or managed differently.\n \n // Override for better UX: If input has focus, keep open? \n // Let's stick to simple \"portal=true means popover behavior\" for now.\n\n if (!open) return null;\n\n const Comp = asChild ? Slot : \"div\";\n const content = (\n <Comp\n ref={composedRef}\n id={listId}\n role=\"listbox\"\n className={className}\n {...props}\n >\n {children}\n </Comp>\n );\n\n if (portal && typeof document !== \"undefined\") {\n return createPortal(content, document.body);\n }\n\n return content;\n }\n);\nComboboxContent.displayName = \"Combobox.Content\";\n\nconst ComboboxItem = React.forwardRef<HTMLDivElement, ComboboxItemProps>(\n ({ asChild, value, onClick, onSelect, disabled = false, ...props }, ref) => {\n const {\n onValueChange,\n onInputChange,\n onOpenChange,\n registerItem,\n unregisterItem,\n items,\n activeIndex,\n setActiveIndex,\n } = useCombobox();\n \n const id = useStableId();\n const itemRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, itemRef);\n\n useEffect(() => {\n registerItem({ value, id, disabled });\n return () => unregisterItem(id);\n }, [value, id, disabled, registerItem, unregisterItem]);\n\n const index = items.findIndex((i) => i.id === id);\n const isActive = index === activeIndex;\n const Comp = asChild ? Slot : \"div\";\n\n return (\n <Comp\n ref={composedRef}\n id={id}\n role=\"option\"\n aria-selected={isActive}\n aria-disabled={disabled}\n data-disabled={disabled ? \"\" : undefined}\n data-highlighted={isActive ? \"\" : undefined}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n onSelect?.(value);\n onValueChange(value);\n onInputChange(value);\n onOpenChange(false);\n setActiveIndex(-1);\n }}\n onMouseEnter={() => {\n // Hover highlight\n if(!disabled) setActiveIndex(index);\n }}\n {...props}\n />\n );\n }\n);\nComboboxItem.displayName = \"Combobox.Item\";\n\n// Composition exports\nconst ComboboxRoot = Combobox as any;\nComboboxRoot.Input = ComboboxInput;\nComboboxRoot.Trigger = ComboboxTrigger;\nComboboxRoot.Content = ComboboxContent;\nComboboxRoot.Item = ComboboxItem;\n\nexport { ComboboxRoot as Combobox };\n"]}
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React8 from 'react';
2
- import React8__default, { createContext, useEffect, useId, useContext } from 'react';
2
+ import React8__default, { createContext, useRef, useEffect, useContext, useState, useCallback, useMemo, useId } from 'react';
3
3
  import * as ReactDOM from 'react-dom';
4
4
  import { createPortal } from 'react-dom';
5
5
  import { jsx } from 'react/jsx-runtime';
@@ -634,7 +634,308 @@ var Toggle = React8__default.forwardRef(
634
634
  }
635
635
  );
636
636
  Toggle.displayName = "Toggle";
637
+ var ComboboxContext = createContext(
638
+ void 0
639
+ );
640
+ var useCombobox = () => {
641
+ const context = useContext(ComboboxContext);
642
+ if (!context) {
643
+ throw new Error("useCombobox must be used within a Combobox");
644
+ }
645
+ return context;
646
+ };
647
+ var Combobox = ({
648
+ children,
649
+ value: valueProp,
650
+ defaultValue,
651
+ onValueChange,
652
+ open: openProp,
653
+ defaultOpen = false,
654
+ onOpenChange,
655
+ inputValue: inputValueProp,
656
+ defaultInputValue = "",
657
+ onInputChange,
658
+ className
659
+ }) => {
660
+ const [value, setValue] = useControlled({
661
+ value: valueProp,
662
+ defaultValue,
663
+ onChange: onValueChange
664
+ });
665
+ const [open, setOpen] = useControlled({
666
+ value: openProp,
667
+ defaultValue: defaultOpen,
668
+ onChange: onOpenChange
669
+ });
670
+ const [inputValue, setInputValue] = useControlled({
671
+ value: inputValueProp,
672
+ defaultValue: defaultInputValue,
673
+ onChange: onInputChange
674
+ });
675
+ const [activeIndex, setActiveIndex] = useState(-1);
676
+ const [items, setItems] = useState([]);
677
+ const inputRef = useRef(null);
678
+ const triggerRef = useRef(null);
679
+ const listId = useStableId();
680
+ const registerItem = useCallback(
681
+ (item) => {
682
+ setItems((prev) => {
683
+ if (prev.find((i) => i.id === item.id)) return prev;
684
+ return [...prev, item];
685
+ });
686
+ },
687
+ []
688
+ );
689
+ const unregisterItem = useCallback((id) => {
690
+ setItems((prev) => prev.filter((item) => item.id !== id));
691
+ }, []);
692
+ const contextValue = useMemo(
693
+ () => ({
694
+ value: value || "",
695
+ onValueChange: setValue,
696
+ inputValue: inputValue || "",
697
+ onInputChange: setInputValue,
698
+ open: !!open,
699
+ onOpenChange: setOpen,
700
+ activeIndex,
701
+ setActiveIndex,
702
+ items,
703
+ registerItem,
704
+ unregisterItem,
705
+ listId,
706
+ inputRef,
707
+ triggerRef
708
+ }),
709
+ [
710
+ value,
711
+ setValue,
712
+ inputValue,
713
+ setInputValue,
714
+ open,
715
+ setOpen,
716
+ activeIndex,
717
+ items,
718
+ registerItem,
719
+ unregisterItem,
720
+ listId
721
+ ]
722
+ );
723
+ return /* @__PURE__ */ jsx(ComboboxContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx("div", { className, style: { position: "relative" }, children }) });
724
+ };
725
+ var ComboboxInput = React8__default.forwardRef(
726
+ ({ asChild, onChange, onKeyDown, ...props }, ref) => {
727
+ const {
728
+ inputValue,
729
+ onInputChange,
730
+ open,
731
+ onOpenChange,
732
+ items,
733
+ activeIndex,
734
+ setActiveIndex,
735
+ onValueChange,
736
+ listId,
737
+ inputRef: contextInputRef
738
+ } = useCombobox();
739
+ const composedRef = composeRefs(ref, contextInputRef);
740
+ const Comp = asChild ? Slot : "input";
741
+ const handleKeyDown = (e) => {
742
+ onKeyDown?.(e);
743
+ switch (e.key) {
744
+ case "ArrowDown":
745
+ e.preventDefault();
746
+ if (!open) {
747
+ onOpenChange(true);
748
+ setActiveIndex(0);
749
+ } else {
750
+ setActiveIndex(
751
+ (prev) => prev < items.length - 1 ? prev + 1 : 0
752
+ );
753
+ }
754
+ break;
755
+ case "ArrowUp":
756
+ e.preventDefault();
757
+ if (!open) {
758
+ onOpenChange(true);
759
+ setActiveIndex(items.length - 1);
760
+ } else {
761
+ setActiveIndex((prev) => {
762
+ return prev > 0 ? prev - 1 : items.length - 1;
763
+ });
764
+ }
765
+ break;
766
+ case "Enter":
767
+ if (open && activeIndex >= 0 && items[activeIndex]) {
768
+ e.preventDefault();
769
+ const item = items[activeIndex];
770
+ if (!item.disabled) {
771
+ onValueChange(item.value);
772
+ onInputChange(item.value);
773
+ onOpenChange(false);
774
+ setActiveIndex(-1);
775
+ }
776
+ }
777
+ break;
778
+ case "Escape":
779
+ if (open) {
780
+ e.preventDefault();
781
+ onOpenChange(false);
782
+ setActiveIndex(-1);
783
+ }
784
+ break;
785
+ case "Tab":
786
+ if (open) {
787
+ onOpenChange(false);
788
+ }
789
+ break;
790
+ }
791
+ };
792
+ const handleChange = (e) => {
793
+ onChange?.(e.target.value);
794
+ onInputChange(e.target.value);
795
+ if (!open) {
796
+ onOpenChange(true);
797
+ }
798
+ };
799
+ const handleClick = (e) => {
800
+ props.onClick?.(e);
801
+ if (!open) {
802
+ onOpenChange(true);
803
+ }
804
+ };
805
+ return /* @__PURE__ */ jsx(
806
+ Comp,
807
+ {
808
+ ref: composedRef,
809
+ role: "combobox",
810
+ "aria-autocomplete": "list",
811
+ "aria-expanded": open,
812
+ "aria-controls": listId,
813
+ "aria-activedescendant": activeIndex >= 0 && items[activeIndex] ? items[activeIndex].id : void 0,
814
+ value: inputValue,
815
+ onChange: handleChange,
816
+ onKeyDown: handleKeyDown,
817
+ onClick: handleClick,
818
+ ...props
819
+ }
820
+ );
821
+ }
822
+ );
823
+ ComboboxInput.displayName = "Combobox.Input";
824
+ var ComboboxTrigger = React8__default.forwardRef(
825
+ ({ asChild, onClick, ...props }, ref) => {
826
+ const { open, onOpenChange, inputRef, triggerRef } = useCombobox();
827
+ const composedRef = composeRefs(ref, triggerRef);
828
+ const Comp = asChild ? Slot : "button";
829
+ return /* @__PURE__ */ jsx(
830
+ Comp,
831
+ {
832
+ ref: composedRef,
833
+ "aria-expanded": open,
834
+ type: "button",
835
+ onClick: (e) => {
836
+ onClick?.(e);
837
+ const nextOpen = !open;
838
+ onOpenChange(nextOpen);
839
+ if (nextOpen) {
840
+ requestAnimationFrame(() => {
841
+ inputRef.current?.focus();
842
+ });
843
+ }
844
+ },
845
+ ...props
846
+ }
847
+ );
848
+ }
849
+ );
850
+ ComboboxTrigger.displayName = "Combobox.Trigger";
851
+ var ComboboxContent = React8__default.forwardRef(
852
+ ({ asChild, children, portal = false, className, ...props }, ref) => {
853
+ const { open, onOpenChange, listId, inputRef, triggerRef } = useCombobox();
854
+ const contentRef = useRef(null);
855
+ const composedRef = composeRefs(ref, contentRef);
856
+ useClickOutside(contentRef, (e) => {
857
+ const target = e.target;
858
+ if (inputRef.current?.contains(target)) return;
859
+ if (triggerRef.current?.contains(target)) return;
860
+ onOpenChange(false);
861
+ }, open);
862
+ if (!open) return null;
863
+ if (!open) return null;
864
+ const Comp = asChild ? Slot : "div";
865
+ const content = /* @__PURE__ */ jsx(
866
+ Comp,
867
+ {
868
+ ref: composedRef,
869
+ id: listId,
870
+ role: "listbox",
871
+ className,
872
+ ...props,
873
+ children
874
+ }
875
+ );
876
+ if (portal && typeof document !== "undefined") {
877
+ return createPortal(content, document.body);
878
+ }
879
+ return content;
880
+ }
881
+ );
882
+ ComboboxContent.displayName = "Combobox.Content";
883
+ var ComboboxItem = React8__default.forwardRef(
884
+ ({ asChild, value, onClick, onSelect, disabled = false, ...props }, ref) => {
885
+ const {
886
+ onValueChange,
887
+ onInputChange,
888
+ onOpenChange,
889
+ registerItem,
890
+ unregisterItem,
891
+ items,
892
+ activeIndex,
893
+ setActiveIndex
894
+ } = useCombobox();
895
+ const id = useStableId();
896
+ const itemRef = useRef(null);
897
+ const composedRef = composeRefs(ref, itemRef);
898
+ useEffect(() => {
899
+ registerItem({ value, id, disabled });
900
+ return () => unregisterItem(id);
901
+ }, [value, id, disabled, registerItem, unregisterItem]);
902
+ const index = items.findIndex((i) => i.id === id);
903
+ const isActive = index === activeIndex;
904
+ const Comp = asChild ? Slot : "div";
905
+ return /* @__PURE__ */ jsx(
906
+ Comp,
907
+ {
908
+ ref: composedRef,
909
+ id,
910
+ role: "option",
911
+ "aria-selected": isActive,
912
+ "aria-disabled": disabled,
913
+ "data-disabled": disabled ? "" : void 0,
914
+ "data-highlighted": isActive ? "" : void 0,
915
+ onClick: (e) => {
916
+ if (disabled) return;
917
+ onClick?.(e);
918
+ onSelect?.(value);
919
+ onValueChange(value);
920
+ onInputChange(value);
921
+ onOpenChange(false);
922
+ setActiveIndex(-1);
923
+ },
924
+ onMouseEnter: () => {
925
+ if (!disabled) setActiveIndex(index);
926
+ },
927
+ ...props
928
+ }
929
+ );
930
+ }
931
+ );
932
+ ComboboxItem.displayName = "Combobox.Item";
933
+ var ComboboxRoot = Combobox;
934
+ ComboboxRoot.Input = ComboboxInput;
935
+ ComboboxRoot.Trigger = ComboboxTrigger;
936
+ ComboboxRoot.Content = ComboboxContent;
937
+ ComboboxRoot.Item = ComboboxItem;
637
938
 
638
- export { button_default as Button, dialog_default as Dialog, dropdown_default as Dropdown, Slot, Tabs, Toggle, composeRefs, useBodyScrollLock, useClickOutside, useControlled, useEscapeKeydown, useFocusTrap, useStableId };
939
+ export { button_default as Button, ComboboxRoot as Combobox, dialog_default as Dialog, dropdown_default as Dropdown, Slot, Tabs, Toggle, composeRefs, useBodyScrollLock, useClickOutside, useControlled, useEscapeKeydown, useFocusTrap, useStableId };
639
940
  //# sourceMappingURL=index.mjs.map
640
941
  //# sourceMappingURL=index.mjs.map