import type { ReactNode } from 'react'; import { z } from 'zod'; /** Strict data-only vocabulary a preset supplies to the visualizer. */ export declare const VisualizerSpecSchema: z.ZodObject<{ statusOrder: z.ZodArray; acUnitLabel: z.ZodString; statusClass: z.ZodOptional>; assignee: z.ZodOptional; pr: z.ZodOptional>; acText: z.ZodOptional; }, z.core.$strict>>; acProof: z.ZodOptional>; acEvidence: z.ZodOptional>; }, z.core.$strict>; export type VisualizerSpec = z.infer; export type VisualizerAcText = NonNullable; export type VisualizerPr = NonNullable; export type VisualizerAcProof = NonNullable; export type VisualizerAcEvidence = NonNullable; export interface CoreEvidence { id: string; [key: string]: unknown; } export interface CoreAC { id: string; status: string; evidence: CoreEvidence[]; [key: string]: unknown; } export interface CoreIssue { id: string; title: string; summary: string; status: string; acceptanceCriteria: CoreAC[]; [key: string]: unknown; } export interface Finding { code: string; severity: 'error' | 'warning' | 'acknowledged'; message: string; issueId?: string; acId?: string; evidenceId?: string; subject?: string; waivable?: boolean; fix?: string; origin?: { path: string; line?: number; }; } export type PrimitiveName = 'labels' | 'relations' | 'children' | 'sources' | 'category' | 'proof' | 'blocking' | 'audit'; export interface AuditEntry { ts: string; issueId: string; op: string; field?: string; from?: string; to?: string; actor?: string; } export interface Timestamps { created?: string; updated?: string; stateSince?: string; } export interface OperationalBlockStatus { blocked: boolean; blockers: Array<{ issue: string; ac?: string; }>; } export interface Payload { title: string; preset: string; projectDir: string; fetchedAt: string; trackerChangedAt: string | null; ok: boolean; primitives: Partial>; visualizer: VisualizerSpec | null; visualizerError?: string; /** Transitional standalone notice; the payload builder itself never compiles an extension. */ extensionError?: string; themeError?: string; operationalBlocking: Record; issues: CoreIssue[]; findings: Finding[]; audit: Record; timestamps: Record; error?: string; } export interface VisualizerExtension { isOperationallyBlocked?(issue: CoreIssue): boolean; operationalBlockLabel?(issue: CoreIssue): string | undefined; blockedViewLabel?: string; statusClass?(status: string): string; acText?(ac: CoreAC): ReactNode; acEvidence?(ac: CoreAC, projectUrl: (path: string) => string): ReactNode; acProof?(ac: CoreAC): ReactNode; issuePanels?(issue: CoreIssue, projectUrl: (path: string) => string): ReactNode; }