mcp-elements 0.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.
@@ -0,0 +1,381 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/registry/registry.json
4
+ var registry_default = {
5
+ meta: {
6
+ baseUrl: "https://raw.githubusercontent.com/mcp-elements/ui/main/packages",
7
+ sharedCoreDeps: ["core/src/utils/cn.ts"]
8
+ },
9
+ components: {
10
+ button: {
11
+ name: "button",
12
+ type: "css-only",
13
+ files: {
14
+ css: "css/components/button.css",
15
+ react: "react/src/button.tsx",
16
+ angular: "angular/src/button.component.ts"
17
+ },
18
+ dependencies: { internal: [], npm: {} }
19
+ },
20
+ badge: {
21
+ name: "badge",
22
+ type: "css-only",
23
+ files: {
24
+ css: "css/components/badge.css",
25
+ react: "react/src/badge.tsx",
26
+ angular: "angular/src/badge.component.ts"
27
+ },
28
+ dependencies: { internal: [], npm: {} }
29
+ },
30
+ card: {
31
+ name: "card",
32
+ type: "css-only",
33
+ files: {
34
+ css: "css/components/card.css",
35
+ react: "react/src/card.tsx",
36
+ angular: "angular/src/card.component.ts"
37
+ },
38
+ dependencies: { internal: [], npm: {} }
39
+ },
40
+ input: {
41
+ name: "input",
42
+ type: "css-only",
43
+ files: {
44
+ css: "css/components/input.css",
45
+ react: "react/src/input.tsx",
46
+ angular: "angular/src/input.component.ts"
47
+ },
48
+ dependencies: { internal: [], npm: {} }
49
+ },
50
+ textarea: {
51
+ name: "textarea",
52
+ type: "css-only",
53
+ files: {
54
+ css: "css/components/textarea.css",
55
+ react: "react/src/textarea.tsx",
56
+ angular: "angular/src/textarea.component.ts"
57
+ },
58
+ dependencies: { internal: [], npm: {} }
59
+ },
60
+ avatar: {
61
+ name: "avatar",
62
+ type: "css-only",
63
+ files: {
64
+ css: "css/components/avatar.css",
65
+ react: "react/src/avatar.tsx",
66
+ angular: "angular/src/avatar.component.ts"
67
+ },
68
+ dependencies: { internal: [], npm: {} }
69
+ },
70
+ separator: {
71
+ name: "separator",
72
+ type: "css-only",
73
+ files: {
74
+ css: "css/components/separator.css",
75
+ react: "react/src/separator.tsx",
76
+ angular: "angular/src/separator.component.ts"
77
+ },
78
+ dependencies: { internal: [], npm: {} }
79
+ },
80
+ skeleton: {
81
+ name: "skeleton",
82
+ type: "css-only",
83
+ files: {
84
+ css: "css/components/skeleton.css",
85
+ react: "react/src/skeleton.tsx",
86
+ angular: "angular/src/skeleton.component.ts"
87
+ },
88
+ dependencies: { internal: [], npm: {} }
89
+ },
90
+ dialog: {
91
+ name: "dialog",
92
+ type: "interactive",
93
+ files: {
94
+ css: "css/components/dialog.css",
95
+ core: "core/src/dialog.ts",
96
+ react: ["react/src/dialog.tsx", "react/src/hooks/use-dialog.ts"],
97
+ angular: "angular/src/dialog.component.ts"
98
+ },
99
+ coreDeps: ["core/src/utils/dom.ts"],
100
+ dependencies: { internal: ["button"], npm: {} }
101
+ },
102
+ tabs: {
103
+ name: "tabs",
104
+ type: "interactive",
105
+ files: {
106
+ css: "css/components/tabs.css",
107
+ core: "core/src/tabs.ts",
108
+ react: ["react/src/tabs.tsx", "react/src/hooks/use-tabs.ts"],
109
+ angular: "angular/src/tabs.component.ts"
110
+ },
111
+ coreDeps: ["core/src/utils/keyboard.ts"],
112
+ dependencies: { internal: [], npm: {} }
113
+ },
114
+ accordion: {
115
+ name: "accordion",
116
+ type: "interactive",
117
+ files: {
118
+ css: "css/components/accordion.css",
119
+ core: "core/src/accordion.ts",
120
+ react: ["react/src/accordion.tsx", "react/src/hooks/use-accordion.ts"],
121
+ angular: "angular/src/accordion.component.ts"
122
+ },
123
+ coreDeps: ["core/src/utils/keyboard.ts"],
124
+ dependencies: { internal: [], npm: {} }
125
+ },
126
+ select: {
127
+ name: "select",
128
+ type: "interactive",
129
+ files: {
130
+ css: "css/components/select.css",
131
+ core: "core/src/select.ts",
132
+ react: ["react/src/select.tsx", "react/src/hooks/use-select.ts"],
133
+ angular: "angular/src/select.component.ts"
134
+ },
135
+ coreDeps: ["core/src/utils/dom.ts", "core/src/utils/keyboard.ts"],
136
+ dependencies: { internal: [], npm: {} }
137
+ },
138
+ tooltip: {
139
+ name: "tooltip",
140
+ type: "interactive",
141
+ files: {
142
+ css: "css/components/tooltip.css",
143
+ core: "core/src/tooltip.ts",
144
+ react: ["react/src/tooltip.tsx", "react/src/hooks/use-tooltip.ts"],
145
+ angular: "angular/src/tooltip.directive.ts"
146
+ },
147
+ coreDeps: [],
148
+ dependencies: { internal: [], npm: {} }
149
+ },
150
+ popover: {
151
+ name: "popover",
152
+ type: "interactive",
153
+ files: {
154
+ css: "css/components/popover.css",
155
+ core: "core/src/popover.ts",
156
+ react: ["react/src/popover.tsx", "react/src/hooks/use-popover.ts"],
157
+ angular: "angular/src/popover.component.ts"
158
+ },
159
+ coreDeps: ["core/src/utils/dom.ts"],
160
+ dependencies: { internal: [], npm: {} }
161
+ },
162
+ toast: {
163
+ name: "toast",
164
+ type: "interactive",
165
+ files: {
166
+ css: "css/components/toast.css",
167
+ core: "core/src/toast.ts",
168
+ react: ["react/src/toast.tsx", "react/src/hooks/use-toast.ts"],
169
+ angular: "angular/src/toast.component.ts"
170
+ },
171
+ coreDeps: [],
172
+ dependencies: { internal: [], npm: {} }
173
+ },
174
+ drawer: {
175
+ name: "drawer",
176
+ type: "interactive",
177
+ files: {
178
+ css: "css/components/drawer.css",
179
+ core: "core/src/drawer.ts",
180
+ react: ["react/src/drawer.tsx", "react/src/hooks/use-drawer.ts"],
181
+ angular: "angular/src/drawer.component.ts"
182
+ },
183
+ coreDeps: ["core/src/utils/dom.ts"],
184
+ dependencies: { internal: [], npm: {} }
185
+ },
186
+ "dropdown-menu": {
187
+ name: "dropdown-menu",
188
+ type: "interactive",
189
+ files: {
190
+ css: "css/components/dropdown-menu.css",
191
+ core: "core/src/dropdown-menu.ts",
192
+ react: ["react/src/dropdown-menu.tsx", "react/src/hooks/use-dropdown-menu.ts"],
193
+ angular: "angular/src/dropdown-menu.component.ts"
194
+ },
195
+ coreDeps: ["core/src/utils/dom.ts", "core/src/utils/keyboard.ts"],
196
+ dependencies: { internal: [], npm: {} }
197
+ },
198
+ switch: {
199
+ name: "switch",
200
+ type: "interactive",
201
+ files: {
202
+ css: "css/components/switch.css",
203
+ core: "core/src/switch.ts",
204
+ react: "react/src/switch.tsx",
205
+ angular: "angular/src/switch.component.ts"
206
+ },
207
+ coreDeps: [],
208
+ dependencies: { internal: [], npm: {} }
209
+ },
210
+ progress: {
211
+ name: "progress",
212
+ type: "css-only",
213
+ files: {
214
+ css: "css/components/progress.css",
215
+ react: "react/src/progress.tsx",
216
+ angular: "angular/src/progress.component.ts"
217
+ },
218
+ dependencies: { internal: [], npm: {} }
219
+ },
220
+ loader: {
221
+ name: "loader",
222
+ type: "css-only",
223
+ files: {
224
+ css: "css/components/loader.css",
225
+ react: "react/src/loader.tsx",
226
+ angular: "angular/src/loader.component.ts"
227
+ },
228
+ dependencies: { internal: [], npm: {} }
229
+ },
230
+ chips: {
231
+ name: "chips",
232
+ type: "css-only",
233
+ files: {
234
+ css: "css/components/chips.css",
235
+ react: "react/src/chips.tsx",
236
+ angular: "angular/src/chips.component.ts"
237
+ },
238
+ dependencies: { internal: [], npm: {} }
239
+ },
240
+ "password-input": {
241
+ name: "password-input",
242
+ type: "css-only",
243
+ files: {
244
+ css: "css/components/password-input.css",
245
+ react: "react/src/password-input.tsx",
246
+ angular: "angular/src/password-input.component.ts"
247
+ },
248
+ dependencies: { internal: ["input"], npm: {} }
249
+ },
250
+ counter: {
251
+ name: "counter",
252
+ type: "css-only",
253
+ files: {
254
+ css: "css/components/counter.css",
255
+ react: "react/src/counter.tsx",
256
+ angular: "angular/src/counter.component.ts"
257
+ },
258
+ dependencies: { internal: [], npm: {} }
259
+ },
260
+ alert: {
261
+ name: "alert",
262
+ type: "css-only",
263
+ files: {
264
+ css: "css/components/alert.css",
265
+ react: "react/src/alert.tsx",
266
+ angular: "angular/src/alert.component.ts"
267
+ },
268
+ dependencies: { internal: [], npm: {} }
269
+ },
270
+ "prompt-input": {
271
+ name: "prompt-input",
272
+ type: "css-only",
273
+ files: {
274
+ css: "css/components/prompt-input.css",
275
+ react: "react/src/prompt-input.tsx",
276
+ angular: "angular/src/prompt-input.component.ts"
277
+ },
278
+ dependencies: { internal: ["button"], npm: {} }
279
+ },
280
+ "chat-bubble": {
281
+ name: "chat-bubble",
282
+ type: "css-only",
283
+ files: {
284
+ css: "css/components/chat-bubble.css",
285
+ react: "react/src/chat-bubble.tsx",
286
+ angular: "angular/src/chat-bubble.component.ts"
287
+ },
288
+ dependencies: { internal: [], npm: {} }
289
+ },
290
+ "ai-badge": {
291
+ name: "ai-badge",
292
+ type: "css-only",
293
+ files: {
294
+ css: "css/components/ai-badge.css",
295
+ react: "react/src/ai-badge.tsx",
296
+ angular: "angular/src/ai-badge.component.ts"
297
+ },
298
+ dependencies: { internal: [], npm: {} }
299
+ },
300
+ "suggestion-chips": {
301
+ name: "suggestion-chips",
302
+ type: "css-only",
303
+ files: {
304
+ css: "css/components/suggestion-chips.css",
305
+ react: "react/src/suggestion-chips.tsx",
306
+ angular: "angular/src/suggestion-chips.component.ts"
307
+ },
308
+ dependencies: { internal: [], npm: {} }
309
+ },
310
+ "source-card": {
311
+ name: "source-card",
312
+ type: "css-only",
313
+ files: {
314
+ css: "css/components/source-card.css",
315
+ react: "react/src/source-card.tsx",
316
+ angular: "angular/src/source-card.component.ts"
317
+ },
318
+ dependencies: { internal: [], npm: {} }
319
+ },
320
+ "streaming-text": {
321
+ name: "streaming-text",
322
+ type: "css-only",
323
+ files: {
324
+ css: "css/components/streaming-text.css",
325
+ react: "react/src/streaming-text.tsx",
326
+ angular: "angular/src/streaming-text.component.ts"
327
+ },
328
+ dependencies: { internal: [], npm: {} }
329
+ },
330
+ feedback: {
331
+ name: "feedback",
332
+ type: "css-only",
333
+ files: {
334
+ css: "css/components/feedback.css",
335
+ react: "react/src/feedback.tsx",
336
+ angular: "angular/src/feedback.component.ts"
337
+ },
338
+ dependencies: { internal: [], npm: {} }
339
+ }
340
+ }
341
+ };
342
+
343
+ // src/registry/resolve.ts
344
+ var registry = registry_default;
345
+ function resolveComponentDeps(name, resolved = /* @__PURE__ */ new Set()) {
346
+ const component = registry.components[name];
347
+ if (!component) return [];
348
+ for (const dep of component.dependencies.internal) {
349
+ if (!resolved.has(dep)) {
350
+ resolved.add(dep);
351
+ resolveComponentDeps(dep, resolved);
352
+ }
353
+ }
354
+ return Array.from(resolved);
355
+ }
356
+ function resolveCoreDeps(name) {
357
+ const component = registry.components[name];
358
+ if (!component) return [];
359
+ const deps = new Set(registry.meta.sharedCoreDeps);
360
+ if (component.coreDeps) {
361
+ for (const dep of component.coreDeps) {
362
+ deps.add(dep);
363
+ }
364
+ }
365
+ return Array.from(deps);
366
+ }
367
+ function getComponent(name) {
368
+ return registry.components[name];
369
+ }
370
+ function listComponents() {
371
+ return Object.keys(registry.components);
372
+ }
373
+
374
+ export {
375
+ registry,
376
+ resolveComponentDeps,
377
+ resolveCoreDeps,
378
+ getComponent,
379
+ listComponents
380
+ };
381
+ //# sourceMappingURL=chunk-ZEZGJIP2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/registry/registry.json","../src/registry/resolve.ts"],"sourcesContent":["{\n \"meta\": {\n \"baseUrl\": \"https://raw.githubusercontent.com/mcp-elements/ui/main/packages\",\n \"sharedCoreDeps\": [\"core/src/utils/cn.ts\"]\n },\n \"components\": {\n \"button\": {\n \"name\": \"button\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/button.css\",\n \"react\": \"react/src/button.tsx\",\n \"angular\": \"angular/src/button.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"badge\": {\n \"name\": \"badge\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/badge.css\",\n \"react\": \"react/src/badge.tsx\",\n \"angular\": \"angular/src/badge.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"card\": {\n \"name\": \"card\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/card.css\",\n \"react\": \"react/src/card.tsx\",\n \"angular\": \"angular/src/card.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"input\": {\n \"name\": \"input\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/input.css\",\n \"react\": \"react/src/input.tsx\",\n \"angular\": \"angular/src/input.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"textarea\": {\n \"name\": \"textarea\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/textarea.css\",\n \"react\": \"react/src/textarea.tsx\",\n \"angular\": \"angular/src/textarea.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"avatar\": {\n \"name\": \"avatar\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/avatar.css\",\n \"react\": \"react/src/avatar.tsx\",\n \"angular\": \"angular/src/avatar.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"separator\": {\n \"name\": \"separator\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/separator.css\",\n \"react\": \"react/src/separator.tsx\",\n \"angular\": \"angular/src/separator.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"skeleton\": {\n \"name\": \"skeleton\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/skeleton.css\",\n \"react\": \"react/src/skeleton.tsx\",\n \"angular\": \"angular/src/skeleton.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"dialog\": {\n \"name\": \"dialog\",\n \"type\": \"interactive\",\n \"files\": {\n \"css\": \"css/components/dialog.css\",\n \"core\": \"core/src/dialog.ts\",\n \"react\": [\"react/src/dialog.tsx\", \"react/src/hooks/use-dialog.ts\"],\n \"angular\": \"angular/src/dialog.component.ts\"\n },\n \"coreDeps\": [\"core/src/utils/dom.ts\"],\n \"dependencies\": { \"internal\": [\"button\"], \"npm\": {} }\n },\n \"tabs\": {\n \"name\": \"tabs\",\n \"type\": \"interactive\",\n \"files\": {\n \"css\": \"css/components/tabs.css\",\n \"core\": \"core/src/tabs.ts\",\n \"react\": [\"react/src/tabs.tsx\", \"react/src/hooks/use-tabs.ts\"],\n \"angular\": \"angular/src/tabs.component.ts\"\n },\n \"coreDeps\": [\"core/src/utils/keyboard.ts\"],\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"accordion\": {\n \"name\": \"accordion\",\n \"type\": \"interactive\",\n \"files\": {\n \"css\": \"css/components/accordion.css\",\n \"core\": \"core/src/accordion.ts\",\n \"react\": [\"react/src/accordion.tsx\", \"react/src/hooks/use-accordion.ts\"],\n \"angular\": \"angular/src/accordion.component.ts\"\n },\n \"coreDeps\": [\"core/src/utils/keyboard.ts\"],\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"select\": {\n \"name\": \"select\",\n \"type\": \"interactive\",\n \"files\": {\n \"css\": \"css/components/select.css\",\n \"core\": \"core/src/select.ts\",\n \"react\": [\"react/src/select.tsx\", \"react/src/hooks/use-select.ts\"],\n \"angular\": \"angular/src/select.component.ts\"\n },\n \"coreDeps\": [\"core/src/utils/dom.ts\", \"core/src/utils/keyboard.ts\"],\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"tooltip\": {\n \"name\": \"tooltip\",\n \"type\": \"interactive\",\n \"files\": {\n \"css\": \"css/components/tooltip.css\",\n \"core\": \"core/src/tooltip.ts\",\n \"react\": [\"react/src/tooltip.tsx\", \"react/src/hooks/use-tooltip.ts\"],\n \"angular\": \"angular/src/tooltip.directive.ts\"\n },\n \"coreDeps\": [],\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"popover\": {\n \"name\": \"popover\",\n \"type\": \"interactive\",\n \"files\": {\n \"css\": \"css/components/popover.css\",\n \"core\": \"core/src/popover.ts\",\n \"react\": [\"react/src/popover.tsx\", \"react/src/hooks/use-popover.ts\"],\n \"angular\": \"angular/src/popover.component.ts\"\n },\n \"coreDeps\": [\"core/src/utils/dom.ts\"],\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"toast\": {\n \"name\": \"toast\",\n \"type\": \"interactive\",\n \"files\": {\n \"css\": \"css/components/toast.css\",\n \"core\": \"core/src/toast.ts\",\n \"react\": [\"react/src/toast.tsx\", \"react/src/hooks/use-toast.ts\"],\n \"angular\": \"angular/src/toast.component.ts\"\n },\n \"coreDeps\": [],\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"drawer\": {\n \"name\": \"drawer\",\n \"type\": \"interactive\",\n \"files\": {\n \"css\": \"css/components/drawer.css\",\n \"core\": \"core/src/drawer.ts\",\n \"react\": [\"react/src/drawer.tsx\", \"react/src/hooks/use-drawer.ts\"],\n \"angular\": \"angular/src/drawer.component.ts\"\n },\n \"coreDeps\": [\"core/src/utils/dom.ts\"],\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"dropdown-menu\": {\n \"name\": \"dropdown-menu\",\n \"type\": \"interactive\",\n \"files\": {\n \"css\": \"css/components/dropdown-menu.css\",\n \"core\": \"core/src/dropdown-menu.ts\",\n \"react\": [\"react/src/dropdown-menu.tsx\", \"react/src/hooks/use-dropdown-menu.ts\"],\n \"angular\": \"angular/src/dropdown-menu.component.ts\"\n },\n \"coreDeps\": [\"core/src/utils/dom.ts\", \"core/src/utils/keyboard.ts\"],\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"switch\": {\n \"name\": \"switch\",\n \"type\": \"interactive\",\n \"files\": {\n \"css\": \"css/components/switch.css\",\n \"core\": \"core/src/switch.ts\",\n \"react\": \"react/src/switch.tsx\",\n \"angular\": \"angular/src/switch.component.ts\"\n },\n \"coreDeps\": [],\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"progress\": {\n \"name\": \"progress\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/progress.css\",\n \"react\": \"react/src/progress.tsx\",\n \"angular\": \"angular/src/progress.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"loader\": {\n \"name\": \"loader\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/loader.css\",\n \"react\": \"react/src/loader.tsx\",\n \"angular\": \"angular/src/loader.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"chips\": {\n \"name\": \"chips\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/chips.css\",\n \"react\": \"react/src/chips.tsx\",\n \"angular\": \"angular/src/chips.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"password-input\": {\n \"name\": \"password-input\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/password-input.css\",\n \"react\": \"react/src/password-input.tsx\",\n \"angular\": \"angular/src/password-input.component.ts\"\n },\n \"dependencies\": { \"internal\": [\"input\"], \"npm\": {} }\n },\n \"counter\": {\n \"name\": \"counter\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/counter.css\",\n \"react\": \"react/src/counter.tsx\",\n \"angular\": \"angular/src/counter.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"alert\": {\n \"name\": \"alert\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/alert.css\",\n \"react\": \"react/src/alert.tsx\",\n \"angular\": \"angular/src/alert.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"prompt-input\": {\n \"name\": \"prompt-input\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/prompt-input.css\",\n \"react\": \"react/src/prompt-input.tsx\",\n \"angular\": \"angular/src/prompt-input.component.ts\"\n },\n \"dependencies\": { \"internal\": [\"button\"], \"npm\": {} }\n },\n \"chat-bubble\": {\n \"name\": \"chat-bubble\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/chat-bubble.css\",\n \"react\": \"react/src/chat-bubble.tsx\",\n \"angular\": \"angular/src/chat-bubble.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"ai-badge\": {\n \"name\": \"ai-badge\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/ai-badge.css\",\n \"react\": \"react/src/ai-badge.tsx\",\n \"angular\": \"angular/src/ai-badge.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"suggestion-chips\": {\n \"name\": \"suggestion-chips\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/suggestion-chips.css\",\n \"react\": \"react/src/suggestion-chips.tsx\",\n \"angular\": \"angular/src/suggestion-chips.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"source-card\": {\n \"name\": \"source-card\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/source-card.css\",\n \"react\": \"react/src/source-card.tsx\",\n \"angular\": \"angular/src/source-card.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"streaming-text\": {\n \"name\": \"streaming-text\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/streaming-text.css\",\n \"react\": \"react/src/streaming-text.tsx\",\n \"angular\": \"angular/src/streaming-text.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n },\n \"feedback\": {\n \"name\": \"feedback\",\n \"type\": \"css-only\",\n \"files\": {\n \"css\": \"css/components/feedback.css\",\n \"react\": \"react/src/feedback.tsx\",\n \"angular\": \"angular/src/feedback.component.ts\"\n },\n \"dependencies\": { \"internal\": [], \"npm\": {} }\n }\n }\n}\n","import registryData from './registry.json' with { type: 'json' }\n\nexport interface ComponentEntry {\n name: string\n type: 'css-only' | 'interactive'\n files: {\n css?: string\n core?: string\n react?: string | string[]\n angular?: string | string[]\n }\n coreDeps?: string[]\n dependencies: {\n internal: string[]\n npm: Record<string, string[]>\n }\n}\n\nexport interface RegistryMeta {\n baseUrl: string\n sharedCoreDeps: string[]\n}\n\nexport interface Registry {\n meta: RegistryMeta\n components: Record<string, ComponentEntry>\n}\n\nexport const registry = registryData as unknown as Registry\n\nexport function resolveComponentDeps(name: string, resolved = new Set<string>()): string[] {\n const component = registry.components[name]\n if (!component) return []\n\n for (const dep of component.dependencies.internal) {\n if (!resolved.has(dep)) {\n resolved.add(dep)\n resolveComponentDeps(dep, resolved)\n }\n }\n\n return Array.from(resolved)\n}\n\nexport function resolveCoreDeps(name: string): string[] {\n const component = registry.components[name]\n if (!component) return []\n\n const deps = new Set<string>(registry.meta.sharedCoreDeps)\n\n if (component.coreDeps) {\n for (const dep of component.coreDeps) {\n deps.add(dep)\n }\n }\n\n return Array.from(deps)\n}\n\nexport function getComponent(name: string): ComponentEntry | undefined {\n return registry.components[name]\n}\n\nexport function listComponents(): string[] {\n return Object.keys(registry.components)\n}\n"],"mappings":"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","names":[]}
package/dist/index.js ADDED
@@ -0,0 +1,561 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ registry,
4
+ resolveComponentDeps,
5
+ resolveCoreDeps
6
+ } from "./chunk-ZEZGJIP2.js";
7
+
8
+ // src/index.ts
9
+ import { Command as Command4 } from "commander";
10
+
11
+ // src/commands/init.ts
12
+ import { Command } from "commander";
13
+ import prompts from "prompts";
14
+ import pc from "picocolors";
15
+
16
+ // src/utils/detect.ts
17
+ import fs from "fs";
18
+ import path from "path";
19
+ function detectFramework(cwd) {
20
+ const pkgPath = path.join(cwd, "package.json");
21
+ if (!fs.existsSync(pkgPath)) return null;
22
+ try {
23
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
24
+ const allDeps = {
25
+ ...pkg.dependencies,
26
+ ...pkg.devDependencies
27
+ };
28
+ if (allDeps["@angular/core"]) return "angular";
29
+ if (allDeps["react"]) return "react";
30
+ return null;
31
+ } catch {
32
+ return null;
33
+ }
34
+ }
35
+ function loadConfig(cwd) {
36
+ const configPath = path.join(cwd, "mcp-elements.json");
37
+ if (!fs.existsSync(configPath)) return null;
38
+ try {
39
+ return JSON.parse(fs.readFileSync(configPath, "utf-8"));
40
+ } catch {
41
+ return null;
42
+ }
43
+ }
44
+
45
+ // src/utils/fs.ts
46
+ import fs2 from "fs";
47
+ import path2 from "path";
48
+ async function writeFile(filePath, content) {
49
+ const dir = path2.dirname(filePath);
50
+ if (!fs2.existsSync(dir)) {
51
+ fs2.mkdirSync(dir, { recursive: true });
52
+ }
53
+ fs2.writeFileSync(filePath, content, "utf-8");
54
+ }
55
+ async function ensureDir(dirPath) {
56
+ if (!fs2.existsSync(dirPath)) {
57
+ fs2.mkdirSync(dirPath, { recursive: true });
58
+ }
59
+ }
60
+ async function fileExists(filePath) {
61
+ return fs2.existsSync(filePath);
62
+ }
63
+
64
+ // src/commands/init.ts
65
+ import path3 from "path";
66
+ import fs3 from "fs";
67
+ var initCommand = new Command("init").description("Initialize mcp-elements in your project").action(async () => {
68
+ console.log(pc.bold("\n mcp-elements init\n"));
69
+ const cwd = process.cwd();
70
+ if (await fileExists(path3.join(cwd, "mcp-elements.json"))) {
71
+ const { overwrite } = await prompts({
72
+ type: "confirm",
73
+ name: "overwrite",
74
+ message: "mcp-elements.json already exists. Overwrite?",
75
+ initial: false
76
+ });
77
+ if (!overwrite) {
78
+ console.log(pc.yellow(" Cancelled."));
79
+ return;
80
+ }
81
+ }
82
+ let framework = detectFramework(cwd);
83
+ if (!framework) {
84
+ const response = await prompts({
85
+ type: "select",
86
+ name: "framework",
87
+ message: "Which framework are you using?",
88
+ choices: [
89
+ { title: "React", value: "react" },
90
+ { title: "Angular", value: "angular" }
91
+ ]
92
+ });
93
+ framework = response.framework;
94
+ } else {
95
+ console.log(pc.green(` Detected framework: ${framework}`));
96
+ }
97
+ if (!framework) {
98
+ console.log(pc.red(" No framework selected. Aborting."));
99
+ return;
100
+ }
101
+ const defaultComponentDir = framework === "react" ? "src/components/ui" : "src/app/components/ui";
102
+ const { componentDir, cssPath, typescript } = await prompts([
103
+ {
104
+ type: "text",
105
+ name: "componentDir",
106
+ message: "Where should components be installed?",
107
+ initial: defaultComponentDir
108
+ },
109
+ {
110
+ type: "text",
111
+ name: "cssPath",
112
+ message: "Where is your global CSS file?",
113
+ initial: framework === "react" ? "src/index.css" : "src/styles.css"
114
+ },
115
+ {
116
+ type: "confirm",
117
+ name: "typescript",
118
+ message: "Are you using TypeScript?",
119
+ initial: true
120
+ }
121
+ ]);
122
+ const config = {
123
+ $schema: "https://mcp-elements.dev/schema.json",
124
+ framework,
125
+ typescript,
126
+ tailwind: {
127
+ css: cssPath,
128
+ baseColor: "zinc"
129
+ },
130
+ aliases: {
131
+ components: componentDir,
132
+ utils: framework === "react" ? "src/lib/utils" : "src/app/lib/utils"
133
+ }
134
+ };
135
+ await writeFile(
136
+ path3.join(cwd, "mcp-elements.json"),
137
+ JSON.stringify(config, null, 2)
138
+ );
139
+ console.log(pc.green(" Created mcp-elements.json"));
140
+ await ensureDir(path3.join(cwd, componentDir));
141
+ console.log(pc.green(` Created ${componentDir}/`));
142
+ const utilsDir = config.aliases.utils;
143
+ await ensureDir(path3.join(cwd, utilsDir));
144
+ const ext = typescript ? ".ts" : ".js";
145
+ const cnContent = `export function cn(...inputs${typescript ? ": (string | undefined | null | false)[]" : ""})${typescript ? ": string" : ""} {
146
+ return inputs.filter(Boolean).join(' ')
147
+ }
148
+ `;
149
+ await writeFile(path3.join(cwd, utilsDir, `cn${ext}`), cnContent);
150
+ console.log(pc.green(` Created ${utilsDir}/cn${ext}`));
151
+ const baseCssContent = `/* mcp-elements design tokens */
152
+ @import 'tailwindcss';
153
+
154
+ @custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));
155
+
156
+ @theme {
157
+ --color-background: oklch(1 0 0);
158
+ --color-foreground: oklch(0.145 0 0);
159
+ --color-primary: oklch(0.205 0.042 265.755);
160
+ --color-primary-foreground: oklch(0.985 0 0);
161
+ --color-secondary: oklch(0.97 0.001 286.375);
162
+ --color-secondary-foreground: oklch(0.205 0.042 265.755);
163
+ --color-accent: oklch(0.97 0.001 286.375);
164
+ --color-accent-foreground: oklch(0.205 0.042 265.755);
165
+ --color-muted: oklch(0.97 0.001 286.375);
166
+ --color-muted-foreground: oklch(0.556 0.019 286);
167
+ --color-destructive: oklch(0.577 0.245 27.325);
168
+ --color-destructive-foreground: oklch(0.985 0 0);
169
+ --color-border: oklch(0.922 0.004 286.32);
170
+ --color-input: oklch(0.922 0.004 286.32);
171
+ --color-ring: oklch(0.708 0.028 256);
172
+ --color-card: oklch(1 0 0);
173
+ --color-card-foreground: oklch(0.145 0 0);
174
+ --color-popover: oklch(1 0 0);
175
+ --color-popover-foreground: oklch(0.145 0 0);
176
+
177
+ --radius-sm: 0.25rem;
178
+ --radius-md: calc(var(--radius-sm) + 0.125rem);
179
+ --radius-lg: calc(var(--radius-sm) + 0.25rem);
180
+ --radius-xl: calc(var(--radius-sm) + 0.5rem);
181
+ }
182
+
183
+ @layer base {
184
+ [data-theme='dark'] {
185
+ --color-background: oklch(0.145 0 0);
186
+ --color-foreground: oklch(0.985 0 0);
187
+ --color-primary: oklch(0.985 0 0);
188
+ --color-primary-foreground: oklch(0.205 0.042 265.755);
189
+ --color-secondary: oklch(0.269 0.007 286.033);
190
+ --color-secondary-foreground: oklch(0.985 0 0);
191
+ --color-muted: oklch(0.269 0.007 286.033);
192
+ --color-muted-foreground: oklch(0.708 0.014 285.823);
193
+ --color-accent: oklch(0.269 0.007 286.033);
194
+ --color-accent-foreground: oklch(0.985 0 0);
195
+ --color-destructive: oklch(0.704 0.191 22.216);
196
+ --color-border: oklch(0.269 0.007 286.033);
197
+ --color-input: oklch(0.269 0.007 286.033);
198
+ --color-ring: oklch(0.442 0.017 285.786);
199
+ --color-card: oklch(0.145 0 0);
200
+ --color-card-foreground: oklch(0.985 0 0);
201
+ --color-popover: oklch(0.145 0 0);
202
+ --color-popover-foreground: oklch(0.985 0 0);
203
+ }
204
+ }
205
+ `;
206
+ const cssFullPath = path3.join(cwd, cssPath);
207
+ if (await fileExists(cssFullPath)) {
208
+ const existing = fs3.readFileSync(cssFullPath, "utf-8");
209
+ if (!existing.includes("mcp-elements design tokens")) {
210
+ fs3.writeFileSync(cssFullPath, baseCssContent + "\n" + existing);
211
+ console.log(pc.green(` Added design tokens to ${cssPath}`));
212
+ } else {
213
+ console.log(pc.yellow(` Design tokens already exist in ${cssPath}`));
214
+ }
215
+ } else {
216
+ await writeFile(cssFullPath, baseCssContent);
217
+ console.log(pc.green(` Created ${cssPath} with design tokens`));
218
+ }
219
+ console.log(pc.bold(pc.green("\n mcp-elements initialized successfully!\n")));
220
+ console.log(` Run ${pc.cyan("npx mcp-elements add button")} to add your first component.
221
+ `);
222
+ });
223
+
224
+ // src/commands/add.ts
225
+ import { Command as Command2 } from "commander";
226
+ import pc2 from "picocolors";
227
+ import path5 from "path";
228
+ import fs5 from "fs";
229
+ import prompts2 from "prompts";
230
+
231
+ // src/utils/transform.ts
232
+ var SYMBOL_TO_FILE = {
233
+ // utils/cn.ts
234
+ cn: "cn",
235
+ // utils/dom.ts
236
+ trapFocus: "dom",
237
+ lockScroll: "dom",
238
+ createClickOutsideHandler: "dom",
239
+ getFocusableElements: "dom",
240
+ // utils/keyboard.ts
241
+ Keys: "keyboard",
242
+ getNextIndex: "keyboard",
243
+ handleArrowNavigation: "keyboard",
244
+ KeyboardDirection: "keyboard",
245
+ // dialog
246
+ createDialog: "dialog",
247
+ DialogConfig: "dialog",
248
+ // tabs
249
+ createTabs: "tabs",
250
+ TabsConfig: "tabs",
251
+ TabItem: "tabs",
252
+ // accordion
253
+ createAccordion: "accordion",
254
+ AccordionConfig: "accordion",
255
+ AccordionItemConfig: "accordion",
256
+ // select
257
+ createSelect: "select",
258
+ SelectConfig: "select",
259
+ SelectOption: "select",
260
+ // tooltip
261
+ createTooltip: "tooltip",
262
+ TooltipConfig: "tooltip",
263
+ // popover
264
+ createPopover: "popover",
265
+ PopoverConfig: "popover",
266
+ // toast
267
+ toast: "toast",
268
+ createToastManager: "toast",
269
+ Toast: "toast",
270
+ ToastConfig: "toast",
271
+ ToastState: "toast",
272
+ // drawer
273
+ createDrawer: "drawer",
274
+ DrawerConfig: "drawer",
275
+ // dropdown-menu
276
+ createDropdownMenu: "dropdown-menu",
277
+ DropdownMenuConfig: "dropdown-menu",
278
+ DropdownMenuItem: "dropdown-menu",
279
+ // switch
280
+ createSwitch: "switch",
281
+ SwitchConfig: "switch"
282
+ };
283
+ var CORE_IMPORT_RE = /import\s+(type\s+)?{([^}]+)}\s+from\s+['"]@mcp-elements\/core['"]/g;
284
+ function transformImports(content, config) {
285
+ let result = content;
286
+ const utilsPath = config.aliases.utils;
287
+ result = result.replace(CORE_IMPORT_RE, (match, typeKeyword, symbolsStr) => {
288
+ const isTypeOnly = !!typeKeyword;
289
+ const symbols = symbolsStr.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
290
+ const groups = {};
291
+ for (const sym of symbols) {
292
+ const isInlineType = sym.startsWith("type ");
293
+ const cleanSym = isInlineType ? sym.replace("type ", "") : sym;
294
+ const targetFile = SYMBOL_TO_FILE[cleanSym];
295
+ if (!targetFile) {
296
+ const file = "cn";
297
+ if (!groups[file]) groups[file] = { symbols: [], hasType: false };
298
+ groups[file].symbols.push(sym);
299
+ continue;
300
+ }
301
+ if (!groups[targetFile]) groups[targetFile] = { symbols: [], hasType: false };
302
+ if (isTypeOnly || isInlineType) {
303
+ groups[targetFile].hasType = true;
304
+ }
305
+ groups[targetFile].symbols.push(sym);
306
+ }
307
+ const imports = [];
308
+ for (const [file, group] of Object.entries(groups)) {
309
+ const allType = isTypeOnly || group.symbols.every((s) => s.startsWith("type "));
310
+ const keyword = allType ? "import type" : "import";
311
+ imports.push(`${keyword} { ${group.symbols.join(", ")} } from '${utilsPath}/${file}'`);
312
+ }
313
+ return imports.join("\n");
314
+ });
315
+ result = result.replace(
316
+ /from ['"]\.\/hooks\//g,
317
+ `from './`
318
+ );
319
+ return result;
320
+ }
321
+
322
+ // src/utils/fetch.ts
323
+ import path4 from "path";
324
+ import fs4 from "fs";
325
+ var BASE_URL = "https://raw.githubusercontent.com/mcp-elements/ui/main/packages";
326
+ async function fetchFile(relativePath, local = false) {
327
+ if (local) {
328
+ const localPath = path4.join(__dirname, "..", "..", "..", relativePath);
329
+ if (!fs4.existsSync(localPath)) {
330
+ throw new Error(`Local file not found: ${localPath}`);
331
+ }
332
+ return fs4.readFileSync(localPath, "utf-8");
333
+ }
334
+ const url = `${BASE_URL}/${relativePath}`;
335
+ const response = await fetch(url);
336
+ if (!response.ok) {
337
+ throw new Error(
338
+ `Failed to fetch ${relativePath} (HTTP ${response.status}). Make sure the file exists at ${url}`
339
+ );
340
+ }
341
+ return response.text();
342
+ }
343
+
344
+ // src/commands/add.ts
345
+ var addCommand = new Command2("add").description("Add components to your project").argument("[components...]", "Components to add").option("-y, --yes", "Skip confirmation", false).option("-o, --overwrite", "Overwrite existing files", false).option("--local", "Read files from local monorepo (dev only)", false).action(async (componentNames, options) => {
346
+ const cwd = process.cwd();
347
+ const config = loadConfig(cwd);
348
+ if (!config) {
349
+ console.log(pc2.red("\n mcp-elements.json not found. Run `npx mcp-elements init` first.\n"));
350
+ return;
351
+ }
352
+ if (!componentNames || componentNames.length === 0) {
353
+ const allComponents2 = Object.keys(registry.components);
354
+ const response = await prompts2({
355
+ type: "multiselect",
356
+ name: "selected",
357
+ message: "Which components would you like to add?",
358
+ choices: allComponents2.map((name) => {
359
+ const comp = registry.components[name];
360
+ return {
361
+ title: `${name} ${comp.type === "css-only" ? pc2.dim("(CSS)") : pc2.cyan("(interactive)")}`,
362
+ value: name
363
+ };
364
+ }),
365
+ hint: "- Space to select, Enter to confirm"
366
+ });
367
+ if (!response.selected || response.selected.length === 0) {
368
+ console.log(pc2.yellow("\n No components selected.\n"));
369
+ return;
370
+ }
371
+ componentNames = response.selected;
372
+ }
373
+ const invalid = componentNames.filter((name) => !registry.components[name]);
374
+ if (invalid.length > 0) {
375
+ console.log(pc2.red(`
376
+ Unknown components: ${invalid.join(", ")}`));
377
+ console.log(` Run ${pc2.cyan("npx mcp-elements list")} to see available components.
378
+ `);
379
+ return;
380
+ }
381
+ const allComponents = /* @__PURE__ */ new Set();
382
+ for (const name of componentNames) {
383
+ const deps = resolveComponentDeps(name);
384
+ for (const dep of deps) {
385
+ allComponents.add(dep);
386
+ }
387
+ allComponents.add(name);
388
+ }
389
+ console.log(pc2.bold(`
390
+ Adding ${allComponents.size} component(s):
391
+ `));
392
+ const isLocal = options.local;
393
+ const copiedCoreDeps = /* @__PURE__ */ new Set();
394
+ for (const name of allComponents) {
395
+ const component = registry.components[name];
396
+ if (!component) continue;
397
+ console.log(` ${pc2.cyan(name)} ${component.type === "css-only" ? "(CSS)" : "(interactive)"}`);
398
+ const framework = config.framework;
399
+ const componentDir = path5.join(cwd, config.aliases.components);
400
+ await ensureDir(componentDir);
401
+ const files = component.files[framework];
402
+ const cssFile = component.files.css;
403
+ const coreFile = component.files.core;
404
+ if (!files) {
405
+ console.log(pc2.yellow(` Skipped: no ${framework} adapter`));
406
+ continue;
407
+ }
408
+ const filesToCopy = Array.isArray(files) ? files : [files];
409
+ for (const file of filesToCopy) {
410
+ const fileName = path5.basename(file);
411
+ const destPath = path5.join(componentDir, fileName);
412
+ if (fs5.existsSync(destPath) && !options.overwrite) {
413
+ console.log(pc2.yellow(` Skipped: ${fileName} (already exists, use --overwrite)`));
414
+ continue;
415
+ }
416
+ try {
417
+ let content = await fetchFile(file, isLocal);
418
+ content = transformImports(content, config);
419
+ await writeFile(destPath, content);
420
+ console.log(pc2.green(` Created: ${config.aliases.components}/${fileName}`));
421
+ } catch (err) {
422
+ console.log(pc2.red(` Failed: ${fileName} \u2014 ${err.message}`));
423
+ }
424
+ }
425
+ if (coreFile && component.type === "interactive") {
426
+ const utilsDir = path5.join(cwd, config.aliases.utils);
427
+ await ensureDir(utilsDir);
428
+ const coreFileName = path5.basename(coreFile);
429
+ const coreDest = path5.join(utilsDir, coreFileName);
430
+ if (!fs5.existsSync(coreDest) || options.overwrite) {
431
+ try {
432
+ const coreContent = await fetchFile(coreFile, isLocal);
433
+ await writeFile(coreDest, coreContent);
434
+ console.log(pc2.green(` Created: ${config.aliases.utils}/${coreFileName}`));
435
+ } catch (err) {
436
+ console.log(pc2.red(` Failed: ${coreFileName} \u2014 ${err.message}`));
437
+ }
438
+ }
439
+ const coreDeps = resolveCoreDeps(name);
440
+ for (const dep of coreDeps) {
441
+ if (copiedCoreDeps.has(dep)) continue;
442
+ copiedCoreDeps.add(dep);
443
+ const depFileName = path5.basename(dep);
444
+ const depDest = path5.join(utilsDir, depFileName);
445
+ if (fs5.existsSync(depDest) && !options.overwrite) continue;
446
+ try {
447
+ const depContent = await fetchFile(dep, isLocal);
448
+ await writeFile(depDest, depContent);
449
+ console.log(pc2.green(` Created: ${config.aliases.utils}/${depFileName}`));
450
+ } catch (err) {
451
+ console.log(pc2.red(` Failed: ${depFileName} \u2014 ${err.message}`));
452
+ }
453
+ }
454
+ }
455
+ if (component.type === "css-only") {
456
+ const utilsDir = path5.join(cwd, config.aliases.utils);
457
+ await ensureDir(utilsDir);
458
+ for (const dep of registry.meta.sharedCoreDeps) {
459
+ if (copiedCoreDeps.has(dep)) continue;
460
+ copiedCoreDeps.add(dep);
461
+ const depFileName = path5.basename(dep);
462
+ const depDest = path5.join(utilsDir, depFileName);
463
+ if (fs5.existsSync(depDest) && !options.overwrite) continue;
464
+ try {
465
+ const depContent = await fetchFile(dep, isLocal);
466
+ await writeFile(depDest, depContent);
467
+ console.log(pc2.green(` Created: ${config.aliases.utils}/${depFileName}`));
468
+ } catch (err) {
469
+ console.log(pc2.red(` Failed: ${depFileName} \u2014 ${err.message}`));
470
+ }
471
+ }
472
+ }
473
+ if (cssFile) {
474
+ const cssDir = path5.join(cwd, path5.dirname(config.tailwind.css));
475
+ const cssComponentsDir = path5.join(cssDir, "components");
476
+ await ensureDir(cssComponentsDir);
477
+ const cssFileName = path5.basename(cssFile);
478
+ const cssDest = path5.join(cssComponentsDir, cssFileName);
479
+ if (!fs5.existsSync(cssDest) || options.overwrite) {
480
+ try {
481
+ const cssContent = await fetchFile(cssFile, isLocal);
482
+ await writeFile(cssDest, cssContent);
483
+ console.log(pc2.green(` Created: components/${cssFileName}`));
484
+ } catch (err) {
485
+ console.log(pc2.red(` Failed: ${cssFileName} \u2014 ${err.message}`));
486
+ }
487
+ }
488
+ }
489
+ }
490
+ console.log(pc2.bold(pc2.green("\n Done!\n")));
491
+ });
492
+
493
+ // src/commands/theme.ts
494
+ import { Command as Command3 } from "commander";
495
+ import pc3 from "picocolors";
496
+ import path6 from "path";
497
+ var themeCommand = new Command3("theme").description("Manage themes").argument("<theme>", "Theme to add (dark, glass)").option("--local", "Read files from local monorepo (dev only)", false).action(async (theme, options) => {
498
+ const cwd = process.cwd();
499
+ const config = loadConfig(cwd);
500
+ if (!config) {
501
+ console.log(pc3.red("\n mcp-elements.json not found. Run `npx mcp-elements init` first.\n"));
502
+ return;
503
+ }
504
+ if (theme === "dark") {
505
+ console.log(pc3.bold("\n Dark theme\n"));
506
+ console.log(" Dark theme tokens are already included in your base CSS.");
507
+ console.log(" To activate dark mode, add this to your HTML:");
508
+ console.log(pc3.cyan('\n <html data-theme="dark">'));
509
+ console.log("\n Or toggle with JavaScript:");
510
+ console.log(pc3.cyan(" document.documentElement.setAttribute('data-theme', 'dark')"));
511
+ console.log();
512
+ } else if (theme === "glass") {
513
+ console.log(pc3.bold("\n Glass theme\n"));
514
+ try {
515
+ const glassContent = await fetchFile("css/themes/glass.css", options.local);
516
+ const cssDir = path6.join(cwd, path6.dirname(config.tailwind.css));
517
+ await ensureDir(cssDir);
518
+ const destPath = path6.join(cssDir, "glass.css");
519
+ await writeFile(destPath, glassContent);
520
+ console.log(pc3.green(` Created: ${path6.relative(cwd, destPath)}`));
521
+ console.log("\n Import it in your main CSS file:");
522
+ console.log(pc3.cyan(`
523
+ @import './glass.css';`));
524
+ console.log("\n Then activate by adding to your HTML:");
525
+ console.log(pc3.cyan('\n <html data-theme="glass">'));
526
+ console.log("\n Or toggle with JavaScript:");
527
+ console.log(pc3.cyan(" document.documentElement.setAttribute('data-theme', 'glass')"));
528
+ console.log();
529
+ } catch (err) {
530
+ console.log(pc3.red(` Failed to fetch glass theme: ${err.message}
531
+ `));
532
+ }
533
+ } else {
534
+ console.log(pc3.yellow(`
535
+ Theme "${theme}" is not available.`));
536
+ console.log(` Available themes: ${pc3.cyan("dark")}, ${pc3.cyan("glass")}
537
+ `);
538
+ }
539
+ });
540
+
541
+ // src/index.ts
542
+ var program = new Command4();
543
+ program.name("mcp-elements").description("Framework-agnostic UI components with shadcn-style CLI").version("0.1.0");
544
+ program.addCommand(initCommand);
545
+ program.addCommand(addCommand);
546
+ program.addCommand(themeCommand);
547
+ program.command("list").description("List all available components").action(async () => {
548
+ const { registry: registry2 } = await import("./resolve-UAWQZ45B.js");
549
+ const components = Object.keys(registry2.components);
550
+ console.log("\nAvailable components:\n");
551
+ for (const name of components) {
552
+ const comp = registry2.components[name];
553
+ const type = comp.type === "css-only" ? "(CSS-only)" : "(interactive)";
554
+ console.log(` ${name} ${type}`);
555
+ }
556
+ console.log(`
557
+ Total: ${components.length} components
558
+ `);
559
+ });
560
+ program.parse();
561
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/init.ts","../src/utils/detect.ts","../src/utils/fs.ts","../src/commands/add.ts","../src/utils/transform.ts","../src/utils/fetch.ts","../src/commands/theme.ts"],"sourcesContent":["import { Command } from 'commander'\nimport { initCommand } from './commands/init.js'\nimport { addCommand } from './commands/add.js'\nimport { themeCommand } from './commands/theme.js'\n\nconst program = new Command()\n\nprogram\n .name('mcp-elements')\n .description('Framework-agnostic UI components with shadcn-style CLI')\n .version('0.1.0')\n\nprogram.addCommand(initCommand)\nprogram.addCommand(addCommand)\nprogram.addCommand(themeCommand)\n\n// List command\nprogram\n .command('list')\n .description('List all available components')\n .action(async () => {\n const { registry } = await import('./registry/resolve.js')\n const components = Object.keys(registry.components)\n console.log('\\nAvailable components:\\n')\n for (const name of components) {\n const comp = registry.components[name]\n const type = comp.type === 'css-only' ? '(CSS-only)' : '(interactive)'\n console.log(` ${name} ${type}`)\n }\n console.log(`\\nTotal: ${components.length} components\\n`)\n })\n\nprogram.parse()\n","import { Command } from 'commander'\nimport prompts from 'prompts'\nimport pc from 'picocolors'\nimport { detectFramework } from '../utils/detect.js'\nimport { writeFile, ensureDir, fileExists } from '../utils/fs.js'\nimport path from 'node:path'\nimport fs from 'node:fs'\n\nexport const initCommand = new Command('init')\n .description('Initialize mcp-elements in your project')\n .action(async () => {\n console.log(pc.bold('\\n mcp-elements init\\n'))\n\n const cwd = process.cwd()\n\n // Check if already initialized\n if (await fileExists(path.join(cwd, 'mcp-elements.json'))) {\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: 'mcp-elements.json already exists. Overwrite?',\n initial: false,\n })\n if (!overwrite) {\n console.log(pc.yellow(' Cancelled.'))\n return\n }\n }\n\n // Detect framework\n let framework = detectFramework(cwd)\n\n if (!framework) {\n const response = await prompts({\n type: 'select',\n name: 'framework',\n message: 'Which framework are you using?',\n choices: [\n { title: 'React', value: 'react' },\n { title: 'Angular', value: 'angular' },\n ],\n })\n framework = response.framework\n } else {\n console.log(pc.green(` Detected framework: ${framework}`))\n }\n\n if (!framework) {\n console.log(pc.red(' No framework selected. Aborting.'))\n return\n }\n\n // Ask for component directory\n const defaultComponentDir = framework === 'react'\n ? 'src/components/ui'\n : 'src/app/components/ui'\n\n const { componentDir, cssPath, typescript } = await prompts([\n {\n type: 'text',\n name: 'componentDir',\n message: 'Where should components be installed?',\n initial: defaultComponentDir,\n },\n {\n type: 'text',\n name: 'cssPath',\n message: 'Where is your global CSS file?',\n initial: framework === 'react' ? 'src/index.css' : 'src/styles.css',\n },\n {\n type: 'confirm',\n name: 'typescript',\n message: 'Are you using TypeScript?',\n initial: true,\n },\n ])\n\n // Create config\n const config = {\n $schema: 'https://mcp-elements.dev/schema.json',\n framework,\n typescript,\n tailwind: {\n css: cssPath,\n baseColor: 'zinc',\n },\n aliases: {\n components: componentDir,\n utils: framework === 'react' ? 'src/lib/utils' : 'src/app/lib/utils',\n },\n }\n\n // Write config file\n await writeFile(\n path.join(cwd, 'mcp-elements.json'),\n JSON.stringify(config, null, 2)\n )\n console.log(pc.green(' Created mcp-elements.json'))\n\n // Ensure component directory exists\n await ensureDir(path.join(cwd, componentDir))\n console.log(pc.green(` Created ${componentDir}/`))\n\n // Ensure utils directory and create cn utility\n const utilsDir = config.aliases.utils\n await ensureDir(path.join(cwd, utilsDir))\n\n const ext = typescript ? '.ts' : '.js'\n const cnContent = `export function cn(...inputs${typescript ? ': (string | undefined | null | false)[]' : ''})${typescript ? ': string' : ''} {\n return inputs.filter(Boolean).join(' ')\n}\n`\n await writeFile(path.join(cwd, utilsDir, `cn${ext}`), cnContent)\n console.log(pc.green(` Created ${utilsDir}/cn${ext}`))\n\n // Copy base CSS tokens\n const baseCssContent = `/* mcp-elements design tokens */\n@import 'tailwindcss';\n\n@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));\n\n@theme {\n --color-background: oklch(1 0 0);\n --color-foreground: oklch(0.145 0 0);\n --color-primary: oklch(0.205 0.042 265.755);\n --color-primary-foreground: oklch(0.985 0 0);\n --color-secondary: oklch(0.97 0.001 286.375);\n --color-secondary-foreground: oklch(0.205 0.042 265.755);\n --color-accent: oklch(0.97 0.001 286.375);\n --color-accent-foreground: oklch(0.205 0.042 265.755);\n --color-muted: oklch(0.97 0.001 286.375);\n --color-muted-foreground: oklch(0.556 0.019 286);\n --color-destructive: oklch(0.577 0.245 27.325);\n --color-destructive-foreground: oklch(0.985 0 0);\n --color-border: oklch(0.922 0.004 286.32);\n --color-input: oklch(0.922 0.004 286.32);\n --color-ring: oklch(0.708 0.028 256);\n --color-card: oklch(1 0 0);\n --color-card-foreground: oklch(0.145 0 0);\n --color-popover: oklch(1 0 0);\n --color-popover-foreground: oklch(0.145 0 0);\n\n --radius-sm: 0.25rem;\n --radius-md: calc(var(--radius-sm) + 0.125rem);\n --radius-lg: calc(var(--radius-sm) + 0.25rem);\n --radius-xl: calc(var(--radius-sm) + 0.5rem);\n}\n\n@layer base {\n [data-theme='dark'] {\n --color-background: oklch(0.145 0 0);\n --color-foreground: oklch(0.985 0 0);\n --color-primary: oklch(0.985 0 0);\n --color-primary-foreground: oklch(0.205 0.042 265.755);\n --color-secondary: oklch(0.269 0.007 286.033);\n --color-secondary-foreground: oklch(0.985 0 0);\n --color-muted: oklch(0.269 0.007 286.033);\n --color-muted-foreground: oklch(0.708 0.014 285.823);\n --color-accent: oklch(0.269 0.007 286.033);\n --color-accent-foreground: oklch(0.985 0 0);\n --color-destructive: oklch(0.704 0.191 22.216);\n --color-border: oklch(0.269 0.007 286.033);\n --color-input: oklch(0.269 0.007 286.033);\n --color-ring: oklch(0.442 0.017 285.786);\n --color-card: oklch(0.145 0 0);\n --color-card-foreground: oklch(0.985 0 0);\n --color-popover: oklch(0.145 0 0);\n --color-popover-foreground: oklch(0.985 0 0);\n }\n}\n`\n\n const cssFullPath = path.join(cwd, cssPath)\n if (await fileExists(cssFullPath)) {\n const existing = fs.readFileSync(cssFullPath, 'utf-8')\n if (!existing.includes('mcp-elements design tokens')) {\n fs.writeFileSync(cssFullPath, baseCssContent + '\\n' + existing)\n console.log(pc.green(` Added design tokens to ${cssPath}`))\n } else {\n console.log(pc.yellow(` Design tokens already exist in ${cssPath}`))\n }\n } else {\n await writeFile(cssFullPath, baseCssContent)\n console.log(pc.green(` Created ${cssPath} with design tokens`))\n }\n\n console.log(pc.bold(pc.green('\\n mcp-elements initialized successfully!\\n')))\n console.log(` Run ${pc.cyan('npx mcp-elements add button')} to add your first component.\\n`)\n })\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport interface SnxConfig {\n $schema?: string\n framework: string\n typescript: boolean\n tailwind: {\n css: string\n baseColor: string\n }\n aliases: {\n components: string\n utils: string\n }\n}\n\nexport function detectFramework(cwd: string): string | null {\n const pkgPath = path.join(cwd, 'package.json')\n\n if (!fs.existsSync(pkgPath)) return null\n\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))\n const allDeps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n }\n\n if (allDeps['@angular/core']) return 'angular'\n if (allDeps['react']) return 'react'\n\n return null\n } catch {\n return null\n }\n}\n\nexport function loadConfig(cwd: string): SnxConfig | null {\n const configPath = path.join(cwd, 'mcp-elements.json')\n\n if (!fs.existsSync(configPath)) return null\n\n try {\n return JSON.parse(fs.readFileSync(configPath, 'utf-8')) as SnxConfig\n } catch {\n return null\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport async function writeFile(filePath: string, content: string): Promise<void> {\n const dir = path.dirname(filePath)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n fs.writeFileSync(filePath, content, 'utf-8')\n}\n\nexport async function ensureDir(dirPath: string): Promise<void> {\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true })\n }\n}\n\nexport async function fileExists(filePath: string): Promise<boolean> {\n return fs.existsSync(filePath)\n}\n\nexport async function readFile(filePath: string): Promise<string> {\n return fs.readFileSync(filePath, 'utf-8')\n}\n\nexport async function copyFile(src: string, dest: string): Promise<void> {\n const dir = path.dirname(dest)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n fs.copyFileSync(src, dest)\n}\n","import { Command } from 'commander'\nimport pc from 'picocolors'\nimport path from 'node:path'\nimport fs from 'node:fs'\nimport prompts from 'prompts'\nimport { registry, resolveComponentDeps, resolveCoreDeps } from '../registry/resolve.js'\nimport { loadConfig } from '../utils/detect.js'\nimport { writeFile, ensureDir } from '../utils/fs.js'\nimport { transformImports } from '../utils/transform.js'\nimport { fetchFile } from '../utils/fetch.js'\n\nexport const addCommand = new Command('add')\n .description('Add components to your project')\n .argument('[components...]', 'Components to add')\n .option('-y, --yes', 'Skip confirmation', false)\n .option('-o, --overwrite', 'Overwrite existing files', false)\n .option('--local', 'Read files from local monorepo (dev only)', false)\n .action(async (componentNames: string[], options) => {\n const cwd = process.cwd()\n const config = loadConfig(cwd)\n\n if (!config) {\n console.log(pc.red('\\n mcp-elements.json not found. Run `npx mcp-elements init` first.\\n'))\n return\n }\n\n // Interactive picker when no args provided\n if (!componentNames || componentNames.length === 0) {\n const allComponents = Object.keys(registry.components)\n const response = await prompts({\n type: 'multiselect',\n name: 'selected',\n message: 'Which components would you like to add?',\n choices: allComponents.map(name => {\n const comp = registry.components[name]\n return {\n title: `${name} ${comp.type === 'css-only' ? pc.dim('(CSS)') : pc.cyan('(interactive)')}`,\n value: name,\n }\n }),\n hint: '- Space to select, Enter to confirm',\n })\n\n if (!response.selected || response.selected.length === 0) {\n console.log(pc.yellow('\\n No components selected.\\n'))\n return\n }\n\n componentNames = response.selected\n }\n\n // Validate component names\n const invalid = componentNames.filter(name => !registry.components[name])\n if (invalid.length > 0) {\n console.log(pc.red(`\\n Unknown components: ${invalid.join(', ')}`))\n console.log(` Run ${pc.cyan('npx mcp-elements list')} to see available components.\\n`)\n return\n }\n\n // Resolve all dependencies\n const allComponents = new Set<string>()\n for (const name of componentNames) {\n const deps = resolveComponentDeps(name)\n for (const dep of deps) {\n allComponents.add(dep)\n }\n allComponents.add(name)\n }\n\n console.log(pc.bold(`\\n Adding ${allComponents.size} component(s):\\n`))\n\n const isLocal = options.local\n\n // Track which coreDeps we've already copied\n const copiedCoreDeps = new Set<string>()\n\n for (const name of allComponents) {\n const component = registry.components[name]\n if (!component) continue\n\n console.log(` ${pc.cyan(name)} ${component.type === 'css-only' ? '(CSS)' : '(interactive)'}`)\n\n const framework = config.framework as 'react' | 'angular'\n const componentDir = path.join(cwd, config.aliases.components)\n await ensureDir(componentDir)\n\n // Get the files to copy for this framework\n const files = component.files[framework]\n const cssFile = component.files.css\n const coreFile = component.files.core\n\n if (!files) {\n console.log(pc.yellow(` Skipped: no ${framework} adapter`))\n continue\n }\n\n // Copy framework-specific files\n const filesToCopy = Array.isArray(files) ? files : [files]\n for (const file of filesToCopy) {\n const fileName = path.basename(file)\n const destPath = path.join(componentDir, fileName)\n\n if (fs.existsSync(destPath) && !options.overwrite) {\n console.log(pc.yellow(` Skipped: ${fileName} (already exists, use --overwrite)`))\n continue\n }\n\n try {\n let content = await fetchFile(file, isLocal)\n content = transformImports(content, config)\n await writeFile(destPath, content)\n console.log(pc.green(` Created: ${config.aliases.components}/${fileName}`))\n } catch (err) {\n console.log(pc.red(` Failed: ${fileName} — ${(err as Error).message}`))\n }\n }\n\n // Copy core logic file if interactive\n if (coreFile && component.type === 'interactive') {\n const utilsDir = path.join(cwd, config.aliases.utils)\n await ensureDir(utilsDir)\n const coreFileName = path.basename(coreFile)\n const coreDest = path.join(utilsDir, coreFileName)\n\n if (!fs.existsSync(coreDest) || options.overwrite) {\n try {\n const coreContent = await fetchFile(coreFile, isLocal)\n await writeFile(coreDest, coreContent)\n console.log(pc.green(` Created: ${config.aliases.utils}/${coreFileName}`))\n } catch (err) {\n console.log(pc.red(` Failed: ${coreFileName} — ${(err as Error).message}`))\n }\n }\n\n // Copy coreDeps (dom.ts, keyboard.ts, etc.)\n const coreDeps = resolveCoreDeps(name)\n for (const dep of coreDeps) {\n if (copiedCoreDeps.has(dep)) continue\n copiedCoreDeps.add(dep)\n\n const depFileName = path.basename(dep)\n const depDest = path.join(utilsDir, depFileName)\n\n if (fs.existsSync(depDest) && !options.overwrite) continue\n\n try {\n const depContent = await fetchFile(dep, isLocal)\n await writeFile(depDest, depContent)\n console.log(pc.green(` Created: ${config.aliases.utils}/${depFileName}`))\n } catch (err) {\n console.log(pc.red(` Failed: ${depFileName} — ${(err as Error).message}`))\n }\n }\n }\n\n // Always copy shared coreDeps (cn.ts) for any component\n if (component.type === 'css-only') {\n const utilsDir = path.join(cwd, config.aliases.utils)\n await ensureDir(utilsDir)\n\n for (const dep of registry.meta.sharedCoreDeps) {\n if (copiedCoreDeps.has(dep)) continue\n copiedCoreDeps.add(dep)\n\n const depFileName = path.basename(dep)\n const depDest = path.join(utilsDir, depFileName)\n\n if (fs.existsSync(depDest) && !options.overwrite) continue\n\n try {\n const depContent = await fetchFile(dep, isLocal)\n await writeFile(depDest, depContent)\n console.log(pc.green(` Created: ${config.aliases.utils}/${depFileName}`))\n } catch (err) {\n console.log(pc.red(` Failed: ${depFileName} — ${(err as Error).message}`))\n }\n }\n }\n\n // Copy CSS file\n if (cssFile) {\n const cssDir = path.join(cwd, path.dirname(config.tailwind.css))\n const cssComponentsDir = path.join(cssDir, 'components')\n await ensureDir(cssComponentsDir)\n const cssFileName = path.basename(cssFile)\n const cssDest = path.join(cssComponentsDir, cssFileName)\n\n if (!fs.existsSync(cssDest) || options.overwrite) {\n try {\n const cssContent = await fetchFile(cssFile, isLocal)\n await writeFile(cssDest, cssContent)\n console.log(pc.green(` Created: components/${cssFileName}`))\n } catch (err) {\n console.log(pc.red(` Failed: ${cssFileName} — ${(err as Error).message}`))\n }\n }\n }\n }\n\n console.log(pc.bold(pc.green('\\n Done!\\n')))\n })\n","import type { SnxConfig } from './detect.js'\n\n// Maps each exported symbol to its source file (relative to utils dir)\nconst SYMBOL_TO_FILE: Record<string, string> = {\n // utils/cn.ts\n cn: 'cn',\n // utils/dom.ts\n trapFocus: 'dom',\n lockScroll: 'dom',\n createClickOutsideHandler: 'dom',\n getFocusableElements: 'dom',\n // utils/keyboard.ts\n Keys: 'keyboard',\n getNextIndex: 'keyboard',\n handleArrowNavigation: 'keyboard',\n KeyboardDirection: 'keyboard',\n // dialog\n createDialog: 'dialog',\n DialogConfig: 'dialog',\n // tabs\n createTabs: 'tabs',\n TabsConfig: 'tabs',\n TabItem: 'tabs',\n // accordion\n createAccordion: 'accordion',\n AccordionConfig: 'accordion',\n AccordionItemConfig: 'accordion',\n // select\n createSelect: 'select',\n SelectConfig: 'select',\n SelectOption: 'select',\n // tooltip\n createTooltip: 'tooltip',\n TooltipConfig: 'tooltip',\n // popover\n createPopover: 'popover',\n PopoverConfig: 'popover',\n // toast\n toast: 'toast',\n createToastManager: 'toast',\n Toast: 'toast',\n ToastConfig: 'toast',\n ToastState: 'toast',\n // drawer\n createDrawer: 'drawer',\n DrawerConfig: 'drawer',\n // dropdown-menu\n createDropdownMenu: 'dropdown-menu',\n DropdownMenuConfig: 'dropdown-menu',\n DropdownMenuItem: 'dropdown-menu',\n // switch\n createSwitch: 'switch',\n SwitchConfig: 'switch',\n}\n\n// Regex to match import statements from @mcp-elements/core\nconst CORE_IMPORT_RE = /import\\s+(type\\s+)?{([^}]+)}\\s+from\\s+['\"]@mcp-elements\\/core['\"]/g\n\nexport function transformImports(content: string, config: SnxConfig): string {\n let result = content\n const utilsPath = config.aliases.utils\n\n // Collect all @mcp-elements/core imports and replace them\n result = result.replace(CORE_IMPORT_RE, (match, typeKeyword, symbolsStr) => {\n const isTypeOnly = !!typeKeyword\n const symbols = symbolsStr\n .split(',')\n .map((s: string) => s.trim())\n .filter((s: string) => s.length > 0)\n\n // Group symbols by target file\n const groups: Record<string, { symbols: string[]; hasType: boolean }> = {}\n\n for (const sym of symbols) {\n // Handle \"type Foo\" within a value import\n const isInlineType = sym.startsWith('type ')\n const cleanSym = isInlineType ? sym.replace('type ', '') : sym\n const targetFile = SYMBOL_TO_FILE[cleanSym]\n\n if (!targetFile) {\n // Unknown symbol — keep it pointing to cn as fallback\n const file = 'cn'\n if (!groups[file]) groups[file] = { symbols: [], hasType: false }\n groups[file].symbols.push(sym)\n continue\n }\n\n if (!groups[targetFile]) groups[targetFile] = { symbols: [], hasType: false }\n if (isTypeOnly || isInlineType) {\n groups[targetFile].hasType = true\n }\n groups[targetFile].symbols.push(sym)\n }\n\n // Build replacement import statements\n const imports: string[] = []\n for (const [file, group] of Object.entries(groups)) {\n const allType = isTypeOnly || group.symbols.every(s => s.startsWith('type '))\n const keyword = allType ? 'import type' : 'import'\n imports.push(`${keyword} { ${group.symbols.join(', ')} } from '${utilsPath}/${file}'`)\n }\n\n return imports.join('\\n')\n })\n\n // Transform relative hook imports to match component directory\n result = result.replace(\n /from ['\"]\\.\\/hooks\\//g,\n `from './`\n )\n\n return result\n}\n","import path from 'node:path'\nimport fs from 'node:fs'\n\nconst BASE_URL = 'https://raw.githubusercontent.com/mcp-elements/ui/main/packages'\n\nexport async function fetchFile(relativePath: string, local = false): Promise<string> {\n if (local) {\n const localPath = path.join(__dirname, '..', '..', '..', relativePath)\n if (!fs.existsSync(localPath)) {\n throw new Error(`Local file not found: ${localPath}`)\n }\n return fs.readFileSync(localPath, 'utf-8')\n }\n\n const url = `${BASE_URL}/${relativePath}`\n const response = await fetch(url)\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch ${relativePath} (HTTP ${response.status}). ` +\n `Make sure the file exists at ${url}`\n )\n }\n\n return response.text()\n}\n","import { Command } from 'commander'\nimport pc from 'picocolors'\nimport path from 'node:path'\nimport { loadConfig } from '../utils/detect.js'\nimport { writeFile, ensureDir } from '../utils/fs.js'\nimport { fetchFile } from '../utils/fetch.js'\n\nexport const themeCommand = new Command('theme')\n .description('Manage themes')\n .argument('<theme>', 'Theme to add (dark, glass)')\n .option('--local', 'Read files from local monorepo (dev only)', false)\n .action(async (theme: string, options) => {\n const cwd = process.cwd()\n const config = loadConfig(cwd)\n\n if (!config) {\n console.log(pc.red('\\n mcp-elements.json not found. Run `npx mcp-elements init` first.\\n'))\n return\n }\n\n if (theme === 'dark') {\n console.log(pc.bold('\\n Dark theme\\n'))\n console.log(' Dark theme tokens are already included in your base CSS.')\n console.log(' To activate dark mode, add this to your HTML:')\n console.log(pc.cyan('\\n <html data-theme=\"dark\">'))\n console.log('\\n Or toggle with JavaScript:')\n console.log(pc.cyan(\" document.documentElement.setAttribute('data-theme', 'dark')\"))\n console.log()\n } else if (theme === 'glass') {\n console.log(pc.bold('\\n Glass theme\\n'))\n\n try {\n const glassContent = await fetchFile('css/themes/glass.css', options.local)\n const cssDir = path.join(cwd, path.dirname(config.tailwind.css))\n await ensureDir(cssDir)\n const destPath = path.join(cssDir, 'glass.css')\n await writeFile(destPath, glassContent)\n\n console.log(pc.green(` Created: ${path.relative(cwd, destPath)}`))\n console.log('\\n Import it in your main CSS file:')\n console.log(pc.cyan(`\\n @import './glass.css';`))\n console.log('\\n Then activate by adding to your HTML:')\n console.log(pc.cyan('\\n <html data-theme=\"glass\">'))\n console.log('\\n Or toggle with JavaScript:')\n console.log(pc.cyan(\" document.documentElement.setAttribute('data-theme', 'glass')\"))\n console.log()\n } catch (err) {\n console.log(pc.red(` Failed to fetch glass theme: ${(err as Error).message}\\n`))\n }\n } else {\n console.log(pc.yellow(`\\n Theme \"${theme}\" is not available.`))\n console.log(` Available themes: ${pc.cyan('dark')}, ${pc.cyan('glass')}\\n`)\n }\n })\n"],"mappings":"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","names":["Command","fs","path","path","fs","Command","pc","path","fs","prompts","path","fs","Command","pc","allComponents","prompts","path","fs","Command","pc","path","Command","pc","path","Command","registry"]}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ getComponent,
4
+ listComponents,
5
+ registry,
6
+ resolveComponentDeps,
7
+ resolveCoreDeps
8
+ } from "./chunk-ZEZGJIP2.js";
9
+ export {
10
+ getComponent,
11
+ listComponents,
12
+ registry,
13
+ resolveComponentDeps,
14
+ resolveCoreDeps
15
+ };
16
+ //# sourceMappingURL=resolve-UAWQZ45B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "mcp-elements",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "bin": {
6
+ "mcp-elements": "./dist/index.js"
7
+ },
8
+ "scripts": {
9
+ "build": "tsup",
10
+ "dev": "tsup --watch",
11
+ "test": "vitest run --passWithNoTests",
12
+ "test:watch": "vitest",
13
+ "clean": "rm -rf dist"
14
+ },
15
+ "dependencies": {
16
+ "commander": "^12.1.0",
17
+ "prompts": "^2.4.2",
18
+ "picocolors": "^1.1.0"
19
+ },
20
+ "devDependencies": {
21
+ "@types/prompts": "^2.4.9",
22
+ "tsup": "^8.3.0",
23
+ "vitest": "^2.1.0"
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ]
28
+ }