@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,490 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Resolver for Tier 1 Export
|
|
3
|
+
* SPEC-COMPONENT-001-D: Hybrid Export System
|
|
4
|
+
*
|
|
5
|
+
* Tier 1: UI 라이브러리에서 컴포넌트 코드를 직접 가져옴
|
|
6
|
+
* - @tekton-ui/ui 패키지의 실제 구현을 참조
|
|
7
|
+
* - 사전 정의된 컴포넌트 템플릿 제공
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync, existsSync } from 'fs';
|
|
10
|
+
import { resolve, dirname } from 'path';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
// __dirname equivalent for ES modules
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = dirname(__filename);
|
|
15
|
+
/**
|
|
16
|
+
* Tier 1 예제 컴포넌트
|
|
17
|
+
* @tekton-ui/ui 컴포넌트를 사용하는 예제 코드
|
|
18
|
+
*/
|
|
19
|
+
const TIER1_EXAMPLES = {
|
|
20
|
+
Button: `import { Button } from '@tekton-ui/ui';
|
|
21
|
+
|
|
22
|
+
export function ButtonExample() {
|
|
23
|
+
return (
|
|
24
|
+
<div className="flex gap-4">
|
|
25
|
+
<Button variant="default">Default</Button>
|
|
26
|
+
<Button variant="secondary">Secondary</Button>
|
|
27
|
+
<Button variant="outline">Outline</Button>
|
|
28
|
+
<Button variant="ghost">Ghost</Button>
|
|
29
|
+
<Button variant="destructive">Destructive</Button>
|
|
30
|
+
<Button variant="link">Link</Button>
|
|
31
|
+
</div>
|
|
32
|
+
);
|
|
33
|
+
}`,
|
|
34
|
+
Input: `import { Input } from '@tekton-ui/ui';
|
|
35
|
+
|
|
36
|
+
export function InputExample() {
|
|
37
|
+
return (
|
|
38
|
+
<div className="flex flex-col gap-4 max-w-md">
|
|
39
|
+
<Input placeholder="Enter text..." />
|
|
40
|
+
<Input type="email" placeholder="Email address" />
|
|
41
|
+
<Input type="password" placeholder="Password" />
|
|
42
|
+
<Input disabled placeholder="Disabled input" />
|
|
43
|
+
</div>
|
|
44
|
+
);
|
|
45
|
+
}`,
|
|
46
|
+
Card: `import {
|
|
47
|
+
Card,
|
|
48
|
+
CardHeader,
|
|
49
|
+
CardTitle,
|
|
50
|
+
CardDescription,
|
|
51
|
+
CardContent,
|
|
52
|
+
CardFooter,
|
|
53
|
+
} from '@tekton-ui/ui';
|
|
54
|
+
import { Button } from '@tekton-ui/ui';
|
|
55
|
+
|
|
56
|
+
export function CardExample() {
|
|
57
|
+
return (
|
|
58
|
+
<Card className="w-[350px]">
|
|
59
|
+
<CardHeader>
|
|
60
|
+
<CardTitle>Card Title</CardTitle>
|
|
61
|
+
<CardDescription>Card description goes here</CardDescription>
|
|
62
|
+
</CardHeader>
|
|
63
|
+
<CardContent>
|
|
64
|
+
<p>Card content with any components</p>
|
|
65
|
+
</CardContent>
|
|
66
|
+
<CardFooter className="flex justify-between">
|
|
67
|
+
<Button variant="outline">Cancel</Button>
|
|
68
|
+
<Button>Submit</Button>
|
|
69
|
+
</CardFooter>
|
|
70
|
+
</Card>
|
|
71
|
+
);
|
|
72
|
+
}`,
|
|
73
|
+
Avatar: `import { Avatar, AvatarImage, AvatarFallback } from '@tekton-ui/ui';
|
|
74
|
+
|
|
75
|
+
export function AvatarExample() {
|
|
76
|
+
return (
|
|
77
|
+
<div className="flex gap-4">
|
|
78
|
+
<Avatar>
|
|
79
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="User" />
|
|
80
|
+
<AvatarFallback>CN</AvatarFallback>
|
|
81
|
+
</Avatar>
|
|
82
|
+
<Avatar>
|
|
83
|
+
<AvatarFallback>JD</AvatarFallback>
|
|
84
|
+
</Avatar>
|
|
85
|
+
</div>
|
|
86
|
+
);
|
|
87
|
+
}`,
|
|
88
|
+
Badge: `import { Badge } from '@tekton-ui/ui';
|
|
89
|
+
|
|
90
|
+
export function BadgeExample() {
|
|
91
|
+
return (
|
|
92
|
+
<div className="flex gap-2">
|
|
93
|
+
<Badge>Default</Badge>
|
|
94
|
+
<Badge variant="secondary">Secondary</Badge>
|
|
95
|
+
<Badge variant="outline">Outline</Badge>
|
|
96
|
+
<Badge variant="destructive">Destructive</Badge>
|
|
97
|
+
</div>
|
|
98
|
+
);
|
|
99
|
+
}`,
|
|
100
|
+
Checkbox: `import { Checkbox } from '@tekton-ui/ui';
|
|
101
|
+
|
|
102
|
+
export function CheckboxExample() {
|
|
103
|
+
return (
|
|
104
|
+
<div className="flex items-center space-x-2">
|
|
105
|
+
<Checkbox id="terms" />
|
|
106
|
+
<label htmlFor="terms">Accept terms and conditions</label>
|
|
107
|
+
</div>
|
|
108
|
+
);
|
|
109
|
+
}`,
|
|
110
|
+
Progress: `import { Progress } from '@tekton-ui/ui';
|
|
111
|
+
|
|
112
|
+
export function ProgressExample() {
|
|
113
|
+
return (
|
|
114
|
+
<div className="w-full max-w-md space-y-4">
|
|
115
|
+
<Progress value={33} />
|
|
116
|
+
<Progress value={66} />
|
|
117
|
+
<Progress value={100} />
|
|
118
|
+
</div>
|
|
119
|
+
);
|
|
120
|
+
}`,
|
|
121
|
+
Switch: `import { Switch } from '@tekton-ui/ui';
|
|
122
|
+
|
|
123
|
+
export function SwitchExample() {
|
|
124
|
+
return (
|
|
125
|
+
<div className="flex items-center space-x-2">
|
|
126
|
+
<Switch id="airplane-mode" />
|
|
127
|
+
<label htmlFor="airplane-mode">Airplane Mode</label>
|
|
128
|
+
</div>
|
|
129
|
+
);
|
|
130
|
+
}`,
|
|
131
|
+
Slider: `import { Slider } from '@tekton-ui/ui';
|
|
132
|
+
|
|
133
|
+
export function SliderExample() {
|
|
134
|
+
return (
|
|
135
|
+
<div className="w-full max-w-md">
|
|
136
|
+
<Slider defaultValue={[50]} max={100} step={1} />
|
|
137
|
+
</div>
|
|
138
|
+
);
|
|
139
|
+
}`,
|
|
140
|
+
Modal: `import {
|
|
141
|
+
Modal,
|
|
142
|
+
ModalTrigger,
|
|
143
|
+
ModalContent,
|
|
144
|
+
ModalHeader,
|
|
145
|
+
ModalTitle,
|
|
146
|
+
ModalDescription,
|
|
147
|
+
ModalFooter,
|
|
148
|
+
ModalClose,
|
|
149
|
+
} from '@tekton-ui/ui';
|
|
150
|
+
import { Button } from '@tekton-ui/ui';
|
|
151
|
+
|
|
152
|
+
export function ModalExample() {
|
|
153
|
+
return (
|
|
154
|
+
<Modal>
|
|
155
|
+
<ModalTrigger asChild>
|
|
156
|
+
<Button variant="outline">Open Modal</Button>
|
|
157
|
+
</ModalTrigger>
|
|
158
|
+
<ModalContent>
|
|
159
|
+
<ModalHeader>
|
|
160
|
+
<ModalTitle>Modal Title</ModalTitle>
|
|
161
|
+
<ModalDescription>
|
|
162
|
+
Modal description text goes here.
|
|
163
|
+
</ModalDescription>
|
|
164
|
+
</ModalHeader>
|
|
165
|
+
<div className="py-4">
|
|
166
|
+
<p>Modal content</p>
|
|
167
|
+
</div>
|
|
168
|
+
<ModalFooter>
|
|
169
|
+
<ModalClose asChild>
|
|
170
|
+
<Button variant="outline">Cancel</Button>
|
|
171
|
+
</ModalClose>
|
|
172
|
+
<Button>Confirm</Button>
|
|
173
|
+
</ModalFooter>
|
|
174
|
+
</ModalContent>
|
|
175
|
+
</Modal>
|
|
176
|
+
);
|
|
177
|
+
}`,
|
|
178
|
+
Dropdown: `import {
|
|
179
|
+
Dropdown,
|
|
180
|
+
DropdownTrigger,
|
|
181
|
+
DropdownContent,
|
|
182
|
+
DropdownItem,
|
|
183
|
+
DropdownSeparator,
|
|
184
|
+
} from '@tekton-ui/ui';
|
|
185
|
+
import { Button } from '@tekton-ui/ui';
|
|
186
|
+
|
|
187
|
+
export function DropdownExample() {
|
|
188
|
+
return (
|
|
189
|
+
<Dropdown>
|
|
190
|
+
<DropdownTrigger asChild>
|
|
191
|
+
<Button variant="outline">Open Menu</Button>
|
|
192
|
+
</DropdownTrigger>
|
|
193
|
+
<DropdownContent>
|
|
194
|
+
<DropdownItem>Profile</DropdownItem>
|
|
195
|
+
<DropdownItem>Settings</DropdownItem>
|
|
196
|
+
<DropdownSeparator />
|
|
197
|
+
<DropdownItem>Logout</DropdownItem>
|
|
198
|
+
</DropdownContent>
|
|
199
|
+
</Dropdown>
|
|
200
|
+
);
|
|
201
|
+
}`,
|
|
202
|
+
Tabs: `import { Tabs, TabsList, TabsTrigger, TabsContent } from '@tekton-ui/ui';
|
|
203
|
+
|
|
204
|
+
export function TabsExample() {
|
|
205
|
+
return (
|
|
206
|
+
<Tabs defaultValue="account" className="w-[400px]">
|
|
207
|
+
<TabsList>
|
|
208
|
+
<TabsTrigger value="account">Account</TabsTrigger>
|
|
209
|
+
<TabsTrigger value="password">Password</TabsTrigger>
|
|
210
|
+
</TabsList>
|
|
211
|
+
<TabsContent value="account">
|
|
212
|
+
<p>Account settings content</p>
|
|
213
|
+
</TabsContent>
|
|
214
|
+
<TabsContent value="password">
|
|
215
|
+
<p>Password settings content</p>
|
|
216
|
+
</TabsContent>
|
|
217
|
+
</Tabs>
|
|
218
|
+
);
|
|
219
|
+
}`,
|
|
220
|
+
Table: `import {
|
|
221
|
+
Table,
|
|
222
|
+
TableHeader,
|
|
223
|
+
TableBody,
|
|
224
|
+
TableRow,
|
|
225
|
+
TableHead,
|
|
226
|
+
TableCell,
|
|
227
|
+
} from '@tekton-ui/ui';
|
|
228
|
+
|
|
229
|
+
export function TableExample() {
|
|
230
|
+
return (
|
|
231
|
+
<Table>
|
|
232
|
+
<TableHeader>
|
|
233
|
+
<TableRow>
|
|
234
|
+
<TableHead>Name</TableHead>
|
|
235
|
+
<TableHead>Email</TableHead>
|
|
236
|
+
<TableHead>Role</TableHead>
|
|
237
|
+
</TableRow>
|
|
238
|
+
</TableHeader>
|
|
239
|
+
<TableBody>
|
|
240
|
+
<TableRow>
|
|
241
|
+
<TableCell>John Doe</TableCell>
|
|
242
|
+
<TableCell>john@example.com</TableCell>
|
|
243
|
+
<TableCell>Admin</TableCell>
|
|
244
|
+
</TableRow>
|
|
245
|
+
<TableRow>
|
|
246
|
+
<TableCell>Jane Smith</TableCell>
|
|
247
|
+
<TableCell>jane@example.com</TableCell>
|
|
248
|
+
<TableCell>User</TableCell>
|
|
249
|
+
</TableRow>
|
|
250
|
+
</TableBody>
|
|
251
|
+
</Table>
|
|
252
|
+
);
|
|
253
|
+
}`,
|
|
254
|
+
Form: `import {
|
|
255
|
+
Form,
|
|
256
|
+
FormField,
|
|
257
|
+
FormLabel,
|
|
258
|
+
FormControl,
|
|
259
|
+
FormMessage,
|
|
260
|
+
} from '@tekton-ui/ui';
|
|
261
|
+
import { Input } from '@tekton-ui/ui';
|
|
262
|
+
import { Button } from '@tekton-ui/ui';
|
|
263
|
+
|
|
264
|
+
export function FormExample() {
|
|
265
|
+
return (
|
|
266
|
+
<Form onSubmit={(e) => e.preventDefault()}>
|
|
267
|
+
<FormField>
|
|
268
|
+
<FormLabel>Email</FormLabel>
|
|
269
|
+
<FormControl>
|
|
270
|
+
<Input type="email" placeholder="Enter email" />
|
|
271
|
+
</FormControl>
|
|
272
|
+
<FormMessage>Please enter a valid email</FormMessage>
|
|
273
|
+
</FormField>
|
|
274
|
+
<FormField>
|
|
275
|
+
<FormLabel>Password</FormLabel>
|
|
276
|
+
<FormControl>
|
|
277
|
+
<Input type="password" placeholder="Enter password" />
|
|
278
|
+
</FormControl>
|
|
279
|
+
</FormField>
|
|
280
|
+
<Button type="submit">Submit</Button>
|
|
281
|
+
</Form>
|
|
282
|
+
);
|
|
283
|
+
}`,
|
|
284
|
+
Text: `import { Text } from '@tekton-ui/ui';
|
|
285
|
+
|
|
286
|
+
export function TextExample() {
|
|
287
|
+
return (
|
|
288
|
+
<div className="space-y-2">
|
|
289
|
+
<Text variant="default">Default text</Text>
|
|
290
|
+
<Text variant="muted">Muted text</Text>
|
|
291
|
+
<Text variant="lead">Lead text for emphasis</Text>
|
|
292
|
+
<Text variant="large">Large text</Text>
|
|
293
|
+
<Text variant="small">Small text</Text>
|
|
294
|
+
</div>
|
|
295
|
+
);
|
|
296
|
+
}`,
|
|
297
|
+
Heading: `import { Heading } from '@tekton-ui/ui';
|
|
298
|
+
|
|
299
|
+
export function HeadingExample() {
|
|
300
|
+
return (
|
|
301
|
+
<div className="space-y-4">
|
|
302
|
+
<Heading level={1}>Heading 1</Heading>
|
|
303
|
+
<Heading level={2}>Heading 2</Heading>
|
|
304
|
+
<Heading level={3}>Heading 3</Heading>
|
|
305
|
+
<Heading level={4}>Heading 4</Heading>
|
|
306
|
+
</div>
|
|
307
|
+
);
|
|
308
|
+
}`,
|
|
309
|
+
Link: `import { Link } from '@tekton-ui/ui';
|
|
310
|
+
|
|
311
|
+
export function LinkExample() {
|
|
312
|
+
return (
|
|
313
|
+
<div className="space-y-2">
|
|
314
|
+
<Link href="#">Default link</Link>
|
|
315
|
+
<Link href="#" variant="muted">Muted link</Link>
|
|
316
|
+
</div>
|
|
317
|
+
);
|
|
318
|
+
}`,
|
|
319
|
+
List: `import { List, ListItem } from '@tekton-ui/ui';
|
|
320
|
+
|
|
321
|
+
export function ListExample() {
|
|
322
|
+
return (
|
|
323
|
+
<List>
|
|
324
|
+
<ListItem>First item</ListItem>
|
|
325
|
+
<ListItem>Second item</ListItem>
|
|
326
|
+
<ListItem>Third item</ListItem>
|
|
327
|
+
</List>
|
|
328
|
+
);
|
|
329
|
+
}`,
|
|
330
|
+
Image: `import { Image } from '@tekton-ui/ui';
|
|
331
|
+
|
|
332
|
+
export function ImageExample() {
|
|
333
|
+
return (
|
|
334
|
+
<Image
|
|
335
|
+
src="https://via.placeholder.com/300x200"
|
|
336
|
+
alt="Placeholder image"
|
|
337
|
+
className="rounded-md"
|
|
338
|
+
/>
|
|
339
|
+
);
|
|
340
|
+
}`,
|
|
341
|
+
RadioGroup: `import { RadioGroup, RadioGroupItem } from '@tekton-ui/ui';
|
|
342
|
+
|
|
343
|
+
export function RadioGroupExample() {
|
|
344
|
+
return (
|
|
345
|
+
<RadioGroup defaultValue="option-1">
|
|
346
|
+
<div className="flex items-center space-x-2">
|
|
347
|
+
<RadioGroupItem value="option-1" id="option-1" />
|
|
348
|
+
<label htmlFor="option-1">Option 1</label>
|
|
349
|
+
</div>
|
|
350
|
+
<div className="flex items-center space-x-2">
|
|
351
|
+
<RadioGroupItem value="option-2" id="option-2" />
|
|
352
|
+
<label htmlFor="option-2">Option 2</label>
|
|
353
|
+
</div>
|
|
354
|
+
</RadioGroup>
|
|
355
|
+
);
|
|
356
|
+
}`,
|
|
357
|
+
};
|
|
358
|
+
/**
|
|
359
|
+
* @tekton-ui/ui에서 지원하는 컴포넌트 목록
|
|
360
|
+
*/
|
|
361
|
+
export const TIER1_COMPONENTS = Object.keys(TIER1_EXAMPLES);
|
|
362
|
+
/**
|
|
363
|
+
* Tier 1 컴포넌트인지 확인
|
|
364
|
+
*/
|
|
365
|
+
export function isTier1Component(componentName) {
|
|
366
|
+
return TIER1_COMPONENTS.includes(componentName);
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Tier 1 예제 코드 가져오기
|
|
370
|
+
*
|
|
371
|
+
* @param componentName - 컴포넌트 이름
|
|
372
|
+
* @returns 해당 컴포넌트의 예제 코드
|
|
373
|
+
*/
|
|
374
|
+
export function getTier1Example(componentName) {
|
|
375
|
+
const example = TIER1_EXAMPLES[componentName];
|
|
376
|
+
if (!example) {
|
|
377
|
+
return {
|
|
378
|
+
success: false,
|
|
379
|
+
error: `No Tier 1 example found for component: ${componentName}`,
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
return {
|
|
383
|
+
success: true,
|
|
384
|
+
code: example,
|
|
385
|
+
componentName,
|
|
386
|
+
source: 'tier1-example',
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* @tekton-ui/ui 패키지에서 실제 컴포넌트 소스 코드 가져오기
|
|
391
|
+
*
|
|
392
|
+
* @param componentName - 컴포넌트 이름
|
|
393
|
+
* @returns 컴포넌트 소스 코드
|
|
394
|
+
*/
|
|
395
|
+
export function getTier1Source(componentName) {
|
|
396
|
+
try {
|
|
397
|
+
// @tekton-ui/ui 패키지 경로 탐색
|
|
398
|
+
const uiPackagePath = resolve(__dirname, '../../../../ui/src');
|
|
399
|
+
// 컴포넌트 파일 매핑
|
|
400
|
+
const componentPaths = {
|
|
401
|
+
Button: 'primitives/button.tsx',
|
|
402
|
+
Input: 'primitives/input.tsx',
|
|
403
|
+
Checkbox: 'primitives/checkbox.tsx',
|
|
404
|
+
Switch: 'primitives/switch.tsx',
|
|
405
|
+
Slider: 'primitives/slider.tsx',
|
|
406
|
+
Progress: 'primitives/progress.tsx',
|
|
407
|
+
Avatar: 'primitives/avatar.tsx',
|
|
408
|
+
Badge: 'primitives/badge.tsx',
|
|
409
|
+
Text: 'primitives/text.tsx',
|
|
410
|
+
Heading: 'primitives/heading.tsx',
|
|
411
|
+
Link: 'primitives/link.tsx',
|
|
412
|
+
List: 'primitives/list.tsx',
|
|
413
|
+
Image: 'primitives/image.tsx',
|
|
414
|
+
Radio: 'primitives/radio.tsx',
|
|
415
|
+
RadioGroup: 'primitives/radio.tsx',
|
|
416
|
+
Card: 'components/card.tsx',
|
|
417
|
+
Modal: 'components/modal.tsx',
|
|
418
|
+
Dropdown: 'components/dropdown.tsx',
|
|
419
|
+
Form: 'components/form.tsx',
|
|
420
|
+
Tabs: 'components/tabs.tsx',
|
|
421
|
+
Table: 'components/table.tsx',
|
|
422
|
+
};
|
|
423
|
+
const relativePath = componentPaths[componentName];
|
|
424
|
+
if (!relativePath) {
|
|
425
|
+
return {
|
|
426
|
+
success: false,
|
|
427
|
+
error: `Component not found in mapping: ${componentName}`,
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
const fullPath = resolve(uiPackagePath, relativePath);
|
|
431
|
+
if (!existsSync(fullPath)) {
|
|
432
|
+
return {
|
|
433
|
+
success: false,
|
|
434
|
+
error: `Component source file not found: ${fullPath}`,
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
const sourceCode = readFileSync(fullPath, 'utf-8');
|
|
438
|
+
return {
|
|
439
|
+
success: true,
|
|
440
|
+
code: sourceCode,
|
|
441
|
+
componentName,
|
|
442
|
+
source: 'tier1-ui',
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
return {
|
|
447
|
+
success: false,
|
|
448
|
+
error: error instanceof Error ? error.message : 'Unknown error reading component source',
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Tier 1에서 컴포넌트 해결 (예제 우선, 소스 fallback)
|
|
454
|
+
*
|
|
455
|
+
* @param componentName - 컴포넌트 이름
|
|
456
|
+
* @param preferSource - true면 소스 코드 우선, false면 예제 우선
|
|
457
|
+
* @returns 컴포넌트 해결 결과
|
|
458
|
+
*/
|
|
459
|
+
export function resolveFromTier1(componentName, preferSource = false) {
|
|
460
|
+
if (!isTier1Component(componentName)) {
|
|
461
|
+
return {
|
|
462
|
+
success: false,
|
|
463
|
+
error: `Component "${componentName}" is not a Tier 1 component. Available: ${TIER1_COMPONENTS.join(', ')}`,
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
if (preferSource) {
|
|
467
|
+
const sourceResult = getTier1Source(componentName);
|
|
468
|
+
if (sourceResult.success) {
|
|
469
|
+
return sourceResult;
|
|
470
|
+
}
|
|
471
|
+
// Fallback to example
|
|
472
|
+
return getTier1Example(componentName);
|
|
473
|
+
}
|
|
474
|
+
// Default: example first
|
|
475
|
+
return getTier1Example(componentName);
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* 여러 컴포넌트 해결
|
|
479
|
+
*
|
|
480
|
+
* @param componentNames - 컴포넌트 이름 배열
|
|
481
|
+
* @returns 각 컴포넌트의 해결 결과
|
|
482
|
+
*/
|
|
483
|
+
export function resolveMultipleFromTier1(componentNames) {
|
|
484
|
+
const results = new Map();
|
|
485
|
+
for (const name of componentNames) {
|
|
486
|
+
results.set(name, resolveFromTier1(name));
|
|
487
|
+
}
|
|
488
|
+
return results;
|
|
489
|
+
}
|
|
490
|
+
//# sourceMappingURL=core-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-resolver.js","sourceRoot":"","sources":["../../src/generators/core-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSS Generator for MCP Server (v2.1)
|
|
3
|
+
* SPEC-COMPONENT-001-D: Hybrid Export System
|
|
4
|
+
*
|
|
5
|
+
* Generates CSS Variables from ThemeV2 (v2.1 theme schema)
|
|
6
|
+
*/
|
|
7
|
+
import { type ThemeV2 } from '@tekton-ui/core';
|
|
8
|
+
/**
|
|
9
|
+
* CSS 생성 결과 타입
|
|
10
|
+
*/
|
|
11
|
+
export interface CSSGenerationResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
css?: string;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* ThemeV2 (v2.1)에서 CSS Variables 생성
|
|
18
|
+
*
|
|
19
|
+
* @param theme - ThemeV2 객체
|
|
20
|
+
* @returns CSS 생성 결과
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const theme = loadTheme('atlantic-magazine-v1');
|
|
25
|
+
* if (theme) {
|
|
26
|
+
* const result = generateCSS(theme);
|
|
27
|
+
* if (result.success) {
|
|
28
|
+
* console.log(result.css);
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateCSS(theme: ThemeV2): CSSGenerationResult;
|
|
34
|
+
/**
|
|
35
|
+
* 테마 ID로 CSS 생성
|
|
36
|
+
*
|
|
37
|
+
* @param themeId - 테마 ID
|
|
38
|
+
* @returns CSS 생성 결과
|
|
39
|
+
*/
|
|
40
|
+
export declare function generateCSSFromThemeId(themeId: string): CSSGenerationResult;
|
|
41
|
+
/**
|
|
42
|
+
* CSS Variables만 추출 (전체 CSS 대신)
|
|
43
|
+
*
|
|
44
|
+
* @param theme - ThemeV2 객체
|
|
45
|
+
* @returns CSS Variables 객체 (key-value 쌍)
|
|
46
|
+
*/
|
|
47
|
+
export declare function extractCSSVariables(theme: ThemeV2): Record<string, string>;
|
|
48
|
+
export type { ThemeV2 };
|
|
49
|
+
//# sourceMappingURL=css-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-generator.d.ts","sourceRoot":"","sources":["../../src/generators/css-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAyB,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAwP/D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAS3E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiB1E;AAGD,YAAY,EAAE,OAAO,EAAE,CAAC"}
|