import React from "react";
import { VoidFunc } from "../../../fd-toolbox/functions/internal-getter-setter-functions";
import { Command as CommandPrimitive } from "cmdk";
import { multiSelectVariants } from "./Multiselect.funcs";
import { VariantProps } from "class-variance-authority";
import { WithOpen } from "../../../fd-toolbox/types/ref-object";
import type { RefObjectType } from "../../../fd-toolbox/types/react-types";
interface MultiselectTriggerProps {
    className?: string;
    ref?: React.Ref<HTMLDivElement>;
    children?: React.ReactNode;
}
interface MultiselectItemProps {
    className?: string;
    disabled?: boolean;
    value: string;
    children: React.ReactNode;
    selectAll?: boolean;
    ref?: React.Ref<React.ComponentRef<typeof CommandPrimitive.Item>>;
}
/**
 * Props of {@link Multiselect}
 */
export type MultiselectProps = {
    /** Values selected in the multiselect */
    values: string[];
    /** Event handler called when the selected values change */
    onValuesChange: VoidFunc<string[]>;
    /** Map of display values for the selected options */
    displayValues?: Map<string, string>;
    /** Whether the multiselect should loop */
    loop?: boolean;
    /** Whether the multiselect is disabled */
    disabled: boolean;
    /** Whether the multiselect should show a "Select All" option */
    showSelectAll?: boolean;
    /** Event handler called when the multiselect's open state changes */
    onOpenChange?: VoidFunc<boolean>;
    className?: string;
    dir?: string;
    children?: React.ReactNode;
    id?: string;
    /** Ref for the open trigger element */
    ref?: RefObjectType<WithOpen>;
} & VariantProps<typeof multiSelectVariants>;
/**
 * Props of {@link MultiselectInput}
 */
export type MultiselectInputProps = {
    /** Animated placeholder text for the input */
    animatedPlaceholder?: string;
} & React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>;
/**
 * Root container component for the multiselect dropdown functionality
 *
 * @param MultiselectProps {@link MultiselectProps}
 *
 * @example
 * ```tsx
 * function MyComponent() {
 *     const [selectedValues, setSelectedValues] = useState<string[]>([]);
 *
 *     return (
 *         <MultiSelect
 *             values={selectedValues}
 *             onValuesChange={setSelectedValues}
 *             displayValues={new Map([["option1", "Option 1"], ["option2", "Option 2"]])}
 *             disabled={false}
 *             showSelectAll
 *             variant="float"
 *         >
 *             ...
 *         </MultiSelect>
 *     );
 * }
 * ```
 */
declare function MultiSelect({ values: value, onValuesChange: onValueChange, displayValues, loop, className, children, dir, disabled, variant, showSelectAll, id, onOpenChange, ref, }: MultiselectProps): React.JSX.Element;
/**
 * Container component for the multiselect trigger
 *
 * {@link MultiselectTrigger}
 */
declare function MultiselectTrigger({ className, children, ref }: MultiselectTriggerProps): React.JSX.Element;
declare namespace MultiselectTrigger {
    var displayName: string;
}
/**
 * Input component that displays selected values and handles user text input for filtering options
 *
 * Based on {@link https:/ui.shadcn.com/docs/components/command Command.Input}
 *
 * @example
 * ```tsx
 * <MultiselectInput placeholder="Select options" animatedPlaceholder="Status"
 * />
 * ```
 */
declare function MultiselectInput({ className, placeholder, animatedPlaceholder, ref, }: MultiselectInputProps & {
    ref?: React.Ref<React.ComponentRef<typeof CommandPrimitive.Input>>;
}): React.JSX.Element;
declare namespace MultiselectInput {
    var displayName: string;
}
/**
 * Container component that wraps the dropdown content when the multiselect is open
 *
 * {@link MultiselectContent}
 */
declare function MultiselectContent({ children, className, ref, }: React.HTMLAttributes<HTMLDivElement> & {
    ref?: React.Ref<HTMLDivElement>;
}): React.JSX.Element;
declare namespace MultiselectContent {
    var displayName: string;
}
/**
 * Component that displays the list of selectable options in the dropdown
 *
 * Based on {@link https:/ui.shadcn.com/docs/components/command Command.List}
 */
declare function MultiselectList({ className, children, ref, }: React.ComponentPropsWithoutRef<typeof CommandPrimitive.List> & {
    ref?: React.Ref<React.ComponentRef<typeof CommandPrimitive.List>>;
}): React.JSX.Element;
declare namespace MultiselectList {
    var displayName: string;
}
/**
 * Individual selectable option within the multiselect dropdown list
 *
 * Based on {@link https:/ui.shadcn.com/docs/components/command Command.Item}
 *
 * @example
 * ```tsx
 * <MultiselectItem value="selectAll" selectAll>
 *   All
 * </MultiselectItem>
 * ```
 */
declare function MultiselectItem({ className, value, children, selectAll, ref, disabled }: MultiselectItemProps): React.JSX.Element;
declare namespace MultiselectItem {
    var displayName: string;
}
export { MultiSelect, MultiselectTrigger, MultiselectInput, MultiselectContent, MultiselectList, MultiselectItem, multiSelectVariants, };
