import { type OpenEditor } from "../internal/store/index.js";
/**
 * Deterministic, space-free DOM id for a tab, built from an instance-scoped
 * `prefix` (a `useId()` value) and the editor `key`. Shared by the tab (its
 * `id`) and the editor body (its `aria-labelledby`) so the two associate; the
 * key is percent-encoded because editor keys embed file paths that may contain
 * characters (spaces) illegal in a space-separated IDREF.
 */
export declare function editorTabDomId(prefix: string, key: string): string;
/** Props for {@link EditorTabs}. */
export interface EditorTabsProps {
    /** Open editors in tab order. */
    readonly editors: readonly OpenEditor[];
    /** Key of the active editor (`editorKey(entryId, path)`), or `null`. */
    readonly activeKey: string | null;
    /** Focus an open editor (single click). */
    readonly onActivate: (entryId: string, path: string) => void;
    /** Pin an editor (double-click) so it stops being the reusable preview tab. */
    readonly onPin: (entryId: string, path: string) => void;
    /** Close an editor (close button or middle click). */
    readonly onClose: (entryId: string, path: string) => void;
    /**
     * DOM id of the editor body (`role="tabpanel"`). When provided together with
     * {@link tabIdPrefix}, each tab gets a stable `id` and `aria-controls` linking
     * it to that panel. Optional so the strip degrades gracefully without a panel.
     */
    readonly panelId?: string;
    /** Instance-scoped prefix for per-tab ids (see {@link editorTabDomId}). */
    readonly tabIdPrefix?: string;
    /** Additional CSS classes for the root element. */
    readonly className?: string;
}
/**
 * The editor group's tab strip, following VS Code preview-tab semantics:
 * a single-click preview tab renders in italics and is reused as the user
 * browses; double-clicking a tab pins it (persistent). Each tab has a close
 * control, also reachable by middle-click.
 *
 * A `role="tablist"` of `role="tab"` items; the matching `tabpanel` is the
 * editor body rendered by the surface. Arrow keys move focus between tabs and
 * activate; Delete/Backspace closes the focused tab. The visual close "X" is a
 * presentational (`aria-hidden`) mouse affordance — assistive tech closes via
 * the keyboard, so the X is not a nested interactive control (WCAG 4.1.2). All
 * visual properties flow through `--stgm-*` tokens (DD-005).
 */
export declare function EditorTabs({ editors, activeKey, onActivate, onPin, onClose, panelId, tabIdPrefix, className, }: EditorTabsProps): import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=EditorTabs.d.ts.map