/// <reference types="react" />
/*!
 * Copyright (c) Microsoft. All rights reserved.
 * Licensed under the MIT license. See LICENSE file in the project.
 */
import type { Step } from '@data-wrangling-components/core';
import type { IComboBoxOption, IDropdownOption } from '@fluentui/react';
import type { StepChangeFunction } from '../types.js';
export interface FormInputBase<T, OnChangeHandler = (step: Step<T>, optionKey: unknown | undefined) => void> {
    /**
     * The user-friendly form label
     */
    label: string;
    /**
     * The placeholder text to show
     */
    placeholder?: string;
    /**
     * Whether this input is required
     */
    required?: boolean;
    /**
     * Whether this input is presented
     */
    if?: boolean;
    /**
     * Whether this input is disabled
     */
    disabled?: boolean;
    /**
     * An optional React component to wrap the input with
     */
    wrapper?: React.ComponentType;
    styles?: any;
    onChange: OnChangeHandler;
}
export interface SingleChoiceFormInput<T> extends FormInputBase<T> {
    type: FormInputType.SingleChoice;
    /**
     * The form input options (required if type is enum)
     */
    options?: IDropdownOption[];
    /**
     * The form input value or selected key (if enum)
     */
    current: number | string | undefined;
}
export interface ComboBoxFormInput<T> extends FormInputBase<T, (step: Step<T>, option: string | number | undefined, value: string | undefined) => void> {
    type: FormInputType.ComboBox;
    /**
     * The form input options (required if type is enum)
     */
    options?: IComboBoxOption[];
    /**
     * The form input value or selected key (if enum)
     */
    current: string | undefined;
    onInputValueChange?: (step: Step<T>, value: string | undefined) => void;
}
export interface TextFormInput<T> extends FormInputBase<T> {
    type: FormInputType.Text;
    /**
     * The form input options (required if type is enum)
     */
    options?: IDropdownOption[];
    /**
     * The form input value or selected key (if enum)
     */
    current: string | undefined;
}
export interface MultiChoiceFormInput<T> extends FormInputBase<T> {
    type: FormInputType.MultiChoice;
    /**
     * The form input options (required if type is enum)
     */
    options?: IDropdownOption[];
    /**
     * The form input value or selected key (if enum)
     */
    current?: string[] | undefined;
}
export interface CheckboxFormInput<T> extends FormInputBase<T> {
    type: FormInputType.Checkbox;
    /**
     * The form input value or selected key (if enum)
     */
    current: boolean | undefined;
}
export interface NumberSpinnerFormInput<T> extends FormInputBase<T> {
    type: FormInputType.NumberSpinner;
    min?: number;
    max?: number;
    step?: number;
    /**
     * The form input value or selected key (if enum)
     */
    current: number | undefined;
}
export declare type FormInput<T> = SingleChoiceFormInput<T> | MultiChoiceFormInput<T> | NumberSpinnerFormInput<T> | CheckboxFormInput<T> | TextFormInput<T> | ComboBoxFormInput<T>;
export declare enum FormInputType {
    SingleChoice = "single_choice",
    MultiChoice = "multi_choice",
    ComboBox = "combobox",
    NumberSpinner = "number_spinner",
    Checkbox = "checkbox",
    Text = "text"
}
export declare const VerbForm: React.FC<{
    inputs: FormInput<any>[];
    step: Step<any>;
    onChange?: StepChangeFunction<any>;
}>;
