import { HarnessPredicate, TestElement, BaseHarnessFilters, ComponentHarness } from '@angular/cdk/testing';
import { SkyHarnessFilters, SkyComponentHarness } from '@skyux/core/testing';
import { SkyIndicatorIconType, SkyIndicatorDescriptionType, SkyIllustrationSize, SkyKeyInfoLayoutType, SkyLabelType } from '@skyux/indicators';
import { ComponentFixture } from '@angular/core/testing';

/**
 * A set of criteria that can be used to filter a list of SkyAlertHarness instances.
 */
interface SkyAlertHarnessFilters extends SkyHarnessFilters {
}

/**
 * Harness for interacting with an alert component in tests.
 */
declare class SkyAlertHarness extends SkyComponentHarness {
    #private;
    /**
     * @internal
     */
    static hostSelector: string;
    /**
     * Gets a `HarnessPredicate` that can be used to search for a
     * `SkyAlertHarness` that meets certain criteria.
     */
    static with(filters: SkyAlertHarnessFilters): HarnessPredicate<SkyAlertHarness>;
    /**
     * Gets the current alert type.
     */
    getAlertType(): Promise<SkyIndicatorIconType | undefined>;
    /**
     * Gets the current alert text.
     */
    getText(): Promise<string>;
    /**
     * Closes the alert.
     */
    close(): Promise<void>;
    /**
     * Whether the user closed the alert.
     */
    isClosed(): Promise<boolean>;
    /**
     * Whether the user can close the alert.
     */
    isCloseable(): Promise<boolean>;
    /**
     * Gets the `descriptionType` of the label component.
     */
    getDescriptionType(): Promise<SkyIndicatorDescriptionType>;
    /**
     * Gets the custom text used for the screen reader description of the label component icon.
     */
    getCustomDescription(): Promise<string>;
}

/**
 * Harness for interacting with a chevron component in tests.
 * @internal
 */
declare class SkyChevronHarness extends SkyComponentHarness {
    #private;
    /**
     * @internal
     */
    static hostSelector: string;
    /**
     * Gets the chevron direction.
     */
    getDirection(): Promise<string>;
    /**
     * Whether the chevron is disabled.
     */
    isDisabled(): Promise<boolean>;
    /**
     * Toggles the chevron.
     */
    toggle(): Promise<void>;
}

/**
 * A set of criteria that can be used to filter a list of SkyHelpInlineHarness instances.
 * @docsId SkyHelpInlineHarnessFiltersLegacy
 * @deprecated Use the `SkyHelpInlineHarnessFilters` from `@skyux/help-inline/testing` instead.
 */
interface SkyHelpInlineHarnessFilters extends SkyHarnessFilters {
}

/**
 * Harness for interacting with a help inline component in tests.
 * @docsId SkyHelpInlineHarnessLegacy
 * @deprecated Use the `SkyHelpInlineHarness` from `@skyux/help-inline/testing` instead.
 */
declare class SkyHelpInlineHarness extends SkyComponentHarness {
    #private;
    /**
     * @internal
     */
    static hostSelector: string;
    /**
     * Gets a `HarnessPredicate` that can be used to search for a
     * `SkyInlineHelpHarness` that meets certain criteria
     */
    static with(filters: SkyHelpInlineHarnessFilters): HarnessPredicate<SkyHelpInlineHarness>;
    /**
     * Clicks the help inline icon button
     */
    click(): Promise<void>;
}

/**
 * A set of criteria that can be used to filter a list of `SkyIllustrationHarness` instances.
 */
interface SkyIllustrationHarnessFilters extends SkyHarnessFilters {
}

/**
 * Harness for interacting with an illustration component in tests.
 */
declare class SkyIllustrationHarness extends SkyComponentHarness {
    #private;
    /**
     * @internal
     */
    static hostSelector: string;
    /**
     * Gets a `HarnessPredicate` that can be used to search for a
     * `SkyIllustrationHarness` that meets certain criteria.
     */
    static with(filters: SkyIllustrationHarnessFilters): HarnessPredicate<SkyIllustrationHarness>;
    /**
     * Gets the specified name of the illustration.
     */
    getName(): Promise<string>;
    /**
     * Gets the specified size of the illustration.
     */
    getSize(): Promise<SkyIllustrationSize>;
}

/**
 * A set of criteria that can be used to filter a list of SkyKeyInfoHarness instances.
 */
interface SkyKeyInfoHarnessFilters extends SkyHarnessFilters {
}

/**
 * Harness for interacting with a key info component in tests.
 */
declare class SkyKeyInfoHarness extends SkyComponentHarness {
    #private;
    /**
     * @internal
     */
    static hostSelector: string;
    /**
     * Gets a `HarnessPredicate` that can be used to search for a
     * `SkyKeyInfoHarness` that meets certain criteria.
     */
    static with(filters: SkyKeyInfoHarnessFilters): HarnessPredicate<SkyKeyInfoHarness>;
    /**
     * Gets the current value text.
     */
    getValueText(): Promise<string>;
    /**
     * Gets the current label text.
     */
    getLabelText(): Promise<string>;
    /**
     * Gets the current layout type.
     */
    getLayout(): Promise<SkyKeyInfoLayoutType>;
    /**
     * Clicks the help inline button.
     */
    clickHelpInline(): Promise<void>;
    /**
     * Gets the help popover content.
     */
    getHelpPopoverContent(): Promise<string | undefined>;
    /**
     * Gets the help popover title.
     */
    getHelpPopoverTitle(): Promise<string | undefined>;
}

/**
 * A set of criteria that can be used to filter a list of `SkyLabelHarness` instances.
 */
interface SkyLabelHarnessFilters extends SkyHarnessFilters {
}

/**
 * Harness for interacting with a label component in tests.
 */
declare class SkyLabelHarness extends SkyComponentHarness {
    #private;
    /**
     * @internal
     */
    static hostSelector: string;
    /**
     * Gets a `HarnessPredicate` that can be used to search for a
     * `SkyLookupHarness` that meets certain criteria.
     */
    static with(filters: SkyLabelHarnessFilters): HarnessPredicate<SkyLabelHarness>;
    /**
     * Gets the text of the label component.
     */
    getLabelText(): Promise<string>;
    /**
     * Gets the `labelType` of the label component.
     */
    getLabelType(): Promise<SkyLabelType>;
    /**
     * Gets the `descriptionType` of the label component.
     */
    getDescriptionType(): Promise<SkyIndicatorDescriptionType>;
    /**
     * Gets the custom text used for the screen reader description of the label component icon.
     */
    getCustomDescription(): Promise<string>;
}

/**
 * A set of criteria that can be used to filter a list of SkyStatusIndicatorHarness instances.
 */
interface SkyStatusIndicatorHarnessFilters extends SkyHarnessFilters {
}

/**
 * Harness for interacting with a status indicator component in tests.
 */
declare class SkyStatusIndicatorHarness extends SkyComponentHarness {
    #private;
    /**
     * @internal
     */
    static hostSelector: string;
    /**
     * Gets a `HarnessPredicate` that can be used to search for a
     * `SkyStatusIndicatorHarness` that meets certain criteria.
     */
    static with(filters: SkyStatusIndicatorHarnessFilters): HarnessPredicate<SkyStatusIndicatorHarness>;
    /**
     * Gets the current status indicator type.
     */
    getIndicatorType(): Promise<SkyIndicatorIconType | undefined>;
    /**
     * Gets the current status indicator text.
     */
    getText(): Promise<string>;
    /**
     * Gets the `descriptionType` of the status indicator component.
     */
    getDescriptionType(): Promise<SkyIndicatorDescriptionType>;
    /**
     * Gets the custom text used for the screen reader description of the status indicator component icon.
     */
    getCustomDescription(): Promise<string>;
    /**
     * Clicks the help inline button.
     */
    clickHelpInline(): Promise<void>;
    /**
     * Gets the help inline popover content.
     */
    getHelpPopoverContent(): Promise<string | undefined>;
    /**
     * Gets the help inline popover title.
     */
    getHelpPopoverTitle(): Promise<string | undefined>;
}

/**
 * A set of criteria that can be used to filter a list of SkyTextHighlightHarness instances.
 */
interface SkyTextHighlightHarnessFilters extends SkyHarnessFilters {
}

/**
 * Harness to interact with a text highlight directive in tests.
 */
declare class SkyTextHighlightHarness extends SkyComponentHarness {
    /**
     * @internal
     */
    static hostSelector: string;
    /**
     * Gets a `HarnessPredicate` that can be used to search for a
     * `SkyTextHighlightHarness` that meets certain criteria.
     */
    static with(filters: SkyTextHighlightHarnessFilters): HarnessPredicate<SkyTextHighlightHarness>;
    /**
     * Gets an array of all instances of highlighted text.
     */
    getHighlights(): Promise<TestElement[]>;
}

/**
 * A set of criteria that can be used to filter a list of `SkyTokenHarness` instances.
 */
interface SkyTokenHarnessFilters extends BaseHarnessFilters {
    /**
     * Only find instances whose text content matches the given value.
     */
    text?: string | RegExp;
}

/**
 * Harness for interacting with a token component in tests.
 */
declare class SkyTokenHarness extends ComponentHarness {
    #private;
    /**
     * @internal
     */
    static hostSelector: string;
    /**
     * Gets a `HarnessPredicate` that can be used to search for a
     * `SkyTokenHarness` that meets certain criteria.
     */
    static with(filters: SkyTokenHarnessFilters): HarnessPredicate<SkyTokenHarness>;
    /**
     * Selects the token.
     */
    select(): Promise<void>;
    /**
     * Dismisses the token.
     */
    dismiss(): Promise<void>;
    /**
     * Returns the text content of the token.
     */
    getText(): Promise<string>;
    /**
     * Whether the token is disabled.
     */
    isDisabled(): Promise<boolean>;
    /**
     * Whether the token is dismissible.
     */
    isDismissible(): Promise<boolean>;
    /**
     * Whether the token is focused.
     */
    isFocused(): Promise<boolean>;
}

/**
 * A set of criteria that can be used to filter a list of `SkyTokensHarness` instances.
 */
interface SkyTokensHarnessFilters extends SkyHarnessFilters {
}

/**
 * Harness for interacting with a tokens component in tests.
 */
declare class SkyTokensHarness extends SkyComponentHarness {
    /**
     * @internal
     */
    static hostSelector: string;
    /**
     * Gets a `HarnessPredicate` that can be used to search for a
     * `SkyTokensHarness` that meets certain criteria.
     */
    static with(filters: SkyTokensHarnessFilters): HarnessPredicate<SkyTokensHarness>;
    /**
     * Dismisses all tokens, or tokens that meet certain criteria.
     */
    dismissTokens(filters?: SkyTokenHarnessFilters): Promise<void>;
    /**
     * Gets a specific token based on the filter criteria.
     * @param filter The filter criteria.
     */
    getToken(filter: SkyTokenHarnessFilters): Promise<SkyTokenHarness>;
    /**
     * Gets an array of tokens based on the filter criteria.
     * If no filter is provided, returns all tokens.
     * @param filters The optional filter criteria.
     */
    getTokens(filters?: SkyTokenHarnessFilters): Promise<SkyTokenHarness[]>;
    /**
     * Returns the text content of all tokens.
     */
    getTokensText(): Promise<string[]>;
}

/**
 * A set of criteria that can be used to filter a list of SkyWaitHarness instances.
 */
interface SkyWaitHarnessFilters extends SkyHarnessFilters {
    /**
     * Only find blocking or non-blocking instances created by the `SkyWaitService`.
     */
    servicePageWaitType?: 'blocking' | 'non-blocking';
}

/**
 * Harness for interacting with a wait component in tests.
 */
declare class SkyWaitHarness extends SkyComponentHarness {
    #private;
    /**
     * @internal
     */
    static hostSelector: string;
    /**
     * Gets a `HarnessPredicate` that can be used to search for a
     * `SkyWaitHarness` that meets certain criteria.
     */
    static with(filters: SkyWaitHarnessFilters): HarnessPredicate<SkyWaitHarness>;
    /**
     * Gets the ARIA label for the wait component or throws an error if not waiting.
     */
    getAriaLabel(): Promise<string>;
    /**
     * Gets the waiting state of the wait component.
     */
    isWaiting(): Promise<boolean>;
    /**
     * Gets the full page state of the wait component.
     */
    isFullPage(): Promise<boolean>;
    /**
     * Gets the blocking state of the wait component.
     */
    isNonBlocking(): Promise<boolean>;
}

/**
 * Allows interaction with a SKY UX alert component.
 * @deprecated Use `SkyAlertHarness` instead.
 * @internal
 */
declare class SkyAlertFixture {
    #private;
    /**
     * The alert's current text.
     */
    get text(): string | undefined;
    /**
     * A flag indicating whether the alert can be closed.
     */
    get closeable(): boolean | undefined;
    /**
     * Returns a flag indicating whether the alert is closed.
     */
    get closed(): boolean;
    /**
     * The alert's current type.
     */
    get alertType(): string | undefined;
    constructor(fixture: ComponentFixture<unknown>, skyTestId: string);
    /**
     * Closes the alert.  If the alert is not closeable, an error is thrown.
     */
    close(): void;
}

/**
 * Allows interaction with a SKY UX label component.
 * @deprecated Use `SkyLabelHarness` instead.
 * @internal
 */
declare class SkyLabelFixture {
    #private;
    /**
     * The label's current type.
     */
    get labelType(): string | undefined;
    /**
     * The label's current text.
     */
    get text(): string | undefined;
    constructor(fixture: ComponentFixture<any>, skyTestId: string);
}

/**
 * @deprecated Use `SkyWaitHarness` instead.
 * @internal
 */
declare class SkyWaitFixture {
    #private;
    get isWaiting(): boolean;
    get isFullPage(): boolean;
    get ariaLabel(): string;
    get isNonBlocking(): boolean;
    constructor(fixture: ComponentFixture<unknown>, skyTestId: string);
}

export { SkyAlertFixture, SkyAlertHarness, SkyChevronHarness, SkyHelpInlineHarness, SkyIllustrationHarness, SkyKeyInfoHarness, SkyLabelFixture, SkyLabelHarness, SkyStatusIndicatorHarness, SkyTextHighlightHarness, SkyTokenHarness, SkyTokensHarness, SkyWaitFixture, SkyWaitHarness };
export type { SkyAlertHarnessFilters, SkyHelpInlineHarnessFilters, SkyIllustrationHarnessFilters, SkyKeyInfoHarnessFilters, SkyLabelHarnessFilters, SkyStatusIndicatorHarnessFilters, SkyTextHighlightHarnessFilters, SkyTokenHarnessFilters, SkyTokensHarnessFilters, SkyWaitHarnessFilters };
