@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
package/src/dtcg.ts ADDED
@@ -0,0 +1,237 @@
1
+ /**
2
+ * W3C Design Token Community Group (DTCG) format types and Zod schemas.
3
+ *
4
+ * Implements the W3C DTCG specification for design token files.
5
+ * @see https://www.designtokens.org/tr/2025.10/format/
6
+ */
7
+
8
+ import { z } from 'zod';
9
+
10
+ // ---------------------------------------------------------------------------
11
+ // Token types per DTCG spec
12
+ // ---------------------------------------------------------------------------
13
+
14
+ export type DTCGTokenType =
15
+ | 'color'
16
+ | 'dimension'
17
+ | 'fontFamily'
18
+ | 'fontWeight'
19
+ | 'duration'
20
+ | 'cubicBezier'
21
+ | 'number'
22
+ | 'shadow'
23
+ | 'border'
24
+ | 'strokeStyle'
25
+ | 'transition'
26
+ | 'gradient'
27
+ | 'typography';
28
+
29
+ // ---------------------------------------------------------------------------
30
+ // Value types per DTCG spec
31
+ // ---------------------------------------------------------------------------
32
+
33
+ /** Color value (sRGB) */
34
+ export interface DTCGColorValue {
35
+ colorSpace: string;
36
+ components: number[];
37
+ hex?: string;
38
+ alpha?: number;
39
+ }
40
+
41
+ /** Dimension value */
42
+ export interface DTCGDimensionValue {
43
+ value: number;
44
+ unit: 'px' | 'rem';
45
+ }
46
+
47
+ /** Shadow value (single layer) */
48
+ export interface DTCGShadowValue {
49
+ color: string | DTCGColorValue;
50
+ offsetX: string | DTCGDimensionValue;
51
+ offsetY: string | DTCGDimensionValue;
52
+ blur: string | DTCGDimensionValue;
53
+ spread: string | DTCGDimensionValue;
54
+ inset?: boolean;
55
+ }
56
+
57
+ /** Border value */
58
+ export interface DTCGBorderValue {
59
+ color: string | DTCGColorValue;
60
+ width: string | DTCGDimensionValue;
61
+ style: string;
62
+ }
63
+
64
+ /** Typography value */
65
+ export interface DTCGTypographyValue {
66
+ fontFamily: string | string[];
67
+ fontSize: string | DTCGDimensionValue;
68
+ fontWeight: number | string;
69
+ letterSpacing?: string | DTCGDimensionValue;
70
+ lineHeight?: string | number;
71
+ }
72
+
73
+ /** Transition value */
74
+ export interface DTCGTransitionValue {
75
+ duration: string;
76
+ delay?: string;
77
+ timingFunction: number[];
78
+ }
79
+
80
+ /** Gradient stop */
81
+ export interface DTCGGradientStop {
82
+ color: string | DTCGColorValue;
83
+ position: number;
84
+ }
85
+
86
+ /** Cubic bezier value */
87
+ export type DTCGCubicBezierValue = [number, number, number, number];
88
+
89
+ // ---------------------------------------------------------------------------
90
+ // Token and group structures
91
+ // ---------------------------------------------------------------------------
92
+
93
+ /** A single design token */
94
+ export interface DTCGToken {
95
+ $value: unknown;
96
+ $type?: DTCGTokenType;
97
+ $description?: string;
98
+ $deprecated?: boolean | string;
99
+ $extensions?: Record<string, unknown>;
100
+ }
101
+
102
+ /** A group (recursive container for tokens and sub-groups) */
103
+ export interface DTCGGroup {
104
+ $type?: DTCGTokenType;
105
+ $description?: string;
106
+ $deprecated?: boolean | string;
107
+ $extensions?: Record<string, unknown>;
108
+ $extends?: string;
109
+ [key: string]: DTCGToken | DTCGGroup | unknown;
110
+ }
111
+
112
+ /** Root file structure — a top-level group */
113
+ export type DTCGTokenFile = DTCGGroup;
114
+
115
+ // ---------------------------------------------------------------------------
116
+ // Resolved token (after parsing)
117
+ // ---------------------------------------------------------------------------
118
+
119
+ export interface ResolvedDTCGToken {
120
+ /** Dot-separated path (e.g., "color.brand.primary") */
121
+ path: string;
122
+ /** Resolved type (inherited from group if not set on token) */
123
+ type: DTCGTokenType;
124
+ /** Raw $value from the token */
125
+ rawValue: unknown;
126
+ /** CSS-compatible string value */
127
+ cssValue: string;
128
+ /** Description */
129
+ description?: string;
130
+ /** Whether token is deprecated */
131
+ deprecated?: boolean | string;
132
+ /** Extensions data */
133
+ extensions?: Record<string, unknown>;
134
+ }
135
+
136
+ // ---------------------------------------------------------------------------
137
+ // Zod schemas for runtime validation
138
+ // ---------------------------------------------------------------------------
139
+
140
+ const dtcgTokenTypeSchema = z.enum([
141
+ 'color', 'dimension', 'fontFamily', 'fontWeight',
142
+ 'duration', 'cubicBezier', 'number',
143
+ 'shadow', 'border', 'strokeStyle', 'transition',
144
+ 'gradient', 'typography',
145
+ ]);
146
+
147
+ const dtcgColorValueSchema = z.union([
148
+ z.string(),
149
+ z.object({
150
+ colorSpace: z.string().default('srgb'),
151
+ components: z.array(z.number()),
152
+ hex: z.string().optional(),
153
+ alpha: z.number().optional(),
154
+ }),
155
+ ]);
156
+
157
+ const dtcgDimensionValueSchema = z.union([
158
+ z.string(),
159
+ z.object({
160
+ value: z.number(),
161
+ unit: z.enum(['px', 'rem']),
162
+ }),
163
+ ]);
164
+
165
+ const dtcgShadowValueSchema = z.object({
166
+ color: dtcgColorValueSchema,
167
+ offsetX: dtcgDimensionValueSchema,
168
+ offsetY: dtcgDimensionValueSchema,
169
+ blur: dtcgDimensionValueSchema,
170
+ spread: dtcgDimensionValueSchema.optional(),
171
+ inset: z.boolean().optional(),
172
+ });
173
+
174
+ const dtcgBorderValueSchema = z.object({
175
+ color: dtcgColorValueSchema,
176
+ width: dtcgDimensionValueSchema,
177
+ style: z.string(),
178
+ });
179
+
180
+ const dtcgTypographyValueSchema = z.object({
181
+ fontFamily: z.union([z.string(), z.array(z.string())]),
182
+ fontSize: dtcgDimensionValueSchema,
183
+ fontWeight: z.union([z.number(), z.string()]),
184
+ letterSpacing: dtcgDimensionValueSchema.optional(),
185
+ lineHeight: z.union([z.string(), z.number()]).optional(),
186
+ });
187
+
188
+ const dtcgTransitionValueSchema = z.object({
189
+ duration: z.string(),
190
+ delay: z.string().optional(),
191
+ timingFunction: z.array(z.number()).length(4),
192
+ });
193
+
194
+ const dtcgGradientStopSchema = z.object({
195
+ color: dtcgColorValueSchema,
196
+ position: z.number(),
197
+ });
198
+
199
+ const dtcgCubicBezierValueSchema = z.tuple([
200
+ z.number(), z.number(), z.number(), z.number(),
201
+ ]);
202
+
203
+ /** Schema for a single token node (has $value) */
204
+ const dtcgTokenSchema = z.object({
205
+ $value: z.unknown(),
206
+ $type: dtcgTokenTypeSchema.optional(),
207
+ $description: z.string().optional(),
208
+ $deprecated: z.union([z.boolean(), z.string()]).optional(),
209
+ $extensions: z.record(z.string(), z.unknown()).optional(),
210
+ }).passthrough();
211
+
212
+ /**
213
+ * Top-level schema for a DTCG token file.
214
+ * Validates the root structure — individual tokens are validated by type
215
+ * during parsing since the tree is recursive.
216
+ */
217
+ export const dtcgTokenFileSchema = z.record(z.string(), z.unknown()).refine(
218
+ (data) => {
219
+ // A valid DTCG file should not be empty and should not be an array
220
+ return data !== null && typeof data === 'object' && !Array.isArray(data);
221
+ },
222
+ { message: 'DTCG token file must be a JSON object' },
223
+ );
224
+
225
+ // Export individual schemas for consumers
226
+ export {
227
+ dtcgTokenTypeSchema,
228
+ dtcgTokenSchema,
229
+ dtcgColorValueSchema,
230
+ dtcgDimensionValueSchema,
231
+ dtcgShadowValueSchema,
232
+ dtcgBorderValueSchema,
233
+ dtcgTypographyValueSchema,
234
+ dtcgTransitionValueSchema,
235
+ dtcgGradientStopSchema,
236
+ dtcgCubicBezierValueSchema,
237
+ };
@@ -0,0 +1,124 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`fact IR — deterministic snapshot > compiles the sample fragment to a stable, sorted snapshot 1`] = `
4
+ [
5
+ {
6
+ "because": "Buttons must announce their action.",
7
+ "componentId": "@usefragments/ui#Button",
8
+ "id": "a11y_name_required:fd20d9e34b60c0af",
9
+ "kind": "a11y_name_required",
10
+ "severity": "error",
11
+ },
12
+ {
13
+ "capability": "dom.button",
14
+ "componentId": "@usefragments/ui#Button",
15
+ "id": "component_capability:1d26f741f1c1cf85",
16
+ "kind": "component_capability",
17
+ },
18
+ {
19
+ "category": "forms",
20
+ "componentId": "@usefragments/ui#Button",
21
+ "description": "Interactive element for user-triggered actions.",
22
+ "filePath": undefined,
23
+ "id": "component:c4102dfa02b9634e",
24
+ "kind": "component",
25
+ "name": "Button",
26
+ },
27
+ {
28
+ "componentId": "@usefragments/ui#Button",
29
+ "default": undefined,
30
+ "description": "Size of the button",
31
+ "id": "prop_metadata:2cb71442de8109be",
32
+ "kind": "prop_metadata",
33
+ "prop": "size",
34
+ "required": false,
35
+ "type": "enum",
36
+ "values": [
37
+ "sm",
38
+ "md",
39
+ "lg",
40
+ ],
41
+ },
42
+ {
43
+ "componentId": "@usefragments/ui#Button",
44
+ "default": undefined,
45
+ "description": "Visual style",
46
+ "id": "prop_metadata:6109eb78d131644c",
47
+ "kind": "prop_metadata",
48
+ "prop": "variant",
49
+ "required": false,
50
+ "type": "enum",
51
+ "values": [
52
+ "primary",
53
+ "secondary",
54
+ "ghost",
55
+ "link",
56
+ ],
57
+ },
58
+ {
59
+ "componentId": "@usefragments/ui#Button",
60
+ "default": undefined,
61
+ "description": "Disables the button",
62
+ "id": "prop_metadata:c93e5811d4471225",
63
+ "kind": "prop_metadata",
64
+ "prop": "disabled",
65
+ "required": false,
66
+ "type": "boolean",
67
+ "values": undefined,
68
+ },
69
+ {
70
+ "because": "Use Link for ordinary navigation.",
71
+ "componentId": "@usefragments/ui#Button",
72
+ "id": "prop_value_avoided:0d3e1c622bd230f6",
73
+ "kind": "prop_value_avoided",
74
+ "prop": "variant",
75
+ "severity": "warn",
76
+ "suggest": undefined,
77
+ "value": "link",
78
+ },
79
+ {
80
+ "because": "Checkout CTAs should stay visually dominant.",
81
+ "componentId": "@usefragments/ui#Button",
82
+ "id": "prop_value_forbidden:a84799cc456f2908",
83
+ "kind": "prop_value_forbidden",
84
+ "pathPattern": "apps/checkout/**",
85
+ "prop": "variant",
86
+ "replaceWith": "primary",
87
+ "severity": "error",
88
+ "value": "secondary",
89
+ },
90
+ {
91
+ "id": "scale_value:4c5bf2023f8fe7e6",
92
+ "kind": "scale_value",
93
+ "scale": "space",
94
+ "value": 0,
95
+ },
96
+ {
97
+ "id": "scale_value:6a82590ad1db7b8e",
98
+ "kind": "scale_value",
99
+ "scale": "space",
100
+ "value": 8,
101
+ },
102
+ {
103
+ "id": "scale_value:8abc65b62aac9472",
104
+ "kind": "scale_value",
105
+ "scale": "space",
106
+ "value": 4,
107
+ },
108
+ {
109
+ "id": "scale:6857f032ced40006",
110
+ "kind": "scale",
111
+ "name": "space",
112
+ "unit": "px",
113
+ },
114
+ {
115
+ "except": [
116
+ "transparent",
117
+ ],
118
+ "id": "style_raw_color_forbidden:8e4b55c7e9750a7b",
119
+ "kind": "style_raw_color_forbidden",
120
+ "prefer": "token",
121
+ "severity": "error",
122
+ },
123
+ ]
124
+ `;