import { type Json } from "../../core/index.js"; import { type SeedStyle } from "../formats.js"; export interface PinCaptureResult { captured: string[]; drifted: string[]; /** Slots that SPLIT this run — the ones the wiring file covers. Non-empty is * what makes the report say the two hookup call sites out loud. */ ported: string[]; /** Baselines deleted because no wrapper names their slot this run — a stale * baseline is a forkable zombie (checker round-1 ruling 2026-08-02). */ pruned: string[]; /** Loud wrapper errors ("file:line — message"); sync must fail on them. */ errors: string[]; /** `` wrappers sync FOUND but could not attribute to `@vendoai/vendo/ui` * ("file:line — message"). Never silent: a repo whose wrappers all sit * behind an unrecognized module used to sync to "0 captured, 0 drifted" * with nothing said. */ unattributed: string[]; warnings: string[]; /** The app-root stylesheets this walk captured. Shared with the registered * component capture — the same root files, read once. */ styles: SeedStyle[]; } export interface CapturePinsOptions { /** Slots the host opted out of (`.vendo/overrides.json` → `remix.ignoreSlots`). */ ignoreSlots?: ReadonlySet; /** Extra directories to scan for `` wrappers on top of the project * root (`.vendo/overrides.json` → `remix.sources`). Resolved from the root, * and free to sit OUTSIDE it: a repo whose app is `host/` and whose screens * are `../demos/` needs both halves in one sync. */ sources?: readonly string[]; budgetBytes?: number; /** The host's own DECLARED sample props for a component, by (file, slot) — * read off the catalog scan's registrations, never generated: a grade that * passes on invented data is worse than a refusal. */ samplePropsFor?: (file: string, slot: string) => Record | undefined; } export declare function capturePins(root: string, out: string, options?: CapturePinsOptions): Promise;