import type { Component, Snippet } from 'svelte';
import type { HTMLAttributes } from 'svelte/elements';
import type { IconProps } from '../../icons/index.js';
import type { EmptyStateSlots } from './emptyState.variants.js';
/**
* @summary What to show when there is nothing yet — and what to do about it.
* @description Centered placeholder block for "no data yet" / "no results"
* states. Pairs an optional icon with a heading, supporting text, and an
* optional call-to-action slot.
*
* @tag layout
* @tag feedback
*
* @example
* ```svelte
*
* {#snippet cta()}
*
* {/snippet}
*
* ```
*/
export interface EmptyStateProps extends Omit, 'children' | 'title'> {
/**
* Icon component rendered above the title. Pass any icon from
* `@urbicon-ui/blocks` (or a compatible stroke icon).
*/
icon?: Component;
/** Heading line. */
title: string;
/** Supporting paragraph below the title. */
description?: string;
/** Action buttons rendered below the description. */
cta?: Snippet;
/** Optional richer content rendered below the description. */
children?: Snippet;
/**
* Visual density. `compact` is suitable for inline empty rows in tables
* or cards; `default` for full-page empty states.
* @default 'default'
*/
density?: 'compact' | 'default';
/** Extra classes merged onto the wrapper. */
class?: string;
/** Remove all default tv classes. */
unstyled?: boolean;
/** Per-slot class overrides. Slots: base | iconWrapper | title | description | children | cta */
slotClasses?: Partial>;
/**
* Apply a named preset registered via ``.
* Prefer this over `class` overrides when the same look should be reused
* across the project.
*/
preset?: string;
}
export { default as EmptyState } from './EmptyState.svelte';
export { type EmptyStateVariants, emptyStateVariants } from './emptyState.variants.js';