@maltjoy/mcp-server 0.3.0 → 0.3.1

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.
@@ -10,6 +10,7 @@
10
10
  "description": "",
11
11
  "possibleValues": [
12
12
  "medium",
13
+ "xxlarge",
13
14
  "xlarge",
14
15
  "large",
15
16
  "small",
@@ -5,6 +5,6 @@ export type TJoyAIButtonVariants = `${TJoyDefaultButtonVariants}-ai`;
5
5
 
6
6
  export type TJoyButtonVariants = TJoyDefaultButtonVariants | Exclude<TJoyAIButtonVariants, 'admin-ai'>;
7
7
 
8
- export type TJoyButtonSizes = Exclude<TSizes, 'xlarge'>;
8
+ export type TJoyButtonSizes = Extract<TSizes, 'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large'>;
9
9
 
10
10
  export type TJoyButtonIconPositions = TPositions;
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "JoyFormGroup",
3
+ "displayName": "VJoyFormGroup",
4
+ "props": [],
5
+ "events": [],
6
+ "slots": [
7
+ {
8
+ "name": "default",
9
+ "description": "Use it to render the content of the form group. Most of the time JoyLabel, any form component, and JoyFormError."
10
+ }
11
+ ],
12
+ "exposed": [],
13
+ "hasVModel": false
14
+ }
@@ -3,6 +3,6 @@ import {TSizes, TLevels} from '../../types';
3
3
 
4
4
  export type TJoyIconsColors = TLevels | 'neutral-50' | 'primary' | 'secondary' | 'tertiary' | 'quaternary' | 'brand-primary' | 'brand-secondary' | 'white';
5
5
 
6
- export type TJoyIconSizes = TSizes;
6
+ export type TJoyIconSizes = Extract<TSizes, 'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge'>;
7
7
 
8
8
  export type TJoyIconsNames = JoyIconsId;
@@ -4,7 +4,7 @@
4
4
  "props": [
5
5
  {
6
6
  "name": "size",
7
- "type": "TSizes | undefined",
7
+ "type": "TJoyIconSizes | undefined",
8
8
  "required": false,
9
9
  "default": "\"xsmall\"",
10
10
  "description": "Use `TJoyIconSizes`",
@@ -101,7 +101,7 @@
101
101
  "exposed": [
102
102
  {
103
103
  "name": "size",
104
- "type": "TSizes",
104
+ "type": "TJoyIconSizes",
105
105
  "isMethod": false
106
106
  },
107
107
  {
@@ -10,7 +10,7 @@ export interface VJoyInputProps {
10
10
  disabled?: boolean;
11
11
  id?: string;
12
12
  invalid?: boolean;
13
- name?: string;
13
+ name: string;
14
14
  required?: boolean;
15
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
16
  label?: string;
@@ -26,6 +26,10 @@ export interface VJoyInputProps {
26
26
  /** Add a JoyIcon / joy-icon with given name on left-side. */
27
27
  icon?: TJoyIconsNames;
28
28
  size?: TJoyInputSizes;
29
+ /**
30
+ * @deprecated Password mode is deprecated on VJoyInput.
31
+ * Use VJoyInputPassword for password fields and toggle behavior.
32
+ */
29
33
  type?: string;
30
34
  /** Adds a legend like symbol on the right of the component. Made for number based values */
31
35
  unit?: string;
@@ -57,12 +57,10 @@
57
57
  },
58
58
  {
59
59
  "name": "name",
60
- "type": "string | undefined",
61
- "required": false,
60
+ "type": "string",
61
+ "required": true,
62
62
  "description": "",
63
- "possibleValues": [
64
- "string"
65
- ]
63
+ "possibleValues": null
66
64
  },
67
65
  {
68
66
  "name": "required",
@@ -206,6 +204,10 @@
206
204
  {
207
205
  "name": "default",
208
206
  "description": "DEPRECATED. Default slot to display a label on top of the element. You can use label property as well"
207
+ },
208
+ {
209
+ "name": "right-action",
210
+ "description": "Slot used to inject a custom action on the right side of the input wrapper."
209
211
  }
210
212
  ],
211
213
  "exposed": [
@@ -286,7 +288,7 @@
286
288
  },
287
289
  {
288
290
  "name": "name",
289
- "type": "string | undefined",
291
+ "type": "string",
290
292
  "isMethod": false
291
293
  },
292
294
  {
@@ -0,0 +1,14 @@
1
+ export interface VJoyInputDigitProps {
2
+ /** Joined value of all input slots. */
3
+ modelValue?: string;
4
+ /** Number of displayed input slots. */
5
+ length?: number;
6
+ /** Applies invalid visual state on every slot. */
7
+ invalid?: boolean;
8
+ /** Disables all input slots. */
9
+ disabled?: boolean;
10
+ /** Name prefix used for each generated input. */
11
+ name?: string;
12
+ /** Base aria-label used for each input, indexed automatically (e.g. "Digit 1 of 6"). */
13
+ inputAriaLabel?: string;
14
+ }
@@ -0,0 +1,154 @@
1
+ {
2
+ "name": "JoyInputDigit",
3
+ "displayName": "VJoyInputDigit",
4
+ "props": [
5
+ {
6
+ "name": "modelValue",
7
+ "type": "string | undefined",
8
+ "required": false,
9
+ "default": "\"\"",
10
+ "description": "Joined value of all input slots.",
11
+ "possibleValues": [
12
+ "string"
13
+ ]
14
+ },
15
+ {
16
+ "name": "length",
17
+ "type": "number | undefined",
18
+ "required": false,
19
+ "default": "6",
20
+ "description": "Number of displayed input slots.",
21
+ "possibleValues": [
22
+ "number"
23
+ ]
24
+ },
25
+ {
26
+ "name": "invalid",
27
+ "type": "boolean | undefined",
28
+ "required": false,
29
+ "default": "false",
30
+ "description": "Applies invalid visual state on every slot.",
31
+ "possibleValues": [
32
+ "false",
33
+ "true"
34
+ ]
35
+ },
36
+ {
37
+ "name": "disabled",
38
+ "type": "boolean | undefined",
39
+ "required": false,
40
+ "default": "false",
41
+ "description": "Disables all input slots.",
42
+ "possibleValues": [
43
+ "false",
44
+ "true"
45
+ ]
46
+ },
47
+ {
48
+ "name": "name",
49
+ "type": "string | undefined",
50
+ "required": false,
51
+ "default": "\"joy-input-digit\"",
52
+ "description": "Name prefix used for each generated input.",
53
+ "possibleValues": [
54
+ "string"
55
+ ]
56
+ },
57
+ {
58
+ "name": "inputAriaLabel",
59
+ "type": "string | undefined",
60
+ "required": false,
61
+ "default": "\"Digit\"",
62
+ "description": "Base aria-label used for each input, indexed automatically (e.g. \"Digit 1 of 6\").",
63
+ "possibleValues": [
64
+ "string"
65
+ ]
66
+ }
67
+ ],
68
+ "events": [
69
+ {
70
+ "name": "blur",
71
+ "description": "",
72
+ "signature": "(event: \"blur\", event: FocusEvent): void"
73
+ },
74
+ {
75
+ "name": "change",
76
+ "description": "",
77
+ "signature": "(event: \"change\", value: string, event: Event): void"
78
+ },
79
+ {
80
+ "name": "focus",
81
+ "description": "",
82
+ "signature": "(event: \"focus\", event: FocusEvent): void"
83
+ },
84
+ {
85
+ "name": "update:modelValue",
86
+ "description": "",
87
+ "signature": "(event: \"update:modelValue\", value: string): void"
88
+ }
89
+ ],
90
+ "slots": [],
91
+ "exposed": [
92
+ {
93
+ "name": "invalid",
94
+ "type": "boolean",
95
+ "isMethod": false
96
+ },
97
+ {
98
+ "name": "length",
99
+ "type": "number",
100
+ "isMethod": false
101
+ },
102
+ {
103
+ "name": "disabled",
104
+ "type": "boolean",
105
+ "isMethod": false
106
+ },
107
+ {
108
+ "name": "name",
109
+ "type": "string",
110
+ "isMethod": false
111
+ },
112
+ {
113
+ "name": "modelValue",
114
+ "type": "string",
115
+ "isMethod": false
116
+ },
117
+ {
118
+ "name": "inputAriaLabel",
119
+ "type": "string",
120
+ "isMethod": false
121
+ },
122
+ {
123
+ "name": "onBlur",
124
+ "type": "((event: FocusEvent) => any) | undefined",
125
+ "isMethod": true
126
+ },
127
+ {
128
+ "name": "onFocus",
129
+ "type": "((event: FocusEvent) => any) | undefined",
130
+ "isMethod": true
131
+ },
132
+ {
133
+ "name": "onUpdate:modelValue",
134
+ "type": "((value: string) => any) | undefined",
135
+ "isMethod": true
136
+ },
137
+ {
138
+ "name": "onChange",
139
+ "type": "((value: string, event: Event) => any) | undefined",
140
+ "isMethod": true
141
+ },
142
+ {
143
+ "name": "focusInput",
144
+ "type": "(index: number) => void",
145
+ "isMethod": true
146
+ },
147
+ {
148
+ "name": "tokens",
149
+ "type": "string[]",
150
+ "isMethod": false
151
+ }
152
+ ],
153
+ "hasVModel": true
154
+ }
@@ -0,0 +1,257 @@
1
+ {
2
+ "name": "JoyInputPassword",
3
+ "displayName": "VJoyInputPassword",
4
+ "props": [
5
+ {
6
+ "name": "invalid",
7
+ "type": "boolean | undefined",
8
+ "required": false,
9
+ "default": "false",
10
+ "description": "",
11
+ "possibleValues": [
12
+ "false",
13
+ "true"
14
+ ]
15
+ },
16
+ {
17
+ "name": "label",
18
+ "type": "string | undefined",
19
+ "required": false,
20
+ "description": "Display a label on top of the element. Handy if you only need to pass a string. If you need more, use the VJoyLabel.",
21
+ "possibleValues": [
22
+ "string"
23
+ ]
24
+ },
25
+ {
26
+ "name": "size",
27
+ "type": "TJoyInputSizes | undefined",
28
+ "required": false,
29
+ "description": "",
30
+ "possibleValues": [
31
+ "medium",
32
+ "large",
33
+ "small"
34
+ ]
35
+ },
36
+ {
37
+ "name": "required",
38
+ "type": "boolean | undefined",
39
+ "required": false,
40
+ "default": "false",
41
+ "description": "",
42
+ "possibleValues": [
43
+ "false",
44
+ "true"
45
+ ]
46
+ },
47
+ {
48
+ "name": "icon",
49
+ "type": "string",
50
+ "required": false,
51
+ "description": "Add a JoyIcon / joy-icon with given name on left-side.",
52
+ "possibleValues": "TJoyIconsNames (220 values)"
53
+ },
54
+ {
55
+ "name": "id",
56
+ "type": "string | undefined",
57
+ "required": false,
58
+ "description": "",
59
+ "possibleValues": [
60
+ "string"
61
+ ]
62
+ },
63
+ {
64
+ "name": "disabled",
65
+ "type": "boolean | undefined",
66
+ "required": false,
67
+ "default": "false",
68
+ "description": "",
69
+ "possibleValues": [
70
+ "false",
71
+ "true"
72
+ ]
73
+ },
74
+ {
75
+ "name": "name",
76
+ "type": "string",
77
+ "required": false,
78
+ "default": "\"joy-input-password\"",
79
+ "description": "",
80
+ "possibleValues": null
81
+ },
82
+ {
83
+ "name": "modelValue",
84
+ "type": "string | number | null | undefined",
85
+ "required": false,
86
+ "description": "",
87
+ "possibleValues": [
88
+ "null",
89
+ "string",
90
+ "number"
91
+ ]
92
+ },
93
+ {
94
+ "name": "autofocus",
95
+ "type": "boolean | undefined",
96
+ "required": false,
97
+ "default": "false",
98
+ "description": "",
99
+ "possibleValues": [
100
+ "false",
101
+ "true"
102
+ ]
103
+ },
104
+ {
105
+ "name": "labelSize",
106
+ "type": "TJoyLabelSizes | undefined",
107
+ "required": false,
108
+ "default": "\"medium\"",
109
+ "description": "Overrides the default label size. See JoyLabel stories",
110
+ "possibleValues": [
111
+ "medium",
112
+ "large",
113
+ "small"
114
+ ]
115
+ },
116
+ {
117
+ "name": "optionalLabel",
118
+ "type": "string | undefined",
119
+ "required": false,
120
+ "description": "If your component is not required, we can add a label to explicitely tell that it's not mandatory",
121
+ "possibleValues": [
122
+ "string"
123
+ ]
124
+ },
125
+ {
126
+ "name": "requiredMark",
127
+ "type": "boolean | undefined",
128
+ "required": false,
129
+ "default": "false",
130
+ "description": "Depending on context, we can add a \"*\" after the label to specify it's mandatory.",
131
+ "possibleValues": [
132
+ "false",
133
+ "true"
134
+ ]
135
+ },
136
+ {
137
+ "name": "modelModifiers",
138
+ "type": "Partial<Record<\"number\" | \"trim\" | \"lazy\", boolean>> | undefined",
139
+ "required": false,
140
+ "default": "{ lazy: false }",
141
+ "description": "",
142
+ "possibleValues": [
143
+ "Partial<Record<\"number\" | \"trim\" | \"lazy\", boolean>>"
144
+ ]
145
+ },
146
+ {
147
+ "name": "unit",
148
+ "type": "string | undefined",
149
+ "required": false,
150
+ "description": "Adds a legend like symbol on the right of the component. Made for number based values",
151
+ "possibleValues": [
152
+ "string"
153
+ ]
154
+ }
155
+ ],
156
+ "events": [
157
+ {
158
+ "name": "update:modelValue",
159
+ "description": "",
160
+ "signature": "(event: \"update:modelValue\", value: string): void"
161
+ }
162
+ ],
163
+ "slots": [
164
+ {
165
+ "name": "password-requirements",
166
+ "description": "Slot used to inject password requirements. Use VJoyPasswordRequirement component to display the requirements."
167
+ }
168
+ ],
169
+ "exposed": [
170
+ {
171
+ "name": "invalid",
172
+ "type": "boolean",
173
+ "isMethod": false
174
+ },
175
+ {
176
+ "name": "required",
177
+ "type": "boolean",
178
+ "isMethod": false
179
+ },
180
+ {
181
+ "name": "disabled",
182
+ "type": "boolean",
183
+ "isMethod": false
184
+ },
185
+ {
186
+ "name": "name",
187
+ "type": "string",
188
+ "isMethod": false
189
+ },
190
+ {
191
+ "name": "autofocus",
192
+ "type": "boolean",
193
+ "isMethod": false
194
+ },
195
+ {
196
+ "name": "labelSize",
197
+ "type": "TJoyLabelSizes",
198
+ "isMethod": false
199
+ },
200
+ {
201
+ "name": "requiredMark",
202
+ "type": "boolean",
203
+ "isMethod": false
204
+ },
205
+ {
206
+ "name": "modelModifiers",
207
+ "type": "Partial<Record<\"number\" | \"trim\" | \"lazy\", boolean>>",
208
+ "isMethod": false
209
+ },
210
+ {
211
+ "name": "label",
212
+ "type": "string | undefined",
213
+ "isMethod": false
214
+ },
215
+ {
216
+ "name": "size",
217
+ "type": "TJoyInputSizes | undefined",
218
+ "isMethod": false
219
+ },
220
+ {
221
+ "name": "icon",
222
+ "type": "string",
223
+ "isMethod": false
224
+ },
225
+ {
226
+ "name": "id",
227
+ "type": "string | undefined",
228
+ "isMethod": false
229
+ },
230
+ {
231
+ "name": "modelValue",
232
+ "type": "string | number | null | undefined",
233
+ "isMethod": false
234
+ },
235
+ {
236
+ "name": "onUpdate:modelValue",
237
+ "type": "((value: string) => any) | undefined",
238
+ "isMethod": true
239
+ },
240
+ {
241
+ "name": "optionalLabel",
242
+ "type": "string | undefined",
243
+ "isMethod": false
244
+ },
245
+ {
246
+ "name": "unit",
247
+ "type": "string | undefined",
248
+ "isMethod": false
249
+ },
250
+ {
251
+ "name": "focus",
252
+ "type": "() => void",
253
+ "isMethod": true
254
+ }
255
+ ],
256
+ "hasVModel": true
257
+ }
@@ -1,3 +1,4 @@
1
1
  import {TSizes} from '@/types';
2
2
 
3
3
  export type TJoyLabelSizes = Extract<TSizes, 'small' | 'medium' | 'large'>;
4
+ export const JoyFormElementContext = 'JoyFormElementContext';
@@ -0,0 +1,14 @@
1
+ import {JoyIconsId} from '@maltjoy/icons';
2
+
3
+ export interface IJoyMenuItemBis {
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
+ }
@@ -0,0 +1,8 @@
1
+ import type {TLevels} from '../../types';
2
+
3
+ /**
4
+ * - neutral : The password field is focused but not this rule is not valid
5
+ * - valid : This rule is valid
6
+ * - invalid : This field is not focused and this rule is invalid
7
+ */
8
+ export type TVJoyPasswordRequirementStatus = Extract<TLevels, 'success' | 'error' | 'neutral'>;
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "JoyPasswordRequirement",
3
+ "displayName": "VJoyPasswordRequirement",
4
+ "props": [
5
+ {
6
+ "name": "label",
7
+ "type": "string",
8
+ "required": true,
9
+ "description": "Label of the password strength rule",
10
+ "possibleValues": null
11
+ },
12
+ {
13
+ "name": "status",
14
+ "type": "TVJoyPasswordRequirementStatus | undefined",
15
+ "required": false,
16
+ "description": "Status of the password requirement",
17
+ "possibleValues": [
18
+ "error",
19
+ "neutral",
20
+ "success"
21
+ ]
22
+ }
23
+ ],
24
+ "events": [],
25
+ "slots": [],
26
+ "exposed": [
27
+ {
28
+ "name": "label",
29
+ "type": "string",
30
+ "isMethod": false
31
+ },
32
+ {
33
+ "name": "status",
34
+ "type": "TVJoyPasswordRequirementStatus | undefined",
35
+ "isMethod": false
36
+ }
37
+ ],
38
+ "hasVModel": false
39
+ }
@@ -19,6 +19,7 @@
19
19
  "description": "",
20
20
  "possibleValues": [
21
21
  "medium",
22
+ "xxlarge",
22
23
  "large",
23
24
  "small",
24
25
  "xsmall"
@@ -48,6 +48,7 @@
48
48
  "description": "",
49
49
  "possibleValues": [
50
50
  "medium",
51
+ "xxlarge",
51
52
  "large",
52
53
  "small",
53
54
  "xsmall"
@@ -116,6 +116,7 @@
116
116
  "schema": [
117
117
  "undefined",
118
118
  "\"medium\"",
119
+ "\"xxlarge\"",
119
120
  "\"large\"",
120
121
  "\"small\"",
121
122
  "\"xsmall\""
@@ -1,12 +1,12 @@
1
1
  {
2
- "generated": "2026-02-20T10:05:20.068Z",
3
- "version": "1.0.0",
2
+ "generated": "2026-03-05T13:53:47.737Z",
3
+ "version": "0.3.1",
4
4
  "statistics": {
5
- "totalComponents": 74,
6
- "totalProps": 410,
7
- "totalEvents": 57,
8
- "totalSlots": 136,
9
- "componentsWithVModel": 18,
5
+ "totalComponents": 78,
6
+ "totalProps": 433,
7
+ "totalEvents": 62,
8
+ "totalSlots": 139,
9
+ "componentsWithVModel": 20,
10
10
  "componentsWithErrors": 0,
11
11
  "componentsWithPartialErrors": 1
12
12
  },
@@ -219,6 +219,14 @@
219
219
  "slotsCount": 0,
220
220
  "hasError": false
221
221
  },
222
+ {
223
+ "name": "VJoyFormGroup",
224
+ "path": "VJoyFormGroup/metadata.json",
225
+ "propsCount": 0,
226
+ "eventsCount": 0,
227
+ "slotsCount": 1,
228
+ "hasError": false
229
+ },
222
230
  {
223
231
  "name": "VJoyFunnel",
224
232
  "path": "VJoyFunnel/metadata.json",
@@ -280,6 +288,22 @@
280
288
  "path": "VJoyInput/metadata.json",
281
289
  "propsCount": 19,
282
290
  "eventsCount": 1,
291
+ "slotsCount": 2,
292
+ "hasError": false
293
+ },
294
+ {
295
+ "name": "VJoyInputDigit",
296
+ "path": "VJoyInputDigit/metadata.json",
297
+ "propsCount": 6,
298
+ "eventsCount": 4,
299
+ "slotsCount": 0,
300
+ "hasError": false
301
+ },
302
+ {
303
+ "name": "VJoyInputPassword",
304
+ "path": "VJoyInputPassword/metadata.json",
305
+ "propsCount": 15,
306
+ "eventsCount": 1,
283
307
  "slotsCount": 1,
284
308
  "hasError": false
285
309
  },
@@ -355,6 +379,14 @@
355
379
  "slotsCount": 2,
356
380
  "hasError": false
357
381
  },
382
+ {
383
+ "name": "VJoyPasswordRequirement",
384
+ "path": "VJoyPasswordRequirement/metadata.json",
385
+ "propsCount": 2,
386
+ "eventsCount": 0,
387
+ "slotsCount": 0,
388
+ "hasError": false
389
+ },
358
390
  {
359
391
  "name": "VJoyProductTour",
360
392
  "path": "VJoyProductTour/metadata.json",
package/dist/index.js CHANGED
@@ -21,7 +21,7 @@ class JoyMcpServer {
21
21
  constructor() {
22
22
  this.server = new Server({
23
23
  name: 'joy-design-system',
24
- version: '0.3.0',
24
+ version: '0.2.0',
25
25
  }, {
26
26
  capabilities: {
27
27
  tools: {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maltjoy/mcp-server",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "MCP server for Joy Design System - exposes Vue3 components information",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",