@lando-labs/lando-ds-mcp 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/CHANGELOG.md +526 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +4 -0
  4. package/README.md +170 -0
  5. package/build/data/ds-meta.json +1 -0
  6. package/build/data/ds-meta.schema.json +282 -0
  7. package/build/data/ds-meta.verbose.json +1 -0
  8. package/build/data/icon-metadata.d.ts +64 -0
  9. package/build/data/icon-metadata.d.ts.map +1 -0
  10. package/build/data/icon-metadata.js +1128 -0
  11. package/build/data/icon-metadata.js.map +1 -0
  12. package/build/data/lucide-icon-names.d.ts +12 -0
  13. package/build/data/lucide-icon-names.d.ts.map +1 -0
  14. package/build/data/lucide-icon-names.js +1653 -0
  15. package/build/data/lucide-icon-names.js.map +1 -0
  16. package/build/data/lucide-icons.d.ts +41 -0
  17. package/build/data/lucide-icons.d.ts.map +1 -0
  18. package/build/data/lucide-icons.js +80 -0
  19. package/build/data/lucide-icons.js.map +1 -0
  20. package/build/data/rn-tokens-snapshot.d.ts +753 -0
  21. package/build/data/rn-tokens-snapshot.d.ts.map +1 -0
  22. package/build/data/rn-tokens-snapshot.js +286 -0
  23. package/build/data/rn-tokens-snapshot.js.map +1 -0
  24. package/build/index.d.ts +18 -0
  25. package/build/index.d.ts.map +1 -0
  26. package/build/index.js +411 -0
  27. package/build/index.js.map +1 -0
  28. package/build/prompts/index.d.ts +16 -0
  29. package/build/prompts/index.d.ts.map +1 -0
  30. package/build/prompts/index.js +145 -0
  31. package/build/prompts/index.js.map +1 -0
  32. package/build/resources/code-examples.d.ts +6 -0
  33. package/build/resources/code-examples.d.ts.map +1 -0
  34. package/build/resources/code-examples.js +278 -0
  35. package/build/resources/code-examples.js.map +1 -0
  36. package/build/resources/design-tokens.d.ts +6 -0
  37. package/build/resources/design-tokens.d.ts.map +1 -0
  38. package/build/resources/design-tokens.js +128 -0
  39. package/build/resources/design-tokens.js.map +1 -0
  40. package/build/resources/index.d.ts +19 -0
  41. package/build/resources/index.d.ts.map +1 -0
  42. package/build/resources/index.js +80 -0
  43. package/build/resources/index.js.map +1 -0
  44. package/build/test.d.ts +12 -0
  45. package/build/test.d.ts.map +1 -0
  46. package/build/test.js +680 -0
  47. package/build/test.js.map +1 -0
  48. package/build/tools/compose-components.d.ts +40 -0
  49. package/build/tools/compose-components.d.ts.map +1 -0
  50. package/build/tools/compose-components.js +61 -0
  51. package/build/tools/compose-components.js.map +1 -0
  52. package/build/tools/get-animation-examples.d.ts +30 -0
  53. package/build/tools/get-animation-examples.d.ts.map +1 -0
  54. package/build/tools/get-animation-examples.js +484 -0
  55. package/build/tools/get-animation-examples.js.map +1 -0
  56. package/build/tools/get-component-capabilities.d.ts +43 -0
  57. package/build/tools/get-component-capabilities.d.ts.map +1 -0
  58. package/build/tools/get-component-capabilities.js +108 -0
  59. package/build/tools/get-component-capabilities.js.map +1 -0
  60. package/build/tools/get-component-props.d.ts +23 -0
  61. package/build/tools/get-component-props.d.ts.map +1 -0
  62. package/build/tools/get-component-props.js +46 -0
  63. package/build/tools/get-component-props.js.map +1 -0
  64. package/build/tools/get-component-reference.d.ts +25 -0
  65. package/build/tools/get-component-reference.d.ts.map +1 -0
  66. package/build/tools/get-component-reference.js +112 -0
  67. package/build/tools/get-component-reference.js.map +1 -0
  68. package/build/tools/get-component.d.ts +25 -0
  69. package/build/tools/get-component.d.ts.map +1 -0
  70. package/build/tools/get-component.js +60 -0
  71. package/build/tools/get-component.js.map +1 -0
  72. package/build/tools/get-composition-hints.d.ts +22 -0
  73. package/build/tools/get-composition-hints.d.ts.map +1 -0
  74. package/build/tools/get-composition-hints.js +39 -0
  75. package/build/tools/get-composition-hints.js.map +1 -0
  76. package/build/tools/get-design-tokens.d.ts +24 -0
  77. package/build/tools/get-design-tokens.d.ts.map +1 -0
  78. package/build/tools/get-design-tokens.js +96 -0
  79. package/build/tools/get-design-tokens.js.map +1 -0
  80. package/build/tools/get-ds-metadata.d.ts +16 -0
  81. package/build/tools/get-ds-metadata.d.ts.map +1 -0
  82. package/build/tools/get-ds-metadata.js +65 -0
  83. package/build/tools/get-ds-metadata.js.map +1 -0
  84. package/build/tools/get-hook.d.ts +19 -0
  85. package/build/tools/get-hook.d.ts.map +1 -0
  86. package/build/tools/get-hook.js +46 -0
  87. package/build/tools/get-hook.js.map +1 -0
  88. package/build/tools/get-theme-presets.d.ts +13 -0
  89. package/build/tools/get-theme-presets.d.ts.map +1 -0
  90. package/build/tools/get-theme-presets.js +41 -0
  91. package/build/tools/get-theme-presets.js.map +1 -0
  92. package/build/tools/list-components.d.ts +29 -0
  93. package/build/tools/list-components.d.ts.map +1 -0
  94. package/build/tools/list-components.js +88 -0
  95. package/build/tools/list-components.js.map +1 -0
  96. package/build/tools/list-hooks.d.ts +22 -0
  97. package/build/tools/list-hooks.d.ts.map +1 -0
  98. package/build/tools/list-hooks.js +80 -0
  99. package/build/tools/list-hooks.js.map +1 -0
  100. package/build/tools/list-icons.d.ts +28 -0
  101. package/build/tools/list-icons.d.ts.map +1 -0
  102. package/build/tools/list-icons.js +161 -0
  103. package/build/tools/list-icons.js.map +1 -0
  104. package/build/tools/platform-transform.d.ts +64 -0
  105. package/build/tools/platform-transform.d.ts.map +1 -0
  106. package/build/tools/platform-transform.js +117 -0
  107. package/build/tools/platform-transform.js.map +1 -0
  108. package/build/tools/platform.d.ts +76 -0
  109. package/build/tools/platform.d.ts.map +1 -0
  110. package/build/tools/platform.js +80 -0
  111. package/build/tools/platform.js.map +1 -0
  112. package/build/tools/search-icons.d.ts +28 -0
  113. package/build/tools/search-icons.d.ts.map +1 -0
  114. package/build/tools/search-icons.js +257 -0
  115. package/build/tools/search-icons.js.map +1 -0
  116. package/build/utils/error-envelope.d.ts +14 -0
  117. package/build/utils/error-envelope.d.ts.map +1 -0
  118. package/build/utils/error-envelope.js +35 -0
  119. package/build/utils/error-envelope.js.map +1 -0
  120. package/build/utils/icon-library.d.ts +17 -0
  121. package/build/utils/icon-library.d.ts.map +1 -0
  122. package/build/utils/icon-library.js +24 -0
  123. package/build/utils/icon-library.js.map +1 -0
  124. package/build/utils/jsx-safety.d.ts +47 -0
  125. package/build/utils/jsx-safety.d.ts.map +1 -0
  126. package/build/utils/jsx-safety.js +63 -0
  127. package/build/utils/jsx-safety.js.map +1 -0
  128. package/build/utils/meta-loader.d.ts +37 -0
  129. package/build/utils/meta-loader.d.ts.map +1 -0
  130. package/build/utils/meta-loader.js +114 -0
  131. package/build/utils/meta-loader.js.map +1 -0
  132. package/package.json +60 -0
@@ -0,0 +1,484 @@
1
+ /**
2
+ * get_animation_examples Tool (RN branch stripped in v4.0.0).
3
+ *
4
+ * Canonical DS animation patterns (CSS keyframes + usage). Brand-neutral;
5
+ * animations are technique-based (wave-dots, ripple, fade, slide, pulse,
6
+ * shimmer, bounce, spin), not tied to any specific brand.
7
+ */
8
+ import { z } from 'zod';
9
+ export const getAnimationExamplesSchema = z.object({
10
+ animationType: z.enum([
11
+ 'wave-dots',
12
+ 'ripple',
13
+ 'fade-in',
14
+ 'fade-out',
15
+ 'slide-up',
16
+ 'slide-down',
17
+ 'slide-left',
18
+ 'slide-right',
19
+ 'pulse',
20
+ 'shimmer',
21
+ 'bounce',
22
+ 'spin',
23
+ 'all'
24
+ ]).optional().describe('Type of animation to get. Omit or use "all" to see all available animations.'),
25
+ });
26
+ const animations = {
27
+ 'wave-dots': {
28
+ name: 'Wave Dots',
29
+ description: 'Three bouncing dots animation, perfect for loading indicators.',
30
+ cssKeyframes: `@keyframes waveDots {
31
+ 0%, 60%, 100% {
32
+ transform: translateY(0);
33
+ }
34
+ 30% {
35
+ transform: translateY(-10px);
36
+ }
37
+ }`,
38
+ usage: `Apply to three dot elements with staggered animation-delay:
39
+ .dot:nth-child(1) { animation-delay: 0s; }
40
+ .dot:nth-child(2) { animation-delay: 0.15s; }
41
+ .dot:nth-child(3) { animation-delay: 0.3s; }`,
42
+ timing: {
43
+ duration: '1.4s (var(--duration-slow))',
44
+ easing: 'ease-in-out'
45
+ },
46
+ example: `.waveDots {
47
+ display: flex;
48
+ gap: var(--spacing-4);
49
+ align-items: center;
50
+ }
51
+
52
+ .dot {
53
+ width: 8px;
54
+ height: 8px;
55
+ border-radius: 50%;
56
+ background: var(--color-primary);
57
+ animation: waveDots 1.4s ease-in-out infinite;
58
+ }
59
+
60
+ .dot:nth-child(1) { animation-delay: 0s; }
61
+ .dot:nth-child(2) { animation-delay: 0.15s; }
62
+ .dot:nth-child(3) { animation-delay: 0.3s; }`,
63
+ useCases: [
64
+ 'Loading states in chat interfaces',
65
+ 'Processing indicators',
66
+ 'Thinking states for AI responses',
67
+ 'Generic loading indicators'
68
+ ]
69
+ },
70
+ 'ripple': {
71
+ name: 'Ripple Effect',
72
+ description: 'Button click ripple effect expanding from click point.',
73
+ cssKeyframes: `@keyframes ripple {
74
+ 0% {
75
+ transform: scale(0);
76
+ opacity: 0.6;
77
+ }
78
+ 100% {
79
+ transform: scale(4);
80
+ opacity: 0;
81
+ }
82
+ }`,
83
+ usage: `Create ripple element on click and position at click coordinates:
84
+ const ripple = document.createElement('span');
85
+ ripple.style.left = \`\${x}px\`;
86
+ ripple.style.top = \`\${y}px\`;
87
+ ripple.classList.add('ripple');`,
88
+ timing: {
89
+ duration: '600ms',
90
+ easing: 'ease-out'
91
+ },
92
+ example: `.button {
93
+ position: relative;
94
+ overflow: hidden;
95
+ }
96
+
97
+ .ripple {
98
+ position: absolute;
99
+ border-radius: 50%;
100
+ width: 20px;
101
+ height: 20px;
102
+ background: rgba(255, 255, 255, 0.6);
103
+ transform: translate(-50%, -50%);
104
+ pointer-events: none;
105
+ animation: ripple 600ms ease-out;
106
+ }`,
107
+ useCases: [
108
+ 'Button click feedback',
109
+ 'Interactive element feedback',
110
+ 'Touch feedback on mobile',
111
+ 'Card click interactions'
112
+ ]
113
+ },
114
+ 'fade-in': {
115
+ name: 'Fade In',
116
+ description: 'Smooth fade in animation for entering elements.',
117
+ cssKeyframes: `@keyframes fadeIn {
118
+ from { opacity: 0; }
119
+ to { opacity: 1; }
120
+ }`,
121
+ usage: `Apply to elements that need to fade in on mount or appearance.`,
122
+ timing: {
123
+ duration: '200ms (var(--duration-normal))',
124
+ easing: 'ease-out'
125
+ },
126
+ example: `.fadeIn {
127
+ animation: fadeIn 200ms ease-out;
128
+ }
129
+
130
+ @keyframes fadeInUp {
131
+ from { opacity: 0; transform: translateY(8px); }
132
+ to { opacity: 1; transform: translateY(0); }
133
+ }
134
+
135
+ .fadeInUp {
136
+ animation: fadeInUp var(--duration-normal) ease-out;
137
+ }`,
138
+ useCases: [
139
+ 'Modal entrances',
140
+ 'Toast notifications',
141
+ 'Dropdown menus',
142
+ 'Tooltip appearances',
143
+ 'Content reveals'
144
+ ]
145
+ },
146
+ 'fade-out': {
147
+ name: 'Fade Out',
148
+ description: 'Smooth fade out animation for exiting elements.',
149
+ cssKeyframes: `@keyframes fadeOut {
150
+ from { opacity: 1; }
151
+ to { opacity: 0; }
152
+ }`,
153
+ usage: `Apply to elements before removal from DOM.`,
154
+ timing: {
155
+ duration: '150ms (var(--duration-fast))',
156
+ easing: 'ease-in'
157
+ },
158
+ example: `.fadeOut {
159
+ animation: fadeOut 150ms ease-in;
160
+ }
161
+
162
+ @keyframes fadeOutDown {
163
+ from { opacity: 1; transform: translateY(0); }
164
+ to { opacity: 0; transform: translateY(8px); }
165
+ }
166
+
167
+ .fadeOutDown {
168
+ animation: fadeOutDown var(--duration-fast) ease-in;
169
+ }`,
170
+ useCases: [
171
+ 'Modal exits',
172
+ 'Toast dismissals',
173
+ 'Dropdown closures',
174
+ 'Element removal',
175
+ 'Hiding content'
176
+ ]
177
+ },
178
+ 'slide-up': {
179
+ name: 'Slide Up',
180
+ description: 'Slide up from bottom animation, perfect for modals and sheets.',
181
+ cssKeyframes: `@keyframes slideUp {
182
+ from { transform: translateY(100%); opacity: 0; }
183
+ to { transform: translateY(0); opacity: 1; }
184
+ }`,
185
+ usage: `Apply to elements that slide up from bottom of screen.`,
186
+ timing: {
187
+ duration: '300ms (var(--duration-slow))',
188
+ easing: 'ease-out'
189
+ },
190
+ example: `.slideUp {
191
+ animation: slideUp 300ms ease-out;
192
+ }
193
+
194
+ .bottomSheet {
195
+ position: fixed;
196
+ bottom: 0; left: 0; right: 0;
197
+ transform: translateY(100%);
198
+ transition: transform 300ms ease-out;
199
+ }
200
+
201
+ .bottomSheet.open { transform: translateY(0); }`,
202
+ useCases: [
203
+ 'Bottom sheets on mobile',
204
+ 'Modal entrances from bottom',
205
+ 'Mobile menu slides',
206
+ 'Action sheets',
207
+ 'Bottom notifications'
208
+ ]
209
+ },
210
+ 'slide-down': {
211
+ name: 'Slide Down',
212
+ description: 'Slide down from top animation, perfect for dropdowns and alerts.',
213
+ cssKeyframes: `@keyframes slideDown {
214
+ from { transform: translateY(-100%); opacity: 0; }
215
+ to { transform: translateY(0); opacity: 1; }
216
+ }`,
217
+ usage: `Apply to elements that slide down from top.`,
218
+ timing: {
219
+ duration: '200ms (var(--duration-normal))',
220
+ easing: 'ease-out'
221
+ },
222
+ example: `.slideDown {
223
+ animation: slideDown 200ms ease-out;
224
+ }
225
+
226
+ .dropdown {
227
+ transform-origin: top;
228
+ animation: slideDown var(--duration-normal) ease-out;
229
+ }`,
230
+ useCases: [
231
+ 'Dropdown menus',
232
+ 'Top navigation slides',
233
+ 'Alert banners from top',
234
+ 'Header expansions',
235
+ 'Accordion content reveals'
236
+ ]
237
+ },
238
+ 'slide-left': {
239
+ name: 'Slide Left',
240
+ description: 'Slide in from right animation.',
241
+ cssKeyframes: `@keyframes slideLeft {
242
+ from { transform: translateX(100%); opacity: 0; }
243
+ to { transform: translateX(0); opacity: 1; }
244
+ }`,
245
+ usage: `Apply to elements that slide in from the right.`,
246
+ timing: {
247
+ duration: '300ms (var(--duration-slow))',
248
+ easing: 'ease-out'
249
+ },
250
+ example: `.slideLeft {
251
+ animation: slideLeft 300ms ease-out;
252
+ }
253
+
254
+ .sidebar {
255
+ transform: translateX(100%);
256
+ transition: transform 300ms ease-out;
257
+ }
258
+
259
+ .sidebar.open { transform: translateX(0); }`,
260
+ useCases: [
261
+ 'Side drawers from right',
262
+ 'Mobile navigation panels',
263
+ 'Detail panels',
264
+ 'Notification panels',
265
+ 'Settings panels'
266
+ ]
267
+ },
268
+ 'slide-right': {
269
+ name: 'Slide Right',
270
+ description: 'Slide in from left animation.',
271
+ cssKeyframes: `@keyframes slideRight {
272
+ from { transform: translateX(-100%); opacity: 0; }
273
+ to { transform: translateX(0); opacity: 1; }
274
+ }`,
275
+ usage: `Apply to elements that slide in from the left.`,
276
+ timing: {
277
+ duration: '300ms (var(--duration-slow))',
278
+ easing: 'ease-out'
279
+ },
280
+ example: `.slideRight {
281
+ animation: slideRight 300ms ease-out;
282
+ }
283
+
284
+ .sidebar {
285
+ transform: translateX(-100%);
286
+ transition: transform 300ms ease-out;
287
+ }
288
+
289
+ .sidebar.open { transform: translateX(0); }`,
290
+ useCases: [
291
+ 'Side navigation from left',
292
+ 'Filter panels',
293
+ 'Menu drawers',
294
+ 'Sidebar navigation',
295
+ 'Secondary content panels'
296
+ ]
297
+ },
298
+ 'pulse': {
299
+ name: 'Pulse',
300
+ description: 'Subtle pulsing animation for attention or status indicators.',
301
+ cssKeyframes: `@keyframes pulse {
302
+ 0%, 100% { opacity: 1; transform: scale(1); }
303
+ 50% { opacity: 0.6; transform: scale(0.95); }
304
+ }`,
305
+ usage: `Apply to elements that need subtle attention, like status badges or new message indicators.`,
306
+ timing: {
307
+ duration: '2s',
308
+ easing: 'ease-in-out'
309
+ },
310
+ example: `.pulse {
311
+ animation: pulse 2s ease-in-out infinite;
312
+ }
313
+
314
+ .notificationDot {
315
+ width: 8px; height: 8px;
316
+ border-radius: 50%;
317
+ background: var(--color-danger);
318
+ animation: pulse 2s ease-in-out infinite;
319
+ }`,
320
+ useCases: [
321
+ 'Online status indicators',
322
+ 'Notification badges',
323
+ 'Recording indicators',
324
+ 'Active state indicators',
325
+ 'New content indicators'
326
+ ]
327
+ },
328
+ 'shimmer': {
329
+ name: 'Shimmer',
330
+ description: 'Shimmer loading effect, perfect for skeleton screens.',
331
+ cssKeyframes: `@keyframes shimmer {
332
+ 0% { background-position: -1000px 0; }
333
+ 100% { background-position: 1000px 0; }
334
+ }`,
335
+ usage: `Apply to skeleton loading placeholders with gradient background.`,
336
+ timing: {
337
+ duration: '2s',
338
+ easing: 'linear'
339
+ },
340
+ example: `.skeleton {
341
+ background: var(--color-surface-muted);
342
+ border-radius: var(--radius-md);
343
+ position: relative;
344
+ overflow: hidden;
345
+ }
346
+
347
+ .skeleton::after {
348
+ content: '';
349
+ position: absolute;
350
+ inset: 0;
351
+ background: linear-gradient(
352
+ 90deg,
353
+ transparent,
354
+ rgba(255, 255, 255, 0.6),
355
+ transparent
356
+ );
357
+ animation: shimmer 2s linear infinite;
358
+ }`,
359
+ useCases: [
360
+ 'Skeleton screens',
361
+ 'Loading placeholders',
362
+ 'Image loading states',
363
+ 'Content loading indicators',
364
+ 'Card loading states'
365
+ ]
366
+ },
367
+ 'bounce': {
368
+ name: 'Bounce',
369
+ description: 'Gentle bounce animation for playful interactions.',
370
+ cssKeyframes: `@keyframes bounce {
371
+ 0%, 100% { transform: translateY(0); }
372
+ 25% { transform: translateY(-8px); }
373
+ 50% { transform: translateY(0); }
374
+ 75% { transform: translateY(-4px); }
375
+ }`,
376
+ usage: `Apply to elements that need a playful bounce on interaction.`,
377
+ timing: {
378
+ duration: '600ms',
379
+ easing: 'ease-out'
380
+ },
381
+ example: `.bounce {
382
+ animation: bounce 600ms ease-out;
383
+ }`,
384
+ useCases: [
385
+ 'Success feedback',
386
+ 'Button interactions',
387
+ 'Icon animations',
388
+ 'Playful microinteractions',
389
+ 'Achievement notifications'
390
+ ]
391
+ },
392
+ 'spin': {
393
+ name: 'Spin',
394
+ description: 'Continuous rotation animation for loading spinners.',
395
+ cssKeyframes: `@keyframes spin {
396
+ from { transform: rotate(0deg); }
397
+ to { transform: rotate(360deg); }
398
+ }`,
399
+ usage: `Apply to circular loading indicators.`,
400
+ timing: {
401
+ duration: '1s',
402
+ easing: 'linear'
403
+ },
404
+ example: `.spinner {
405
+ width: 24px;
406
+ height: 24px;
407
+ border: 2px solid var(--color-surface-muted);
408
+ border-top-color: var(--color-primary);
409
+ border-radius: 50%;
410
+ animation: spin 1s linear infinite;
411
+ }`,
412
+ useCases: [
413
+ 'Loading spinners',
414
+ 'Refresh icons',
415
+ 'Processing indicators',
416
+ 'Sync indicators',
417
+ 'Generic loading states'
418
+ ]
419
+ }
420
+ };
421
+ export async function getAnimationExamples(params = {}) {
422
+ const { animationType = 'all' } = params;
423
+ let result = `# Design System Animation Examples\n\n`;
424
+ result += `Canonical animation patterns for smooth, natural motion. Example snippets reference semantic color tokens (\`--color-primary\`, \`--color-danger\`, etc.); with a specific theme preset applied, they resolve to the preset's palette.\n\n`;
425
+ result += `## Design Token Reference\n\n`;
426
+ result += `Use these CSS variables for consistent timing:\n\n`;
427
+ result += '```css\n';
428
+ result += `--duration-fast: 150ms /* Quick interactions */\n`;
429
+ result += `--duration-normal: 200ms /* Standard animations */\n`;
430
+ result += `--duration-slow: 300ms /* Deliberate animations */\n`;
431
+ result += '```\n\n';
432
+ const animationsToShow = animationType === 'all'
433
+ ? Object.entries(animations)
434
+ : animationType && animations[animationType]
435
+ ? [[animationType, animations[animationType]]]
436
+ : [];
437
+ if (animationType !== 'all' && !animations[animationType]) {
438
+ return `Error: Animation type "${animationType}" not found.\n\nAvailable animations: ${Object.keys(animations).join(', ')}`;
439
+ }
440
+ for (const [, animation] of animationsToShow) {
441
+ result += `---\n\n`;
442
+ result += `## ${animation.name}\n\n`;
443
+ result += `${animation.description}\n\n`;
444
+ result += `### Keyframes\n\n`;
445
+ result += `\`\`\`css\n${animation.cssKeyframes}\n\`\`\`\n\n`;
446
+ result += `### Timing\n\n`;
447
+ result += `- **Duration**: ${animation.timing.duration}\n`;
448
+ result += `- **Easing**: ${animation.timing.easing}\n\n`;
449
+ result += `### Usage\n\n`;
450
+ result += `${animation.usage}\n\n`;
451
+ result += `### Complete Example\n\n`;
452
+ result += `\`\`\`css\n${animation.example}\n\`\`\`\n\n`;
453
+ result += `### Use Cases\n\n`;
454
+ animation.useCases.forEach((useCase) => {
455
+ result += `- ${useCase}\n`;
456
+ });
457
+ result += `\n`;
458
+ }
459
+ result += `---\n\n`;
460
+ result += `## Animation Best Practices\n\n`;
461
+ result += `1. **Use Design Tokens**: Always use \`var(--duration-*)\` for consistent timing\n`;
462
+ result += `2. **Performance**: Use \`transform\` and \`opacity\` for better performance (GPU-accelerated)\n`;
463
+ result += `3. **Accessibility**: Respect \`prefers-reduced-motion\` media query\n`;
464
+ result += `4. **Purposeful**: Every animation should serve a purpose (feedback, attention, state change)\n\n`;
465
+ result += `### Reduced Motion\n\n`;
466
+ result += `Always include reduced motion support:\n\n`;
467
+ result += '```css\n';
468
+ result += `@media (prefers-reduced-motion: reduce) {\n`;
469
+ result += ` *,\n`;
470
+ result += ` *::before,\n`;
471
+ result += ` *::after {\n`;
472
+ result += ` animation-duration: 0.01ms !important;\n`;
473
+ result += ` animation-iteration-count: 1 !important;\n`;
474
+ result += ` transition-duration: 0.01ms !important;\n`;
475
+ result += ` }\n`;
476
+ result += `}\n`;
477
+ result += '```\n\n';
478
+ if (animationType === 'all') {
479
+ result += `---\n\n`;
480
+ result += `**Tip**: Call this tool with a specific \`animationType\` to see details for just one animation.\n`;
481
+ }
482
+ return result;
483
+ }
484
+ //# sourceMappingURL=get-animation-examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-animation-examples.js","sourceRoot":"","sources":["../../src/tools/get-animation-examples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * get_component_capabilities Tool — meta-backed (v3.0.0; RN axes stripped in v4.0.0).
3
+ *
4
+ * Exposes DS capability axes for AI consumers so they can filter or
5
+ * validate before generating code:
6
+ *
7
+ * - rscSafe — no `'use client'` directive; safe in RSC trees
8
+ * - clientOnly — inverse of rscSafe
9
+ * - polymorphic — accepts `as` / `asChild` prop
10
+ * - withRef — wraps with React.forwardRef
11
+ * - deprecated — deprecation marker with replacement hint
12
+ *
13
+ * Query modes:
14
+ * 1. Full matrix — no args
15
+ * 2. Single component — `{ component: 'Button' }`
16
+ * 3. Filtered — `{ rscSafe, polymorphic, withRef, deprecated }`
17
+ */
18
+ import { z } from 'zod';
19
+ export declare const getComponentCapabilitiesSchema: z.ZodObject<{
20
+ component: z.ZodOptional<z.ZodString>;
21
+ rscSafe: z.ZodOptional<z.ZodBoolean>;
22
+ clientOnly: z.ZodOptional<z.ZodBoolean>;
23
+ polymorphic: z.ZodOptional<z.ZodBoolean>;
24
+ withRef: z.ZodOptional<z.ZodBoolean>;
25
+ deprecated: z.ZodOptional<z.ZodBoolean>;
26
+ }, "strip", z.ZodTypeAny, {
27
+ deprecated?: boolean | undefined;
28
+ polymorphic?: boolean | undefined;
29
+ component?: string | undefined;
30
+ rscSafe?: boolean | undefined;
31
+ clientOnly?: boolean | undefined;
32
+ withRef?: boolean | undefined;
33
+ }, {
34
+ deprecated?: boolean | undefined;
35
+ polymorphic?: boolean | undefined;
36
+ component?: string | undefined;
37
+ rscSafe?: boolean | undefined;
38
+ clientOnly?: boolean | undefined;
39
+ withRef?: boolean | undefined;
40
+ }>;
41
+ export type GetComponentCapabilitiesParams = z.infer<typeof getComponentCapabilitiesSchema>;
42
+ export declare function getComponentCapabilities(params: GetComponentCapabilitiesParams): Promise<string>;
43
+ //# sourceMappingURL=get-component-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-component-capabilities.d.ts","sourceRoot":"","sources":["../../src/tools/get-component-capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;EAOzC,CAAA;AAEF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAiB3F,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,8BAA8B,GACrC,OAAO,CAAC,MAAM,CAAC,CAgEjB"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * get_component_capabilities Tool — meta-backed (v3.0.0; RN axes stripped in v4.0.0).
3
+ *
4
+ * Exposes DS capability axes for AI consumers so they can filter or
5
+ * validate before generating code:
6
+ *
7
+ * - rscSafe — no `'use client'` directive; safe in RSC trees
8
+ * - clientOnly — inverse of rscSafe
9
+ * - polymorphic — accepts `as` / `asChild` prop
10
+ * - withRef — wraps with React.forwardRef
11
+ * - deprecated — deprecation marker with replacement hint
12
+ *
13
+ * Query modes:
14
+ * 1. Full matrix — no args
15
+ * 2. Single component — `{ component: 'Button' }`
16
+ * 3. Filtered — `{ rscSafe, polymorphic, withRef, deprecated }`
17
+ */
18
+ import { z } from 'zod';
19
+ import { getLightMeta, getComponent, } from '../utils/meta-loader.js';
20
+ export const getComponentCapabilitiesSchema = z.object({
21
+ component: z.string().max(200).optional().describe('Optional: PascalCase component name (e.g. "Button", "DatePicker") to query a single entry.'),
22
+ rscSafe: z.boolean().optional().describe('Filter to server-safe components (no "use client" directive).'),
23
+ clientOnly: z.boolean().optional().describe('Filter to client-only components (have "use client" directive).'),
24
+ polymorphic: z.boolean().optional().describe('Filter to components that accept `as` / `asChild` prop.'),
25
+ withRef: z.boolean().optional().describe('Filter to components that expose a forwarded ref.'),
26
+ deprecated: z.boolean().optional().describe('If true, include ONLY deprecated components. If false, exclude them.'),
27
+ });
28
+ function formatEntry(name, cmp) {
29
+ let out = `### ${name}\n\n`;
30
+ out += `- **kind**: \`${cmp.kind}\`\n`;
31
+ out += `- **category**: ${cmp.category}\n`;
32
+ out += `- **rsc-safe**: ${cmp.serverSafe ? 'yes' : 'no'}\n`;
33
+ out += `- **client-only**: ${cmp.useClient ? 'yes' : 'no'}\n`;
34
+ out += `- **polymorphic**: ${cmp.polymorphic ? 'yes' : 'no'}\n`;
35
+ out += `- **ref**: ${cmp.ref ? `forwards to \`${cmp.ref}\`` : 'none'}\n`;
36
+ out += `- **subpath**: \`${cmp.subpath}\`\n`;
37
+ if (cmp.deprecated) {
38
+ out += `- **deprecated**: since v${cmp.deprecated.since}; use \`${cmp.deprecated.replacedBy}\`; removal at v${cmp.deprecated.removeAt}\n`;
39
+ }
40
+ return out;
41
+ }
42
+ export async function getComponentCapabilities(params) {
43
+ const meta = getLightMeta();
44
+ // ---- Single-component mode ---------------------------------------------
45
+ if (params.component) {
46
+ const cmp = getComponent(params.component);
47
+ if (!cmp) {
48
+ const known = Object.keys(meta.components).sort().slice(0, 20).join(', ');
49
+ return `Error: \`${params.component}\` is not registered in DS meta.\n\nSample known components: ${known}, …`;
50
+ }
51
+ return `# Capability: ${params.component}\n\n${formatEntry(params.component, cmp)}`;
52
+ }
53
+ // ---- Matrix / filtered mode --------------------------------------------
54
+ const { rscSafe, clientOnly, polymorphic, withRef, deprecated } = params;
55
+ const withRefSet = new Set(meta.capabilities.withRef);
56
+ const entries = Object.entries(meta.components).filter(([name, cmp]) => {
57
+ if (rscSafe !== undefined && cmp.serverSafe !== rscSafe)
58
+ return false;
59
+ if (clientOnly !== undefined && cmp.useClient !== clientOnly)
60
+ return false;
61
+ if (polymorphic !== undefined && cmp.polymorphic !== polymorphic)
62
+ return false;
63
+ if (withRef !== undefined) {
64
+ if (withRefSet.has(name) !== withRef)
65
+ return false;
66
+ }
67
+ if (deprecated === true && cmp.deprecated === null)
68
+ return false;
69
+ if (deprecated === false && cmp.deprecated !== null)
70
+ return false;
71
+ return true;
72
+ });
73
+ entries.sort(([a], [b]) => a.localeCompare(b));
74
+ const filters = [];
75
+ if (rscSafe !== undefined)
76
+ filters.push(`rscSafe=${rscSafe}`);
77
+ if (clientOnly !== undefined)
78
+ filters.push(`clientOnly=${clientOnly}`);
79
+ if (polymorphic !== undefined)
80
+ filters.push(`polymorphic=${polymorphic}`);
81
+ if (withRef !== undefined)
82
+ filters.push(`withRef=${withRef}`);
83
+ if (deprecated !== undefined)
84
+ filters.push(`deprecated=${deprecated}`);
85
+ let out = '# Component Capabilities\n\n';
86
+ out += `Showing ${entries.length} of ${Object.keys(meta.components).length} components`;
87
+ if (filters.length > 0)
88
+ out += ` (filtered: ${filters.join(', ')})`;
89
+ out += `\nDS: ${meta.package.name}@${meta.package.version}\n\n`;
90
+ // Summary counts for the unfiltered matrix
91
+ if (filters.length === 0) {
92
+ out += '## Summary\n\n';
93
+ out += `- rsc-safe: ${meta.capabilities.rscSafe.length}\n`;
94
+ out += `- client-only: ${meta.capabilities.clientOnly.length}\n`;
95
+ out += `- polymorphic: ${meta.capabilities.polymorphic.length}\n`;
96
+ out += `- with-ref: ${meta.capabilities.withRef.length}\n\n`;
97
+ }
98
+ if (entries.length === 0) {
99
+ out += '_No components match these filters._\n';
100
+ return out;
101
+ }
102
+ for (const [name, cmp] of entries) {
103
+ out += formatEntry(name, cmp);
104
+ out += '\n';
105
+ }
106
+ return out;
107
+ }
108
+ //# sourceMappingURL=get-component-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-component-capabilities.js","sourceRoot":"","sources":["../../src/tools/get-component-capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * get_component_props Tool — meta-backed (v3.0.0).
3
+ *
4
+ * Returns a TypeScript interface for the requested component's props,
5
+ * derived from `meta.components[X].props`. Names in meta are PascalCase
6
+ * (Button, DatePicker) — this tool accepts them as-is.
7
+ *
8
+ * Post-#40: props already come from meta in structured form (type,
9
+ * required, default, description). This tool renders that as a TS
10
+ * interface for AI consumers who want a familiar shape. A future
11
+ * `format: 'jsonSchema'` param can expose the raw structured form.
12
+ */
13
+ import { z } from 'zod';
14
+ export declare const getComponentPropsSchema: z.ZodObject<{
15
+ componentName: z.ZodEnum<[string, ...string[]]>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ componentName: string;
18
+ }, {
19
+ componentName: string;
20
+ }>;
21
+ export type GetComponentPropsParams = z.infer<typeof getComponentPropsSchema>;
22
+ export declare function getComponentProps(params: GetComponentPropsParams): Promise<string>;
23
+ //# sourceMappingURL=get-component-props.d.ts.map