export type BulkJobType = 'email' | 'download'; export type BulkJobStatus = 'waiting' | 'active' | 'completed' | 'failed' | 'cancelled'; export interface BulkJob { jobId: string; type: BulkJobType; dbName: string; title: string; status: BulkJobStatus; progress: number; current: number; total: number; currentItem?: string; errorCount: number; downloadReady?: boolean; zipSizeBytes?: number; /** PO IDs whose content changed after their PDF was generated. Present only on completed download jobs. */ stalePoIds?: string[]; startedAt: number; completedAt?: number; /** Single-item actions (row-level Print PDF / Email) still track SSE progress * and retry like any other job, but aren't a user-initiated "background job" * the panel should list — hide them from BulkJobProgressPanel and the active-job badge. */ hidden?: boolean; } export declare const useBulkJobStore: import("pinia").StoreDefinition<"bulkJob", import("pinia")._UnwrapAll; addJob: (job: BulkJob) => void; updateJob: (jobId: string, patch: Partial) => void; removeJob: (jobId: string) => void; cancelJob: (jobId: string) => Promise; waitForPdfJob: (jobId: string, dbName: string) => Promise; activeJobs: import("vue").ComputedRef<{ jobId: string; type: BulkJobType; dbName: string; title: string; status: BulkJobStatus; progress: number; current: number; total: number; currentItem?: string | undefined; errorCount: number; downloadReady?: boolean | undefined; zipSizeBytes?: number | undefined; stalePoIds?: string[] | undefined; startedAt: number; completedAt?: number | undefined; hidden?: boolean | undefined; }[]>; hasActiveJobs: import("vue").ComputedRef; }, "jobs">>, Pick<{ jobs: import("vue").Ref<{ jobId: string; type: BulkJobType; dbName: string; title: string; status: BulkJobStatus; progress: number; current: number; total: number; currentItem?: string | undefined; errorCount: number; downloadReady?: boolean | undefined; zipSizeBytes?: number | undefined; stalePoIds?: string[] | undefined; startedAt: number; completedAt?: number | undefined; hidden?: boolean | undefined; }[], BulkJob[] | { jobId: string; type: BulkJobType; dbName: string; title: string; status: BulkJobStatus; progress: number; current: number; total: number; currentItem?: string | undefined; errorCount: number; downloadReady?: boolean | undefined; zipSizeBytes?: number | undefined; stalePoIds?: string[] | undefined; startedAt: number; completedAt?: number | undefined; hidden?: boolean | undefined; }[]>; addJob: (job: BulkJob) => void; updateJob: (jobId: string, patch: Partial) => void; removeJob: (jobId: string) => void; cancelJob: (jobId: string) => Promise; waitForPdfJob: (jobId: string, dbName: string) => Promise; activeJobs: import("vue").ComputedRef<{ jobId: string; type: BulkJobType; dbName: string; title: string; status: BulkJobStatus; progress: number; current: number; total: number; currentItem?: string | undefined; errorCount: number; downloadReady?: boolean | undefined; zipSizeBytes?: number | undefined; stalePoIds?: string[] | undefined; startedAt: number; completedAt?: number | undefined; hidden?: boolean | undefined; }[]>; hasActiveJobs: import("vue").ComputedRef; }, "activeJobs" | "hasActiveJobs">, Pick<{ jobs: import("vue").Ref<{ jobId: string; type: BulkJobType; dbName: string; title: string; status: BulkJobStatus; progress: number; current: number; total: number; currentItem?: string | undefined; errorCount: number; downloadReady?: boolean | undefined; zipSizeBytes?: number | undefined; stalePoIds?: string[] | undefined; startedAt: number; completedAt?: number | undefined; hidden?: boolean | undefined; }[], BulkJob[] | { jobId: string; type: BulkJobType; dbName: string; title: string; status: BulkJobStatus; progress: number; current: number; total: number; currentItem?: string | undefined; errorCount: number; downloadReady?: boolean | undefined; zipSizeBytes?: number | undefined; stalePoIds?: string[] | undefined; startedAt: number; completedAt?: number | undefined; hidden?: boolean | undefined; }[]>; addJob: (job: BulkJob) => void; updateJob: (jobId: string, patch: Partial) => void; removeJob: (jobId: string) => void; cancelJob: (jobId: string) => Promise; waitForPdfJob: (jobId: string, dbName: string) => Promise; activeJobs: import("vue").ComputedRef<{ jobId: string; type: BulkJobType; dbName: string; title: string; status: BulkJobStatus; progress: number; current: number; total: number; currentItem?: string | undefined; errorCount: number; downloadReady?: boolean | undefined; zipSizeBytes?: number | undefined; stalePoIds?: string[] | undefined; startedAt: number; completedAt?: number | undefined; hidden?: boolean | undefined; }[]>; hasActiveJobs: import("vue").ComputedRef; }, "addJob" | "updateJob" | "removeJob" | "cancelJob" | "waitForPdfJob">>;