UNPKG

mui-country-code-selector

Version:
1,049 lines (1,005 loc) 49 kB
import { AutocompleteChangeDetails } from '@mui/material'; import { AutocompleteChangeReason } from '@mui/material'; import { AutocompleteProps } from '@mui/material'; import { AutocompleteRenderInputParams } from '@mui/material'; import { Breakpoint } from '@mui/material'; import { FilterOptionsState } from '@mui/material'; import { FormGroupProps } from '@mui/material'; import { FormHelperTextProps } from '@mui/material'; import { GridLegacyProps } from '@mui/material'; import { GridProps } from '@mui/material'; import { GridSize } from '@mui/material'; import { JSX } from 'react/jsx-runtime'; import { MutableRefObject } from 'react'; import { Property } from 'csstype'; import { ReactNode } from 'react'; import { RefCallback } from 'react'; import { RefObject } from 'react'; import { StackProps } from '@mui/material'; import { TextFieldProps } from '@mui/material'; import { TextFieldVariants } from '@mui/material'; /** * Represents the props of the `CountryCodeSelectorComposite` components. * @alpha */ export declare interface CCSelectorCompositeProps { /** * The global HTML `id` attribute passed to the input subcomponent of the * composite component. Defines an identifier which must be unique in the * whole document. See * {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id} * for more information. */ id?: string; /** * An HTML `name` attribute passed to the input subcomponent of the composite * component. Name attribute is a string specifying a name for the input. * This name is submitted along with the control's value when the form data * is submitted. See * {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#name} * for more information. */ name?: string; /** * Variable holding the value of the phone number input field. Provide this * when you wish to use the component as a controlled component. */ value?: string; /** * Phone number input's change event handler. Sets the `value` prop. * Provide this when you wish to use the component as a controlled * component. */ onChange?: (e: { target: { value: string; }; }) => void; /** Label for the country code selector input element. */ countryCodeLabel?: string; /** Label for the phone number input element. */ phoneNumberLabel?: string; /** Defines how long the error message is displayed in seconds. */ errorMessageDelay?: number; /** * Determines how the error message is displayed. When set to `both`, error * is displayed both as an error status of the component and by displaying an * error message. When set to `none` neither is displayed. Prop can also be * set as `message` or `status` in which case the corresponding method is * used to indicate the error. */ errorMessageDisplay?: 'none' | 'message' | 'status' | 'both'; /** * Passes a custom function for handling errors. The function receives the * error message as a parameter. */ onError?: (error: string) => void; /** * A React ref that will be set to point to the phone number input element. * Provide this to access the component's value when using the component as * an uncontrolled component. */ inputRef?: RefObject<HTMLInputElement | null> | RefCallback<HTMLInputElement | null>; /** * A default phone number value. Provide this if you wish to set the default * value when using the component as an uncontrolled component. */ defaultValue?: string; /** * Defines what kind of layout components the subcomponents of the composite * component are wrapped in. Accepts the following values: `gridLegacy`, * `gridLegacyItems`, `grid`, `gridItems`, `stack`, and `group`. Option * `gridLegacy` wraps the components into MUI GridLegacy item components and * creates a GridLegacy container around them. Option `gridLegacyItems` just * wraps the components into GridLegacy items and leaves the container out. * Options `grid` and `gridItems` do the same with MUI Grid components. * Option `stack` wraps the components in a MUI Stack component, and with the * `group` option the components are wrapped in a MUI FormGroup component. */ layout?: LayoutProp; /** * Props passed to the MUI FormGroup component if the `group` layout wrapper * is used. See {@link https://mui.com/material-ui/api/form-group/} for more * information about what props can be passed to the component. */ formGroupProps?: Partial<FormGroupProps>; /** * Props passed to the MUI GridLegacy container component if the `gridLegacy` * layout wrapper is used. See * {@link https://mui.com/material-ui/api/grid-legacy/} for more information * about what props can be passed to the component. */ gridLegacyContainerProps?: GridLegacyContainerProps; /** * Props passed to the MUI GridLegacy item components if the `gridLegacy` * or `gridLegacyItems` layout wrapper is used. Is overwritten by * `gridLegacySelectorProps` and `gridLegacyInputProps`. See * {@link https://mui.com/material-ui/api/grid-legacy/} for more information * about what props can be passed to the component. */ gridLegacyItemProps?: GridLegacyItemProps; /** * Props passed to the MUI GridLegacy item component that the selector * component is wrapped in, if the `gridLegacy` or `gridLegacyItems` layout * wrapper is used. Overwrites the `gridLegacyItemProps`. See * {@link https://mui.com/material-ui/api/grid-legacy/} for more information * about what props can be passed to the component. */ gridLegacySelectorProps?: GridLegacyItemProps; /** * Props passed to the MUI GridLegacy item component that the phone number * input component is wrapped in, if the `gridLegacy`or `gridLegacyItems` * layout wrapper is used. Overwrites the `gridLegacyItemProps`. See * {@link https://mui.com/material-ui/api/grid-legacy/} for more information * about what props can be passed to the component. */ gridLegacyInputProps?: GridLegacyItemProps; /** * Props passed to the MUI GridLegacy item component that the error message * component is wrapped in, if the `gridLegacy`or `gridLegacyItems` layout * wrapper is used. Overwrites the `gridLegacyItemProps`. See * {@link https://mui.com/material-ui/api/grid-legacy/} for more information * about what props can be passed to the component. */ gridLegacyErrorProps?: GridLegacyItemProps; /** * Props passed to the MUI Grid container component if the `grid` layout * wrapper is used. See {@link https://mui.com/material-ui/api/grid/} * for more information about what props can be passed to the component. */ gridContainerProps?: GridContainerProps; /** * Props passed to the MUI Grid item components if the `grid` or `gridItems` * layout wrapper is used. Is overwritten by `gridSelectorProps` and * `gridInputProps`. See * {@link https://mui.com/material-ui/api/grid/} for more information * about what props can be passed to the component. */ gridItemProps?: GridItemProps; /** * Props passed to the MUI Grid item component that the selector component * is wrapped in, if `grid` layout wrapper is used. Overwrites the * `gridItemProps`. See {@link https://mui.com/material-ui/api/grid/} for * more information about what props can be passed to the component. */ gridSelectorProps?: GridItemProps; /** * Props passed to the MUI Grid item component that the phone number input * component is wrapped in, if the `grid` or `gridItems` layout wrapper is * used. Overwrites the `grid2ItemProps`. See * {@link https://mui.com/material-ui/api/grid/} for more information about * what props can be passed to the component. */ gridInputProps?: GridItemProps; /** * Props passed to the MUI Grid item component that the error message * component is wrapped in, if the `grid` or `gridItems` layout wrapper is * used. Overwrites the `grid2ItemProps`. See * {@link https://mui.com/material-ui/api/grid/} for more information about * what props can be passed to the component. */ gridErrorProps?: GridItemProps; /** * Props passed to the MUI Stack component if the `stack` layout wrapper is * used. See {@link https://mui.com/material-ui/api/stack/} for more * information about what props can be passed to the component. */ stackProps?: Partial<StackProps>; /** * Sets the breakpoint size props of the selector components grid item, when * `gridLegacy` or `grid` layout is used. The Grid component accepts an object * with keys for MUI's responsive breakpoints (`xs`, `sm`, `md`, `lg`, and * `xl`), and the values can be either a number, string "auto", or a boolean. * For the Grid component the object must be added to the props using key * `size`. If the value for a breakpoint is `false` the prop is ignored. * * See {@link https://mui.com/material-ui/api/grid/} for more * information about MUI Grid props, * {@link https://mui.com/material-ui/api/grid-legacy/} for more information * about MUI GridLegacy props, and * {@link https://mui.com/material-ui/customization/breakpoints/} for more * information about MUI's responsive breakpoints. */ selectorSize?: ComponentSize | ComponentSizeGridLegacy; /** * Sets the breakpoint size props of the phone number input components grid * item, when the `gridLegacy` or `grid` layout is used. The Grid component * accepts an object with keys for MUI's responsive breakpoints (`xs`, `sm`, * `md`, `lg`, and `xl`), and the values can be either a number, string * "auto", or a boolean. For the Grid component the object must be added to * the props using key `size`. If the value for a breakpoint is `false` the * prop is ignored. * * See {@link https://mui.com/material-ui/api/grid/} for more * information about MUI Grid props, * {@link https://mui.com/material-ui/api/grid-legacy/} for more information * about MUI GridLegacy props, and * {@link https://mui.com/material-ui/customization/breakpoints/} for more * information about MUI's responsive breakpoints. */ inputSize?: ComponentSize | ComponentSizeGridLegacy; /** * Sets the breakpoint size props of the error message components grid item, * when the `gridLegacy` or `grid` layout is used. The Grid component accepts * an object with keys for MUI's responsive breakpoints (`xs`, `sm`, `md`, * `lg`, and `xl`), and the values can be either a number, string "auto", or * a boolean. For the Grid component the object must be added to the props * using key `size`. If the value for a breakpoint is `false` the prop is * ignored. * * See {@link https://mui.com/material-ui/api/grid/} for more * information about MUI Grid props, * {@link https://mui.com/material-ui/api/grid-legacy/} for more * information about MUI GridLegacy props, and * {@link https://mui.com/material-ui/customization/breakpoints/} for more * information about MUI's responsive breakpoints. */ errorSize?: ComponentSize | ComponentSizeGridLegacy; /** * Custom options for setting how the select options are filtered based on * the input. See * {@link https://mui.com/material-ui/api/autocomplete/#autocomplete-prop-filterOptions} * and {@link https://mui.com/material-ui/react-autocomplete/#custom-filter} * for more information about custom filtering. */ filterOptions?: (options: CountryType[], state: FilterOptionsState<CountryType>) => CountryType[]; /** * A boolean value that specifies whether or not to shrink the selector and * phone number input components' labels. See * {@link https://mui.com/material-ui/react-text-field/#shrink} for more * information. */ shrink?: boolean; /** * Defines which variant of the MUI TextField is used in the country code * selector and phone number input components. See * {@link https://mui.com/material-ui/react-text-field/#basic-textfield} * about the TextField variants. */ variant?: TextFieldVariants; /** * Props applied to the underlying CountryCodeSelector element. See * {@link https://mui.com/material-ui/api/autocomplete/} for more information * about MUI's Autocomplete's API. */ selectorProps?: Partial<CCSelectorProps> | Record<string, never>; /** * Props applied to the underlying TextField component (the phone number * input). See * {@link https://mui.com/material-ui/api/text-field/} for more information * about the MUI's TextField's API. */ inputProps?: Partial<Omit<TextFieldProps, 'onChange' | 'select' | 'SelectProps' | 'value'>> | Record<string, never>; /** * Props applied to the FormHelperText component of the composite country code * selector component (a possible error message). See * {@link https://mui.com/material-ui/api/form-helper-text/} for more * information about the MUI's FormHelperText's API. */ errorProps?: Partial<FormHelperTextProps> | Record<string, never>; /** * Passes a numeric React ref object to the selector component, which is then * increased by one every time the component is rendered. */ selectorRenderCountRef?: RefObject<number>; /** * Passes a numeric React ref object to the phone number input component, * which is then increased by one every time the component is rendered. */ inputRenderCountRef?: RefObject<number>; } /** * Represents the props of the `CountryCodeSelector` components. * @alpha */ export declare interface CCSelectorProps extends Omit<AutocompleteProps<CountryType, false, boolean, false>, 'getOptionLabel' | 'onChange' | 'options' | 'renderInput' | 'value'> { /** * A function for rendering the selected option on underlying AutoComplete * component. See * {@link https://mui.com/material-ui/api/autocomplete/#autocomplete-prop-getOptionLabel} * for more information about MUI's Autocomplete's `getOptionLabel` prop. */ getOptionLabel?: ((option: CountryType) => string) | undefined; /** * Sets the `label` string on underlying MUI AutoComplete component's * TextField component. */ label?: string; /** * A function for rendering the input element, that is passed to the * underlying MUI Autocomplete component. See * {@link https://mui.com/material-ui/api/autocomplete/#autocomplete-prop-renderInput} * for more information about MUI's Autocomplete's `renderInput` prop. * @returns The input element. */ renderInput?: (params: AutocompleteRenderInputParams) => React.ReactNode; /** * A boolean value that specifies whether or not to shrink the selector and * phone number input components' labels. See * {@link https://mui.com/material-ui/react-text-field/#shrink} for more * information. */ shrink?: boolean; /** * Defines which variant of the Autocomplete's TextField component is used. See * {@link https://mui.com/material-ui/react-text-field/#basic-textfield} * about the TextField's variants. */ variant?: TextFieldVariants; /** * Passes a numeric React ref object to the selector component, which is then * increased by one every time the component is rendered. */ renderCountRef?: MutableRefObject<number>; } /** * Props for the version of the CountryCodeSelector that uses React's * `useState` for the state. * @internal */ export declare interface CCSelectorPropsReact extends CCSelectorProps { /** * Value of the country code selector element. Provide this when you wish to * use the component as a controlled component. */ value: CountryType | null | undefined; /** * CountryCodeSelector's onChange event handler. Sets the component's value. * Provide this when you wish to use the component as a controlled * component. */ onChange: (_e: unknown, value: CountryType | null, reason: AutocompleteChangeReason, details?: AutocompleteChangeDetails<CountryType> | undefined) => void; /** The calling codes and names of the countries of the world. */ countries: readonly CountryType[]; } /** * Represents a common state between the autocomplete component for selecting * the country code and the phone number input component, which together form * a complete phone number input component. * @alpha */ export declare interface CCSelectorState { /** * The whole phone number including the country code as a string. This is * the value of the phone number input element. */ phoneNumStr: string; /** An index indicating where the local part of the phone number starts. */ phoneNumSplit: number; /** * The digits of the phone number that are significant in terms of the * country code. Contains only the digits without visual separator * characters or the plus sign. */ significantDigits: string; /** The digits of the detected country code. */ countryCodeDigits: string; /** The `CountryType` object corresponding to the selected country code. */ countryCodeValue: CountryType | null; /** The calling codes and names of the countries of the world. */ countries: readonly CountryType[]; /** Data on country codes that are possible based on the `phoneNumStr`. */ possibleCountries: PossibleCountries | null; /** Error message to be shown to the user. */ errorMsg: string | null; /** Time of the message delay in seconds. */ errorMsgDelay: number; /** `Timeout` object for timing how long the error message is displayed. */ errorMsgTimeoutObj: NodeJS.Timeout | null; /** The phone number input DOM element. */ phoneNumberInput: HTMLInputElement | undefined | null; /** A form DOM element that is parent of the phone number input component. */ formElement: HTMLElement | undefined | null; /** * A default phone number value. Used when the component is used as an * uncontrolled component. */ defaultValue: string; /** * The start and end indices of the selected text within the phone number * input. * * React keeps track of the cursor position and selection of the controlled * input elements. In some situations, however, React doesn't know where to * place the cursor. For example, when an input does not get accepted by the * onChange handler and the value is not changed, React places the cursor at * the end of the value string. Only remedy to this seems to be to keep track * of the cursor position internally, within the application. */ inputSelection: InputSelection; /** * The state variable `clearedRerender` is used for triggering a rerender of * the component after the phone number input has been cleared and the * component has lost focus. The rerender is needed for getting the MUI * TextField's label to enlarge back to it's initial state. It is important * that the value is subscribed to in the `useCountryCodeStore` for it to be * able to trigger the rerender. The value is toggled by the blur handler * when the input has been cleared and the element loses the focus. */ clearedRerender: boolean; /** * An external change handler function to which the current phone number * value is forwarded every time the value changes. */ changeHandler: ((event: { target: { value: string; }; }) => void) | undefined; /** * An external error handler function to which the error message is * forwarded. */ errorHandler: ((error: string) => void) | undefined; /** * Sets the `phoneNumberInput` value. Takes the phone number input DOM * element as parameter. */ setPhoneNumberInput: (inputElement: HTMLInputElement | undefined | null) => void; /** * Sets the error message delay (how long the message is shown). Takes the * delay in seconds as parameter. */ setErrorMsgDelay: (seconds: number) => void; /** * Sets a change handler function that is run with the current phone number * value every time the value changes. This is used e.g., in the composite * selector components (`CountryCodeSelectorCompositeZustand` and * `CountryCodeSelectorCompositeReact`) to update the value prop when the * component is used as a controlled component. */ setChangeHandler: (handler: ((event: { target: { value: string; }; }) => void) | undefined) => void; /** * Sets the `inputSelection` state variable. Takes an object containing the * start and end indices of the text selection within the phone number input * element as paramter. */ setInputSelection: (inputSelection: InputSelection) => void; /** Toggles the `clearedRerender` state variable */ toggleClearedRerender: () => void; /** * Sets references to the phone number input DOM element. Adds also some * event handlers and initializes the phone number input with the default * value when used as an uncontrolled component. * * Parameters: * * `element` - the phone number input DOM element, * * `inputRef` - a React MutableRef object (this can be used to access the * value of the component when used as an uncontrolled component), and * * `defaultValue` - the default * value for the phone number input when used as an uncontrolled component. */ setRefs: (element: HTMLInputElement | null, inputRef?: MutableRefObject<HTMLInputElement | null> | RefCallback<HTMLInputElement | null>, defaultValue?: string) => void; /** * Initializes the component and returns a cleanup function. This, or the * individual setter and cleanup functions, must be called in a `useEffect` * hook in the component body. Provides an easy way to take care of the * initialization and the cleanup. * * Parameters: * * `errorMsgDelay` - Time the error message is displayed in seconds. * * `errorHandler` - An external error handler function to which the error * message is forwarded to. * * `changeHandler` - An external change handler function to which the * current phone number value is forwared every time the value changes. * * @returns A cleanup function that removes the reset event handler from the * form element. */ initialize: (errorMsgDelay?: number, errorHandler?: ((error: string) => void) | undefined, changeHandler?: ((event: { target: { value: string; }; }) => void) | undefined) => () => void; /** * The cleanup function which is executed when the component unmounts. * Removes the reset event listener added to the form DOM element. Is * returned by the `initialize` function. */ cleanUp: () => void; /** * A handler function for the phone number input's change events. Takes * care of detecting the country code from the input and setting the * `countryCodeDigits` and the `countryCodeVal` based on that. * * Parameters: * * `event` - The change event object from the phone number input. */ handlePhoneNumberChange: (event: { target: { value: string; }; }) => void; /** * A handler function for the `CountryCodeSelector`'s change events. See * {@link https://mui.com/material-ui/api/autocomplete/#autocomplete-prop-onChange} * for more information about the function parameters. * * Parameters: * * `e` - The event source of the callback. * * `value` - The new value of the component. * * `reason` - One of "createOption", "selectOption", "removeOption", * "blur" or "clear". */ handleCountryCodeChange: (_event: unknown, value: CountryType | null, reason: AutocompleteChangeReason, details?: AutocompleteChangeDetails<CountryType> | undefined) => void; /** * Applies the state changes to outside variables using the changeHandler * function (controlled mode) or the reference to the phone number input * DOM element. * * Parameters: * * `state` - The partial state object containing the changes. */ applyStateChanges: (state: Partial<CCSelectorState>) => void; /** * Handles changes to the value prop. This should be called from a useEffect * hook in the component's body. * * When the component is used as a controlled component the value of the * phone number input element can be set (is controlled) from the outside. * If the value is changed directly (in contrast to changing it in the * onChange() handler function), this change must be handled using the * handlePhoneNumberChange() function so that the change is also taken into * account in the country code selector's value. * * Parameters: * * `value` - The value prop of a controlled component. */ handleValueChange: (value: string | null | undefined) => void; /** * Places the cursor (more specifically the start and end indices of the * text selection) within the phone number input element according to the * `inputSelection` state variable. */ placeInputSelection: () => void; /** Displays the error message for the time of the delay. */ displayError: () => void; /** Clears the errorMsg state variable. */ clearErrorMsg: () => void; } /** * Represents a value for the composite component props that change the size of * country code selector's subcomponents in a MUI `Grid`. * @alpha */ export declare interface ComponentSize { size: ResponsiveStyleValue<GridSize>; } /** * Represents a value for the composite component props that change the size of * country code selector's subcomponents in a MUI `Grid` (the legacy grid * component). * @alpha */ declare interface ComponentSizeGridLegacy { xs?: number | false | 'auto'; sm?: number | false | 'auto'; md?: number | false | 'auto'; lg?: number | false | 'auto'; xl?: number | false | 'auto'; } /** * Autocomplete component to select the country code of a phone number from a * list of countries. Based on the MUI `Autocomplete` component * ({@link https://mui.com/material-ui/react-autocomplete}). Can be used in * conjunction with a text input field and common state between the * subcomponents to create a complete phone number input component. * @alpha */ declare function CountryCodeSelector({ autoHighlight, autoSelect, filterOptions, getOptionKey, getOptionLabel, handleHomeEndKeys, label, renderOption, renderInput, shrink, slotProps, variant, renderCountRef, ...rest }: CCSelectorProps): JSX.Element; export { CountryCodeSelector } export { CountryCodeSelector as CountryCodeSelectorZustand } /** * A complete phone number input React component with a country code selector * autocomplete field. Based on MUI's `Autocomplete` * ({@link https://mui.com/material-ui/react-autocomplete/}) and `TextField` * ({@link https://mui.com/material-ui/react-text-field/}) components. These * subcomponents are combined using a common state that is implemented * differently in specific variants of the component. * * This component variant uses the provided Zustand store as the common state * between the subcomponents. See the documentation for `CCSelectorState` and * `useCountryCodeStore` for more information about the store. * * @returns A complete phone number input React component with a country code * selector autocomplete field. * @alpha */ declare function CountryCodeSelectorComposite({ id, name, value, onChange, inputRef, countryCodeLabel, phoneNumberLabel, errorMessageDelay, errorMessageDisplay, onError, defaultValue, layout, formGroupProps, gridLegacyContainerProps, gridLegacyItemProps, gridLegacySelectorProps, gridLegacyInputProps, gridLegacyErrorProps, gridContainerProps, gridItemProps, gridSelectorProps, gridInputProps, gridErrorProps, stackProps, selectorSize, inputSize, errorSize, filterOptions, shrink, variant, selectorProps, inputProps, errorProps, selectorRenderCountRef, inputRenderCountRef, }: CCSelectorCompositeProps): JSX.Element; export { CountryCodeSelectorComposite } export { CountryCodeSelectorComposite as CountryCodeSelectorCompositeZustand } /** * A complete phone number input React component with a country code selector * autocomplete field. Based on MUI's `Autocomplete` * ({@link https://mui.com/material-ui/react-autocomplete/}) and `TextField` * ({@link https://mui.com/material-ui/react-text-field/}) components. These * subcomponents are combined using a common state that is implemented * differently in specific variants of the component. * * This component variant uses React's state management utilities to create the * common state between the subcomponents. * * @returns A complete phone number input React component with a country code * selector autocomplete field. * @alpha */ export declare function CountryCodeSelectorCompositeReact({ id, name, value, onChange, countryCodeLabel, phoneNumberLabel, errorMessageDelay, errorMessageDisplay, onError, inputRef, defaultValue, layout, formGroupProps, gridLegacyContainerProps, gridLegacyItemProps, gridLegacySelectorProps, gridLegacyInputProps, gridLegacyErrorProps, gridContainerProps, gridItemProps, gridSelectorProps, gridInputProps, gridErrorProps, stackProps, selectorSize, inputSize, errorSize, filterOptions, shrink, variant, selectorProps, inputProps, errorProps, selectorRenderCountRef, inputRenderCountRef, }: CCSelectorCompositeProps): JSX.Element; /** * Autocomplete component to select the country code of a phone number from a * a list of countries. Based on the MUI `Autocomplete` component * ({@link https://mui.com/material-ui/react-autocomplete}). Can be used in * conjunction with a text input field and common state between the * subcomponents to create a complete phone number input component. * * This version is only meant to be used internally by the * `CountryCodeSelectorCombinedReact` component. * @internal */ export declare function CountryCodeSelectorReact({ autoHighlight, autoSelect, filterOptions, getOptionKey, getOptionLabel, handleHomeEndKeys, label, onChange, renderOption, renderInput, shrink, slotProps, value, variant, renderCountRef, countries, ...rest }: CCSelectorPropsReact): JSX.Element; /** * A provider component for the `CountryCodeStoreContext`. Every country code * selector must have its own state. When creating a custom component that uses * Zustand store for the state, the components of the phone number input must * be surrounded in `CountryCodeStoreProvider` tags. The combined Zustand * component hides this by using a higher order component. * @param param0 - Children of the provider component in an object. * @alpha */ export declare function CountryCodeStoreProvider({ children }: { children: ReactNode; }): JSX.Element; /** * A short country name or an array of names for the country. */ declare type CountryName = string | string[]; /** * Represents data for an individual country. Contains records for the name, * the ITU-T E.164 international calling code, and two letter ISO 3166 country * code of the country. Is used as the * @alpha */ export declare interface CountryType { /** * Name(s) of the country. * * If there are more than one name, the list has the following structure: * 1) the official or recommended short name (e.g, "Bolivia"), * 2) a complementary addition to the name (e.g., "Plurinational State of") or * probably a better known version of the name (e.g., "Czech Republic" for * "Czechia"), * 3) ...n) alternative spelling(s) of the name (e.g., "Cote d'Ivoire" and * "Cote dIvoire" for "Côte d'Ivoire"). * * The first entry can be used as the shortest possible representation of a * country's name. If there is more space the second entry could be added in * parentheses to make it easier to identify the country. The alternate * spellings can help in finding the country when searching. */ country: CountryName; /** * ITU-T E.164 assigned international calling code for the country. Although * a country can have multiple calling codes, a single calling code is stored * here. This is because the data structure is meant to be used as the * options list for the country code selector, in which each calling code * must have its own entry. * See {@link https://www.itu.int/pub/T-SP-E.164D} or * {@link https://en.wikipedia.org/wiki/List_of_country_calling_codes} for * more information about the calling codes. */ code: string; /** * Two letter ISO 3166 country code of the country. See * {@link https://www.iso.org/iso-3166-country-codes.html} or * {@link https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes} for * more information about the ISO 3166 country codes. See also documentation * for the displayIso field for more */ iso: IsoAlpha2; /** * The display version of the ISO 3166 code in the `iso` field. * * Some entries are not real countries, but subdivisions of one (e.g., * Ascension, SH-AC). Correct ISO 3166-2 subdivision code includes the two * letter ISO 3166-1 code of the larger entity and a two letter code for the * subdivision separated with a dash. Due to way Vite imports json files, it * is easier to not include the dash in the `iso` field that is used as key * in the json files containing the country name translations. In those cases * the display version of the ISO 3166-2 code is stored in this field. */ displayIso?: string; } /** * Creates a default filter options function for the `CountryCodeSelector`'s * underlying `Autocomplete` component. See * {@link https://mui.com/material-ui/api/autocomplete/#autocomplete-prop-filterOptions} * and {@link https://mui.com/material-ui/react-autocomplete/#custom-filter} * for more information about custom filtering. * @alpha */ export declare function createDefaultFilterOptions(): (options: CountryType[], state: FilterOptionsState<CountryType>) => CountryType[]; /** * Creates a default function for getting the option label string in the * `CountryCodeSelector`'s underlying `Autocomplete` component. * See {@link https://mui.com/material-ui/api/autocomplete/#autocomplete-prop-getOptionLabel} * for more information about the `getOptionLabel` prop. * @param elementWidth - The width of the selector element. * @returns A function for getting the option label string. * @alpha */ export declare function createDefaultGetOptionLabel(elementWidth: number): (option: CountryType) => string; /** * Returns a default function for rendering the input component of the * `CountryCodeSelector`'s underlying `Autocomplete` component. See * {@link https://mui.com/material-ui/api/autocomplete/#autocomplete-prop-renderInput} * for more information about the `renderInput` prop. * @param label - CountryCodeSelector component's label passed to the input * component. * @param elementWidth - The width of the selector element. * @param shrink - Indicates whether to shrink the label or not. * @param variant - Variant of the `TextField` component to use. * @returns A function for rendering the input component of the * `CountryCodeSelector`'s `Autocomplete` component. * @alpha */ export declare function createDefaultRenderInput(label: string, elementWidth: number, shrink?: boolean, variant?: TextFieldVariants): (params: AutocompleteRenderInputParams) => JSX.Element; /** * Default label text for the `CountryCodeSelector` component. * @alpha */ export declare const DEFAULT_COUNTRY_CODE_LABEL = "Country code"; /** * Default abbreviation for the label text. Used when `window.innerWidth` is * smaller than `theme.breakpoints.values.sm` (i.e. the viewport width is * smaller than the smallest breakpoint in the MUI theme that the component * uses). See {@link https://mui.com/material-ui/customization/breakpoints/} * for more information about the breakpoints and * {@link https://mui.com/material-ui/customization/theming/} for more * information about the MUI's themes. * @alpha */ export declare const DEFAULT_COUNTRY_CODE_LABEL_ABBREVIATION = "Country"; /** * Default `max-width` for the `CountryCodeSelector`'s option list (i.e., * default `max-width` of the `paper` subcomponent of the underlying * `Autocomplete` component). * @alpha */ export declare const DEFAULT_OPTION_LIST_MAX_WIDTH: Property.Width; /** * Default width for the `CountryCodeSelector`'s option list (i.e., default * `width` of the `paper` subcomponent of the underlying `Autocomplete` * component). * @alpha */ export declare const DEFAULT_OPTION_LIST_WIDTH: Property.Width; /** * Default slot props object for `CountryCodeSelector`'s underlying * `Autocomplete` component. Sets the default `min-width` for the `paper` * component that implements the dropdown option list. * @alpha */ export declare const DEFAULT_SLOT_PROPS: { paper: { sx: { width: string & {}; maxWidth: string & {}; }; }; }; /** * Default function for getting the option key string in the * `CountryCodeSelector`'s underlying `Autocomplete` component. * See {@link https://mui.com/material-ui/api/autocomplete/#autocomplete-prop-getOptionKey} * for more information about the `getOptionKey` prop. * @returns The string to be used as the key of the option. * @alpha */ export declare function defaultGetOptionKey(option: CountryType): string; /** * Default function for rendering the options in the `CountryCodeSelector`'s * underlying `Autocomplete` component. See * {@link https://mui.com/material-ui/api/autocomplete/#autocomplete-prop-renderOption} * for more information about the `renderOption` prop. * @param props - The props to apply on the `li` element. * @param option - The option to render. * @returns The option element. * @alpha */ export declare function defaultRenderOption(props: React.HTMLAttributes<HTMLLIElement> & { key: any; }, option: CountryType): React.ReactNode; /** * Returns the international calling codes and names for the countries of the * world in `CountryType` objects. * @alpha */ export declare function getCountries(locale?: string): Promise<readonly CountryType[]>; /** * Represents the props that can be passed to a MUI `Grid2` container component * used for the layout of the subcomponents of composite country code selector * component. * @alpha */ export declare type GridContainerProps = Partial<Omit<GridProps, 'size' | 'offset'>>; /** * Represents the props that can be passed to a MUI `Grid2` item components * used for the layout of the subcomponents of composite country code selector * component. * @alpha */ export declare type GridItemProps = Partial<Omit<GridProps, 'spacing' | 'rowSpacing' | 'columnSpacing'>>; /** * Represents the props that can be passed to a MUI `Grid` container component * used for the layout of the subcomponents of composite country code selector * component. * @alpha */ export declare type GridLegacyContainerProps = Partial<GridLegacyProps>; /** * Represents the props that can be passed to a MUI `Grid` item components * used for the layout of the subcomponents of composite country code selector * component. * @alpha */ export declare type GridLegacyItemProps = Partial<Omit<GridLegacyProps, 'spacing' | 'rowSpacing' | 'columnSpacing'>>; /** * Wraps the composite country code selector's subcomponents into MUI * `GridLegacy` and `GridLegacy item`components. * @internal */ export declare function GridLegacyWrapper({ gridItemProps, gridSelectorProps, gridInputProps, gridErrorProps, selectorSize, inputSize, errorSize, children, }: GridLegacyWrapperProps): JSX.Element; /** * Represents the props of the `GridLegacyWrapper` component. * @internal */ export declare interface GridLegacyWrapperProps { gridItemProps: GridLegacyItemProps | undefined; gridSelectorProps: GridLegacyItemProps | undefined; gridInputProps: GridLegacyItemProps | undefined; gridErrorProps: GridLegacyItemProps | undefined; selectorSize: ComponentSizeGridLegacy | undefined; inputSize: ComponentSizeGridLegacy | undefined; errorSize: ComponentSizeGridLegacy | undefined; children: ReactNode; } /** * Wraps the combined country code selector's subcomponents into MUI `Grid` * components. * @internal */ export declare function GridWrapper({ gridItemProps, gridSelectorProps, gridInputProps, gridErrorProps, selectorSize, inputSize, errorSize, children, }: GridWrapperProps): JSX.Element; /** * Represents the props of the `GridWrapper` component. * @internal */ export declare interface GridWrapperProps { gridItemProps: GridItemProps | undefined; gridSelectorProps: GridItemProps | undefined; gridInputProps: GridItemProps | undefined; gridErrorProps: GridItemProps | undefined; selectorSize: ComponentSize | undefined; inputSize: ComponentSize | undefined; errorSize: ComponentSize | undefined; children: ReactNode; } /** * Represents the text selection range within the input element (phone number * input). * @alpha */ export declare interface InputSelection { /** The start index of the text selection within the input element. */ selectionStart: number; /** The end index of the text selection within the input element. */ selectionEnd: number; } /** * ISO 3166 two letter country codes of areas that have an ITU-T E.164 or NANP * telephone calling code. * * NOTES! Although Ascencion (SH-AC) is a subdivision of a larger entity, it * has its own calling code, so it is included. Bouvet Island (BV), French * Southern Territories (TF), and Heard Island and McDonald Islands (HM), * however, have ISO 3166 country codes, but they do not have their own calling * codes, so they are not included. * * See {@link https://stackoverflow.com/a/54061487} and * {@link https://github.com/Microsoft/TypeScript/pull/29510} for more * information about the type syntax. */ declare type IsoAlpha2 = (typeof isoAlpha2Arr)[number]; /** The accepted ISO 3166 two letter country codes in an array. */ declare const isoAlpha2Arr: readonly ["AD", "AE", "AF", "AG", "AI", "AL", "AM", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AX", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BQ", "BQBO", "BQSA", "BQSE", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CW", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "EH", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS", "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", "PY", "QA", "RE", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SHAC", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", "SR", "SS", "ST", "SV", "SX", "SY", "SZ", "TC", "TD", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "XK", "YE", "YT", "ZA", "ZM", "ZW"]; /** * Represents a value of the `CompositeCountryCodeSelector`'s prop that defines * what kind of layout components its subcomponents are wrapped in, if any. * @alpha */ export declare type LayoutProp = 'gridLegacy' | 'gridLegacyItems' | 'grid' | 'gridItems' | 'stack' | 'group' | 'row'; /** * Represents data about country codes that are possible based on the phone * number input. * @alpha */ export declare interface PossibleCountries { /** * Digits that were considered when selecting the codes in the possible * countries array. */ digitsConsidered: string; /** * The minimum number of digits in the codes in the possibleCountries array. */ minCodeDigits: number; /** * The maximum number of digits in the codes in the possibleCountries array. */ maxCodeDigits: number; /** * Array of `CountryType` objects corresponding to the possible country codes. */ possibleCountries: readonly CountryType[]; } declare type ResponsiveStyleValue<T> = T | Array<T | null> | { [key in Breakpoint]?: T | null; }; /** * A responsive breakpoint below which the CountryCodeSelector components use * shorter labels. * @alpha */ export declare const SELECTOR_RESPONSIVE_BREAKPOINT_WIDTH = 145; /** * A custom hook that returns a country code store. Store is fetched from a * React context and therefore the component using this hook is expected to be * surrounded by `CountryCodeStoreProvider` tags. * @alpha */ export declare const useCountryCodeStore: () => Pick<CCSelectorState, "phoneNumStr" | "countryCodeValue" | "countries" | "errorMsg" | "errorMsgDelay" | "errorMsgTimeoutObj" | "phoneNumberInput" | "clearedRerender" | "setPhoneNumberInput" | "setRefs" | "initialize" | "cleanUp" | "handlePhoneNumberChange" | "handleCountryCodeChange" | "handleValueChange" | "placeInputSelection">; /** * Wraps the composite country code selector's subcomponents into MUI's `Grid`, * `GridLegacy` or `FormGroup` components according to the `layout` prop's * value. * @internal */ export declare function Wrapper({ layout, formGroupProps, gridLegacyContainerProps, gridLegacyItemProps, gridLegacySelectorProps, gridLegacyInputProps, gridLegacyErrorProps, gridContainerProps, gridItemProps, gridSelectorProps, gridInputProps, gridErrorProps, stackProps, selectorSize, inputSize, errorSize, children, }: WrapperProps): JSX.Element; /** * Props for the `Wrapper` component. * @internal */ export declare interface WrapperProps { layout?: LayoutProp; formGroupProps?: Partial<FormGroupProps>; gridLegacyContainerProps?: GridLegacyContainerProps; gridLegacyItemProps?: GridLegacyItemProps; gridLegacySelectorProps?: GridLegacyItemProps; gridLegacyInputProps?: GridLegacyItemProps; gridLegacyErrorProps?: GridLegacyItemProps; gridContainerProps?: GridContainerProps; gridItemProps?: GridItemProps; gridSelectorProps?: GridItemProps; gridInputProps?: GridItemProps; gridErrorProps?: GridItemProps; stackProps?: Partial<StackProps>; selectorSize?: ComponentSize | ComponentSizeGridLegacy; inputSize?: ComponentSize | ComponentSizeGridLegacy; errorSize?: ComponentSize | ComponentSizeGridLegacy; children: ReactNode; } export { }