/*!
 * Copyright (c) 2023-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 { PropsWithChildren, ReactElement, ReactNode } from "react";
import { DesignTokens } from "../../OdysseyDesignTokensContext.js";
import { type BasePickerProps, type BasePickerType, type BaseRenderOptionProps } from "./ComposablePicker.js";
export declare const StyledOption: import("@emotion/styled").StyledComponent<{
    theme?: import("@emotion/react").Theme;
    as?: React.ElementType;
} & {
    hasAdornment?: boolean;
}, import("react").DetailedHTMLProps<import("react").LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, {}>;
export declare const OptionLabelContainer: import("@emotion/styled").StyledComponent<{
    theme?: import("@emotion/react").Theme;
    as?: React.ElementType;
} & {
    odysseyDesignTokens: DesignTokens;
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
export declare const OptionDescription: import("@emotion/styled").StyledComponent<{
    theme?: import("@emotion/react").Theme;
    as?: React.ElementType;
} & {
    odysseyDesignTokens: DesignTokens;
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, {}>;
export declare const OptionDetails: import("@emotion/styled").StyledComponent<{
    theme?: import("@emotion/react").Theme;
    as?: React.ElementType;
} & {
    odysseyDesignTokens: DesignTokens;
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
export declare const OptionDetail: import("@emotion/styled").StyledComponent<{
    theme?: import("@emotion/react").Theme;
    as?: React.ElementType;
} & {
    odysseyDesignTokens: DesignTokens;
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
export type BaseOptionProps = {
    muiProps: BaseRenderOptionProps;
    odysseyDesignTokens: DesignTokens;
};
type OptionComponentProps = {
    hasAdornment?: boolean;
    muiProps: BaseOptionProps["muiProps"];
};
export declare const Option: ({ children, hasAdornment, muiProps, }: PropsWithChildren<OptionComponentProps>) => import("@emotion/react/jsx-runtime").JSX.Element;
export declare const OptionMetadataComponent: ({ metaData, odysseyDesignTokens, }: {
    metaData: OptionMetadata[];
    odysseyDesignTokens: DesignTokens;
}) => import("@emotion/react/jsx-runtime").JSX.Element;
export declare const OptionDescriptionComponent: ({ description, odysseyDesignTokens, }: {
    description?: LabelDescription["description"];
    odysseyDesignTokens: DesignTokens;
}) => "" | import("@emotion/react/jsx-runtime").JSX.Element | undefined;
export type OptionProps<OptionType> = {
    option: OptionType;
};
export declare const OptionLabelOnlyComponent: <OptionType extends OptionLabelOnly>({ muiProps, odysseyDesignTokens, option, }: BaseOptionProps & OptionProps<OptionType>) => import("@emotion/react/jsx-runtime").JSX.Element;
export type OptionMetadata = {
    detailText: string | number;
    icon: ReactElement;
};
export type OptionGroupType = {
    group?: string;
};
export type OptionValueType = {
    value: string | number;
};
export type OptionLabelType = {
    label: string;
};
export type BaseOptionType = OptionValueType & OptionGroupType & OptionLabelType;
export type Metadata = {
    metaData: OptionMetadata[];
};
export type OptionLabelOnly = BaseOptionType;
export type LabelDescription = BaseOptionType & {
    description?: string;
};
export type LabelDescriptionMetadata = LabelDescription & Metadata;
export type PickerProps<OptionType extends LabelDescription | LabelDescriptionMetadata, HasMultipleChoices extends boolean | undefined, IsCustomValueAllowed extends boolean | undefined> = BasePickerProps<OptionType, HasMultipleChoices, IsCustomValueAllowed>;
export type PickerComponentType = {
    <OptionType extends OptionLabelOnly, HasMultipleChoices extends boolean | undefined, IsCustomValueAllowed extends boolean | undefined>(props: PickerProps<OptionType, HasMultipleChoices, IsCustomValueAllowed>): ReactNode;
    <OptionType extends LabelDescriptionMetadata, HasMultipleChoices extends boolean | undefined, IsCustomValueAllowed extends boolean | undefined>(props: PickerProps<OptionType, HasMultipleChoices, IsCustomValueAllowed>): ReactNode;
    <OptionType extends LabelDescription, HasMultipleChoices extends boolean | undefined, IsCustomValueAllowed extends boolean | undefined>(props: PickerProps<OptionType, HasMultipleChoices, IsCustomValueAllowed>): ReactNode;
    <OptionType extends LabelDescriptionMetadata, HasMultipleChoices extends boolean | undefined, IsCustomValueAllowed extends boolean | undefined>(props: PickerProps<OptionType, HasMultipleChoices, IsCustomValueAllowed>): ReactNode;
};
declare const MemoizedPicker: BasePickerType;
export { MemoizedPicker as Picker };
//# sourceMappingURL=Picker.d.ts.map