@usefragments/core 1.10.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/{chunk-MZ4SW3TP.js → chunk-3IOWHECM.js} +8 -1
  2. package/dist/{chunk-MZ4SW3TP.js.map → chunk-3IOWHECM.js.map} +1 -1
  3. package/dist/chunk-7ULGH74M.js +66 -0
  4. package/dist/chunk-7ULGH74M.js.map +1 -0
  5. package/dist/{chunk-XN3LSDPY.js → chunk-BMPYIUZE.js} +612 -344
  6. package/dist/chunk-BMPYIUZE.js.map +1 -0
  7. package/dist/{chunk-YF65VYRY.js → chunk-ML5S6QNU.js} +191 -169
  8. package/dist/chunk-ML5S6QNU.js.map +1 -0
  9. package/dist/{chunk-3LLRNCPX.js → chunk-MZ2FS7U4.js} +1 -1
  10. package/dist/chunk-MZ2FS7U4.js.map +1 -0
  11. package/dist/chunk-PWIJMOI4.js +202 -0
  12. package/dist/chunk-PWIJMOI4.js.map +1 -0
  13. package/dist/chunk-RYFULE43.js +578 -0
  14. package/dist/chunk-RYFULE43.js.map +1 -0
  15. package/dist/codes/index.d.ts +2 -2
  16. package/dist/codes/index.js +3 -2
  17. package/dist/compiled-types/index.d.ts +327 -2
  18. package/dist/compiled-types/index.js +1 -1
  19. package/dist/generate/index.d.ts +3 -2
  20. package/dist/{governance-CLk_wkP9.d.ts → governance-hOPXGbbs.d.ts} +474 -515
  21. package/dist/governance-telemetry.d.ts +6 -0
  22. package/dist/governance-telemetry.js +1 -1
  23. package/dist/{index-_sxhUNqx.d.ts → index-C8bcXVav.d.ts} +448 -448
  24. package/dist/index.d.ts +3280 -1305
  25. package/dist/index.js +2414 -350
  26. package/dist/index.js.map +1 -1
  27. package/dist/manifest.d.ts +228 -0
  28. package/dist/manifest.js +24 -0
  29. package/dist/manifest.js.map +1 -0
  30. package/dist/preview/index.js +45 -1
  31. package/dist/preview/index.js.map +1 -1
  32. package/dist/preview-runtime.d.ts +1 -2
  33. package/dist/preview-runtime.js +150 -14
  34. package/dist/preview-runtime.js.map +1 -1
  35. package/dist/react-types.d.ts +1 -2
  36. package/dist/registry.d.ts +1412 -203
  37. package/dist/registry.js +30 -3
  38. package/dist/schemas/index.d.ts +1 -1
  39. package/dist/schemas/index.js +3 -2
  40. package/dist/storyAdapter.d.ts +1 -2
  41. package/dist/storyAdapter.js +11 -49
  42. package/dist/storyAdapter.js.map +1 -1
  43. package/dist/test-utils.d.ts +3 -2
  44. package/dist/topology/index.d.ts +1 -1
  45. package/dist/topology/index.js +1 -1
  46. package/package.json +8 -2
  47. package/src/__tests__/contract-parser.test.ts +318 -277
  48. package/src/__tests__/preview-runtime-hook.test.tsx +315 -0
  49. package/src/__tests__/preview-runtime.test.tsx +30 -8
  50. package/src/__tests__/schema.test.ts +191 -14
  51. package/src/analysis-plan/analysis-plan-v1.test.ts +320 -0
  52. package/src/analysis-plan/coverage.ts +181 -0
  53. package/src/analysis-plan/digest.ts +141 -0
  54. package/src/analysis-plan/index.ts +34 -0
  55. package/src/analysis-plan/types.ts +207 -0
  56. package/src/approved-contract-tokens.test.ts +39 -0
  57. package/src/approved-contract-tokens.ts +18 -0
  58. package/src/codes/__tests__/codes.test.ts +13 -0
  59. package/src/codes/codes.ts +40 -0
  60. package/src/compiled-types/index.ts +640 -39
  61. package/src/compiled-types/parse.test.ts +145 -4
  62. package/src/component-contract.ts +95 -53
  63. package/src/composition.ts +7 -13
  64. package/src/constants.ts +3 -6
  65. package/src/contract/hash.test.ts +20 -0
  66. package/src/contract/hash.ts +66 -9
  67. package/src/contract/index.ts +24 -1
  68. package/src/contract/manifest.test.ts +94 -0
  69. package/src/contract/manifest.ts +68 -0
  70. package/src/contract/preimage.test.ts +219 -1
  71. package/src/contract/preimage.ts +326 -6
  72. package/src/contract/stamp.test.ts +3 -0
  73. package/src/contract/stamp.ts +1 -1
  74. package/src/contract-parser.ts +54 -30
  75. package/src/defineFragment.test.ts +476 -91
  76. package/src/defineFragment.ts +204 -114
  77. package/src/domain-ids.test.ts +35 -0
  78. package/src/domain-ids.ts +61 -0
  79. package/src/evaluation/evaluate.test.ts +522 -0
  80. package/src/evaluation/evaluate.ts +690 -0
  81. package/src/evaluation/evaluation-v2-receipt-v1.test.ts +772 -0
  82. package/src/evaluation/index.ts +58 -0
  83. package/src/evaluation/receipt.ts +753 -0
  84. package/src/evaluation/types.ts +406 -0
  85. package/src/facts/builders.ts +2 -0
  86. package/src/facts/compile.ts +29 -6
  87. package/src/facts/fact-index.ts +13 -3
  88. package/src/facts/fact-integrity-v1.test.ts +172 -0
  89. package/src/facts/facts.test.ts +15 -0
  90. package/src/facts/ids.ts +46 -3
  91. package/src/facts/index.ts +14 -1
  92. package/src/facts/integrity.ts +134 -0
  93. package/src/facts/types.ts +36 -0
  94. package/src/governance-integrity.test.ts +1 -0
  95. package/src/governance-integrity.ts +5 -3
  96. package/src/governance-telemetry.ts +8 -0
  97. package/src/governance.ts +70 -8
  98. package/src/index.ts +230 -37
  99. package/src/preview/validation.test.ts +62 -0
  100. package/src/preview/validation.ts +48 -2
  101. package/src/preview-runtime.tsx +227 -20
  102. package/src/registry-install-plan.ts +200 -109
  103. package/src/registry-shards.test.ts +263 -0
  104. package/src/registry.ts +237 -0
  105. package/src/repository-binding.test.ts +50 -0
  106. package/src/repository-binding.ts +96 -0
  107. package/src/rules/families.test.ts +36 -0
  108. package/src/rules/finding.ts +7 -2
  109. package/src/rules/index.ts +17 -1
  110. package/src/rules/rule-config.test.ts +66 -0
  111. package/src/rules/rule-config.ts +73 -0
  112. package/src/rules/rules.test.ts +26 -0
  113. package/src/rules/tokens-css-vars-must-be-defined.test.ts +51 -2
  114. package/src/rules/tokens-css-vars-must-be-defined.ts +34 -1
  115. package/src/schema.ts +293 -113
  116. package/src/schemas/index.ts +1 -1
  117. package/src/storyAdapter.test.ts +68 -12
  118. package/src/storyAdapter.ts +44 -75
  119. package/src/topology/resolve-area.ts +1 -1
  120. package/src/types.ts +258 -40
  121. package/dist/chunk-3LLRNCPX.js.map +0 -1
  122. package/dist/chunk-RANPUC6C.js +0 -72
  123. package/dist/chunk-RANPUC6C.js.map +0 -1
  124. package/dist/chunk-XN3LSDPY.js.map +0 -1
  125. package/dist/chunk-YF65VYRY.js.map +0 -1
  126. package/src/fragment-types.ts +0 -214
  127. package/src/react-create-element.test.ts +0 -22
  128. package/src/react-create-element.ts +0 -12
  129. package/src/storyFilters.test.ts +0 -350
  130. package/src/storyFilters.ts +0 -253
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/compiled-types/index.ts"],"sourcesContent":["/**\n * Compiled fragment types — shared between CLI and MCP packages.\n *\n * These are the JSON-serializable types used in fragments.json and consumed\n * by AI agents, MCP servers, and context generators.\n */\n\nimport type { ComponentGovernanceRecord } from \"../governance.js\";\n\n/**\n * Component metadata\n */\nexport interface FragmentMeta {\n name: string;\n description: string;\n category: string;\n aliases?: string[];\n tags?: string[];\n status?: \"stable\" | \"beta\" | \"deprecated\" | \"experimental\";\n since?: string;\n dependencies?: Array<{ name: string; version: string; reason?: string }>;\n figma?: string;\n figmaProps?: Record<string, unknown>;\n}\n\n/**\n * Usage guidelines for AI agents and developers\n */\nexport interface FragmentUsage {\n when: string[];\n whenNot: string[];\n choose?: Record<string, string>;\n /** Serialized v3 anti-pattern guidance; `good` is checked JSX source. */\n dont?: Array<{\n reason: string;\n bad: string;\n good: string;\n }>;\n guidelines?: string[];\n accessibility?: string[];\n}\n\n/** Static state-space hints carried from a v3 fragment definition. */\nexport interface CompiledFragmentMatrix {\n axes?: Record<string, \"auto\" | readonly string[]>;\n forced?: string[];\n worstCase?: Record<string, unknown>;\n}\n\n/** Optional design-tool reference carried from a v3 fragment definition. */\nexport interface CompiledFragmentDesign {\n figmaNode?: string;\n}\n\n/**\n * Definition for a single prop\n */\nexport interface PropDefinition {\n type: string;\n values?: readonly string[];\n default?: unknown;\n description: string;\n required?: boolean;\n constraints?: string[];\n typeDetails?: Record<string, unknown>;\n controlType?: string;\n controlOptions?: {\n min?: number;\n max?: number;\n step?: number;\n presetColors?: string[];\n };\n /** Visibility annotation carried from a v3 fragment definition. */\n visibility?: \"public\" | \"internal\" | \"hidden\";\n}\n\n/**\n * Relationship to another component\n */\nexport interface ComponentRelation {\n component: string;\n relationship: string;\n note: string;\n}\n\n/**\n * Agent-optimized contract metadata\n */\nexport interface FragmentContract {\n propsSummary?: string[];\n a11yRules?: string[];\n bans?: Array<{ pattern: string; message: string }>;\n scenarioTags?: string[];\n /** Per-component performance budget override in bytes (gzipped) */\n performanceBudget?: number;\n /** Sub-component slot metadata for compound components */\n compoundChildren?: Record<\n string,\n {\n required?: boolean;\n accepts?: string[];\n description?: string;\n }\n >;\n /** Canonical JSX usage examples showing how to assemble the component */\n canonicalUsage?: string[];\n}\n\n/**\n * Per-component preview configuration carried from either contract input.\n * JSON contracts use module/css hints; v3 definitions use provider and\n * visual-diff-region hints. Both are projections of the same compiled object.\n */\nexport interface CompiledFragmentPreview {\n setupModule?: string;\n wrapperModule?: string;\n wrapperExport?: string;\n css?: string[];\n theme?: \"light\" | \"dark\";\n providers?: unknown[];\n dynamicRegions?: string[];\n}\n\n/**\n * Provenance tracking for generated fragments\n */\nexport interface FragmentGenerated {\n source: \"storybook\" | \"manual\" | \"ai\" | \"scan\" | \"extracted\" | \"merged\" | \"migrated\";\n sourceFile?: string;\n /** @deprecated Use provenance.verified instead */\n confidence?: number;\n verified?: boolean;\n timestamp?: string;\n}\n\n/**\n * AI-specific metadata\n */\nexport interface AIMetadata {\n compositionPattern?: \"compound\" | \"simple\" | \"controlled\" | \"wrapper\";\n subComponents?: string[];\n requiredChildren?: string[];\n commonPatterns?: string[];\n}\n\n/**\n * Performance data for a component (from bundle size measurement)\n */\n/**\n * A single import contributing to bundle size\n */\nexport interface ImportEntry {\n /** Resolved file path (relative to project root) */\n path: string;\n /** Bytes contributed to the bundle */\n bytes: number;\n /** Percentage of total bundle size */\n percent: number;\n}\n\nexport interface PerformanceData {\n /** Gzipped bundle size in bytes */\n bundleSize: number;\n /** Raw (minified, not gzipped) bundle size in bytes */\n rawSize: number;\n /** Complexity classification */\n complexity: \"lightweight\" | \"moderate\" | \"heavy\";\n /** Percentage of budget used (0-100+) */\n budgetPercent: number;\n /** Whether the component exceeds its budget */\n overBudget: boolean;\n /** ISO timestamp when measured */\n measuredAt: string;\n /** Top imports by size (largest first) */\n imports?: ImportEntry[];\n}\n\nexport interface ObservedUsageProp {\n name: string;\n kind: \"static\" | \"dynamic\" | \"spread\" | \"jsx\" | \"boolean\" | \"null\";\n value?: string | number | boolean | null;\n}\n\nexport interface ObservedComponentUsage {\n /** Source file path relative to the fragments config root */\n file: string;\n /** 1-indexed source line */\n line: number;\n /** 0-indexed source column */\n column: number;\n props: ObservedUsageProp[];\n parentElement?: string;\n conditional?: boolean;\n}\n\n/**\n * Compiled fragment data (JSON-serializable for AI consumption)\n */\nexport interface CompiledFragment {\n filePath: string;\n meta: FragmentMeta;\n /** Canonical v2 guidance. `usage` is retained for compatibility. */\n guidance?: FragmentUsage;\n usage: FragmentUsage;\n props: Record<string, PropDefinition>;\n /** Normalized component governance records emitted from *.fragment.ts. */\n governance?: ComponentGovernanceRecord[];\n relations?: ComponentRelation[];\n variants: Array<{\n name: string;\n description: string;\n code?: string;\n figma?: string;\n canonical?: boolean;\n args?: Record<string, unknown>;\n }>;\n contract?: FragmentContract;\n /** Per-component preview/runtime hints from the authored contract. */\n preview?: CompiledFragmentPreview;\n /** Authored state-space hints for the Workshop matrix. */\n matrix?: CompiledFragmentMatrix;\n /** Optional design-tool comparison reference. */\n design?: CompiledFragmentDesign;\n /** Design-token references used by this component. */\n tokens?: string[];\n ai?: AIMetadata;\n /** Framework hint from contract, used by preview adapters and Cloud */\n framework?: string;\n /** Top-level compact prop summaries for agent first-pass */\n propsSummary?: string[];\n /** Source file path relative to config root (for contract-sourced fragments) */\n sourcePath?: string;\n /** Named export for preview adapter resolution */\n exportName?: string;\n /** Clean provenance tracking (V2) */\n provenance?: {\n source: string;\n verified: boolean;\n frameworkSupport?: string;\n sourceHash?: string;\n extractedAt?: string;\n };\n /** Component performance data from bundle size measurement */\n performance?: PerformanceData;\n /** Observed JSX call sites captured during `fragments scan` */\n usages?: ObservedComponentUsage[];\n _generated?: FragmentGenerated;\n}\n\n/**\n * Compiled block data (JSON-serializable for AI consumption)\n */\nexport interface CompiledBlock {\n filePath: string;\n name: string;\n description: string;\n category: string;\n components: string[];\n code: string;\n tags?: string[];\n}\n\n/**\n * A single token entry in the compiled output\n */\nexport interface CompiledTokenEntry {\n name: string;\n value?: string;\n description?: string;\n}\n\n/**\n * Compiled token data stored in fragments.json\n */\nexport interface CompiledTokenData {\n prefix: string;\n total: number;\n categories: Record<string, CompiledTokenEntry[]>;\n}\n\n/**\n * Performance summary across all components\n */\nexport interface PerformanceSummary {\n /** Preset name used */\n preset: string;\n /** Budget applied in bytes */\n budget: number;\n /** Total components measured */\n total: number;\n /** Number of components over budget */\n overBudget: number;\n /** Distribution by tier */\n tiers: Record<string, number>;\n}\n\n/**\n * The compiled fragments.json structure\n */\nexport interface CompiledFragmentsFile {\n version: string;\n generatedAt: string;\n /** CLI version that produced this file, used for freshness checks */\n generatorVersion?: string;\n /** Relative source/config inputs used to build this file, used for freshness checks */\n buildInputs?: string[];\n packageName?: string;\n fragments: Record<string, CompiledFragment>;\n blocks?: Record<string, CompiledBlock>;\n tokens?: CompiledTokenData;\n /** Component relationship graph for AI structural queries */\n graph?: import(\"../graph/types.js\").SerializedComponentGraph;\n /** Performance measurement summary */\n performanceSummary?: PerformanceSummary;\n /** @deprecated Use blocks instead */\n recipes?: Record<string, CompiledBlock>;\n}\n\nexport class CompiledFragmentsFileValidationError extends Error {\n readonly source: string;\n readonly issues: string[];\n\n constructor(source: string, issues: readonly string[]) {\n const orderedIssues = [...issues].sort(compareStrings);\n super(`Invalid compiled Fragments catalog at ${source}: ${orderedIssues.join(\"; \")}`);\n this.name = \"CompiledFragmentsFileValidationError\";\n this.source = source;\n this.issues = orderedIssues;\n }\n}\n\nexport function parseCompiledFragmentsFile(\n input: string | unknown,\n source = \"fragments.json\"\n): CompiledFragmentsFile {\n let value: unknown = input;\n if (typeof input === \"string\") {\n try {\n value = JSON.parse(input);\n } catch {\n // Native JSON.parse messages differ across Node and browsers. The public\n // contract error must not vary with the runtime that validates it.\n throw new CompiledFragmentsFileValidationError(source, [\"invalid JSON\"]);\n }\n }\n\n const issues: string[] = [];\n if (!isRecord(value)) {\n throw new CompiledFragmentsFileValidationError(source, [\"root must be an object\"]);\n }\n if (typeof value.version !== \"string\" || value.version.length === 0) {\n issues.push(\"version must be a non-empty string\");\n }\n if (typeof value.generatedAt !== \"string\" || value.generatedAt.length === 0) {\n issues.push(\"generatedAt must be a non-empty string\");\n }\n if (!isRecord(value.fragments)) {\n issues.push(\"fragments must be an object\");\n } else {\n const names = new Map<string, string>();\n for (const [key, fragment] of sortedEntries(value.fragments)) {\n validateCompiledFragment(key, fragment, issues);\n if (\n !isRecord(fragment) ||\n !isRecord(fragment.meta) ||\n typeof fragment.meta.name !== \"string\"\n ) {\n continue;\n }\n const previousKey = names.get(fragment.meta.name);\n if (previousKey !== undefined) {\n issues.push(\n `fragments.${key}.meta.name duplicates fragments.${previousKey}.meta.name (${JSON.stringify(fragment.meta.name)})`\n );\n } else {\n names.set(fragment.meta.name, key);\n }\n }\n }\n validateOptionalString(value.generatorVersion, \"generatorVersion\", issues);\n validateOptionalString(value.packageName, \"packageName\", issues);\n validateOptionalStringArray(value.buildInputs, \"buildInputs\", issues);\n validateCompiledBlockMap(value.blocks, \"blocks\", issues);\n validateCompiledBlockMap(value.recipes, \"recipes\", issues);\n validateCompiledTokens(value.tokens, issues);\n validateSerializedGraph(value.graph, issues);\n validatePerformanceSummary(value.performanceSummary, issues);\n if (issues.length > 0) throw new CompiledFragmentsFileValidationError(source, issues);\n return value as unknown as CompiledFragmentsFile;\n}\n\nfunction validateCompiledFragment(key: string, value: unknown, issues: string[]): void {\n const path = `fragments.${key}`;\n if (!isRecord(value)) {\n issues.push(`${path} must be an object`);\n return;\n }\n validateString(value.filePath, `${path}.filePath`, issues);\n validateFragmentMeta(value.meta, `${path}.meta`, issues);\n validateFragmentUsage(value.usage, `${path}.usage`, issues);\n if (value.guidance !== undefined) {\n validateFragmentUsage(value.guidance, `${path}.guidance`, issues);\n }\n validateFragmentProps(value.props, `${path}.props`, issues);\n validateFragmentVariants(value.variants, `${path}.variants`, issues);\n validateOptionalRecordArray(value.governance, `${path}.governance`, issues);\n validateRelations(value.relations, `${path}.relations`, issues);\n validateFragmentPreview(value.preview, `${path}.preview`, issues);\n validateFragmentMatrix(value.matrix, `${path}.matrix`, issues);\n validateFragmentDesign(value.design, `${path}.design`, issues);\n validateOptionalStringArray(value.tokens, `${path}.tokens`, issues);\n validateOptionalRecord(value.ai, `${path}.ai`, issues);\n validateOptionalString(value.framework, `${path}.framework`, issues);\n validateOptionalStringArray(value.propsSummary, `${path}.propsSummary`, issues);\n validateOptionalString(value.sourcePath, `${path}.sourcePath`, issues);\n validateOptionalString(value.exportName, `${path}.exportName`, issues);\n validateFragmentProvenance(value.provenance, `${path}.provenance`, issues);\n validateFragmentGenerated(value._generated, `${path}._generated`, issues);\n validateObservedUsages(value.usages, `${path}.usages`, issues);\n validatePerformanceData(value.performance, `${path}.performance`, issues);\n}\n\nfunction validateFragmentMeta(value: unknown, path: string, issues: string[]): void {\n if (!isRecord(value)) {\n issues.push(`${path} must be an object`);\n return;\n }\n validateString(value.name, `${path}.name`, issues);\n validateString(value.description, `${path}.description`, issues);\n validateString(value.category, `${path}.category`, issues);\n validateOptionalStringArray(value.aliases, `${path}.aliases`, issues);\n validateOptionalStringArray(value.tags, `${path}.tags`, issues);\n if (\n value.status !== undefined &&\n ![\"stable\", \"beta\", \"deprecated\", \"experimental\"].includes(String(value.status))\n ) {\n issues.push(`${path}.status must be stable, beta, deprecated, or experimental`);\n }\n validateOptionalString(value.since, `${path}.since`, issues);\n validateOptionalString(value.figma, `${path}.figma`, issues);\n validateOptionalRecord(value.figmaProps, `${path}.figmaProps`, issues);\n if (value.dependencies !== undefined) {\n if (!Array.isArray(value.dependencies)) {\n issues.push(`${path}.dependencies must be an array`);\n } else {\n value.dependencies.forEach((dependency, index) => {\n const dependencyPath = `${path}.dependencies.${index}`;\n if (!isRecord(dependency)) {\n issues.push(`${dependencyPath} must be an object`);\n return;\n }\n validateString(dependency.name, `${dependencyPath}.name`, issues);\n validateString(dependency.version, `${dependencyPath}.version`, issues);\n validateOptionalString(dependency.reason, `${dependencyPath}.reason`, issues);\n });\n }\n }\n}\n\nfunction validateFragmentUsage(value: unknown, path: string, issues: string[]): void {\n if (!isRecord(value)) {\n issues.push(`${path} must be an object`);\n return;\n }\n validateStringArray(value.when, `${path}.when`, issues);\n validateStringArray(value.whenNot, `${path}.whenNot`, issues);\n validateOptionalStringArray(value.guidelines, `${path}.guidelines`, issues);\n validateOptionalStringArray(value.accessibility, `${path}.accessibility`, issues);\n if (value.choose !== undefined) {\n validateStringRecord(value.choose, `${path}.choose`, issues);\n }\n if (value.dont !== undefined) {\n if (!Array.isArray(value.dont)) {\n issues.push(`${path}.dont must be an array`);\n } else {\n value.dont.forEach((entry, index) => {\n const entryPath = `${path}.dont.${index}`;\n if (!isRecord(entry)) {\n issues.push(`${entryPath} must be an object`);\n return;\n }\n validateString(entry.reason, `${entryPath}.reason`, issues);\n validateString(entry.bad, `${entryPath}.bad`, issues);\n validateString(entry.good, `${entryPath}.good`, issues);\n });\n }\n }\n}\n\nfunction validateFragmentProps(value: unknown, path: string, issues: string[]): void {\n if (!isRecord(value)) {\n issues.push(`${path} must be an object`);\n return;\n }\n for (const [name, prop] of sortedEntries(value)) {\n const propPath = `${path}.${name}`;\n if (!isRecord(prop)) {\n issues.push(`${propPath} must be an object`);\n continue;\n }\n validateString(prop.type, `${propPath}.type`, issues);\n validateString(prop.description, `${propPath}.description`, issues);\n validateOptionalStringArray(prop.values, `${propPath}.values`, issues);\n validateOptionalBoolean(prop.required, `${propPath}.required`, issues);\n validateOptionalStringArray(prop.constraints, `${propPath}.constraints`, issues);\n validateOptionalRecord(prop.typeDetails, `${propPath}.typeDetails`, issues);\n validateOptionalString(prop.controlType, `${propPath}.controlType`, issues);\n validateOptionalRecord(prop.controlOptions, `${propPath}.controlOptions`, issues);\n if (\n prop.visibility !== undefined &&\n prop.visibility !== \"public\" &&\n prop.visibility !== \"internal\" &&\n prop.visibility !== \"hidden\"\n ) {\n issues.push(`${propPath}.visibility must be public, internal, or hidden`);\n }\n }\n}\n\nfunction validateFragmentVariants(value: unknown, path: string, issues: string[]): void {\n if (!Array.isArray(value)) {\n issues.push(`${path} must be an array`);\n return;\n }\n const names = new Set<string>();\n value.forEach((variant, index) => {\n const variantPath = `${path}.${index}`;\n if (!isRecord(variant)) {\n issues.push(`${variantPath} must be an object`);\n return;\n }\n validateString(variant.name, `${variantPath}.name`, issues);\n validateString(variant.description, `${variantPath}.description`, issues);\n validateOptionalString(variant.code, `${variantPath}.code`, issues);\n validateOptionalString(variant.figma, `${variantPath}.figma`, issues);\n validateOptionalBoolean(variant.canonical, `${variantPath}.canonical`, issues);\n validateOptionalRecord(variant.args, `${variantPath}.args`, issues);\n if (typeof variant.name === \"string\") {\n if (names.has(variant.name)) {\n issues.push(\n `${variantPath}.name duplicates an earlier variant (${JSON.stringify(variant.name)})`\n );\n }\n names.add(variant.name);\n }\n });\n}\n\nfunction validateRelations(value: unknown, path: string, issues: string[]): void {\n if (value === undefined) return;\n if (!Array.isArray(value)) {\n issues.push(`${path} must be an array`);\n return;\n }\n value.forEach((relation, index) => {\n const relationPath = `${path}.${index}`;\n if (!isRecord(relation)) {\n issues.push(`${relationPath} must be an object`);\n return;\n }\n validateString(relation.component, `${relationPath}.component`, issues);\n validateString(relation.relationship, `${relationPath}.relationship`, issues);\n validateString(relation.note, `${relationPath}.note`, issues);\n });\n}\n\nfunction validateFragmentPreview(value: unknown, path: string, issues: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n issues.push(`${path} must be an object`);\n return;\n }\n validateOptionalString(value.setupModule, `${path}.setupModule`, issues);\n validateOptionalString(value.wrapperModule, `${path}.wrapperModule`, issues);\n validateOptionalString(value.wrapperExport, `${path}.wrapperExport`, issues);\n validateOptionalStringArray(value.css, `${path}.css`, issues);\n validateOptionalStringArray(value.dynamicRegions, `${path}.dynamicRegions`, issues);\n if (value.providers !== undefined && !Array.isArray(value.providers)) {\n issues.push(`${path}.providers must be an array`);\n }\n if (value.theme !== undefined && value.theme !== \"light\" && value.theme !== \"dark\") {\n issues.push(`${path}.theme must be light or dark`);\n }\n}\n\nfunction validateFragmentMatrix(value: unknown, path: string, issues: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n issues.push(`${path} must be an object`);\n return;\n }\n if (value.axes !== undefined) {\n if (!isRecord(value.axes)) {\n issues.push(`${path}.axes must be an object`);\n } else {\n for (const [axis, values] of sortedEntries(value.axes)) {\n if (values !== \"auto\" && !isStringArray(values)) {\n issues.push(`${path}.axes.${axis} must be auto or an array of strings`);\n }\n }\n }\n }\n validateOptionalStringArray(value.forced, `${path}.forced`, issues);\n validateOptionalRecord(value.worstCase, `${path}.worstCase`, issues);\n}\n\nfunction validateFragmentDesign(value: unknown, path: string, issues: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n issues.push(`${path} must be an object`);\n return;\n }\n validateOptionalString(value.figmaNode, `${path}.figmaNode`, issues);\n}\n\nfunction validateFragmentProvenance(value: unknown, path: string, issues: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n issues.push(`${path} must be an object`);\n return;\n }\n validateString(value.source, `${path}.source`, issues);\n validateBoolean(value.verified, `${path}.verified`, issues);\n validateOptionalString(value.frameworkSupport, `${path}.frameworkSupport`, issues);\n validateOptionalString(value.sourceHash, `${path}.sourceHash`, issues);\n validateOptionalString(value.extractedAt, `${path}.extractedAt`, issues);\n}\n\nfunction validateFragmentGenerated(value: unknown, path: string, issues: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n issues.push(`${path} must be an object`);\n return;\n }\n const sources = [\"storybook\", \"manual\", \"ai\", \"scan\", \"extracted\", \"merged\", \"migrated\"];\n if (typeof value.source !== \"string\" || !sources.includes(value.source)) {\n issues.push(`${path}.source must be a supported provenance source`);\n }\n validateOptionalString(value.sourceFile, `${path}.sourceFile`, issues);\n validateOptionalNumber(value.confidence, `${path}.confidence`, issues);\n validateOptionalBoolean(value.verified, `${path}.verified`, issues);\n validateOptionalString(value.timestamp, `${path}.timestamp`, issues);\n}\n\nfunction validateObservedUsages(value: unknown, path: string, issues: string[]): void {\n if (value === undefined) return;\n if (!Array.isArray(value)) {\n issues.push(`${path} must be an array`);\n return;\n }\n value.forEach((usage, index) => {\n const usagePath = `${path}.${index}`;\n if (!isRecord(usage)) {\n issues.push(`${usagePath} must be an object`);\n return;\n }\n validateString(usage.file, `${usagePath}.file`, issues);\n validateNumber(usage.line, `${usagePath}.line`, issues);\n validateNumber(usage.column, `${usagePath}.column`, issues);\n validateOptionalString(usage.parentElement, `${usagePath}.parentElement`, issues);\n validateOptionalBoolean(usage.conditional, `${usagePath}.conditional`, issues);\n if (!Array.isArray(usage.props)) {\n issues.push(`${usagePath}.props must be an array`);\n return;\n }\n usage.props.forEach((prop, propIndex) => {\n const propPath = `${usagePath}.props.${propIndex}`;\n if (!isRecord(prop)) {\n issues.push(`${propPath} must be an object`);\n return;\n }\n validateString(prop.name, `${propPath}.name`, issues);\n if (\n typeof prop.kind !== \"string\" ||\n ![\"static\", \"dynamic\", \"spread\", \"jsx\", \"boolean\", \"null\"].includes(prop.kind)\n ) {\n issues.push(`${propPath}.kind must be a supported observation kind`);\n }\n if (\n prop.value !== undefined &&\n prop.value !== null &&\n typeof prop.value !== \"string\" &&\n typeof prop.value !== \"number\" &&\n typeof prop.value !== \"boolean\"\n ) {\n issues.push(`${propPath}.value must be a JSON scalar`);\n }\n });\n });\n}\n\nfunction validatePerformanceData(value: unknown, path: string, issues: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n issues.push(`${path} must be an object`);\n return;\n }\n validateNumber(value.bundleSize, `${path}.bundleSize`, issues);\n validateNumber(value.rawSize, `${path}.rawSize`, issues);\n validateString(value.complexity, `${path}.complexity`, issues);\n validateNumber(value.budgetPercent, `${path}.budgetPercent`, issues);\n validateBoolean(value.overBudget, `${path}.overBudget`, issues);\n validateString(value.measuredAt, `${path}.measuredAt`, issues);\n if (value.imports !== undefined) {\n if (!Array.isArray(value.imports)) {\n issues.push(`${path}.imports must be an array`);\n } else {\n value.imports.forEach((entry, index) => {\n const entryPath = `${path}.imports.${index}`;\n if (!isRecord(entry)) {\n issues.push(`${entryPath} must be an object`);\n return;\n }\n validateString(entry.path, `${entryPath}.path`, issues);\n validateNumber(entry.bytes, `${entryPath}.bytes`, issues);\n validateNumber(entry.percent, `${entryPath}.percent`, issues);\n });\n }\n }\n}\n\nfunction validateCompiledBlockMap(value: unknown, path: string, issues: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n issues.push(`${path} must be an object`);\n return;\n }\n const names = new Set<string>();\n for (const [key, block] of sortedEntries(value)) {\n const blockPath = `${path}.${key}`;\n if (!isRecord(block)) {\n issues.push(`${blockPath} must be an object`);\n continue;\n }\n validateString(block.filePath, `${blockPath}.filePath`, issues);\n validateString(block.name, `${blockPath}.name`, issues);\n validateString(block.description, `${blockPath}.description`, issues);\n validateString(block.category, `${blockPath}.category`, issues);\n validateStringArray(block.components, `${blockPath}.components`, issues);\n validateString(block.code, `${blockPath}.code`, issues);\n validateOptionalStringArray(block.tags, `${blockPath}.tags`, issues);\n if (typeof block.name === \"string\") {\n if (names.has(block.name)) {\n issues.push(\n `${blockPath}.name duplicates an earlier block (${JSON.stringify(block.name)})`\n );\n }\n names.add(block.name);\n }\n }\n}\n\nfunction validateCompiledTokens(value: unknown, issues: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n issues.push(\"tokens must be an object\");\n return;\n }\n validateString(value.prefix, \"tokens.prefix\", issues);\n validateNumber(value.total, \"tokens.total\", issues);\n if (!isRecord(value.categories)) {\n issues.push(\"tokens.categories must be an object\");\n return;\n }\n for (const [category, entries] of sortedEntries(value.categories)) {\n const categoryPath = `tokens.categories.${category}`;\n if (!Array.isArray(entries)) {\n issues.push(`${categoryPath} must be an array`);\n continue;\n }\n entries.forEach((entry, index) => {\n const entryPath = `${categoryPath}.${index}`;\n if (!isRecord(entry)) {\n issues.push(`${entryPath} must be an object`);\n return;\n }\n validateString(entry.name, `${entryPath}.name`, issues);\n validateOptionalString(entry.value, `${entryPath}.value`, issues);\n validateOptionalString(entry.description, `${entryPath}.description`, issues);\n });\n }\n}\n\nfunction validateSerializedGraph(value: unknown, issues: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n issues.push(\"graph must be an object\");\n return;\n }\n if (!Array.isArray(value.nodes)) {\n issues.push(\"graph.nodes must be an array\");\n } else {\n const nodeNames = new Set<string>();\n value.nodes.forEach((node, index) => {\n const nodePath = `graph.nodes.${index}`;\n if (!isRecord(node)) {\n issues.push(`${nodePath} must be an object`);\n return;\n }\n validateString(node.name, `${nodePath}.name`, issues);\n validateString(node.category, `${nodePath}.category`, issues);\n validateString(node.status, `${nodePath}.status`, issues);\n validateOptionalStringArray(node.subComponents, `${nodePath}.subComponents`, issues);\n if (typeof node.name === \"string\") {\n if (nodeNames.has(node.name)) {\n issues.push(\n `${nodePath}.name duplicates an earlier graph node (${JSON.stringify(node.name)})`\n );\n }\n nodeNames.add(node.name);\n }\n });\n }\n if (!Array.isArray(value.edges)) {\n issues.push(\"graph.edges must be an array\");\n } else {\n value.edges.forEach((edge, index) => {\n const edgePath = `graph.edges.${index}`;\n if (!isRecord(edge)) {\n issues.push(`${edgePath} must be an object`);\n return;\n }\n validateString(edge.s, `${edgePath}.s`, issues);\n validateString(edge.t, `${edgePath}.t`, issues);\n validateString(edge.ty, `${edgePath}.ty`, issues);\n validateNumber(edge.w, `${edgePath}.w`, issues);\n validateOptionalString(edge.no, `${edgePath}.no`, issues);\n validateString(edge.p, `${edgePath}.p`, issues);\n });\n }\n if (!isRecord(value.health)) {\n issues.push(\"graph.health must be an object\");\n return;\n }\n validateStringArray(value.health.orphans, \"graph.health.orphans\", issues);\n validateNumber(value.health.compositionCoverage, \"graph.health.compositionCoverage\", issues);\n validateNumber(value.health.averageDegree, \"graph.health.averageDegree\", issues);\n validateNumber(value.health.nodeCount, \"graph.health.nodeCount\", issues);\n validateNumber(value.health.edgeCount, \"graph.health.edgeCount\", issues);\n if (!Array.isArray(value.health.connectedComponents)) {\n issues.push(\"graph.health.connectedComponents must be an array\");\n } else {\n value.health.connectedComponents.forEach((component, index) =>\n validateStringArray(component, `graph.health.connectedComponents.${index}`, issues)\n );\n }\n if (!Array.isArray(value.health.hubs)) {\n issues.push(\"graph.health.hubs must be an array\");\n } else {\n value.health.hubs.forEach((hub, index) => {\n const hubPath = `graph.health.hubs.${index}`;\n if (!isRecord(hub)) {\n issues.push(`${hubPath} must be an object`);\n return;\n }\n validateString(hub.name, `${hubPath}.name`, issues);\n validateNumber(hub.degree, `${hubPath}.degree`, issues);\n });\n }\n}\n\nfunction validatePerformanceSummary(value: unknown, issues: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n issues.push(\"performanceSummary must be an object\");\n return;\n }\n validateString(value.preset, \"performanceSummary.preset\", issues);\n validateNumber(value.budget, \"performanceSummary.budget\", issues);\n validateNumber(value.total, \"performanceSummary.total\", issues);\n validateNumber(value.overBudget, \"performanceSummary.overBudget\", issues);\n if (!isRecord(value.tiers)) {\n issues.push(\"performanceSummary.tiers must be an object\");\n } else {\n for (const [tier, count] of sortedEntries(value.tiers)) {\n validateNumber(count, `performanceSummary.tiers.${tier}`, issues);\n }\n }\n}\n\nfunction validateString(value: unknown, path: string, issues: string[]): void {\n if (typeof value !== \"string\") issues.push(`${path} must be a string`);\n}\n\nfunction validateOptionalString(value: unknown, path: string, issues: string[]): void {\n if (value !== undefined) validateString(value, path, issues);\n}\n\nfunction validateNumber(value: unknown, path: string, issues: string[]): void {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n issues.push(`${path} must be a finite number`);\n }\n}\n\nfunction validateOptionalNumber(value: unknown, path: string, issues: string[]): void {\n if (value !== undefined) validateNumber(value, path, issues);\n}\n\nfunction validateBoolean(value: unknown, path: string, issues: string[]): void {\n if (typeof value !== \"boolean\") issues.push(`${path} must be a boolean`);\n}\n\nfunction validateOptionalBoolean(value: unknown, path: string, issues: string[]): void {\n if (value !== undefined) validateBoolean(value, path, issues);\n}\n\nfunction validateStringArray(value: unknown, path: string, issues: string[]): void {\n if (!isStringArray(value)) issues.push(`${path} must be an array of strings`);\n}\n\nfunction validateOptionalStringArray(value: unknown, path: string, issues: string[]): void {\n if (value !== undefined) validateStringArray(value, path, issues);\n}\n\nfunction validateStringRecord(value: unknown, path: string, issues: string[]): void {\n if (!isRecord(value)) {\n issues.push(`${path} must be an object of strings`);\n return;\n }\n for (const [key, entry] of sortedEntries(value)) {\n validateString(entry, `${path}.${key}`, issues);\n }\n}\n\nfunction validateOptionalRecord(value: unknown, path: string, issues: string[]): void {\n if (value !== undefined && !isRecord(value)) issues.push(`${path} must be an object`);\n}\n\nfunction validateOptionalRecordArray(value: unknown, path: string, issues: string[]): void {\n if (value === undefined) return;\n if (!Array.isArray(value) || value.some((entry) => !isRecord(entry))) {\n issues.push(`${path} must be an array of objects`);\n }\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every((entry) => typeof entry === \"string\");\n}\n\nfunction sortedEntries(value: Record<string, unknown>): Array<[string, unknown]> {\n return Object.entries(value).sort(([left], [right]) => compareStrings(left, right));\n}\n\nfunction compareStrings(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * Theme identifier\n */\nexport type Theme = \"light\" | \"dark\";\n\n/**\n * Verification result\n */\nexport interface VerifyResult {\n verdict: \"pass\" | \"fail\" | \"error\";\n matches: boolean;\n diffPercentage: number;\n screenshot: string;\n baseline: string;\n diffImage?: string;\n notes: string[];\n error?: string;\n timing: {\n renderMs: number;\n captureMs: number;\n diffMs: number;\n totalMs: number;\n };\n}\n"],"mappings":"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","names":[]}
@@ -1,5 +1,5 @@
1
1
  import { Severity } from '../severity.js';
2
- import { n as Violation, F as Finding } from '../index-_sxhUNqx.js';
2
+ import { n as Violation, F as Finding } from '../index-C8bcXVav.js';
3
3
  import 'zod';
4
4
 
5
5
  declare const EXPLAIN_URL_BASE = "https://usefragments.com/errors/";
@@ -17,7 +17,7 @@ interface FuiCode {
17
17
  fixAvailable: boolean;
18
18
  evidenceRequired: boolean;
19
19
  }
20
- declare const CODES: readonly [FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode];
20
+ declare const CODES: readonly [FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode];
21
21
  declare const byCode: ReadonlyMap<string, FuiCode>;
22
22
  declare const byRuleId: ReadonlyMap<string, FuiCode>;
23
23
  declare function explainUrlForCode(code: string): string;
@@ -6,9 +6,10 @@ import {
6
6
  byCode,
7
7
  byRuleId,
8
8
  explainUrlForCode
9
- } from "../chunk-XN3LSDPY.js";
10
- import "../chunk-JNBFJ34I.js";
9
+ } from "../chunk-BMPYIUZE.js";
11
10
  import "../chunk-EIYNNS77.js";
11
+ import "../chunk-PWIJMOI4.js";
12
+ import "../chunk-JNBFJ34I.js";
12
13
  import "../chunk-V4VQB57N.js";
13
14
  export {
14
15
  CODES,
@@ -1,5 +1,330 @@
1
- import '../types-xJ2xyp_G.js';
2
- export { b2 as AIMetadata, C as CompiledBlock, c as CompiledFragment, E as CompiledFragmentsFile, H as CompiledFragmentsFileValidationError, J as CompiledTokenData, K as CompiledTokenEntry, b3 as ComponentRelation, b4 as FragmentContract, b5 as FragmentGenerated, b6 as FragmentMeta, b7 as FragmentUsage, b8 as ImportEntry, aj as ObservedComponentUsage, ak as ObservedUsageProp, b9 as PerformanceData, ba as PerformanceSummary, bb as PropDefinition, bc as Theme, bd as VerifyResult, a_ as parseCompiledFragmentsFile } from '../governance-CLk_wkP9.js';
1
+ import { S as SerializedComponentGraph } from '../types-xJ2xyp_G.js';
2
+ import { C as ComponentGovernanceRecord } from '../governance-hOPXGbbs.js';
3
3
  import 'zod';
4
4
  import 'react';
5
5
  import '../topology/index.js';
6
+
7
+ /**
8
+ * Component metadata
9
+ */
10
+ interface FragmentMeta {
11
+ name: string;
12
+ description: string;
13
+ category: string;
14
+ aliases?: string[];
15
+ tags?: string[];
16
+ status?: "stable" | "beta" | "deprecated" | "experimental";
17
+ since?: string;
18
+ dependencies?: Array<{
19
+ name: string;
20
+ version: string;
21
+ reason?: string;
22
+ }>;
23
+ figma?: string;
24
+ figmaProps?: Record<string, unknown>;
25
+ }
26
+ /**
27
+ * Usage guidelines for AI agents and developers
28
+ */
29
+ interface FragmentUsage {
30
+ when: string[];
31
+ whenNot: string[];
32
+ choose?: Record<string, string>;
33
+ /** Serialized v3 anti-pattern guidance; `good` is checked JSX source. */
34
+ dont?: Array<{
35
+ reason: string;
36
+ bad: string;
37
+ good: string;
38
+ }>;
39
+ guidelines?: string[];
40
+ accessibility?: string[];
41
+ }
42
+ /** Static state-space hints carried from a v3 fragment definition. */
43
+ interface CompiledFragmentMatrix {
44
+ axes?: Record<string, "auto" | readonly string[]>;
45
+ forced?: string[];
46
+ worstCase?: Record<string, unknown>;
47
+ }
48
+ /** Optional design-tool reference carried from a v3 fragment definition. */
49
+ interface CompiledFragmentDesign {
50
+ figmaNode?: string;
51
+ }
52
+ /**
53
+ * Definition for a single prop
54
+ */
55
+ interface PropDefinition {
56
+ type: string;
57
+ values?: readonly string[];
58
+ default?: unknown;
59
+ description: string;
60
+ required?: boolean;
61
+ constraints?: string[];
62
+ typeDetails?: Record<string, unknown>;
63
+ controlType?: string;
64
+ controlOptions?: {
65
+ min?: number;
66
+ max?: number;
67
+ step?: number;
68
+ presetColors?: string[];
69
+ };
70
+ /** Visibility annotation carried from a v3 fragment definition. */
71
+ visibility?: "public" | "internal" | "hidden";
72
+ }
73
+ /**
74
+ * Relationship to another component
75
+ */
76
+ interface ComponentRelation {
77
+ component: string;
78
+ relationship: string;
79
+ note: string;
80
+ }
81
+ /**
82
+ * Agent-optimized contract metadata
83
+ */
84
+ interface FragmentContract {
85
+ propsSummary?: string[];
86
+ a11yRules?: string[];
87
+ bans?: Array<{
88
+ pattern: string;
89
+ message: string;
90
+ }>;
91
+ scenarioTags?: string[];
92
+ /** Per-component performance budget override in bytes (gzipped) */
93
+ performanceBudget?: number;
94
+ /** Sub-component slot metadata for compound components */
95
+ compoundChildren?: Record<string, {
96
+ required?: boolean;
97
+ accepts?: string[];
98
+ description?: string;
99
+ }>;
100
+ /** Canonical JSX usage examples showing how to assemble the component */
101
+ canonicalUsage?: string[];
102
+ }
103
+ /**
104
+ * Per-component preview configuration carried from either contract input.
105
+ * JSON contracts use module/css hints; v3 definitions use provider and
106
+ * visual-diff-region hints. Both are projections of the same compiled object.
107
+ */
108
+ interface CompiledFragmentPreview {
109
+ setupModule?: string;
110
+ wrapperModule?: string;
111
+ wrapperExport?: string;
112
+ css?: string[];
113
+ theme?: "light" | "dark";
114
+ providers?: unknown[];
115
+ dynamicRegions?: string[];
116
+ }
117
+ /**
118
+ * Provenance tracking for generated fragments
119
+ */
120
+ interface FragmentGenerated {
121
+ source: "storybook" | "manual" | "ai" | "scan" | "extracted" | "merged" | "migrated";
122
+ sourceFile?: string;
123
+ /** @deprecated Use provenance.verified instead */
124
+ confidence?: number;
125
+ verified?: boolean;
126
+ timestamp?: string;
127
+ }
128
+ /**
129
+ * AI-specific metadata
130
+ */
131
+ interface AIMetadata {
132
+ compositionPattern?: "compound" | "simple" | "controlled" | "wrapper";
133
+ subComponents?: string[];
134
+ requiredChildren?: string[];
135
+ commonPatterns?: string[];
136
+ }
137
+ /**
138
+ * Performance data for a component (from bundle size measurement)
139
+ */
140
+ /**
141
+ * A single import contributing to bundle size
142
+ */
143
+ interface ImportEntry {
144
+ /** Resolved file path (relative to project root) */
145
+ path: string;
146
+ /** Bytes contributed to the bundle */
147
+ bytes: number;
148
+ /** Percentage of total bundle size */
149
+ percent: number;
150
+ }
151
+ interface PerformanceData {
152
+ /** Gzipped bundle size in bytes */
153
+ bundleSize: number;
154
+ /** Raw (minified, not gzipped) bundle size in bytes */
155
+ rawSize: number;
156
+ /** Complexity classification */
157
+ complexity: "lightweight" | "moderate" | "heavy";
158
+ /** Percentage of budget used (0-100+) */
159
+ budgetPercent: number;
160
+ /** Whether the component exceeds its budget */
161
+ overBudget: boolean;
162
+ /** ISO timestamp when measured */
163
+ measuredAt: string;
164
+ /** Top imports by size (largest first) */
165
+ imports?: ImportEntry[];
166
+ }
167
+ interface ObservedUsageProp {
168
+ name: string;
169
+ kind: "static" | "dynamic" | "spread" | "jsx" | "boolean" | "null";
170
+ value?: string | number | boolean | null;
171
+ }
172
+ interface ObservedComponentUsage {
173
+ /** Source file path relative to the fragments config root */
174
+ file: string;
175
+ /** 1-indexed source line */
176
+ line: number;
177
+ /** 0-indexed source column */
178
+ column: number;
179
+ props: ObservedUsageProp[];
180
+ parentElement?: string;
181
+ conditional?: boolean;
182
+ }
183
+ /**
184
+ * Compiled fragment data (JSON-serializable for AI consumption)
185
+ */
186
+ interface CompiledFragment {
187
+ filePath: string;
188
+ meta: FragmentMeta;
189
+ /** Canonical v2 guidance. `usage` is retained for compatibility. */
190
+ guidance?: FragmentUsage;
191
+ usage: FragmentUsage;
192
+ props: Record<string, PropDefinition>;
193
+ /** Normalized component governance records emitted from *.fragment.ts. */
194
+ governance?: ComponentGovernanceRecord[];
195
+ relations?: ComponentRelation[];
196
+ variants: Array<{
197
+ name: string;
198
+ description: string;
199
+ code?: string;
200
+ figma?: string;
201
+ canonical?: boolean;
202
+ args?: Record<string, unknown>;
203
+ }>;
204
+ contract?: FragmentContract;
205
+ /** Per-component preview/runtime hints from the authored contract. */
206
+ preview?: CompiledFragmentPreview;
207
+ /** Authored state-space hints for the Workshop matrix. */
208
+ matrix?: CompiledFragmentMatrix;
209
+ /** Optional design-tool comparison reference. */
210
+ design?: CompiledFragmentDesign;
211
+ /** Design-token references used by this component. */
212
+ tokens?: string[];
213
+ ai?: AIMetadata;
214
+ /** Framework hint from contract, used by preview adapters and Cloud */
215
+ framework?: string;
216
+ /** Top-level compact prop summaries for agent first-pass */
217
+ propsSummary?: string[];
218
+ /** Source file path relative to config root (for contract-sourced fragments) */
219
+ sourcePath?: string;
220
+ /** Named export for preview adapter resolution */
221
+ exportName?: string;
222
+ /** Clean provenance tracking (V2) */
223
+ provenance?: {
224
+ source: string;
225
+ verified: boolean;
226
+ frameworkSupport?: string;
227
+ sourceHash?: string;
228
+ extractedAt?: string;
229
+ };
230
+ /** Component performance data from bundle size measurement */
231
+ performance?: PerformanceData;
232
+ /** Observed JSX call sites captured during `fragments scan` */
233
+ usages?: ObservedComponentUsage[];
234
+ _generated?: FragmentGenerated;
235
+ }
236
+ /**
237
+ * Compiled block data (JSON-serializable for AI consumption)
238
+ */
239
+ interface CompiledBlock {
240
+ filePath: string;
241
+ name: string;
242
+ description: string;
243
+ category: string;
244
+ components: string[];
245
+ code: string;
246
+ tags?: string[];
247
+ }
248
+ /**
249
+ * A single token entry in the compiled output
250
+ */
251
+ interface CompiledTokenEntry {
252
+ name: string;
253
+ value?: string;
254
+ description?: string;
255
+ }
256
+ /**
257
+ * Compiled token data stored in fragments.json
258
+ */
259
+ interface CompiledTokenData {
260
+ prefix: string;
261
+ total: number;
262
+ categories: Record<string, CompiledTokenEntry[]>;
263
+ }
264
+ /**
265
+ * Performance summary across all components
266
+ */
267
+ interface PerformanceSummary {
268
+ /** Preset name used */
269
+ preset: string;
270
+ /** Budget applied in bytes */
271
+ budget: number;
272
+ /** Total components measured */
273
+ total: number;
274
+ /** Number of components over budget */
275
+ overBudget: number;
276
+ /** Distribution by tier */
277
+ tiers: Record<string, number>;
278
+ }
279
+ /**
280
+ * The compiled fragments.json structure
281
+ */
282
+ interface CompiledFragmentsFile {
283
+ version: string;
284
+ generatedAt: string;
285
+ /** CLI version that produced this file, used for freshness checks */
286
+ generatorVersion?: string;
287
+ /** Relative source/config inputs used to build this file, used for freshness checks */
288
+ buildInputs?: string[];
289
+ packageName?: string;
290
+ fragments: Record<string, CompiledFragment>;
291
+ blocks?: Record<string, CompiledBlock>;
292
+ tokens?: CompiledTokenData;
293
+ /** Component relationship graph for AI structural queries */
294
+ graph?: SerializedComponentGraph;
295
+ /** Performance measurement summary */
296
+ performanceSummary?: PerformanceSummary;
297
+ /** @deprecated Use blocks instead */
298
+ recipes?: Record<string, CompiledBlock>;
299
+ }
300
+ declare class CompiledFragmentsFileValidationError extends Error {
301
+ readonly source: string;
302
+ readonly issues: string[];
303
+ constructor(source: string, issues: readonly string[]);
304
+ }
305
+ declare function parseCompiledFragmentsFile(input: string | unknown, source?: string): CompiledFragmentsFile;
306
+ /**
307
+ * Theme identifier
308
+ */
309
+ type Theme = "light" | "dark";
310
+ /**
311
+ * Verification result
312
+ */
313
+ interface VerifyResult {
314
+ verdict: "pass" | "fail" | "error";
315
+ matches: boolean;
316
+ diffPercentage: number;
317
+ screenshot: string;
318
+ baseline: string;
319
+ diffImage?: string;
320
+ notes: string[];
321
+ error?: string;
322
+ timing: {
323
+ renderMs: number;
324
+ captureMs: number;
325
+ diffMs: number;
326
+ totalMs: number;
327
+ };
328
+ }
329
+
330
+ export { type AIMetadata, type CompiledBlock, type CompiledFragment, type CompiledFragmentDesign, type CompiledFragmentMatrix, type CompiledFragmentPreview, type CompiledFragmentsFile, CompiledFragmentsFileValidationError, type CompiledTokenData, type CompiledTokenEntry, type ComponentRelation, type FragmentContract, type FragmentGenerated, type FragmentMeta, type FragmentUsage, type ImportEntry, type ObservedComponentUsage, type ObservedUsageProp, type PerformanceData, type PerformanceSummary, type PropDefinition, type Theme, type VerifyResult, parseCompiledFragmentsFile };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CompiledFragmentsFileValidationError,
3
3
  parseCompiledFragmentsFile
4
- } from "../chunk-RANPUC6C.js";
4
+ } from "../chunk-RYFULE43.js";
5
5
  export {
6
6
  CompiledFragmentsFileValidationError,
7
7
  parseCompiledFragmentsFile
@@ -1,8 +1,9 @@
1
- import { c as CompiledFragment, C as CompiledBlock } from '../governance-CLk_wkP9.js';
1
+ import { CompiledFragment, CompiledBlock } from '../compiled-types/index.js';
2
+ import '../types-xJ2xyp_G.js';
3
+ import '../governance-hOPXGbbs.js';
2
4
  import 'zod';
3
5
  import 'react';
4
6
  import '../topology/index.js';
5
- import '../types-xJ2xyp_G.js';
6
7
 
7
8
  /**
8
9
  * Context generation for AI agents.