@maltjoy/mcp-server 0.4.0 → 0.5.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 (66) hide show
  1. package/README.md +49 -20
  2. package/dist/doc/VJoyAvatar/metadata.json +1 -1
  3. package/dist/doc/VJoyButton/metadata.json +1 -17
  4. package/dist/doc/VJoyCollapseItem/metadata.json +1 -1
  5. package/dist/doc/VJoyDropdownList/metadata.json +1 -1
  6. package/dist/doc/VJoyDropzone/metadata.json +36 -1
  7. package/dist/doc/VJoyFormError/metadata.json +0 -14
  8. package/dist/doc/VJoyHighlight/metadata.json +1 -1
  9. package/dist/doc/VJoyIcon/JoyIcon.types.ts +1 -1
  10. package/dist/doc/VJoyIcon/metadata.json +1 -2
  11. package/dist/doc/VJoyIconButton/metadata.json +2 -2
  12. package/dist/doc/VJoyInput/JoyInput.types.ts +1 -6
  13. package/dist/doc/VJoyInput/metadata.json +6 -15
  14. package/dist/doc/VJoyInputNumber/metadata.json +23 -18
  15. package/dist/doc/VJoyInputPassword/metadata.json +1 -15
  16. package/dist/doc/VJoyLink/metadata.json +1 -1
  17. package/dist/doc/VJoyListItem/metadata.json +1 -1
  18. package/dist/doc/VJoyMenu/metadata.json +33 -0
  19. package/dist/doc/VJoyMenuItem/metadata.json +2 -2
  20. package/dist/doc/VJoyPasswordRequirement/metadata.json +1 -1
  21. package/dist/doc/VJoyProductTour/JoyProductTour.types.ts +0 -1
  22. package/dist/doc/VJoyProductTour/metadata.json +2 -2
  23. package/dist/doc/VJoySelectableItem/metadata.json +1 -1
  24. package/dist/doc/VJoyText/metadata.json +1 -1
  25. package/dist/doc/VJoyUserCard/metadata.json +3 -17
  26. package/dist/doc/VJoyWalkthrough/metadata.json +1 -1
  27. package/dist/doc/VJoyWalkthroughTrigger/metadata.json +1 -1
  28. package/dist/doc/css-classes.json +1 -19
  29. package/dist/doc/design-tokens.json +2242 -150
  30. package/dist/doc/index.json +19 -29
  31. package/dist/index.js +71 -3
  32. package/dist/index.js.map +1 -1
  33. package/dist/tokens/build-catalog.d.ts +6 -0
  34. package/dist/tokens/build-catalog.d.ts.map +1 -0
  35. package/dist/tokens/build-catalog.js +141 -0
  36. package/dist/tokens/build-catalog.js.map +1 -0
  37. package/dist/tokens/query.d.ts +49 -0
  38. package/dist/tokens/query.d.ts.map +1 -0
  39. package/dist/tokens/query.js +290 -0
  40. package/dist/tokens/query.js.map +1 -0
  41. package/dist/tokens/types.d.ts +44 -0
  42. package/dist/tokens/types.d.ts.map +1 -0
  43. package/dist/tokens/types.js +23 -0
  44. package/dist/tokens/types.js.map +1 -0
  45. package/dist/tools/get-token-group.d.ts +26 -0
  46. package/dist/tools/get-token-group.d.ts.map +1 -0
  47. package/dist/tools/get-token-group.js +24 -0
  48. package/dist/tools/get-token-group.js.map +1 -0
  49. package/dist/tools/get-token-usage.d.ts +24 -0
  50. package/dist/tools/get-token-usage.d.ts.map +1 -0
  51. package/dist/tools/get-token-usage.js +22 -0
  52. package/dist/tools/get-token-usage.js.map +1 -0
  53. package/dist/tools/get-token.d.ts +18 -0
  54. package/dist/tools/get-token.d.ts.map +1 -0
  55. package/dist/tools/get-token.js +20 -0
  56. package/dist/tools/get-token.js.map +1 -0
  57. package/dist/tools/list-design-tokens.d.ts +21 -12
  58. package/dist/tools/list-design-tokens.d.ts.map +1 -1
  59. package/dist/tools/list-design-tokens.js +26 -12
  60. package/dist/tools/list-design-tokens.js.map +1 -1
  61. package/dist/tools/search-tokens.d.ts +38 -0
  62. package/dist/tools/search-tokens.d.ts.map +1 -0
  63. package/dist/tools/search-tokens.js +44 -0
  64. package/dist/tools/search-tokens.js.map +1 -0
  65. package/package.json +4 -3
  66. package/dist/doc/VJoyMultiCheckbox/metadata.json +0 -332
@@ -0,0 +1,290 @@
1
+ import { readFileSync } from 'fs';
2
+ import { dirname, join } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { GROUP_ALIASES, USAGE_TOPICS, } from './types.js';
5
+ const __dirname = dirname(fileURLToPath(import.meta.url));
6
+ const DEFAULT_LIMIT = 8;
7
+ const MAX_LIMIT = 25;
8
+ let cachedCatalog = null;
9
+ export function catalogPath() {
10
+ return join(__dirname, '../doc/design-tokens.json');
11
+ }
12
+ export function loadCatalog(path = catalogPath()) {
13
+ if (cachedCatalog && path === catalogPath()) {
14
+ return cachedCatalog;
15
+ }
16
+ const catalog = JSON.parse(readFileSync(path, 'utf-8'));
17
+ if (!catalog.tokens || !Array.isArray(catalog.tokens)) {
18
+ throw new Error('Invalid design-tokens.json: expected { tokens: TokenRecord[] }. Rebuild the MCP docs.');
19
+ }
20
+ if (path === catalogPath()) {
21
+ cachedCatalog = catalog;
22
+ }
23
+ return catalog;
24
+ }
25
+ export function resetCatalogCache() {
26
+ cachedCatalog = null;
27
+ }
28
+ function normalize(value) {
29
+ return value.trim().toLowerCase();
30
+ }
31
+ function searchableText(token) {
32
+ const docs = token.docs;
33
+ return [
34
+ token.name,
35
+ token.css,
36
+ token.description ?? '',
37
+ token.group,
38
+ ...(docs?.useFor ?? []),
39
+ ...(docs?.doNotUseFor ?? []),
40
+ ...(docs?.pairWith ?? []),
41
+ ...(docs?.replaces ?? []),
42
+ docs?.notes ?? '',
43
+ typeof token.value === 'string' ? token.value : JSON.stringify(token.value),
44
+ ]
45
+ .join(' ')
46
+ .toLowerCase();
47
+ }
48
+ function scoreToken(token, query) {
49
+ const q = normalize(query);
50
+ if (!q) {
51
+ return 0;
52
+ }
53
+ let score = 0;
54
+ const name = token.name.toLowerCase();
55
+ const css = token.css.toLowerCase();
56
+ const cssBare = css.replace(/^--/, '');
57
+ if (name === q || css === q || cssBare === q || css === `--${q}`) {
58
+ score += 100;
59
+ }
60
+ else if (name.endsWith(`.${q}`) || name.includes(`.${q}.`) || name.startsWith(`${q}.`)) {
61
+ score += 55;
62
+ }
63
+ else if (name.includes(q) || css.includes(q)) {
64
+ score += 35;
65
+ }
66
+ for (const intent of token.docs?.useFor ?? []) {
67
+ const intentNorm = intent.toLowerCase();
68
+ if (intentNorm === q) {
69
+ score += 80;
70
+ }
71
+ else if (intentNorm.includes(q) || q.includes(intentNorm)) {
72
+ score += 50;
73
+ }
74
+ }
75
+ if (token.description?.toLowerCase().includes(q)) {
76
+ score += 20;
77
+ }
78
+ for (const [wrong, instead] of Object.entries(token.docs?.useInstead ?? {})) {
79
+ if (wrong.toLowerCase().includes(q) || instead.toLowerCase().includes(q)) {
80
+ score += 15;
81
+ }
82
+ }
83
+ const words = q.split(/\s+/).filter((word) => word.length > 1);
84
+ const segments = name.split('.');
85
+ if (words.length > 0 && words.every((word) => segments.includes(word))) {
86
+ score += 45;
87
+ }
88
+ if (words.length > 1) {
89
+ const haystack = searchableText(token);
90
+ const matched = words.filter((word) => haystack.includes(word)).length;
91
+ score += Math.round((matched / words.length) * 25);
92
+ }
93
+ if (token.layer === 'semantic') {
94
+ score += 8;
95
+ }
96
+ if (token.docs) {
97
+ score += 4;
98
+ }
99
+ if (token.deprecated) {
100
+ score -= 40;
101
+ }
102
+ return score;
103
+ }
104
+ function toHit(token, score) {
105
+ return {
106
+ name: token.name,
107
+ css: token.css,
108
+ layer: token.layer,
109
+ domain: token.domain,
110
+ type: token.type,
111
+ description: token.description,
112
+ deprecated: token.deprecated,
113
+ useFor: token.docs?.useFor,
114
+ score,
115
+ };
116
+ }
117
+ export function searchTokens(input, catalog = loadCatalog()) {
118
+ const query = input.query?.trim() ?? '';
119
+ if (!query) {
120
+ return { query, count: 0, tokens: [] };
121
+ }
122
+ const limit = Math.min(Math.max(input.limit ?? DEFAULT_LIMIT, 1), MAX_LIMIT);
123
+ const layer = input.layer ?? 'semantic';
124
+ const hits = catalog.tokens
125
+ .filter((token) => {
126
+ if (!input.includeDeprecated && token.deprecated) {
127
+ return false;
128
+ }
129
+ if (layer !== 'all' && token.layer !== layer) {
130
+ return false;
131
+ }
132
+ if (input.domain && token.domain !== input.domain) {
133
+ return false;
134
+ }
135
+ return scoreToken(token, query) > 0;
136
+ })
137
+ .map((token) => ({ token, score: scoreToken(token, query) }))
138
+ .filter((entry) => entry.score > 0)
139
+ .sort((left, right) => right.score - left.score || left.token.name.localeCompare(right.token.name))
140
+ .slice(0, limit)
141
+ .map((entry) => toHit(entry.token, entry.score));
142
+ if (hits.length === 0 && layer === 'semantic') {
143
+ return searchTokens({ ...input, layer: 'all' }, catalog);
144
+ }
145
+ return { query, count: hits.length, tokens: hits };
146
+ }
147
+ function findToken(nameOrCss, catalog) {
148
+ const needle = nameOrCss.trim();
149
+ const lower = needle.toLowerCase();
150
+ return catalog.tokens.find((token) => {
151
+ return (token.name === needle ||
152
+ token.css === needle ||
153
+ token.name.toLowerCase() === lower ||
154
+ token.css.toLowerCase() === lower ||
155
+ token.css.toLowerCase() === `--${lower}` ||
156
+ token.css.toLowerCase() === `--joy-${lower}`);
157
+ });
158
+ }
159
+ export function getToken(nameOrCss, catalog = loadCatalog()) {
160
+ if (!nameOrCss || typeof nameOrCss !== 'string') {
161
+ return { error: 'Provide a token path (color.text.heading) or CSS name (--joy-color-text-heading).' };
162
+ }
163
+ const token = findToken(nameOrCss, catalog);
164
+ if (!token) {
165
+ return {
166
+ error: `Token "${nameOrCss}" not found. Use joy_search_tokens to find tokens by intent or name.`,
167
+ };
168
+ }
169
+ return token;
170
+ }
171
+ function resolveGroupPrefix(group) {
172
+ const trimmed = group.trim();
173
+ const alias = GROUP_ALIASES[trimmed.toLowerCase()];
174
+ return alias ?? trimmed;
175
+ }
176
+ export function getTokenGroup(input, catalog = loadCatalog()) {
177
+ if (!input.group || typeof input.group !== 'string') {
178
+ return {
179
+ error: 'Provide a group (text, background, border, spacing, color, forms, typography, …).',
180
+ };
181
+ }
182
+ const prefix = resolveGroupPrefix(input.group);
183
+ const matchesPrefix = (token) => token.name === prefix || token.name.startsWith(`${prefix}.`) || token.group === prefix;
184
+ const matchesMeta = (token, layer) => {
185
+ if (!input.includeDeprecated && token.deprecated) {
186
+ return false;
187
+ }
188
+ if (layer && token.layer !== layer) {
189
+ return false;
190
+ }
191
+ return matchesPrefix(token);
192
+ };
193
+ let tokens = catalog.tokens.filter((token) => matchesMeta(token, 'semantic'));
194
+ if (tokens.length === 0) {
195
+ tokens = catalog.tokens.filter((token) => matchesMeta(token));
196
+ }
197
+ if (tokens.length === 0) {
198
+ return {
199
+ error: `No tokens in group "${input.group}". Try text, background, border, spacing, color, forms, or typography.`,
200
+ };
201
+ }
202
+ return { group: prefix, count: tokens.length, tokens };
203
+ }
204
+ export function listDesignTokens(input = {}, catalog = loadCatalog()) {
205
+ const layer = input.layer ?? 'semantic';
206
+ const tokens = catalog.tokens
207
+ .filter((token) => {
208
+ if (!input.includeDeprecated && token.deprecated) {
209
+ return false;
210
+ }
211
+ if (layer !== 'all' && token.layer !== layer) {
212
+ return false;
213
+ }
214
+ if (input.domain && token.domain !== input.domain) {
215
+ return false;
216
+ }
217
+ return true;
218
+ })
219
+ .map((token) => toHit(token, 0));
220
+ return { layer, count: tokens.length, tokens };
221
+ }
222
+ const TOPIC_GUIDANCE = {
223
+ text: {
224
+ group: 'color.text',
225
+ chooseBy: [
226
+ 'disabled → color.text.disabled',
227
+ 'error / validation → color.text.error',
228
+ 'page / overlay / section title → color.text.heading',
229
+ 'control identifier / field label → color.text.label',
230
+ 'helper, subtitle, placeholder → color.text.support',
231
+ 'otherwise body / field value → color.text.default',
232
+ ],
233
+ notes: 'heading and label share a primitive; support and disabled share a primitive. Choose by role, not by hex. Prefer semantic tokens over primitives.',
234
+ },
235
+ background: {
236
+ group: 'color.background',
237
+ chooseBy: [
238
+ 'loading shimmer → color.background.skeleton',
239
+ 'disabled field / item fill → color.background.disabled',
240
+ 'otherwise page / panel / card / input / overlay → color.background.default',
241
+ ],
242
+ notes: 'Not a generic white token. Button, tag, and checked-control disabled fills are not this token.',
243
+ },
244
+ border: {
245
+ group: 'color.border',
246
+ chooseBy: [
247
+ 'disabled → color.border.disabled',
248
+ 'invalid → color.border.error',
249
+ 'invalid hover → color.border.error-hover',
250
+ 'hover → color.border.hover',
251
+ 'keyboard focus halo → form.field.focus.color',
252
+ 'input focus stroke → color.border.focus',
253
+ 'checked / open → color.border.selected',
254
+ 'otherwise → color.border.default',
255
+ ],
256
+ notes: 'Focus stroke and keyboard halo are different tokens. Choose by role, not by hex.',
257
+ },
258
+ color: {
259
+ group: 'color',
260
+ chooseBy: [
261
+ 'text: see joy_get_token_usage topic=text',
262
+ 'background: see joy_get_token_usage topic=background',
263
+ 'border: see joy_get_token_usage topic=border',
264
+ ],
265
+ notes: 'Always prefer semantic color roles. Do not use primitives (color.neutral.50) in product UI when a semantic token exists.',
266
+ },
267
+ spacing: {
268
+ group: 'core.spacing',
269
+ chooseBy: ['Use the primitive spacing scale (core.spacing.*). There is no semantic spacing layer yet.'],
270
+ notes: 'These are primitives. Prefer the named scale over raw px.',
271
+ },
272
+ };
273
+ export function getTokenUsage(topic, catalog = loadCatalog()) {
274
+ const normalized = topic?.trim().toLowerCase();
275
+ if (!USAGE_TOPICS.includes(normalized)) {
276
+ return {
277
+ error: `Unknown topic "${topic}". Use one of: ${USAGE_TOPICS.join(', ')}.`,
278
+ };
279
+ }
280
+ const guidance = TOPIC_GUIDANCE[normalized];
281
+ const group = getTokenGroup({ group: guidance.group }, catalog);
282
+ const tokens = 'tokens' in group ? group.tokens.filter((token) => token.layer === 'semantic' || normalized === 'spacing') : [];
283
+ return {
284
+ topic: normalized,
285
+ chooseBy: guidance.chooseBy,
286
+ notes: guidance.notes,
287
+ tokens,
288
+ };
289
+ }
290
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tokens/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ export declare const DOCS_NAMESPACE = "com.maltjoy.docs";
2
+ export type TokenLayer = 'primitive' | 'semantic';
3
+ export type TokenDomain = 'color' | 'spacing' | 'radius' | 'elevation' | 'zIndex' | 'typography' | 'motion' | 'forms' | 'links' | 'other';
4
+ export interface TokenDocs {
5
+ useFor?: string[];
6
+ doNotUseFor?: string[];
7
+ useInstead?: Record<string, string>;
8
+ pairWith?: string[];
9
+ replaces?: string[];
10
+ samePrimitiveAs?: string[];
11
+ notes?: string;
12
+ }
13
+ export interface TokenRecord {
14
+ name: string;
15
+ css: string;
16
+ value: unknown;
17
+ type?: string;
18
+ layer: TokenLayer;
19
+ domain: TokenDomain;
20
+ group: string;
21
+ description?: string;
22
+ deprecated: boolean;
23
+ docs?: TokenDocs;
24
+ }
25
+ export interface TokenCatalog {
26
+ generatedAt: string;
27
+ count: number;
28
+ tokens: TokenRecord[];
29
+ }
30
+ export interface TokenHit {
31
+ name: string;
32
+ css: string;
33
+ layer: TokenLayer;
34
+ domain: TokenDomain;
35
+ type?: string;
36
+ description?: string;
37
+ deprecated: boolean;
38
+ useFor?: string[];
39
+ score: number;
40
+ }
41
+ export declare const GROUP_ALIASES: Record<string, string>;
42
+ export declare const USAGE_TOPICS: readonly ["text", "background", "border", "color", "spacing"];
43
+ export type UsageTopic = (typeof USAGE_TOPICS)[number];
44
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tokens/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,qBAAqB,CAAC;AAEjD,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAElD,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,SAAS,GACT,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBhD,CAAC;AAEF,eAAO,MAAM,YAAY,+DAAgE,CAAC;AAC1F,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ export const DOCS_NAMESPACE = 'com.maltjoy.docs';
2
+ export const GROUP_ALIASES = {
3
+ text: 'color.text',
4
+ background: 'color.background',
5
+ border: 'color.border',
6
+ overlay: 'color.overlay',
7
+ spacing: 'core.spacing',
8
+ radius: 'core.radius',
9
+ elevation: 'core.elevation',
10
+ zindex: 'core.zIndex',
11
+ 'z-index': 'core.zIndex',
12
+ forms: 'form',
13
+ form: 'form',
14
+ links: 'link',
15
+ link: 'link',
16
+ typography: 'typography',
17
+ font: 'font',
18
+ motion: 'transition',
19
+ transition: 'transition',
20
+ color: 'color',
21
+ };
22
+ export const USAGE_TOPICS = ['text', 'background', 'border', 'color', 'spacing'];
23
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tokens/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAyDjD,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,IAAI,EAAE,YAAY;IAClB,UAAU,EAAE,kBAAkB;IAC9B,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,aAAa;IACrB,SAAS,EAAE,gBAAgB;IAC3B,MAAM,EAAE,aAAa;IACrB,SAAS,EAAE,aAAa;IACxB,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,YAAY;IACpB,UAAU,EAAE,YAAY;IACxB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC"}
@@ -0,0 +1,26 @@
1
+ export declare const getTokenGroupTool: {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: {
5
+ type: string;
6
+ properties: {
7
+ group: {
8
+ type: string;
9
+ description: string;
10
+ };
11
+ includeDeprecated: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ };
16
+ required: string[];
17
+ };
18
+ };
19
+ export declare function handleGetTokenGroup(group: string, includeDeprecated?: boolean): {
20
+ group: string;
21
+ count: number;
22
+ tokens: import("../tokens/types.js").TokenRecord[];
23
+ } | {
24
+ error: string;
25
+ };
26
+ //# sourceMappingURL=get-token-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-token-group.d.ts","sourceRoot":"","sources":["../../src/tools/get-token-group.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CAmB7B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,OAAO;;;;;;EAE7E"}
@@ -0,0 +1,24 @@
1
+ import { getTokenGroup } from '../tokens/query.js';
2
+ export const getTokenGroupTool = {
3
+ name: 'joy_get_token_group',
4
+ description: 'Get all Joy tokens in a group. Use aliases like text, background, border, spacing, color, forms, typography. ' +
5
+ 'Semantic groups are returned by default so you can compare sibling roles (heading vs label).',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ group: {
10
+ type: 'string',
11
+ description: 'Group name or alias (text, background, border, spacing, color, forms, …)',
12
+ },
13
+ includeDeprecated: {
14
+ type: 'boolean',
15
+ description: 'Include deprecated aliases. Defaults to false.',
16
+ },
17
+ },
18
+ required: ['group'],
19
+ },
20
+ };
21
+ export function handleGetTokenGroup(group, includeDeprecated) {
22
+ return getTokenGroup({ group, includeDeprecated });
23
+ }
24
+ //# sourceMappingURL=get-token-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-token-group.js","sourceRoot":"","sources":["../../src/tools/get-token-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,+GAA+G;QAC/G,8FAA8F;IAChG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0EAA0E;aACxF;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,gDAAgD;aAC9D;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,iBAA2B;IAC5E,OAAO,aAAa,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,24 @@
1
+ export declare const getTokenUsageTool: {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: {
5
+ type: string;
6
+ properties: {
7
+ topic: {
8
+ type: string;
9
+ enum: string[];
10
+ description: string;
11
+ };
12
+ };
13
+ required: string[];
14
+ };
15
+ };
16
+ export declare function handleGetTokenUsage(topic: string): {
17
+ topic: "color" | "spacing" | "text" | "background" | "border";
18
+ chooseBy: string[];
19
+ notes: string;
20
+ tokens: import("../tokens/types.js").TokenRecord[];
21
+ } | {
22
+ error: string;
23
+ };
24
+ //# sourceMappingURL=get-token-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-token-usage.d.ts","sourceRoot":"","sources":["../../src/tools/get-token-usage.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAiB7B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM;;;;;;;EAEhD"}
@@ -0,0 +1,22 @@
1
+ import { getTokenUsage } from '../tokens/query.js';
2
+ export const getTokenUsageTool = {
3
+ name: 'joy_get_token_usage',
4
+ description: 'Get usage rules for a Joy token topic (text, background, border, color, spacing). ' +
5
+ 'Returns a decision tree and the relevant semantic tokens with do/don\'t. ' +
6
+ 'Call this when choosing between similar color roles.',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {
10
+ topic: {
11
+ type: 'string',
12
+ enum: ['text', 'background', 'border', 'color', 'spacing'],
13
+ description: 'Usage topic',
14
+ },
15
+ },
16
+ required: ['topic'],
17
+ },
18
+ };
19
+ export function handleGetTokenUsage(topic) {
20
+ return getTokenUsage(topic);
21
+ }
22
+ //# sourceMappingURL=get-token-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-token-usage.js","sourceRoot":"","sources":["../../src/tools/get-token-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,oFAAoF;QACpF,2EAA2E;QAC3E,sDAAsD;IACxD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;gBAC1D,WAAW,EAAE,aAAa;aAC3B;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare const getTokenTool: {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: {
5
+ type: string;
6
+ properties: {
7
+ name: {
8
+ type: string;
9
+ description: string;
10
+ };
11
+ };
12
+ required: string[];
13
+ };
14
+ };
15
+ export declare function handleGetToken(name: string): import("../tokens/types.js").TokenRecord | {
16
+ error: string;
17
+ };
18
+ //# sourceMappingURL=get-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-token.d.ts","sourceRoot":"","sources":["../../src/tools/get-token.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAexB,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM;;EAE1C"}
@@ -0,0 +1,20 @@
1
+ import { getToken } from '../tokens/query.js';
2
+ export const getTokenTool = {
3
+ name: 'joy_get_token',
4
+ description: 'Get one Joy design token by path (color.text.heading) or CSS name (--joy-color-text-heading). ' +
5
+ 'Returns value, layer, and usage docs (useFor, doNotUseFor, pairWith, replaces).',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ name: {
10
+ type: 'string',
11
+ description: 'Token path or CSS custom property',
12
+ },
13
+ },
14
+ required: ['name'],
15
+ },
16
+ };
17
+ export function handleGetToken(name) {
18
+ return getToken(name);
19
+ }
20
+ //# sourceMappingURL=get-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-token.js","sourceRoot":"","sources":["../../src/tools/get-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,gGAAgG;QAChG,iFAAiF;IACnF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;aACjD;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
@@ -1,21 +1,30 @@
1
+ import { type ListDesignTokensInput } from '../tokens/query.js';
1
2
  export declare const listDesignTokensTool: {
2
3
  name: string;
3
4
  description: string;
4
5
  inputSchema: {
5
6
  type: string;
6
- properties: {};
7
+ properties: {
8
+ layer: {
9
+ type: string;
10
+ enum: string[];
11
+ description: string;
12
+ };
13
+ domain: {
14
+ type: string;
15
+ enum: string[];
16
+ };
17
+ includeDeprecated: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ };
7
22
  required: never[];
8
23
  };
9
24
  };
10
- export interface DesignTokensByDomain {
11
- colors: Record<string, string>;
12
- spacing: Record<string, string>;
13
- typography: Record<string, string>;
14
- radius: Record<string, string>;
15
- elevation: Record<string, string>;
16
- zIndex: Record<string, string>;
17
- transitions: Record<string, string>;
18
- forms: Record<string, string>;
19
- }
20
- export declare function handleListDesignTokens(): DesignTokensByDomain;
25
+ export declare function handleListDesignTokens(args?: ListDesignTokensInput): {
26
+ layer: string;
27
+ count: number;
28
+ tokens: import("../tokens/types.js").TokenHit[];
29
+ };
21
30
  //# sourceMappingURL=list-design-tokens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-design-tokens.d.ts","sourceRoot":"","sources":["../../src/tools/list-design-tokens.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,oBAAoB;;;;;;;;CAQhC,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,wBAAgB,sBAAsB,IAAI,oBAAoB,CAI7D"}
1
+ {"version":3,"file":"list-design-tokens.d.ts","sourceRoot":"","sources":["../../src/tools/list-design-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGlF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;CAwBhC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,qBAA0B;;;;EAMtE"}
@@ -1,19 +1,33 @@
1
- import { readFileSync } from 'fs';
2
- import { resolve, dirname } from 'path';
3
- import { fileURLToPath } from 'url';
4
- const __dirname = dirname(fileURLToPath(import.meta.url));
1
+ import { listDesignTokens } from '../tokens/query.js';
5
2
  export const listDesignTokensTool = {
6
3
  name: 'joy_list_design_tokens',
7
- description: 'Lists all available Joy design tokens (CSS custom properties) organized by domain (colors, spacing, typography, radius, elevation, zIndex, transitions, forms).',
4
+ description: 'List Joy design tokens as compact summaries. Defaults to the semantic layer only. ' +
5
+ 'Pass layer=primitive or a domain to narrow. Prefer joy_search_tokens when you know the intent.',
8
6
  inputSchema: {
9
7
  type: 'object',
10
- properties: {},
11
- required: []
12
- }
8
+ properties: {
9
+ layer: {
10
+ type: 'string',
11
+ enum: ['semantic', 'primitive', 'all'],
12
+ description: 'Defaults to semantic',
13
+ },
14
+ domain: {
15
+ type: 'string',
16
+ enum: ['color', 'spacing', 'radius', 'elevation', 'zIndex', 'typography', 'motion', 'forms', 'links'],
17
+ },
18
+ includeDeprecated: {
19
+ type: 'boolean',
20
+ description: 'Include deprecated aliases. Defaults to false.',
21
+ },
22
+ },
23
+ required: [],
24
+ },
13
25
  };
14
- export function handleListDesignTokens() {
15
- const tokensFilePath = resolve(__dirname, '../../dist/doc/design-tokens.json');
16
- const fileContent = readFileSync(tokensFilePath, 'utf-8');
17
- return JSON.parse(fileContent);
26
+ export function handleListDesignTokens(args = {}) {
27
+ return listDesignTokens({
28
+ layer: args.layer,
29
+ domain: args.domain,
30
+ includeDeprecated: args.includeDeprecated,
31
+ });
18
32
  }
19
33
  //# sourceMappingURL=list-design-tokens.js.map