@usefragments/core 1.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 (228) hide show
  1. package/LICENSE +21 -0
  2. package/dist/chunk-243QYRUF.js +2145 -0
  3. package/dist/chunk-243QYRUF.js.map +1 -0
  4. package/dist/chunk-3LLRNCPX.js +111 -0
  5. package/dist/chunk-3LLRNCPX.js.map +1 -0
  6. package/dist/chunk-EIYNNS77.js +48 -0
  7. package/dist/chunk-EIYNNS77.js.map +1 -0
  8. package/dist/chunk-JNBFJ34I.js +326 -0
  9. package/dist/chunk-JNBFJ34I.js.map +1 -0
  10. package/dist/chunk-R3X7UBHU.js +228 -0
  11. package/dist/chunk-R3X7UBHU.js.map +1 -0
  12. package/dist/chunk-SH4KPIYH.js +393 -0
  13. package/dist/chunk-SH4KPIYH.js.map +1 -0
  14. package/dist/chunk-V4VQB57N.js +56 -0
  15. package/dist/chunk-V4VQB57N.js.map +1 -0
  16. package/dist/chunk-X34IA4LR.js +319 -0
  17. package/dist/chunk-X34IA4LR.js.map +1 -0
  18. package/dist/chunk-YF65VYRY.js +493 -0
  19. package/dist/chunk-YF65VYRY.js.map +1 -0
  20. package/dist/codes/index.d.ts +40 -0
  21. package/dist/codes/index.js +23 -0
  22. package/dist/codes/index.js.map +1 -0
  23. package/dist/compiled-types/index.d.ts +5 -0
  24. package/dist/compiled-types/index.js +1 -0
  25. package/dist/compiled-types/index.js.map +1 -0
  26. package/dist/generate/index.d.ts +47 -0
  27. package/dist/generate/index.js +11 -0
  28. package/dist/generate/index.js.map +1 -0
  29. package/dist/governance-BOa3KyiJ.d.ts +3279 -0
  30. package/dist/graph/index.d.ts +66 -0
  31. package/dist/graph/index.js +17 -0
  32. package/dist/graph/index.js.map +1 -0
  33. package/dist/index.d.ts +11388 -0
  34. package/dist/index.js +8711 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/package-identity.d.ts +42 -0
  37. package/dist/package-identity.js +23 -0
  38. package/dist/package-identity.js.map +1 -0
  39. package/dist/preview/index.d.ts +484 -0
  40. package/dist/preview/index.js +1129 -0
  41. package/dist/preview/index.js.map +1 -0
  42. package/dist/react-types.d.ts +22 -0
  43. package/dist/react-types.js +1 -0
  44. package/dist/react-types.js.map +1 -0
  45. package/dist/registry.d.ts +2367 -0
  46. package/dist/registry.js +62 -0
  47. package/dist/registry.js.map +1 -0
  48. package/dist/schemas/index.d.ts +2584 -0
  49. package/dist/schemas/index.js +55 -0
  50. package/dist/schemas/index.js.map +1 -0
  51. package/dist/severity.d.ts +18 -0
  52. package/dist/severity.js +27 -0
  53. package/dist/severity.js.map +1 -0
  54. package/dist/test-utils.d.ts +14 -0
  55. package/dist/test-utils.js +63 -0
  56. package/dist/test-utils.js.map +1 -0
  57. package/dist/topology/index.d.ts +48 -0
  58. package/dist/topology/index.js +7 -0
  59. package/dist/topology/index.js.map +1 -0
  60. package/dist/types-xJ2xyp_G.d.ts +119 -0
  61. package/package.json +120 -0
  62. package/src/__tests__/contract-parser.test.ts +614 -0
  63. package/src/__tests__/dtcg-generators.test.ts +439 -0
  64. package/src/__tests__/dtcg-parser.test.ts +884 -0
  65. package/src/__tests__/preview-runtime.test.tsx +111 -0
  66. package/src/__tests__/schema.test.ts +31 -0
  67. package/src/__tests__/severity.test.ts +34 -0
  68. package/src/__tests__/style-comparison.test.ts +662 -0
  69. package/src/__tests__/tokens-compat.test.ts +51 -0
  70. package/src/agent-format.test.ts +105 -0
  71. package/src/agent-format.ts +141 -0
  72. package/src/bundle.ts +149 -0
  73. package/src/codes/__tests__/codes.test.ts +73 -0
  74. package/src/codes/codes.ts +463 -0
  75. package/src/codes/index.ts +7 -0
  76. package/src/codes/source-finding-bridge.ts +113 -0
  77. package/src/compiled-types/index.ts +293 -0
  78. package/src/component-contract.ts +231 -0
  79. package/src/component-discovery.ts +80 -0
  80. package/src/composition.test.ts +262 -0
  81. package/src/composition.ts +318 -0
  82. package/src/config-paths.test.ts +78 -0
  83. package/src/config-paths.ts +47 -0
  84. package/src/config.ts +18 -0
  85. package/src/conform-prove.test.ts +274 -0
  86. package/src/conform-prove.ts +326 -0
  87. package/src/conform.ts +160 -0
  88. package/src/constants.ts +114 -0
  89. package/src/context.ts +2 -0
  90. package/src/contract/fixture.ts +110 -0
  91. package/src/contract/hash.test.ts +86 -0
  92. package/src/contract/hash.ts +195 -0
  93. package/src/contract/index.ts +43 -0
  94. package/src/contract/preimage.test.ts +254 -0
  95. package/src/contract/preimage.ts +365 -0
  96. package/src/contract/stamp.test.ts +100 -0
  97. package/src/contract/stamp.ts +105 -0
  98. package/src/contract-parser.ts +141 -0
  99. package/src/defineFragment.test.ts +257 -0
  100. package/src/defineFragment.ts +293 -0
  101. package/src/dtcg-generators.ts +324 -0
  102. package/src/dtcg-parser.ts +1 -0
  103. package/src/dtcg.ts +237 -0
  104. package/src/facts/__snapshots__/facts.test.ts.snap +124 -0
  105. package/src/facts/builders.ts +835 -0
  106. package/src/facts/compile.ts +422 -0
  107. package/src/facts/fact-index.ts +394 -0
  108. package/src/facts/facts.test.ts +494 -0
  109. package/src/facts/ids.ts +125 -0
  110. package/src/facts/index.ts +119 -0
  111. package/src/facts/types.ts +614 -0
  112. package/src/figma.ts +263 -0
  113. package/src/fragment-types.ts +214 -0
  114. package/src/generate/generate.test.ts +594 -0
  115. package/src/generate/index.ts +438 -0
  116. package/src/governance-integrity.test.ts +186 -0
  117. package/src/governance-integrity.ts +282 -0
  118. package/src/governance.test.ts +300 -0
  119. package/src/governance.ts +605 -0
  120. package/src/governance.type-test.ts +75 -0
  121. package/src/graph/engine.ts +446 -0
  122. package/src/graph/graph.test.ts +746 -0
  123. package/src/graph/index.ts +32 -0
  124. package/src/graph/serialization.ts +55 -0
  125. package/src/graph/types.ts +178 -0
  126. package/src/index.ts +891 -0
  127. package/src/local-canonical.ts +102 -0
  128. package/src/mcp-snapshot.ts +222 -0
  129. package/src/package-identity-match.ts +33 -0
  130. package/src/package-identity.generated.ts +233 -0
  131. package/src/package-identity.test.ts +99 -0
  132. package/src/package-identity.ts +157 -0
  133. package/src/performance-presets.ts +142 -0
  134. package/src/preview/comparison-artifact.test.ts +228 -0
  135. package/src/preview/comparison-artifact.ts +181 -0
  136. package/src/preview/comparison-context.ts +93 -0
  137. package/src/preview/comparison-evidence.ts +112 -0
  138. package/src/preview/comparison-format.ts +21 -0
  139. package/src/preview/comparison-presentation.ts +187 -0
  140. package/src/preview/comparison-references.test.ts +430 -0
  141. package/src/preview/comparison-references.ts +72 -0
  142. package/src/preview/comparison-score.ts +59 -0
  143. package/src/preview/comparison-styles.ts +197 -0
  144. package/src/preview/comparison.test.ts +559 -0
  145. package/src/preview/comparison.ts +488 -0
  146. package/src/preview/index.ts +10 -0
  147. package/src/preview/types.ts +309 -0
  148. package/src/preview/validation.test.ts +290 -0
  149. package/src/preview/validation.ts +356 -0
  150. package/src/preview-runtime.tsx +144 -0
  151. package/src/raw-html-canonical.test.ts +41 -0
  152. package/src/raw-html-canonical.ts +179 -0
  153. package/src/react-types.ts +21 -0
  154. package/src/registry-install-plan.ts +344 -0
  155. package/src/registry.test.ts +245 -0
  156. package/src/registry.ts +369 -0
  157. package/src/rules/a11y-required-accessible-name.ts +93 -0
  158. package/src/rules/color-math.test.ts +72 -0
  159. package/src/rules/color-math.ts +192 -0
  160. package/src/rules/components-forbidden-prop-value.ts +108 -0
  161. package/src/rules/components-prefer-library.ts +943 -0
  162. package/src/rules/components-unknown-prop.ts +94 -0
  163. package/src/rules/composition-pattern-schema.ts +125 -0
  164. package/src/rules/composition-pattern.test.ts +320 -0
  165. package/src/rules/composition-pattern.ts +271 -0
  166. package/src/rules/emit-gate.test.ts +42 -0
  167. package/src/rules/emit-gate.ts +60 -0
  168. package/src/rules/finding.ts +54 -0
  169. package/src/rules/index.ts +235 -0
  170. package/src/rules/jsx-preferred-component.ts +68 -0
  171. package/src/rules/jsx-preferred-import-path.ts +67 -0
  172. package/src/rules/presets.ts +57 -0
  173. package/src/rules/props-invalid-value.ts +115 -0
  174. package/src/rules/rules.test.ts +3636 -0
  175. package/src/rules/spacing-resolution.ts +184 -0
  176. package/src/rules/styles-no-raw-color.ts +329 -0
  177. package/src/rules/styles-no-raw-dimensions.ts +357 -0
  178. package/src/rules/styles-no-raw-spacing.ts +236 -0
  179. package/src/rules/styles-no-raw-typography.ts +237 -0
  180. package/src/rules/tailwind-arbitrary-color.test.ts +128 -0
  181. package/src/rules/tailwind-arbitrary-color.ts +93 -0
  182. package/src/rules/tailwind-arbitrary-spacing.test.ts +157 -0
  183. package/src/rules/tailwind-arbitrary-spacing.ts +120 -0
  184. package/src/rules/tailwind-forbidden-palette.test.ts +116 -0
  185. package/src/rules/tailwind-forbidden-palette.ts +107 -0
  186. package/src/rules/tailwind-off-scale-spacing-token.test.ts +100 -0
  187. package/src/rules/tailwind-off-scale-spacing-token.ts +108 -0
  188. package/src/rules/tailwind-raw-color-via-token.test.ts +108 -0
  189. package/src/rules/tailwind-raw-color-via-token.ts +82 -0
  190. package/src/rules/tailwind-rule-utils.ts +106 -0
  191. package/src/rules/tailwind-unknown-class.test.ts +157 -0
  192. package/src/rules/tailwind-unknown-class.ts +121 -0
  193. package/src/rules/taxonomy.test.ts +238 -0
  194. package/src/rules/theme-no-theme-coupled-literal.ts +132 -0
  195. package/src/rules/tiers.ts +111 -0
  196. package/src/rules/tokens-css-vars-must-be-defined.test.ts +244 -0
  197. package/src/rules/tokens-css-vars-must-be-defined.ts +156 -0
  198. package/src/rules/tokens-require-dual-fallback.ts +78 -0
  199. package/src/rules/types.ts +27 -0
  200. package/src/rules/utils.test.ts +110 -0
  201. package/src/rules/utils.ts +599 -0
  202. package/src/schema.ts +427 -0
  203. package/src/schemas/index.ts +275 -0
  204. package/src/schemas/schemas.test.ts +124 -0
  205. package/src/severity.ts +54 -0
  206. package/src/storyAdapter.test.ts +571 -0
  207. package/src/storyAdapter.ts +761 -0
  208. package/src/storyFilters.test.ts +350 -0
  209. package/src/storyFilters.ts +253 -0
  210. package/src/storybook-csf.ts +11 -0
  211. package/src/style-comparison.ts +423 -0
  212. package/src/test-utils.ts +68 -0
  213. package/src/token-parser.ts +2 -0
  214. package/src/token-types.ts +287 -0
  215. package/src/tokens/categories.ts +131 -0
  216. package/src/tokens/color.ts +193 -0
  217. package/src/tokens/design-token-parser.test.ts +159 -0
  218. package/src/tokens/design-token-parser.ts +402 -0
  219. package/src/tokens/dtcg.ts +428 -0
  220. package/src/tokens/index.ts +130 -0
  221. package/src/tokens/lookup.ts +19 -0
  222. package/src/tokens/scss.ts +171 -0
  223. package/src/tokens/tailwind-v4.ts +187 -0
  224. package/src/tokens/types.ts +43 -0
  225. package/src/topology/index.ts +9 -0
  226. package/src/topology/resolve-area.test.ts +174 -0
  227. package/src/topology/resolve-area.ts +215 -0
  228. package/src/types.ts +1057 -0
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Component Graph Intelligence Layer — barrel exports.
3
+ */
4
+
5
+ export type {
6
+ GraphEdgeType,
7
+ ComponentNode,
8
+ GraphEdge,
9
+ GraphHealth,
10
+ ComponentGraph,
11
+ ImpactResult,
12
+ PathResult,
13
+ NeighborResult,
14
+ CompositionTree,
15
+ SerializedEdge,
16
+ SerializedComponentGraph,
17
+ } from './types.js';
18
+
19
+ export {
20
+ GRAPH_EDGE_TYPES,
21
+ EDGE_TYPE_WEIGHTS,
22
+ } from './types.js';
23
+
24
+ export {
25
+ ComponentGraphEngine,
26
+ computeHealthFromData,
27
+ } from './engine.js';
28
+
29
+ export {
30
+ serializeGraph,
31
+ deserializeGraph,
32
+ } from './serialization.js';
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Graph serialization — compact JSON format for fragments.json embedding.
3
+ *
4
+ * Edges use short keys (s, t, ty, w, no, p) to reduce JSON size.
5
+ * Round-trips through serialize → deserialize preserve all data.
6
+ */
7
+
8
+ import type {
9
+ ComponentGraph,
10
+ GraphEdge,
11
+ SerializedComponentGraph,
12
+ SerializedEdge,
13
+ } from './types.js';
14
+
15
+ /** Serialize a ComponentGraph to compact JSON format */
16
+ export function serializeGraph(graph: ComponentGraph): SerializedComponentGraph {
17
+ return {
18
+ nodes: graph.nodes,
19
+ edges: graph.edges.map(serializeEdge),
20
+ health: graph.health,
21
+ };
22
+ }
23
+
24
+ /** Deserialize a compact JSON graph back to full ComponentGraph */
25
+ export function deserializeGraph(serialized: SerializedComponentGraph): ComponentGraph {
26
+ return {
27
+ nodes: serialized.nodes,
28
+ edges: serialized.edges.map(deserializeEdge),
29
+ health: serialized.health,
30
+ };
31
+ }
32
+
33
+ function serializeEdge(edge: GraphEdge): SerializedEdge {
34
+ const result: SerializedEdge = {
35
+ s: edge.source,
36
+ t: edge.target,
37
+ ty: edge.type,
38
+ w: edge.weight,
39
+ p: edge.provenance,
40
+ };
41
+ if (edge.note) result.no = edge.note;
42
+ return result;
43
+ }
44
+
45
+ function deserializeEdge(edge: SerializedEdge): GraphEdge {
46
+ const result: GraphEdge = {
47
+ source: edge.s,
48
+ target: edge.t,
49
+ type: edge.ty,
50
+ weight: edge.w,
51
+ provenance: edge.p,
52
+ };
53
+ if (edge.no) result.note = edge.no;
54
+ return result;
55
+ }
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Component Graph data model — types for the design-system-semantic relationship graph.
3
+ *
4
+ * These types describe nodes (components), edges (relationships), and health
5
+ * metrics that together give AI agents structural understanding of a design system.
6
+ */
7
+
8
+ // ---------------------------------------------------------------------------
9
+ // Edge types — design-system-semantic
10
+ // ---------------------------------------------------------------------------
11
+
12
+ export type GraphEdgeType =
13
+ | 'imports' // A imports B in source code
14
+ | 'hook-depends' // A calls useB() from B
15
+ | 'renders' // A renders <B> in examples
16
+ | 'composes' // A and B co-occur in a block
17
+ | 'parent-of' // A should wrap B
18
+ | 'alternative-to' // A can replace B
19
+ | 'sibling-of'; // A and B at same level
20
+
21
+ export const GRAPH_EDGE_TYPES: readonly GraphEdgeType[] = [
22
+ 'imports',
23
+ 'hook-depends',
24
+ 'renders',
25
+ 'composes',
26
+ 'parent-of',
27
+ 'alternative-to',
28
+ 'sibling-of',
29
+ ];
30
+
31
+ /** Default weight for each edge type */
32
+ export const EDGE_TYPE_WEIGHTS: Record<GraphEdgeType, number> = {
33
+ 'imports': 1.0,
34
+ 'hook-depends': 0.75,
35
+ 'renders': 0.5,
36
+ 'composes': 0.5,
37
+ 'parent-of': 1.0,
38
+ 'alternative-to': 1.0,
39
+ 'sibling-of': 0.75,
40
+ };
41
+
42
+ // ---------------------------------------------------------------------------
43
+ // Nodes
44
+ // ---------------------------------------------------------------------------
45
+
46
+ export interface ComponentNode {
47
+ name: string;
48
+ category: string;
49
+ status: string;
50
+ compositionPattern?: 'compound' | 'simple' | 'controlled' | 'wrapper';
51
+ subComponents?: string[];
52
+ }
53
+
54
+ // ---------------------------------------------------------------------------
55
+ // Edges
56
+ // ---------------------------------------------------------------------------
57
+
58
+ export interface GraphEdge {
59
+ source: string;
60
+ target: string;
61
+ type: GraphEdgeType;
62
+ weight: number;
63
+ note?: string;
64
+ /** Where this edge was detected from */
65
+ provenance: string;
66
+ }
67
+
68
+ // ---------------------------------------------------------------------------
69
+ // Health metrics
70
+ // ---------------------------------------------------------------------------
71
+
72
+ export interface GraphHealth {
73
+ /** Components with zero edges */
74
+ orphans: string[];
75
+ /** Top components by total degree (in + out) */
76
+ hubs: Array<{ name: string; degree: number }>;
77
+ /** Percentage of components appearing in at least one block */
78
+ compositionCoverage: number;
79
+ /** Disconnected groups (BFS on undirected projection) */
80
+ connectedComponents: string[][];
81
+ /** Average degree across all nodes */
82
+ averageDegree: number;
83
+ /** Total node and edge counts */
84
+ nodeCount: number;
85
+ edgeCount: number;
86
+ }
87
+
88
+ // ---------------------------------------------------------------------------
89
+ // Full graph
90
+ // ---------------------------------------------------------------------------
91
+
92
+ export interface ComponentGraph {
93
+ nodes: ComponentNode[];
94
+ edges: GraphEdge[];
95
+ health: GraphHealth;
96
+ }
97
+
98
+ // ---------------------------------------------------------------------------
99
+ // Query results
100
+ // ---------------------------------------------------------------------------
101
+
102
+ export interface ImpactResult {
103
+ /** The component that was changed */
104
+ component: string;
105
+ /** Components affected at each depth level */
106
+ affected: Array<{
107
+ component: string;
108
+ depth: number;
109
+ path: string[];
110
+ edgeType: GraphEdgeType;
111
+ }>;
112
+ /** Blocks that use the changed component or any affected component */
113
+ affectedBlocks: string[];
114
+ /** Total count of affected components */
115
+ totalAffected: number;
116
+ }
117
+
118
+ export interface PathResult {
119
+ /** Whether a path exists */
120
+ found: boolean;
121
+ /** Nodes along the shortest path (including source and target) */
122
+ path: string[];
123
+ /** Edges along the shortest path */
124
+ edges: GraphEdge[];
125
+ }
126
+
127
+ export interface NeighborResult {
128
+ /** The center component */
129
+ component: string;
130
+ /** All components reachable within maxHops */
131
+ neighbors: Array<{
132
+ component: string;
133
+ hops: number;
134
+ edgeType: GraphEdgeType;
135
+ }>;
136
+ }
137
+
138
+ export interface CompositionTree {
139
+ /** The root component */
140
+ component: string;
141
+ /** Composition pattern */
142
+ compositionPattern?: 'compound' | 'simple' | 'controlled' | 'wrapper';
143
+ /** Direct sub-components */
144
+ subComponents: string[];
145
+ /** Components that declare this component as their parent */
146
+ children: string[];
147
+ /** Parent component (if this is a sub-component) */
148
+ parent?: string;
149
+ /** Sibling components at the same level */
150
+ siblings: string[];
151
+ /** Blocks that use this component */
152
+ blocks: string[];
153
+ }
154
+
155
+ // ---------------------------------------------------------------------------
156
+ // Serialization (compact keys for JSON size)
157
+ // ---------------------------------------------------------------------------
158
+
159
+ export interface SerializedEdge {
160
+ /** source */
161
+ s: string;
162
+ /** target */
163
+ t: string;
164
+ /** type */
165
+ ty: GraphEdgeType;
166
+ /** weight */
167
+ w: number;
168
+ /** note (optional) */
169
+ no?: string;
170
+ /** provenance */
171
+ p: string;
172
+ }
173
+
174
+ export interface SerializedComponentGraph {
175
+ nodes: ComponentNode[];
176
+ edges: SerializedEdge[];
177
+ health: GraphHealth;
178
+ }