design-constraint-validator 2.0.1 → 2.1.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 (82) hide show
  1. package/README.md +76 -21
  2. package/cli/commands/build.js +1 -1
  3. package/cli/commands/build.ts +1 -1
  4. package/cli/commands/graph.js +2 -2
  5. package/cli/commands/graph.ts +2 -2
  6. package/cli/commands/validate.d.ts.map +1 -1
  7. package/cli/commands/validate.js +40 -6
  8. package/cli/commands/validate.ts +37 -8
  9. package/cli/config-schema.d.ts +39 -0
  10. package/cli/config-schema.d.ts.map +1 -1
  11. package/cli/config-schema.js +4 -2
  12. package/cli/config-schema.ts +4 -2
  13. package/cli/config.d.ts.map +1 -1
  14. package/cli/config.js +8 -2
  15. package/cli/config.ts +8 -2
  16. package/cli/constraint-registry.d.ts +16 -0
  17. package/cli/constraint-registry.d.ts.map +1 -1
  18. package/cli/constraint-registry.js +64 -31
  19. package/cli/constraint-registry.ts +67 -31
  20. package/cli/dcv.js +8 -24
  21. package/cli/dcv.ts +8 -20
  22. package/cli/json-output.d.ts +3 -1
  23. package/cli/json-output.d.ts.map +1 -1
  24. package/cli/json-output.js +11 -4
  25. package/cli/json-output.ts +13 -4
  26. package/cli/types.d.ts +2 -0
  27. package/cli/types.d.ts.map +1 -1
  28. package/cli/types.ts +2 -0
  29. package/cli/validate-api.d.ts +40 -0
  30. package/cli/validate-api.d.ts.map +1 -0
  31. package/cli/validate-api.js +85 -0
  32. package/cli/validate-api.ts +126 -0
  33. package/core/breakpoints.d.ts +8 -2
  34. package/core/breakpoints.d.ts.map +1 -1
  35. package/core/breakpoints.js +24 -3
  36. package/core/breakpoints.ts +22 -3
  37. package/core/color.js +4 -4
  38. package/core/color.ts +4 -4
  39. package/core/constraints/monotonic-lightness.d.ts.map +1 -1
  40. package/core/constraints/monotonic-lightness.js +9 -5
  41. package/core/constraints/monotonic-lightness.ts +9 -4
  42. package/core/constraints/wcag.d.ts.map +1 -1
  43. package/core/constraints/wcag.js +6 -0
  44. package/core/constraints/wcag.ts +6 -0
  45. package/core/dtcg.d.ts +38 -0
  46. package/core/dtcg.d.ts.map +1 -0
  47. package/core/dtcg.js +88 -0
  48. package/core/dtcg.ts +102 -0
  49. package/core/engine.d.ts +6 -0
  50. package/core/engine.d.ts.map +1 -1
  51. package/core/engine.ts +7 -0
  52. package/core/flatten.d.ts +5 -3
  53. package/core/flatten.d.ts.map +1 -1
  54. package/core/flatten.js +24 -10
  55. package/core/flatten.ts +39 -16
  56. package/core/image-export.d.ts.map +1 -1
  57. package/core/image-export.js +10 -7
  58. package/core/image-export.ts +9 -6
  59. package/core/index.d.ts +2 -0
  60. package/core/index.d.ts.map +1 -1
  61. package/core/index.js +4 -0
  62. package/core/index.ts +6 -0
  63. package/core/why.d.ts +1 -1
  64. package/core/why.d.ts.map +1 -1
  65. package/core/why.ts +1 -1
  66. package/mcp/contracts.d.ts +118 -0
  67. package/mcp/contracts.d.ts.map +1 -0
  68. package/mcp/contracts.js +30 -0
  69. package/mcp/contracts.ts +51 -0
  70. package/mcp/index.d.ts +9 -0
  71. package/mcp/index.d.ts.map +1 -0
  72. package/mcp/index.js +32 -0
  73. package/mcp/index.ts +70 -0
  74. package/mcp/tools.d.ts +52 -0
  75. package/mcp/tools.d.ts.map +1 -0
  76. package/mcp/tools.js +172 -0
  77. package/mcp/tools.ts +254 -0
  78. package/package.json +41 -26
  79. package/server.json +21 -0
  80. package/cli/constraints-loader.d.ts.map +0 -1
  81. package/cli/engine-helpers.d.ts.map +0 -1
  82. package/core/cross-axis-config.d.ts.map +0 -1
package/mcp/tools.ts ADDED
@@ -0,0 +1,254 @@
1
+ import fs from 'node:fs';
2
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
4
+ import type { z } from 'zod';
5
+
6
+ import { suggestIds } from '../core/cli-format.js';
7
+ import { flattenTokens, type TokenNode } from '../core/flatten.js';
8
+ import { explain, type WhyReport } from '../core/why.js';
9
+ import { validate, type ValidateResult } from '../cli/validate-api.js';
10
+ import type { DcvConfig } from '../cli/types.js';
11
+ import type { Breakpoint } from '../core/breakpoints.js';
12
+ import type { JsonObject, ValidateToolInput, WhyToolInput, GraphToolInput } from './contracts.js';
13
+ import { graphInputShape, validateInputShape, whyInputShape } from './contracts.js';
14
+
15
+ export type DcvMcpToolName = 'validate' | 'why' | 'graph';
16
+
17
+ export interface ToolFailure {
18
+ ok: false;
19
+ tool: DcvMcpToolName;
20
+ error: {
21
+ code: string;
22
+ message: string;
23
+ details?: Record<string, unknown>;
24
+ };
25
+ }
26
+
27
+ export type ToolResponse<T extends { ok: boolean } & object> = ({ tool: DcvMcpToolName } & T) | ToolFailure;
28
+
29
+ export class ToolExecutionError extends Error {
30
+ readonly code: string;
31
+ readonly details?: Record<string, unknown>;
32
+
33
+ constructor(code: string, message: string, details?: Record<string, unknown>) {
34
+ super(message);
35
+ this.code = code;
36
+ this.details = details;
37
+ }
38
+ }
39
+
40
+ export interface GraphToolResult {
41
+ ok: true;
42
+ nodes: string[];
43
+ edges: Array<[string, string]>;
44
+ meta: {
45
+ nodeCount: number;
46
+ edgeCount: number;
47
+ };
48
+ }
49
+
50
+ export type WhyToolResult = { ok: true } & WhyReport;
51
+
52
+ interface TokenInput {
53
+ tokens?: JsonObject;
54
+ tokensPath?: string;
55
+ constraints?: JsonObject;
56
+ configPath?: string;
57
+ constraintsDir?: string;
58
+ breakpoint?: Breakpoint;
59
+ }
60
+
61
+ interface ToolDefinition<TInput, TResult extends { ok: boolean } & object> {
62
+ name: DcvMcpToolName;
63
+ description: string;
64
+ inputSchema: Record<string, z.ZodTypeAny>;
65
+ handler: (input: TInput) => Promise<ToolResponse<TResult>> | ToolResponse<TResult>;
66
+ }
67
+
68
+ function errorMessage(error: unknown): string {
69
+ return error instanceof Error ? error.message : 'Unknown tool failure';
70
+ }
71
+
72
+ function toFailure(tool: DcvMcpToolName, error: unknown): ToolFailure {
73
+ if (error instanceof ToolExecutionError) {
74
+ return {
75
+ ok: false,
76
+ tool,
77
+ error: {
78
+ code: error.code,
79
+ message: error.message,
80
+ ...(error.details ? { details: error.details } : {}),
81
+ },
82
+ };
83
+ }
84
+
85
+ return {
86
+ ok: false,
87
+ tool,
88
+ error: {
89
+ code: 'tool_execution_failed',
90
+ message: errorMessage(error),
91
+ },
92
+ };
93
+ }
94
+
95
+ async function executeTool<T extends { ok: boolean } & object>(
96
+ tool: DcvMcpToolName,
97
+ fn: () => Promise<T> | T,
98
+ ): Promise<ToolResponse<T>> {
99
+ try {
100
+ return {
101
+ tool,
102
+ ...(await fn()),
103
+ };
104
+ } catch (error) {
105
+ return toFailure(tool, error);
106
+ }
107
+ }
108
+
109
+ function isToolFailure(result: ToolResponse<{ ok: boolean }>): result is ToolFailure {
110
+ return result.ok === false && 'error' in result;
111
+ }
112
+
113
+ function responseToContent(result: ToolResponse<{ ok: boolean }>): string {
114
+ return JSON.stringify(result, null, 2);
115
+ }
116
+
117
+ function parseJsonFile(filePath: string): unknown {
118
+ if (!fs.existsSync(filePath)) {
119
+ throw new ToolExecutionError('tokens_not_found', `Tokens file not found: ${filePath}`);
120
+ }
121
+
122
+ try {
123
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
124
+ } catch (error) {
125
+ throw new ToolExecutionError('invalid_tokens', `Tokens file is not valid JSON: ${filePath}`, {
126
+ cause: errorMessage(error),
127
+ });
128
+ }
129
+ }
130
+
131
+ function asJsonObject(value: unknown, label: string): JsonObject {
132
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
133
+ return value as JsonObject;
134
+ }
135
+
136
+ throw new ToolExecutionError('invalid_input', `${label} must be a JSON object.`);
137
+ }
138
+
139
+ function resolveTokens(input: TokenInput): TokenNode {
140
+ if (input.tokens !== undefined) {
141
+ return input.tokens as unknown as TokenNode;
142
+ }
143
+
144
+ if (input.tokensPath !== undefined) {
145
+ return asJsonObject(parseJsonFile(input.tokensPath), 'tokensPath contents') as unknown as TokenNode;
146
+ }
147
+
148
+ throw new ToolExecutionError('invalid_input', 'Provide either tokens or tokensPath.');
149
+ }
150
+
151
+ function constraints(input: TokenInput): DcvConfig['constraints'] | undefined {
152
+ return input.constraints as DcvConfig['constraints'] | undefined;
153
+ }
154
+
155
+ export async function validateTool(input: ValidateToolInput): Promise<ToolResponse<ValidateResult>> {
156
+ return executeTool('validate', () => {
157
+ if (input.tokens === undefined && input.tokensPath === undefined) {
158
+ throw new ToolExecutionError('invalid_input', 'Provide either tokens or tokensPath.');
159
+ }
160
+
161
+ return validate({
162
+ ...(input.tokens !== undefined ? { tokens: input.tokens as unknown as TokenNode } : {}),
163
+ ...(input.tokens === undefined && input.tokensPath !== undefined ? { tokensPath: input.tokensPath } : {}),
164
+ ...(input.constraints !== undefined ? { constraints: constraints(input) } : {}),
165
+ ...(input.configPath !== undefined ? { configPath: input.configPath } : {}),
166
+ ...(input.constraintsDir !== undefined ? { constraintsDir: input.constraintsDir } : {}),
167
+ ...(input.breakpoint !== undefined ? { breakpoint: input.breakpoint } : {}),
168
+ });
169
+ });
170
+ }
171
+
172
+ export async function whyTool(input: WhyToolInput): Promise<ToolResponse<WhyToolResult>> {
173
+ return executeTool('why', () => {
174
+ const { flat, edges } = flattenTokens(resolveTokens(input));
175
+ if (!Object.prototype.hasOwnProperty.call(flat, input.tokenId)) {
176
+ throw new ToolExecutionError('unknown_token', `Unknown token id: ${input.tokenId}`, {
177
+ tokenId: input.tokenId,
178
+ suggestions: suggestIds(input.tokenId, Object.keys(flat)).map((suggestion) => suggestion.id),
179
+ });
180
+ }
181
+
182
+ return {
183
+ ok: true as const,
184
+ ...explain(input.tokenId, flat, edges),
185
+ };
186
+ });
187
+ }
188
+
189
+ export async function graphTool(input: GraphToolInput): Promise<ToolResponse<GraphToolResult>> {
190
+ return executeTool('graph', () => {
191
+ const { flat, edges } = flattenTokens(resolveTokens(input));
192
+ const nodes = Object.keys(flat).sort();
193
+
194
+ return {
195
+ ok: true as const,
196
+ nodes,
197
+ edges,
198
+ meta: {
199
+ nodeCount: nodes.length,
200
+ edgeCount: edges.length,
201
+ },
202
+ };
203
+ });
204
+ }
205
+
206
+ export const dcvMcpTools: Array<
207
+ | ToolDefinition<ValidateToolInput, ValidateResult>
208
+ | ToolDefinition<WhyToolInput, WhyToolResult>
209
+ | ToolDefinition<GraphToolInput, GraphToolResult>
210
+ > = [
211
+ {
212
+ name: 'validate',
213
+ description: 'Validate DTCG-style design tokens against DCV constraints and return structured violations.',
214
+ inputSchema: validateInputShape,
215
+ handler: validateTool,
216
+ },
217
+ {
218
+ name: 'why',
219
+ description: 'Explain token provenance, aliases, immediate dependencies, dependents, and alias chain.',
220
+ inputSchema: whyInputShape,
221
+ handler: whyTool,
222
+ },
223
+ {
224
+ name: 'graph',
225
+ description: 'Return the token dependency graph as nodes and directed edges.',
226
+ inputSchema: graphInputShape,
227
+ handler: graphTool,
228
+ },
229
+ ];
230
+
231
+ export function registerDcvMcpTools(server: McpServer): void {
232
+ for (const tool of dcvMcpTools) {
233
+ server.registerTool(
234
+ tool.name,
235
+ {
236
+ description: tool.description,
237
+ inputSchema: tool.inputSchema,
238
+ },
239
+ async (input): Promise<CallToolResult> => {
240
+ const result = await tool.handler(input as never);
241
+ return {
242
+ content: [
243
+ {
244
+ type: 'text',
245
+ text: responseToContent(result as ToolResponse<{ ok: boolean }>),
246
+ },
247
+ ],
248
+ structuredContent: result as unknown as Record<string, unknown>,
249
+ ...(isToolFailure(result as ToolResponse<{ ok: boolean }>) ? { isError: true } : {}),
250
+ };
251
+ },
252
+ );
253
+ }
254
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "design-constraint-validator",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "Mathematical constraint validator for design systems — ensuring consistency, accessibility, and logical coherence",
5
5
  "type": "module",
6
6
  "engines": {
@@ -14,30 +14,42 @@
14
14
  "import": "./core/index.js"
15
15
  },
16
16
  "./core/*": "./core/*",
17
- "./cli/*": "./cli/*"
17
+ "./cli/*": "./cli/*",
18
+ "./mcp": {
19
+ "types": "./mcp/index.d.ts",
20
+ "import": "./mcp/index.js"
21
+ },
22
+ "./mcp/*": "./mcp/*"
18
23
  },
19
24
  "bin": {
20
25
  "dcv": "./cli/index.js",
21
- "design-constraint-validator": "./cli/index.js"
26
+ "design-constraint-validator": "./cli/index.js",
27
+ "dcv-mcp": "./mcp/index.js"
22
28
  },
29
+ "mcpName": "io.github.cseperkepapp/design-constraint-validator",
23
30
  "scripts": {
24
- "test": "vitest run",
25
- "test:watch": "vitest",
31
+ "test": "vitest run --exclude \"**/*.test.js\"",
32
+ "test:watch": "vitest --exclude \"**/*.test.js\"",
26
33
  "typecheck": "tsc --noEmit",
34
+ "workflow:typecheck": "tsc -p tsconfig.workflow-automation.json --noEmit",
35
+ "validate-headers": "tsx scripts/validate-headers.ts",
36
+ "workflow:test": "vitest run src/__tests__/task-workflow-integrity.test.ts src/__tests__/sync-task-index.test.ts",
37
+ "task:sync": "tsx scripts/sync-task-index.ts",
38
+ "rename-done-tasks": "tsx scripts/rename-done-tasks.ts",
27
39
  "build": "tsc",
28
40
  "lint": "eslint . --ext .js,.ts,.mjs,.cjs",
29
41
  "format": "prettier -w .",
30
- "check": "npm run typecheck && npm run lint && npm test",
31
- "prepublishOnly": "npm run check && npm run build",
42
+ "check": "npm run typecheck && npm run lint && npm run build && npm test",
43
+ "prepublishOnly": "npm run check",
32
44
  "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
33
45
  "release:notes": "npm run changelog && git add CHANGELOG.md && git commit -m \"docs(changelog): update\"",
34
- "release:patch": "npm version patch && git push && git push --tags && echo '\n⚠️ Now run: npm publish'",
35
- "release:minor": "npm version minor && git push && git push --tags && echo '\n⚠️ Now run: npm publish'",
36
- "release:major": "npm version major && git push && git push --tags && echo '\n⚠️ Now run: npm publish'",
37
- "demo": "cd ../designLab-DEMO && npm run dev",
38
- "demo:build": "cd ../designLab-DEMO && npm run build",
39
- "demo:v2": "cd designLab-v2 && npm run dev",
40
- "demo:v2:build": "cd designLab-v2 && npm run build"
46
+ "release:patch": "npm version patch && git push && git push --tags && echo '\n Tag pushed. CI (.github/workflows/publish.yml) will build, publish, and verify the version on npm — no manual npm publish needed. Watch the Actions run.'",
47
+ "release:minor": "npm version minor && git push && git push --tags && echo '\n Tag pushed. CI (.github/workflows/publish.yml) will build, publish, and verify the version on npm — no manual npm publish needed. Watch the Actions run.'",
48
+ "release:major": "npm version major && git push && git push --tags && echo '\n Tag pushed. CI (.github/workflows/publish.yml) will build, publish, and verify the version on npm — no manual npm publish needed. Watch the Actions run.'",
49
+ "demo": "node -e \"const fs=require('node:fs');const cp=require('node:child_process');const dir='../designLab-DEMO';if(!fs.existsSync(dir)){console.error('Demo repo not found at ../designLab-DEMO. Clone it next to this repo to run npm run demo.');process.exit(1)}const r=cp.spawnSync('npm',['run','dev'],{cwd:dir,stdio:'inherit',shell:true});process.exit(r.status===null?1:r.status)\"",
50
+ "demo:build": "node -e \"const fs=require('node:fs');const cp=require('node:child_process');const dir='../designLab-DEMO';if(!fs.existsSync(dir)){console.error('Demo repo not found at ../designLab-DEMO. Clone it next to this repo to run npm run demo:build.');process.exit(1)}const r=cp.spawnSync('npm',['run','build'],{cwd:dir,stdio:'inherit',shell:true});process.exit(r.status===null?1:r.status)\"",
51
+ "demo:v2": "node -e \"const fs=require('node:fs');const cp=require('node:child_process');const dir='designLab-v2';if(!fs.existsSync(dir)){console.error('Demo repo not found at designLab-v2. Add it inside this repo to run npm run demo:v2.');process.exit(1)}const r=cp.spawnSync('npm',['run','dev'],{cwd:dir,stdio:'inherit',shell:true});process.exit(r.status===null?1:r.status)\"",
52
+ "demo:v2:build": "node -e \"const fs=require('node:fs');const cp=require('node:child_process');const dir='designLab-v2';if(!fs.existsSync(dir)){console.error('Demo repo not found at designLab-v2. Add it inside this repo to run npm run demo:v2:build.');process.exit(1)}const r=cp.spawnSync('npm',['run','build'],{cwd:dir,stdio:'inherit',shell:true});process.exit(r.status===null?1:r.status)\""
41
53
  },
42
54
  "keywords": [
43
55
  "design-constraints",
@@ -67,29 +79,32 @@
67
79
  "access": "public"
68
80
  },
69
81
  "dependencies": {
70
- "fast-glob": "^3.3.2",
71
- "yargs": "^17.0.0",
72
- "zod": "^3.0.0"
82
+ "@modelcontextprotocol/sdk": "^1.29.0",
83
+ "yargs": "^17.7.2",
84
+ "zod": "^3.25.76"
73
85
  },
74
86
  "devDependencies": {
75
- "@types/node": "^22.0.0",
76
- "@types/yargs": "^17.0.0",
77
- "@typescript-eslint/eslint-plugin": "^8.0.0",
78
- "@typescript-eslint/parser": "^8.0.0",
87
+ "@types/node": "^22.19.21",
88
+ "@types/yargs": "^17.0.35",
89
+ "@typescript-eslint/eslint-plugin": "^8.61.0",
90
+ "@typescript-eslint/parser": "^8.61.0",
79
91
  "conventional-changelog-cli": "^2.2.2",
80
- "eslint": "^9.0.0",
92
+ "eslint": "^9.39.4",
81
93
  "eslint-config-prettier": "^9.0.0",
94
+ "glob": "^11.1.0",
82
95
  "pdf-parse": "^2.4.5",
83
- "prettier": "^3.0.0",
84
- "tsx": "^4.0.0",
85
- "typescript": "^5.0.0",
86
- "vitest": "^3.0.0"
96
+ "prettier": "^3.8.4",
97
+ "tsx": "^4.22.4",
98
+ "typescript": "^5.9.3",
99
+ "vitest": "^3.2.6"
87
100
  },
88
101
  "files": [
89
102
  "cli/",
90
103
  "core/",
104
+ "mcp/",
91
105
  "adapters/",
92
106
  "themes/",
107
+ "server.json",
93
108
  "LICENSE",
94
109
  "README.md"
95
110
  ]
package/server.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.cseperkepapp/design-constraint-validator",
4
+ "title": "Design Constraint Validator",
5
+ "description": "Validate design tokens for accessibility, scales, and design-system constraint consistency.",
6
+ "version": "2.1.0",
7
+ "repository": {
8
+ "url": "https://github.com/CseperkePapp/design-constraint-validator",
9
+ "source": "github"
10
+ },
11
+ "packages": [
12
+ {
13
+ "registryType": "npm",
14
+ "identifier": "design-constraint-validator",
15
+ "version": "2.1.0",
16
+ "transport": {
17
+ "type": "stdio"
18
+ }
19
+ }
20
+ ]
21
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraints-loader.d.ts","sourceRoot":"","sources":["constraints-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAkDtF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine-helpers.d.ts","sourceRoot":"","sources":["engine-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAiB,KAAK,SAAS,EAAkB,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,OAAO,EAA8B,wBAAwB,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAgE5C;;;GAGG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,GAAE,SAAc,GAAG,MAAM,CAQlF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,GAAG,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAgBnH;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cross-axis-config.d.ts","sourceRoot":"","sources":["cross-axis-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAUH;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,EAAE,CAAC,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,0CA2HnD"}