@arolariu/components 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/EXAMPLES.md +2510 -0
- package/dist/components/ui/alert-dialog.d.ts +4 -16
- package/dist/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/components/ui/alert-dialog.js +18 -14
- package/dist/components/ui/alert-dialog.js.map +1 -1
- package/dist/components/ui/avatar.d.ts +3 -12
- package/dist/components/ui/avatar.d.ts.map +1 -1
- package/dist/components/ui/avatar.js +18 -15
- package/dist/components/ui/avatar.js.map +1 -1
- package/dist/components/ui/button-group.d.ts +1 -1
- package/dist/components/ui/button-group.d.ts.map +1 -1
- package/dist/components/ui/calendar.d.ts +1 -4
- package/dist/components/ui/calendar.d.ts.map +1 -1
- package/dist/components/ui/calendar.js +7 -7
- package/dist/components/ui/calendar.js.map +1 -1
- package/dist/components/ui/carousel.d.ts.map +1 -1
- package/dist/components/ui/carousel.js.map +1 -1
- package/dist/components/ui/chart.d.ts.map +1 -1
- package/dist/components/ui/chart.js +125 -59
- package/dist/components/ui/chart.js.map +1 -1
- package/dist/components/ui/checkbox-group.d.ts +2 -6
- package/dist/components/ui/checkbox-group.d.ts.map +1 -1
- package/dist/components/ui/checkbox-group.js +8 -7
- package/dist/components/ui/checkbox-group.js.map +1 -1
- package/dist/components/ui/checkbox.d.ts +3 -1
- package/dist/components/ui/checkbox.d.ts.map +1 -1
- package/dist/components/ui/checkbox.js +4 -1
- package/dist/components/ui/checkbox.js.map +1 -1
- package/dist/components/ui/collapsible.d.ts.map +1 -1
- package/dist/components/ui/collapsible.js.map +1 -1
- package/dist/components/ui/combobox.d.ts +335 -0
- package/dist/components/ui/combobox.d.ts.map +1 -0
- package/dist/components/ui/combobox.js +206 -0
- package/dist/components/ui/combobox.js.map +1 -0
- package/dist/components/ui/combobox.module.js +23 -0
- package/dist/components/ui/combobox.module.js.map +1 -0
- package/dist/components/ui/combobox_module.css +142 -0
- package/dist/components/ui/combobox_module.css.map +1 -0
- package/dist/components/ui/command.d.ts.map +1 -1
- package/dist/components/ui/command.js +25 -16
- package/dist/components/ui/command.js.map +1 -1
- package/dist/components/ui/context-menu.d.ts.map +1 -1
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/drawer.d.ts.map +1 -1
- package/dist/components/ui/drawer.js.map +1 -1
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/dropdrawer.d.ts +10 -16
- package/dist/components/ui/dropdrawer.d.ts.map +1 -1
- package/dist/components/ui/dropdrawer.js +28 -20
- package/dist/components/ui/dropdrawer.js.map +1 -1
- package/dist/components/ui/item.d.ts +1 -1
- package/dist/components/ui/item.d.ts.map +1 -1
- package/dist/components/ui/menubar.d.ts +11 -13
- package/dist/components/ui/menubar.d.ts.map +1 -1
- package/dist/components/ui/menubar.js.map +1 -1
- package/dist/components/ui/meter.d.ts +8 -24
- package/dist/components/ui/meter.d.ts.map +1 -1
- package/dist/components/ui/meter.js +23 -19
- package/dist/components/ui/meter.js.map +1 -1
- package/dist/components/ui/navigation-menu.d.ts +3 -12
- package/dist/components/ui/navigation-menu.d.ts.map +1 -1
- package/dist/components/ui/navigation-menu.js +14 -11
- package/dist/components/ui/navigation-menu.js.map +1 -1
- package/dist/components/ui/number-field.d.ts +6 -12
- package/dist/components/ui/number-field.d.ts.map +1 -1
- package/dist/components/ui/number-field.js.map +1 -1
- package/dist/components/ui/progress.d.ts +1 -4
- package/dist/components/ui/progress.d.ts.map +1 -1
- package/dist/components/ui/progress.js +10 -9
- package/dist/components/ui/progress.js.map +1 -1
- package/dist/components/ui/radio-group.d.ts +2 -4
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/radio-group.js.map +1 -1
- package/dist/components/ui/resizable.d.ts +3 -3
- package/dist/components/ui/resizable.d.ts.map +1 -1
- package/dist/components/ui/resizable.js.map +1 -1
- package/dist/components/ui/scratcher.d.ts +1 -1
- package/dist/components/ui/scratcher.d.ts.map +1 -1
- package/dist/components/ui/scratcher.js +5 -4
- package/dist/components/ui/scratcher.js.map +1 -1
- package/dist/components/ui/scroll-area.d.ts +2 -4
- package/dist/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/components/ui/scroll-area.js.map +1 -1
- package/dist/components/ui/separator.d.ts +1 -4
- package/dist/components/ui/separator.d.ts.map +1 -1
- package/dist/components/ui/separator.js +9 -8
- package/dist/components/ui/separator.js.map +1 -1
- package/dist/components/ui/sheet.d.ts.map +1 -1
- package/dist/components/ui/sheet.js.map +1 -1
- package/dist/components/ui/sidebar.d.ts +1 -1
- package/dist/components/ui/sidebar.d.ts.map +1 -1
- package/dist/components/ui/sidebar.js.map +1 -1
- package/dist/components/ui/sonner.d.ts +5 -4
- package/dist/components/ui/sonner.d.ts.map +1 -1
- package/dist/components/ui/sonner.js +7 -6
- package/dist/components/ui/sonner.js.map +1 -1
- package/dist/components/ui/toggle-group.d.ts +2 -8
- package/dist/components/ui/toggle-group.d.ts.map +1 -1
- package/dist/components/ui/toggle-group.js +12 -10
- package/dist/components/ui/toggle-group.js.map +1 -1
- package/dist/components/ui/toolbar.d.ts +10 -30
- package/dist/components/ui/toolbar.d.ts.map +1 -1
- package/dist/components/ui/toolbar.js +28 -23
- package/dist/components/ui/toolbar.js.map +1 -1
- package/dist/hooks/useClipboard.d.ts +77 -0
- package/dist/hooks/useClipboard.d.ts.map +1 -0
- package/dist/hooks/useClipboard.js +42 -0
- package/dist/hooks/useClipboard.js.map +1 -0
- package/dist/hooks/useControllableState.d.ts +54 -0
- package/dist/hooks/useControllableState.d.ts.map +1 -0
- package/dist/hooks/useControllableState.js +29 -0
- package/dist/hooks/useControllableState.js.map +1 -0
- package/dist/hooks/useDebounce.d.ts +33 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/hooks/useDebounce.js +20 -0
- package/dist/hooks/useDebounce.js.map +1 -0
- package/dist/hooks/useEventCallback.d.ts +34 -0
- package/dist/hooks/useEventCallback.d.ts.map +1 -0
- package/dist/hooks/useEventCallback.js +12 -0
- package/dist/hooks/useEventCallback.js.map +1 -0
- package/dist/hooks/useId.d.ts +30 -0
- package/dist/hooks/useId.d.ts.map +1 -0
- package/dist/hooks/useId.js +9 -0
- package/dist/hooks/useId.js.map +1 -0
- package/dist/hooks/useIntersectionObserver.d.ts +51 -0
- package/dist/hooks/useIntersectionObserver.d.ts.map +1 -0
- package/dist/hooks/useIntersectionObserver.js +25 -0
- package/dist/hooks/useIntersectionObserver.js.map +1 -0
- package/dist/hooks/useInterval.d.ts +55 -0
- package/dist/hooks/useInterval.d.ts.map +1 -0
- package/dist/hooks/useInterval.js +24 -0
- package/dist/hooks/useInterval.js.map +1 -0
- package/dist/hooks/useLocalStorage.d.ts +43 -0
- package/dist/hooks/useLocalStorage.d.ts.map +1 -0
- package/dist/hooks/useLocalStorage.js +53 -0
- package/dist/hooks/useLocalStorage.js.map +1 -0
- package/dist/hooks/useMergedRefs.d.ts +27 -0
- package/dist/hooks/useMergedRefs.d.ts.map +1 -0
- package/dist/hooks/useMergedRefs.js +11 -0
- package/dist/hooks/useMergedRefs.js.map +1 -0
- package/dist/hooks/useOnClickOutside.d.ts +32 -0
- package/dist/hooks/useOnClickOutside.d.ts.map +1 -0
- package/dist/hooks/useOnClickOutside.js +23 -0
- package/dist/hooks/useOnClickOutside.js.map +1 -0
- package/dist/hooks/usePrevious.d.ts +33 -0
- package/dist/hooks/usePrevious.d.ts.map +1 -0
- package/dist/hooks/usePrevious.js +14 -0
- package/dist/hooks/usePrevious.js.map +1 -0
- package/dist/hooks/useThrottle.d.ts +37 -0
- package/dist/hooks/useThrottle.d.ts.map +1 -0
- package/dist/hooks/useThrottle.js +34 -0
- package/dist/hooks/useThrottle.js.map +1 -0
- package/dist/hooks/useTimeout.d.ts +28 -0
- package/dist/hooks/useTimeout.d.ts.map +1 -0
- package/dist/hooks/useTimeout.js +24 -0
- package/dist/hooks/useTimeout.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/lib/utilities.d.ts +2 -3
- package/dist/lib/utilities.d.ts.map +1 -1
- package/dist/lib/utilities.js.map +1 -1
- package/dist/motion/tokens.js +5 -5
- package/dist/motion/tokens.js.map +1 -1
- package/dist/rslib-runtime.js +39 -0
- package/dist/rslib-runtime.js.map +1 -0
- package/package.json +82 -3
- package/src/components/ui/alert-dialog.tsx +15 -8
- package/src/components/ui/avatar.tsx +9 -6
- package/src/components/ui/calendar.tsx +7 -13
- package/src/components/ui/carousel.tsx +2 -0
- package/src/components/ui/chart.tsx +63 -60
- package/src/components/ui/checkbox-group.tsx +4 -5
- package/src/components/ui/checkbox.tsx +10 -2
- package/src/components/ui/collapsible.tsx +1 -0
- package/src/components/ui/combobox.module.css +158 -0
- package/src/components/ui/combobox.tsx +569 -0
- package/src/components/ui/command.tsx +31 -15
- package/src/components/ui/context-menu.tsx +3 -0
- package/src/components/ui/drawer.tsx +2 -0
- package/src/components/ui/dropdown-menu.tsx +3 -0
- package/src/components/ui/dropdrawer.tsx +80 -62
- package/src/components/ui/menubar.tsx +9 -10
- package/src/components/ui/meter.tsx +16 -17
- package/src/components/ui/navigation-menu.tsx +41 -33
- package/src/components/ui/number-field.tsx +6 -13
- package/src/components/ui/progress.tsx +3 -2
- package/src/components/ui/radio-group.tsx +2 -5
- package/src/components/ui/resizable.tsx +2 -2
- package/src/components/ui/scratcher.tsx +6 -10
- package/src/components/ui/scroll-area.tsx +2 -5
- package/src/components/ui/separator.tsx +4 -3
- package/src/components/ui/sheet.tsx +3 -0
- package/src/components/ui/sidebar.tsx +1 -0
- package/src/components/ui/sonner.tsx +20 -12
- package/src/components/ui/toggle-group.tsx +6 -4
- package/src/components/ui/toolbar.tsx +20 -21
- package/src/hooks/useClipboard.tsx +137 -0
- package/src/hooks/useControllableState.tsx +81 -0
- package/src/hooks/useDebounce.tsx +50 -0
- package/src/hooks/useEventCallback.tsx +47 -0
- package/src/hooks/useId.tsx +36 -0
- package/src/hooks/useIntersectionObserver.tsx +81 -0
- package/src/hooks/useInterval.tsx +80 -0
- package/src/hooks/useLocalStorage.tsx +111 -0
- package/src/hooks/useMergedRefs.tsx +48 -0
- package/src/hooks/useOnClickOutside.tsx +55 -0
- package/src/hooks/usePrevious.tsx +44 -0
- package/src/hooks/useThrottle.tsx +78 -0
- package/src/hooks/useTimeout.tsx +51 -0
- package/src/index.ts +23 -0
- package/src/lib/utilities.ts +4 -4
- package/src/motion/tokens.ts +4 -4
- package/src/stories/DesignPrinciples.mdx +48 -0
- package/src/stories/GettingStarted.mdx +92 -0
- package/src/stories/Welcome.mdx +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components/ui/combobox.js","sources":["../../../src/components/ui/combobox.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {Check, ChevronsUpDown} from \"lucide-react\";\r\nimport * as React from \"react\";\r\n\r\nimport {useControllableState} from \"@/hooks/useControllableState\";\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nimport {Button} from \"./button\";\r\nimport {Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator} from \"./command\";\r\nimport {Popover, PopoverContent, PopoverTrigger} from \"./popover\";\r\n\r\nimport styles from \"./combobox.module.css\";\r\n\r\ninterface ComboboxContextValue {\r\n value: string;\r\n onValueChange: (value: string) => void;\r\n open: boolean;\r\n setOpen: (open: boolean) => void;\r\n placeholder?: string;\r\n searchPlaceholder?: string;\r\n emptyMessage?: string;\r\n disabled?: boolean;\r\n itemLabels: Map<string, string>;\r\n registerItem: (value: string, label: string) => void;\r\n unregisterItem: (value: string) => void;\r\n}\r\n\r\nconst ComboboxContext = React.createContext<ComboboxContextValue | null>(null);\r\n\r\nfunction useComboboxContext(componentName: string): ComboboxContextValue {\r\n const context = React.useContext(ComboboxContext);\r\n\r\n if (!context) {\r\n throw new Error(`${componentName} must be used within Combobox.`);\r\n }\r\n\r\n return context;\r\n}\r\n\r\ninterface ComboboxProps {\r\n /**\r\n * The controlled selected value.\r\n * @default undefined\r\n */\r\n value?: string;\r\n /**\r\n * The default value when uncontrolled.\r\n * @default \"\"\r\n */\r\n defaultValue?: string;\r\n /**\r\n * Callback fired when the selected value changes.\r\n * @default undefined\r\n */\r\n onValueChange?: (value: string) => void;\r\n /**\r\n * Whether the popover is controlled open state.\r\n * @default undefined\r\n */\r\n open?: boolean;\r\n /**\r\n * Whether the popover is open by default (uncontrolled).\r\n * @default false\r\n */\r\n defaultOpen?: boolean;\r\n /**\r\n * Callback fired when the open state changes.\r\n * @default undefined\r\n */\r\n onOpenChange?: (open: boolean) => void;\r\n /**\r\n * Placeholder text shown when no value is selected.\r\n * @default \"Select an item...\"\r\n */\r\n placeholder?: string;\r\n /**\r\n * Placeholder text shown in the search input.\r\n * @default \"Search...\"\r\n */\r\n searchPlaceholder?: string;\r\n /**\r\n * Message shown when no items match the search.\r\n * @default \"No items found.\"\r\n */\r\n emptyMessage?: string;\r\n /**\r\n * Whether the combobox is disabled.\r\n * @default false\r\n */\r\n disabled?: boolean;\r\n /**\r\n * Additional CSS classes merged with the combobox styles.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Combobox content and items.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n}\r\n\r\ninterface ComboboxTriggerProps {\r\n /**\r\n * Additional CSS classes merged with the trigger styles.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Trigger content. If not provided, shows selected item label or placeholder.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n}\r\n\r\ninterface ComboboxContentProps {\r\n /**\r\n * Additional CSS classes merged with the content styles.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Content children (typically ComboboxItem components).\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n}\r\n\r\ninterface ComboboxItemProps {\r\n /**\r\n * The value associated with this item.\r\n */\r\n value: string;\r\n /**\r\n * Additional CSS classes merged with the item styles.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Item content (label).\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Whether the item is disabled.\r\n * @default false\r\n */\r\n disabled?: boolean;\r\n /**\r\n * Callback fired when the item is selected.\r\n * @default undefined\r\n */\r\n onSelect?: (value: string) => void;\r\n /**\r\n * Additional search keywords for filtering.\r\n * @default []\r\n */\r\n keywords?: string[];\r\n}\r\n\r\ninterface ComboboxEmptyProps {\r\n /**\r\n * Additional CSS classes merged with the empty state styles.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Content shown when no items match. Defaults to context emptyMessage.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n}\r\n\r\ninterface ComboboxGroupProps {\r\n /**\r\n * Group heading text.\r\n * @default undefined\r\n */\r\n heading?: string;\r\n /**\r\n * Additional CSS classes merged with the group styles.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Group items.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n}\r\n\r\ninterface ComboboxSeparatorProps {\r\n /**\r\n * Additional CSS classes merged with the separator styles.\r\n * @default undefined\r\n */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * A searchable select component combining Command, Popover, and Button.\r\n *\r\n * @remarks\r\n * - Composes Command (search), Popover (positioning), and Button (trigger)\r\n * - Supports both controlled and uncontrolled modes\r\n * - Provides keyboard navigation and filtering\r\n * - Built with Base UI primitives and CSS Modules\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <Combobox value={value} onValueChange={setValue}>\r\n * <ComboboxTrigger />\r\n * <ComboboxContent>\r\n * <ComboboxItem value=\"apple\">Apple</ComboboxItem>\r\n * <ComboboxItem value=\"banana\">Banana</ComboboxItem>\r\n * </ComboboxContent>\r\n * </Combobox>\r\n * ```\r\n *\r\n * @example With groups\r\n * ```tsx\r\n * <Combobox>\r\n * <ComboboxTrigger />\r\n * <ComboboxContent>\r\n * <ComboboxGroup heading=\"Fruits\">\r\n * <ComboboxItem value=\"apple\">Apple</ComboboxItem>\r\n * </ComboboxGroup>\r\n * <ComboboxSeparator />\r\n * <ComboboxGroup heading=\"Vegetables\">\r\n * <ComboboxItem value=\"carrot\">Carrot</ComboboxItem>\r\n * </ComboboxGroup>\r\n * </ComboboxContent>\r\n * </Combobox>\r\n * ```\r\n */\r\nfunction Combobox(props: Readonly<Combobox.Props>): React.ReactElement {\r\n const {\r\n value: controlledValue,\r\n defaultValue = \"\",\r\n onValueChange,\r\n open: controlledOpen,\r\n defaultOpen = false,\r\n onOpenChange,\r\n placeholder = \"Select an item...\",\r\n searchPlaceholder = \"Search...\",\r\n emptyMessage = \"No items found.\",\r\n disabled = false,\r\n className,\r\n children,\r\n } = props;\r\n\r\n const [value, setValue] = useControllableState({\r\n controlled: controlledValue,\r\n defaultValue,\r\n onChange: onValueChange,\r\n });\r\n\r\n const [open, setOpen] = useControllableState({\r\n controlled: controlledOpen,\r\n defaultValue: defaultOpen,\r\n onChange: onOpenChange,\r\n });\r\n\r\n const itemLabelsRef = React.useRef(new Map<string, string>());\r\n\r\n const registerItem = React.useCallback((itemValue: string, label: string) => {\r\n itemLabelsRef.current.set(itemValue, label);\r\n }, []);\r\n\r\n const unregisterItem = React.useCallback((itemValue: string) => {\r\n itemLabelsRef.current.delete(itemValue);\r\n }, []);\r\n\r\n const contextValue = React.useMemo<ComboboxContextValue>(\r\n () => ({\r\n value,\r\n onValueChange: setValue,\r\n open,\r\n setOpen,\r\n placeholder,\r\n searchPlaceholder,\r\n emptyMessage,\r\n disabled,\r\n itemLabels: itemLabelsRef.current,\r\n registerItem,\r\n unregisterItem,\r\n }),\r\n [value, setValue, open, setOpen, placeholder, searchPlaceholder, emptyMessage, disabled, registerItem, unregisterItem],\r\n );\r\n\r\n return (\r\n <ComboboxContext.Provider value={contextValue}>\r\n <Popover\r\n open={open}\r\n onOpenChange={setOpen}>\r\n <div className={cn(styles.combobox, className)}>{children}</div>\r\n </Popover>\r\n </ComboboxContext.Provider>\r\n );\r\n}\r\nCombobox.displayName = \"Combobox\";\r\n\r\n/**\r\n * Button that opens and closes the combobox popover.\r\n *\r\n * @remarks\r\n * - Renders as a Button with trigger behavior\r\n * - Shows selected item label or placeholder\r\n * - Supports custom children or auto-display\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <ComboboxTrigger />\r\n * ```\r\n *\r\n * @example Custom content\r\n * ```tsx\r\n * <ComboboxTrigger>\r\n * {selectedLabel || \"Choose...\"}\r\n * </ComboboxTrigger>\r\n * ```\r\n */\r\nconst ComboboxTrigger = React.forwardRef<HTMLButtonElement, ComboboxTrigger.Props>(\r\n (props: Readonly<ComboboxTrigger.Props>, ref): React.ReactElement => {\r\n const {className, children} = props;\r\n const {open, setOpen, value, placeholder, disabled, itemLabels} = useComboboxContext(\"ComboboxTrigger\");\r\n\r\n // Force re-render when value changes to update the selected label\r\n const [, forceUpdate] = React.useReducer((x: number) => x + 1, 0);\r\n\r\n React.useEffect(() => {\r\n forceUpdate();\r\n }, [value]);\r\n\r\n const selectedLabel = itemLabels.get(value) || \"\";\r\n\r\n return (\r\n <PopoverTrigger asChild>\r\n <Button\r\n ref={ref}\r\n variant='outline'\r\n role='combobox'\r\n aria-expanded={open}\r\n disabled={disabled}\r\n className={cn(styles.trigger, className)}\r\n onClick={() => setOpen(!open)}>\r\n {children ?? (\r\n <>\r\n <span className={cn(styles.triggerValue, !selectedLabel && styles.triggerPlaceholder)}>{selectedLabel || placeholder}</span>\r\n <ChevronsUpDown className={styles.triggerIcon} />\r\n </>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n );\r\n },\r\n);\r\nComboboxTrigger.displayName = \"ComboboxTrigger\";\r\n\r\n/**\r\n * The popover content containing the searchable command list.\r\n *\r\n * @remarks\r\n * - Wraps Command with Popover positioning\r\n * - Includes search input and items list\r\n * - Automatically closes on item selection\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <ComboboxContent>\r\n * <ComboboxItem value=\"item1\">Item 1</ComboboxItem>\r\n * </ComboboxContent>\r\n * ```\r\n */\r\nconst ComboboxContent = React.forwardRef<HTMLDivElement, ComboboxContent.Props>(\r\n (props: Readonly<ComboboxContent.Props>, ref): React.ReactElement => {\r\n const {className, children} = props;\r\n const {searchPlaceholder} = useComboboxContext(\"ComboboxContent\");\r\n\r\n return (\r\n <PopoverContent\r\n ref={ref}\r\n className={cn(styles.content, className)}\r\n sideOffset={4}>\r\n <Command className={styles.command}>\r\n <CommandInput\r\n placeholder={searchPlaceholder}\r\n className={styles.commandInput}\r\n />\r\n <CommandList className={styles.commandList}>\r\n <ComboboxEmpty />\r\n {children}\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n );\r\n },\r\n);\r\nComboboxContent.displayName = \"ComboboxContent\";\r\n\r\n/**\r\n * A selectable item within the combobox.\r\n *\r\n * @remarks\r\n * - Uses CommandItem internally\r\n * - Shows check icon when selected\r\n * - Closes popover on selection\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <ComboboxItem value=\"apple\">Apple</ComboboxItem>\r\n * ```\r\n *\r\n * @example With custom select handler\r\n * ```tsx\r\n * <ComboboxItem\r\n * value=\"apple\"\r\n * onSelect={(value) => console.log(\"Selected:\", value)}\r\n * >\r\n * Apple\r\n * </ComboboxItem>\r\n * ```\r\n */\r\nfunction ComboboxItem(props: Readonly<ComboboxItem.Props>): React.ReactElement {\r\n const {value: itemValue, className, children, disabled = false, onSelect, keywords = []} = props;\r\n const {value: selectedValue, onValueChange, setOpen, registerItem, unregisterItem} = useComboboxContext(\"ComboboxItem\");\r\n\r\n const isSelected = selectedValue === itemValue;\r\n const label = typeof children === \"string\" ? children : itemValue;\r\n\r\n // Register this item's label when mounted\r\n React.useEffect(() => {\r\n registerItem(itemValue, label);\r\n return () => {\r\n unregisterItem(itemValue);\r\n };\r\n }, [itemValue, label, registerItem, unregisterItem]);\r\n\r\n const handleSelect = React.useCallback(\r\n (currentValue: string) => {\r\n const newValue = currentValue === selectedValue ? \"\" : currentValue;\r\n onValueChange(newValue);\r\n setOpen(false);\r\n onSelect?.(newValue);\r\n },\r\n [selectedValue, onValueChange, setOpen, onSelect],\r\n );\r\n\r\n return (\r\n <CommandItem\r\n value={itemValue}\r\n disabled={disabled}\r\n onSelect={handleSelect}\r\n keywords={keywords}\r\n className={cn(styles.item, isSelected && styles.itemSelected, className)}>\r\n <Check className={cn(styles.itemCheck, isSelected && styles.itemCheckVisible)} />\r\n <span className={styles.itemLabel}>{children}</span>\r\n </CommandItem>\r\n );\r\n}\r\nComboboxItem.displayName = \"ComboboxItem\";\r\n\r\n/**\r\n * Message shown when search returns no results.\r\n *\r\n * @remarks\r\n * - Uses CommandEmpty internally\r\n * - Defaults to context emptyMessage\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <ComboboxEmpty />\r\n * ```\r\n *\r\n * @example Custom message\r\n * ```tsx\r\n * <ComboboxEmpty>Nothing found</ComboboxEmpty>\r\n * ```\r\n */\r\nfunction ComboboxEmpty(props: Readonly<ComboboxEmpty.Props>): React.ReactElement {\r\n const {className, children} = props;\r\n const {emptyMessage} = useComboboxContext(\"ComboboxEmpty\");\r\n\r\n return <CommandEmpty className={cn(styles.empty, className)}>{children ?? emptyMessage}</CommandEmpty>;\r\n}\r\nComboboxEmpty.displayName = \"ComboboxEmpty\";\r\n\r\n/**\r\n * Groups related combobox items with an optional heading.\r\n *\r\n * @remarks\r\n * - Uses CommandGroup internally\r\n * - Supports visual grouping with headings\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <ComboboxGroup heading=\"Fruits\">\r\n * <ComboboxItem value=\"apple\">Apple</ComboboxItem>\r\n * </ComboboxGroup>\r\n * ```\r\n */\r\nfunction ComboboxGroup(props: Readonly<ComboboxGroup.Props>): React.ReactElement {\r\n const {heading, className, children} = props;\r\n\r\n return (\r\n <CommandGroup\r\n heading={heading}\r\n className={cn(styles.group, className)}>\r\n {children}\r\n </CommandGroup>\r\n );\r\n}\r\nComboboxGroup.displayName = \"ComboboxGroup\";\r\n\r\n/**\r\n * Visual separator between combobox groups.\r\n *\r\n * @remarks\r\n * - Uses CommandSeparator internally\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <ComboboxSeparator />\r\n * ```\r\n */\r\nfunction ComboboxSeparator(props: Readonly<ComboboxSeparator.Props>): React.ReactElement {\r\n const {className} = props;\r\n\r\n return <CommandSeparator className={cn(styles.separator, className)} />;\r\n}\r\nComboboxSeparator.displayName = \"ComboboxSeparator\";\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace Combobox {\r\n export type Props = ComboboxProps;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ComboboxTrigger {\r\n export type Props = ComboboxTriggerProps;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ComboboxContent {\r\n export type Props = ComboboxContentProps;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ComboboxItem {\r\n export type Props = ComboboxItemProps;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ComboboxEmpty {\r\n export type Props = ComboboxEmptyProps;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ComboboxGroup {\r\n export type Props = ComboboxGroupProps;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ComboboxSeparator {\r\n export type Props = ComboboxSeparatorProps;\r\n}\r\n\r\nexport {Combobox, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxItem, ComboboxSeparator, ComboboxTrigger};\r\n"],"names":["ComboboxContext","React","useComboboxContext","componentName","context","Error","Combobox","props","controlledValue","defaultValue","onValueChange","controlledOpen","defaultOpen","onOpenChange","placeholder","searchPlaceholder","emptyMessage","disabled","className","children","value","setValue","useControllableState","open","setOpen","itemLabelsRef","Map","registerItem","itemValue","label","unregisterItem","contextValue","Popover","cn","styles","ComboboxTrigger","ref","itemLabels","forceUpdate","x","selectedLabel","PopoverTrigger","Button","ChevronsUpDown","ComboboxContent","PopoverContent","Command","CommandInput","CommandList","ComboboxEmpty","ComboboxItem","onSelect","keywords","selectedValue","isSelected","handleSelect","currentValue","newValue","CommandItem","Check","CommandEmpty","ComboboxGroup","heading","CommandGroup","ComboboxSeparator","CommandSeparator"],"mappings":";;;;;;;;;;AA4BA,MAAMA,kBAAkB,WAAHA,GAAGC,cAAiD;AAEzE,SAASC,mBAAmBC,aAAqB;IAC/C,MAAMC,UAAUH,WAAiBD;IAEjC,IAAI,CAACI,SACH,MAAM,IAAIC,MAAM,GAAGF,cAAc,8BAA8B,CAAC;IAGlE,OAAOC;AACT;AAsMA,SAASE,SAASC,KAA+B;IAC/C,MAAM,EACJ,OAAOC,eAAe,EACtBC,eAAe,EAAE,EACjBC,aAAa,EACb,MAAMC,cAAc,EACpBC,cAAc,KAAK,EACnBC,YAAY,EACZC,cAAc,mBAAmB,EACjCC,oBAAoB,WAAW,EAC/BC,eAAe,iBAAiB,EAChCC,WAAW,KAAK,EAChBC,SAAS,EACTC,QAAQ,EACT,GAAGZ;IAEJ,MAAM,CAACa,OAAOC,SAAS,GAAGC,qBAAqB;QAC7C,YAAYd;QACZC;QACA,UAAUC;IACZ;IAEA,MAAM,CAACa,MAAMC,QAAQ,GAAGF,qBAAqB;QAC3C,YAAYX;QACZ,cAAcC;QACd,UAAUC;IACZ;IAEA,MAAMY,gBAAgBxB,OAAa,IAAIyB;IAEvC,MAAMC,eAAe1B,YAAkB,CAAC2B,WAAmBC;QACzDJ,cAAc,OAAO,CAAC,GAAG,CAACG,WAAWC;IACvC,GAAG,EAAE;IAEL,MAAMC,iBAAiB7B,YAAkB,CAAC2B;QACxCH,cAAc,OAAO,CAAC,MAAM,CAACG;IAC/B,GAAG,EAAE;IAEL,MAAMG,eAAe9B,QACnB,IAAO;YACLmB;YACA,eAAeC;YACfE;YACAC;YACAV;YACAC;YACAC;YACAC;YACA,YAAYQ,cAAc,OAAO;YACjCE;YACAG;QACF,IACA;QAACV;QAAOC;QAAUE;QAAMC;QAASV;QAAaC;QAAmBC;QAAcC;QAAUU;QAAcG;KAAe;IAGxH,OAAO,WAAP,GACE,IAAC9B,gBAAgB,QAAQ;QAAC,OAAO+B;kBAC/B,kBAACC,SAAOA;YACN,MAAMT;YACN,cAAcC;sBACd,kBAAC;gBAAI,WAAWS,GAAGC,gBAAAA,QAAe,EAAEhB;0BAAaC;;;;AAIzD;AACAb,SAAS,WAAW,GAAG;AAsBvB,MAAM6B,kBAAkB,WAAHA,GAAGlC,WACtB,CAACM,OAAwC6B;IACvC,MAAM,EAAClB,SAAS,EAAEC,QAAQ,EAAC,GAAGZ;IAC9B,MAAM,EAACgB,IAAI,EAAEC,OAAO,EAAEJ,KAAK,EAAEN,WAAW,EAAEG,QAAQ,EAAEoB,UAAU,EAAC,GAAGnC,mBAAmB;IAGrF,MAAM,GAAGoC,YAAY,GAAGrC,WAAiB,CAACsC,IAAcA,IAAI,GAAG;IAE/DtC,UAAgB;QACdqC;IACF,GAAG;QAAClB;KAAM;IAEV,MAAMoB,gBAAgBH,WAAW,GAAG,CAACjB,UAAU;IAE/C,OAAO,WAAP,GACE,IAACqB,gBAAcA;QAAC,SAAO;kBACrB,kBAACC,QAAMA;YACL,KAAKN;YACL,SAAQ;YACR,MAAK;YACL,iBAAeb;YACf,UAAUN;YACV,WAAWgB,GAAGC,gBAAAA,OAAc,EAAEhB;YAC9B,SAAS,IAAMM,QAAQ,CAACD;sBACvBJ,YAAY,WAAZA,GACC;;kCACE,IAAC;wBAAK,WAAWc,GAAGC,gBAAAA,YAAmB,EAAE,CAACM,iBAAiBN,gBAAAA,kBAAyB;kCAAIM,iBAAiB1B;;kCACzG,IAAC6B,gBAAcA;wBAAC,WAAWT,gBAAAA,WAAkB;;;;;;AAMzD;AAEFC,gBAAgB,WAAW,GAAG;AAiB9B,MAAMS,kBAAkB,WAAHA,GAAG3C,WACtB,CAACM,OAAwC6B;IACvC,MAAM,EAAClB,SAAS,EAAEC,QAAQ,EAAC,GAAGZ;IAC9B,MAAM,EAACQ,iBAAiB,EAAC,GAAGb,mBAAmB;IAE/C,OAAO,WAAP,GACE,IAAC2C,gBAAcA;QACb,KAAKT;QACL,WAAWH,GAAGC,gBAAAA,OAAc,EAAEhB;QAC9B,YAAY;kBACZ,mBAAC4B,SAAOA;YAAC,WAAWZ,gBAAAA,OAAc;;8BAChC,IAACa,cAAYA;oBACX,aAAahC;oBACb,WAAWmB,gBAAAA,YAAmB;;8BAEhC,KAACc,aAAWA;oBAAC,WAAWd,gBAAAA,WAAkB;;sCACxC,IAACe,eAAaA,CAAAA;wBACb9B;;;;;;AAKX;AAEFyB,gBAAgB,WAAW,GAAG;AAyB9B,SAASM,aAAa3C,KAAmC;IACvD,MAAM,EAAC,OAAOqB,SAAS,EAAEV,SAAS,EAAEC,QAAQ,EAAEF,WAAW,KAAK,EAAEkC,QAAQ,EAAEC,WAAW,EAAE,EAAC,GAAG7C;IAC3F,MAAM,EAAC,OAAO8C,aAAa,EAAE3C,aAAa,EAAEc,OAAO,EAAEG,YAAY,EAAEG,cAAc,EAAC,GAAG5B,mBAAmB;IAExG,MAAMoD,aAAaD,kBAAkBzB;IACrC,MAAMC,QAAQ,AAAoB,YAApB,OAAOV,WAAwBA,WAAWS;IAGxD3B,UAAgB;QACd0B,aAAaC,WAAWC;QACxB,OAAO;YACLC,eAAeF;QACjB;IACF,GAAG;QAACA;QAAWC;QAAOF;QAAcG;KAAe;IAEnD,MAAMyB,eAAetD,YACnB,CAACuD;QACC,MAAMC,WAAWD,iBAAiBH,gBAAgB,KAAKG;QACvD9C,cAAc+C;QACdjC,QAAQ;QACR2B,WAAWM;IACb,GACA;QAACJ;QAAe3C;QAAec;QAAS2B;KAAS;IAGnD,OAAO,WAAP,GACE,KAACO,aAAWA;QACV,OAAO9B;QACP,UAAUX;QACV,UAAUsC;QACV,UAAUH;QACV,WAAWnB,GAAGC,gBAAAA,IAAW,EAAEoB,cAAcpB,gBAAAA,YAAmB,EAAEhB;;0BAC9D,IAACyC,OAAKA;gBAAC,WAAW1B,GAAGC,gBAAAA,SAAgB,EAAEoB,cAAcpB,gBAAAA,gBAAuB;;0BAC5E,IAAC;gBAAK,WAAWA,gBAAAA,SAAgB;0BAAGf;;;;AAG1C;AACA+B,aAAa,WAAW,GAAG;AAmB3B,SAASD,cAAc1C,KAAoC;IACzD,MAAM,EAACW,SAAS,EAAEC,QAAQ,EAAC,GAAGZ;IAC9B,MAAM,EAACS,YAAY,EAAC,GAAGd,mBAAmB;IAE1C,OAAO,WAAP,GAAO,IAAC0D,cAAYA;QAAC,WAAW3B,GAAGC,gBAAAA,KAAY,EAAEhB;kBAAaC,YAAYH;;AAC5E;AACAiC,cAAc,WAAW,GAAG;AAgB5B,SAASY,cAActD,KAAoC;IACzD,MAAM,EAACuD,OAAO,EAAE5C,SAAS,EAAEC,QAAQ,EAAC,GAAGZ;IAEvC,OAAO,WAAP,GACE,IAACwD,cAAYA;QACX,SAASD;QACT,WAAW7B,GAAGC,gBAAAA,KAAY,EAAEhB;kBAC3BC;;AAGP;AACA0C,cAAc,WAAW,GAAG;AAa5B,SAASG,kBAAkBzD,KAAwC;IACjE,MAAM,EAACW,SAAS,EAAC,GAAGX;IAEpB,OAAO,WAAP,GAAO,IAAC0D,kBAAgBA;QAAC,WAAWhC,GAAGC,gBAAAA,SAAgB,EAAEhB;;AAC3D;AACA8C,kBAAkB,WAAW,GAAG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import "./combobox_module.css";
|
|
2
|
+
const combobox_module = {
|
|
3
|
+
combobox: "combobox-wmFvJE",
|
|
4
|
+
trigger: "trigger-asByxe",
|
|
5
|
+
triggerValue: "triggerValue-s6rRGO",
|
|
6
|
+
triggerPlaceholder: "triggerPlaceholder-T2THwp",
|
|
7
|
+
triggerIcon: "triggerIcon-Z1UTU8",
|
|
8
|
+
content: "content-uE5DAH",
|
|
9
|
+
command: "command-cdXzEx",
|
|
10
|
+
commandInput: "commandInput-s91u2v",
|
|
11
|
+
commandList: "commandList-YCmDON",
|
|
12
|
+
item: "item-ThEyJB",
|
|
13
|
+
itemSelected: "itemSelected-JsUZAF",
|
|
14
|
+
itemCheck: "itemCheck-j350UO",
|
|
15
|
+
itemCheckVisible: "itemCheckVisible-QMieBm",
|
|
16
|
+
itemLabel: "itemLabel-wCtpTY",
|
|
17
|
+
empty: "empty-EEImeI",
|
|
18
|
+
group: "group-w7Vcxw",
|
|
19
|
+
separator: "separator-nkP8ud"
|
|
20
|
+
};
|
|
21
|
+
export default combobox_module;
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=combobox.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components/ui/combobox.module.js","sources":["../../../src/components/ui/combobox.module.css"],"sourcesContent":["// extracted by LIB_CSS_EXTRACT_LOADER\nimport \"./combobox_module.css\"\nexport default {\"combobox\":\"combobox-wmFvJE\",\"trigger\":\"trigger-asByxe\",\"triggerValue\":\"triggerValue-s6rRGO\",\"triggerPlaceholder\":\"triggerPlaceholder-T2THwp\",\"triggerIcon\":\"triggerIcon-Z1UTU8\",\"content\":\"content-uE5DAH\",\"command\":\"command-cdXzEx\",\"commandInput\":\"commandInput-s91u2v\",\"commandList\":\"commandList-YCmDON\",\"item\":\"item-ThEyJB\",\"itemSelected\":\"itemSelected-JsUZAF\",\"itemCheck\":\"itemCheck-j350UO\",\"itemCheckVisible\":\"itemCheckVisible-QMieBm\",\"itemLabel\":\"itemLabel-wCtpTY\",\"empty\":\"empty-EEImeI\",\"group\":\"group-w7Vcxw\",\"separator\":\"separator-nkP8ud\"};"],"names":[],"mappings":";AAEA,wBAAe;IAAC,UAAW;IAAkB,SAAU;IAAiB,cAAe;IAAsB,oBAAqB;IAA4B,aAAc;IAAqB,SAAU;IAAiB,SAAU;IAAiB,cAAe;IAAsB,aAAc;IAAqB,MAAO;IAAc,cAAe;IAAsB,WAAY;IAAmB,kBAAmB;IAA0B,WAAY;IAAmB,OAAQ;IAAe,OAAQ;IAAe,WAAY;AAAkB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
.combobox-wmFvJE {
|
|
2
|
+
display: contents;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.trigger-asByxe {
|
|
6
|
+
justify-content: space-between;
|
|
7
|
+
width: 100%;
|
|
8
|
+
min-width: 200px;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.triggerValue-s6rRGO {
|
|
12
|
+
text-align: left;
|
|
13
|
+
text-overflow: ellipsis;
|
|
14
|
+
white-space: nowrap;
|
|
15
|
+
flex: 1;
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.triggerPlaceholder-T2THwp {
|
|
20
|
+
color: var(--ac-neutral-500);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.triggerIcon-Z1UTU8 {
|
|
24
|
+
height: 1rem;
|
|
25
|
+
margin-left: var(--ac-spacing-2);
|
|
26
|
+
opacity: .5;
|
|
27
|
+
flex-shrink: 0;
|
|
28
|
+
width: 1rem;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.content-uE5DAH {
|
|
32
|
+
min-width: 200px;
|
|
33
|
+
width: var(--anchor-width);
|
|
34
|
+
padding: 0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.command-cdXzEx {
|
|
38
|
+
box-shadow: none;
|
|
39
|
+
border: none;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.commandInput-s91u2v {
|
|
43
|
+
border-bottom: 1px solid var(--ac-neutral-200);
|
|
44
|
+
border-radius: 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.commandList-YCmDON {
|
|
48
|
+
max-height: 300px;
|
|
49
|
+
overflow-y: auto;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.item-ThEyJB {
|
|
53
|
+
border-radius: var(--ac-radius-sm);
|
|
54
|
+
cursor: pointer;
|
|
55
|
+
align-items: center;
|
|
56
|
+
gap: var(--ac-spacing-2);
|
|
57
|
+
padding: var(--ac-spacing-2) var(--ac-spacing-3);
|
|
58
|
+
transition: background-color .2s;
|
|
59
|
+
display: flex;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.item-ThEyJB:hover {
|
|
63
|
+
background-color: var(--ac-neutral-100);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.item-ThEyJB[data-disabled] {
|
|
67
|
+
opacity: .5;
|
|
68
|
+
pointer-events: none;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.itemSelected-JsUZAF {
|
|
72
|
+
background-color: var(--ac-neutral-100);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.itemCheck-j350UO {
|
|
76
|
+
opacity: 0;
|
|
77
|
+
flex-shrink: 0;
|
|
78
|
+
width: 1rem;
|
|
79
|
+
height: 1rem;
|
|
80
|
+
transition: opacity .2s;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.itemCheckVisible-QMieBm {
|
|
84
|
+
opacity: 1;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.itemLabel-wCtpTY {
|
|
88
|
+
text-overflow: ellipsis;
|
|
89
|
+
white-space: nowrap;
|
|
90
|
+
flex: 1;
|
|
91
|
+
overflow: hidden;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.empty-EEImeI {
|
|
95
|
+
color: var(--ac-neutral-500);
|
|
96
|
+
font-size: var(--ac-font-size-sm);
|
|
97
|
+
padding: var(--ac-spacing-6) var(--ac-spacing-4);
|
|
98
|
+
text-align: center;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.group-w7Vcxw {
|
|
102
|
+
padding: var(--ac-spacing-1) 0;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.separator-nkP8ud {
|
|
106
|
+
background-color: var(--ac-neutral-200);
|
|
107
|
+
height: 1px;
|
|
108
|
+
margin: var(--ac-spacing-1) 0;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.dark .triggerPlaceholder-T2THwp {
|
|
112
|
+
color: var(--ac-neutral-400);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.dark .commandInput-s91u2v {
|
|
116
|
+
border-bottom-color: var(--ac-neutral-700);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.dark .item-ThEyJB:hover {
|
|
120
|
+
background-color: var(--ac-neutral-800);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.dark .itemSelected-JsUZAF {
|
|
124
|
+
background-color: var(--ac-neutral-800);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.dark .empty-EEImeI {
|
|
128
|
+
color: var(--ac-neutral-400);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.dark .separator-nkP8ud {
|
|
132
|
+
background-color: var(--ac-neutral-700);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
@media (width <= 640px) {
|
|
136
|
+
.content-uE5DAH, .trigger-asByxe {
|
|
137
|
+
min-width: 150px;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
/*# sourceMappingURL=combobox_module.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/combobox.module.css","webpack://./src/components/ui/combobox.module.css"],"names":[],"mappings":"AADA;ECEE,iBAAiB;AACnB;;AAEA;EACE,8BAA8B;EAC9B,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;EACnB,OAAO;EACP,gBAAgB;AAClB;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,YAAY;EACZ,gCAAgC;EAChC,WAAW;EACX,cAAc;EACd,WAAW;AACb;;AAEA;EACE,gBAAgB;EAChB,0BAA0B;EAC1B,UAAU;AACZ;;AAEA;EACE,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,8CAA8C;EAC9C,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;EACjB,gBAAgB;AAClB;;AAEA;EACE,kCAAkC;EAClC,eAAe;EACf,mBAAmB;EACnB,wBAAwB;EACxB,gDAAgD;EAChD,gCAAgC;EAChC,aAAa;AACf;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,WAAW;EACX,oBAAoB;AACtB;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,UAAU;EACV,cAAc;EACd,WAAW;EACX,YAAY;EACZ,uBAAuB;AACzB;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,uBAAuB;EACvB,mBAAmB;EACnB,OAAO;EACP,gBAAgB;AAClB;;AAEA;EACE,4BAA4B;EAC5B,iCAAiC;EACjC,gDAAgD;EAChD,kBAAkB;AACpB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,uCAAuC;EACvC,WAAW;EACX,6BAA6B;AAC/B;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE;IACE,gBAAgB;EAClB;AACF","sourcesContent":[".combobox{display:contents}.trigger{justify-content:space-between;min-width:200px;width:100%}.triggerValue{flex:1;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.triggerPlaceholder{color:var(--ac-neutral-500)}.triggerIcon{flex-shrink:0;height:1rem;margin-left:var(--ac-spacing-2);opacity:.5;width:1rem}.content{min-width:200px;padding:0;width:var(--anchor-width)}.command{border:none;box-shadow:none}.commandInput{border-bottom:1px solid var(--ac-neutral-200);border-radius:0}.commandList{max-height:300px;overflow-y:auto}.item{align-items:center;border-radius:var(--ac-radius-sm);cursor:pointer;display:flex;gap:var(--ac-spacing-2);padding:var(--ac-spacing-2) var(--ac-spacing-3);transition:background-color .2s}.item:hover{background-color:var(--ac-neutral-100)}.item[data-disabled]{opacity:.5;pointer-events:none}.itemSelected{background-color:var(--ac-neutral-100)}.itemCheck{flex-shrink:0;height:1rem;opacity:0;transition:opacity .2s;width:1rem}.itemCheckVisible{opacity:1}.itemLabel{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty{color:var(--ac-neutral-500);font-size:var(--ac-font-size-sm);padding:var(--ac-spacing-6) var(--ac-spacing-4);text-align:center}.group{padding:var(--ac-spacing-1) 0}.separator{background-color:var(--ac-neutral-200);height:1px;margin:var(--ac-spacing-1) 0}:global(.dark) .triggerPlaceholder{color:var(--ac-neutral-400)}:global(.dark) .commandInput{border-bottom-color:var(--ac-neutral-700)}:global(.dark) .item:hover{background-color:var(--ac-neutral-800)}:global(.dark) .itemSelected{background-color:var(--ac-neutral-800)}:global(.dark) .empty{color:var(--ac-neutral-400)}:global(.dark) .separator{background-color:var(--ac-neutral-700)}@media (max-width:640px){.content,.trigger{min-width:150px}}",".combobox {\n display: contents;\n}\n\n.trigger {\n justify-content: space-between;\n width: 100%;\n min-width: 200px;\n}\n\n.triggerValue {\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n overflow: hidden;\n}\n\n.triggerPlaceholder {\n color: var(--ac-neutral-500);\n}\n\n.triggerIcon {\n height: 1rem;\n margin-left: var(--ac-spacing-2);\n opacity: .5;\n flex-shrink: 0;\n width: 1rem;\n}\n\n.content {\n min-width: 200px;\n width: var(--anchor-width);\n padding: 0;\n}\n\n.command {\n box-shadow: none;\n border: none;\n}\n\n.commandInput {\n border-bottom: 1px solid var(--ac-neutral-200);\n border-radius: 0;\n}\n\n.commandList {\n max-height: 300px;\n overflow-y: auto;\n}\n\n.item {\n border-radius: var(--ac-radius-sm);\n cursor: pointer;\n align-items: center;\n gap: var(--ac-spacing-2);\n padding: var(--ac-spacing-2) var(--ac-spacing-3);\n transition: background-color .2s;\n display: flex;\n}\n\n.item:hover {\n background-color: var(--ac-neutral-100);\n}\n\n.item[data-disabled] {\n opacity: .5;\n pointer-events: none;\n}\n\n.itemSelected {\n background-color: var(--ac-neutral-100);\n}\n\n.itemCheck {\n opacity: 0;\n flex-shrink: 0;\n width: 1rem;\n height: 1rem;\n transition: opacity .2s;\n}\n\n.itemCheckVisible {\n opacity: 1;\n}\n\n.itemLabel {\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n overflow: hidden;\n}\n\n.empty {\n color: var(--ac-neutral-500);\n font-size: var(--ac-font-size-sm);\n padding: var(--ac-spacing-6) var(--ac-spacing-4);\n text-align: center;\n}\n\n.group {\n padding: var(--ac-spacing-1) 0;\n}\n\n.separator {\n background-color: var(--ac-neutral-200);\n height: 1px;\n margin: var(--ac-spacing-1) 0;\n}\n\n:global(.dark) .triggerPlaceholder {\n color: var(--ac-neutral-400);\n}\n\n:global(.dark) .commandInput {\n border-bottom-color: var(--ac-neutral-700);\n}\n\n:global(.dark) .item:hover {\n background-color: var(--ac-neutral-800);\n}\n\n:global(.dark) .itemSelected {\n background-color: var(--ac-neutral-800);\n}\n\n:global(.dark) .empty {\n color: var(--ac-neutral-400);\n}\n\n:global(.dark) .separator {\n background-color: var(--ac-neutral-700);\n}\n\n@media (width <= 640px) {\n .content, .trigger {\n min-width: 150px;\n }\n}\n"],"sourceRoot":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/components/ui/command.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/components/ui/command.tsx"],"names":[],"mappings":"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"}
|
|
@@ -32,33 +32,33 @@ function useCommandContext(componentName) {
|
|
|
32
32
|
const Command = /*#__PURE__*/ forwardRef(({ children, className, defaultValue: _defaultValue, disablePointerSelection = false, filter, label, loop = false, onKeyDown, onValueChange: _onValueChange, shouldFilter = true, value: _value, vimBindings: _vimBindings, ...props }, ref)=>{
|
|
33
33
|
const [activeItemId, setActiveItemId] = useState(null);
|
|
34
34
|
const [search, setSearch] = useState("");
|
|
35
|
-
const
|
|
36
|
-
const
|
|
35
|
+
const itemOrderRef = useRef(0);
|
|
36
|
+
const itemsRef = useRef(new Map());
|
|
37
37
|
const [itemsVersion, setItemsVersion] = useState(0);
|
|
38
38
|
const listId = useId();
|
|
39
39
|
const registerItem = useCallback((item)=>{
|
|
40
|
-
const existingItem =
|
|
40
|
+
const existingItem = itemsRef.current.get(item.id);
|
|
41
41
|
const nextItem = {
|
|
42
42
|
...item,
|
|
43
|
-
order: existingItem?.order ??
|
|
43
|
+
order: existingItem?.order ?? itemOrderRef.current++
|
|
44
44
|
};
|
|
45
45
|
const hasChanged = !existingItem || existingItem.disabled !== nextItem.disabled || existingItem.forceMount !== nextItem.forceMount || existingItem.groupId !== nextItem.groupId || existingItem.keywords.join("\u0000") !== nextItem.keywords.join("\u0000") || existingItem.ref !== nextItem.ref || existingItem.textValue !== nextItem.textValue || existingItem.value !== nextItem.value;
|
|
46
46
|
if (!hasChanged) return;
|
|
47
|
-
|
|
47
|
+
itemsRef.current.set(item.id, nextItem);
|
|
48
48
|
setItemsVersion((currentVersion)=>currentVersion + 1);
|
|
49
49
|
}, []);
|
|
50
50
|
const unregisterItem = useCallback((itemId)=>{
|
|
51
|
-
if (!
|
|
51
|
+
if (!itemsRef.current.delete(itemId)) return;
|
|
52
52
|
setItemsVersion((currentVersion)=>currentVersion + 1);
|
|
53
53
|
}, []);
|
|
54
54
|
const items = useMemo(()=>[
|
|
55
|
-
...
|
|
56
|
-
].
|
|
55
|
+
...itemsRef.current.values()
|
|
56
|
+
].toSorted((firstItem, secondItem)=>firstItem.order - secondItem.order), [
|
|
57
57
|
itemsVersion
|
|
58
58
|
]);
|
|
59
59
|
const isFiltering = shouldFilter && search.trim().length > 0;
|
|
60
60
|
const isItemVisible = useCallback((itemId)=>{
|
|
61
|
-
const item =
|
|
61
|
+
const item = itemsRef.current.get(itemId);
|
|
62
62
|
if (!item) return false;
|
|
63
63
|
if (item.forceMount || !shouldFilter || 0 === search.trim().length) return true;
|
|
64
64
|
const itemValue = item.value ?? item.textValue;
|
|
@@ -85,7 +85,7 @@ const Command = /*#__PURE__*/ forwardRef(({ children, className, defaultValue: _
|
|
|
85
85
|
]);
|
|
86
86
|
useEffect(()=>{
|
|
87
87
|
if (!activeItemId) return;
|
|
88
|
-
|
|
88
|
+
itemsRef.current.get(activeItemId)?.ref.current?.scrollIntoView({
|
|
89
89
|
block: "nearest"
|
|
90
90
|
});
|
|
91
91
|
}, [
|
|
@@ -120,7 +120,7 @@ const Command = /*#__PURE__*/ forwardRef(({ children, className, defaultValue: _
|
|
|
120
120
|
]);
|
|
121
121
|
const triggerActiveItem = useCallback(()=>{
|
|
122
122
|
if (!activeItemId) return;
|
|
123
|
-
|
|
123
|
+
itemsRef.current.get(activeItemId)?.ref.current?.click();
|
|
124
124
|
}, [
|
|
125
125
|
activeItemId
|
|
126
126
|
]);
|
|
@@ -173,6 +173,7 @@ const Command = /*#__PURE__*/ forwardRef(({ children, className, defaultValue: _
|
|
|
173
173
|
ref: ref,
|
|
174
174
|
"aria-label": label,
|
|
175
175
|
className: cn(command_module.command, className),
|
|
176
|
+
role: "toolbar",
|
|
176
177
|
onKeyDown: (event)=>{
|
|
177
178
|
onKeyDown?.(event);
|
|
178
179
|
if (event.defaultPrevented) return;
|
|
@@ -338,19 +339,19 @@ const CommandItem = /*#__PURE__*/ forwardRef(({ children, className, disabled =
|
|
|
338
339
|
const { activeItemId, disablePointerSelection, isFiltering, isItemVisible, registerItem, selectSpecificItem, unregisterItem } = useCommandContext("CommandItem");
|
|
339
340
|
const groupId = useContext(CommandGroupContext);
|
|
340
341
|
const generatedId = useId();
|
|
341
|
-
const
|
|
342
|
+
const itemRef = useRef(null);
|
|
342
343
|
const keywordSignature = useMemo(()=>keywords.join("\u0000"), [
|
|
343
344
|
keywords
|
|
344
345
|
]);
|
|
345
346
|
useLayoutEffect(()=>{
|
|
346
|
-
const textValue = value ??
|
|
347
|
+
const textValue = value ?? itemRef.current?.textContent?.trim() ?? "";
|
|
347
348
|
registerItem({
|
|
348
349
|
disabled,
|
|
349
350
|
forceMount,
|
|
350
351
|
groupId,
|
|
351
352
|
id: generatedId,
|
|
352
353
|
keywords,
|
|
353
|
-
ref:
|
|
354
|
+
ref: itemRef,
|
|
354
355
|
textValue,
|
|
355
356
|
value
|
|
356
357
|
});
|
|
@@ -377,7 +378,7 @@ const CommandItem = /*#__PURE__*/ forwardRef(({ children, className, disabled =
|
|
|
377
378
|
return /*#__PURE__*/ jsx("div", {
|
|
378
379
|
...props,
|
|
379
380
|
ref: (node)=>{
|
|
380
|
-
|
|
381
|
+
itemRef.current = node;
|
|
381
382
|
assignRef(ref, node);
|
|
382
383
|
},
|
|
383
384
|
"aria-disabled": disabled || void 0,
|
|
@@ -389,9 +390,17 @@ const CommandItem = /*#__PURE__*/ forwardRef(({ children, className, disabled =
|
|
|
389
390
|
onClick: (event)=>{
|
|
390
391
|
if (disabled) return void event.preventDefault();
|
|
391
392
|
selectSpecificItem(generatedId);
|
|
392
|
-
onSelect?.(value ??
|
|
393
|
+
onSelect?.(value ?? itemRef.current?.textContent?.trim() ?? "");
|
|
393
394
|
onClick?.(event);
|
|
394
395
|
},
|
|
396
|
+
onKeyDown: (event)=>{
|
|
397
|
+
if (disabled) return void event.preventDefault();
|
|
398
|
+
if ("Enter" === event.key || " " === event.key) {
|
|
399
|
+
event.preventDefault();
|
|
400
|
+
selectSpecificItem(generatedId);
|
|
401
|
+
onSelect?.(value ?? itemRef.current?.textContent?.trim() ?? "");
|
|
402
|
+
}
|
|
403
|
+
},
|
|
395
404
|
onFocus: ()=>{
|
|
396
405
|
if (disabled) return;
|
|
397
406
|
selectSpecificItem(generatedId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/ui/command.js","sources":["../../../src/components/ui/command.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {Dialog as BaseDialog} from \"@base-ui/react/dialog\";\r\nimport {Separator as BaseSeparator} from \"@base-ui/react/separator\";\r\nimport {Search} from \"lucide-react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nimport styles from \"./command.module.css\";\r\n\r\ntype CommandFilter = (value: string, search: string, keywords?: string[]) => number;\r\n\r\ninterface CommandProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * Command palette content.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Accessible label announced for the command region.\r\n * @default undefined\r\n */\r\n label?: string;\r\n /**\r\n * Whether items should be filtered automatically as the search value changes.\r\n * @default true\r\n */\r\n shouldFilter?: boolean;\r\n /**\r\n * Custom scoring function used to determine whether an item matches the current search value.\r\n * @default undefined\r\n */\r\n filter?: CommandFilter;\r\n /**\r\n * Deprecated uncontrolled search value placeholder retained for API compatibility.\r\n * @default undefined\r\n */\r\n defaultValue?: string;\r\n /**\r\n * Deprecated controlled search value placeholder retained for API compatibility.\r\n * @default undefined\r\n */\r\n value?: string;\r\n /**\r\n * Deprecated change callback retained for API compatibility.\r\n * @default undefined\r\n */\r\n onValueChange?: (value: string) => void;\r\n /**\r\n * Whether keyboard navigation should wrap from the last item to the first.\r\n * @default false\r\n */\r\n loop?: boolean;\r\n /**\r\n * Whether pointer hover should avoid changing the active item.\r\n * @default false\r\n */\r\n disablePointerSelection?: boolean;\r\n /**\r\n * Deprecated Vim keybinding toggle retained for API compatibility.\r\n * @default undefined\r\n */\r\n vimBindings?: boolean;\r\n}\r\n\r\ninterface CommandDialogProps extends Omit<React.ComponentPropsWithoutRef<typeof BaseDialog.Root>, \"children\"> {\r\n /**\r\n * Command palette content rendered inside the dialog popup.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Accessible dialog title announced to assistive technologies.\r\n * @default \"Command menu\"\r\n */\r\n title?: React.ReactNode;\r\n}\r\n\r\ninterface CommandInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"type\" | \"value\"> {\r\n /**\r\n * Controlled search value.\r\n * @default undefined\r\n */\r\n value?: string;\r\n /**\r\n * Native input change handler invoked before the command-specific callback.\r\n * @default undefined\r\n */\r\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\r\n /**\r\n * Callback fired when the command search value changes.\r\n * @default undefined\r\n */\r\n onValueChange?: (search: string) => void;\r\n}\r\n\r\ninterface CommandListProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * Command items and groups.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Accessible label for the listbox container.\r\n * @default undefined\r\n */\r\n label?: string;\r\n}\r\n\r\ninterface CommandGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"value\"> {\r\n /**\r\n * Group contents.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Optional visual heading displayed above the group items.\r\n * @default undefined\r\n */\r\n heading?: React.ReactNode;\r\n /**\r\n * Optional stable value retained for API compatibility.\r\n * @default undefined\r\n */\r\n value?: string;\r\n /**\r\n * Whether the group should remain rendered even when it has no visible items.\r\n * @default false\r\n */\r\n forceMount?: boolean;\r\n}\r\n\r\ninterface CommandSeparatorProps extends React.ComponentPropsWithoutRef<typeof BaseSeparator> {\r\n /**\r\n * Whether the separator should remain visible while filtering is active.\r\n * @default false\r\n */\r\n alwaysRender?: boolean;\r\n}\r\n\r\ninterface CommandItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\r\n /**\r\n * Item contents.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Whether the item is disabled and should be skipped by selection logic.\r\n * @default false\r\n */\r\n disabled?: boolean;\r\n /**\r\n * Callback invoked when the item is selected.\r\n * @default undefined\r\n */\r\n onSelect?: (value: string) => void;\r\n /**\r\n * Optional value used for filtering and selection callbacks.\r\n * @default undefined\r\n */\r\n value?: string;\r\n /**\r\n * Additional search keywords included in the filter match set.\r\n * @default []\r\n */\r\n keywords?: string[];\r\n /**\r\n * Whether the item should remain rendered even when filtered out.\r\n * @default false\r\n */\r\n forceMount?: boolean;\r\n}\r\n\r\ninterface CommandRegisteredItem {\r\n disabled: boolean;\r\n forceMount: boolean;\r\n groupId: string | null;\r\n id: string;\r\n keywords: string[];\r\n order: number;\r\n ref: React.RefObject<HTMLDivElement | null>;\r\n textValue: string;\r\n value?: string;\r\n}\r\n\r\ninterface CommandContextValue {\r\n activeItemId: string | null;\r\n disablePointerSelection: boolean;\r\n getVisibleItemCount: () => number;\r\n hasVisibleItemsInGroup: (groupId: string) => boolean;\r\n isFiltering: boolean;\r\n isItemVisible: (itemId: string) => boolean;\r\n listId: string;\r\n loop: boolean;\r\n registerItem: (item: Omit<CommandRegisteredItem, \"order\">) => void;\r\n search: string;\r\n setSearch: (value: string) => void;\r\n selectNextItem: () => void;\r\n selectPreviousItem: () => void;\r\n selectSpecificItem: (itemId: string | null) => void;\r\n shouldFilter: boolean;\r\n triggerActiveItem: () => void;\r\n unregisterItem: (itemId: string) => void;\r\n}\r\n\r\nconst CommandContext = React.createContext<CommandContextValue | null>(null);\r\nconst CommandGroupContext = React.createContext<string | null>(null);\r\n\r\nfunction assignRef<TValue>(ref: React.ForwardedRef<TValue>, value: TValue): void {\r\n if (typeof ref === \"function\") {\r\n ref(value);\r\n return;\r\n }\r\n\r\n if (ref) {\r\n ref.current = value;\r\n }\r\n}\r\n\r\nfunction normalizeCommandValue(value: string): string {\r\n return value.trim().toLowerCase();\r\n}\r\n\r\nfunction defaultCommandFilter(value: string, search: string, keywords: string[] = []): number {\r\n if (search.length === 0) {\r\n return 1;\r\n }\r\n\r\n const normalizedSearch = normalizeCommandValue(search);\r\n const normalizedValue = normalizeCommandValue([value, ...keywords].join(\" \"));\r\n\r\n return normalizedValue.includes(normalizedSearch) ? 1 : 0;\r\n}\r\n\r\nfunction useCommandContext(componentName: string): CommandContextValue {\r\n const context = React.useContext(CommandContext);\r\n\r\n if (!context) {\r\n throw new Error(`${componentName} must be used within Command.`);\r\n }\r\n\r\n return context;\r\n}\r\n\r\n/**\r\n * Provides a lightweight, filterable command surface without depending on cmdk.\r\n *\r\n * @remarks\r\n * This wrapper preserves the existing compound-component API while replacing the\r\n * underlying implementation with a small context-driven registry. It supports\r\n * text filtering, arrow-key navigation, Enter-to-select, and pointer hover\r\n * selection for common command palette use cases.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Command label='Quick actions'>\r\n * <CommandInput placeholder='Search actions...' />\r\n * <CommandList>\r\n * <CommandItem onSelect={() => console.log(\"Open\")}>Open</CommandItem>\r\n * </CommandList>\r\n * </Command>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/dialog | Base UI Dialog Docs}\r\n */\r\nconst Command = React.forwardRef<HTMLDivElement, CommandProps>(\r\n (\r\n {\r\n children,\r\n className,\r\n defaultValue: _defaultValue,\r\n disablePointerSelection = false,\r\n filter,\r\n label,\r\n loop = false,\r\n onKeyDown,\r\n onValueChange: _onValueChange,\r\n shouldFilter = true,\r\n value: _value,\r\n vimBindings: _vimBindings,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [activeItemId, setActiveItemId] = React.useState<string | null>(null);\r\n const [search, setSearch] = React.useState(\"\");\r\n const itemOrderReference = React.useRef(0);\r\n const itemsReference = React.useRef(new Map<string, CommandRegisteredItem>());\r\n const [itemsVersion, setItemsVersion] = React.useState(0);\r\n const listId = React.useId();\r\n\r\n const registerItem = React.useCallback((item: Omit<CommandRegisteredItem, \"order\">): void => {\r\n const existingItem = itemsReference.current.get(item.id);\r\n const nextItem: CommandRegisteredItem = {\r\n ...item,\r\n order: existingItem?.order ?? itemOrderReference.current++,\r\n };\r\n\r\n const hasChanged =\r\n !existingItem\r\n || existingItem.disabled !== nextItem.disabled\r\n || existingItem.forceMount !== nextItem.forceMount\r\n || existingItem.groupId !== nextItem.groupId\r\n || existingItem.keywords.join(\"\\u0000\") !== nextItem.keywords.join(\"\\u0000\")\r\n || existingItem.ref !== nextItem.ref\r\n || existingItem.textValue !== nextItem.textValue\r\n || existingItem.value !== nextItem.value;\r\n\r\n if (!hasChanged) {\r\n return;\r\n }\r\n\r\n itemsReference.current.set(item.id, nextItem);\r\n setItemsVersion((currentVersion) => currentVersion + 1);\r\n }, []);\r\n\r\n const unregisterItem = React.useCallback((itemId: string): void => {\r\n if (!itemsReference.current.delete(itemId)) {\r\n return;\r\n }\r\n\r\n setItemsVersion((currentVersion) => currentVersion + 1);\r\n }, []);\r\n\r\n const items = React.useMemo(() => {\r\n return [...itemsReference.current.values()].sort((firstItem, secondItem) => firstItem.order - secondItem.order);\r\n }, [itemsVersion]);\r\n\r\n const isFiltering = shouldFilter && search.trim().length > 0;\r\n\r\n const isItemVisible = React.useCallback(\r\n (itemId: string): boolean => {\r\n const item = itemsReference.current.get(itemId);\r\n\r\n if (!item) {\r\n return false;\r\n }\r\n\r\n if (item.forceMount || !shouldFilter || search.trim().length === 0) {\r\n return true;\r\n }\r\n\r\n const itemValue = item.value ?? item.textValue;\r\n const itemFilter = filter ?? defaultCommandFilter;\r\n\r\n return itemFilter(itemValue, search, item.keywords) > 0;\r\n },\r\n [filter, search, shouldFilter],\r\n );\r\n\r\n const visibleItems = React.useMemo(() => items.filter((item) => isItemVisible(item.id)), [isItemVisible, items]);\r\n\r\n const selectableItems = React.useMemo(() => visibleItems.filter((item) => !item.disabled), [visibleItems]);\r\n\r\n React.useEffect(() => {\r\n if (selectableItems.length === 0) {\r\n setActiveItemId(null);\r\n return;\r\n }\r\n\r\n if (!activeItemId || !selectableItems.some((item) => item.id === activeItemId)) {\r\n setActiveItemId(selectableItems[0].id);\r\n }\r\n }, [activeItemId, selectableItems]);\r\n\r\n React.useEffect(() => {\r\n if (!activeItemId) {\r\n return;\r\n }\r\n\r\n itemsReference.current.get(activeItemId)?.ref.current?.scrollIntoView({\r\n block: \"nearest\",\r\n });\r\n }, [activeItemId]);\r\n\r\n const selectSpecificItem = React.useCallback((itemId: string | null): void => {\r\n setActiveItemId(itemId);\r\n }, []);\r\n\r\n const selectNextItem = React.useCallback((): void => {\r\n if (selectableItems.length === 0) {\r\n return;\r\n }\r\n\r\n const currentIndex = selectableItems.findIndex((item) => item.id === activeItemId);\r\n\r\n if (currentIndex === -1) {\r\n setActiveItemId(selectableItems[0].id);\r\n return;\r\n }\r\n\r\n const nextIndex = currentIndex + 1;\r\n\r\n if (nextIndex >= selectableItems.length) {\r\n setActiveItemId(loop ? selectableItems[0].id : selectableItems[currentIndex].id);\r\n return;\r\n }\r\n\r\n setActiveItemId(selectableItems[nextIndex].id);\r\n }, [activeItemId, loop, selectableItems]);\r\n\r\n const selectPreviousItem = React.useCallback((): void => {\r\n if (selectableItems.length === 0) {\r\n return;\r\n }\r\n\r\n const currentIndex = selectableItems.findIndex((item) => item.id === activeItemId);\r\n\r\n if (currentIndex === -1) {\r\n setActiveItemId(selectableItems[0].id);\r\n return;\r\n }\r\n\r\n const previousIndex = currentIndex - 1;\r\n\r\n if (previousIndex < 0) {\r\n setActiveItemId(loop ? (selectableItems.at(-1)?.id ?? selectableItems[0].id) : selectableItems[currentIndex].id);\r\n return;\r\n }\r\n\r\n setActiveItemId(selectableItems[previousIndex].id);\r\n }, [activeItemId, loop, selectableItems]);\r\n\r\n const triggerActiveItem = React.useCallback((): void => {\r\n if (!activeItemId) {\r\n return;\r\n }\r\n\r\n itemsReference.current.get(activeItemId)?.ref.current?.click();\r\n }, [activeItemId]);\r\n\r\n const hasVisibleItemsInGroup = React.useCallback(\r\n (groupId: string): boolean => visibleItems.some((item) => item.groupId === groupId),\r\n [visibleItems],\r\n );\r\n\r\n const getVisibleItemCount = React.useCallback((): number => visibleItems.length, [visibleItems.length]);\r\n\r\n const contextValue = React.useMemo<CommandContextValue>(\r\n () => ({\r\n activeItemId,\r\n disablePointerSelection,\r\n getVisibleItemCount,\r\n hasVisibleItemsInGroup,\r\n isFiltering,\r\n isItemVisible,\r\n listId,\r\n loop,\r\n registerItem,\r\n search,\r\n setSearch,\r\n selectNextItem,\r\n selectPreviousItem,\r\n selectSpecificItem,\r\n shouldFilter,\r\n triggerActiveItem,\r\n unregisterItem,\r\n }),\r\n [\r\n activeItemId,\r\n disablePointerSelection,\r\n getVisibleItemCount,\r\n hasVisibleItemsInGroup,\r\n isFiltering,\r\n isItemVisible,\r\n listId,\r\n loop,\r\n registerItem,\r\n search,\r\n setSearch,\r\n selectNextItem,\r\n selectPreviousItem,\r\n selectSpecificItem,\r\n shouldFilter,\r\n triggerActiveItem,\r\n unregisterItem,\r\n ],\r\n );\r\n\r\n return (\r\n <CommandContext.Provider value={contextValue}>\r\n <div\r\n ref={ref}\r\n aria-label={label}\r\n className={cn(styles.command, className)}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n switch (event.key) {\r\n case \"ArrowDown\": {\r\n event.preventDefault();\r\n selectNextItem();\r\n break;\r\n }\r\n\r\n case \"ArrowUp\": {\r\n event.preventDefault();\r\n selectPreviousItem();\r\n break;\r\n }\r\n\r\n case \"Home\": {\r\n if (selectableItems.length === 0) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n setActiveItemId(selectableItems[0].id);\r\n break;\r\n }\r\n\r\n case \"End\": {\r\n if (selectableItems.length === 0) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n setActiveItemId(selectableItems.at(-1)?.id ?? selectableItems[0].id);\r\n break;\r\n }\r\n\r\n case \"Enter\": {\r\n if (event.nativeEvent.isComposing) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n triggerActiveItem();\r\n break;\r\n }\r\n\r\n default: {\r\n break;\r\n }\r\n }\r\n }}\r\n {...props}>\r\n {children}\r\n </div>\r\n </CommandContext.Provider>\r\n );\r\n },\r\n);\r\nCommand.displayName = \"Command\";\r\n\r\n/**\r\n * Renders the command surface inside a modal dialog.\r\n *\r\n * @remarks\r\n * - Renders a Base UI dialog popup\r\n * - Built on Base UI Dialog primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandDialog open={open} onOpenChange={setOpen}>\r\n * <CommandInput placeholder='Search...' />\r\n * </CommandDialog>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/dialog | Base UI Dialog Docs}\r\n */\r\nfunction CommandDialog({children, open, onOpenChange, title = \"Command menu\", ...props}: Readonly<CommandDialogProps>): React.JSX.Element {\r\n return (\r\n <BaseDialog.Root\r\n open={open}\r\n onOpenChange={onOpenChange}\r\n {...props}>\r\n <BaseDialog.Portal>\r\n <BaseDialog.Backdrop className={styles.backdrop} />\r\n <BaseDialog.Popup className={styles.dialogPopup}>\r\n <BaseDialog.Title className={styles.srOnly}>{title}</BaseDialog.Title>\r\n <Command>{children}</Command>\r\n </BaseDialog.Popup>\r\n </BaseDialog.Portal>\r\n </BaseDialog.Root>\r\n );\r\n}\r\nCommandDialog.displayName = \"CommandDialog\";\r\n\r\n/**\r\n * Provides the searchable input surface for a command palette.\r\n *\r\n * @remarks\r\n * - Renders an `<input>` element inside a wrapper `<div>`\r\n * - Built on the shared command registry context\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandInput placeholder='Search...' />\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Roles/combobox_role | ARIA Combobox Role}\r\n */\r\nconst CommandInput = React.forwardRef<HTMLInputElement, CommandInputProps>(({className, onChange, onValueChange, value, ...props}, ref) => {\r\n const {activeItemId, listId, search, selectSpecificItem, setSearch} = useCommandContext(\"CommandInput\");\r\n const isControlled = value !== undefined;\r\n const inputValue = isControlled ? value : search;\r\n\r\n React.useEffect(() => {\r\n if (!isControlled) {\r\n return;\r\n }\r\n\r\n setSearch(value ?? \"\");\r\n }, [isControlled, setSearch, value]);\r\n\r\n return (\r\n <div className={styles.inputWrapper}>\r\n <Search className={styles.searchIcon} />\r\n <input\r\n ref={ref}\r\n aria-activedescendant={activeItemId ?? undefined}\r\n aria-autocomplete='list'\r\n aria-controls={listId}\r\n aria-expanded='true'\r\n className={cn(styles.input, className)}\r\n onChange={(event) => {\r\n onChange?.(event);\r\n\r\n const nextSearchValue = event.currentTarget.value;\r\n setSearch(nextSearchValue);\r\n onValueChange?.(nextSearchValue);\r\n selectSpecificItem(null);\r\n }}\r\n role='combobox'\r\n type='text'\r\n value={inputValue}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n});\r\nCommandInput.displayName = \"CommandInput\";\r\n\r\n/**\r\n * Renders the listbox container that hosts command items and groups.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element with `role=\"listbox\"`\r\n * - Built on the shared command registry context\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandList>\r\n * <CommandItem>Settings</CommandItem>\r\n * </CommandList>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Roles/listbox_role | ARIA Listbox Role}\r\n */\r\nconst CommandList = React.forwardRef<HTMLDivElement, CommandListProps>(({className, label, ...props}, ref) => {\r\n const {listId} = useCommandContext(\"CommandList\");\r\n\r\n return (\r\n <div\r\n aria-label={label}\r\n ref={ref}\r\n className={cn(styles.list, className)}\r\n id={listId}\r\n role='listbox'\r\n {...props}\r\n />\r\n );\r\n});\r\nCommandList.displayName = \"CommandList\";\r\n\r\n/**\r\n * Renders a fallback empty-state message when no command items are visible.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element with `role=\"status\"`\r\n * - Built on the shared command registry context\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandEmpty>No results found.</CommandEmpty>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Roles/status_role | ARIA Status Role}\r\n */\r\nconst CommandEmpty = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({className, ...props}, ref) => {\r\n const {getVisibleItemCount} = useCommandContext(\"CommandEmpty\");\r\n\r\n if (getVisibleItemCount() > 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(styles.empty, className)}\r\n role='status'\r\n {...props}\r\n />\r\n );\r\n});\r\nCommandEmpty.displayName = \"CommandEmpty\";\r\n\r\n/**\r\n * Groups related command items under an optional heading.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element\r\n * - Built on the shared command registry context\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandGroup heading='Suggestions'>\r\n * <CommandItem>Profile</CommandItem>\r\n * </CommandGroup>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Roles/group_role | ARIA Group Role}\r\n */\r\nconst CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\r\n ({children, className, forceMount = false, heading, value: _value, ...props}, ref) => {\r\n const groupId = React.useId();\r\n const {hasVisibleItemsInGroup, isFiltering} = useCommandContext(\"CommandGroup\");\r\n\r\n if (!forceMount && isFiltering && !hasVisibleItemsInGroup(groupId)) {\r\n return null;\r\n }\r\n\r\n return (\r\n <CommandGroupContext.Provider value={groupId}>\r\n <div\r\n ref={ref}\r\n className={cn(styles.group, className)}\r\n data-command-group=''\r\n {...props}>\r\n {heading ? <div className={styles.groupHeading}>{heading}</div> : null}\r\n {children}\r\n </div>\r\n </CommandGroupContext.Provider>\r\n );\r\n },\r\n);\r\nCommandGroup.displayName = \"CommandGroup\";\r\n\r\n/**\r\n * Renders a separator between command groups or item sections.\r\n *\r\n * @remarks\r\n * - Renders the shared separator primitive\r\n * - Built on Base UI Separator\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandSeparator />\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/separator | Base UI Separator Docs}\r\n */\r\nconst CommandSeparator = React.forwardRef<HTMLDivElement, CommandSeparatorProps>(\r\n ({alwaysRender = false, className, orientation = \"horizontal\", ...props}, ref) => {\r\n const {isFiltering} = useCommandContext(\"CommandSeparator\");\r\n\r\n if (isFiltering && !alwaysRender) {\r\n return null;\r\n }\r\n\r\n return (\r\n <BaseSeparator\r\n ref={ref}\r\n className={cn(styles.separator, className)}\r\n orientation={orientation}\r\n {...props}\r\n />\r\n );\r\n },\r\n);\r\nCommandSeparator.displayName = \"CommandSeparator\";\r\n\r\n/**\r\n * Renders a selectable command option with filtering metadata and keyboard support.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element with `role=\"option\"`\r\n * - Built on the shared command registry context\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandItem keywords={[\"preferences\"]}>Settings</CommandItem>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Roles/option_role | ARIA Option Role}\r\n */\r\nconst CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(\r\n ({children, className, disabled = false, forceMount = false, keywords = [], onClick, onMouseEnter, onSelect, value, ...props}, ref) => {\r\n const {activeItemId, disablePointerSelection, isFiltering, isItemVisible, registerItem, selectSpecificItem, unregisterItem} =\r\n useCommandContext(\"CommandItem\");\r\n const groupId = React.useContext(CommandGroupContext);\r\n const generatedId = React.useId();\r\n const itemReference = React.useRef<HTMLDivElement | null>(null);\r\n const keywordSignature = React.useMemo(() => keywords.join(\"\\u0000\"), [keywords]);\r\n\r\n React.useLayoutEffect(() => {\r\n const textValue = value ?? itemReference.current?.textContent?.trim() ?? \"\";\r\n\r\n registerItem({\r\n disabled,\r\n forceMount,\r\n groupId,\r\n id: generatedId,\r\n keywords,\r\n ref: itemReference,\r\n textValue,\r\n value,\r\n });\r\n }, [children, disabled, forceMount, generatedId, groupId, keywordSignature, keywords, registerItem, value]);\r\n\r\n React.useEffect(() => {\r\n return () => {\r\n unregisterItem(generatedId);\r\n };\r\n }, [generatedId, unregisterItem]);\r\n\r\n const isVisible = forceMount || !isFiltering || isItemVisible(generatedId);\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n const isSelected = activeItemId === generatedId;\r\n\r\n return (\r\n <div\r\n {...props}\r\n ref={(node) => {\r\n itemReference.current = node;\r\n assignRef(ref, node);\r\n }}\r\n aria-disabled={disabled || undefined}\r\n aria-selected={isSelected}\r\n className={cn(styles.item, className)}\r\n data-disabled={disabled ? \"true\" : undefined}\r\n data-selected={isSelected ? \"true\" : undefined}\r\n id={generatedId}\r\n onClick={(event) => {\r\n if (disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n selectSpecificItem(generatedId);\r\n onSelect?.(value ?? itemReference.current?.textContent?.trim() ?? \"\");\r\n onClick?.(event);\r\n }}\r\n onFocus={() => {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n selectSpecificItem(generatedId);\r\n }}\r\n onMouseEnter={(event) => {\r\n onMouseEnter?.(event);\r\n\r\n if (disabled || disablePointerSelection) {\r\n return;\r\n }\r\n\r\n selectSpecificItem(generatedId);\r\n }}\r\n role='option'\r\n tabIndex={disabled ? -1 : 0}>\r\n {children}\r\n </div>\r\n );\r\n },\r\n);\r\nCommandItem.displayName = \"CommandItem\";\r\n\r\n/**\r\n * Renders auxiliary shortcut text aligned to the edge of a command item.\r\n *\r\n * @remarks\r\n * - Renders a `<span>` element\r\n * - Built as a lightweight presentational helper for command menus\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandShortcut>⌘K</CommandShortcut>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/HTML/Element/span | HTML span element}\r\n */\r\nconst CommandShortcut = ({className, ...props}: Readonly<React.HTMLAttributes<HTMLSpanElement>>): React.JSX.Element => {\r\n return (\r\n <span\r\n className={cn(styles.shortcut, className)}\r\n {...props}\r\n />\r\n );\r\n};\r\nCommandShortcut.displayName = \"CommandShortcut\";\r\n\r\nexport {Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut};\r\n"],"names":["CommandContext","React","CommandGroupContext","assignRef","ref","value","normalizeCommandValue","defaultCommandFilter","search","keywords","normalizedSearch","normalizedValue","useCommandContext","componentName","context","Error","Command","children","className","_defaultValue","disablePointerSelection","filter","label","loop","onKeyDown","_onValueChange","shouldFilter","_value","_vimBindings","props","activeItemId","setActiveItemId","setSearch","itemOrderReference","itemsReference","Map","itemsVersion","setItemsVersion","listId","registerItem","item","existingItem","nextItem","hasChanged","currentVersion","unregisterItem","itemId","items","firstItem","secondItem","isFiltering","isItemVisible","itemValue","itemFilter","visibleItems","selectableItems","selectSpecificItem","selectNextItem","currentIndex","nextIndex","selectPreviousItem","previousIndex","triggerActiveItem","hasVisibleItemsInGroup","groupId","getVisibleItemCount","contextValue","cn","styles","event","CommandDialog","open","onOpenChange","title","BaseDialog","CommandInput","onChange","onValueChange","isControlled","undefined","inputValue","Search","nextSearchValue","CommandList","CommandEmpty","CommandGroup","forceMount","heading","CommandSeparator","alwaysRender","orientation","BaseSeparator","CommandItem","disabled","onClick","onMouseEnter","onSelect","generatedId","itemReference","keywordSignature","textValue","isVisible","isSelected","node","CommandShortcut"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components/ui/command.js","sources":["../../../src/components/ui/command.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {Dialog as BaseDialog} from \"@base-ui/react/dialog\";\r\nimport {Separator as BaseSeparator} from \"@base-ui/react/separator\";\r\nimport {Search} from \"lucide-react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nimport styles from \"./command.module.css\";\r\n\r\ntype CommandFilter = (value: string, search: string, keywords?: string[]) => number;\r\n\r\ninterface CommandProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * Command palette content.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Accessible label announced for the command region.\r\n * @default undefined\r\n */\r\n label?: string;\r\n /**\r\n * Whether items should be filtered automatically as the search value changes.\r\n * @default true\r\n */\r\n shouldFilter?: boolean;\r\n /**\r\n * Custom scoring function used to determine whether an item matches the current search value.\r\n * @default undefined\r\n */\r\n filter?: CommandFilter;\r\n /**\r\n * Deprecated uncontrolled search value placeholder retained for API compatibility.\r\n * @default undefined\r\n */\r\n defaultValue?: string;\r\n /**\r\n * Deprecated controlled search value placeholder retained for API compatibility.\r\n * @default undefined\r\n */\r\n value?: string;\r\n /**\r\n * Deprecated change callback retained for API compatibility.\r\n * @default undefined\r\n */\r\n onValueChange?: (value: string) => void;\r\n /**\r\n * Whether keyboard navigation should wrap from the last item to the first.\r\n * @default false\r\n */\r\n loop?: boolean;\r\n /**\r\n * Whether pointer hover should avoid changing the active item.\r\n * @default false\r\n */\r\n disablePointerSelection?: boolean;\r\n /**\r\n * Deprecated Vim keybinding toggle retained for API compatibility.\r\n * @default undefined\r\n */\r\n vimBindings?: boolean;\r\n}\r\n\r\ninterface CommandDialogProps extends Omit<React.ComponentPropsWithoutRef<typeof BaseDialog.Root>, \"children\"> {\r\n /**\r\n * Command palette content rendered inside the dialog popup.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Accessible dialog title announced to assistive technologies.\r\n * @default \"Command menu\"\r\n */\r\n title?: React.ReactNode;\r\n}\r\n\r\ninterface CommandInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"type\" | \"value\"> {\r\n /**\r\n * Controlled search value.\r\n * @default undefined\r\n */\r\n value?: string;\r\n /**\r\n * Native input change handler invoked before the command-specific callback.\r\n * @default undefined\r\n */\r\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\r\n /**\r\n * Callback fired when the command search value changes.\r\n * @default undefined\r\n */\r\n onValueChange?: (search: string) => void;\r\n}\r\n\r\ninterface CommandListProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * Command items and groups.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Accessible label for the listbox container.\r\n * @default undefined\r\n */\r\n label?: string;\r\n}\r\n\r\ninterface CommandGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"value\"> {\r\n /**\r\n * Group contents.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Optional visual heading displayed above the group items.\r\n * @default undefined\r\n */\r\n heading?: React.ReactNode;\r\n /**\r\n * Optional stable value retained for API compatibility.\r\n * @default undefined\r\n */\r\n value?: string;\r\n /**\r\n * Whether the group should remain rendered even when it has no visible items.\r\n * @default false\r\n */\r\n forceMount?: boolean;\r\n}\r\n\r\ninterface CommandSeparatorProps extends React.ComponentPropsWithoutRef<typeof BaseSeparator> {\r\n /**\r\n * Whether the separator should remain visible while filtering is active.\r\n * @default false\r\n */\r\n alwaysRender?: boolean;\r\n}\r\n\r\ninterface CommandItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\r\n /**\r\n * Item contents.\r\n * @default undefined\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Whether the item is disabled and should be skipped by selection logic.\r\n * @default false\r\n */\r\n disabled?: boolean;\r\n /**\r\n * Callback invoked when the item is selected.\r\n * @default undefined\r\n */\r\n onSelect?: (value: string) => void;\r\n /**\r\n * Optional value used for filtering and selection callbacks.\r\n * @default undefined\r\n */\r\n value?: string;\r\n /**\r\n * Additional search keywords included in the filter match set.\r\n * @default []\r\n */\r\n keywords?: string[];\r\n /**\r\n * Whether the item should remain rendered even when filtered out.\r\n * @default false\r\n */\r\n forceMount?: boolean;\r\n}\r\n\r\ninterface CommandRegisteredItem {\r\n disabled: boolean;\r\n forceMount: boolean;\r\n groupId: string | null;\r\n id: string;\r\n keywords: string[];\r\n order: number;\r\n ref: React.RefObject<HTMLDivElement | null>;\r\n textValue: string;\r\n value?: string;\r\n}\r\n\r\ninterface CommandContextValue {\r\n activeItemId: string | null;\r\n disablePointerSelection: boolean;\r\n getVisibleItemCount: () => number;\r\n hasVisibleItemsInGroup: (groupId: string) => boolean;\r\n isFiltering: boolean;\r\n isItemVisible: (itemId: string) => boolean;\r\n listId: string;\r\n loop: boolean;\r\n registerItem: (item: Omit<CommandRegisteredItem, \"order\">) => void;\r\n search: string;\r\n setSearch: (value: string) => void;\r\n selectNextItem: () => void;\r\n selectPreviousItem: () => void;\r\n selectSpecificItem: (itemId: string | null) => void;\r\n shouldFilter: boolean;\r\n triggerActiveItem: () => void;\r\n unregisterItem: (itemId: string) => void;\r\n}\r\n\r\nconst CommandContext = React.createContext<CommandContextValue | null>(null);\r\nconst CommandGroupContext = React.createContext<string | null>(null);\r\n\r\nfunction assignRef<TValue>(ref: React.ForwardedRef<TValue>, value: TValue): void {\r\n if (typeof ref === \"function\") {\r\n ref(value);\r\n return;\r\n }\r\n\r\n if (ref) {\r\n ref.current = value;\r\n }\r\n}\r\n\r\nfunction normalizeCommandValue(value: string): string {\r\n return value.trim().toLowerCase();\r\n}\r\n\r\nfunction defaultCommandFilter(value: string, search: string, keywords: string[] = []): number {\r\n if (search.length === 0) {\r\n return 1;\r\n }\r\n\r\n const normalizedSearch = normalizeCommandValue(search);\r\n const normalizedValue = normalizeCommandValue([value, ...keywords].join(\" \"));\r\n\r\n return normalizedValue.includes(normalizedSearch) ? 1 : 0;\r\n}\r\n\r\nfunction useCommandContext(componentName: string): CommandContextValue {\r\n const context = React.useContext(CommandContext);\r\n\r\n if (!context) {\r\n throw new Error(`${componentName} must be used within Command.`);\r\n }\r\n\r\n return context;\r\n}\r\n\r\n/**\r\n * Provides a lightweight, filterable command surface without depending on cmdk.\r\n *\r\n * @remarks\r\n * This wrapper preserves the existing compound-component API while replacing the\r\n * underlying implementation with a small context-driven registry. It supports\r\n * text filtering, arrow-key navigation, Enter-to-select, and pointer hover\r\n * selection for common command palette use cases.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Command label='Quick actions'>\r\n * <CommandInput placeholder='Search actions...' />\r\n * <CommandList>\r\n * <CommandItem onSelect={() => console.log(\"Open\")}>Open</CommandItem>\r\n * </CommandList>\r\n * </Command>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/dialog | Base UI Dialog Docs}\r\n */\r\nconst Command = React.forwardRef<HTMLDivElement, CommandProps>(\r\n (\r\n {\r\n children,\r\n className,\r\n defaultValue: _defaultValue,\r\n disablePointerSelection = false,\r\n filter,\r\n label,\r\n loop = false,\r\n onKeyDown,\r\n onValueChange: _onValueChange,\r\n shouldFilter = true,\r\n value: _value,\r\n vimBindings: _vimBindings,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [activeItemId, setActiveItemId] = React.useState<string | null>(null);\r\n const [search, setSearch] = React.useState(\"\");\r\n const itemOrderRef = React.useRef(0);\r\n const itemsRef = React.useRef(new Map<string, CommandRegisteredItem>());\r\n const [itemsVersion, setItemsVersion] = React.useState(0);\r\n const listId = React.useId();\r\n\r\n const registerItem = React.useCallback((item: Omit<CommandRegisteredItem, \"order\">): void => {\r\n const existingItem = itemsRef.current.get(item.id);\r\n const nextItem: CommandRegisteredItem = {\r\n ...item,\r\n order: existingItem?.order ?? itemOrderRef.current++,\r\n };\r\n\r\n const hasChanged =\r\n !existingItem\r\n || existingItem.disabled !== nextItem.disabled\r\n || existingItem.forceMount !== nextItem.forceMount\r\n || existingItem.groupId !== nextItem.groupId\r\n || existingItem.keywords.join(\"\\u0000\") !== nextItem.keywords.join(\"\\u0000\")\r\n || existingItem.ref !== nextItem.ref\r\n || existingItem.textValue !== nextItem.textValue\r\n || existingItem.value !== nextItem.value;\r\n\r\n if (!hasChanged) {\r\n return;\r\n }\r\n\r\n itemsRef.current.set(item.id, nextItem);\r\n setItemsVersion((currentVersion) => currentVersion + 1);\r\n }, []);\r\n\r\n const unregisterItem = React.useCallback((itemId: string): void => {\r\n if (!itemsRef.current.delete(itemId)) {\r\n return;\r\n }\r\n\r\n setItemsVersion((currentVersion) => currentVersion + 1);\r\n }, []);\r\n\r\n const items = React.useMemo(() => {\r\n return [...itemsRef.current.values()].toSorted((firstItem, secondItem) => firstItem.order - secondItem.order);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps -- itemsVersion is an intentional change counter\r\n }, [itemsVersion]);\r\n\r\n const isFiltering = shouldFilter && search.trim().length > 0;\r\n\r\n const isItemVisible = React.useCallback(\r\n (itemId: string): boolean => {\r\n const item = itemsRef.current.get(itemId);\r\n\r\n if (!item) {\r\n return false;\r\n }\r\n\r\n if (item.forceMount || !shouldFilter || search.trim().length === 0) {\r\n return true;\r\n }\r\n\r\n const itemValue = item.value ?? item.textValue;\r\n const itemFilter = filter ?? defaultCommandFilter;\r\n\r\n return itemFilter(itemValue, search, item.keywords) > 0;\r\n },\r\n [filter, search, shouldFilter],\r\n );\r\n\r\n const visibleItems = React.useMemo(() => items.filter((item) => isItemVisible(item.id)), [isItemVisible, items]);\r\n\r\n const selectableItems = React.useMemo(() => visibleItems.filter((item) => !item.disabled), [visibleItems]);\r\n\r\n React.useEffect(() => {\r\n if (selectableItems.length === 0) {\r\n // eslint-disable-next-line react-hooks-extra/no-direct-set-state-in-use-effect\r\n setActiveItemId(null);\r\n return;\r\n }\r\n\r\n if (!activeItemId || !selectableItems.some((item) => item.id === activeItemId)) {\r\n // eslint-disable-next-line react-hooks-extra/no-direct-set-state-in-use-effect\r\n setActiveItemId(selectableItems[0].id);\r\n }\r\n }, [activeItemId, selectableItems]);\r\n\r\n React.useEffect(() => {\r\n if (!activeItemId) {\r\n return;\r\n }\r\n\r\n itemsRef.current.get(activeItemId)?.ref.current?.scrollIntoView({\r\n block: \"nearest\",\r\n });\r\n }, [activeItemId]);\r\n\r\n const selectSpecificItem = React.useCallback((itemId: string | null): void => {\r\n setActiveItemId(itemId);\r\n }, []);\r\n\r\n const selectNextItem = React.useCallback((): void => {\r\n if (selectableItems.length === 0) {\r\n return;\r\n }\r\n\r\n const currentIndex = selectableItems.findIndex((item) => item.id === activeItemId);\r\n\r\n if (currentIndex === -1) {\r\n setActiveItemId(selectableItems[0].id);\r\n return;\r\n }\r\n\r\n const nextIndex = currentIndex + 1;\r\n\r\n if (nextIndex >= selectableItems.length) {\r\n setActiveItemId(loop ? selectableItems[0].id : selectableItems[currentIndex].id);\r\n return;\r\n }\r\n\r\n setActiveItemId(selectableItems[nextIndex].id);\r\n }, [activeItemId, loop, selectableItems]);\r\n\r\n const selectPreviousItem = React.useCallback((): void => {\r\n if (selectableItems.length === 0) {\r\n return;\r\n }\r\n\r\n const currentIndex = selectableItems.findIndex((item) => item.id === activeItemId);\r\n\r\n if (currentIndex === -1) {\r\n setActiveItemId(selectableItems[0].id);\r\n return;\r\n }\r\n\r\n const previousIndex = currentIndex - 1;\r\n\r\n if (previousIndex < 0) {\r\n setActiveItemId(loop ? (selectableItems.at(-1)?.id ?? selectableItems[0].id) : selectableItems[currentIndex].id);\r\n return;\r\n }\r\n\r\n setActiveItemId(selectableItems[previousIndex].id);\r\n }, [activeItemId, loop, selectableItems]);\r\n\r\n const triggerActiveItem = React.useCallback((): void => {\r\n if (!activeItemId) {\r\n return;\r\n }\r\n\r\n itemsRef.current.get(activeItemId)?.ref.current?.click();\r\n }, [activeItemId]);\r\n\r\n const hasVisibleItemsInGroup = React.useCallback(\r\n (groupId: string): boolean => visibleItems.some((item) => item.groupId === groupId),\r\n [visibleItems],\r\n );\r\n\r\n const getVisibleItemCount = React.useCallback((): number => visibleItems.length, [visibleItems.length]);\r\n\r\n const contextValue = React.useMemo<CommandContextValue>(\r\n () => ({\r\n activeItemId,\r\n disablePointerSelection,\r\n getVisibleItemCount,\r\n hasVisibleItemsInGroup,\r\n isFiltering,\r\n isItemVisible,\r\n listId,\r\n loop,\r\n registerItem,\r\n search,\r\n setSearch,\r\n selectNextItem,\r\n selectPreviousItem,\r\n selectSpecificItem,\r\n shouldFilter,\r\n triggerActiveItem,\r\n unregisterItem,\r\n }),\r\n [\r\n activeItemId,\r\n disablePointerSelection,\r\n getVisibleItemCount,\r\n hasVisibleItemsInGroup,\r\n isFiltering,\r\n isItemVisible,\r\n listId,\r\n loop,\r\n registerItem,\r\n search,\r\n setSearch,\r\n selectNextItem,\r\n selectPreviousItem,\r\n selectSpecificItem,\r\n shouldFilter,\r\n triggerActiveItem,\r\n unregisterItem,\r\n ],\r\n );\r\n\r\n return (\r\n <CommandContext.Provider value={contextValue}>\r\n <div\r\n ref={ref}\r\n aria-label={label}\r\n className={cn(styles.command, className)}\r\n role='toolbar'\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n switch (event.key) {\r\n case \"ArrowDown\": {\r\n event.preventDefault();\r\n selectNextItem();\r\n break;\r\n }\r\n\r\n case \"ArrowUp\": {\r\n event.preventDefault();\r\n selectPreviousItem();\r\n break;\r\n }\r\n\r\n case \"Home\": {\r\n if (selectableItems.length === 0) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n setActiveItemId(selectableItems[0].id);\r\n break;\r\n }\r\n\r\n case \"End\": {\r\n if (selectableItems.length === 0) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n setActiveItemId(selectableItems.at(-1)?.id ?? selectableItems[0].id);\r\n break;\r\n }\r\n\r\n case \"Enter\": {\r\n if (event.nativeEvent.isComposing) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n triggerActiveItem();\r\n break;\r\n }\r\n\r\n default: {\r\n break;\r\n }\r\n }\r\n }}\r\n {...props}>\r\n {children}\r\n </div>\r\n </CommandContext.Provider>\r\n );\r\n },\r\n);\r\nCommand.displayName = \"Command\";\r\n\r\n/**\r\n * Renders the command surface inside a modal dialog.\r\n *\r\n * @remarks\r\n * - Renders a Base UI dialog popup\r\n * - Built on Base UI Dialog primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandDialog open={open} onOpenChange={setOpen}>\r\n * <CommandInput placeholder='Search...' />\r\n * </CommandDialog>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/dialog | Base UI Dialog Docs}\r\n */\r\nfunction CommandDialog({children, open, onOpenChange, title = \"Command menu\", ...props}: Readonly<CommandDialogProps>): React.JSX.Element {\r\n return (\r\n <BaseDialog.Root\r\n open={open}\r\n onOpenChange={onOpenChange}\r\n {...props}>\r\n <BaseDialog.Portal>\r\n <BaseDialog.Backdrop className={styles.backdrop} />\r\n <BaseDialog.Popup className={styles.dialogPopup}>\r\n <BaseDialog.Title className={styles.srOnly}>{title}</BaseDialog.Title>\r\n <Command>{children}</Command>\r\n </BaseDialog.Popup>\r\n </BaseDialog.Portal>\r\n </BaseDialog.Root>\r\n );\r\n}\r\nCommandDialog.displayName = \"CommandDialog\";\r\n\r\n/**\r\n * Provides the searchable input surface for a command palette.\r\n *\r\n * @remarks\r\n * - Renders an `<input>` element inside a wrapper `<div>`\r\n * - Built on the shared command registry context\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandInput placeholder='Search...' />\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Roles/combobox_role | ARIA Combobox Role}\r\n */\r\nconst CommandInput = React.forwardRef<HTMLInputElement, CommandInputProps>(({className, onChange, onValueChange, value, ...props}, ref) => {\r\n const {activeItemId, listId, search, selectSpecificItem, setSearch} = useCommandContext(\"CommandInput\");\r\n const isControlled = value !== undefined;\r\n const inputValue = isControlled ? value : search;\r\n\r\n React.useEffect(() => {\r\n if (!isControlled) {\r\n return;\r\n }\r\n\r\n setSearch(value ?? \"\");\r\n }, [isControlled, setSearch, value]);\r\n\r\n return (\r\n <div className={styles.inputWrapper}>\r\n <Search className={styles.searchIcon} />\r\n <input\r\n ref={ref}\r\n aria-activedescendant={activeItemId ?? undefined}\r\n aria-autocomplete='list'\r\n aria-controls={listId}\r\n aria-expanded='true'\r\n className={cn(styles.input, className)}\r\n onChange={(event) => {\r\n onChange?.(event);\r\n\r\n const nextSearchValue = event.currentTarget.value;\r\n setSearch(nextSearchValue);\r\n onValueChange?.(nextSearchValue);\r\n selectSpecificItem(null);\r\n }}\r\n role='combobox'\r\n type='text'\r\n value={inputValue}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n});\r\nCommandInput.displayName = \"CommandInput\";\r\n\r\n/**\r\n * Renders the listbox container that hosts command items and groups.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element with `role=\"listbox\"`\r\n * - Built on the shared command registry context\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandList>\r\n * <CommandItem>Settings</CommandItem>\r\n * </CommandList>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Roles/listbox_role | ARIA Listbox Role}\r\n */\r\nconst CommandList = React.forwardRef<HTMLDivElement, CommandListProps>(({className, label, ...props}, ref) => {\r\n const {listId} = useCommandContext(\"CommandList\");\r\n\r\n return (\r\n <div\r\n aria-label={label}\r\n ref={ref}\r\n className={cn(styles.list, className)}\r\n id={listId}\r\n role='listbox'\r\n {...props}\r\n />\r\n );\r\n});\r\nCommandList.displayName = \"CommandList\";\r\n\r\n/**\r\n * Renders a fallback empty-state message when no command items are visible.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element with `role=\"status\"`\r\n * - Built on the shared command registry context\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandEmpty>No results found.</CommandEmpty>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Roles/status_role | ARIA Status Role}\r\n */\r\nconst CommandEmpty = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({className, ...props}, ref) => {\r\n const {getVisibleItemCount} = useCommandContext(\"CommandEmpty\");\r\n\r\n if (getVisibleItemCount() > 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(styles.empty, className)}\r\n role='status'\r\n {...props}\r\n />\r\n );\r\n});\r\nCommandEmpty.displayName = \"CommandEmpty\";\r\n\r\n/**\r\n * Groups related command items under an optional heading.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element\r\n * - Built on the shared command registry context\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandGroup heading='Suggestions'>\r\n * <CommandItem>Profile</CommandItem>\r\n * </CommandGroup>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Roles/group_role | ARIA Group Role}\r\n */\r\nconst CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\r\n ({children, className, forceMount = false, heading, value: _value, ...props}, ref) => {\r\n const groupId = React.useId();\r\n const {hasVisibleItemsInGroup, isFiltering} = useCommandContext(\"CommandGroup\");\r\n\r\n if (!forceMount && isFiltering && !hasVisibleItemsInGroup(groupId)) {\r\n return null;\r\n }\r\n\r\n return (\r\n <CommandGroupContext.Provider value={groupId}>\r\n <div\r\n ref={ref}\r\n className={cn(styles.group, className)}\r\n data-command-group=''\r\n {...props}>\r\n {heading ? <div className={styles.groupHeading}>{heading}</div> : null}\r\n {children}\r\n </div>\r\n </CommandGroupContext.Provider>\r\n );\r\n },\r\n);\r\nCommandGroup.displayName = \"CommandGroup\";\r\n\r\n/**\r\n * Renders a separator between command groups or item sections.\r\n *\r\n * @remarks\r\n * - Renders the shared separator primitive\r\n * - Built on Base UI Separator\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandSeparator />\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/separator | Base UI Separator Docs}\r\n */\r\nconst CommandSeparator = React.forwardRef<HTMLDivElement, CommandSeparatorProps>(\r\n ({alwaysRender = false, className, orientation = \"horizontal\", ...props}, ref) => {\r\n const {isFiltering} = useCommandContext(\"CommandSeparator\");\r\n\r\n if (isFiltering && !alwaysRender) {\r\n return null;\r\n }\r\n\r\n return (\r\n <BaseSeparator\r\n ref={ref}\r\n className={cn(styles.separator, className)}\r\n orientation={orientation}\r\n {...props}\r\n />\r\n );\r\n },\r\n);\r\nCommandSeparator.displayName = \"CommandSeparator\";\r\n\r\n/**\r\n * Renders a selectable command option with filtering metadata and keyboard support.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element with `role=\"option\"`\r\n * - Built on the shared command registry context\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandItem keywords={[\"preferences\"]}>Settings</CommandItem>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Roles/option_role | ARIA Option Role}\r\n */\r\nconst CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(\r\n ({children, className, disabled = false, forceMount = false, keywords = [], onClick, onMouseEnter, onSelect, value, ...props}, ref) => {\r\n const {activeItemId, disablePointerSelection, isFiltering, isItemVisible, registerItem, selectSpecificItem, unregisterItem} =\r\n useCommandContext(\"CommandItem\");\r\n const groupId = React.useContext(CommandGroupContext);\r\n const generatedId = React.useId();\r\n const itemRef = React.useRef<HTMLDivElement | null>(null);\r\n const keywordSignature = React.useMemo(() => keywords.join(\"\\u0000\"), [keywords]);\r\n\r\n React.useLayoutEffect(() => {\r\n const textValue = value ?? itemRef.current?.textContent?.trim() ?? \"\";\r\n\r\n registerItem({\r\n disabled,\r\n forceMount,\r\n groupId,\r\n id: generatedId,\r\n keywords,\r\n ref: itemRef,\r\n textValue,\r\n value,\r\n });\r\n }, [children, disabled, forceMount, generatedId, groupId, keywordSignature, keywords, registerItem, value]);\r\n\r\n React.useEffect(() => {\r\n return () => {\r\n unregisterItem(generatedId);\r\n };\r\n }, [generatedId, unregisterItem]);\r\n\r\n const isVisible = forceMount || !isFiltering || isItemVisible(generatedId);\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n const isSelected = activeItemId === generatedId;\r\n\r\n return (\r\n <div\r\n {...props}\r\n ref={(node) => {\r\n itemRef.current = node;\r\n assignRef(ref, node);\r\n }}\r\n aria-disabled={disabled || undefined}\r\n aria-selected={isSelected}\r\n className={cn(styles.item, className)}\r\n data-disabled={disabled ? \"true\" : undefined}\r\n data-selected={isSelected ? \"true\" : undefined}\r\n id={generatedId}\r\n onClick={(event) => {\r\n if (disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n selectSpecificItem(generatedId);\r\n onSelect?.(value ?? itemRef.current?.textContent?.trim() ?? \"\");\r\n onClick?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n if (disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n selectSpecificItem(generatedId);\r\n onSelect?.(value ?? itemRef.current?.textContent?.trim() ?? \"\");\r\n }\r\n }}\r\n onFocus={() => {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n selectSpecificItem(generatedId);\r\n }}\r\n onMouseEnter={(event) => {\r\n onMouseEnter?.(event);\r\n\r\n if (disabled || disablePointerSelection) {\r\n return;\r\n }\r\n\r\n selectSpecificItem(generatedId);\r\n }}\r\n role='option'\r\n tabIndex={disabled ? -1 : 0}>\r\n {children}\r\n </div>\r\n );\r\n },\r\n);\r\nCommandItem.displayName = \"CommandItem\";\r\n\r\n/**\r\n * Renders auxiliary shortcut text aligned to the edge of a command item.\r\n *\r\n * @remarks\r\n * - Renders a `<span>` element\r\n * - Built as a lightweight presentational helper for command menus\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandShortcut>⌘K</CommandShortcut>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/HTML/Element/span | HTML span element}\r\n */\r\nconst CommandShortcut = ({className, ...props}: Readonly<React.HTMLAttributes<HTMLSpanElement>>): React.JSX.Element => {\r\n return (\r\n <span\r\n className={cn(styles.shortcut, className)}\r\n {...props}\r\n />\r\n );\r\n};\r\nCommandShortcut.displayName = \"CommandShortcut\";\r\n\r\nexport {Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut};\r\n"],"names":["CommandContext","React","CommandGroupContext","assignRef","ref","value","normalizeCommandValue","defaultCommandFilter","search","keywords","normalizedSearch","normalizedValue","useCommandContext","componentName","context","Error","Command","children","className","_defaultValue","disablePointerSelection","filter","label","loop","onKeyDown","_onValueChange","shouldFilter","_value","_vimBindings","props","activeItemId","setActiveItemId","setSearch","itemOrderRef","itemsRef","Map","itemsVersion","setItemsVersion","listId","registerItem","item","existingItem","nextItem","hasChanged","currentVersion","unregisterItem","itemId","items","firstItem","secondItem","isFiltering","isItemVisible","itemValue","itemFilter","visibleItems","selectableItems","selectSpecificItem","selectNextItem","currentIndex","nextIndex","selectPreviousItem","previousIndex","triggerActiveItem","hasVisibleItemsInGroup","groupId","getVisibleItemCount","contextValue","cn","styles","event","CommandDialog","open","onOpenChange","title","BaseDialog","CommandInput","onChange","onValueChange","isControlled","undefined","inputValue","Search","nextSearchValue","CommandList","CommandEmpty","CommandGroup","forceMount","heading","CommandSeparator","alwaysRender","orientation","BaseSeparator","CommandItem","disabled","onClick","onMouseEnter","onSelect","generatedId","itemRef","keywordSignature","textValue","isVisible","isSelected","node","CommandShortcut"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../../src/components/ui/context-menu.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../../src/components/ui/context-menu.tsx"],"names":[],"mappings":"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"}
|