import { type ReactNode } from 'react'; interface ArrayEntryManagerProps { title: ReactNode; items: T[]; /** * Called with the committed items. May be async: in `requireSave` mode the * save button awaits it before clearing the dirty flag, so a consumer that * persists over the network keeps the unsaved-changes indicator lit until the * write settles. Declaring plain `void` here made that `await` a no-op on * paper while real callers were already passing async handlers. */ onChange: (items: T[]) => void | Promise; fieldKey: keyof T; placeholder: string; emptyMessage: string; addButtonText: string; saveButtonText?: string; icon?: ReactNode; className?: string; requireSave?: boolean; onDirtyChange?: (isDirty: boolean) => void; renderLabel?: (item: T, index: number) => ReactNode; /** * An optional SECOND field on each entry, edited above the main one — a * human name for the thing the main field addresses. * * Design docs need it because a link's own title is the only name available: * claude.ai serves the same `og:title` ("Claude Artifact") for every artifact * and its per-artifact metadata endpoint is unreachable server-side, so an * unnamed link can only ever render as its type. Omitted by every other * caller, which keeps their single-field row exactly as it was. */ titleFieldKey?: keyof T; titlePlaceholder?: string; isSaving?: boolean; } export declare function ArrayEntryManager({ title, items, onChange, fieldKey, placeholder, emptyMessage, addButtonText, saveButtonText, icon, className, requireSave, onDirtyChange, renderLabel, titleFieldKey, titlePlaceholder, isSaving, }: ArrayEntryManagerProps): import("react").JSX.Element; export {}; //# sourceMappingURL=array-entry-manager.d.ts.map