/**
 * CopyButton component
 * @countermeasure/web-components/components/copy-button
 *
 * Vanilla TS counterpart of the React `CopyButton` primitive. Kept at 1:1
 * parity with that component's configurable surface and visual design.
 */
/** Visual style of the button. */
export type CopyButtonVariant = 'default' | 'ghost';
/** Size of the button. `icon` / `icon-sm` are square (no label padding). */
export type CopyButtonSize = 'default' | 'sm' | 'icon' | 'icon-sm';
export interface CopyButtonConfig {
    /** Container element (or selector) the button is mounted into. */
    container: HTMLElement | string;
    /** Function that returns the text to copy. Called on each click. */
    getText: () => string;
    /**
     * Default button label.
     * @default 'Copy'
     */
    label?: string;
    /**
     * Label shown briefly after a successful copy.
     * @default 'Copied!'
     */
    copiedLabel?: string;
    /**
     * Duration in milliseconds the `copiedLabel` is displayed.
     * @default 2000
     */
    copiedDuration?: number;
    /**
     * Visual style.
     * @default 'default'
     */
    variant?: CopyButtonVariant;
    /**
     * Button size. When `iconOnly` is set, the effective size is forced to
     * `icon` (matching the React primitive).
     * @default 'default'
     */
    size?: CopyButtonSize;
    /**
     * Render only the icon, with the label exposed via `aria-label`.
     * @default false
     */
    iconOnly?: boolean;
    /**
     * Disable the button.
     * @default false
     */
    disabled?: boolean;
    /** Extra class names appended to the button (space-separated). */
    className?: string;
    /** Called after the text is successfully copied to the clipboard. */
    onCopy?: (text: string) => void;
}
export declare class CopyButton {
    private readonly config;
    private readonly containerEl;
    private readonly buttonEl;
    private readonly defaultLabel;
    private readonly copiedLabel;
    private readonly copiedDuration;
    private readonly iconOnly;
    private resetTimer;
    private destroyed;
    constructor(config: CopyButtonConfig);
    destroy(): void;
    /** Render the icon (and label, unless icon-only) for the given state. */
    private renderContent;
    private readonly handleClick;
    private copyToClipboard;
    private showCopiedFeedback;
}
//# sourceMappingURL=index.d.ts.map