@maltjoy/mcp-server 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +34 -3
  2. package/dist/doc/VJoyAvailability/JoyAvailability.types.ts +1 -0
  3. package/dist/doc/VJoyAvatar/JoyAvatar.types.ts +6 -0
  4. package/dist/doc/VJoyAvatar/metadata.json +1 -1
  5. package/dist/doc/VJoyBadge/JoyBadge.types.ts +3 -0
  6. package/dist/doc/VJoyBadge/metadata.json +0 -14
  7. package/dist/doc/VJoyBadgeLevel/JoyBadgeLevel.types.ts +15 -0
  8. package/dist/doc/VJoyButton/JoyButton.types.ts +10 -0
  9. package/dist/doc/VJoyButton/metadata.json +1 -1
  10. package/dist/doc/VJoyCollapseItem/JoyCollapseItem.types.ts +8 -0
  11. package/dist/doc/VJoyCollapseItem/metadata.json +1 -1
  12. package/dist/doc/VJoyCompanyAvatar/JoyCompanyAvatar.types.ts +3 -0
  13. package/dist/doc/VJoyDialog/JoyDialog.types.ts +3 -0
  14. package/dist/doc/VJoyDot/VJoyDot.types.ts +1 -0
  15. package/dist/doc/VJoyDot/metadata.json +13 -14
  16. package/dist/doc/VJoyDrawer/JoyDrawer.types.ts +1 -0
  17. package/dist/doc/VJoyDropdown/JoyDropdown.types.ts +21 -0
  18. package/dist/doc/VJoyDropdownList/JoyDropdownList.types.ts +3 -0
  19. package/dist/doc/VJoyDropzone/metadata.json +11 -0
  20. package/dist/doc/VJoyFormError/metadata.json +16 -0
  21. package/dist/doc/VJoyFunnel/JoyFunnel.types.ts +5 -0
  22. package/dist/doc/VJoyHighlight/JoyHighlight.types.ts +4 -0
  23. package/dist/doc/VJoyHighlight/metadata.json +1 -1
  24. package/dist/doc/VJoyIcon/JoyIcon.types.ts +8 -0
  25. package/dist/doc/VJoyIcon/metadata.json +1 -1
  26. package/dist/doc/VJoyIndicators/JoyIndicators.types.ts +1 -0
  27. package/dist/doc/VJoyInput/JoyInput.types.ts +36 -0
  28. package/dist/doc/VJoyInput/metadata.json +7 -5
  29. package/dist/doc/VJoyLabel/JoyLabel.types.ts +3 -0
  30. package/dist/doc/VJoyLink/JoyLink.types.ts +2 -0
  31. package/dist/doc/VJoyLink/metadata.json +1 -1
  32. package/dist/doc/VJoyListItem/metadata.json +1 -1
  33. package/dist/doc/VJoyMenu/JoyMenu.types.ts +14 -0
  34. package/dist/doc/VJoyMenu/metadata.json +3 -0
  35. package/dist/doc/VJoyMenuItem/metadata.json +2 -2
  36. package/dist/doc/VJoyPanel/JoyPanel.types.ts +6 -0
  37. package/dist/doc/VJoyProductTour/JoyProductTour.types.ts +45 -0
  38. package/dist/doc/VJoyProductTour/metadata.json +1 -1
  39. package/dist/doc/VJoyProgressBar/JoyProgressBar.types.ts +3 -0
  40. package/dist/doc/VJoyRadio/JoyRadio.types.ts +1 -0
  41. package/dist/doc/VJoyRadio/metadata.json +16 -0
  42. package/dist/doc/VJoyRadioGroup/JoyRadioGroup.types.ts +1 -0
  43. package/dist/doc/VJoyRadioGroup/metadata.json +16 -0
  44. package/dist/doc/VJoyRatingStars/JoyRatingStars.types.ts +3 -0
  45. package/dist/doc/VJoyScreenLoader/VJoyScreenLoader.types.ts +1 -0
  46. package/dist/doc/VJoySelect/JoySelect.types.ts +3 -0
  47. package/dist/doc/VJoySelectableItem/VJoySelectableItem.types.ts +10 -0
  48. package/dist/doc/VJoySelectableItem/metadata.json +1 -1
  49. package/dist/doc/VJoySeparator/JoySeparator.types.ts +4 -0
  50. package/dist/doc/VJoySnackbar/JoySnackbar.types.ts +23 -0
  51. package/dist/doc/VJoySpinner/JoySpinner.types.ts +1 -0
  52. package/dist/doc/VJoyStep/TJoyStep.types.ts +1 -0
  53. package/dist/doc/VJoyTag/JoyTag.types.ts +19 -0
  54. package/dist/doc/VJoyTagsInput/JoyTagsInput.types.ts +4 -0
  55. package/dist/doc/VJoyTagsList/JoyTagsList.types.ts +5 -0
  56. package/dist/doc/VJoyTemplate/JoyTemplate.types.ts +1 -0
  57. package/dist/doc/VJoyText/JoyText.types.ts +14 -0
  58. package/dist/doc/VJoyWalkthrough/metadata.json +1 -1
  59. package/dist/doc/VJoyWalkthroughTrigger/metadata.json +1 -1
  60. package/dist/doc/VJoyWrapper/JoyWrapper.types.ts +9 -0
  61. package/dist/doc/index.json +8 -8
  62. package/dist/index.js +15 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/tools/get-component-types.d.ts +31 -0
  65. package/dist/tools/get-component-types.d.ts.map +1 -0
  66. package/dist/tools/get-component-types.js +60 -0
  67. package/dist/tools/get-component-types.js.map +1 -0
  68. package/package.json +1 -1
package/README.md CHANGED
@@ -6,6 +6,7 @@ MCP (Model Context Protocol) server for the Joy Design System. This server expos
6
6
 
7
7
  - 🔍 List all 74 available Joy Vue3 components
8
8
  - 📚 Access component documentation (props, events, slots, exposed members)
9
+ - 🏷️ Retrieve TypeScript types definitions for component props (variants, sizes, etc.)
9
10
  - 🎨 List 132 design tokens (colors, spacing, typography, etc.)
10
11
  - 💅 List 272 CSS utility classes
11
12
  - 🤖 AI-friendly interface through MCP protocol
@@ -109,7 +110,35 @@ Retrieves detailed information about a specific Joy Vue3 component including pro
109
110
  }
110
111
  ```
111
112
 
112
- ### 3. `joy_list_design_tokens`
113
+ ### 3. `joy_get_component_types`
114
+
115
+ Retrieves the TypeScript types definition files associated with a specific Joy Vue3 component. These types define the allowed values for props (variants, sizes, etc.).
116
+
117
+ **Parameters:**
118
+ - `componentName` (string, required): The exact name of the component (e.g., "VJoyButton", "VJoyMenu")
119
+
120
+ **Returns:**
121
+ ```json
122
+ {
123
+ "componentName": "VJoyButton",
124
+ "files": [
125
+ {
126
+ "filename": "JoyButton.types.ts",
127
+ "content": "import {TGenericVariants, TPositions, TSizes} from '../../types';\n\nexport type TJoyDefaultButtonVariants = TGenericVariants | 'main' | 'admin' | 'ghost';\nexport type TJoyButtonVariants = TJoyDefaultButtonVariants | ...;\nexport type TJoyButtonSizes = Exclude<TSizes, 'xlarge'>;\nexport type TJoyButtonIconPositions = TPositions;\n"
128
+ }
129
+ ]
130
+ }
131
+ ```
132
+
133
+ **Error Response:**
134
+ ```json
135
+ {
136
+ "error": "No types file found for component \"VJoyNonExistent\". Use joy_list_components to get a list of available components."
137
+ }
138
+ ```
139
+
140
+ ### 4. `joy_list_design_tokens`
141
+
113
142
 
114
143
  Lists all available Joy design tokens (CSS custom properties) organized by domain.
115
144
 
@@ -129,7 +158,7 @@ Lists all available Joy design tokens (CSS custom properties) organized by domai
129
158
  }
130
159
  ```
131
160
 
132
- ### 4. `joy_list_css_classes`
161
+ ### 5. `joy_list_css_classes`
133
162
 
134
163
  Lists all available Joy CSS utility classes organized by domain.
135
164
 
@@ -192,6 +221,7 @@ joy-mcp-server/
192
221
  │ └── tools/
193
222
  │ ├── list-components.ts # Component listing tool
194
223
  │ ├── get-component-info.ts # Component info retrieval tool
224
+ │ ├── get-component-types.ts # Component types retrieval tool
195
225
  │ ├── list-design-tokens.ts # Design tokens tool
196
226
  │ └── list-css-classes.ts # CSS classes tool
197
227
  ├── dist/
@@ -200,7 +230,8 @@ joy-mcp-server/
200
230
  │ ├── design-tokens.json # All design tokens
201
231
  │ ├── css-classes.json # All CSS classes
202
232
  │ └── VJoy*/ # Component directories
203
- └── metadata.json # Component metadata
233
+ ├── metadata.json # Component metadata
234
+ │ └── *.types.ts # Component TypeScript types
204
235
  ├── package.json
205
236
  ├── tsconfig.json
206
237
  ├── README.md
@@ -0,0 +1 @@
1
+ export type TJoyAvailabilityStatus = 'AVAILABLE' | 'AVAILABLE_AND_VERIFIED' | 'NOT_AVAILABLE_WITH_DATE' | 'AVAILABLE_SOON' | 'NOT_AVAILABLE';
@@ -0,0 +1,6 @@
1
+ import {TSizes} from '../../types';
2
+ import VJoyAvatar from './VJoyAvatar.vue';
3
+
4
+ /** AVATAR SIZES */
5
+ export type TJoyAvatarSizes = Exclude<TSizes, 'xxsmall'>;
6
+ export type TJoyAvatarProps = InstanceType<typeof VJoyAvatar>['$props'];
@@ -103,7 +103,7 @@
103
103
  "key",
104
104
  "user-photo",
105
105
  "link",
106
- "... (207 more)"
106
+ "... (210 more)"
107
107
  ]
108
108
  },
109
109
  {
@@ -0,0 +1,3 @@
1
+ import {TJoyDotVariants} from '../JoyDot/VJoyDot.types';
2
+
3
+ export type TJoyBadgeVariants = TJoyDotVariants;
@@ -40,15 +40,6 @@
40
40
  "dark-blue",
41
41
  "yellow"
42
42
  ]
43
- },
44
- {
45
- "name": "number",
46
- "type": "number | undefined",
47
- "required": false,
48
- "description": "",
49
- "possibleValues": [
50
- "number"
51
- ]
52
43
  }
53
44
  ],
54
45
  "events": [],
@@ -73,11 +64,6 @@
73
64
  "name": "variant",
74
65
  "type": "TJoyDotVariants",
75
66
  "isMethod": false
76
- },
77
- {
78
- "name": "number",
79
- "type": "number | undefined",
80
- "isMethod": false
81
67
  }
82
68
  ],
83
69
  "hasVModel": false
@@ -0,0 +1,15 @@
1
+ export enum JoyBadgeLevelEnum {
2
+ // Should be replaced by JoyBadgeLevelEnum.HIGH_POTENTIAL_AUTO OR JoyBadgeProgramEnum.HIGH_POTENTIAL
3
+ HIGH_POTENTIAL = 'highpotential',
4
+ HIGH_POTENTIAL_AUTO = 'high-potential-auto',
5
+ MALT_LINKER = 'maltlinker',
6
+ NEW = 'new',
7
+ SUPER_MALTER = 'supermalter',
8
+ VERIFIED = 'verified',
9
+ }
10
+
11
+ export enum JoyBadgeProgramEnum {
12
+ HIGH_POTENTIAL = 'program_high-potential',
13
+ }
14
+
15
+ export type TJoyBadges = `${JoyBadgeLevelEnum | JoyBadgeProgramEnum}`;
@@ -0,0 +1,10 @@
1
+ import {TGenericVariants, TPositions, TSizes} from '../../types';
2
+
3
+ export type TJoyDefaultButtonVariants = TGenericVariants | 'main' | 'admin' | 'ghost';
4
+ export type TJoyAIButtonVariants = `${TJoyDefaultButtonVariants}-ai`;
5
+
6
+ export type TJoyButtonVariants = TJoyDefaultButtonVariants | Exclude<TJoyAIButtonVariants, 'admin-ai'>;
7
+
8
+ export type TJoyButtonSizes = Exclude<TSizes, 'xlarge'>;
9
+
10
+ export type TJoyButtonIconPositions = TPositions;
@@ -92,7 +92,7 @@
92
92
  "type": "string",
93
93
  "required": false,
94
94
  "description": "Name of the icon, placed before the text",
95
- "possibleValues": "TJoyIconsNames (217 values)"
95
+ "possibleValues": "TJoyIconsNames (220 values)"
96
96
  },
97
97
  {
98
98
  "name": "id",
@@ -0,0 +1,8 @@
1
+ import VJoyCollapseItem from './VJoyCollapseItem.vue';
2
+
3
+ export type TJoyCollapseItemProps = InstanceType<typeof VJoyCollapseItem>['$props'];
4
+
5
+ export type TJoyCollapseItems = TJoyCollapseItemProps[];
6
+
7
+ export const COLLAPSE_ITEM_MODES = ['outline', 'default'] as const;
8
+ export type TJoyCollapseItemModes = (typeof COLLAPSE_ITEM_MODES)[number];
@@ -65,7 +65,7 @@
65
65
  "key",
66
66
  "user-photo",
67
67
  "link",
68
- "... (207 more)"
68
+ "... (210 more)"
69
69
  ]
70
70
  }
71
71
  ],
@@ -0,0 +1,3 @@
1
+ import {TSizes} from '../../types';
2
+
3
+ export type TJoyCompanyAvatarSizes = Extract<TSizes, 'large' | 'medium' | 'small'>;
@@ -0,0 +1,3 @@
1
+ import {TSizes} from '../../types';
2
+
3
+ export type TJoyDialogSizes = Extract<TSizes, 'large'> | 'default';
@@ -0,0 +1 @@
1
+ export type TJoyDotVariants = 'info' | 'gray' | 'green' | 'orange' | 'red' | 'teal' | 'pink' | 'dark-blue' | 'yellow';
@@ -2,12 +2,20 @@
2
2
  "name": "JoyDot",
3
3
  "displayName": "VJoyDot",
4
4
  "props": [
5
+ {
6
+ "name": "number",
7
+ "type": "any",
8
+ "required": false,
9
+ "default": "undefined",
10
+ "description": "number: set a number or a string to display inside the dot, for badge-style dots with numbers.",
11
+ "possibleValues": null
12
+ },
5
13
  {
6
14
  "name": "variant",
7
15
  "type": "TJoyDotVariants | undefined",
8
16
  "required": false,
9
17
  "default": "\"info\"",
10
- "description": "",
18
+ "description": "variant: the color variant for the dot. You can use the TJoyDotVariants type.",
11
19
  "possibleValues": [
12
20
  "info",
13
21
  "gray",
@@ -19,28 +27,19 @@
19
27
  "dark-blue",
20
28
  "yellow"
21
29
  ]
22
- },
23
- {
24
- "name": "number",
25
- "type": "number | undefined",
26
- "required": false,
27
- "description": "",
28
- "possibleValues": [
29
- "number"
30
- ]
31
30
  }
32
31
  ],
33
32
  "events": [],
34
33
  "slots": [],
35
34
  "exposed": [
36
35
  {
37
- "name": "variant",
38
- "type": "TJoyDotVariants",
36
+ "name": "number",
37
+ "type": "any",
39
38
  "isMethod": false
40
39
  },
41
40
  {
42
- "name": "number",
43
- "type": "number | undefined",
41
+ "name": "variant",
42
+ "type": "TJoyDotVariants",
44
43
  "isMethod": false
45
44
  }
46
45
  ],
@@ -0,0 +1 @@
1
+ export type TJoyDrawerSizes = 'default' | 'large';
@@ -0,0 +1,21 @@
1
+ import {TPositions} from '../../types';
2
+
3
+ export type TJoyDropdownDirections = 'up' | 'down';
4
+
5
+ export type TJoyDropdownJustify = TPositions;
6
+
7
+ export interface TJoyDropdownOption {
8
+ id: string;
9
+ value?: string;
10
+ label: string;
11
+ href?: string;
12
+ /**
13
+ * @default false
14
+ */
15
+ disabled?: boolean;
16
+ /**
17
+ * @default false
18
+ */
19
+ checked?: boolean;
20
+ [k: string]: any;
21
+ }
@@ -0,0 +1,3 @@
1
+ import {TSizes} from '../../types';
2
+
3
+ export type TJoyDropdownListSizes = Extract<TSizes, 'xsmall' | 'small' | 'medium'>;
@@ -102,6 +102,17 @@
102
102
  "possibleValues": [
103
103
  "string"
104
104
  ]
105
+ },
106
+ {
107
+ "name": "canDelete",
108
+ "type": "boolean | undefined",
109
+ "required": false,
110
+ "default": "true",
111
+ "description": "Enable delete file button.",
112
+ "possibleValues": [
113
+ "false",
114
+ "true"
115
+ ]
105
116
  }
106
117
  ],
107
118
  "events": [],
@@ -13,6 +13,17 @@
13
13
  "true"
14
14
  ]
15
15
  },
16
+ {
17
+ "name": "noMargin",
18
+ "type": "boolean | undefined",
19
+ "required": false,
20
+ "default": "false",
21
+ "description": "Allows to remove any bottom margin on the component",
22
+ "possibleValues": [
23
+ "false",
24
+ "true"
25
+ ]
26
+ },
16
27
  {
17
28
  "name": "noHtmlErrorText",
18
29
  "type": "string | undefined",
@@ -51,6 +62,11 @@
51
62
  "type": "boolean",
52
63
  "isMethod": false
53
64
  },
65
+ {
66
+ "name": "noMargin",
67
+ "type": "boolean",
68
+ "isMethod": false
69
+ },
54
70
  {
55
71
  "name": "noHtmlErrorText",
56
72
  "type": "string | undefined",
@@ -0,0 +1,5 @@
1
+ import {Profiles, TSizes} from '../../types';
2
+
3
+ export type TJoyFunnelLayoutWidths = Extract<TSizes, 'medium' | 'large'>;
4
+
5
+ export type TJoyFunnelProfiles = `${Profiles.STRATEGY}` | `${Profiles.DEFAULT}`;
@@ -0,0 +1,4 @@
1
+ import {TLevels} from '../../types';
2
+
3
+ export type TJoyHighlightLevels = TLevels;
4
+ export type TJoyHighlightVariants = 'ai' | 'default';
@@ -54,7 +54,7 @@
54
54
  "type": "string",
55
55
  "required": false,
56
56
  "description": "Based on maltjoy/icons availabilities. Works in pair with displayIcon boolean prop.",
57
- "possibleValues": "TJoyIconsNames (217 values)"
57
+ "possibleValues": "TJoyIconsNames (220 values)"
58
58
  }
59
59
  ],
60
60
  "events": [],
@@ -0,0 +1,8 @@
1
+ import type {JoyIconsId} from '@maltjoy/icons';
2
+ import {TSizes, TLevels} from '../../types';
3
+
4
+ export type TJoyIconsColors = TLevels | 'neutral-50' | 'primary' | 'secondary' | 'tertiary' | 'quaternary' | 'brand-primary' | 'brand-secondary' | 'white';
5
+
6
+ export type TJoyIconSizes = TSizes;
7
+
8
+ export type TJoyIconsNames = JoyIconsId;
@@ -65,7 +65,7 @@
65
65
  "key",
66
66
  "user-photo",
67
67
  "link",
68
- "... (207 more)"
68
+ "... (210 more)"
69
69
  ]
70
70
  },
71
71
  {
@@ -0,0 +1 @@
1
+ export type TJoyIndicatorsVariants = 'default' | 'light';
@@ -0,0 +1,36 @@
1
+ import {TSizes} from '../../types';
2
+ import {TJoyIconsNames} from '../JoyIcon/JoyIcon.types';
3
+ import {TJoyLabelSizes} from '../JoyLabel/JoyLabel.types';
4
+
5
+ export type TJoyInputSizes = Extract<TSizes, 'small' | 'medium' | 'large'>;
6
+
7
+ export interface VJoyInputProps {
8
+ autofocus?: boolean;
9
+ modelValue?: string | number | null;
10
+ disabled?: boolean;
11
+ id?: string;
12
+ invalid?: boolean;
13
+ name?: string;
14
+ required?: boolean;
15
+ /** Display a label on top of the element. Handy if you only need to pass a string. If you need more, use the VJoyLabel. */
16
+ label?: string;
17
+ /** Overrides the default label size. See JoyLabel stories */
18
+ labelSize?: TJoyLabelSizes;
19
+ /** If your component is not required, we can add a label to explicitely tell that it's not mandatory */
20
+ optionalLabel?: string;
21
+ /** Depending on context, we can add a "*" after the label to specify it's mandatory. */
22
+ requiredMark?: boolean;
23
+ modelModifiers?: Partial<Record<'number' | 'trim' | 'lazy', boolean>>;
24
+ /** Display a cross icon on the right that enables to clear the field */
25
+ clearable?: boolean;
26
+ /** Add a JoyIcon / joy-icon with given name on left-side. */
27
+ icon?: TJoyIconsNames;
28
+ size?: TJoyInputSizes;
29
+ type?: string;
30
+ /** Adds a legend like symbol on the right of the component. Made for number based values */
31
+ unit?: string;
32
+ /** Activates the readonly mode for the input */
33
+ readonly?: boolean;
34
+ /** When using the clearable property, you have to specific an aria-label for accessibility. */
35
+ clearAriaLabel?: string;
36
+ }
@@ -57,10 +57,12 @@
57
57
  },
58
58
  {
59
59
  "name": "name",
60
- "type": "string",
61
- "required": true,
60
+ "type": "string | undefined",
61
+ "required": false,
62
62
  "description": "",
63
- "possibleValues": null
63
+ "possibleValues": [
64
+ "string"
65
+ ]
64
66
  },
65
67
  {
66
68
  "name": "required",
@@ -140,7 +142,7 @@
140
142
  "type": "string",
141
143
  "required": false,
142
144
  "description": "Add a JoyIcon / joy-icon with given name on left-side.",
143
- "possibleValues": "TJoyIconsNames (217 values)"
145
+ "possibleValues": "TJoyIconsNames (220 values)"
144
146
  },
145
147
  {
146
148
  "name": "size",
@@ -284,7 +286,7 @@
284
286
  },
285
287
  {
286
288
  "name": "name",
287
- "type": "string",
289
+ "type": "string | undefined",
288
290
  "isMethod": false
289
291
  },
290
292
  {
@@ -0,0 +1,3 @@
1
+ import {TSizes} from '@/types';
2
+
3
+ export type TJoyLabelSizes = Extract<TSizes, 'small' | 'medium' | 'large'>;
@@ -0,0 +1,2 @@
1
+ export type TJoyLinkColors = 'teal' | 'white';
2
+ export type TJoyLinkType = HTMLButtonElement['type'];
@@ -25,7 +25,7 @@
25
25
  "type": "string",
26
26
  "required": false,
27
27
  "description": "",
28
- "possibleValues": "TJoyIconsNames (217 values)"
28
+ "possibleValues": "TJoyIconsNames (220 values)"
29
29
  },
30
30
  {
31
31
  "name": "text",
@@ -7,7 +7,7 @@
7
7
  "type": "string",
8
8
  "required": false,
9
9
  "description": "",
10
- "possibleValues": "TJoyIconsNames (217 values)"
10
+ "possibleValues": "TJoyIconsNames (220 values)"
11
11
  }
12
12
  ],
13
13
  "events": [
@@ -0,0 +1,14 @@
1
+ import {JoyIconsId} from '@maltjoy/icons';
2
+
3
+ export interface IJoyMenuItem {
4
+ id?: string;
5
+ label: string;
6
+ href?: string;
7
+ icon?: JoyIconsId;
8
+ current?: boolean;
9
+ /**
10
+ * @default false
11
+ */
12
+ disabled?: boolean;
13
+ [k: string]: any;
14
+ }
@@ -129,6 +129,7 @@
129
129
  "\"bell\"",
130
130
  "\"block-shield\"",
131
131
  "\"bricks\"",
132
+ "\"briefcase-hover\"",
132
133
  "\"briefcase\"",
133
134
  "\"calendar\"",
134
135
  "\"camcorder\"",
@@ -243,6 +244,8 @@
243
244
  "\"plus-circle\"",
244
245
  "\"pound-circle\"",
245
246
  "\"print\"",
247
+ "\"profile-picture-hover\"",
248
+ "\"profile-picture\"",
246
249
  "\"projectmanager-agile\"",
247
250
  "\"qr-code\"",
248
251
  "\"question-circle\"",
@@ -23,7 +23,7 @@
23
23
  "type": "string",
24
24
  "required": false,
25
25
  "description": "",
26
- "possibleValues": "TJoyIconsNames (217 values)"
26
+ "possibleValues": "TJoyIconsNames (220 values)"
27
27
  },
28
28
  {
29
29
  "name": "current",
@@ -50,7 +50,7 @@
50
50
  "type": "string",
51
51
  "required": false,
52
52
  "description": "",
53
- "possibleValues": "TJoyIconsNames (217 values)"
53
+ "possibleValues": "TJoyIconsNames (220 values)"
54
54
  },
55
55
  {
56
56
  "name": "statusColor",
@@ -0,0 +1,6 @@
1
+ import {TSizes} from '../../types';
2
+
3
+ export type TJoyPanelSizes = Extract<TSizes, 'small' | 'medium' | 'large'>;
4
+ export type TJoyPanelTitleSizes = Extract<TSizes, 'small' | 'large'>;
5
+
6
+ export type TJoyPanelVariants = 'default' | 'ai';
@@ -0,0 +1,45 @@
1
+ import {TJoyIconsNames} from '../JoyIcon/JoyIcon.types';
2
+ import VJoyProductTourInner from './VJoyProductTourInner.vue';
3
+
4
+ export const PRODUCT_TOUR_POSITIONS = ['left', 'right', 'top', 'bottom'] as const;
5
+ export type TJoyProductTourPositions = (typeof PRODUCT_TOUR_POSITIONS)[number];
6
+
7
+ export interface IJoyProductTourShowParams {
8
+ highlightSelector?: HTMLElement;
9
+ }
10
+
11
+ export type TJoyProductTourEvents = {
12
+ 'product-tour:show': string;
13
+ };
14
+
15
+ export interface VJoyProductTourProps {
16
+ icon?: TJoyIconsNames;
17
+ steps?: number;
18
+ step?: number;
19
+ position?: TJoyProductTourPositions;
20
+ open?: boolean;
21
+ maxWidth?: number;
22
+ disableOverlay?: boolean;
23
+ spotlightPadding?: number;
24
+ spotlightSelector: string;
25
+ closeButton?: boolean;
26
+ }
27
+
28
+ export interface VJoyProductTourSlots {
29
+ /** Allows to inject an image above the title */
30
+ 'product-tour-banner'?: () => any;
31
+ /** Most of the time we use it to display tags, or short content */
32
+ 'product-tour-preheader'?: () => any;
33
+ /** Title of the component */
34
+ 'product-tour-header'?: () => any;
35
+ /** Main content. Put whatever you want here */
36
+ 'product-tour-content'?: () => any;
37
+ /** The click here will automatically handle slotted VJoyButton with bubbling */
38
+ 'product-tour-dismiss'?: () => any;
39
+ /** To display the main CTA. Component hiding needs to be made manually */
40
+ 'product-tour-next'?: () => any;
41
+ }
42
+
43
+ export interface VJoyProductToursEvents {
44
+ 'product-tour:hide': [];
45
+ }
@@ -7,7 +7,7 @@
7
7
  "type": "string",
8
8
  "required": false,
9
9
  "description": "",
10
- "possibleValues": "TJoyIconsNames (217 values)"
10
+ "possibleValues": "TJoyIconsNames (220 values)"
11
11
  },
12
12
  {
13
13
  "name": "steps",
@@ -0,0 +1,3 @@
1
+ import {TGenericVariants, TLevels} from '../../types';
2
+
3
+ export type TJoyProgressBarColors = TGenericVariants | Exclude<TLevels, 'info' | 'neutral'>;
@@ -0,0 +1 @@
1
+ export type RadioThemes = 'default' | 'outline';
@@ -2,6 +2,17 @@
2
2
  "name": "JoyRadio",
3
3
  "displayName": "VJoyRadio",
4
4
  "props": [
5
+ {
6
+ "name": "invalid",
7
+ "type": "boolean | undefined",
8
+ "required": false,
9
+ "default": "undefined",
10
+ "description": "Invalid state of the component\n\nIf not explicitly provided, will inherit from parent VJoyRadioGroup's invalid prop.\nNote: A checked radio cannot be invalid (the `checked` state takes priority over `invalid` state).",
11
+ "possibleValues": [
12
+ "false",
13
+ "true"
14
+ ]
15
+ },
5
16
  {
6
17
  "name": "required",
7
18
  "type": "boolean | undefined",
@@ -104,6 +115,11 @@
104
115
  }
105
116
  ],
106
117
  "exposed": [
118
+ {
119
+ "name": "invalid",
120
+ "type": "boolean",
121
+ "isMethod": false
122
+ },
107
123
  {
108
124
  "name": "required",
109
125
  "type": "boolean",
@@ -0,0 +1 @@
1
+ export type RadioGroupDirection = 'vertical' | 'horizontal';
@@ -30,6 +30,17 @@
30
30
  "possibleValues": [
31
31
  "string"
32
32
  ]
33
+ },
34
+ {
35
+ "name": "invalid",
36
+ "type": "boolean | undefined",
37
+ "required": false,
38
+ "default": "false",
39
+ "description": "Invalid state of the radio group\n\nWhen set to true, all child VJoyRadio components will inherit this invalid state.\nNote: A checked radio cannot be invalid (the `checked` state takes priority over `invalid` state at the radio level).",
40
+ "possibleValues": [
41
+ "false",
42
+ "true"
43
+ ]
33
44
  }
34
45
  ],
35
46
  "events": [],
@@ -44,6 +55,11 @@
44
55
  }
45
56
  ],
46
57
  "exposed": [
58
+ {
59
+ "name": "invalid",
60
+ "type": "boolean",
61
+ "isMethod": false
62
+ },
47
63
  {
48
64
  "name": "direction",
49
65
  "type": "RadioGroupDirection",
@@ -0,0 +1,3 @@
1
+ import {TSizes} from '../../types';
2
+
3
+ export type TJoyRatingStarsSizes = Extract<TSizes, 'small' | 'medium' | 'large'>;
@@ -0,0 +1 @@
1
+ export type TJoyScreenLoaderColors = 'dark' | 'light';
@@ -0,0 +1,3 @@
1
+ import {TSizes} from '../../types';
2
+
3
+ export type TJoySelectSizes = Extract<TSizes, 'xsmall' | 'small' | 'medium'>;
@@ -0,0 +1,10 @@
1
+ import VJoySelectableItem from './VJoySelectableItem.vue';
2
+ import type {ComponentProps} from 'vue-component-type-helpers';
3
+
4
+ export type TVJoySelectableItemProps = ComponentProps<typeof VJoySelectableItem>;
5
+
6
+ export interface TJoySelectableItemOption extends TVJoySelectableItemProps {
7
+ attrs?: {
8
+ [k: string]: any;
9
+ };
10
+ }
@@ -104,7 +104,7 @@
104
104
  "type": "string",
105
105
  "required": false,
106
106
  "description": "",
107
- "possibleValues": "TJoyIconsNames (217 values)"
107
+ "possibleValues": "TJoyIconsNames (220 values)"
108
108
  }
109
109
  ],
110
110
  "events": [
@@ -0,0 +1,4 @@
1
+ import {TSizes} from '../../types';
2
+
3
+ export type BinarySizes = 'default';
4
+ export type TJoySeparatorSizes = BinarySizes | Extract<TSizes, 'small'>;
@@ -0,0 +1,23 @@
1
+ import {App} from 'vue';
2
+ import {Emitter} from 'mitt';
3
+ import VJoySnackbar from './VJoySnackbar.vue';
4
+ import {TLevels} from '../../types';
5
+
6
+ export type TJoySnackbarLevels = Exclude<TLevels, 'neutral'>;
7
+
8
+ export type TJoySnackbarEvents = {
9
+ 'snackbar:hide': undefined;
10
+ 'snackbar:show': undefined;
11
+ 'snackbar:action-click': undefined;
12
+ };
13
+
14
+ export interface IJoynackbarServiceOptions {
15
+ disableStacking?: boolean;
16
+ snackbarHostId?: string;
17
+ props: InstanceType<typeof VJoySnackbar>['$props'];
18
+ }
19
+
20
+ export interface IJoynackbarServiceReturn {
21
+ snackbarEventBus: Emitter<TJoySnackbarEvents>;
22
+ snackbarApp: App<Element>;
23
+ }
@@ -0,0 +1 @@
1
+ export type TJoySpinnerColors = 'teal' | 'white';
@@ -0,0 +1 @@
1
+ export type TJoyStepSizes = 'small' | 'default';
@@ -0,0 +1,19 @@
1
+ import {TSizes} from '../../types';
2
+ import VJoyTag from './VJoyTag.vue';
3
+
4
+ export type TJoyTagVariants = 'important' | 'inactive' | 'pending' | 'pricing' | 'special' | 'primary' | 'secondary' | 'ai-primary' | 'ai-secondary' | 'empty';
5
+
6
+ export type TJoyTagSizes = Exclude<TSizes, 'xlarge' | 'xxsmall'>;
7
+
8
+ export type VJoyTagProps = InstanceType<typeof VJoyTag>['$props'];
9
+
10
+ export interface IJoyTagSelected {
11
+ selected: boolean;
12
+ value: VJoyTagProps['value'];
13
+ }
14
+
15
+ export interface IJoyTagRemoved {
16
+ value: VJoyTagProps['value'];
17
+ }
18
+
19
+ export interface IJoyTag extends VJoyTagProps {}
@@ -0,0 +1,4 @@
1
+ export enum TAGS_INPUT_ERRORS {
2
+ DUPLICATED_ENTRY = 'DUPLICATED_ENTRY',
3
+ INVALID_EMAIL = 'INVALID_EMAIL',
4
+ }
@@ -0,0 +1,5 @@
1
+ import {IJoyTag} from '../JoyTag/JoyTag.types';
2
+
3
+ export type TJoyTagsListAlign = 'center' | 'left' | 'right';
4
+ export type TJoyTagsList = IJoyTag[];
5
+ export type TJoyTagsListModel = IJoyTag['value'][];
@@ -0,0 +1 @@
1
+ export type TJoyTemplateSidebarSide = 'left' | 'right';
@@ -0,0 +1,14 @@
1
+ import {PRIMARY_FONT_SIZES, SECONDARY_FONT_SIZES, PRIMARY_FONT_SIZES_BOLD, FontsFamilies} from '../../types';
2
+
3
+ const JOY_TEXT_FONT_PRIMARY_PRESET = PRIMARY_FONT_SIZES.map((s) => 'primary-' + s);
4
+ const JOY_TEXT_FONT_PRIMARY_BOLD_PRESET = PRIMARY_FONT_SIZES_BOLD;
5
+ const JOY_TEXT_FONT_SECONDARY_PRESET = SECONDARY_FONT_SIZES.map((s) => 'secondary-' + s);
6
+
7
+ export const JOY_TEXT_FONT_PRESET = [...JOY_TEXT_FONT_PRIMARY_PRESET, ...JOY_TEXT_FONT_PRIMARY_BOLD_PRESET, ...JOY_TEXT_FONT_SECONDARY_PRESET];
8
+
9
+ export type TJoyTextFontPreset =
10
+ | `${FontsFamilies.PRIMARY}-${(typeof PRIMARY_FONT_SIZES)[number]}`
11
+ | `${FontsFamilies.SECONDARY}-${(typeof SECONDARY_FONT_SIZES)[number]}`
12
+ | `${FontsFamilies.PRIMARY}-${(typeof PRIMARY_FONT_SIZES_BOLD)[number]}`;
13
+
14
+ export type TJoyTextTagName = 'p' | 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'strong';
@@ -47,7 +47,7 @@
47
47
  "key",
48
48
  "user-photo",
49
49
  "link",
50
- "... (207 more)"
50
+ "... (210 more)"
51
51
  ]
52
52
  },
53
53
  {
@@ -7,7 +7,7 @@
7
7
  "type": "string",
8
8
  "required": false,
9
9
  "description": "",
10
- "possibleValues": "TJoyIconsNames (217 values)"
10
+ "possibleValues": "TJoyIconsNames (220 values)"
11
11
  },
12
12
  {
13
13
  "name": "title",
@@ -0,0 +1,9 @@
1
+ export type TJoyWrapperJustify = 'center' | 'space-between' | 'flex-start' | 'flex-end';
2
+
3
+ export type TJoyWrapperAlign = 'center' | 'flex-start' | 'flex-end' | 'stretch';
4
+
5
+ export type TJoyWrapperDirection = 'row' | 'column';
6
+
7
+ export type TJoyWrapperWrap = 'nowrap' | 'wrap';
8
+
9
+ export type TJoyWrapperGap = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12';
@@ -1,9 +1,9 @@
1
1
  {
2
- "generated": "2026-01-09T09:22:06.580Z",
3
- "version": "0.2.0",
2
+ "generated": "2026-02-20T10:05:20.068Z",
3
+ "version": "1.0.0",
4
4
  "statistics": {
5
5
  "totalComponents": 74,
6
- "totalProps": 407,
6
+ "totalProps": 410,
7
7
  "totalEvents": 57,
8
8
  "totalSlots": 136,
9
9
  "componentsWithVModel": 18,
@@ -46,7 +46,7 @@
46
46
  {
47
47
  "name": "VJoyBadge",
48
48
  "path": "VJoyBadge/metadata.json",
49
- "propsCount": 4,
49
+ "propsCount": 3,
50
50
  "eventsCount": 0,
51
51
  "slotsCount": 1,
52
52
  "hasError": false
@@ -182,7 +182,7 @@
182
182
  {
183
183
  "name": "VJoyDropzone",
184
184
  "path": "VJoyDropzone/metadata.json",
185
- "propsCount": 10,
185
+ "propsCount": 11,
186
186
  "eventsCount": 0,
187
187
  "slotsCount": 4,
188
188
  "hasError": false
@@ -206,7 +206,7 @@
206
206
  {
207
207
  "name": "VJoyFormError",
208
208
  "path": "VJoyFormError/metadata.json",
209
- "propsCount": 3,
209
+ "propsCount": 4,
210
210
  "eventsCount": 0,
211
211
  "slotsCount": 1,
212
212
  "hasError": false
@@ -382,7 +382,7 @@
382
382
  {
383
383
  "name": "VJoyRadio",
384
384
  "path": "VJoyRadio/metadata.json",
385
- "propsCount": 7,
385
+ "propsCount": 8,
386
386
  "eventsCount": 1,
387
387
  "slotsCount": 5,
388
388
  "hasError": false
@@ -390,7 +390,7 @@
390
390
  {
391
391
  "name": "VJoyRadioGroup",
392
392
  "path": "VJoyRadioGroup/metadata.json",
393
- "propsCount": 3,
393
+ "propsCount": 4,
394
394
  "eventsCount": 0,
395
395
  "slotsCount": 2,
396
396
  "hasError": false
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ import { listComponentsTool, handleListComponents } from './tools/list-component
9
9
  import { getComponentInfoTool, handleGetComponentInfo } from './tools/get-component-info.js';
10
10
  import { listDesignTokensTool, handleListDesignTokens } from './tools/list-design-tokens.js';
11
11
  import { listCssClassesTool, handleListCssClasses } from './tools/list-css-classes.js';
12
+ import { getComponentTypesTool, handleGetComponentTypes } from './tools/get-component-types.js';
12
13
  const __filename = fileURLToPath(import.meta.url);
13
14
  const __dirname = dirname(__filename);
14
15
  /**
@@ -20,7 +21,7 @@ class JoyMcpServer {
20
21
  constructor() {
21
22
  this.server = new Server({
22
23
  name: 'joy-design-system',
23
- version: '0.1.2',
24
+ version: '0.3.0',
24
25
  }, {
25
26
  capabilities: {
26
27
  tools: {},
@@ -33,7 +34,7 @@ class JoyMcpServer {
33
34
  // List available tools
34
35
  this.server.setRequestHandler(ListToolsRequestSchema, async () => {
35
36
  return {
36
- tools: [listComponentsTool, getComponentInfoTool, listDesignTokensTool, listCssClassesTool],
37
+ tools: [listComponentsTool, getComponentInfoTool, getComponentTypesTool, listDesignTokensTool, listCssClassesTool],
37
38
  };
38
39
  });
39
40
  // Handle tool calls
@@ -64,6 +65,18 @@ class JoyMcpServer {
64
65
  ],
65
66
  };
66
67
  }
68
+ case 'joy_get_component_types': {
69
+ const componentName = args?.componentName;
70
+ const result = await handleGetComponentTypes(componentName);
71
+ return {
72
+ content: [
73
+ {
74
+ type: 'text',
75
+ text: JSON.stringify(result, null, 2),
76
+ },
77
+ ],
78
+ };
79
+ }
67
80
  case 'joy_list_design_tokens': {
68
81
  const result = handleListDesignTokens();
69
82
  return {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Tool definition for getting TypeScript types associated with a Joy Vue component
3
+ */
4
+ export declare const getComponentTypesTool: {
5
+ name: string;
6
+ description: string;
7
+ inputSchema: {
8
+ type: string;
9
+ properties: {
10
+ componentName: {
11
+ type: string;
12
+ description: string;
13
+ };
14
+ };
15
+ required: string[];
16
+ };
17
+ };
18
+ export interface ComponentTypesResult {
19
+ componentName: string;
20
+ files: {
21
+ filename: string;
22
+ content: string;
23
+ }[];
24
+ }
25
+ /**
26
+ * Handler for the get component types tool
27
+ */
28
+ export declare function handleGetComponentTypes(componentName: string): Promise<ComponentTypesResult | {
29
+ error: string;
30
+ }>;
31
+ //# sourceMappingURL=get-component-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-component-types.d.ts","sourceRoot":"","sources":["../../src/tools/get-component-types.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;CAgBjC,CAAC;AAcF,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,oBAAoB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBnD"}
@@ -0,0 +1,60 @@
1
+ import { readFileSync, readdirSync } from 'fs';
2
+ import { fileURLToPath } from 'url';
3
+ import { dirname, join } from 'path';
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const __dirname = dirname(__filename);
6
+ /**
7
+ * Tool definition for getting TypeScript types associated with a Joy Vue component
8
+ */
9
+ export const getComponentTypesTool = {
10
+ name: 'joy_get_component_types',
11
+ description: 'Retrieves the TypeScript types definition file associated with a specific Joy Vue3 component. ' +
12
+ 'These types define the allowed values for props (variants, sizes, etc.). ' +
13
+ 'Provide the exact component name (e.g., VJoyButton).',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ componentName: {
18
+ type: 'string',
19
+ description: 'The exact name of the component (e.g., VJoyButton, VJoyAvatar)',
20
+ },
21
+ },
22
+ required: ['componentName'],
23
+ },
24
+ };
25
+ /**
26
+ * Find all *.types.ts files in a component doc directory.
27
+ */
28
+ function findTypesFiles(componentDir) {
29
+ try {
30
+ const entries = readdirSync(componentDir);
31
+ return entries.filter((f) => f.endsWith('.types.ts'));
32
+ }
33
+ catch {
34
+ return [];
35
+ }
36
+ }
37
+ /**
38
+ * Handler for the get component types tool
39
+ */
40
+ export async function handleGetComponentTypes(componentName) {
41
+ if (!componentName || typeof componentName !== 'string') {
42
+ return {
43
+ error: 'Invalid component name. Please provide a valid component name (e.g., VJoyButton).',
44
+ };
45
+ }
46
+ const componentDir = join(__dirname, '..', 'doc', componentName);
47
+ const typesFiles = findTypesFiles(componentDir);
48
+ if (typesFiles.length === 0) {
49
+ return {
50
+ error: `No types file found for component "${componentName}". ` +
51
+ 'Use joy_list_components to get a list of available components.',
52
+ };
53
+ }
54
+ const files = typesFiles.map((filename) => ({
55
+ filename,
56
+ content: readFileSync(join(componentDir, filename), 'utf-8'),
57
+ }));
58
+ return { componentName, files };
59
+ }
60
+ //# sourceMappingURL=get-component-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-component-types.js","sourceRoot":"","sources":["../../src/tools/get-component-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EACT,gGAAgG;QAChG,2EAA2E;QAC3E,sDAAsD;IACxD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gEAAgE;aAC9E;SACF;QACD,QAAQ,EAAE,CAAC,eAAe,CAAC;KAC5B;CACF,CAAC;AAEF;;GAEG;AACH,SAAS,cAAc,CAAC,YAAoB;IAC1C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAOD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,aAAqB;IAErB,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO;YACL,KAAK,EAAE,mFAAmF;SAC3F,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAEhD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,KAAK,EACH,sCAAsC,aAAa,KAAK;gBACxD,gEAAgE;SACnE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC1C,QAAQ;QACR,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;KAC7D,CAAC,CAAC,CAAC;IAEJ,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maltjoy/mcp-server",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "MCP server for Joy Design System - exposes Vue3 components information",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",