import { SkeletonOptions } from './skeleton.types';
/**
* Headless skeleton controller. Orchestrates the loading→content swap on
* existing markup by toggling `[hidden]` on the placeholder/content and
* reflecting state on the region; it never applies visual styles.
*
* The individual `[data-c42-skeleton]` shapes are usable standalone via CSS
* (no controller needed) — each keeps its `data-variant` (text|circle|rect).
*
* Markup:
* ```html
*
* ```
*/
export declare class Skeleton {
private readonly root;
private readonly placeholder;
private readonly content;
private isLoading;
private cleanups;
constructor(root: HTMLElement, options?: SkeletonOptions);
private render;
private emit;
/** Toggle the loading state. No-op if already in the requested state. */
setLoading(loading: boolean): void;
get loading(): boolean;
/** Subscribe to a DOM event on the root element. Returns an unsubscribe fn. */
on(event: string, handler: (event: E) => void): () => void;
destroy(): void;
}