/**
 * A convenience module for importing [Input](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/Input/) classes
 * when developing with [TypeScript](https://developers.arcgis.com/javascript/latest/get-started/#typescript).
 * For example, rather than importing form element inputs one at a time like this:
 *
 * ```js
 * import BarcodeScannerInput from "@arcgis/core/form/elements/inputs/BarcodeScannerInput.js";
 * import ComboBoxInput from "@arcgis/core/form/elements/inputs/ComboBoxInput.js";
 * import DatePickerInput from "@arcgis/core/form/elements/inputs/DatePickerInput.js";
 * import DateTimeOffsetPickerInput from "@arcgis/core/form/elements/inputs/DateTimeOffsetPickerInput.js";
 * import DateTimePickerInput from "@arcgis/core/form/elements/inputs/DateTimePickerInput.js";
 * import RadioButtonsInput from "@arcgis/core/form/elements/inputs/RadioButtonsInput.js";
 * import SwitchInput from "@arcgis/core/form/elements/inputs/SwitchInput.js";
 * import TextAreaInput from "@arcgis/core/form/elements/inputs/TextAreaInput.js";
 * import TextBoxInput from "@arcgis/core/form/elements/inputs/TextBoxInput.js";
 * import TimePickerInput from "@arcgis/core/form/elements/inputs/TimePickerInput.js";
 * ```
 *
 * You can use this module to import them on a single line:
 *
 * ```js
 * import { BarcodeScannerInput, ComboBoxInput, DatePickerInput, DateTimeOffsetPickerInput, DateTimePickerInput, RadioButtonsInput, SwitchInput, TextAreaInput, TextBoxInput, TimePickerInput } from "@arcgis/core/form/elements/inputs.js";
 * ```
 *
 * This module also allows you to implement [type guards](https://basarat.gitbook.io/typescript/type-system/typeguard)
 * on the form element inputs, making your code smarter.
 *
 * ```js
 * import { Input } from "@arcgis/core/form/elements/inputs.js";
 *
 * function logFormElementInput(input: Input): void {
 *   if (input.type === "text-area") {
 *     console.log("Form element input type is TextAreaInput");
 *   }
 *   else {
 *     // The compiler knows the content element must be an input type such as  `text-area` | `text-box` | `barcode-scanner` | `radio-buttons` | `combo-box`, etc.
 *     console.log("The value is not a valid form element input.")
 *   }
 * }
 * ```
 *
 * @since 4.16
 * @see [FormTemplate](https://developers.arcgis.com/javascript/latest/references/core/form/FormTemplate/)
 * @see [FieldElement](https://developers.arcgis.com/javascript/latest/references/core/form/elements/FieldElement/)
 * @see [BarcodeScannerInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/BarcodeScannerInput/)
 * @see [ComboBoxInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/ComboBoxInput/)
 * @see [DatePickerInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/DatePickerInput/)
 * @see [DateTimeOffsetPickerInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/DateTimeOffsetPickerInput/)
 * @see [DateTimePickerInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/DateTimePickerInput/)
 * @see [RadioButtonsInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/RadioButtonsInput/)
 * @see [SwitchInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/SwitchInput/)
 * @see [TextAreaInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/TextAreaInput/)
 * @see [TextBoxInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/TextBoxInput/)
 * @see [TimePickerInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/TimePickerInput/)
 */
import type BarcodeScannerInputClass from "./inputs/BarcodeScannerInput.js";
import type ComboBoxInputClass from "./inputs/ComboBoxInput.js";
import type DatePickerInputClass from "./inputs/DatePickerInput.js";
import type DateTimeOffsetPickerInputClass from "./inputs/DateTimeOffsetPickerInput.js";
import type DateTimePickerInputClass from "./inputs/DateTimePickerInput.js";
import type RadioButtonsInputClass from "./inputs/RadioButtonsInput.js";
import type SwitchInputClass from "./inputs/SwitchInput.js";
import type TextAreaInputClass from "./inputs/TextAreaInput.js";
import type TextBoxInputClass from "./inputs/TextBoxInput.js";
import type TimePickerInputClass from "./inputs/TimePickerInput.js";

/** Form element input types. */
export type Input = BarcodeScannerInputClass | ComboBoxInputClass | DatePickerInputClass | DateTimeOffsetPickerInputClass | DateTimePickerInputClass | RadioButtonsInputClass | SwitchInputClass | TextAreaInputClass | TextBoxInputClass | TimePickerInputClass;

/** The `BarcodeScannerInput` class defines the desired user interface is a barcode or QR code scanner. If this type is used in an ArcGIS Maps SDK for JavaScript web application, it will default to the [TextBoxInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/TextBoxInput/) type as the API does not support bar code scanning as an input type. */
export const BarcodeScannerInput: typeof BarcodeScannerInputClass;

/** The `BarcodeScannerInput` class defines the desired user interface is a barcode or QR code scanner. If this type is used in an ArcGIS Maps SDK for JavaScript web application, it will default to the [TextBoxInput](https://developers.arcgis.com/javascript/latest/references/core/form/elements/inputs/TextBoxInput/) type as the API does not support bar code scanning as an input type. */
export type BarcodeScannerInput = BarcodeScannerInputClass;

/** The `ComboBoxInput` class defines the desired user interface for a combo box group. */
export const ComboBoxInput: typeof ComboBoxInputClass;

/** The `ComboBoxInput` class defines the desired user interface for a combo box group. */
export type ComboBoxInput = ComboBoxInputClass;

/** The `DatePickerInput` class defines the desired user interface for working with date-only types. */
export const DatePickerInput: typeof DatePickerInputClass;

/** The `DatePickerInput` class defines the desired user interface for working with date-only types. */
export type DatePickerInput = DatePickerInputClass;

/** The `DateTimeOffsetPickerInput` class defines the desired user interface for editing date and time fields in a form that also requires the option to include an offset from Coordinated Universal Time (UTC). */
export const DateTimeOffsetPickerInput: typeof DateTimeOffsetPickerInputClass;

/** The `DateTimeOffsetPickerInput` class defines the desired user interface for editing date and time fields in a form that also requires the option to include an offset from Coordinated Universal Time (UTC). */
export type DateTimeOffsetPickerInput = DateTimeOffsetPickerInputClass;

/** The `DateTimePickerInput` class defines the desired user interface for editing date (including time) fields in a form. */
export const DateTimePickerInput: typeof DateTimePickerInputClass;

/** The `DateTimePickerInput` class defines the desired user interface for editing date (including time) fields in a form. */
export type DateTimePickerInput = DateTimePickerInputClass;

/** The `RadioButtonsInput` class defines the desired user interface for a radio button group. */
export const RadioButtonsInput: typeof RadioButtonsInputClass;

/** The `RadioButtonsInput` class defines the desired user interface for a radio button group. */
export type RadioButtonsInput = RadioButtonsInputClass;

/** The `SwitchInput` class defines the desired user interface for a binary switch or toggle. This should be used when selecting between two options in a form. */
export const SwitchInput: typeof SwitchInputClass;

/** The `SwitchInput` class defines the desired user interface for a binary switch or toggle. This should be used when selecting between two options in a form. */
export type SwitchInput = SwitchInputClass;

/** `TextAreaInput` defines the desired user interface is a multi-line text area. */
export const TextAreaInput: typeof TextAreaInputClass;

/** `TextAreaInput` defines the desired user interface is a multi-line text area. */
export type TextAreaInput = TextAreaInputClass;

/** `TextBoxInput` defines the desired user interface is a single-line text box. */
export const TextBoxInput: typeof TextBoxInputClass;

/** `TextBoxInput` defines the desired user interface is a single-line text box. */
export type TextBoxInput = TextBoxInputClass;

/** The `TimePickerInput` class defines the desired user interface for working with time-only types. */
export const TimePickerInput: typeof TimePickerInputClass;

/** The `TimePickerInput` class defines the desired user interface for working with time-only types. */
export type TimePickerInput = TimePickerInputClass;