import { ClickOption, ComponentDriver, HoverOption, IClickableDriver, IComponentDriverOption, IDisableableDriver, IFormFieldDriver, IInputDriver, IMouseInteractableDriver, IReadonlyableDriver, IRequirableDriver, IToggleDriver, IValidatableDriver, Interactor, Nullable, Optional, PartLocator } from "@atomic-testing/core";

//#region src/components/HTMLAnchorDriver.d.ts
declare class HTMLAnchorDriver extends ComponentDriver<{}> implements IClickableDriver, IMouseInteractableDriver {
  /**
   * Trigger a click on the anchor element.
   */
  click(option?: ClickOption): Promise<void>;
  /**
   * Hover over the anchor element.
   */
  hover(option?: HoverOption): Promise<void>;
  /**
   * Retrieve the link's `href` attribute.
   */
  getHref(): Promise<Optional<string>>;
  /**
   * Retrieve the link's `target` attribute.
   */
  getTarget(): Promise<Optional<string>>;
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLButtonDriver.d.ts
declare class HTMLButtonDriver extends ComponentDriver<{}> implements IClickableDriver, IMouseInteractableDriver, IDisableableDriver {
  /**
   * Check if the button element is disabled.
   *
   * @returns A promise that resolves to `true` when the underlying
   * `disabled` attribute is present.
   */
  isDisabled(): Promise<boolean>;
  /**
   * Identifier for this driver. Primarily used by debugging utilities.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLCheckboxDriver.d.ts
declare class HTMLCheckboxDriver extends ComponentDriver<{}> implements IFormFieldDriver<string | null>, IToggleDriver, IDisableableDriver, IReadonlyableDriver {
  /**
   * Read the checkbox value attribute.
   *
   * @returns The value assigned to the checkbox or `null` when the attribute is
   * not present.
   */
  getValue(): Promise<string | null>;
  /**
   * Determine if the checkbox is currently checked.
   */
  isSelected(): Promise<boolean>;
  /**
   * Change the checked state of the checkbox.
   *
   * No-ops on a disabled checkbox rather than clicking it regardless: under
   * jsdom, `userEvent.click` already silently skips a disabled native
   * `<input>`, but `PlaywrightInteractor.click`'s actionability check instead
   * retries "is enabled" until the click's own timeout — indistinguishable
   * from a hang for a control that can never become enabled. Checking
   * `isDisabled` first keeps the no-op behavior identical across every
   * `Interactor`.
   *
   * @param selected Desired checked state.
   */
  setSelected(selected: boolean): Promise<void>;
  /**
   * Check whether the checkbox element is disabled.
   */
  isDisabled(): Promise<boolean>;
  /**
   * Check whether the checkbox is read only.
   */
  isReadonly(): Promise<boolean>;
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLCheckboxGroupDriver.d.ts
declare class HTMLCheckboxGroupDriver extends ComponentDriver<{}> implements IInputDriver<readonly string[]> {
  /**
   * Retrieve the list of values currently selected within the group.
   *
   * Iterates over every checkbox rather than relying on a CSS selector so that
   * an empty selection does not cause a driver error.
   */
  getValue(): Promise<readonly string[]>;
  /**
   * Select or deselect checkboxes so that their combined values equal the
   * provided list.
   *
   * @param values Values that should be selected after the operation.
   * @returns Always resolves to `true` once the selection has been adjusted.
   */
  setValue(values: readonly string[]): Promise<boolean>;
  /**
   * Helper used by {@link setValue} to change the checked state of a checkbox
   * with a specific value.
   */
  protected setSelectedByValue(value: string, selected: boolean): Promise<void>;
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLElementDriver.d.ts
/**
 * Generic HTML element driver for non-interactive elements
 */
declare class HTMLElementDriver extends ComponentDriver<{}> {
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLFileInputDriver.d.ts
declare class HTMLFileInputDriver extends ComponentDriver<{}> {
  /**
   * Create a file input driver.
   */
  constructor(locator: PartLocator, interactor: Interactor, option?: Partial<IComponentDriverOption>);
  /**
   * Select one or more files on the `<input type="file">` element.
   *
   * A file input cannot be filled via {@link HTMLTextInputDriver.setValue} —
   * browsers block programmatic value assignment on `type=file` — so this
   * delegates to the dedicated `setInputFiles` interactor primitive.
   *
   * @param files One or more filesystem paths. Pass a single path for a
   * non-`multiple` input; pass an array for a `multiple` input.
   */
  uploadFiles(files: string | string[]): Promise<void>;
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLHiddenInputDriver.d.ts
declare class HTMLHiddenInputDriver extends ComponentDriver<{}> implements IInputDriver<string | null> {
  /**
   * Create a driver for a hidden input element.
   */
  constructor(locator: PartLocator, interactor: Interactor, option?: Partial<IComponentDriverOption>);
  /**
   * Retrieve the value attribute of the hidden input.
   */
  getValue(): Promise<string | null>;
  /**
   * Setting the value of a hidden input is not supported.
   */
  setValue(_value: string | null): Promise<boolean>;
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLOptionDriver.d.ts
declare class HTMLOptionDriver extends ComponentDriver {
  /**
   * Text content of the option element.
   */
  label(): Promise<string | null>;
  /**
   * Value attribute for the option element.
   *
   * When no explicit value is set, the trimmed label is returned.
   */
  value(): Promise<string | null>;
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLRadioButtonGroupDriver.d.ts
declare class HTMLRadioButtonGroupDriver extends ComponentDriver<{}> implements IInputDriver<string | null> {
  /**
   * Get the value of the currently selected radio button in the group.
   */
  getValue(): Promise<string | null>;
  /**
   * Select the radio button with the specified value.
   *
   * @param value Value attribute of the radio button to select.
   */
  setValue(value: string | null): Promise<boolean>;
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLRangeInputDriver.d.ts
/**
 * Driver for a range input (`<input type="range">`), the native control behind a
 * slider. The value is read from the input's `value` property (the browser-stable
 * source for the *current* value — unlike the `value` attribute, which keeps the
 * initial value after a programmatic change) and written through the dedicated
 * {@link Interactor.setRangeValue} primitive, since a range input accepts no typed
 * text and a positional click yields only a coordinate-derived value.
 */
declare class HTMLRangeInputDriver extends ComponentDriver<{}> implements IInputDriver<number>, IDisableableDriver, IReadonlyableDriver {
  constructor(locator: PartLocator, interactor: Interactor, option?: Partial<IComponentDriverOption>);
  /**
   * Read the current value of the range input.
   */
  getValue(): Promise<number>;
  /**
   * Set the value of the range input. The browser snaps an off-step target to the
   * nearest valid step; jsdom stores it verbatim. Pass a step-aligned value for
   * assertions that must hold in both environments.
   */
  setValue(value: number): Promise<boolean>;
  /**
   * Check whether the range input is disabled.
   */
  isDisabled(): Promise<boolean>;
  /**
   * Check whether the range input is read only.
   */
  isReadonly(): Promise<boolean>;
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLSelectDriver.d.ts
type ValueT = string | readonly string[];
declare class HTMLSelectDriver extends ComponentDriver<{}> implements IInputDriver<Nullable<ValueT>>, IDisableableDriver, IReadonlyableDriver {
  /**
   * Determine whether the select element allows multiple selections.
   */
  isMultiple(): Promise<boolean>;
  /**
   * Get the current value(s) of the select element.
   *
   * @returns `null` when nothing is selected, otherwise the selected value or
   * array of values depending on the `multiple` attribute.
   */
  getValue(): Promise<Nullable<ValueT>>;
  /**
   * Select one or more options based on their value attribute.
   *
   * @param value Value or list of values to select. Use `null` to clear the
   * selection.
   */
  setValue(value: Nullable<ValueT>): Promise<boolean>;
  /**
   * Resolve option values from their visible labels.
   */
  getValuesByLabels(labels: readonly string[]): Promise<readonly string[]>;
  /**
   * Select option(s) using their labels rather than values.
   */
  selectByLabel(label: string | readonly string[]): Promise<void>;
  getSelectedLabel(isMultiple: true): Promise<readonly string[] | null>;
  getSelectedLabel(isMultiple: false): Promise<string | null>;
  getSelectedLabel(): Promise<string | null>;
  /**
   * Check whether the select element is disabled.
   */
  isDisabled(): Promise<boolean>;
  /**
   * Check whether the select element is read only.
   */
  isReadonly(): Promise<boolean>;
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLTextInputDriver.d.ts
declare class HTMLTextInputDriver extends ComponentDriver<{}> implements IInputDriver<string | null>, IDisableableDriver, IReadonlyableDriver, IRequirableDriver, IValidatableDriver {
  /**
   * Create a text input driver.
   */
  constructor(locator: PartLocator, interactor: Interactor, option?: Partial<IComponentDriverOption>);
  /**
   * Read the value of the input element.
   */
  getValue(): Promise<string | null>;
  /**
   * Set the value of the input, if the input is date, the value should be in the format of 'yyyy-MM-dd'.
   * If the input is time, the value should be in the format of 'HH:mm'.
   * If the input is datetime-local, the value should be in the format of 'yyyy-MM-ddTHH:mm'.
   * @param value Value to be set.
   * @returns
   */
  setValue(value: string | null): Promise<boolean>;
  /**
   * Check whether the text input is disabled.
   */
  isDisabled(): Promise<boolean>;
  /**
   * Check whether the text input is read only.
   */
  isReadonly(): Promise<boolean>;
  /**
   * Check whether the text input is marked required.
   */
  isRequired(): Promise<boolean>;
  /**
   * Check whether the text input is in an invalid/error state
   * (signalled by `aria-invalid="true"`).
   */
  isError(): Promise<boolean>;
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
//#region src/components/HTMLTextAreaDriver.d.ts
declare class HTMLTextAreaDriver extends HTMLTextInputDriver {
  /**
   * Identifier for this driver.
   */
  get driverName(): string;
}
//#endregion
export { HTMLAnchorDriver, HTMLButtonDriver, HTMLCheckboxDriver, HTMLCheckboxGroupDriver, HTMLElementDriver, HTMLFileInputDriver, HTMLHiddenInputDriver, HTMLOptionDriver, HTMLRadioButtonGroupDriver, HTMLRangeInputDriver, HTMLSelectDriver, HTMLTextAreaDriver, HTMLTextInputDriver };
//# sourceMappingURL=index.d.mts.map