import { FormikConfig, FieldValidator } from 'formik';
export { ErrorMessage as Feedback } from 'formik';
import { InputHTMLAttributes, ReactNode, HTMLAttributes } from 'react';
import { FormGroupProps, LabelProps as LabelProps$1 } from 'reactstrap';
import * as react_jsx_runtime from 'react/jsx-runtime';
import { CurrencyInputProps } from 'react-currency-input-field';

/* eslint-disable @typescript-eslint/no-explicit-any */


type FormProps<FormValues> = {
  id?: string;
  focusInvalidField?: boolean;
  invalidInputSelectors?: string;
} & FormikConfig<FormValues>;

declare const Form: <FormValues>(props: FormProps<FormValues>) => JSX.Element;

/* eslint-disable @typescript-eslint/no-explicit-any */


type InputType =
  | 'text'
  | 'email'
  | 'select'
  | 'file'
  | 'radio'
  | 'checkbox'
  | 'textarea'
  | 'button'
  | 'reset'
  | 'submit'
  | 'date'
  | 'datetime-local'
  | 'hidden'
  | 'image'
  | 'month'
  | 'number'
  | 'range'
  | 'search'
  | 'tel'
  | 'url'
  | 'week'
  | 'password'
  | 'datetime'
  | 'time'
  | 'color';

interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
  [key: string]: any;
  type?: InputType;
  name: string;
  validate?: FieldValidator;
  tag?: Node | string;
  feedback?: boolean;
  help?: boolean;
  required?: boolean;
}

declare const Input: (props: InputProps) => JSX.Element;

type Props$1 = {
  for: string;
} & FormGroupProps;

declare const FormGroup: (props: Props$1) => JSX.Element;

/* eslint-disable @typescript-eslint/ban-types */


interface FieldChildProps {
  input: ReactNode;
  feedback: ReactNode;
}

interface FieldProps extends InputProps {
  label?: ReactNode;
  labelHidden?: boolean;
  disabled?: boolean;
  readOnly?: boolean;
  inputClass?: string;
  labelClass?: string;
  helpMessage?: string | object;
  errorMessage?: string | object;
  labelAttrs?: HTMLLabelElement;
  groupAttrs?: Partial<Props$1>;
  grid?: object;
  children?: (props: FieldChildProps) => ReactNode;
  append?: string | ReactNode;
  prepend?: string | ReactNode;
  helpId?: string;
  isHelpVideoType?: boolean;
}

declare const Field: (props: FieldProps) => JSX.Element;

/* eslint-disable @typescript-eslint/no-explicit-any */


interface CheckboxGroupProps extends FormGroupProps {
  name: string;
  label?: ReactNode;
  labelClassName?: string;
  groupClassName?: string;
  onChange?: (value: any) => void;
  helpId?: string;
  required?: boolean;
  isHelpVideoType?: boolean;
}

declare const CheckboxGroup: (props: CheckboxGroupProps) => JSX.Element;

/* eslint-disable @typescript-eslint/ban-types */


interface CheckboxProps extends HTMLAttributes<HTMLInputElement> {
  label?: ReactNode;
  value?: string | boolean | object;
  inline?: boolean;
  disabled?: boolean;
  id?: string;
  groupClassName?: string;
  groupName?: string;
  helpId?: string;
  isHelpVideoType?: boolean;
}

declare const Checkbox: (props: CheckboxProps) => JSX.Element;

/* eslint-disable @typescript-eslint/no-explicit-any */


interface RadioGroupProps extends FormGroupProps {
  name: string;
  label?: ReactNode;
  labelClassName?: string;
  groupClassName?: string;
  onChange?: (value: any) => void;
  inline?: boolean;
  helpId?: string;
  required?: boolean;
  isHelpVideoType?: boolean;
}

declare const RadioGroup: (props: RadioGroupProps) => JSX.Element;

/* eslint-disable @typescript-eslint/ban-types */


interface RadioProps extends HTMLAttributes<HTMLInputElement> {
  label?: ReactNode;
  name?: string;
  id?: string;
  groupClassName?: string;
  value?: string | boolean | object;
  disabled?: boolean;
  helpId?: string;
  isHelpVideoType?: boolean;
}

declare const Radio: (props: RadioProps) => JSX.Element;

interface LabelProps extends LabelProps$1 {
  helpId?: string;
  required?: boolean;
  isHelpVideoType?: boolean;
}

declare const Label: (props: LabelProps) => JSX.Element;

declare const RequiredAsterisk: () => JSX.Element;

declare const RequiredKey: () => JSX.Element;

type FieldHelpIconProps = {
  /** The field Help ID Required */
  id: string;
  /** The bootstrap 3 color of the icon. Default:primary */
  color?: string;
  /** The size of the help icon. Default: 1x */
  size?: string;
  /** The id of the associated label for aria-describedby, needed for accessibility. */
  labelId?: string;
  /** The prop that allows the type of icon to be changed to video-help, if needed  */
  isHelpVideoType?: boolean;
};

declare const FieldHelpIcon: (props: FieldHelpIconProps) => JSX.Element;

declare const triggerFieldHelp: (id: string) => void;

type Props = {
    name: string;
    onValueChanged: (value: string | undefined) => void;
    id?: string;
    value?: string;
    placeholder?: string;
    disabled?: boolean;
} & CurrencyInputProps;
declare const CurrencyInput: ({ name, onValueChanged, id, value, placeholder, disabled, ...attributes }: Props) => react_jsx_runtime.JSX.Element;

export { Checkbox, CheckboxGroup, CurrencyInput, Field, FieldHelpIcon, type FieldHelpIconProps, type FieldProps, Form, FormGroup, type FormProps, Input, Label, type LabelProps, Radio, RadioGroup, RequiredAsterisk, RequiredKey, triggerFieldHelp };
