UNPKG

@codegouvfr/react-dsfr

Version:

French State Design System React integration library

62 lines (61 loc) 2.74 kB
import React, { type ReactNode, type CSSProperties, type ForwardedRef, type DetailedHTMLProps, type SelectHTMLAttributes, type ChangeEvent } from "react"; import type { FrClassName } from "./fr/generatedFromCss/classNames"; export type SelectProps<Options extends SelectProps.Option[]> = { id?: string; options: Options; className?: string; label: ReactNode; hint?: ReactNode; nativeSelectProps?: Omit<DetailedHTMLProps<SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>, "value" | "onChange"> & { value?: Options[number]["value"]; onChange?: (e: Omit<ChangeEvent<HTMLSelectElement>, "target" | "currentTarget"> & { target: Omit<EventTarget & HTMLSelectElement, "value" | "selectedOptions"> & { value: Options[number]["value"]; selectedOptions: HTMLCollectionOf<Omit<HTMLOptionElement, "value"> & { value: Options[number]["value"]; }>; }; currentTarget: Omit<EventTarget & HTMLSelectElement, "value" | "selectedOptions"> & { value: Options[number]["value"]; selectedOptions: HTMLCollectionOf<Omit<HTMLOptionElement, "value"> & { value: Options[number]["value"]; }>; }; }) => void; }; /** Default: false */ disabled?: boolean; /** Default: "default" */ state?: SelectProps.State | "default"; /** The message won't be displayed if state is "default" */ stateRelatedMessage?: ReactNode; style?: CSSProperties; placeholder?: string; }; export declare namespace SelectProps { export type Option<T extends string = string> = { value: T; label: ReactNode; disabled?: boolean; /** Default: false, should be used only in uncontrolled mode */ selected?: boolean; }; type ExtractState<FrClassName> = FrClassName extends `fr-select-group--${infer State}` ? Exclude<State, "disabled"> : never; export type State = ExtractState<FrClassName>; export {}; } /** * @see <https://components.react-dsfr.codegouv.studio/?path=/docs/components-select> * */ declare function NonMemoizedNonForwardedSelect<T extends SelectProps.Option[]>(props: SelectProps<T>, ref: React.LegacyRef<HTMLDivElement>): JSX.Element; export declare const Select: <T extends SelectProps.Option<string>[]>(props: SelectProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> | undefined; }) => ReturnType<typeof NonMemoizedNonForwardedSelect>; export default Select; declare const addSelectTranslations: (params: { lang: string; messages: Partial<{ "select an option": string; }>; }) => void; export { addSelectTranslations };