@tekton-ui/mcp-server 0.3.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.
- package/LICENSE +21 -0
- package/README.md +980 -0
- package/dist/auth/cache.d.ts +28 -0
- package/dist/auth/cache.d.ts.map +1 -0
- package/dist/auth/cache.js +48 -0
- package/dist/auth/cache.js.map +1 -0
- package/dist/auth/guard.d.ts +13 -0
- package/dist/auth/guard.d.ts.map +1 -0
- package/dist/auth/guard.js +21 -0
- package/dist/auth/guard.js.map +1 -0
- package/dist/auth/state.d.ts +32 -0
- package/dist/auth/state.d.ts.map +1 -0
- package/dist/auth/state.js +72 -0
- package/dist/auth/state.js.map +1 -0
- package/dist/auth/theme-access.d.ts +10 -0
- package/dist/auth/theme-access.d.ts.map +1 -0
- package/dist/auth/theme-access.js +24 -0
- package/dist/auth/theme-access.js.map +1 -0
- package/dist/auth/verify.d.ts +44 -0
- package/dist/auth/verify.d.ts.map +1 -0
- package/dist/auth/verify.js +77 -0
- package/dist/auth/verify.js.map +1 -0
- package/dist/cli/credentials.d.ts +29 -0
- package/dist/cli/credentials.d.ts.map +1 -0
- package/dist/cli/credentials.js +66 -0
- package/dist/cli/credentials.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +36 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/login.d.ts +9 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +120 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/logout.d.ts +9 -0
- package/dist/cli/logout.d.ts.map +1 -0
- package/dist/cli/logout.js +18 -0
- package/dist/cli/logout.js.map +1 -0
- package/dist/cli/status.d.ts +9 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +31 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/data/component-registry.d.ts +30 -0
- package/dist/data/component-registry.d.ts.map +1 -0
- package/dist/data/component-registry.js +320 -0
- package/dist/data/component-registry.js.map +1 -0
- package/dist/data/examples/screen-examples.d.ts +38 -0
- package/dist/data/examples/screen-examples.d.ts.map +1 -0
- package/dist/data/examples/screen-examples.js +500 -0
- package/dist/data/examples/screen-examples.js.map +1 -0
- package/dist/data/hint-generator.d.ts +16 -0
- package/dist/data/hint-generator.d.ts.map +1 -0
- package/dist/data/hint-generator.js +298 -0
- package/dist/data/hint-generator.js.map +1 -0
- package/dist/data/recipe-resolver.d.ts +48 -0
- package/dist/data/recipe-resolver.d.ts.map +1 -0
- package/dist/data/recipe-resolver.js +226 -0
- package/dist/data/recipe-resolver.js.map +1 -0
- package/dist/data/template-matcher.d.ts +50 -0
- package/dist/data/template-matcher.d.ts.map +1 -0
- package/dist/data/template-matcher.js +240 -0
- package/dist/data/template-matcher.js.map +1 -0
- package/dist/generators/core-resolver.d.ts +56 -0
- package/dist/generators/core-resolver.d.ts.map +1 -0
- package/dist/generators/core-resolver.js +490 -0
- package/dist/generators/core-resolver.js.map +1 -0
- package/dist/generators/css-generator.d.ts +49 -0
- package/dist/generators/css-generator.d.ts.map +1 -0
- package/dist/generators/css-generator.js +294 -0
- package/dist/generators/css-generator.js.map +1 -0
- package/dist/generators/index.d.ts +13 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +16 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/llm-generator.d.ts +96 -0
- package/dist/generators/llm-generator.d.ts.map +1 -0
- package/dist/generators/llm-generator.js +296 -0
- package/dist/generators/llm-generator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +818 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/mcp-schemas.d.ts +4132 -0
- package/dist/schemas/mcp-schemas.d.ts.map +1 -0
- package/dist/schemas/mcp-schemas.js +946 -0
- package/dist/schemas/mcp-schemas.js.map +1 -0
- package/dist/storage/blueprint-storage.d.ts +68 -0
- package/dist/storage/blueprint-storage.d.ts.map +1 -0
- package/dist/storage/blueprint-storage.js +135 -0
- package/dist/storage/blueprint-storage.js.map +1 -0
- package/dist/storage/timestamp-manager.d.ts +32 -0
- package/dist/storage/timestamp-manager.d.ts.map +1 -0
- package/dist/storage/timestamp-manager.js +59 -0
- package/dist/storage/timestamp-manager.js.map +1 -0
- package/dist/tools/export-screen.d.ts +34 -0
- package/dist/tools/export-screen.d.ts.map +1 -0
- package/dist/tools/export-screen.js +344 -0
- package/dist/tools/export-screen.js.map +1 -0
- package/dist/tools/generate-blueprint.d.ts +15 -0
- package/dist/tools/generate-blueprint.d.ts.map +1 -0
- package/dist/tools/generate-blueprint.js +165 -0
- package/dist/tools/generate-blueprint.js.map +1 -0
- package/dist/tools/generate-screen.d.ts +13 -0
- package/dist/tools/generate-screen.d.ts.map +1 -0
- package/dist/tools/generate-screen.js +82 -0
- package/dist/tools/generate-screen.js.map +1 -0
- package/dist/tools/get-screen-generation-context.d.ts +11 -0
- package/dist/tools/get-screen-generation-context.d.ts.map +1 -0
- package/dist/tools/get-screen-generation-context.js +316 -0
- package/dist/tools/get-screen-generation-context.js.map +1 -0
- package/dist/tools/list-components.d.ts +15 -0
- package/dist/tools/list-components.d.ts.map +1 -0
- package/dist/tools/list-components.js +46 -0
- package/dist/tools/list-components.js.map +1 -0
- package/dist/tools/list-icon-libraries.d.ts +12 -0
- package/dist/tools/list-icon-libraries.d.ts.map +1 -0
- package/dist/tools/list-icon-libraries.js +48 -0
- package/dist/tools/list-icon-libraries.js.map +1 -0
- package/dist/tools/list-screen-templates.d.ts +15 -0
- package/dist/tools/list-screen-templates.d.ts.map +1 -0
- package/dist/tools/list-screen-templates.js +63 -0
- package/dist/tools/list-screen-templates.js.map +1 -0
- package/dist/tools/list-themes.d.ts +13 -0
- package/dist/tools/list-themes.d.ts.map +1 -0
- package/dist/tools/list-themes.js +42 -0
- package/dist/tools/list-themes.js.map +1 -0
- package/dist/tools/list-tokens.d.ts +13 -0
- package/dist/tools/list-tokens.d.ts.map +1 -0
- package/dist/tools/list-tokens.js +92 -0
- package/dist/tools/list-tokens.js.map +1 -0
- package/dist/tools/preview-component.d.ts +18 -0
- package/dist/tools/preview-component.d.ts.map +1 -0
- package/dist/tools/preview-component.js +178 -0
- package/dist/tools/preview-component.js.map +1 -0
- package/dist/tools/preview-icon-library.d.ts +13 -0
- package/dist/tools/preview-icon-library.d.ts.map +1 -0
- package/dist/tools/preview-icon-library.js +63 -0
- package/dist/tools/preview-icon-library.js.map +1 -0
- package/dist/tools/preview-screen-template.d.ts +18 -0
- package/dist/tools/preview-screen-template.d.ts.map +1 -0
- package/dist/tools/preview-screen-template.js +101 -0
- package/dist/tools/preview-screen-template.js.map +1 -0
- package/dist/tools/preview-theme.d.ts +15 -0
- package/dist/tools/preview-theme.d.ts.map +1 -0
- package/dist/tools/preview-theme.js +71 -0
- package/dist/tools/preview-theme.js.map +1 -0
- package/dist/tools/validate-environment.d.ts +37 -0
- package/dist/tools/validate-environment.d.ts.map +1 -0
- package/dist/tools/validate-environment.js +153 -0
- package/dist/tools/validate-environment.js.map +1 -0
- package/dist/tools/validate-screen-definition.d.ts +10 -0
- package/dist/tools/validate-screen-definition.d.ts.map +1 -0
- package/dist/tools/validate-screen-definition.js +463 -0
- package/dist/tools/validate-screen-definition.js.map +1 -0
- package/dist/tools/validate-screen.d.ts +13 -0
- package/dist/tools/validate-screen.d.ts.map +1 -0
- package/dist/tools/validate-screen.js +106 -0
- package/dist/tools/validate-screen.js.map +1 -0
- package/dist/utils/dependency-extractor.d.ts +13 -0
- package/dist/utils/dependency-extractor.d.ts.map +1 -0
- package/dist/utils/dependency-extractor.js +232 -0
- package/dist/utils/dependency-extractor.js.map +1 -0
- package/dist/utils/error-handler.d.ts +29 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +48 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +14 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/package-json-reader.d.ts +37 -0
- package/dist/utils/package-json-reader.d.ts.map +1 -0
- package/dist/utils/package-json-reader.js +108 -0
- package/dist/utils/package-json-reader.js.map +1 -0
- package/dist/utils/tailwind-config-reader.d.ts +23 -0
- package/dist/utils/tailwind-config-reader.d.ts.map +1 -0
- package/dist/utils/tailwind-config-reader.js +81 -0
- package/dist/utils/tailwind-config-reader.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List Tokens MCP Tool
|
|
3
|
+
* SPEC-LAYOUT-002 Phase 4: List available layout tokens from SPEC-LAYOUT-001
|
|
4
|
+
*/
|
|
5
|
+
import type { ListTokensInput, ListTokensOutput } from '../schemas/mcp-schemas.js';
|
|
6
|
+
/**
|
|
7
|
+
* List available layout tokens from @tekton-ui/core
|
|
8
|
+
*
|
|
9
|
+
* @param input - Token type filter and optional pattern filter
|
|
10
|
+
* @returns Categorized list of available tokens
|
|
11
|
+
*/
|
|
12
|
+
export declare function listTokensTool(input: ListTokensInput): Promise<ListTokensOutput>;
|
|
13
|
+
//# sourceMappingURL=list-tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-tokens.d.ts","sourceRoot":"","sources":["../../src/tools/list-tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AAwBlG;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6EtF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List Tokens MCP Tool
|
|
3
|
+
* SPEC-LAYOUT-002 Phase 4: List available layout tokens from SPEC-LAYOUT-001
|
|
4
|
+
*/
|
|
5
|
+
import { extractErrorMessage } from '../utils/error-handler.js';
|
|
6
|
+
/**
|
|
7
|
+
* Apply pattern filter to tokens
|
|
8
|
+
*
|
|
9
|
+
* @param tokens - Array of token metadata
|
|
10
|
+
* @param filter - Optional pattern filter (case-insensitive substring match)
|
|
11
|
+
* @returns Filtered tokens
|
|
12
|
+
*/
|
|
13
|
+
function applyFilter(tokens, filter) {
|
|
14
|
+
if (!filter) {
|
|
15
|
+
return tokens;
|
|
16
|
+
}
|
|
17
|
+
const lowerFilter = filter.toLowerCase();
|
|
18
|
+
return tokens.filter(token => token.id.toLowerCase().includes(lowerFilter) ||
|
|
19
|
+
token.name?.toLowerCase().includes(lowerFilter) ||
|
|
20
|
+
token.description?.toLowerCase().includes(lowerFilter));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* List available layout tokens from @tekton-ui/core
|
|
24
|
+
*
|
|
25
|
+
* @param input - Token type filter and optional pattern filter
|
|
26
|
+
* @returns Categorized list of available tokens
|
|
27
|
+
*/
|
|
28
|
+
export async function listTokensTool(input) {
|
|
29
|
+
try {
|
|
30
|
+
const { tokenType = 'all', filter } = input;
|
|
31
|
+
// Import token getters from @tekton-ui/core
|
|
32
|
+
const { getAllShellTokens, getAllMobileShellTokens, getAllPageLayoutTokens, getAllSectionPatternTokens, } = await import('@tekton-ui/core');
|
|
33
|
+
// Get tokens based on type
|
|
34
|
+
let shells = [];
|
|
35
|
+
let pages = [];
|
|
36
|
+
let sections = [];
|
|
37
|
+
if (tokenType === 'all' || tokenType === 'shell') {
|
|
38
|
+
// Get both web and mobile shell tokens (SPEC-LAYOUT-001 + SPEC-LAYOUT-004)
|
|
39
|
+
const webShellTokens = getAllShellTokens();
|
|
40
|
+
const mobileShellTokens = getAllMobileShellTokens();
|
|
41
|
+
const allShellTokens = [...webShellTokens, ...mobileShellTokens];
|
|
42
|
+
shells = allShellTokens.map(token => ({
|
|
43
|
+
id: token.id,
|
|
44
|
+
name: token.id.split('.').pop() || token.id, // Extract name from id
|
|
45
|
+
description: token.description,
|
|
46
|
+
platform: token.platform,
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
if (tokenType === 'all' || tokenType === 'page') {
|
|
50
|
+
const pageTokens = getAllPageLayoutTokens();
|
|
51
|
+
pages = pageTokens.map(token => ({
|
|
52
|
+
id: token.id,
|
|
53
|
+
name: token.id.split('.').pop() || token.id, // Extract name from id
|
|
54
|
+
description: token.description,
|
|
55
|
+
purpose: token.purpose,
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
if (tokenType === 'all' || tokenType === 'section') {
|
|
59
|
+
const sectionTokens = getAllSectionPatternTokens();
|
|
60
|
+
sections = sectionTokens.map(token => ({
|
|
61
|
+
id: token.id,
|
|
62
|
+
name: token.id.split('.').pop() || token.id, // Extract name from id
|
|
63
|
+
description: token.description,
|
|
64
|
+
type: token.type,
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
// Apply filter if provided
|
|
68
|
+
if (filter) {
|
|
69
|
+
shells = applyFilter(shells, filter);
|
|
70
|
+
pages = applyFilter(pages, filter);
|
|
71
|
+
sections = applyFilter(sections, filter);
|
|
72
|
+
}
|
|
73
|
+
const total = shells.length + pages.length + sections.length;
|
|
74
|
+
return {
|
|
75
|
+
success: true,
|
|
76
|
+
shells: shells.length > 0 ? shells : undefined,
|
|
77
|
+
pages: pages.length > 0 ? pages : undefined,
|
|
78
|
+
sections: sections.length > 0 ? sections : undefined,
|
|
79
|
+
metadata: {
|
|
80
|
+
total,
|
|
81
|
+
filtered: filter ? total : undefined,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
return {
|
|
87
|
+
success: false,
|
|
88
|
+
error: extractErrorMessage(error),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=list-tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-tokens.js","sourceRoot":"","sources":["../../src/tools/list-tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preview Component MCP Tool (SPEC-MCP-003)
|
|
3
|
+
* [TAG-MCP003-007] Preview component with detailed information
|
|
4
|
+
*
|
|
5
|
+
* Returns detailed component information including:
|
|
6
|
+
* - Props and variants
|
|
7
|
+
* - Sub-components
|
|
8
|
+
* - Import statements
|
|
9
|
+
* - Dependencies
|
|
10
|
+
* - Usage examples
|
|
11
|
+
*/
|
|
12
|
+
import type { PreviewComponentInput, PreviewComponentOutput } from '../schemas/mcp-schemas.js';
|
|
13
|
+
/**
|
|
14
|
+
* Preview a component with detailed information
|
|
15
|
+
* [TAG-MCP003-012] Component not found error handling
|
|
16
|
+
*/
|
|
17
|
+
export declare function previewComponentTool(input: PreviewComponentInput): Promise<PreviewComponentOutput>;
|
|
18
|
+
//# sourceMappingURL=preview-component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-component.d.ts","sourceRoot":"","sources":["../../src/tools/preview-component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EAIvB,MAAM,2BAA2B,CAAC;AAkInC;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CA+CjC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preview Component MCP Tool (SPEC-MCP-003)
|
|
3
|
+
* [TAG-MCP003-007] Preview component with detailed information
|
|
4
|
+
*
|
|
5
|
+
* Returns detailed component information including:
|
|
6
|
+
* - Props and variants
|
|
7
|
+
* - Sub-components
|
|
8
|
+
* - Import statements
|
|
9
|
+
* - Dependencies
|
|
10
|
+
* - Usage examples
|
|
11
|
+
*/
|
|
12
|
+
import { getComponentById, getAllComponents } from '../data/component-registry.js';
|
|
13
|
+
import { extractErrorMessage } from '../utils/error-handler.js';
|
|
14
|
+
/**
|
|
15
|
+
* Component details database
|
|
16
|
+
* Maps component IDs to their full specifications
|
|
17
|
+
*/
|
|
18
|
+
const COMPONENT_DETAILS = {
|
|
19
|
+
button: {
|
|
20
|
+
props: [
|
|
21
|
+
{
|
|
22
|
+
name: 'variant',
|
|
23
|
+
type: "'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'",
|
|
24
|
+
required: false,
|
|
25
|
+
defaultValue: "'default'",
|
|
26
|
+
description: 'Visual style variant',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'size',
|
|
30
|
+
type: "'default' | 'sm' | 'lg' | 'icon'",
|
|
31
|
+
required: false,
|
|
32
|
+
defaultValue: "'default'",
|
|
33
|
+
description: 'Button size',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'asChild',
|
|
37
|
+
type: 'boolean',
|
|
38
|
+
required: false,
|
|
39
|
+
defaultValue: 'false',
|
|
40
|
+
description: 'Render as child element',
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
variants: [
|
|
44
|
+
{ name: 'variant', value: 'default', description: 'Default blue button' },
|
|
45
|
+
{ name: 'variant', value: 'destructive', description: 'Red destructive action' },
|
|
46
|
+
{ name: 'variant', value: 'outline', description: 'Outlined button' },
|
|
47
|
+
{ name: 'variant', value: 'secondary', description: 'Secondary gray button' },
|
|
48
|
+
{ name: 'variant', value: 'ghost', description: 'Transparent ghost button' },
|
|
49
|
+
{ name: 'variant', value: 'link', description: 'Link-styled button' },
|
|
50
|
+
],
|
|
51
|
+
dependencies: {
|
|
52
|
+
internal: [],
|
|
53
|
+
external: ['@radix-ui/react-slot'],
|
|
54
|
+
},
|
|
55
|
+
examples: [
|
|
56
|
+
{
|
|
57
|
+
title: 'Basic Usage',
|
|
58
|
+
code: `import { Button } from '@tekton-ui/ui';\n\n<Button variant="default">Click me</Button>`,
|
|
59
|
+
description: 'Simple button with default variant',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
title: 'Destructive Action',
|
|
63
|
+
code: `<Button variant="destructive">Delete</Button>`,
|
|
64
|
+
description: 'Button for destructive actions',
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
accessibility: 'Supports keyboard navigation and ARIA attributes',
|
|
68
|
+
},
|
|
69
|
+
card: {
|
|
70
|
+
props: [
|
|
71
|
+
{
|
|
72
|
+
name: 'className',
|
|
73
|
+
type: 'string',
|
|
74
|
+
required: false,
|
|
75
|
+
description: 'Additional CSS classes',
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
subComponents: ['CardHeader', 'CardTitle', 'CardDescription', 'CardContent', 'CardFooter'],
|
|
79
|
+
dependencies: {
|
|
80
|
+
internal: [],
|
|
81
|
+
external: [],
|
|
82
|
+
},
|
|
83
|
+
examples: [
|
|
84
|
+
{
|
|
85
|
+
title: 'Basic Card',
|
|
86
|
+
code: `import { Card, CardHeader, CardTitle, CardContent } from '@tekton-ui/ui';\n\n<Card>\n <CardHeader>\n <CardTitle>Card Title</CardTitle>\n </CardHeader>\n <CardContent>Card content here</CardContent>\n</Card>`,
|
|
87
|
+
description: 'Card with header and content',
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
accessibility: 'Semantic HTML structure for screen readers',
|
|
91
|
+
},
|
|
92
|
+
dialog: {
|
|
93
|
+
props: [
|
|
94
|
+
{
|
|
95
|
+
name: 'open',
|
|
96
|
+
type: 'boolean',
|
|
97
|
+
required: false,
|
|
98
|
+
description: 'Controlled open state',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'onOpenChange',
|
|
102
|
+
type: '(open: boolean) => void',
|
|
103
|
+
required: false,
|
|
104
|
+
description: 'Callback when open state changes',
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
subComponents: [
|
|
108
|
+
'DialogTrigger',
|
|
109
|
+
'DialogContent',
|
|
110
|
+
'DialogHeader',
|
|
111
|
+
'DialogTitle',
|
|
112
|
+
'DialogDescription',
|
|
113
|
+
'DialogFooter',
|
|
114
|
+
'DialogClose',
|
|
115
|
+
],
|
|
116
|
+
dependencies: {
|
|
117
|
+
internal: [],
|
|
118
|
+
external: ['@radix-ui/react-dialog'],
|
|
119
|
+
},
|
|
120
|
+
examples: [
|
|
121
|
+
{
|
|
122
|
+
title: 'Basic Dialog',
|
|
123
|
+
code: `import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle } from '@tekton-ui/ui';\n\n<Dialog>\n <DialogTrigger asChild>\n <Button>Open</Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Dialog Title</DialogTitle>\n </DialogHeader>\n </DialogContent>\n</Dialog>`,
|
|
124
|
+
description: 'Modal dialog with trigger button',
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
accessibility: 'Focus trap, ESC to close, ARIA dialog role',
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Preview a component with detailed information
|
|
132
|
+
* [TAG-MCP003-012] Component not found error handling
|
|
133
|
+
*/
|
|
134
|
+
export async function previewComponentTool(input) {
|
|
135
|
+
try {
|
|
136
|
+
// Set default values for optional parameters
|
|
137
|
+
const includeExamples = input.includeExamples ?? true;
|
|
138
|
+
const includeDependencies = input.includeDependencies ?? true;
|
|
139
|
+
const componentMeta = getComponentById(input.componentId);
|
|
140
|
+
if (!componentMeta) {
|
|
141
|
+
// [TAG-MCP003-012] Return error with available components
|
|
142
|
+
const availableComponents = getAllComponents().map(c => c.id);
|
|
143
|
+
return {
|
|
144
|
+
success: false,
|
|
145
|
+
error: `Component not found: ${input.componentId}. Available components: ${availableComponents.join(', ')}`,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const details = COMPONENT_DETAILS[input.componentId];
|
|
149
|
+
// Build component preview
|
|
150
|
+
const component = {
|
|
151
|
+
id: componentMeta.id,
|
|
152
|
+
name: componentMeta.name,
|
|
153
|
+
category: componentMeta.category,
|
|
154
|
+
description: componentMeta.description,
|
|
155
|
+
tier: componentMeta.tier,
|
|
156
|
+
props: details?.props || [],
|
|
157
|
+
variants: includeExamples && details?.variants ? details.variants : undefined,
|
|
158
|
+
subComponents: details?.subComponents,
|
|
159
|
+
importStatement: details?.subComponents
|
|
160
|
+
? `import { ${componentMeta.name}, ${details.subComponents.join(', ')} } from '@tekton-ui/ui';`
|
|
161
|
+
: `import { ${componentMeta.name} } from '@tekton-ui/ui';`,
|
|
162
|
+
dependencies: includeDependencies ? details?.dependencies : undefined,
|
|
163
|
+
examples: includeExamples && details?.examples ? details.examples : undefined,
|
|
164
|
+
accessibility: details?.accessibility,
|
|
165
|
+
};
|
|
166
|
+
return {
|
|
167
|
+
success: true,
|
|
168
|
+
component,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
return {
|
|
173
|
+
success: false,
|
|
174
|
+
error: extractErrorMessage(error),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=preview-component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-component.js","sourceRoot":"","sources":["../../src/tools/preview-component.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: preview-icon-library
|
|
3
|
+
* Preview a specific icon library and retrieve its full data
|
|
4
|
+
* [SPEC-ICON-001]
|
|
5
|
+
*/
|
|
6
|
+
import type { PreviewIconLibraryInput, PreviewIconLibraryOutput } from '../schemas/mcp-schemas.js';
|
|
7
|
+
/**
|
|
8
|
+
* Preview an icon library and retrieve its full data
|
|
9
|
+
* @param input - Library ID to preview
|
|
10
|
+
* @returns Full icon library data
|
|
11
|
+
*/
|
|
12
|
+
export declare function previewIconLibraryTool(input: PreviewIconLibraryInput): Promise<PreviewIconLibraryOutput>;
|
|
13
|
+
//# sourceMappingURL=preview-icon-library.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-icon-library.d.ts","sourceRoot":"","sources":["../../src/tools/preview-icon-library.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAGnG;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAuDnC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: preview-icon-library
|
|
3
|
+
* Preview a specific icon library and retrieve its full data
|
|
4
|
+
* [SPEC-ICON-001]
|
|
5
|
+
*/
|
|
6
|
+
import { loadIconLibrary, iconLibraryExists } from '@tekton-ui/core';
|
|
7
|
+
import { info, error as logError } from '../utils/logger.js';
|
|
8
|
+
/**
|
|
9
|
+
* Preview an icon library and retrieve its full data
|
|
10
|
+
* @param input - Library ID to preview
|
|
11
|
+
* @returns Full icon library data
|
|
12
|
+
*/
|
|
13
|
+
export async function previewIconLibraryTool(input) {
|
|
14
|
+
const { libraryId } = input;
|
|
15
|
+
info(`preview-icon-library: Previewing library "${libraryId}"`);
|
|
16
|
+
// Check if library exists
|
|
17
|
+
if (!iconLibraryExists(libraryId)) {
|
|
18
|
+
logError(`preview-icon-library: Library "${libraryId}" not found`);
|
|
19
|
+
return {
|
|
20
|
+
success: false,
|
|
21
|
+
error: `Icon library "${libraryId}" not found. Use list-icon-libraries to see available libraries.`,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const library = loadIconLibrary(libraryId);
|
|
26
|
+
if (!library) {
|
|
27
|
+
return {
|
|
28
|
+
success: false,
|
|
29
|
+
error: `Failed to load icon library "${libraryId}"`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// Get first 20 icons as sample
|
|
33
|
+
const iconNames = Object.keys(library.icons);
|
|
34
|
+
const iconSample = iconNames.slice(0, 20);
|
|
35
|
+
info(`preview-icon-library: Successfully loaded library "${libraryId}"`);
|
|
36
|
+
return {
|
|
37
|
+
success: true,
|
|
38
|
+
library: {
|
|
39
|
+
id: library.id,
|
|
40
|
+
name: library.name,
|
|
41
|
+
description: library.description,
|
|
42
|
+
version: library.version,
|
|
43
|
+
license: library.license,
|
|
44
|
+
website: library.website,
|
|
45
|
+
totalIcons: library.totalIcons,
|
|
46
|
+
categories: library.categories,
|
|
47
|
+
sizeMapping: library.sizeMapping,
|
|
48
|
+
frameworks: library.frameworks,
|
|
49
|
+
defaultVariant: library.defaultVariant,
|
|
50
|
+
iconSample,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
56
|
+
logError(`preview-icon-library: Failed to preview library: ${errorMessage}`);
|
|
57
|
+
return {
|
|
58
|
+
success: false,
|
|
59
|
+
error: `Failed to preview icon library: ${errorMessage}`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=preview-icon-library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-icon-library.js","sourceRoot":"","sources":["../../src/tools/preview-icon-library.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAErE,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAA8B;IAE9B,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE5B,IAAI,CAAC,6CAA6C,SAAS,GAAG,CAAC,CAAC;IAEhE,0BAA0B;IAC1B,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,QAAQ,CAAC,kCAAkC,SAAS,aAAa,CAAC,CAAC;QACnE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,iBAAiB,SAAS,kEAAkE;SACpG,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QAE3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,gCAAgC,SAAS,GAAG;aACpD,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC,sDAAsD,SAAS,GAAG,CAAC,CAAC;QAEzE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,UAAU;aACX;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtE,QAAQ,CAAC,oDAAoD,YAAY,EAAE,CAAC,CAAC;QAC7E,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mCAAmC,YAAY,EAAE;SACzD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preview Screen Template MCP Tool (SPEC-MCP-003)
|
|
3
|
+
* [TAG-MCP003-009] Preview template with detailed structure
|
|
4
|
+
*
|
|
5
|
+
* Returns detailed template information including:
|
|
6
|
+
* - Skeleton structure (non-customizable)
|
|
7
|
+
* - Layout configuration (responsive breakpoints)
|
|
8
|
+
* - Customization boundaries (what AI can modify)
|
|
9
|
+
* - Required components
|
|
10
|
+
* - Example props
|
|
11
|
+
*/
|
|
12
|
+
import type { PreviewScreenTemplateInput, PreviewScreenTemplateOutput } from '../schemas/mcp-schemas.js';
|
|
13
|
+
/**
|
|
14
|
+
* Preview a screen template with detailed structure
|
|
15
|
+
* [TAG-MCP003-013] Template not found error handling
|
|
16
|
+
*/
|
|
17
|
+
export declare function previewScreenTemplateTool(input: PreviewScreenTemplateInput): Promise<PreviewScreenTemplateOutput>;
|
|
18
|
+
//# sourceMappingURL=preview-screen-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-screen-template.d.ts","sourceRoot":"","sources":["../../src/tools/preview-screen-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EACV,0BAA0B,EAC1B,2BAA2B,EAG5B,MAAM,2BAA2B,CAAC;AAGnC;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,2BAA2B,CAAC,CAuFtC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preview Screen Template MCP Tool (SPEC-MCP-003)
|
|
3
|
+
* [TAG-MCP003-009] Preview template with detailed structure
|
|
4
|
+
*
|
|
5
|
+
* Returns detailed template information including:
|
|
6
|
+
* - Skeleton structure (non-customizable)
|
|
7
|
+
* - Layout configuration (responsive breakpoints)
|
|
8
|
+
* - Customization boundaries (what AI can modify)
|
|
9
|
+
* - Required components
|
|
10
|
+
* - Example props
|
|
11
|
+
*/
|
|
12
|
+
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
13
|
+
// @ts-nocheck
|
|
14
|
+
import { templateRegistry } from '@tekton-ui/ui';
|
|
15
|
+
import { extractErrorMessage } from '../utils/error-handler.js';
|
|
16
|
+
/**
|
|
17
|
+
* Preview a screen template with detailed structure
|
|
18
|
+
* [TAG-MCP003-013] Template not found error handling
|
|
19
|
+
*/
|
|
20
|
+
export async function previewScreenTemplateTool(input) {
|
|
21
|
+
try {
|
|
22
|
+
// Set default value for optional parameter
|
|
23
|
+
const includeLayoutTokens = input.includeLayoutTokens ?? true;
|
|
24
|
+
const template = templateRegistry.get(input.templateId);
|
|
25
|
+
if (!template) {
|
|
26
|
+
// [TAG-MCP003-013] Return error with available templates
|
|
27
|
+
const availableTemplates = templateRegistry.getAll().map((t) => t.id);
|
|
28
|
+
return {
|
|
29
|
+
success: false,
|
|
30
|
+
error: `Template not found: ${input.templateId}. Available templates: ${availableTemplates.join(', ')}`,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Build skeleton structure
|
|
34
|
+
const skeleton = {
|
|
35
|
+
shell: template.skeleton.shell,
|
|
36
|
+
page: template.skeleton.page,
|
|
37
|
+
sections: template.skeleton.sections.map((s) => ({
|
|
38
|
+
id: s.id,
|
|
39
|
+
name: s.name,
|
|
40
|
+
slot: s.slot,
|
|
41
|
+
required: s.required,
|
|
42
|
+
})),
|
|
43
|
+
};
|
|
44
|
+
// Build layout configuration
|
|
45
|
+
const layout = {
|
|
46
|
+
type: template.layout.type,
|
|
47
|
+
responsive: includeLayoutTokens && template.layout.responsive
|
|
48
|
+
? {
|
|
49
|
+
mobile: {
|
|
50
|
+
padding: template.layout.responsive.mobile.padding,
|
|
51
|
+
gap: template.layout.responsive.mobile.gap,
|
|
52
|
+
columns: template.layout.responsive.mobile.columns,
|
|
53
|
+
},
|
|
54
|
+
tablet: {
|
|
55
|
+
padding: template.layout.responsive.tablet.padding,
|
|
56
|
+
gap: template.layout.responsive.tablet.gap,
|
|
57
|
+
columns: template.layout.responsive.tablet.columns,
|
|
58
|
+
},
|
|
59
|
+
desktop: {
|
|
60
|
+
padding: template.layout.responsive.desktop.padding,
|
|
61
|
+
gap: template.layout.responsive.desktop.gap,
|
|
62
|
+
columns: template.layout.responsive.desktop.columns,
|
|
63
|
+
},
|
|
64
|
+
}
|
|
65
|
+
: undefined,
|
|
66
|
+
};
|
|
67
|
+
// Build customization boundaries
|
|
68
|
+
const customizable = {
|
|
69
|
+
texts: template.customizable.texts,
|
|
70
|
+
optional: template.customizable.optional,
|
|
71
|
+
slots: template.customizable.slots,
|
|
72
|
+
};
|
|
73
|
+
// Build import statement
|
|
74
|
+
const importStatement = `import { ${template.name}Template } from '@tekton-ui/ui';`;
|
|
75
|
+
return {
|
|
76
|
+
success: true,
|
|
77
|
+
template: {
|
|
78
|
+
id: template.id,
|
|
79
|
+
name: template.name,
|
|
80
|
+
category: template.category,
|
|
81
|
+
description: template.description,
|
|
82
|
+
version: template.version,
|
|
83
|
+
skeleton,
|
|
84
|
+
layout,
|
|
85
|
+
customizable,
|
|
86
|
+
requiredComponents: template.requiredComponents,
|
|
87
|
+
importStatement,
|
|
88
|
+
created: template.created,
|
|
89
|
+
updated: template.updated,
|
|
90
|
+
tags: template.tags,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
return {
|
|
96
|
+
success: false,
|
|
97
|
+
error: extractErrorMessage(error),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=preview-screen-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-screen-template.js","sourceRoot":"","sources":["../../src/tools/preview-screen-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preview Theme MCP Tool (v2.1)
|
|
3
|
+
* SPEC-MCP-002: E-002 Theme Preview Request
|
|
4
|
+
* SPEC-DEPLOY-001: 인증된 사용자의 라이선스 보유 테마만 접근 가능
|
|
5
|
+
*/
|
|
6
|
+
import type { PreviewThemeInput, PreviewThemeOutput } from '../schemas/mcp-schemas.js';
|
|
7
|
+
/**
|
|
8
|
+
* Preview theme MCP tool implementation
|
|
9
|
+
* 인증된 사용자의 라이선스 보유 테마만 미리보기 가능
|
|
10
|
+
*
|
|
11
|
+
* @param input - Theme ID to preview
|
|
12
|
+
* @returns Full v2.1 theme data (MCP JSON-RPC format)
|
|
13
|
+
*/
|
|
14
|
+
export declare function previewThemeTool(input: PreviewThemeInput): Promise<PreviewThemeOutput>;
|
|
15
|
+
//# sourceMappingURL=preview-theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-theme.d.ts","sourceRoot":"","sources":["../../src/tools/preview-theme.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIvF;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0D5F"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preview Theme MCP Tool (v2.1)
|
|
3
|
+
* SPEC-MCP-002: E-002 Theme Preview Request
|
|
4
|
+
* SPEC-DEPLOY-001: 인증된 사용자의 라이선스 보유 테마만 접근 가능
|
|
5
|
+
*/
|
|
6
|
+
import { loadTheme, listThemes } from '@tekton-ui/core';
|
|
7
|
+
import { createThemeNotFoundError, extractErrorMessage } from '../utils/error-handler.js';
|
|
8
|
+
import { getAuthData } from '../auth/state.js';
|
|
9
|
+
/**
|
|
10
|
+
* Preview theme MCP tool implementation
|
|
11
|
+
* 인증된 사용자의 라이선스 보유 테마만 미리보기 가능
|
|
12
|
+
*
|
|
13
|
+
* @param input - Theme ID to preview
|
|
14
|
+
* @returns Full v2.1 theme data (MCP JSON-RPC format)
|
|
15
|
+
*/
|
|
16
|
+
export async function previewThemeTool(input) {
|
|
17
|
+
try {
|
|
18
|
+
const authData = getAuthData();
|
|
19
|
+
const themeId = input.themeId;
|
|
20
|
+
// 인증 + 라이선스 확인
|
|
21
|
+
if (!authData || !authData.valid) {
|
|
22
|
+
return {
|
|
23
|
+
success: false,
|
|
24
|
+
error: `Authentication required to preview themes. Run \`tekton-mcp login\` to authenticate.`,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// 라이선스 보유 확인
|
|
28
|
+
const licensedThemes = authData.themes?.licensed || [];
|
|
29
|
+
if (!licensedThemes.includes(themeId)) {
|
|
30
|
+
return {
|
|
31
|
+
success: false,
|
|
32
|
+
error: `Theme "${themeId}" is not included in your license. Please purchase this theme at https://tekton-ui.com.`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// @tekton-ui/core에서 테마 로드
|
|
36
|
+
const theme = loadTheme(themeId);
|
|
37
|
+
if (!theme) {
|
|
38
|
+
const availableThemes = listThemes().map((t) => t.id);
|
|
39
|
+
return createThemeNotFoundError(themeId, availableThemes);
|
|
40
|
+
}
|
|
41
|
+
// v2.1 테마 데이터 반환
|
|
42
|
+
return {
|
|
43
|
+
success: true,
|
|
44
|
+
theme: {
|
|
45
|
+
id: theme.id,
|
|
46
|
+
name: theme.name,
|
|
47
|
+
description: theme.description,
|
|
48
|
+
brandTone: theme.brandTone,
|
|
49
|
+
schemaVersion: theme.schemaVersion,
|
|
50
|
+
designDNA: theme.designDNA,
|
|
51
|
+
tokens: {
|
|
52
|
+
atomic: theme.tokens.atomic,
|
|
53
|
+
semantic: theme.tokens.semantic,
|
|
54
|
+
component: theme.tokens.component,
|
|
55
|
+
recipes: theme.tokens.recipes,
|
|
56
|
+
},
|
|
57
|
+
stateLayer: theme.stateLayer,
|
|
58
|
+
motion: theme.motion,
|
|
59
|
+
elevation: theme.elevation,
|
|
60
|
+
typography: theme.typography,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
error: extractErrorMessage(error),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=preview-theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-theme.js","sourceRoot":"","sources":["../../src/tools/preview-theme.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAwB;IAC7D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAE9B,eAAe;QACf,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,sFAAsF;aAC9F,CAAC;QACJ,CAAC;QAED,aAAa;QACb,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;QACvD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,UAAU,OAAO,yFAAyF;aAClH,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,eAAe,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtE,OAAO,wBAAwB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAC5D,CAAC;QAED,iBAAiB;QACjB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK,EAAE;gBACL,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE;oBACN,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;oBAC3B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;oBAC/B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;oBACjC,OAAO,EAAG,KAAK,CAAC,MAAc,CAAC,OAAO;iBACvC;gBACD,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;SAClC,CAAC;IACJ,CAAC;AACH,CAAC"}
|