import { type DocumentLinesGridProps } from './business/line-items-editor'; import type { DocumentFormType, DocumentFormsManifest, TableMetadata } from './types'; export interface DocumentFormDialogProps { open: boolean; onOpenChange: (open: boolean) => void; /** Modelo en el que se da de alta (p. ej. `fiscal_documents`). */ model: string; /** Endpoint de alta. Default `/dynamic/`. */ endpoint?: string; forms: DocumentFormsManifest; /** Tipo preseleccionado (se salta el selector). */ initialType?: string; /** Se llama con el registro creado. */ onSaved?: (record?: unknown) => void; /** * Buscador de productos para el editor de renglones (mismo contrato que * ProductPicker). Sin él se busca en el catálogo (`productModel`) vía /data. */ searchProducts?: DocumentLinesGridProps['search']; /** Modelo de catálogo del buscador por defecto. Default `products.Product`. */ productModel?: string; /** Tasa de impuesto (0.16) si el producto no trae la suya. Default: la de la org (OrgRuntimeProvider). */ defaultTaxRate?: number; /** Moneda ISO para el editor de renglones (default: la de la org). */ currency?: string; /** * Registro desde el que se abre (acción de fila «Crear NC», «Registrar * cobro»…): siembra los campos con `default_from_record`. */ record?: Record; /** Documento origen a precargar en el DocumentEditor (`sources[].key` + id). */ initialSource?: { key: string; id: string; }; /** * Tipo con `create_model`: el alta vive en otro modelo. El host navega a la * página de ese modelo con su alta abierta; el diálogo se cierra sin pintar * formulario. Sin este callback un tipo delegado no se ofrece. */ onDelegateCreate?: (target: DelegatedCreate) => void; } /** Alta delegada a otro modelo (`document_forms.types[].create_model`). */ export interface DelegatedCreate { /** Clave del modelo destino tal como la declara el manifest (`customers.Invoice`). */ model: string; /** Tipo que la declaró. */ type: DocumentFormType; } /** * Si «Crear» de estos formularios es un alta delegada: un único tipo (p. ej. * ya acotado por el filtro de la vista) con `create_model`. Con varios tipos el * selector la ofrece como una tarjeta más. */ export declare function delegatedCreate(forms: DocumentFormsManifest | undefined): DelegatedCreate | undefined; /** Quita los tipos delegados cuando el host no sabe navegar a otro modelo. */ export declare function withoutDelegatedTypes(forms: DocumentFormsManifest | undefined): DocumentFormsManifest | undefined; /** Manifest efectivo: la prop gana sobre el metadata; sin tipos devuelve undefined. */ export declare function resolveDocumentForms(metadata?: Pick | null, override?: DocumentFormsManifest | null): DocumentFormsManifest | undefined; /** * Acota el alta guiada a la vista filtrada. Un nav que filtra por la columna * discriminadora (`type_field`) lista UN tipo de documento: «Crear» debe abrir * ese tipo directo y, si el manifest no trae formulario para él, no ofrecerse * (retest r3: «Documentos fiscales → Facturas → Crear» abría el REP, el único * tipo declarado). Sin manifest, sin `type_field` o sin filtro sobre él, todo * queda igual. */ export declare function scopeDocumentFormsToFilter(forms: DocumentFormsManifest | undefined, filter?: Record | null): { forms: DocumentFormsManifest | undefined; hideCreate: boolean; }; export declare function DocumentFormDialog({ open, onOpenChange, model, endpoint, forms, initialType, onSaved, searchProducts, productModel, defaultTaxRate, currency, record, initialSource, onDelegateCreate, }: DocumentFormDialogProps): import("react").JSX.Element | null; //# sourceMappingURL=document-form-dialog.d.ts.map