@bioturing/components 0.46.0 → 0.46.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/components/code-block/component.js +58 -58
  2. package/dist/components/code-block/component.js.map +1 -1
  3. package/dist/components/collapse/component.js +6 -6
  4. package/dist/components/collapse/component.js.map +1 -1
  5. package/dist/components/combobox/component.d.ts.map +1 -1
  6. package/dist/components/combobox/component.js +228 -220
  7. package/dist/components/combobox/component.js.map +1 -1
  8. package/dist/components/combobox/style.css +1 -1
  9. package/dist/components/command-palette/component.d.ts.map +1 -1
  10. package/dist/components/command-palette/component.js +30 -24
  11. package/dist/components/command-palette/component.js.map +1 -1
  12. package/dist/components/drag-drop/droppable.d.ts.map +1 -1
  13. package/dist/components/drag-drop/droppable.js +72 -68
  14. package/dist/components/drag-drop/droppable.js.map +1 -1
  15. package/dist/components/drag-drop/index.d.ts.map +1 -1
  16. package/dist/components/drag-drop/value.d.ts.map +1 -1
  17. package/dist/components/drag-drop/value.js +40 -56
  18. package/dist/components/drag-drop/value.js.map +1 -1
  19. package/dist/components/select-trigger/style.css +1 -1
  20. package/dist/components/theme-provider/style.css +1 -1
  21. package/dist/components/toast/component.d.ts.map +1 -1
  22. package/dist/components/toast/component.js +37 -35
  23. package/dist/components/toast/component.js.map +1 -1
  24. package/dist/components/tooltip/component.d.ts +1 -1
  25. package/dist/components/tooltip/component.d.ts.map +1 -1
  26. package/dist/components/tooltip/component.js +14 -4
  27. package/dist/components/tooltip/component.js.map +1 -1
  28. package/dist/stats.html +1 -1
  29. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../../src/components/combobox/component.tsx"],"sourcesContent":["\"use client\";\nimport { Combobox as BaseCombobox } from \"@base-ui/react/combobox\";\nimport DisabledContext from \"antd/es/config-provider/DisabledContext\";\nimport { FormItemInputContext } from \"antd/es/form/context\";\nimport { ValidateStatus } from \"antd/es/form/FormItem\";\nimport type { PopoverProps } from \"antd/es/popover\";\nimport React, {\n ForwardedRef,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { BaseMenuItem } from \"../base-menu\";\nimport { useControlledState } from \"../hooks\";\nimport { SelectTrigger } from \"../select-trigger\";\nimport { clsx, reactNodeToString, useCls } from \"../utils\";\n\nimport { XIcon } from \"@bioturing/assets\";\nimport { BaseMenu } from \"../base-menu\";\nimport { Empty } from \"../empty\";\nimport { splitBySeparators } from \"./utils\";\nimport \"./style.css\";\n\n// Module-level static renderers — avoid recreating on every render\nconst positionerRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Root {...props} />;\nconst popupRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Popup {...props} />;\nconst separatorRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Divider {...props} />;\nconst listRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.List {...props} />;\n\nexport type ComboboxOption<T extends React.Key, O extends Record<string, unknown> = {}> = {\n value: T;\n label: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n} & O;\n\nexport interface ComboboxProps<\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n> {\n /** Array of options to be displayed in the combobox */\n options?: ComboboxOption<T, O>[];\n /** Current value of the combobox */\n value?: M extends true ? T[] : T;\n /** Default value when uncontrolled */\n defaultValue?: M extends true ? T[] : T;\n /** Callback when value changes */\n onChange?: (value: M extends true ? T[] : T) => void;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Validation status */\n status?: ValidateStatus;\n /** Whether to allow clearing the selection */\n allowClear?: boolean;\n /** Whether to allow multiple selections */\n multiple?: M;\n /** Maximum number of tags to show */\n maxTagCount?: number;\n /** Whether to show search functionality */\n showSearch?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Placement of the dropdown */\n placement?: PopoverProps[\"placement\"];\n /** Custom className for the component */\n className?: string;\n /** Custom class names for different parts */\n classNames?: {\n trigger?: string;\n input?: string;\n option?: string;\n optionIcon?: string;\n optionText?: string;\n list?: string;\n portal?: string;\n };\n /** Size of the combobox */\n size?: \"small\" | \"middle\" | \"large\";\n /** Loading state */\n loading?: boolean;\n /** Custom render for options */\n optionRender?: (\n option: ComboboxOption<T, O>,\n props: React.HTMLAttributes<HTMLElement>,\n ) => React.ReactElement;\n /** Filter function for search */\n /**\n * Filter function for search\n * - `true` or `undefined`: default filtering (splits by tokenSeparators if provided)\n * - `false`: disables filtering\n * - custom function: `(input, option) => boolean`\n * @default true\n */\n filterOption?: boolean | ((input: string, option: ComboboxOption<T, O>) => boolean);\n /** Callback when search input changes */\n onSearch?: (value: string) => void;\n /** Custom dropdown render */\n dropdownRender?: (menu: React.ReactElement) => React.ReactElement;\n /** Custom clear icon */\n clearIcon?: React.ReactNode;\n /** Custom suffix icon */\n suffixIcon?: React.ReactNode;\n // /**\n // * Show selection summary instead of individual tags when multiple\n // * @default false\n // */\n // showSelectionSummary?: boolean;\n // /**\n // * Render function for the selection summary in multiple case\n // * @default (selectedValues) => `${selectedValues.length} items selected`\n // */\n // selectionSummaryRender?: (selectedValues: T[]) => React.ReactNode;\n /**\n * Show select all option when in multiple mode\n * @default false\n */\n showSelectAll?: boolean;\n /**\n * Render function for the select all option\n */\n selectAllRender?: (props: {\n onSelectAll: () => void;\n onDeselectAll: () => void;\n checked: boolean;\n indeterminate: boolean;\n }) => React.ReactNode;\n /**\n * Function to extract keywords from the item for search filtering\n * @default (option) => [String(option.key), reactNodeToString(option.label)]\n */\n getOptionKeywords?: (option: ComboboxOption<T, O>) => string[];\n /**\n * Render function for the option label\n */\n optionLabelRender?: (\n option: ComboboxOption<T, O>,\n props?: React.HTMLAttributes<HTMLElement>,\n ) => React.ReactElement;\n /**\n * Whether the popup width should match the trigger width.\n * When `false`, the popup can exceed the trigger width to fit long option labels.\n * @default true\n */\n popupMatchSelectWidth?: boolean;\n /**\n * Allow adding items by typing the exact label or value and pressing Enter.\n * @default false\n */\n addOnEnter?: boolean;\n /**\n * Characters to split input by when adding multiple items on Enter.\n * Only applies when `addOnEnter` and `multiple` are true.\n * @default undefined\n */\n tokenSeparators?: string[];\n /**\n * Automatically highlight the first matching item while filtering.\n * When enabled in single-select mode, Enter selects the highlighted\n * item natively and `addOnEnter` is ignored to avoid conflicts.\n * @default true\n */\n autoHighlight?: boolean;\n}\n\nconst ComboboxInner = <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n {\n options = [],\n value: controlledValue,\n defaultValue,\n onChange,\n placeholder = \"Select...\",\n disabled: disabledProp = false,\n status: statusProp,\n allowClear = false,\n multiple = false as M,\n showSearch: _showSearch = true,\n open: controlledOpen,\n onOpenChange,\n className,\n classNames,\n size = \"middle\",\n optionRender,\n onSearch,\n clearIcon,\n suffixIcon,\n placement = \"bottomLeft\",\n // showSelectionSummary: _showSelectionSummary = false,\n // selectionSummaryRender,\n showSelectAll = false,\n optionLabelRender,\n getOptionKeywords: _getOptionKeywords = (option: ComboboxOption<T, O>) => [\n String(option.value),\n reactNodeToString(option.label),\n ],\n popupMatchSelectWidth = true,\n addOnEnter = false,\n tokenSeparators,\n autoHighlight = true,\n filterOption,\n ...rest\n }: ComboboxProps<T, M, O>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) => {\n const [value, setValue] = useControlledState(\n controlledValue,\n onChange,\n defaultValue !== undefined ? defaultValue : multiple ? ([] as T[]) : undefined,\n );\n\n const [open, setOpen] = useControlledState(controlledOpen, onOpenChange, false);\n\n const cls = useCls();\n const inputContainerRef = useRef<HTMLDivElement>(null);\n\n // Get form context values\n const { status: contextStatus } = useContext(FormItemInputContext);\n const contextDisabled = useContext(DisabledContext);\n\n // Merge context values with props\n const mergedStatus = statusProp || contextStatus;\n const disabled = disabledProp || contextDisabled;\n\n const handleValueChange = useCallback(\n (newValue: M extends true ? T[] : T) => {\n setValue(newValue);\n onChange?.(newValue);\n },\n [setValue, onChange],\n );\n\n const handleSelectAll = useCallback(() => {\n if (multiple) {\n const allValues = options.map((option) => option.value);\n (handleValueChange as (v: T[]) => void)(allValues);\n }\n }, [multiple, options, handleValueChange]);\n\n const handleDeselectAll = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n }\n }, [multiple, handleValueChange]);\n\n const handleClear = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n } else {\n (handleValueChange as (v: T) => void)(undefined as T);\n }\n }, [multiple, handleValueChange]);\n\n // Prepare selected values\n const selectedValues = useMemo(() => {\n return Array.isArray(value) ? value : value ? [value] : [];\n }, [value]);\n\n // Build a Map for O(1) option lookups.\n // `options.find()` was being called 7+ times per render and inside\n // the hot `filter` path on every keystroke.\n const optionMap = useMemo(() => {\n const map = new Map<T, ComboboxOption<T, O>>();\n for (const opt of options) {\n map.set(opt.value, opt);\n }\n return map;\n }, [options]);\n\n // Select all option logic\n const selectAllOption = useMemo(() => {\n if (!showSelectAll || !multiple || options.length === 0) {\n return null;\n }\n\n const selectedFromFiltered = selectedValues.filter((val) => optionMap.has(val as T));\n const checked = selectedFromFiltered.length === options.length && options.length > 0;\n const indeterminate =\n selectedFromFiltered.length > 0 && selectedFromFiltered.length < options.length;\n\n return {\n checked,\n indeterminate,\n onToggle: () => {\n if (indeterminate || checked) {\n handleDeselectAll();\n } else {\n handleSelectAll();\n }\n },\n };\n }, [showSelectAll, multiple, options, optionMap, selectedValues, handleDeselectAll, handleSelectAll]);\n\n // Convert options to Base UI format\n const baseUIItems = useMemo(() => options.map((opt) => opt.value), [options]);\n\n // Get display value for SelectTrigger\n const displayValue = useMemo(() => {\n if (multiple) {\n return selectedValues.length > 0\n ? `${selectedValues.length} item${selectedValues.length === 1 ? \"\" : \"s\"} selected`\n : null;\n } else {\n const selectedOption = optionMap.get(selectedValues[0] as T);\n return selectedOption?.label || null;\n }\n }, [multiple, selectedValues, optionMap]);\n\n const inputClassName = clsx(\n cls(\"combobox-input\"),\n cls(`combobox-input-${size}`),\n mergedStatus && cls(`combobox-input-${mergedStatus}`),\n classNames?.input,\n );\n\n const itemToStringLabel = useCallback(\n (itemValue: T) => {\n const option = optionMap.get(itemValue);\n return reactNodeToString(option?.label || String(itemValue));\n },\n [optionMap],\n );\n\n const [searchValue, setSearchValue] = useState(\"\");\n\n const findOptionByInput = useCallback(\n (input: string): ComboboxOption<T, O> | undefined => {\n const trimmed = input.trim();\n if (!trimmed) return undefined;\n const lowerTrimmed = trimmed.toLowerCase();\n\n // Fast path: exact match by value (O(1))\n for (const [val, opt] of optionMap) {\n if (String(val).toLowerCase() === lowerTrimmed) {\n return opt;\n }\n }\n // Fallback: match by label\n for (const opt of optionMap.values()) {\n if (reactNodeToString(opt.label).toLowerCase() === lowerTrimmed) {\n return opt;\n }\n }\n return undefined;\n },\n [optionMap],\n );\n\n const handleAddOnEnter = useCallback(\n (input: string): boolean => {\n if (!addOnEnter || !input.trim()) return false;\n\n const tokens =\n multiple && tokenSeparators && tokenSeparators.length > 0\n ? splitBySeparators(input, tokenSeparators)\n : [input.trim()];\n\n const matchedValues: T[] = [];\n for (const token of tokens) {\n const option = findOptionByInput(token);\n if (option && !option.disabled) {\n matchedValues.push(option.value);\n }\n }\n\n if (matchedValues.length === 0) return false;\n\n if (multiple) {\n const current = Array.isArray(value) ? [...value] : [];\n const newValues = [...new Set([...current, ...matchedValues])];\n (handleValueChange as (v: T[]) => void)(newValues);\n } else {\n (handleValueChange as (v: T) => void)(matchedValues[0]);\n setOpen(false);\n }\n\n return true;\n },\n [\n addOnEnter,\n multiple,\n tokenSeparators,\n findOptionByInput,\n value,\n handleValueChange,\n setOpen,\n ],\n );\n\n const hasSeparator = useMemo(() => {\n if (!tokenSeparators || tokenSeparators.length === 0) return false;\n return tokenSeparators.some((sep) => searchValue.includes(sep));\n }, [searchValue, tokenSeparators]);\n\n const effectiveAutoHighlight = multiple ? autoHighlight && !hasSeparator : autoHighlight;\n\n const createInputKeyDownHandler = useCallback(\n (currentSearchValue: string) => (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" && addOnEnter && currentSearchValue) {\n // In single-select mode with autoHighlight, let Base UI handle Enter\n // to select the natively highlighted item instead of exact matching.\n if (!multiple && autoHighlight) return;\n\n const matched = handleAddOnEnter(currentSearchValue);\n if (matched) {\n event.preventDefault();\n setSearchValue(\"\");\n onSearch?.(\"\");\n }\n }\n },\n [addOnEnter, autoHighlight, multiple, handleAddOnEnter, onSearch],\n );\n\n const mergedFilter = useMemo(() => {\n if (filterOption === false) {\n return null;\n }\n\n if (typeof filterOption === \"function\") {\n return (itemValue: T, query: string) => {\n const option = optionMap.get(itemValue);\n return filterOption(query, option);\n };\n }\n\n return (itemValue: T, query: string) => {\n if (!query) return true;\n const option = optionMap.get(itemValue);\n if (!option) return false;\n\n const tokens =\n tokenSeparators && tokenSeparators.length > 0\n ? splitBySeparators(query, tokenSeparators)\n : [query];\n\n const keywords = _getOptionKeywords(option).map((k) => k.toLowerCase());\n\n return tokens.some((token) => {\n const lowerToken = token.toLowerCase();\n return keywords.some((keyword) => keyword.includes(lowerToken));\n });\n };\n }, [filterOption, optionMap, tokenSeparators, _getOptionKeywords]);\n\n return (\n <div ref={ref} className={clsx(cls(\"combobox\"), className)} {...rest}>\n <BaseCombobox.Root<T, M>\n value={\n (multiple ? selectedValues : (selectedValues[0] ?? null)) as M extends true\n ? T[]\n : T | null\n }\n onValueChange={(newValue) => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)(\n Array.isArray(newValue) ? (newValue as T[]) : [],\n );\n } else {\n (handleValueChange as (v: T) => void)(newValue as T);\n }\n }}\n inputValue={searchValue}\n onInputValueChange={(val: string) => {\n setSearchValue(val);\n onSearch?.(val);\n }}\n open={open}\n onOpenChange={setOpen}\n multiple={multiple}\n disabled={disabled}\n autoHighlight={effectiveAutoHighlight}\n items={baseUIItems}\n itemToStringLabel={itemToStringLabel}\n filter={mergedFilter}\n >\n {/* Single Selection Layout using SelectTrigger compound components */}\n {!multiple ? (\n <SelectTrigger.Root\n ref={inputContainerRef}\n as=\"div\"\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(classNames?.trigger, cls(\"combobox-trigger-single\"))}\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Input\n placeholder={placeholder}\n className={clsx(className, inputClassName)}\n disabled={disabled}\n onKeyDown={createInputKeyDownHandler(searchValue)}\n {...rest}\n />\n )}\n />\n <SelectTrigger.Clear\n render={(props) => <BaseCombobox.Clear {...props}></BaseCombobox.Clear>}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n ) : (\n /* Multiple Selection Layout using SelectTrigger compound components */\n <SelectTrigger.Root\n ref={inputContainerRef}\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(classNames?.trigger, cls(\"combobox-trigger-multiple\"))}\n as=\"div\"\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Chips className={clsx(cls(\"combobox-chips\"), className)} {...rest}>\n <BaseCombobox.Value>\n {(selectedItems) => (\n <>\n {selectedItems.map((item: T) => {\n const option = optionMap.get(item);\n return (\n <BaseCombobox.Chip key={item} className={clsx(cls(\"combobox-chip\"))}>\n {option?.icon && (\n <span className={clsx(cls(\"combobox-chip-icon\"))}>\n {option.icon}\n </span>\n )}\n <span className={clsx(cls(\"combobox-chip-text\"))}>\n {option\n ? optionLabelRender\n ? optionLabelRender(option)\n : option.label\n : item}\n </span>\n <BaseCombobox.ChipRemove\n className={clsx(cls(\"combobox-chip-remove\"))}\n >\n <XIcon />\n </BaseCombobox.ChipRemove>\n </BaseCombobox.Chip>\n );\n })}\n\n <BaseCombobox.Input\n placeholder={selectedItems.length > 0 ? \"\" : placeholder}\n className={inputClassName}\n disabled={disabled}\n onKeyDown={createInputKeyDownHandler(searchValue)}\n />\n </>\n )}\n </BaseCombobox.Value>\n </BaseCombobox.Chips>\n )}\n />\n <SelectTrigger.Clear\n render={(props) => <BaseCombobox.Clear {...props}></BaseCombobox.Clear>}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n )}\n\n <BaseCombobox.Portal>\n <BaseCombobox.Positioner\n anchor={inputContainerRef.current}\n sideOffset={4}\n side={placement.startsWith(\"top\") ? \"top\" : \"bottom\"}\n align={\n placement.endsWith(\"Right\")\n ? \"end\"\n : placement === \"top\" || placement === \"bottom\"\n ? \"center\"\n : \"start\"\n }\n render={positionerRender}\n >\n <BaseCombobox.Popup\n className={clsx(\n cls(\"combobox-popup\"),\n !popupMatchSelectWidth && cls(\"combobox-popup--auto-width\"),\n classNames?.portal,\n )}\n render={popupRender}\n >\n {/* Select All Option */}\n {selectAllOption && (\n <>\n <BaseMenuItem\n as=\"button\"\n type=\"button\"\n className={clsx(cls(\"combobox-select-all\"))}\n selected={selectAllOption.checked}\n onClick={selectAllOption.onToggle}\n indeterminate={selectAllOption.indeterminate}\n showCheckbox\n >\n Select All\n </BaseMenuItem>\n <BaseCombobox.Separator render={separatorRender} />\n </>\n )}\n <BaseCombobox.List\n className={clsx(cls(\"combobox-list\"), classNames?.list)}\n render={listRender}\n >\n {(item: T) => {\n const option = optionMap.get(item);\n if (!option) return null;\n const isSelected = (selectedValues as T[]).includes(item);\n return optionRender ? (\n optionRender(option, {})\n ) : (\n <BaseMenuItem\n key={option.value}\n disabled={option.disabled}\n selected={isSelected}\n showCheckbox={multiple}\n icon={option.icon}\n classNames={{\n root: clsx(classNames?.option),\n icon: classNames?.optionIcon,\n text: classNames?.optionText,\n }}\n labelRender={\n optionLabelRender\n ? (props: React.HTMLAttributes<HTMLElement>) =>\n optionLabelRender(option, props)\n : undefined\n }\n render={(props: React.HTMLAttributes<HTMLElement>) => (\n <BaseCombobox.Item\n value={item as T}\n disabled={option.disabled}\n {...props}\n data-disabled={option.disabled}\n data-selected={isSelected}\n />\n )}\n >\n {option.label}\n </BaseMenuItem>\n );\n }}\n </BaseCombobox.List>\n\n <BaseCombobox.Empty className={clsx(cls(\"combobox-empty\"))}>\n <Empty description=\"No options found\" />\n </BaseCombobox.Empty>\n </BaseCombobox.Popup>\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n </BaseCombobox.Root>\n </div>\n );\n};\n\nconst MainCombobox = forwardRef(ComboboxInner) as <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n props: ComboboxProps<T, M, O> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReturnType<typeof ComboboxInner>;\n\nexport const Combobox = Object.assign(MainCombobox, {\n // Add any sub components here if needed\n});\n\nexport default Combobox;\n"],"names":["positionerRender","props","jsx","BaseMenu","popupRender","separatorRender","listRender","ComboboxInner","options","controlledValue","defaultValue","onChange","placeholder","disabledProp","statusProp","allowClear","multiple","_showSearch","controlledOpen","onOpenChange","className","classNames","size","optionRender","onSearch","clearIcon","suffixIcon","placement","showSelectAll","optionLabelRender","_getOptionKeywords","option","reactNodeToString","popupMatchSelectWidth","addOnEnter","tokenSeparators","autoHighlight","filterOption","rest","ref","value","setValue","useControlledState","open","setOpen","cls","useCls","inputContainerRef","useRef","contextStatus","useContext","FormItemInputContext","contextDisabled","DisabledContext","mergedStatus","disabled","handleValueChange","useCallback","newValue","handleSelectAll","allValues","handleDeselectAll","handleClear","selectedValues","useMemo","optionMap","map","opt","selectAllOption","selectedFromFiltered","val","checked","indeterminate","baseUIItems","displayValue","inputClassName","clsx","itemToStringLabel","itemValue","searchValue","setSearchValue","useState","findOptionByInput","input","trimmed","lowerTrimmed","handleAddOnEnter","tokens","splitBySeparators","matchedValues","token","current","newValues","hasSeparator","sep","effectiveAutoHighlight","createInputKeyDownHandler","currentSearchValue","event","mergedFilter","query","keywords","k","lowerToken","keyword","jsxs","BaseCombobox","SelectTrigger","children","selectedItems","Fragment","item","XIcon","icon","BaseMenuItem","isSelected","Empty","MainCombobox","forwardRef","Combobox"],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sources":["../../../src/components/combobox/component.tsx"],"sourcesContent":["\"use client\";\nimport { Combobox as BaseCombobox } from \"@base-ui/react/combobox\";\nimport DisabledContext from \"antd/es/config-provider/DisabledContext\";\nimport { FormItemInputContext } from \"antd/es/form/context\";\nimport { ValidateStatus } from \"antd/es/form/FormItem\";\nimport type { PopoverProps } from \"antd/es/popover\";\nimport React, {\n ForwardedRef,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { BaseMenuItem } from \"../base-menu\";\nimport { useControlledState } from \"../hooks\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { SelectTrigger } from \"../select-trigger\";\nimport { clsx, reactNodeToString, useCls } from \"../utils\";\n\nimport { XIcon } from \"@bioturing/assets\";\nimport { BaseMenu } from \"../base-menu\";\nimport { Empty } from \"../empty\";\nimport { splitBySeparators } from \"./utils\";\nimport \"./style.css\";\n\n// Module-level static renderers — avoid recreating on every render\nconst positionerRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Root {...props} />;\nconst popupRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Popup {...props} />;\nconst separatorRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Divider {...props} />;\nconst listRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.List {...props} />;\n\nexport type ComboboxOption<T extends React.Key, O extends Record<string, unknown> = {}> = {\n value: T;\n label: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n} & O;\n\nexport interface ComboboxProps<\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n> {\n /** Array of options to be displayed in the combobox */\n options?: ComboboxOption<T, O>[];\n /** Current value of the combobox */\n value?: M extends true ? T[] : T;\n /** Default value when uncontrolled */\n defaultValue?: M extends true ? T[] : T;\n /** Callback when value changes */\n onChange?: (value: M extends true ? T[] : T) => void;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Validation status */\n status?: ValidateStatus;\n /** Whether to allow clearing the selection */\n allowClear?: boolean;\n /** Whether to allow multiple selections */\n multiple?: M;\n /** Maximum number of tags to show */\n maxTagCount?: number;\n /** Whether to show search functionality */\n showSearch?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Placement of the dropdown */\n placement?: PopoverProps[\"placement\"];\n /** Custom className for the component */\n className?: string;\n /** Custom class names for different parts */\n classNames?: {\n trigger?: string;\n input?: string;\n option?: string;\n optionIcon?: string;\n optionText?: string;\n list?: string;\n portal?: string;\n };\n /** Size of the combobox */\n size?: \"small\" | \"middle\" | \"large\";\n /** Loading state */\n loading?: boolean;\n /** Custom render for options */\n optionRender?: (\n option: ComboboxOption<T, O>,\n props: React.HTMLAttributes<HTMLElement>,\n ) => React.ReactElement;\n /** Filter function for search */\n /**\n * Filter function for search\n * - `true` or `undefined`: default filtering (splits by tokenSeparators if provided)\n * - `false`: disables filtering\n * - custom function: `(input, option) => boolean`\n * @default true\n */\n filterOption?: boolean | ((input: string, option: ComboboxOption<T, O>) => boolean);\n /** Callback when search input changes */\n onSearch?: (value: string) => void;\n /** Custom dropdown render */\n dropdownRender?: (menu: React.ReactElement) => React.ReactElement;\n /** Custom clear icon */\n clearIcon?: React.ReactNode;\n /** Custom suffix icon */\n suffixIcon?: React.ReactNode;\n // /**\n // * Show selection summary instead of individual tags when multiple\n // * @default false\n // */\n // showSelectionSummary?: boolean;\n // /**\n // * Render function for the selection summary in multiple case\n // * @default (selectedValues) => `${selectedValues.length} items selected`\n // */\n // selectionSummaryRender?: (selectedValues: T[]) => React.ReactNode;\n /**\n * Show select all option when in multiple mode\n * @default false\n */\n showSelectAll?: boolean;\n /**\n * Render function for the select all option\n */\n selectAllRender?: (props: {\n onSelectAll: () => void;\n onDeselectAll: () => void;\n checked: boolean;\n indeterminate: boolean;\n }) => React.ReactNode;\n /**\n * Function to extract keywords from the item for search filtering\n * @default (option) => [String(option.key), reactNodeToString(option.label)]\n */\n getOptionKeywords?: (option: ComboboxOption<T, O>) => string[];\n /**\n * Render function for the option label\n */\n optionLabelRender?: (\n option: ComboboxOption<T, O>,\n props?: React.HTMLAttributes<HTMLElement>,\n ) => React.ReactElement;\n /**\n * Whether the popup width should match the trigger width.\n * When `false`, the popup can exceed the trigger width to fit long option labels.\n * @default true\n */\n popupMatchSelectWidth?: boolean;\n /**\n * Allow adding items by typing the exact label or value and pressing Enter.\n * @default false\n */\n addOnEnter?: boolean;\n /**\n * Characters to split input by when adding multiple items on Enter.\n * Only applies when `addOnEnter` and `multiple` are true.\n * @default undefined\n */\n tokenSeparators?: string[];\n /**\n * Automatically highlight the first matching item while filtering.\n * When enabled in single-select mode, Enter selects the highlighted\n * item natively and `addOnEnter` is ignored to avoid conflicts.\n * @default true\n */\n autoHighlight?: boolean;\n}\n\nconst ComboboxInner = <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n {\n options = [],\n value: controlledValue,\n defaultValue,\n onChange,\n placeholder = \"Select...\",\n disabled: disabledProp = false,\n status: statusProp,\n allowClear = false,\n multiple = false as M,\n showSearch: _showSearch = true,\n open: controlledOpen,\n onOpenChange,\n className,\n classNames,\n size = \"middle\",\n optionRender,\n onSearch,\n clearIcon,\n suffixIcon,\n placement = \"bottomLeft\",\n // showSelectionSummary: _showSelectionSummary = false,\n // selectionSummaryRender,\n showSelectAll = false,\n optionLabelRender,\n getOptionKeywords: _getOptionKeywords = (option: ComboboxOption<T, O>) => [\n String(option.value),\n reactNodeToString(option.label),\n ],\n popupMatchSelectWidth = true,\n addOnEnter = false,\n tokenSeparators,\n autoHighlight = true,\n filterOption,\n ...rest\n }: ComboboxProps<T, M, O>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) => {\n const [value, setValue] = useControlledState(\n controlledValue,\n onChange,\n defaultValue !== undefined ? defaultValue : multiple ? ([] as T[]) : undefined,\n );\n\n const [open, setOpen] = useControlledState(controlledOpen, onOpenChange, false);\n\n const cls = useCls();\n const inputContainerRef = useRef<HTMLDivElement>(null);\n\n // Get form context values\n const { status: contextStatus } = useContext(FormItemInputContext);\n const contextDisabled = useContext(DisabledContext);\n\n // Merge context values with props\n const mergedStatus = statusProp || contextStatus;\n const disabled = disabledProp || contextDisabled;\n\n const handleValueChange = useCallback(\n (newValue: M extends true ? T[] : T) => {\n setValue(newValue);\n onChange?.(newValue);\n },\n [setValue, onChange],\n );\n\n const handleSelectAll = useCallback(() => {\n if (multiple) {\n const allValues = options.map((option) => option.value);\n (handleValueChange as (v: T[]) => void)(allValues);\n }\n }, [multiple, options, handleValueChange]);\n\n const handleDeselectAll = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n }\n }, [multiple, handleValueChange]);\n\n const handleClear = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n } else {\n (handleValueChange as (v: T) => void)(undefined as T);\n }\n }, [multiple, handleValueChange]);\n\n // Prepare selected values\n const selectedValues = useMemo(() => {\n return Array.isArray(value) ? value : value ? [value] : [];\n }, [value]);\n\n // Build a Map for O(1) option lookups.\n // `options.find()` was being called 7+ times per render and inside\n // the hot `filter` path on every keystroke.\n const optionMap = useMemo(() => {\n const map = new Map<T, ComboboxOption<T, O>>();\n for (const opt of options) {\n map.set(opt.value, opt);\n }\n return map;\n }, [options]);\n\n // Select all option logic\n const selectAllOption = useMemo(() => {\n if (!showSelectAll || !multiple || options.length === 0) {\n return null;\n }\n\n const selectedFromFiltered = selectedValues.filter((val) => optionMap.has(val as T));\n const checked = selectedFromFiltered.length === options.length && options.length > 0;\n const indeterminate =\n selectedFromFiltered.length > 0 && selectedFromFiltered.length < options.length;\n\n return {\n checked,\n indeterminate,\n onToggle: () => {\n if (indeterminate || checked) {\n handleDeselectAll();\n } else {\n handleSelectAll();\n }\n },\n };\n }, [showSelectAll, multiple, options, optionMap, selectedValues, handleDeselectAll, handleSelectAll]);\n\n // Convert options to Base UI format\n const baseUIItems = useMemo(() => options.map((opt) => opt.value), [options]);\n\n // Get display value for SelectTrigger\n const displayValue = useMemo(() => {\n if (multiple) {\n return selectedValues.length > 0\n ? `${selectedValues.length} item${selectedValues.length === 1 ? \"\" : \"s\"} selected`\n : null;\n } else {\n const selectedOption = optionMap.get(selectedValues[0] as T);\n return selectedOption?.label || null;\n }\n }, [multiple, selectedValues, optionMap]);\n\n const inputClassName = clsx(\n cls(\"combobox-input\"),\n cls(`combobox-input-${size}`),\n mergedStatus && cls(`combobox-input-${mergedStatus}`),\n classNames?.input,\n );\n\n const itemToStringLabel = useCallback(\n (itemValue: T) => {\n const option = optionMap.get(itemValue);\n return reactNodeToString(option?.label || String(itemValue));\n },\n [optionMap],\n );\n\n const [searchValue, setSearchValue] = useState(\"\");\n\n const findOptionByInput = useCallback(\n (input: string): ComboboxOption<T, O> | undefined => {\n const trimmed = input.trim();\n if (!trimmed) return undefined;\n const lowerTrimmed = trimmed.toLowerCase();\n\n // Fast path: exact match by value (O(1))\n for (const [val, opt] of optionMap) {\n if (String(val).toLowerCase() === lowerTrimmed) {\n return opt;\n }\n }\n // Fallback: match by label\n for (const opt of optionMap.values()) {\n if (reactNodeToString(opt.label).toLowerCase() === lowerTrimmed) {\n return opt;\n }\n }\n return undefined;\n },\n [optionMap],\n );\n\n const handleAddOnEnter = useCallback(\n (input: string): boolean => {\n if (!addOnEnter || !input.trim()) return false;\n\n const tokens =\n multiple && tokenSeparators && tokenSeparators.length > 0\n ? splitBySeparators(input, tokenSeparators)\n : [input.trim()];\n\n const matchedValues: T[] = [];\n for (const token of tokens) {\n const option = findOptionByInput(token);\n if (option && !option.disabled) {\n matchedValues.push(option.value);\n }\n }\n\n if (matchedValues.length === 0) return false;\n\n if (multiple) {\n const current = Array.isArray(value) ? [...value] : [];\n const newValues = [...new Set([...current, ...matchedValues])];\n (handleValueChange as (v: T[]) => void)(newValues);\n } else {\n (handleValueChange as (v: T) => void)(matchedValues[0]);\n setOpen(false);\n }\n\n return true;\n },\n [\n addOnEnter,\n multiple,\n tokenSeparators,\n findOptionByInput,\n value,\n handleValueChange,\n setOpen,\n ],\n );\n\n const hasSeparator = useMemo(() => {\n if (!tokenSeparators || tokenSeparators.length === 0) return false;\n return tokenSeparators.some((sep) => searchValue.includes(sep));\n }, [searchValue, tokenSeparators]);\n\n const effectiveAutoHighlight = multiple ? autoHighlight && !hasSeparator : autoHighlight;\n\n const createInputKeyDownHandler = useCallback(\n (currentSearchValue: string) => (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" && addOnEnter && currentSearchValue) {\n // In single-select mode with autoHighlight, let Base UI handle Enter\n // to select the natively highlighted item instead of exact matching.\n if (!multiple && autoHighlight) return;\n\n const matched = handleAddOnEnter(currentSearchValue);\n if (matched) {\n event.preventDefault();\n setSearchValue(\"\");\n onSearch?.(\"\");\n }\n }\n },\n [addOnEnter, autoHighlight, multiple, handleAddOnEnter, onSearch],\n );\n\n const mergedFilter = useMemo(() => {\n if (filterOption === false) {\n return null;\n }\n\n if (typeof filterOption === \"function\") {\n return (itemValue: T, query: string) => {\n const option = optionMap.get(itemValue);\n return filterOption(query, option);\n };\n }\n\n return (itemValue: T, query: string) => {\n if (!query) return true;\n const option = optionMap.get(itemValue);\n if (!option) return false;\n\n const tokens =\n tokenSeparators && tokenSeparators.length > 0\n ? splitBySeparators(query, tokenSeparators)\n : [query];\n\n const keywords = _getOptionKeywords(option).map((k) => k.toLowerCase());\n\n const matchingTokenCount = tokens.filter((token) => {\n const lowerToken = token.toLowerCase();\n return keywords.some((keyword) => keyword.includes(lowerToken));\n }).length;\n\n if (matchingTokenCount === 0) return false;\n if (tokens.length > 1 && matchingTokenCount > 1) {\n const lowerQuery = query.toLowerCase();\n return keywords.some((keyword) => keyword.includes(lowerQuery));\n }\n return true;\n };\n }, [filterOption, optionMap, tokenSeparators, _getOptionKeywords]);\n\n return (\n <div ref={ref} className={clsx(cls(\"combobox\"), className)} {...rest}>\n <BaseCombobox.Root<T, M>\n value={\n (multiple ? selectedValues : (selectedValues[0] ?? null)) as M extends true\n ? T[]\n : T | null\n }\n onValueChange={(newValue) => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)(\n Array.isArray(newValue) ? (newValue as T[]) : [],\n );\n } else {\n (handleValueChange as (v: T) => void)(newValue as T);\n }\n }}\n inputValue={searchValue}\n onInputValueChange={(val: string) => {\n setSearchValue(val);\n onSearch?.(val);\n }}\n open={open}\n onOpenChange={setOpen}\n multiple={multiple}\n disabled={disabled}\n autoHighlight={effectiveAutoHighlight}\n items={baseUIItems}\n itemToStringLabel={itemToStringLabel}\n filter={mergedFilter}\n >\n {/* Single Selection Layout using SelectTrigger compound components */}\n {!multiple ? (\n <SelectTrigger.Root\n ref={inputContainerRef}\n as=\"div\"\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(classNames?.trigger, cls(\"combobox-trigger-single\"))}\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Input\n placeholder={placeholder}\n className={clsx(className, inputClassName)}\n disabled={disabled}\n onKeyDown={createInputKeyDownHandler(searchValue)}\n {...rest}\n />\n )}\n />\n <SelectTrigger.Clear\n render={(props) => <BaseCombobox.Clear {...props}></BaseCombobox.Clear>}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n ) : (\n /* Multiple Selection Layout using SelectTrigger compound components */\n <SelectTrigger.Root\n ref={inputContainerRef}\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(classNames?.trigger, cls(\"combobox-trigger-multiple\"))}\n as=\"div\"\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Chips className={clsx(cls(\"combobox-chips\"), className)} {...rest}>\n <BaseCombobox.Value>\n {(selectedItems) => (\n <>\n {selectedItems.map((item: T) => {\n const option = optionMap.get(item);\n return (\n <BaseCombobox.Chip key={item} className={clsx(cls(\"combobox-chip\"))}>\n {option?.icon && (\n <span className={clsx(cls(\"combobox-chip-icon\"))}>\n {option.icon}\n </span>\n )}\n <span className={clsx(cls(\"combobox-chip-text\"))}>\n {option\n ? optionLabelRender\n ? optionLabelRender(option)\n : option.label\n : item}\n </span>\n <BaseCombobox.ChipRemove\n className={clsx(cls(\"combobox-chip-remove\"))}\n >\n <XIcon />\n </BaseCombobox.ChipRemove>\n </BaseCombobox.Chip>\n );\n })}\n\n <BaseCombobox.Input\n placeholder={selectedItems.length > 0 ? \"\" : placeholder}\n className={inputClassName}\n disabled={disabled}\n onKeyDown={createInputKeyDownHandler(searchValue)}\n />\n </>\n )}\n </BaseCombobox.Value>\n </BaseCombobox.Chips>\n )}\n />\n <SelectTrigger.Clear\n render={(props) => <BaseCombobox.Clear {...props}></BaseCombobox.Clear>}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n )}\n\n <BaseCombobox.Portal>\n <BaseCombobox.Positioner\n anchor={inputContainerRef.current}\n sideOffset={4}\n side={placement.startsWith(\"top\") ? \"top\" : \"bottom\"}\n align={\n placement.endsWith(\"Right\")\n ? \"end\"\n : placement === \"top\" || placement === \"bottom\"\n ? \"center\"\n : \"start\"\n }\n render={positionerRender}\n >\n <BaseCombobox.Popup\n className={clsx(\n cls(\"combobox-popup\"),\n !popupMatchSelectWidth && cls(\"combobox-popup--auto-width\"),\n classNames?.portal,\n )}\n render={popupRender}\n >\n <div className={clsx(cls(\"combobox-container\"))}>\n {/* Select All Option */}\n {selectAllOption && (\n <>\n <BaseMenuItem\n as=\"button\"\n type=\"button\"\n className={clsx(cls(\"combobox-select-all\"))}\n selected={selectAllOption.checked}\n onClick={selectAllOption.onToggle}\n indeterminate={selectAllOption.indeterminate}\n showCheckbox\n >\n Select All\n </BaseMenuItem>\n <BaseCombobox.Separator render={separatorRender} />\n </>\n )}\n <ScrollArea fadeEdges>\n <BaseCombobox.List\n className={clsx(cls(\"combobox-list\"), classNames?.list)}\n render={listRender}\n >\n {(item: T) => {\n const option = optionMap.get(item);\n if (!option) return null;\n const isSelected = (selectedValues as T[]).includes(item);\n return optionRender ? (\n optionRender(option, {})\n ) : (\n <BaseMenuItem\n key={option.value}\n disabled={option.disabled}\n selected={isSelected}\n showCheckbox={multiple}\n icon={option.icon}\n classNames={{\n root: clsx(classNames?.option),\n icon: classNames?.optionIcon,\n text: classNames?.optionText,\n }}\n labelRender={\n optionLabelRender\n ? (props: React.HTMLAttributes<HTMLElement>) =>\n optionLabelRender(option, props)\n : undefined\n }\n render={(props: React.HTMLAttributes<HTMLElement>) => (\n <BaseCombobox.Item\n value={item as T}\n disabled={option.disabled}\n {...props}\n data-disabled={option.disabled}\n data-selected={isSelected}\n />\n )}\n >\n {option.label}\n </BaseMenuItem>\n );\n }}\n </BaseCombobox.List>\n\n <BaseCombobox.Empty className={clsx(cls(\"combobox-empty\"))}>\n <Empty description=\"No options found\" />\n </BaseCombobox.Empty>\n </ScrollArea>\n </div>\n </BaseCombobox.Popup>\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n </BaseCombobox.Root>\n </div>\n );\n};\n\nconst MainCombobox = forwardRef(ComboboxInner) as <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n props: ComboboxProps<T, M, O> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReturnType<typeof ComboboxInner>;\n\nexport const Combobox = Object.assign(MainCombobox, {\n // Add any sub components here if needed\n});\n\nexport default Combobox;\n"],"names":["positionerRender","props","jsx","BaseMenu","popupRender","separatorRender","listRender","ComboboxInner","options","controlledValue","defaultValue","onChange","placeholder","disabledProp","statusProp","allowClear","multiple","_showSearch","controlledOpen","onOpenChange","className","classNames","size","optionRender","onSearch","clearIcon","suffixIcon","placement","showSelectAll","optionLabelRender","_getOptionKeywords","option","reactNodeToString","popupMatchSelectWidth","addOnEnter","tokenSeparators","autoHighlight","filterOption","rest","ref","value","setValue","useControlledState","open","setOpen","cls","useCls","inputContainerRef","useRef","contextStatus","useContext","FormItemInputContext","contextDisabled","DisabledContext","mergedStatus","disabled","handleValueChange","useCallback","newValue","handleSelectAll","allValues","handleDeselectAll","handleClear","selectedValues","useMemo","optionMap","map","opt","selectAllOption","selectedFromFiltered","val","checked","indeterminate","baseUIItems","displayValue","inputClassName","clsx","itemToStringLabel","itemValue","searchValue","setSearchValue","useState","findOptionByInput","input","trimmed","lowerTrimmed","handleAddOnEnter","tokens","splitBySeparators","matchedValues","token","current","newValues","hasSeparator","sep","effectiveAutoHighlight","createInputKeyDownHandler","currentSearchValue","event","mergedFilter","query","keywords","k","matchingTokenCount","lowerToken","keyword","lowerQuery","jsxs","BaseCombobox","SelectTrigger","children","selectedItems","Fragment","item","XIcon","icon","BaseMenuItem","ScrollArea","isSelected","Empty","MainCombobox","forwardRef","Combobox"],"mappings":"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"}
@@ -1 +1 @@
1
- @layer components{.ds-combobox{position:relative;display:inline-block;width:100%}.ds-combobox-popup{width:var(--anchor-width)}.ds-combobox-popup--auto-width{width:max-content;min-width:var(--anchor-width);max-width:var(--available-width)}.ds-combobox-input{flex:1;border:none;outline:none;background:transparent;color:var(--ds-color-text);min-width:0}.ds-combobox-input::placeholder{color:var(--ds-color-text-placeholder)}.ds-combobox-divider{border:none;border-bottom:1px solid var(--ds-color-split);margin:.25rem 0}.ds-combobox-chip{display:inline-flex;align-items:center;gap:.25rem;background:var(--ds-color-fill-secondary);border-radius:var(--ds-border-radius-sm);padding:.25rem .5rem;font-size:var(--ds-font-size);color:var(--ds-color-text);max-width:100%;min-width:0;height:var(--ds-control-line-height)}.ds-combobox-chip-icon{display:flex;align-items:center;flex-shrink:0;font-size:.75rem}.ds-combobox-chip-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-combobox-chip-remove{display:flex;align-items:center;justify-content:center;padding:.125rem;border-radius:var(--ds-border-radius-lg);cursor:pointer;color:var(--ds-color-text-secondary);transition:all .2s var(--ds-motion-ease-out);background:none;border:none;font-size:.875rem;line-height:1}.ds-combobox-chip-remove:hover{background:var(--ds-control-item-bg-hover);color:var(--ds-color-text)}.ds-combobox-chips-container .ds-combobox-input{flex:1;min-width:120px;border:none;background:transparent;padding:.25rem 0;margin:0}.ds-combobox-chips{display:flex;flex-wrap:wrap;gap:.375rem}.ds-select-trigger-small .ds-combobox-chips{gap:.25rem}.ds-combobox-trigger-multiple.ds-select-trigger-has-value .ds-select-trigger-content{padding-left:.5rem}.ds-combobox[data-disabled=true] .ds-combobox-chip{background-color:var(--ds-color-bg-disabled);color:var(--ds-color-text-disabled)}.ds-combobox[data-disabled=true] .ds-combobox-chip-remove{cursor:not-allowed;color:var(--ds-color-text-disabled)}.ds-combobox-empty{padding:1rem}.ds-combobox-empty:empty{display:none}}
1
+ @layer components{.ds-combobox{position:relative;display:inline-block;width:100%}.ds-combobox-popup{width:var(--anchor-width)}.ds-combobox-popup--auto-width{width:max-content;min-width:var(--anchor-width);max-width:var(--available-width)}.ds-combobox-input{flex:1;border:none;outline:none;background:transparent;color:var(--ds-color-text);min-width:0}.ds-combobox-input::placeholder{color:var(--ds-color-text-placeholder)}.ds-combobox-divider{border:none;border-bottom:1px solid var(--ds-color-split);margin:.25rem 0}.ds-combobox-chip{display:inline-flex;align-items:center;gap:.25rem;background:var(--ds-color-fill-secondary);border-radius:var(--ds-border-radius-sm);padding:.25rem .5rem;font-size:var(--ds-font-size);color:var(--ds-color-text);max-width:100%;min-width:0;height:var(--ds-control-line-height)}.ds-combobox-chip-icon{display:flex;align-items:center;flex-shrink:0;font-size:.75rem}.ds-combobox-chip-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-combobox-chip-remove{display:flex;align-items:center;justify-content:center;padding:.125rem;border-radius:var(--ds-border-radius-lg);cursor:pointer;color:var(--ds-color-text-secondary);transition:all .2s var(--ds-motion-ease-out);background:none;border:none;font-size:.875rem;line-height:1}.ds-combobox-chip-remove:hover{background:var(--ds-control-item-bg-hover);color:var(--ds-color-text)}.ds-combobox-chips-container .ds-combobox-input{flex:1;min-width:120px;border:none;background:transparent;padding:.25rem 0;margin:0}.ds-combobox-chips{display:flex;flex-wrap:wrap;gap:.375rem}.ds-select-trigger-small .ds-combobox-chips{gap:.25rem}.ds-combobox-trigger-multiple.ds-select-trigger-has-value .ds-select-trigger-content{padding-left:.5rem}.ds-combobox[data-disabled=true] .ds-combobox-chip{background-color:var(--ds-color-bg-disabled);color:var(--ds-color-text-disabled)}.ds-combobox[data-disabled=true] .ds-combobox-chip-remove{cursor:not-allowed;color:var(--ds-color-text-disabled)}.ds-combobox-empty{padding:1rem}.ds-combobox-empty:empty{display:none}.ds-combobox-container{display:flex;flex-direction:column;flex-shrink:1;min-height:0;gap:.25rem}.ds-combobox-popup .ds-menu-item-show-checkbox[data-selected=true]{background:transparent}.ds-combobox-popup .ds-menu-item-show-checkbox[data-selected=true]:hover,.ds-combobox-popup .ds-menu-item-show-checkbox[data-selected=true][data-highlighted],.ds-combobox-popup .ds-menu-item-show-checkbox[data-selected=true][data-active=true]{background:var(--ds-control-item-bg-active)}.ds-combobox-popup .ds-menu-item-show-checkbox:not([data-selected=true]):hover,.ds-combobox-popup .ds-menu-item-show-checkbox:not([data-selected=true])[data-highlighted],.ds-combobox-popup .ds-menu-item-show-checkbox:not([data-selected=true])[data-active=true]{background:var(--ds-control-item-bg-hover)}.ds-combobox-popup .ds-menu-item-base[data-selected=true] .ds-menu-item-text{font-weight:600}}
@@ -1 +1 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/command-palette/component.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,aAAa,CAAC;AAKrB,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAGF,KAAK,mBAAmB,GAAG,KAAK,CAAC,cAAc,CAC7C,OAAO,MAAM,CAAC,OAAO,CACtB,CAAC,QAAQ,CAAC,CAAC;AAEZ,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC/B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACrC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAoBD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAoNxD,CAAC"}
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/command-palette/component.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,aAAa,CAAC;AAKrB,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAGF,KAAK,mBAAmB,GAAG,KAAK,CAAC,cAAc,CAC7C,OAAO,MAAM,CAAC,OAAO,CACtB,CAAC,QAAQ,CAAC,CAAC;AAEZ,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC/B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACrC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAoBD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAsNxD,CAAC"}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
- import { jsx as o, jsxs as c } from "react/jsx-runtime";
2
+ import { jsx as o, jsxs as u } from "react/jsx-runtime";
3
3
  import R, { useEffect as V, useMemo as A, useCallback as D } from "react";
4
4
  import { useStableCallback as v } from "@base-ui/utils/useStableCallback";
5
5
  import { Autocomplete as i } from "@base-ui/react/autocomplete";
6
- import { Dialog as u } from "@base-ui/react/dialog";
6
+ import { Dialog as p } from "@base-ui/react/dialog";
7
7
  import { useDropdownMenu as j } from "../dropdown-menu/useDropdownMenu.js";
8
8
  import './style.css';/* empty css */
9
9
  import { DropdownMenuItem as x } from "../dropdown-menu/item.js";
@@ -13,7 +13,7 @@ import { useControlledState as F } from "../hooks/useControlledState.js";
13
13
  import { useTheme as I } from "../theme-provider/context/themeStore.js";
14
14
  import { Input as q } from "../input/component.js";
15
15
  import { ScrollArea as z } from "../scroll-area/component.js";
16
- import { clsx as d } from "../utils/cn.js";
16
+ import { clsx as c } from "../utils/cn.js";
17
17
  import { createRenderProp as H } from "../utils/renderProp.js";
18
18
  const J = [
19
19
  { key: "k", metaKey: !0 },
@@ -35,19 +35,19 @@ const pe = ({
35
35
  classNames: r,
36
36
  nativeButton: $ = !0
37
37
  }) => {
38
- const n = B(), [G, p] = F(
38
+ const n = B(), [G, s] = F(
39
39
  m,
40
40
  M,
41
41
  E
42
42
  ), [y, b] = R.useState(""), C = v(() => {
43
- p(!1);
43
+ s(!1);
44
44
  }), k = v(() => {
45
- p((e) => !e);
45
+ s((e) => !e);
46
46
  });
47
47
  V(() => {
48
48
  const e = (t) => {
49
49
  f.find(
50
- (s) => Q(t, s)
50
+ (d) => Q(t, d)
51
51
  ) && (t.preventDefault(), k());
52
52
  };
53
53
  return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
@@ -56,7 +56,7 @@ const pe = ({
56
56
  items: P,
57
57
  inCombobox: !0,
58
58
  onOpenChange: (e) => {
59
- e || p(!1);
59
+ e || s(!1);
60
60
  },
61
61
  classNames: {
62
62
  group: r?.group,
@@ -86,7 +86,7 @@ const pe = ({
86
86
  `${t}-${l}`
87
87
  ) : null,
88
88
  [r?.item, C]
89
- ), N = D(() => /* @__PURE__ */ c(
89
+ ), N = D(() => /* @__PURE__ */ u(
90
90
  i.Root,
91
91
  {
92
92
  items: S,
@@ -112,16 +112,16 @@ const pe = ({
112
112
  )
113
113
  }
114
114
  ) }),
115
- /* @__PURE__ */ c(z, { fadeEdges: !0, children: [
115
+ /* @__PURE__ */ u(z, { fadeEdges: !0, children: [
116
116
  /* @__PURE__ */ o(
117
117
  i.List,
118
118
  {
119
119
  className: n("dropdown-menu-list", "command-palette-list"),
120
- children: (e, t) => /* @__PURE__ */ c(
120
+ children: (e, t) => /* @__PURE__ */ u(
121
121
  i.Group,
122
122
  {
123
123
  items: e.items,
124
- className: d(
124
+ className: c(
125
125
  n("dropdown-menu-group"),
126
126
  t > 0 && "mt-2",
127
127
  r?.group
@@ -130,14 +130,14 @@ const pe = ({
130
130
  e.label && /* @__PURE__ */ o(
131
131
  i.GroupLabel,
132
132
  {
133
- className: d(
133
+ className: c(
134
134
  n("dropdown-menu-header"),
135
135
  r?.groupLabel
136
136
  ),
137
137
  children: /* @__PURE__ */ o("span", { children: e.label })
138
138
  }
139
139
  ),
140
- /* @__PURE__ */ o(i.Collection, { children: (l, s) => L(l, t, s) })
140
+ /* @__PURE__ */ o(i.Collection, { children: (l, d) => L(l, t, d) })
141
141
  ]
142
142
  },
143
143
  `group-${t}`
@@ -163,7 +163,7 @@ const pe = ({
163
163
  y,
164
164
  r
165
165
  ]), O = {
166
- className: d(
166
+ className: c(
167
167
  n("command-palette-trigger"),
168
168
  r?.trigger,
169
169
  K
@@ -171,24 +171,30 @@ const pe = ({
171
171
  render: (e, t) => H(a, e, t),
172
172
  nativeButton: $
173
173
  };
174
- return /* @__PURE__ */ c(u.Root, { open: G, onOpenChange: p, modal: !0, children: [
175
- a && /* @__PURE__ */ o(u.Trigger, { ...O }),
176
- /* @__PURE__ */ c(u.Portal, { children: [
174
+ return /* @__PURE__ */ u(p.Root, { open: G, onOpenChange: s, modal: !0, children: [
175
+ a && /* @__PURE__ */ o(p.Trigger, { ...O }),
176
+ /* @__PURE__ */ u(p.Portal, { children: [
177
177
  /* @__PURE__ */ o(
178
- u.Backdrop,
178
+ p.Backdrop,
179
179
  {
180
- className: n("command-palette-overlay", r?.mask)
180
+ className: c(n("command-palette-overlay"), r?.mask)
181
181
  }
182
182
  ),
183
183
  /* @__PURE__ */ o(
184
- u.Popup,
184
+ p.Popup,
185
185
  {
186
- className: n(
187
- "command-palette-content",
186
+ className: c(
187
+ n("command-palette-content"),
188
188
  K,
189
189
  r?.content
190
190
  ),
191
- children: /* @__PURE__ */ o("div", { className: n("command-palette", T, r?.root), children: N() })
191
+ children: /* @__PURE__ */ o(
192
+ "div",
193
+ {
194
+ className: c(n("command-palette"), T, r?.root),
195
+ children: N()
196
+ }
197
+ )
192
198
  }
193
199
  )
194
200
  ] })
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../../src/components/command-palette/component.tsx"],"sourcesContent":["\"use client\";\nimport React, { useCallback, useEffect, useMemo } from \"react\";\nimport { useStableCallback } from \"@base-ui/utils/useStableCallback\";\nimport { Autocomplete } from \"@base-ui/react/autocomplete\";\nimport { Dialog } from \"@base-ui/react/dialog\";\nimport { DropdownMenuItemType } from \"../dropdown-menu/types\";\nimport { useDropdownMenu } from \"../dropdown-menu/useDropdownMenu\";\nimport { useControlledState } from \"../hooks\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { Input } from \"../input\";\nimport { clsx, useCls, createRenderProp } from \"../utils\";\nimport \"./style.css\";\nimport { useTheme } from \"../theme-provider\";\nimport { DropdownMenuItem } from \"../dropdown-menu/item\";\nimport { DropdownMenuDivider } from \"../dropdown-menu/divider\";\n\nexport type CommandPaletteShortcut = {\n key: string;\n metaKey?: boolean;\n ctrlKey?: boolean;\n altKey?: boolean;\n shiftKey?: boolean;\n};\n\n// Extract the render prop type from Dialog.Trigger for proper typing\ntype DialogTriggerRender = React.ComponentProps<\n typeof Dialog.Trigger\n>[\"render\"];\n\nexport interface CommandPaletteProps {\n /** Optional trigger element - if provided, renders a Dialog.Trigger */\n children?: DialogTriggerRender;\n /** Whether the command palette is open */\n open?: boolean;\n /** Callback fired when the open state changes */\n onOpenChange?: (open: boolean) => void;\n /**\n * Default open state\n */\n defaultOpen?: boolean;\n /** Items to display in the command palette */\n items?: DropdownMenuItemType[];\n /** Keyboard shortcuts to open the palette */\n shortcuts?: CommandPaletteShortcut[];\n /** Placeholder text for the search input */\n placeholder?: string;\n /** Text to show when no results are found */\n emptyText?: string;\n /** Accessible label for the command palette */\n label?: string;\n /** Additional CSS class names */\n className?: string;\n classNames?: {\n trigger?: string;\n root?: string;\n mask?: string;\n content?: string;\n group?: string;\n item?: string;\n groupLabel?: string;\n };\n /**\n * Whether the trigger should act as a native button element.\n * Set to false when using non-button elements as trigger\n * to suppress Base UI warnings and remove native button semantics.\n * @default true\n */\n nativeButton?: boolean;\n}\n\nconst defaultShortcuts: CommandPaletteShortcut[] = [\n { key: \"k\", metaKey: true },\n { key: \"k\", ctrlKey: true },\n];\n\nfunction matchesShortcut(\n event: KeyboardEvent,\n shortcut: CommandPaletteShortcut\n): boolean {\n return (\n event.key.toLowerCase() === shortcut.key.toLowerCase() &&\n !!event.metaKey === !!shortcut.metaKey &&\n !!event.ctrlKey === !!shortcut.ctrlKey &&\n !!event.altKey === !!shortcut.altKey &&\n !!event.shiftKey === !!shortcut.shiftKey\n );\n}\n\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n children,\n open,\n onOpenChange,\n defaultOpen = false,\n items = [],\n shortcuts = defaultShortcuts,\n placeholder = \"Type a command or search...\",\n emptyText = \"No results found.\",\n className,\n classNames,\n nativeButton = true,\n}) => {\n const cls = useCls();\n const [actualOpen, setActualOpen] = useControlledState(\n open,\n onOpenChange,\n defaultOpen\n );\n const [searchValue, setSearchValue] = React.useState(\"\");\n\n // Stable callback for closing the palette\n const handleClose = useStableCallback(() => {\n setActualOpen(false);\n });\n\n // Stable callback for toggling (uses functional setState to avoid stale closures)\n const handleToggle = useStableCallback(() => {\n setActualOpen((prev) => !prev);\n });\n\n // Set up keyboard shortcuts\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const matchingShortcut = shortcuts.find((shortcut) =>\n matchesShortcut(event, shortcut)\n );\n\n if (matchingShortcut) {\n event.preventDefault();\n handleToggle();\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [shortcuts, handleToggle]);\n\n const { itemGroups } = useDropdownMenu({\n items,\n inCombobox: true,\n onOpenChange: (open) => {\n if (!open) {\n setActualOpen(false);\n }\n },\n classNames: {\n group: classNames?.group,\n groupLabel: classNames?.groupLabel,\n item: classNames?.item,\n },\n });\n\n // Transform itemGroups into autocomplete group structure\n const autocompleteGroups = useMemo(() => {\n const groups = itemGroups.map((group) => ({\n label: group.label || \"\",\n items: group.items,\n }));\n return groups;\n }, [itemGroups]);\n\n const { className: themeClassName } = useTheme();\n\n const renderMenuItem = useCallback(\n (item: DropdownMenuItemType, groupIndex: number, itemIndex: number) => {\n if (item.type === \"item\") {\n return (\n <DropdownMenuItem\n key={`${groupIndex}-${itemIndex}`}\n item={item}\n inCombobox={true}\n afterSelect={handleClose}\n classNames={{\n item: classNames?.item,\n }}\n />\n );\n } else if (item.type === \"divider\") {\n return (\n <DropdownMenuDivider\n key={`${groupIndex}-${itemIndex}`}\n inCombobox={true}\n />\n );\n }\n return null;\n },\n [classNames?.item, handleClose]\n );\n\n const renderMenuInner = useCallback(() => {\n return (\n <Autocomplete.Root\n items={autocompleteGroups}\n onValueChange={(value) => setSearchValue(value)}\n itemToStringValue={(item) =>\n item.type == \"item\" ? String(item.key) : \"\"\n }\n open={true}\n inline\n modal={false}\n >\n <div className={cls(\"command-palette-search-wrapper\")}>\n <Autocomplete.Input\n render={({ ref, ...rest }) => (\n <Input\n placeholder={placeholder}\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n className={cls(\"command-palette-search\")}\n autoFocus\n {...rest}\n />\n )}\n />\n </div>\n <ScrollArea fadeEdges>\n <Autocomplete.List\n className={cls(\"dropdown-menu-list\", \"command-palette-list\")}\n >\n {(group, groupIndex) => (\n <Autocomplete.Group\n key={`group-${groupIndex}`}\n items={group.items}\n className={clsx(\n cls(\"dropdown-menu-group\"),\n groupIndex > 0 && \"mt-2\",\n classNames?.group\n )}\n >\n {group.label && (\n <Autocomplete.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Autocomplete.GroupLabel>\n )}\n <Autocomplete.Collection>\n {(item, itemIndex) =>\n renderMenuItem(item, groupIndex, itemIndex)\n }\n </Autocomplete.Collection>\n </Autocomplete.Group>\n )}\n </Autocomplete.List>\n <Autocomplete.Empty\n className={cls(\"dropdown-menu-empty\", \"command-palette-empty\")}\n >\n {emptyText}\n </Autocomplete.Empty>\n </ScrollArea>\n </Autocomplete.Root>\n );\n }, [\n autocompleteGroups,\n cls,\n emptyText,\n placeholder,\n renderMenuItem,\n searchValue,\n classNames,\n ]);\n\n const commonTriggerProps: {\n className: string;\n render: DialogTriggerRender;\n nativeButton: boolean;\n } = {\n className: clsx(\n cls(\"command-palette-trigger\"),\n classNames?.trigger,\n themeClassName\n ),\n render: (props, state) => createRenderProp(children, props, state),\n nativeButton,\n };\n\n return (\n <Dialog.Root open={actualOpen} onOpenChange={setActualOpen} modal={true}>\n {children && <Dialog.Trigger {...commonTriggerProps} />}\n <Dialog.Portal>\n <Dialog.Backdrop\n className={cls(\"command-palette-overlay\", classNames?.mask)}\n />\n <Dialog.Popup\n className={cls(\n \"command-palette-content\",\n themeClassName,\n classNames?.content\n )}\n >\n <div className={cls(\"command-palette\", className, classNames?.root)}>\n {renderMenuInner()}\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n"],"names":["defaultShortcuts","matchesShortcut","event","shortcut","CommandPalette","children","open","onOpenChange","defaultOpen","items","shortcuts","placeholder","emptyText","className","classNames","nativeButton","cls","useCls","actualOpen","setActualOpen","useControlledState","searchValue","setSearchValue","React","handleClose","useStableCallback","handleToggle","prev","useEffect","handleKeyDown","itemGroups","useDropdownMenu","autocompleteGroups","useMemo","group","themeClassName","useTheme","renderMenuItem","useCallback","item","groupIndex","itemIndex","jsx","DropdownMenuItem","DropdownMenuDivider","renderMenuInner","jsxs","Autocomplete","value","ref","rest","Input","e","ScrollArea","clsx","commonTriggerProps","props","state","createRenderProp","Dialog"],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sources":["../../../src/components/command-palette/component.tsx"],"sourcesContent":["\"use client\";\nimport React, { useCallback, useEffect, useMemo } from \"react\";\nimport { useStableCallback } from \"@base-ui/utils/useStableCallback\";\nimport { Autocomplete } from \"@base-ui/react/autocomplete\";\nimport { Dialog } from \"@base-ui/react/dialog\";\nimport { DropdownMenuItemType } from \"../dropdown-menu/types\";\nimport { useDropdownMenu } from \"../dropdown-menu/useDropdownMenu\";\nimport { useControlledState } from \"../hooks\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { Input } from \"../input\";\nimport { clsx, useCls, createRenderProp } from \"../utils\";\nimport \"./style.css\";\nimport { useTheme } from \"../theme-provider\";\nimport { DropdownMenuItem } from \"../dropdown-menu/item\";\nimport { DropdownMenuDivider } from \"../dropdown-menu/divider\";\n\nexport type CommandPaletteShortcut = {\n key: string;\n metaKey?: boolean;\n ctrlKey?: boolean;\n altKey?: boolean;\n shiftKey?: boolean;\n};\n\n// Extract the render prop type from Dialog.Trigger for proper typing\ntype DialogTriggerRender = React.ComponentProps<\n typeof Dialog.Trigger\n>[\"render\"];\n\nexport interface CommandPaletteProps {\n /** Optional trigger element - if provided, renders a Dialog.Trigger */\n children?: DialogTriggerRender;\n /** Whether the command palette is open */\n open?: boolean;\n /** Callback fired when the open state changes */\n onOpenChange?: (open: boolean) => void;\n /**\n * Default open state\n */\n defaultOpen?: boolean;\n /** Items to display in the command palette */\n items?: DropdownMenuItemType[];\n /** Keyboard shortcuts to open the palette */\n shortcuts?: CommandPaletteShortcut[];\n /** Placeholder text for the search input */\n placeholder?: string;\n /** Text to show when no results are found */\n emptyText?: string;\n /** Accessible label for the command palette */\n label?: string;\n /** Additional CSS class names */\n className?: string;\n classNames?: {\n trigger?: string;\n root?: string;\n mask?: string;\n content?: string;\n group?: string;\n item?: string;\n groupLabel?: string;\n };\n /**\n * Whether the trigger should act as a native button element.\n * Set to false when using non-button elements as trigger\n * to suppress Base UI warnings and remove native button semantics.\n * @default true\n */\n nativeButton?: boolean;\n}\n\nconst defaultShortcuts: CommandPaletteShortcut[] = [\n { key: \"k\", metaKey: true },\n { key: \"k\", ctrlKey: true },\n];\n\nfunction matchesShortcut(\n event: KeyboardEvent,\n shortcut: CommandPaletteShortcut\n): boolean {\n return (\n event.key.toLowerCase() === shortcut.key.toLowerCase() &&\n !!event.metaKey === !!shortcut.metaKey &&\n !!event.ctrlKey === !!shortcut.ctrlKey &&\n !!event.altKey === !!shortcut.altKey &&\n !!event.shiftKey === !!shortcut.shiftKey\n );\n}\n\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n children,\n open,\n onOpenChange,\n defaultOpen = false,\n items = [],\n shortcuts = defaultShortcuts,\n placeholder = \"Type a command or search...\",\n emptyText = \"No results found.\",\n className,\n classNames,\n nativeButton = true,\n}) => {\n const cls = useCls();\n const [actualOpen, setActualOpen] = useControlledState(\n open,\n onOpenChange,\n defaultOpen\n );\n const [searchValue, setSearchValue] = React.useState(\"\");\n\n // Stable callback for closing the palette\n const handleClose = useStableCallback(() => {\n setActualOpen(false);\n });\n\n // Stable callback for toggling (uses functional setState to avoid stale closures)\n const handleToggle = useStableCallback(() => {\n setActualOpen((prev) => !prev);\n });\n\n // Set up keyboard shortcuts\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const matchingShortcut = shortcuts.find((shortcut) =>\n matchesShortcut(event, shortcut)\n );\n\n if (matchingShortcut) {\n event.preventDefault();\n handleToggle();\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [shortcuts, handleToggle]);\n\n const { itemGroups } = useDropdownMenu({\n items,\n inCombobox: true,\n onOpenChange: (open) => {\n if (!open) {\n setActualOpen(false);\n }\n },\n classNames: {\n group: classNames?.group,\n groupLabel: classNames?.groupLabel,\n item: classNames?.item,\n },\n });\n\n // Transform itemGroups into autocomplete group structure\n const autocompleteGroups = useMemo(() => {\n const groups = itemGroups.map((group) => ({\n label: group.label || \"\",\n items: group.items,\n }));\n return groups;\n }, [itemGroups]);\n\n const { className: themeClassName } = useTheme();\n\n const renderMenuItem = useCallback(\n (item: DropdownMenuItemType, groupIndex: number, itemIndex: number) => {\n if (item.type === \"item\") {\n return (\n <DropdownMenuItem\n key={`${groupIndex}-${itemIndex}`}\n item={item}\n inCombobox={true}\n afterSelect={handleClose}\n classNames={{\n item: classNames?.item,\n }}\n />\n );\n } else if (item.type === \"divider\") {\n return (\n <DropdownMenuDivider\n key={`${groupIndex}-${itemIndex}`}\n inCombobox={true}\n />\n );\n }\n return null;\n },\n [classNames?.item, handleClose]\n );\n\n const renderMenuInner = useCallback(() => {\n return (\n <Autocomplete.Root\n items={autocompleteGroups}\n onValueChange={(value) => setSearchValue(value)}\n itemToStringValue={(item) =>\n item.type == \"item\" ? String(item.key) : \"\"\n }\n open={true}\n inline\n modal={false}\n >\n <div className={cls(\"command-palette-search-wrapper\")}>\n <Autocomplete.Input\n render={({ ref, ...rest }) => (\n <Input\n placeholder={placeholder}\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n className={cls(\"command-palette-search\")}\n autoFocus\n {...rest}\n />\n )}\n />\n </div>\n <ScrollArea fadeEdges>\n <Autocomplete.List\n className={cls(\"dropdown-menu-list\", \"command-palette-list\")}\n >\n {(group, groupIndex) => (\n <Autocomplete.Group\n key={`group-${groupIndex}`}\n items={group.items}\n className={clsx(\n cls(\"dropdown-menu-group\"),\n groupIndex > 0 && \"mt-2\",\n classNames?.group\n )}\n >\n {group.label && (\n <Autocomplete.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Autocomplete.GroupLabel>\n )}\n <Autocomplete.Collection>\n {(item, itemIndex) =>\n renderMenuItem(item, groupIndex, itemIndex)\n }\n </Autocomplete.Collection>\n </Autocomplete.Group>\n )}\n </Autocomplete.List>\n <Autocomplete.Empty\n className={cls(\"dropdown-menu-empty\", \"command-palette-empty\")}\n >\n {emptyText}\n </Autocomplete.Empty>\n </ScrollArea>\n </Autocomplete.Root>\n );\n }, [\n autocompleteGroups,\n cls,\n emptyText,\n placeholder,\n renderMenuItem,\n searchValue,\n classNames,\n ]);\n\n const commonTriggerProps: {\n className: string;\n render: DialogTriggerRender;\n nativeButton: boolean;\n } = {\n className: clsx(\n cls(\"command-palette-trigger\"),\n classNames?.trigger,\n themeClassName\n ),\n render: (props, state) => createRenderProp(children, props, state),\n nativeButton,\n };\n\n return (\n <Dialog.Root open={actualOpen} onOpenChange={setActualOpen} modal={true}>\n {children && <Dialog.Trigger {...commonTriggerProps} />}\n <Dialog.Portal>\n <Dialog.Backdrop\n className={clsx(cls(\"command-palette-overlay\"), classNames?.mask)}\n />\n <Dialog.Popup\n className={clsx(\n cls(\"command-palette-content\"),\n themeClassName,\n classNames?.content\n )}\n >\n <div\n className={clsx(cls(\"command-palette\"), className, classNames?.root)}\n >\n {renderMenuInner()}\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n"],"names":["defaultShortcuts","matchesShortcut","event","shortcut","CommandPalette","children","open","onOpenChange","defaultOpen","items","shortcuts","placeholder","emptyText","className","classNames","nativeButton","cls","useCls","actualOpen","setActualOpen","useControlledState","searchValue","setSearchValue","React","handleClose","useStableCallback","handleToggle","prev","useEffect","handleKeyDown","itemGroups","useDropdownMenu","autocompleteGroups","useMemo","group","themeClassName","useTheme","renderMenuItem","useCallback","item","groupIndex","itemIndex","jsx","DropdownMenuItem","DropdownMenuDivider","renderMenuInner","jsxs","Autocomplete","value","ref","rest","Input","e","ScrollArea","clsx","commonTriggerProps","props","state","createRenderProp","Dialog"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"droppable.d.ts","sourceRoot":"","sources":["../../../src/components/drag-drop/droppable.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAiB,MAAM,SAAS,CAAC;AAI3E;;;GAGG;AACH,QAAA,MAAM,cAAc,GAAI,CAAC,SAAS,IAAI,GAAG,IAAI,EAAE,CAAC,SAAS,OAAO,GAAG,KAAK,EAAE,qKAiBvE,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,SAgG9B,CAAC;AAEF,eAAO,MAAM,SAAS,EAA2B,OAAO,cAAc,CAAC"}
1
+ {"version":3,"file":"droppable.d.ts","sourceRoot":"","sources":["../../../src/components/drag-drop/droppable.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAiB,MAAM,SAAS,CAAC;AAkB3E;;;GAGG;AACH,QAAA,MAAM,cAAc,GAAI,CAAC,SAAS,IAAI,GAAG,IAAI,EAAE,CAAC,SAAS,OAAO,GAAG,KAAK,EAAE,qKAiBvE,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,SAiG9B,CAAC;AAEF,eAAO,MAAM,SAAS,EAA2B,OAAO,cAAc,CAAC"}
@@ -1,94 +1,98 @@
1
1
  "use client";
2
- import { jsxs as P, jsx as n } from "react/jsx-runtime";
3
- import { memo as W, useCallback as x, useMemo as D } from "react";
4
- import { useDroppable as h } from "./hooks.js";
5
- import { ArrowsOutCardinalIcon as B } from "@bioturing/assets";
6
- import { useRender as F } from "@base-ui/react/use-render";
7
- import { Value as G } from "./value.js";
8
- import { uniqWith as H, isEqual as I } from "es-toolkit";
9
- import { useCls as J } from "../utils/antdUtils.js";
10
- import { clsx as K } from "../utils/cn.js";
11
- const Q = ({
12
- id: c,
13
- children: d,
14
- className: A,
15
- disabled: E = !1,
16
- placeholder: m = "Drop items here",
17
- icon: f = /* @__PURE__ */ n(B, {}),
18
- render: O,
19
- onDrop: i,
20
- validate: R,
21
- multiple: o,
2
+ import { jsxs as w, jsx as i } from "react/jsx-runtime";
3
+ import { memo as B, useCallback as N, useMemo as z } from "react";
4
+ import { useDroppable as P } from "./hooks.js";
5
+ import { ArrowsOutCardinalIcon as S } from "@bioturing/assets";
6
+ import { useRender as W } from "@base-ui/react/use-render";
7
+ import { Value as F } from "./value.js";
8
+ import { uniqWith as G, isEqual as H } from "es-toolkit";
9
+ import { useCls as I } from "../utils/antdUtils.js";
10
+ import { clsx as J } from "../utils/cn.js";
11
+ const K = (t) => Array.isArray(t) ? t.length > 0 : !!t, Q = {
12
+ value: (t) => K(t) ? { "data-value": "true" } : null,
13
+ onChange: () => null
14
+ }, T = ({
15
+ id: t,
16
+ children: p,
17
+ className: D,
18
+ disabled: x = !1,
19
+ placeholder: c = "Drop items here",
20
+ icon: d = /* @__PURE__ */ i(S, {}),
21
+ render: y,
22
+ onDrop: a,
23
+ validate: h,
24
+ multiple: s,
22
25
  value: r,
23
- onChange: s,
24
- maxItems: p,
25
- renderValueLabel: a,
26
+ onChange: e,
27
+ maxItems: m,
28
+ renderValueLabel: f,
26
29
  renderValueIcon: l,
27
- ...j
30
+ ...E
28
31
  }) => {
29
- const e = J(), q = x(
30
- (t) => {
31
- i && i(t), s && s(
32
- o ? H([...r, t.data], I) : t.data
32
+ const o = I(), M = N(
33
+ (n) => {
34
+ a && a(n), e && e(
35
+ s ? G([...r, n.data], H) : n.data
33
36
  );
34
37
  },
35
- [i, s, o, r]
36
- ), { isOver: y, setNodeRef: k, attributes: u, listeners: w } = h({
37
- id: c,
38
- disabled: E,
39
- onDrop: q,
40
- validate: R
41
- }), N = D(
38
+ [a, e, s, r]
39
+ ), { isOver: O, setNodeRef: R, attributes: j, listeners: q } = P({
40
+ id: t,
41
+ disabled: x,
42
+ onDrop: M,
43
+ validate: h
44
+ }), u = z(
42
45
  () => ({
43
46
  value: r,
44
- onChange: s,
45
- multiple: o,
46
- renderValueLabel: a,
47
+ onChange: e,
48
+ multiple: s,
49
+ renderValueLabel: f,
47
50
  renderValueIcon: l,
48
- maxItems: p
51
+ maxItems: m
49
52
  }),
50
- [r, s, o, a, l, p]
51
- ), z = D(
52
- () => d || /* @__PURE__ */ P("div", { className: e("drop-zone-content"), children: [
53
- /* @__PURE__ */ n("div", { className: e("drop-zone-icon"), children: f }),
54
- /* @__PURE__ */ n("div", { className: e("drop-zone-text"), children: m })
53
+ [r, e, s, f, l, m]
54
+ ), b = z(
55
+ () => p || /* @__PURE__ */ w("div", { className: o("drop-zone-content"), children: [
56
+ /* @__PURE__ */ i("div", { className: o("drop-zone-icon"), children: d }),
57
+ /* @__PURE__ */ i("div", { className: o("drop-zone-text"), children: c })
55
58
  ] }),
56
- [d, e, f, m]
57
- ), M = x(
58
- ({ className: t, ...b }) => !r || o && Array.isArray(r) && !r.length ? /* @__PURE__ */ n(
59
+ [p, o, d, c]
60
+ ), k = N(
61
+ ({ className: n, ...A }) => !r || s && Array.isArray(r) && !r.length ? /* @__PURE__ */ i(
59
62
  "div",
60
63
  {
61
- className: K(e("drop-zone"), t),
62
- ...b,
63
- children: z
64
+ className: J(o("drop-zone"), n),
65
+ ...A,
66
+ children: b
64
67
  }
65
- ) : /* @__PURE__ */ n(
66
- G,
68
+ ) : /* @__PURE__ */ i(
69
+ F,
67
70
  {
68
- ...N,
69
- className: t,
70
- ...b
71
+ ...u,
72
+ className: n,
73
+ ...A
71
74
  }
72
75
  ),
73
- [r, o, N, z, e]
76
+ [r, s, u, b, o]
74
77
  );
75
- return F({
76
- render: O ?? M,
77
- ref: k,
78
+ return W({
79
+ render: y ?? k,
80
+ ref: R,
78
81
  props: {
79
- className: A,
80
- ...u,
81
- ...w,
82
- ...j
82
+ className: D,
83
+ ...j,
84
+ ...q,
85
+ ...E
83
86
  },
84
87
  state: {
85
- isOver: y,
88
+ isOver: O,
86
89
  value: r,
87
- onChange: s,
88
- id: c
89
- }
90
+ onChange: e,
91
+ id: t
92
+ },
93
+ stateAttributesMapping: Q
90
94
  });
91
- }, v = W(Q);
95
+ }, v = B(T);
92
96
  export {
93
97
  v as Droppable
94
98
  };