/**
 * Shared Forms UI primitives — token-only, accessible building blocks used
 * across the Forms list, schema drawer, and (later) the entries views. No raw
 * palette colours: field-type and status hues map onto the theme's semantic
 * tokens (success / warning / info / destructive / primary / muted) so they
 * track light/dark mode and brand overrides automatically.
 */
import type { ReactNode } from 'react';
import type { FormFieldType, FormStatus } from '../../lib/forms-service.js';
export declare function FieldTypeBadge({ type }: {
    type: FormFieldType;
}): import("react/jsx-runtime").JSX.Element;
export declare function FormStatusBadge({ status }: {
    status: FormStatus;
}): import("react/jsx-runtime").JSX.Element;
/** Small red count badge for unread submissions. Hidden when count is 0. */
export declare function UnreadBadge({ count, className }: {
    count: number;
    className?: string;
}): import("react/jsx-runtime").JSX.Element | null;
export declare function SummaryChip({ value, label, tone, }: {
    value: ReactNode;
    label: string;
    tone?: 'neutral' | 'success' | 'warning' | 'destructive';
}): import("react/jsx-runtime").JSX.Element;
export declare function FormsLoading({ label }: {
    label?: string;
}): import("react/jsx-runtime").JSX.Element;
export declare function FormsEmptyState({ icon, title, description, action, }: {
    icon?: ReactNode;
    title: string;
    description?: string;
    action?: ReactNode;
}): import("react/jsx-runtime").JSX.Element;
export declare function FormsErrorState({ message, onRetry }: {
    message: string;
    onRetry?: () => void;
}): import("react/jsx-runtime").JSX.Element;
/**
 * Token-only pagination footer matching the Posts/Pages list styling. Renders
 * a "start–end of total" summary plus prev / numbered / next controls. Hidden
 * when there is a single page of results.
 */
export declare function FormsPagination({ page, pageSize, total, onPageChange, noun, label, }: {
    page: number;
    pageSize: number;
    total: number;
    onPageChange: (page: number) => void;
    /** Singular noun for the summary (pluralised automatically). */
    noun?: string;
    /** Accessible label for the nav landmark. */
    label?: string;
}): import("react/jsx-runtime").JSX.Element | null;
export declare const btnPrimary = "inline-flex items-center justify-center gap-2 rounded-md bg-primary px-4 py-2 text-base font-medium text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-60";
export declare const btnSecondary = "inline-flex items-center justify-center gap-2 rounded-md border border-border bg-card px-4 py-2 text-base font-medium text-foreground transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-60";
export declare const btnGhostIcon = "inline-flex items-center justify-center rounded-md p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring";
//# sourceMappingURL=primitives.d.ts.map