/**
 * DataList Molecule
 *
 * A simplified, schema-driven list for iterating over entity data.
 * Extracted from the List organism with all complexity removed:
 * no built-in search, sort, filter, selection, bulk actions, or custom renderers.
 *
 * Accepts `fields` config for per-field rendering control (icon, variant, format)
 * and `itemActions` for per-item event bus wiring.
 *
 * Uses atoms only internally: Box, VStack, HStack, Typography, Badge, Button, Icon.
 */
import React from 'react';
export interface DataListField {
    /** Entity field name (dot-notation supported) */
    name: string;
    /** Display label (auto-generated from name if omitted) */
    label?: string;
    /** Lucide icon name to show beside the field */
    icon?: string;
    /** Rendering variant: 'h3'/'h4' for title, 'body' for text, 'caption' for small,
     *  'badge' for status badge, 'progress' for progress bar */
    variant?: 'h3' | 'h4' | 'body' | 'caption' | 'badge' | 'small' | 'progress';
    /** Optional format: 'date', 'currency', 'number', 'boolean', 'percent' */
    format?: 'date' | 'currency' | 'number' | 'boolean' | 'percent';
}
export interface DataListItemAction {
    /** Button label */
    label: string;
    /** Event name to emit (dispatched as UI:{event} with { id, row: itemData }) */
    event: string;
    /** Lucide icon name */
    icon?: string;
    /** Button variant */
    variant?: 'primary' | 'secondary' | 'ghost' | 'danger';
}
export interface DataListProps {
    /** Entity data array */
    entity: unknown | readonly unknown[];
    /** Field definitions for rendering each row */
    fields: readonly DataListField[];
    /** Alias for fields (compiler may generate `columns` for field definitions) */
    columns?: readonly DataListField[];
    /** Per-item action buttons */
    itemActions?: readonly DataListItemAction[];
    /** Gap between rows */
    gap?: 'none' | 'sm' | 'md' | 'lg';
    /** Visual variant */
    variant?: 'default' | 'card' | 'compact' | 'message';
    /** Group items by a field value (renders section headers between groups) */
    groupBy?: string;
    /** Field name identifying the sender (used with variant: "message") */
    senderField?: string;
    /** Current user identifier; messages matching this value align right (used with variant: "message") */
    currentUser?: string;
    /** Additional CSS classes */
    className?: string;
    /** Loading state */
    isLoading?: boolean;
    /** Error state */
    error?: Error | null;
    /** Enable drag-to-reorder with grip handles */
    reorderable?: boolean;
    /** Event emitted on reorder: UI:{reorderEvent} with { fromIndex, toIndex } */
    reorderEvent?: string;
    /** Event emitted on left swipe: UI:{swipeLeftEvent} with { row } */
    swipeLeftEvent?: string;
    /** Actions revealed on left swipe */
    swipeLeftActions?: readonly {
        label: string;
        icon?: string;
        variant?: 'primary' | 'secondary' | 'danger' | 'ghost';
    }[];
    /** Event emitted on right swipe: UI:{swipeRightEvent} with { row } */
    swipeRightEvent?: string;
    /** Actions revealed on right swipe */
    swipeRightActions?: readonly {
        label: string;
        icon?: string;
        variant?: 'primary' | 'secondary' | 'danger' | 'ghost';
    }[];
    /** Event emitted on long press: UI:{longPressEvent} with { row } */
    longPressEvent?: string;
    /** Enable infinite scroll loading */
    infiniteScroll?: boolean;
    /** Event emitted when more items needed: UI:{loadMoreEvent} */
    loadMoreEvent?: string;
    /** Whether more items are available for infinite scroll */
    hasMore?: boolean;
    /** Render prop for custom per-item content. When provided, `fields` and `itemActions` are ignored. */
    children?: (item: Record<string, unknown>, index: number) => React.ReactNode;
    /**
     * Per-item render function (schema-level alias for children render prop).
     * In .orb schemas: ["fn", "item", { pattern tree with @item.field bindings }]
     * The compiler converts this to the children render prop.
     * @deprecated Use children render prop in React code. This prop exists for pattern registry sync.
     */
    renderItem?: (item: Record<string, unknown>, index: number) => React.ReactNode;
    /** Max items to show before "Show More" button. Defaults to 5. Set to 0 to disable. */
    pageSize?: number;
}
export declare const DataList: React.FC<DataListProps>;
