import { type MaybeRefOrGetter, type Ref } from 'vue';
/**
 * Roving-tabindex keyboard navigation for composite widgets where exactly one
 * descendant is tab-reachable and Arrow/Home/End move focus between the rest
 * (WAI-ARIA: radiogroup, listbox, menu, tablist). Covers WCAG 2.1.1 and 2.4.3.
 *
 * The group composable owns the keyboard handler and decides which item is
 * tabbable; item composables register themselves and read back their tabindex.
 * Item order is resolved from actual DOM position, so it stays correct
 * regardless of registration order or `flex-wrap` visual reordering.
 */
export interface RovingItem {
    id: string;
    el: Ref<HTMLElement | undefined>;
    disabled: () => boolean;
    active: () => boolean;
    select: () => void;
}
export declare function useRovingFocusGroup(opts?: {
    /** Which arrow keys navigate. Radios conventionally use 'both'. */
    orientation?: 'horizontal' | 'vertical' | 'both';
    /** Wrap around past the ends. Default true. */
    loop?: boolean;
    /** Move selection along with focus (radio semantics). Default true. */
    selectOnMove?: boolean;
}): {
    onKeydown: (event: KeyboardEvent) => void;
};
export declare function useRovingFocusItem(opts: {
    id: string;
    el: Ref<HTMLElement | undefined>;
    disabled: MaybeRefOrGetter<boolean>;
    active: MaybeRefOrGetter<boolean>;
    select: () => void;
}): {
    tabindex: import("vue").ComputedRef<0 | -1>;
};
