/*!
 * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.
 * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
 *
 * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *
 * See the License for the specific language governing permissions and limitations under the License.
 */
import { SelectProps as MuiSelectProps } from "@mui/material";
import React, { InputHTMLAttributes, ReactElement } from "react";
import type { HtmlProps } from "./HtmlProps.js";
import { FieldComponentProps } from "./FieldComponentProps.js";
import { FocusHandle } from "./inputUtils.js";
export type NativeSelectOption = {
    text: string;
    type?: "heading" | "option";
    value?: string;
};
export type NativeSelectValueType<HasMultipleChoices> = HasMultipleChoices extends true ? string[] : string;
export type NativeSelectProps<Value extends NativeSelectValueType<HasMultipleChoices>, HasMultipleChoices extends boolean> = {
    /**
     * This prop helps users to fill forms faster, especially on mobile devices.
     * The name can be confusing, as it's more like an autofill.
     * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill
     */
    autoCompleteType?: InputHTMLAttributes<HTMLInputElement>["autoComplete"];
    /**
     * The options or optgroup elements within the NativeSelect
     */
    children?: ReactElement<"option"> | ReactElement<"optgroup">;
    /**
     * The default value of the NativeSelect. Use when component is uncontrolled
     */
    defaultValue?: Value;
    /**
     * If `true`, the Select allows multiple selections
     */
    hasMultipleChoices?: HasMultipleChoices;
    /**
     * The ref forwarded to the NativeSelect
     */
    inputRef?: React.RefObject<FocusHandle>;
    /**
     * @deprecated Use `hasMultipleChoices` instead
     */
    /** **Deprecated:** use `hasMultipleChoices` */
    isMultiSelect?: HasMultipleChoices;
    /**
     * The label text for the NativeSelect
     */
    label: string;
    /**
     * Callback fired when the NativeSelect loses focus
     */
    onBlur?: MuiSelectProps<Value>["onBlur"];
    /**
     * Callback fired when the value of the NativeSelect changes
     */
    onChange?: MuiSelectProps<Value>["onChange"];
    /**
     * Callback fired when the NativeSelect gains focus
     */
    onFocus?: MuiSelectProps<Value>["onFocus"];
    options: Value;
    /**
     * The value or values selected in the NativeSelect. Use when component is controlled
     */
    value?: Value;
} & Pick<FieldComponentProps, "errorMessage" | "errorMessageList" | "hint" | "HintLinkComponent" | "id" | "isDisabled" | "isFullWidth" | "isOptional"> & Pick<HtmlProps, "ariaDescribedBy" | "testId" | "translate">;
declare const MemoizedNativeSelect: React.MemoExoticComponent<React.ForwardRefExoticComponent<{
    /**
     * This prop helps users to fill forms faster, especially on mobile devices.
     * The name can be confusing, as it's more like an autofill.
     * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill
     */
    autoCompleteType?: InputHTMLAttributes<HTMLInputElement>["autoComplete"];
    /**
     * The options or optgroup elements within the NativeSelect
     */
    children?: ReactElement<"option"> | ReactElement<"optgroup">;
    /**
     * The default value of the NativeSelect. Use when component is uncontrolled
     */
    defaultValue?: string | string[] | undefined;
    /**
     * If `true`, the Select allows multiple selections
     */
    hasMultipleChoices?: boolean | undefined;
    /**
     * The ref forwarded to the NativeSelect
     */
    inputRef?: React.RefObject<FocusHandle>;
    /**
     * @deprecated Use `hasMultipleChoices` instead
     */
    /** **Deprecated:** use `hasMultipleChoices` */
    isMultiSelect?: boolean | undefined;
    /**
     * The label text for the NativeSelect
     */
    label: string;
    /**
     * Callback fired when the NativeSelect loses focus
     */
    onBlur?: MuiSelectProps<Value>["onBlur"];
    /**
     * Callback fired when the value of the NativeSelect changes
     */
    onChange?: ((event: import("@mui/material").SelectChangeEvent<string | string[]>, child: React.ReactNode) => void) | undefined;
    /**
     * Callback fired when the NativeSelect gains focus
     */
    onFocus?: MuiSelectProps<Value>["onFocus"];
    options: string | string[];
    /**
     * The value or values selected in the NativeSelect. Use when component is controlled
     */
    value?: string | string[] | undefined;
} & Pick<FieldComponentProps, "id" | "isDisabled" | "HintLinkComponent" | "isOptional" | "errorMessage" | "errorMessageList" | "hint" | "isFullWidth"> & Pick<HtmlProps, "translate" | "ariaDescribedBy" | "testId"> & React.RefAttributes<React.ReactElement<any, string | React.JSXElementConstructor<any>>>>>;
export { MemoizedNativeSelect as NativeSelect };
//# sourceMappingURL=NativeSelect.d.ts.map