import { LitElement, type PropertyValues, type TemplateResult } from 'lit';
import '../button-group/ButtonGroup.js';
import './EmptyState.css';
export interface EmptyStateProps {
    heading?: string;
    description?: string;
    size?: 'sm' | 'md' | 'lg';
    headingLevel?: number;
}
declare const EmptyState_base: (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
/**
 * An empty state component for displaying placeholder content when no data is available.
 *
 * Supports a graphic slot for icons/images/pictures/SVGs, a heading, a description,
 * and an actions slot for buttons or links. Available in three sizes (sm, md, lg)
 * with semantic heading levels.
 *
 * ## Architecture: Light DOM + Pseudo-Slots
 *
 * This component uses **Light DOM** (no Shadow Root) with pseudo-slots:
 * - User-provided children are physically moved into internal containers
 * - Movement is based on `slot` attributes
 * - The `onFind` utility detects and redistributes newly-added children (one-time per element)
 *
 * ### Node Redistribution Rules
 * - `slot="graphic"` - Moved to graphic container (icon, image, picture, or SVG)
 * - `slot="actions"` - Moved to an internal `btu-button-group` (variant="spaced")
 *
 * ### Actions composition
 *
 * The actions container IS a `btu-button-group` with `variant="spaced"`. Its `size`
 * is mapped from the empty-state `size` prop (sm→small, md→medium, lg→large) so all
 * child `btu-button` / `btu-icon-button` elements get consistent sizing and group
 * semantics (`role="group"`, roving tabindex, disabled propagation) for free.
 *
 * @element btu-empty-state
 *
 * @fires {CustomEvent} btu-empty-state-ready - Fired after first render and initialization
 * @fires {CustomEvent} btu-button-group-ready - Bubbles from the internal actions button-group
 *
 * @cssprop --empty-state-max-width - Maximum width of the content block (default: min(75cqw, 360px))
 * @cssprop --empty-state-color-heading - Heading text color (default: gray-900)
 * @cssprop --empty-state-color-description - Description text color (default: gray-500)
 *
 * @slot graphic - Pseudo-slot for icon, image, picture, or SVG graphic.
 *   When the child is a `btu-icon`, the component overrides its `size` attribute
 *   based on the empty-state `size` prop (sm→md, md→lg, lg→xl). Use an `img`,
 *   `picture`, or inline `svg` for full size control.
 * @slot actions - Pseudo-slot for action buttons. Children are moved into an internal
 *   `btu-button-group` (variant="spaced"), so size and disabled state are managed
 *   by the group.
 *
 * @example
 * ```html
 * <btu-empty-state heading="No results found" description="Try adjusting your search criteria.">
 *   <btu-icon slot="graphic" symbol="search" size="xl"></btu-icon>
 *   <button slot="actions">Clear filters</button>
 * </btu-empty-state>
 * ```
 */
export default class EmptyState extends EmptyState_base {
    protected createRenderRoot(): HTMLElement | DocumentFragment;
    /**
     * Heading text displayed in the empty state.
     * @attr
     */
    heading: string;
    /**
     * Description text displayed below the heading.
     * @attr
     */
    description?: string;
    /**
     * Size variant of the empty state. Affects spacing, description text, graphic size,
     * and — when `heading-level` is unset — the default heading level (sm→5, md→4, lg→3).
     * @attr
     */
    size: 'sm' | 'md' | 'lg';
    /**
     * Heading level (1-6). When set to a valid integer 1-6, overrides the size-based
     * default and drives both the semantic h1-h6 tag and the visual heading size
     * (btu-heading-1 through btu-heading-6). Invalid values log a warning and fall
     * back to the size-based default.
     * @attr heading-level
     */
    headingLevel?: number;
    private initialClasses;
    connectedCallback(): void;
    willUpdate(changedProperties: PropertyValues): void;
    firstUpdated(): void;
    updated(changedProperties: PropertyValues): void;
    private syncGraphicIconSize;
    private resolveHeadingLevel;
    private renderHeading;
    render(): TemplateResult<1>;
}
declare global {
    interface HTMLElementTagNameMap {
        'btu-empty-state': EmptyState;
    }
}
export {};
//# sourceMappingURL=EmptyState.d.ts.map