/**
 * Copyright (c) Cisco Systems, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 */
/**This mixin using roving tabindex strategy to manage focus in a composite UI component,
 * the element that is to be included in the tab sequence has tabindex of "0" and all other focusable elements contained in the composite have tabindex of "-1".
 * Benefit of using roving tabindex to manage focus is that the user agent will scroll the newly focused element into view.
 *
 * @property({ type: Number, reflect: true }) selected <--- index of focusable activeElement
 *
 * Example:
 *
 * @customElements("custom-element")
 * class CustomElement extends RovingTabIndexMixin(LitElement) {
      //custom element class implementation
 * }
 *  */
import { LitElement } from "lit";
import { SlotableClass, SlotableInterface } from "./SlottedMixin";
export type AnyConstructor<A = LitElement> = new (...args: any[]) => A;
export declare abstract class RovingTabIndexClass extends LitElement {
    protected getAvailableSelectedIndex?(index: number, increment?: number): number;
}
export interface RovingTabIndexInterface {
    selected: number;
    selectedIndex: number;
    rovingPreventFocus: boolean;
}
export declare const RovingTabIndexMixin: <T extends AnyConstructor<SlotableClass & RovingTabIndexClass>>(base: T) => T & AnyConstructor<RovingTabIndexInterface & SlotableInterface & SlotableClass & RovingTabIndexClass>;
