@bioturing/components 0.42.0 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/components/button/component.d.ts.map +1 -1
  2. package/dist/components/button/component.js +41 -34
  3. package/dist/components/button/component.js.map +1 -1
  4. package/dist/components/button/style.css +1 -1
  5. package/dist/components/combobox/component.d.ts.map +1 -1
  6. package/dist/components/combobox/component.js +136 -126
  7. package/dist/components/combobox/component.js.map +1 -1
  8. package/dist/components/command-palette/component.d.ts +7 -0
  9. package/dist/components/command-palette/component.d.ts.map +1 -1
  10. package/dist/components/command-palette/component.js +35 -33
  11. package/dist/components/command-palette/component.js.map +1 -1
  12. package/dist/components/dropdown-menu/component.d.ts +8 -1
  13. package/dist/components/dropdown-menu/component.d.ts.map +1 -1
  14. package/dist/components/dropdown-menu/component.js +165 -141
  15. package/dist/components/dropdown-menu/component.js.map +1 -1
  16. package/dist/components/dropdown-menu/style.css +1 -1
  17. package/dist/components/ds-root/component.d.ts +6 -1
  18. package/dist/components/ds-root/component.d.ts.map +1 -1
  19. package/dist/components/ds-root/component.js +15 -14
  20. package/dist/components/ds-root/component.js.map +1 -1
  21. package/dist/components/form/style.css +1 -1
  22. package/dist/components/hooks/index.d.ts +0 -1
  23. package/dist/components/hooks/index.d.ts.map +1 -1
  24. package/dist/components/index.d.ts +1 -0
  25. package/dist/components/index.d.ts.map +1 -1
  26. package/dist/components/label-with-help/component.d.ts +20 -0
  27. package/dist/components/label-with-help/component.d.ts.map +1 -0
  28. package/dist/components/label-with-help/component.js +39 -0
  29. package/dist/components/label-with-help/component.js.map +1 -0
  30. package/dist/components/label-with-help/index.d.ts +2 -0
  31. package/dist/components/label-with-help/index.d.ts.map +1 -0
  32. package/dist/components/label-with-help/style.css +1 -0
  33. package/dist/components/modal/Modal.d.ts.map +1 -1
  34. package/dist/components/modal/Modal.js +157 -133
  35. package/dist/components/modal/Modal.js.map +1 -1
  36. package/dist/components/popup-panel/component.d.ts +2 -111
  37. package/dist/components/popup-panel/component.d.ts.map +1 -1
  38. package/dist/components/popup-panel/component.js +253 -139
  39. package/dist/components/popup-panel/component.js.map +1 -1
  40. package/dist/components/popup-panel/constants.d.ts +1 -0
  41. package/dist/components/popup-panel/constants.d.ts.map +1 -1
  42. package/dist/components/popup-panel/constants.js +2 -0
  43. package/dist/components/popup-panel/constants.js.map +1 -1
  44. package/dist/components/popup-panel/index.d.ts +1 -0
  45. package/dist/components/popup-panel/index.d.ts.map +1 -1
  46. package/dist/components/popup-panel/types.d.ts +124 -0
  47. package/dist/components/popup-panel/types.d.ts.map +1 -0
  48. package/dist/components/popup-panel/utils.d.ts +1 -1
  49. package/dist/components/popup-panel/utils.d.ts.map +1 -1
  50. package/dist/components/popup-panel/utils.js +5 -5
  51. package/dist/components/popup-panel/utils.js.map +1 -1
  52. package/dist/components/resizable/component.d.ts.map +1 -1
  53. package/dist/components/resizable/component.js +28 -28
  54. package/dist/components/resizable/component.js.map +1 -1
  55. package/dist/components/select/component.d.ts.map +1 -1
  56. package/dist/components/select/component.js +130 -120
  57. package/dist/components/select/component.js.map +1 -1
  58. package/dist/components/toast/component.d.ts +2 -2
  59. package/dist/components/toast/component.d.ts.map +1 -1
  60. package/dist/components/toast/component.js +14 -20
  61. package/dist/components/toast/component.js.map +1 -1
  62. package/dist/components/toast/function.d.ts +7 -8
  63. package/dist/components/toast/function.d.ts.map +1 -1
  64. package/dist/components/toast/function.js.map +1 -1
  65. package/dist/components/toast/style.css +1 -1
  66. package/dist/components/toast/types.d.ts +4 -0
  67. package/dist/components/toast/types.d.ts.map +1 -1
  68. package/dist/components/utils/placement.d.ts +9 -2
  69. package/dist/components/utils/placement.d.ts.map +1 -1
  70. package/dist/components/utils/placement.js +29 -18
  71. package/dist/components/utils/placement.js.map +1 -1
  72. package/dist/components/utils/reactElement.d.ts +2 -0
  73. package/dist/components/utils/reactElement.d.ts.map +1 -1
  74. package/dist/components/utils/reactElement.js +10 -2
  75. package/dist/components/utils/reactElement.js.map +1 -1
  76. package/dist/components/utils/renderProp.d.ts.map +1 -1
  77. package/dist/components/utils/renderProp.js +9 -8
  78. package/dist/components/utils/renderProp.js.map +1 -1
  79. package/dist/index.js +191 -189
  80. package/dist/metadata.d.ts +8 -0
  81. package/dist/metadata.d.ts.map +1 -1
  82. package/dist/metadata.js +15 -0
  83. package/dist/metadata.js.map +1 -1
  84. package/dist/stats.html +1 -1
  85. package/package.json +2 -2
  86. package/dist/components/hooks/useBaseUIPlacement.d.ts +0 -64
  87. package/dist/components/hooks/useBaseUIPlacement.d.ts.map +0 -1
  88. package/dist/components/hooks/useBaseUIPlacement.js +0 -61
  89. package/dist/components/hooks/useBaseUIPlacement.js.map +0 -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} 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 \"./style.css\";\n\nexport type ComboboxOption<\n T extends React.Key,\n O extends Record<string, unknown> = {}\n> = {\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 filterOption?:\n | boolean\n | ((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\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 // 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 ...rest\n }: ComboboxProps<T, M, O>,\n ref: React.ForwardedRef<HTMLDivElement>\n) => {\n const [value, setValue] = useControlledState(\n controlledValue,\n onChange,\n defaultValue !== undefined\n ? defaultValue\n : multiple\n ? ([] as T[])\n : undefined\n );\n\n const [open, setOpen] = useControlledState(\n controlledOpen,\n onOpenChange,\n false\n );\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 // 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) =>\n options.some((opt) => opt.value === val)\n );\n const checked =\n selectedFromFiltered.length === options.length && options.length > 0;\n const indeterminate =\n selectedFromFiltered.length > 0 &&\n 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 }, [\n showSelectAll,\n multiple,\n options,\n selectedValues,\n handleDeselectAll,\n handleSelectAll,\n ]);\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${\n selectedValues.length === 1 ? \"\" : \"s\"\n } selected`\n : null;\n } else {\n const selectedOption = options.find(\n (opt) => opt.value === selectedValues[0]\n );\n return selectedOption?.label || null;\n }\n }, [multiple, selectedValues, options]);\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 return (\n <div ref={ref} className={clsx(cls(\"combobox\"), className)} {...rest}>\n <BaseCombobox.Root<T, M>\n value={\n (multiple\n ? selectedValues\n : selectedValues[0] ?? null) as M extends true ? T[] : 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 open={open}\n onOpenChange={setOpen}\n multiple={multiple}\n disabled={disabled}\n items={baseUIItems}\n itemToStringLabel={(itemValue) => {\n const option = options.find((opt) => opt.value === itemValue);\n return reactNodeToString(option?.label || String(itemValue));\n }}\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(\n classNames?.trigger,\n cls(\"combobox-trigger-single\")\n )}\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Input\n placeholder={placeholder}\n className={clsx(className, inputClassName)}\n disabled={disabled}\n onChange={(event) => {\n onSearch?.(event.target.value);\n }}\n {...rest}\n />\n )}\n />\n <SelectTrigger.Clear\n render={(props) => (\n <BaseCombobox.Clear {...props}></BaseCombobox.Clear>\n )}\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(\n classNames?.trigger,\n cls(\"combobox-trigger-multiple\")\n )}\n as=\"div\"\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Chips\n className={clsx(cls(\"combobox-chips\"), className)}\n {...rest}\n >\n <BaseCombobox.Value>\n {(selectedItems) => (\n <>\n {selectedItems.map((item: T) => {\n const option = options.find(\n (opt) => opt.value === item\n );\n return (\n <BaseCombobox.Chip\n key={item}\n className={clsx(cls(\"combobox-chip\"))}\n >\n {option?.icon && (\n <span\n className={clsx(cls(\"combobox-chip-icon\"))}\n >\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={\n selectedItems.length > 0 ? \"\" : placeholder\n }\n className={inputClassName}\n disabled={disabled}\n onChange={(event) => {\n onSearch?.(event.target.value);\n }}\n />\n </>\n )}\n </BaseCombobox.Value>\n </BaseCombobox.Chips>\n )}\n />\n <SelectTrigger.Clear\n render={(props) => (\n <BaseCombobox.Clear {...props}></BaseCombobox.Clear>\n )}\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 render={(props) => <BaseMenu.Root {...props}></BaseMenu.Root>}\n >\n <BaseCombobox.Popup\n className={clsx(cls(\"combobox-popup\"), classNames?.portal)}\n render={(props) => <BaseMenu.Popup {...props}></BaseMenu.Popup>}\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\n render={(props) => <BaseMenu.Divider {...props} />}\n />\n </>\n )}\n <BaseCombobox.List\n className={clsx(cls(\"combobox-list\"), classNames?.list)}\n render={(props) => <BaseMenu.List {...props}></BaseMenu.List>}\n >\n {(item: T) => {\n const option = options.find((opt) => opt.value === item);\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":["ComboboxInner","options","controlledValue","defaultValue","onChange","placeholder","disabledProp","statusProp","allowClear","multiple","_showSearch","controlledOpen","onOpenChange","className","classNames","size","optionRender","onSearch","clearIcon","suffixIcon","showSelectAll","optionLabelRender","_getOptionKeywords","option","reactNodeToString","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","selectAllOption","selectedFromFiltered","val","opt","checked","indeterminate","baseUIItems","displayValue","inputClassName","clsx","jsx","jsxs","BaseCombobox","itemValue","SelectTrigger","children","selectedItems","Fragment","item","XIcon","event","props","icon","BaseMenu","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} 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 \"./style.css\";\n\nexport type ComboboxOption<\n T extends React.Key,\n O extends Record<string, unknown> = {},\n> = {\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 filterOption?:\n | boolean\n | ((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\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 // 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 ...rest\n }: ComboboxProps<T, M, O>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) => {\n const [value, setValue] = useControlledState(\n controlledValue,\n onChange,\n defaultValue !== undefined\n ? defaultValue\n : multiple\n ? ([] as T[])\n : undefined,\n );\n\n const [open, setOpen] = useControlledState(\n controlledOpen,\n onOpenChange,\n false,\n );\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 // 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) =>\n options.some((opt) => opt.value === val),\n );\n const checked =\n selectedFromFiltered.length === options.length && options.length > 0;\n const indeterminate =\n selectedFromFiltered.length > 0 &&\n 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 }, [\n showSelectAll,\n multiple,\n options,\n selectedValues,\n handleDeselectAll,\n handleSelectAll,\n ]);\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${\n selectedValues.length === 1 ? \"\" : \"s\"\n } selected`\n : null;\n } else {\n const selectedOption = options.find(\n (opt) => opt.value === selectedValues[0],\n );\n return selectedOption?.label || null;\n }\n }, [multiple, selectedValues, options]);\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 // Memoize render props to avoid recreating on every render\n const positionerRender = useCallback(\n (props: React.ComponentProps<\"div\">) => (\n <BaseMenu.Root {...props}></BaseMenu.Root>\n ),\n [],\n );\n\n const popupRender = useCallback(\n (props: React.ComponentProps<\"div\">) => (\n <BaseMenu.Popup {...props}></BaseMenu.Popup>\n ),\n [],\n );\n\n const separatorRender = useCallback(\n (props: React.ComponentProps<\"div\">) => <BaseMenu.Divider {...props} />,\n [],\n );\n\n const listRender = useCallback(\n (props: React.ComponentProps<\"div\">) => (\n <BaseMenu.List {...props}></BaseMenu.List>\n ),\n [],\n );\n\n const itemToStringLabel = useCallback(\n (itemValue: T) => {\n const option = options.find((opt) => opt.value === itemValue);\n return reactNodeToString(option?.label || String(itemValue));\n },\n [options],\n );\n\n return (\n <div ref={ref} className={clsx(cls(\"combobox\"), className)} {...rest}>\n <BaseCombobox.Root<T, M>\n value={\n (multiple\n ? selectedValues\n : (selectedValues[0] ?? null)) as M extends true ? T[] : 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 open={open}\n onOpenChange={setOpen}\n multiple={multiple}\n disabled={disabled}\n items={baseUIItems}\n itemToStringLabel={itemToStringLabel}\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(\n classNames?.trigger,\n cls(\"combobox-trigger-single\"),\n )}\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Input\n placeholder={placeholder}\n className={clsx(className, inputClassName)}\n disabled={disabled}\n onChange={(event) => {\n onSearch?.(event.target.value);\n }}\n {...rest}\n />\n )}\n />\n <SelectTrigger.Clear\n render={(props) => (\n <BaseCombobox.Clear {...props}></BaseCombobox.Clear>\n )}\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(\n classNames?.trigger,\n cls(\"combobox-trigger-multiple\"),\n )}\n as=\"div\"\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Chips\n className={clsx(cls(\"combobox-chips\"), className)}\n {...rest}\n >\n <BaseCombobox.Value>\n {(selectedItems) => (\n <>\n {selectedItems.map((item: T) => {\n const option = options.find(\n (opt) => opt.value === item,\n );\n return (\n <BaseCombobox.Chip\n key={item}\n className={clsx(cls(\"combobox-chip\"))}\n >\n {option?.icon && (\n <span\n className={clsx(cls(\"combobox-chip-icon\"))}\n >\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={\n selectedItems.length > 0 ? \"\" : placeholder\n }\n className={inputClassName}\n disabled={disabled}\n onChange={(event) => {\n onSearch?.(event.target.value);\n }}\n />\n </>\n )}\n </BaseCombobox.Value>\n </BaseCombobox.Chips>\n )}\n />\n <SelectTrigger.Clear\n render={(props) => (\n <BaseCombobox.Clear {...props}></BaseCombobox.Clear>\n )}\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 render={positionerRender}\n >\n <BaseCombobox.Popup\n className={clsx(cls(\"combobox-popup\"), classNames?.portal)}\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 = options.find((opt) => opt.value === item);\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":["ComboboxInner","options","controlledValue","defaultValue","onChange","placeholder","disabledProp","statusProp","allowClear","multiple","_showSearch","controlledOpen","onOpenChange","className","classNames","size","optionRender","onSearch","clearIcon","suffixIcon","showSelectAll","optionLabelRender","_getOptionKeywords","option","reactNodeToString","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","selectAllOption","selectedFromFiltered","val","opt","checked","indeterminate","baseUIItems","displayValue","inputClassName","clsx","positionerRender","props","jsx","BaseMenu","popupRender","separatorRender","listRender","itemToStringLabel","itemValue","jsxs","BaseCombobox","SelectTrigger","children","selectedItems","Fragment","item","XIcon","event","icon","BaseMenuItem","isSelected","Empty","MainCombobox","forwardRef","Combobox"],"mappings":"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"}
@@ -41,6 +41,13 @@ export interface CommandPaletteProps {
41
41
  item?: string;
42
42
  groupLabel?: string;
43
43
  };
44
+ /**
45
+ * Whether the trigger should act as a native button element.
46
+ * Set to false when using non-button elements as trigger
47
+ * to suppress Base UI warnings and remove native button semantics.
48
+ * @default true
49
+ */
50
+ nativeButton?: boolean;
44
51
  }
45
52
  export declare const CommandPalette: React.FC<CommandPaletteProps>;
46
53
  export {};
@@ -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;CACH;AAoBD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAiNxD,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,CAoNxD,CAAC"}
@@ -1,57 +1,58 @@
1
1
  "use client";
2
2
  import { jsx as o, jsxs as c } from "react/jsx-runtime";
3
- import O, { useEffect as R, useMemo as V, useCallback as D } from "react";
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
6
  import { Dialog as u } from "@base-ui/react/dialog";
7
- import { useDropdownMenu as A } from "../dropdown-menu/useDropdownMenu.js";
7
+ import { useDropdownMenu as j } from "../dropdown-menu/useDropdownMenu.js";
8
8
  import './style.css';/* empty css */
9
- import { DropdownMenuItem as j } from "../dropdown-menu/item.js";
10
- import { DropdownMenuDivider as x } from "../dropdown-menu/divider.js";
11
- import { useCls as _ } from "../utils/antdUtils.js";
12
- import { useControlledState as B } from "../hooks/useControlledState.js";
13
- import { useTheme as F } from "../theme-provider/context/themeStore.js";
14
- import { Input as I } from "../input/component.js";
15
- import { ScrollArea as q } from "../scroll-area/component.js";
9
+ import { DropdownMenuItem as x } from "../dropdown-menu/item.js";
10
+ import { DropdownMenuDivider as _ } from "../dropdown-menu/divider.js";
11
+ import { useCls as B } from "../utils/antdUtils.js";
12
+ import { useControlledState as F } from "../hooks/useControlledState.js";
13
+ import { useTheme as I } from "../theme-provider/context/themeStore.js";
14
+ import { Input as q } from "../input/component.js";
15
+ import { ScrollArea as z } from "../scroll-area/component.js";
16
16
  import { clsx as d } from "../utils/cn.js";
17
- import { createRenderProp as z } from "../utils/renderProp.js";
18
- const H = [
17
+ import { createRenderProp as H } from "../utils/renderProp.js";
18
+ const J = [
19
19
  { key: "k", metaKey: !0 },
20
20
  { key: "k", ctrlKey: !0 }
21
21
  ];
22
- function J(a, m) {
22
+ function Q(a, m) {
23
23
  return a.key.toLowerCase() === m.key.toLowerCase() && !!a.metaKey == !!m.metaKey && !!a.ctrlKey == !!m.ctrlKey && !!a.altKey == !!m.altKey && !!a.shiftKey == !!m.shiftKey;
24
24
  }
25
- const ue = ({
25
+ const pe = ({
26
26
  children: a,
27
27
  open: m,
28
28
  onOpenChange: M,
29
29
  defaultOpen: E = !1,
30
30
  items: P = [],
31
- shortcuts: f = H,
31
+ shortcuts: f = J,
32
32
  placeholder: h = "Type a command or search...",
33
33
  emptyText: g = "No results found.",
34
34
  className: T,
35
- classNames: r
35
+ classNames: r,
36
+ nativeButton: $ = !0
36
37
  }) => {
37
- const n = _(), [$, p] = B(
38
+ const n = B(), [G, p] = F(
38
39
  m,
39
40
  M,
40
41
  E
41
- ), [y, b] = O.useState(""), C = v(() => {
42
+ ), [y, b] = R.useState(""), C = v(() => {
42
43
  p(!1);
43
44
  }), k = v(() => {
44
45
  p((e) => !e);
45
46
  });
46
- R(() => {
47
+ V(() => {
47
48
  const e = (t) => {
48
49
  f.find(
49
- (s) => J(t, s)
50
+ (s) => Q(t, s)
50
51
  ) && (t.preventDefault(), k());
51
52
  };
52
53
  return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
53
54
  }, [f, k]);
54
- const { itemGroups: w } = A({
55
+ const { itemGroups: w } = j({
55
56
  items: P,
56
57
  inCombobox: !0,
57
58
  onOpenChange: (e) => {
@@ -62,12 +63,12 @@ const ue = ({
62
63
  groupLabel: r?.groupLabel,
63
64
  item: r?.item
64
65
  }
65
- }), S = V(() => w.map((t) => ({
66
+ }), S = A(() => w.map((t) => ({
66
67
  label: t.label || "",
67
68
  items: t.items
68
- })), [w]), { className: K } = F(), L = D(
69
+ })), [w]), { className: K } = I(), L = D(
69
70
  (e, t, l) => e.type === "item" ? /* @__PURE__ */ o(
70
- j,
71
+ x,
71
72
  {
72
73
  item: e,
73
74
  inCombobox: !0,
@@ -78,14 +79,14 @@ const ue = ({
78
79
  },
79
80
  `${t}-${l}`
80
81
  ) : e.type === "divider" ? /* @__PURE__ */ o(
81
- x,
82
+ _,
82
83
  {
83
84
  inCombobox: !0
84
85
  },
85
86
  `${t}-${l}`
86
87
  ) : null,
87
88
  [r?.item, C]
88
- ), G = D(() => /* @__PURE__ */ c(
89
+ ), N = D(() => /* @__PURE__ */ c(
89
90
  i.Root,
90
91
  {
91
92
  items: S,
@@ -99,7 +100,7 @@ const ue = ({
99
100
  i.Input,
100
101
  {
101
102
  render: ({ ref: e, ...t }) => /* @__PURE__ */ o(
102
- I,
103
+ q,
103
104
  {
104
105
  placeholder: h,
105
106
  value: y,
@@ -111,7 +112,7 @@ const ue = ({
111
112
  )
112
113
  }
113
114
  ) }),
114
- /* @__PURE__ */ c(q, { fadeEdges: !0, children: [
115
+ /* @__PURE__ */ c(z, { fadeEdges: !0, children: [
115
116
  /* @__PURE__ */ o(
116
117
  i.List,
117
118
  {
@@ -161,16 +162,17 @@ const ue = ({
161
162
  L,
162
163
  y,
163
164
  r
164
- ]), N = {
165
+ ]), O = {
165
166
  className: d(
166
167
  n("command-palette-trigger"),
167
168
  r?.trigger,
168
169
  K
169
170
  ),
170
- render: (e, t) => z(a, e, t)
171
+ render: (e, t) => H(a, e, t),
172
+ nativeButton: $
171
173
  };
172
- return /* @__PURE__ */ c(u.Root, { open: $, onOpenChange: p, modal: !0, children: [
173
- a && /* @__PURE__ */ o(u.Trigger, { ...N }),
174
+ return /* @__PURE__ */ c(u.Root, { open: G, onOpenChange: p, modal: !0, children: [
175
+ a && /* @__PURE__ */ o(u.Trigger, { ...O }),
174
176
  /* @__PURE__ */ c(u.Portal, { children: [
175
177
  /* @__PURE__ */ o(
176
178
  u.Backdrop,
@@ -186,13 +188,13 @@ const ue = ({
186
188
  K,
187
189
  r?.content
188
190
  ),
189
- children: /* @__PURE__ */ o("div", { className: n("command-palette", T, r?.root), children: G() })
191
+ children: /* @__PURE__ */ o("div", { className: n("command-palette", T, r?.root), children: N() })
190
192
  }
191
193
  )
192
194
  ] })
193
195
  ] });
194
196
  };
195
197
  export {
196
- ue as CommandPalette
198
+ pe as CommandPalette
197
199
  };
198
200
  //# sourceMappingURL=component.js.map
@@ -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\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}) => {\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 } = {\n className: clsx(\n cls(\"command-palette-trigger\"),\n classNames?.trigger,\n themeClassName\n ),\n render: (props, state) => createRenderProp(children, props, state),\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","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={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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"}
@@ -76,6 +76,13 @@ export interface DropdownMenuProps extends Omit<UseDropdownMenuProps, "className
76
76
  * Content to display after the list
77
77
  */
78
78
  afterList?: React.ReactNode;
79
+ /**
80
+ * Whether the trigger should act as a native button element.
81
+ * Set to false when using non-button elements (like Typography.Link) as trigger
82
+ * to suppress Base UI warnings and remove native button semantics.
83
+ * @default true
84
+ */
85
+ nativeButton?: boolean;
79
86
  }
80
- export declare const DropdownMenu: ({ children, items, placement, openOnHover, open: outsideOpen, onOpenChange: outsideOnOpenChange, defaultOpen, className, itemRender, classNames, size, showSearch, inCombobox: inComboboxProp, searchProps, popupMatchTriggerWidth, beforeList, afterList, keepOpenOnSelect, highlightedItemKey, selectedItemKeys, getItemKeywords, showCheckbox, itemLabelRender, }: DropdownMenuProps) => import("react/jsx-runtime").JSX.Element;
87
+ export declare const DropdownMenu: ({ children, items, placement, openOnHover, open: outsideOpen, onOpenChange: outsideOnOpenChange, defaultOpen, className, itemRender, classNames, size, showSearch, inCombobox: inComboboxProp, searchProps, popupMatchTriggerWidth, beforeList, afterList, keepOpenOnSelect, highlightedItemKey, selectedItemKeys, getItemKeywords, showCheckbox, itemLabelRender, nativeButton, }: DropdownMenuProps) => import("react/jsx-runtime").JSX.Element;
81
88
  //# sourceMappingURL=component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/component.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAepD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAmB,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,oBAAoB,EACpB,YAAY,CACb;IACC,0DAA0D;IAC1D,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D;;;OAGG;IACH,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAEvC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,OAAO,cAAc,CAAC;IAC5C;;OAEG;IACH,WAAW,CAAC,EAAE;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B;AAED,eAAO,MAAM,YAAY,GAAI,sWA0B1B,iBAAiB,4CA+MnB,CAAC"}
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/component.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAcpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAmB,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,oBAAoB,EACpB,YAAY,CACb;IACC,0DAA0D;IAC1D,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D;;;OAGG;IACH,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAEvC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,OAAO,cAAc,CAAC;IAC5C;;OAEG;IACH,WAAW,CAAC,EAAE;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,YAAY,GAAI,oXA2B1B,iBAAiB,4CA+OnB,CAAC"}