/** * Token Differ — Pure diff functions for design system entities. * * Compares tokens, components, and styles between two snapshots and * returns structured change sets used by BidirectionalSync. */ import type { DesignToken, DesignComponent, DesignStyle, DesignSystem } from "./registry.js"; export type ChangeType = "added" | "removed" | "modified"; export interface EntityChange { type: ChangeType; name: string; before?: T; after?: T; } export interface TokenDiff { tokens: EntityChange[]; components: EntityChange[]; styles: EntityChange[]; hasChanges: boolean; summary: string; } export interface SyncEntity { name: string; hash: string; updatedAt: number; source: "figma" | "code" | "manual"; } export interface SyncConflict { entityType: "token" | "component" | "style"; name: string; figmaHash: string; codeHash: string; figmaUpdatedAt: number; codeUpdatedAt: number; detectedAt: string; resolved: boolean; resolution?: "figma-wins" | "code-wins" | "manual"; } /** Compute a stable SHA-256 hash of a value for change detection. */ export declare function entityHash(value: unknown): string; /** Hash a design token by its values (mode-sensitive). */ export declare function tokenHash(token: DesignToken): string; /** Hash a component by its key properties. */ export declare function componentHash(component: DesignComponent): string; /** Hash a style by its type and value. */ export declare function styleHash(style: DesignStyle): string; /** Diff two complete design system snapshots. */ export declare function diffDesignSystem(before: DesignSystem, after: DesignSystem): TokenDiff; /** Diff only tokens between two snapshots. */ export declare function diffTokens(before: DesignToken[], after: DesignToken[]): EntityChange[]; /** Diff only components between two snapshots. */ export declare function diffComponents(before: DesignComponent[], after: DesignComponent[]): EntityChange[]; /** Diff only styles between two snapshots. */ export declare function diffStyles(before: DesignStyle[], after: DesignStyle[]): EntityChange[]; /** Detect conflicts when both sides changed the same entity within a time window. */ export declare function detectConflicts(figmaState: Map, codeState: Map, windowMs?: number): SyncConflict[];