import { FormConfigElement, FormFieldType } from '../../../custom-hooks/useFormConfig';
import { TextFieldProps } from '@mui/material';
import { TextReplacements } from '../../Text/Text';
import { default as React, CSSProperties, MutableRefObject } from 'react';
/**
 * Props: Value
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type InputBaseValueType = string | number | ({
    key: string | number;
    value: string;
} & Record<string, any>);
export type InputValueProps = {
    value?: InputBaseValueType;
    defaultValue?: string | number;
    valueAsDefaultValue?: boolean;
    placeholder?: string;
    required?: boolean;
    disabled?: boolean;
    infoText?: string;
    id?: string;
    replacements?: TextReplacements;
    triggerChangeOnStateFieldChange?: boolean;
    autoFocus?: boolean;
};
/**
 * Props: Label
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type InputLabelProps = {
    label?: string | false;
    labelType?: 'floating' | 'static' | 'outer' | 'hidden';
    labelStyle?: CSSProperties;
};
/**
 * Props: Popover
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type InputPopoverProps = {
    popoverMessage?: string;
    popoverPosition?: 'top' | 'bottom' | 'left' | 'right';
};
/**
 * Props: Counter
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type InputCounterProps = {
    counter?: boolean;
    maxLength?: number;
};
/**
 * Props: Helper Link
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type InputHelperLinkProps = {
    helperLinkText?: string;
    onHelperLinkClick?: (value: InputBaseValueType) => void;
    helperLinkDisabled?: boolean;
    helperLinkHref?: string;
};
/**
 * Props: Highlights
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type InputHighlightsProps = {
    highlightWords?: string[];
    prohibitedWords?: string[];
    highlightUrl?: boolean;
    highlightUrlType?: 'positive' | 'negative' | 'info';
    highlightLengthExceeded?: boolean;
    onProhibitedWordFound?: (word?: string, config?: FormConfigElement) => void;
    onHighlightWordFound?: (word?: string, config?: FormConfigElement) => void;
};
/**
 * Props: Textarea
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type InputTextareaProps = {
    multiline?: boolean;
    rows?: number;
    minRows?: number;
    maxRows?: number;
    allowBreakLines?: boolean;
};
/**
 * Props: Select
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type InputSelectProps = {
    select?: boolean;
    nativeSelect?: boolean;
    selectRenderValue?: (key: string) => React.ReactNode;
    selectDisplayEmpty?: boolean;
    menuItemHeight?: number;
    maxMenuItemsUntilScroll?: number;
    theme?: 'default' | 'grey';
};
/**
 * Props: Events
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type InputEventsProps = {
    onFocus?: (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement, Element>) => void;
    onBlur?: (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement, Element>) => void;
    onKeyUp?: (e: React.KeyboardEvent<HTMLDivElement>) => void;
    onKeyDown?: (e: React.KeyboardEvent<HTMLDivElement>) => void;
    onInput?: (e: React.FormEvent<HTMLDivElement>) => void;
    onChange?: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
    onClick?: (event: React.MouseEvent) => void;
    onStepUpNumericClick?: (event: React.MouseEvent) => void;
    onStepDownNumericClick?: (event: React.MouseEvent) => void;
};
/**
 * Props: Form Config
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type InputFormConfigProps = {
    formconfig?: FormConfigElement;
    inputRef?: MutableRefObject<HTMLInputElement | HTMLTextAreaElement | null>;
};
/**
 * Props: Adornment Props
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type InputAdornmentProps = {
    isLoading?: boolean;
    adornment?: React.ReactNode;
    endAdornment?: React.ReactNode;
    roundedNumericCTAType?: boolean;
};
type PopoverHighlightVariant = 'basicLink';
export type PopoverHighlightType = {
    /**
     * This determines what we detect at the moment we have only link but in the future we could have regex etc
     * */
    detector: 'link';
    /**
     * This determines the color / hover color of the detected element
     * */
    variant: PopoverHighlightVariant;
};
/**
 * Props
 * ---------------------------------------------------------------------------------------------------------------------
 */
export type rcInputBaseProps = {
    className?: string;
    formFieldType?: FormFieldType;
    popoverHighlight?: PopoverHighlightType;
    type?: React.InputHTMLAttributes<unknown>['type'];
    children?: React.ReactNode;
    textFieldProps?: TextFieldProps;
    testId?: string;
} & InputValueProps & InputAdornmentProps & InputLabelProps & InputPopoverProps & InputCounterProps & InputTextareaProps & InputSelectProps & InputHighlightsProps & InputEventsProps & InputFormConfigProps & InputHelperLinkProps;
/**
 * ---------------------------------------------------------------------------------------------------------------------
 * Component: InputBase
 * ---------------------------------------------------------------------------------------------------------------------
 */
export declare const InputBase: (props: rcInputBaseProps) => import("react/jsx-runtime").JSX.Element;
export {};
