@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
@@ -1,12 +1,12 @@
1
1
  {
2
- "generated": "2026-04-16T12:48:46.193Z",
2
+ "generated": "2026-09-02T12:55:36.634Z",
3
3
  "version": "0.4.0",
4
4
  "statistics": {
5
- "totalComponents": 83,
6
- "totalProps": 484,
7
- "totalEvents": 67,
5
+ "totalComponents": 82,
6
+ "totalProps": 473,
7
+ "totalEvents": 66,
8
8
  "totalSlots": 148,
9
- "componentsWithVModel": 23,
9
+ "componentsWithVModel": 22,
10
10
  "componentsWithErrors": 0,
11
11
  "componentsWithPartialErrors": 1
12
12
  },
@@ -106,7 +106,7 @@
106
106
  "description": "A button component supporting multiple variants, sizes, and states.\nFeatures icon support, loading states and can function as either a button or link element.\nIncludes ripple effects and comprehensive styling options for different use cases from primary actions to subtle ghost buttons.\n\n**Tips:** set a \"href\" attribute to make the button a link.",
107
107
  "category": "Buttons",
108
108
  "path": "VJoyButton/metadata.json",
109
- "propsCount": 9,
109
+ "propsCount": 8,
110
110
  "eventsCount": 0,
111
111
  "slotsCount": 1,
112
112
  "hasError": false
@@ -253,12 +253,12 @@
253
253
  },
254
254
  {
255
255
  "name": "VJoyDropzone",
256
- "description": "A file upload component with drag-and-drop functionality for handling file selection and management.\nSupports single or multiple file uploads, file validation and customizable file displays.\nFeatures visual feedback for drag states, error handling, and flexible content slots for file information and actions.\n\nThe dropzone required as `v-model` an array containing objects with at least the \"name\" property.",
256
+ "description": "A file upload component with drag-and-drop functionality for handling file selection and management.\nSupports single or multiple file uploads, file validation and customizable file displays.\nFeatures visual feedback for disabled, invalid, and drag states, error handling, and flexible content slots for file information and actions.\n\nThe dropzone requires a `v-model` bound to an array containing objects with at least the `name` property (or `File` instances).\n\nUse `label` to display a label above the dropzone. Use `canDelete` (default `true`) to hide the delete button on file items while keeping update available. Set `disabled` to block uploads, drag-and-drop, and file actions. Set `invalid` for parent form feedback (e.g. required empty field); it adds invalid styling but does not replace format/size validation. The exposed `invalid` ref only reflects file validation (`accept`, `maxSize`); the `invalid` prop is for external form state—both can apply the invalid appearance.\n\nSlots: `dropzone-description` for the main instruction (default text with browse link), `dropzone-subtitle` for an optional hint line (empty by default), `dropzone-legend` for helper text below the zone, `file-information` and `file-actions` for per-file content (slot prop `file`). In single-file mode, `dropzone-legend` is hidden when a format or size error is shown (`VJoyFormError` instead); in multiple mode, errors appear on each file item and the legend stays visible.",
257
257
  "category": "Forms",
258
258
  "path": "VJoyDropzone/metadata.json",
259
- "propsCount": 11,
259
+ "propsCount": 14,
260
260
  "eventsCount": 0,
261
- "slotsCount": 4,
261
+ "slotsCount": 5,
262
262
  "hasError": false
263
263
  },
264
264
  {
@@ -296,7 +296,7 @@
296
296
  "description": "A form error display component for showing error messages.\nFeatures a warning icon, support for single error messages or multiple error lists, and visibility control for conditional error display.\nIncludes proper accessibility attributes with alert role for screen reader announcement of form errors.",
297
297
  "category": "Forms",
298
298
  "path": "VJoyFormError/metadata.json",
299
- "propsCount": 4,
299
+ "propsCount": 3,
300
300
  "eventsCount": 0,
301
301
  "slotsCount": 1,
302
302
  "hasError": false
@@ -373,7 +373,7 @@
373
373
  },
374
374
  {
375
375
  "name": "VJoyIconButton",
376
- "description": "A dedicated icon-button component built on top of `VJoyButton`.\nUse this component instead of the deprecated `circle` prop from `VJoyButton`.",
376
+ "description": "A dedicated icon-button component built on top of `VJoyButton`.\nIcon-only button with an accessible label.",
377
377
  "category": "Buttons",
378
378
  "path": "VJoyIconButton/metadata.json",
379
379
  "propsCount": 6,
@@ -403,10 +403,10 @@
403
403
  },
404
404
  {
405
405
  "name": "VJoyInput",
406
- "description": "A comprehensive form input component with extensive customization and validation features.\nSupports multiple input types, icon support, clearable functionality, unit displays, and comprehensive validation states.\nFeatures auto-focus capabilities, accessibility compliance, and seamless integration with form validation systems.",
406
+ "description": "A comprehensive form input component with extensive customization and validation features.\nSupports multiple input types, icon support, clearable functionality, and comprehensive validation states.\nFeatures auto-focus capabilities, accessibility compliance, and seamless integration with form validation systems.",
407
407
  "category": "Forms",
408
408
  "path": "VJoyInput/metadata.json",
409
- "propsCount": 19,
409
+ "propsCount": 18,
410
410
  "eventsCount": 1,
411
411
  "slotsCount": 2,
412
412
  "hasError": false
@@ -428,7 +428,7 @@
428
428
  "path": "VJoyInputNumber/metadata.json",
429
429
  "propsCount": 17,
430
430
  "eventsCount": 1,
431
- "slotsCount": 0,
431
+ "slotsCount": 1,
432
432
  "hasError": false
433
433
  },
434
434
  {
@@ -436,7 +436,7 @@
436
436
  "description": "Password input built on top of VJoyInput with built-in visibility toggle.",
437
437
  "category": "Forms",
438
438
  "path": "VJoyInputPassword/metadata.json",
439
- "propsCount": 15,
439
+ "propsCount": 14,
440
440
  "eventsCount": 1,
441
441
  "slotsCount": 1,
442
442
  "hasError": false
@@ -491,16 +491,6 @@
491
491
  "slotsCount": 0,
492
492
  "hasError": false
493
493
  },
494
- {
495
- "name": "VJoyMultiCheckbox",
496
- "description": "A multi-selection checkbox group component for handling arrays of selected values.\nSimplifies multi-selection scenarios by managing checkbox states and array manipulation automatically.\nFeatures integrated labeling, fieldset structure for accessibility, and customizable checkbox content through slots.\nPerfect for filtering interfaces and bulk selection operations.",
497
- "category": "Forms",
498
- "path": "VJoyMultiCheckbox/metadata.json",
499
- "propsCount": 9,
500
- "eventsCount": 1,
501
- "slotsCount": 2,
502
- "hasError": false
503
- },
504
494
  {
505
495
  "name": "VJoyPagination",
506
496
  "description": "A complete pagination component for navigating through large datasets with proper accessibility support.\nFeatures automatic page number calculation, gap handling for large page counts, customizable navigation arrows,\nand router integration support through slots. Includes proper ARIA attributes and keyboard navigation\nfor an accessible pagination experience across different content types.",
@@ -533,7 +523,7 @@
533
523
  },
534
524
  {
535
525
  "name": "VJoyPasswordRequirement",
536
- "description": "A component to display a password requirement status.\nThis is meant to be displayed under a VJoyInput of type password.",
526
+ "description": "A component to display a password requirement status.\nThis is meant to be displayed under VJoyInputPassword.",
537
527
  "category": "Forms",
538
528
  "path": "VJoyPasswordRequirement/metadata.json",
539
529
  "propsCount": 2,
@@ -753,7 +743,7 @@
753
743
  },
754
744
  {
755
745
  "name": "VJoyText",
756
- "description": "This component is directly dependant from `@maltjoy/css` package, a CSS class utils package built on top of `@maltjoy/themes` that contains our design tokens.\n\n**Reminder**: values ending with 50 have same size but are bold.\n\nSee \"Fonts\" section here https://doc.malt.tech/joy-storybook/?path=/docs/css-framework--docs#advanced-fonts\n\n**Warning** If you use long text within a VJoyWrapper, you'll have to set a max-width to prevent the text from breaking the layout.",
746
+ "description": "This component uses CSS utility classes from `@maltjoy/themes` (`dist/default.css`).\n\n**Reminder**: values ending with 50 have same size but are bold.\n\nSee \"Fonts\" section here https://doc.malt.tech/joy-storybook/?path=/docs/css-framework--docs#advanced-fonts\n\n**Warning** If you use long text within a VJoyWrapper, you'll have to set a max-width to prevent the text from breaking the layout.",
757
747
  "category": "View",
758
748
  "path": "VJoyText/metadata.json",
759
749
  "propsCount": 2,
@@ -803,10 +793,10 @@
803
793
  },
804
794
  {
805
795
  "name": "VJoyUserCard",
806
- "description": "A comprehensive user profile card component for displaying user information in a structured layout.\nFeatures integrated avatar display, name/subtitle presentation, rating stars support, and optional\nlink functionality for navigation. Includes multiple customization slots for avatar, title, subtitle,\nand rating components, with full attribute inheritance for link behavior and accessibility.",
796
+ "description": "A comprehensive user profile card component for displaying user information in a structured layout.\nFeatures integrated avatar display, name/subtitle presentation, rating stars support, and optional\nlink functionality for navigation. Includes multiple customization slots for avatar, title, subtitle,\nand free content through the default slot, with full attribute inheritance for link behavior and\naccessibility. The user-card-rating-stars slot is deprecated; use the default slot for custom\nrating stars or other free content instead.",
807
797
  "category": "View",
808
798
  "path": "VJoyUserCard/metadata.json",
809
- "propsCount": 5,
799
+ "propsCount": 4,
810
800
  "eventsCount": 0,
811
801
  "slotsCount": 5,
812
802
  "hasError": false
package/dist/index.js CHANGED
@@ -8,6 +8,10 @@ import { dirname, join } from 'path';
8
8
  import { listComponentsTool, handleListComponents } from './tools/list-components.js';
9
9
  import { getComponentInfoTool, handleGetComponentInfo } from './tools/get-component-info.js';
10
10
  import { listDesignTokensTool, handleListDesignTokens } from './tools/list-design-tokens.js';
11
+ import { searchTokensTool, handleSearchTokens } from './tools/search-tokens.js';
12
+ import { getTokenTool, handleGetToken } from './tools/get-token.js';
13
+ import { getTokenGroupTool, handleGetTokenGroup } from './tools/get-token-group.js';
14
+ import { getTokenUsageTool, handleGetTokenUsage } from './tools/get-token-usage.js';
11
15
  import { listCssClassesTool, handleListCssClasses } from './tools/list-css-classes.js';
12
16
  import { getComponentTypesTool, handleGetComponentTypes } from './tools/get-component-types.js';
13
17
  const __filename = fileURLToPath(import.meta.url);
@@ -21,7 +25,7 @@ class JoyMcpServer {
21
25
  constructor() {
22
26
  this.server = new Server({
23
27
  name: 'joy-design-system',
24
- version: '0.2.0',
28
+ version: '0.3.0',
25
29
  }, {
26
30
  capabilities: {
27
31
  tools: {},
@@ -34,7 +38,17 @@ class JoyMcpServer {
34
38
  // List available tools
35
39
  this.server.setRequestHandler(ListToolsRequestSchema, async () => {
36
40
  return {
37
- tools: [listComponentsTool, getComponentInfoTool, getComponentTypesTool, listDesignTokensTool, listCssClassesTool],
41
+ tools: [
42
+ listComponentsTool,
43
+ getComponentInfoTool,
44
+ getComponentTypesTool,
45
+ searchTokensTool,
46
+ getTokenTool,
47
+ getTokenGroupTool,
48
+ getTokenUsageTool,
49
+ listDesignTokensTool,
50
+ listCssClassesTool,
51
+ ],
38
52
  };
39
53
  });
40
54
  // Handle tool calls
@@ -77,8 +91,62 @@ class JoyMcpServer {
77
91
  ],
78
92
  };
79
93
  }
94
+ case 'joy_search_tokens': {
95
+ const result = handleSearchTokens({
96
+ query: args?.query,
97
+ layer: args?.layer,
98
+ domain: args?.domain,
99
+ includeDeprecated: args?.includeDeprecated,
100
+ limit: args?.limit,
101
+ });
102
+ return {
103
+ content: [
104
+ {
105
+ type: 'text',
106
+ text: JSON.stringify(result, null, 2),
107
+ },
108
+ ],
109
+ };
110
+ }
111
+ case 'joy_get_token': {
112
+ const result = handleGetToken(args?.name);
113
+ return {
114
+ content: [
115
+ {
116
+ type: 'text',
117
+ text: JSON.stringify(result, null, 2),
118
+ },
119
+ ],
120
+ };
121
+ }
122
+ case 'joy_get_token_group': {
123
+ const result = handleGetTokenGroup(args?.group, args?.includeDeprecated);
124
+ return {
125
+ content: [
126
+ {
127
+ type: 'text',
128
+ text: JSON.stringify(result, null, 2),
129
+ },
130
+ ],
131
+ };
132
+ }
133
+ case 'joy_get_token_usage': {
134
+ const result = handleGetTokenUsage(args?.topic);
135
+ return {
136
+ content: [
137
+ {
138
+ type: 'text',
139
+ text: JSON.stringify(result, null, 2),
140
+ },
141
+ ],
142
+ };
143
+ }
80
144
  case 'joy_list_design_tokens': {
81
- const result = handleListDesignTokens();
145
+ const result = handleListDesignTokens({
146
+ layer: args?.layer,
147
+ domain: args?.domain,
148
+ includeDeprecated: args?.includeDeprecated,
149
+ });
82
150
  return {
83
151
  content: [
84
152
  {
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,6 @@
1
+ import { type TokenCatalog, type TokenRecord } from './types.js';
2
+ export declare function defaultTokensRoot(): string;
3
+ export declare function toCssName(tokenPath: string): string;
4
+ export declare function flattenTokenFiles(tokensRoot: string): TokenRecord[];
5
+ export declare function writeTokenCatalog(docPath: string, tokensRoot?: string): TokenCatalog;
6
+ //# sourceMappingURL=build-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-catalog.d.ts","sourceRoot":"","sources":["../../src/tokens/build-catalog.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,YAAY,EAAqD,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAIpI,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAWD,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMnD;AAuGD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CAYnE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,SAAsB,GAAG,YAAY,CASjG"}
@@ -0,0 +1,141 @@
1
+ import { existsSync, readdirSync, readFileSync, writeFileSync } from 'fs';
2
+ import { dirname, join, relative } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { DOCS_NAMESPACE } from './types.js';
5
+ const __dirname = dirname(fileURLToPath(import.meta.url));
6
+ export function defaultTokensRoot() {
7
+ return join(__dirname, '../../../themes/tokens');
8
+ }
9
+ function toKebabCase(value) {
10
+ return value
11
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
12
+ .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
13
+ .replace(/[^a-zA-Z0-9]+/g, '-')
14
+ .replace(/^-|-$/g, '')
15
+ .toLowerCase();
16
+ }
17
+ export function toCssName(tokenPath) {
18
+ const name = tokenPath
19
+ .split('.')
20
+ .map((segment) => toKebabCase(segment))
21
+ .join('-');
22
+ return `--joy-${name}`;
23
+ }
24
+ function layerFromSource(tokensRoot, filePath) {
25
+ const rel = relative(tokensRoot, filePath).replace(/\\/g, '/');
26
+ if (rel.startsWith('semantic/')) {
27
+ return 'semantic';
28
+ }
29
+ return 'primitive';
30
+ }
31
+ function domainFromPath(tokenPath) {
32
+ if (tokenPath.startsWith('color.'))
33
+ return 'color';
34
+ if (tokenPath.startsWith('core.spacing.'))
35
+ return 'spacing';
36
+ if (tokenPath.startsWith('core.radius.'))
37
+ return 'radius';
38
+ if (tokenPath.startsWith('core.elevation.'))
39
+ return 'elevation';
40
+ if (tokenPath.startsWith('core.zIndex.'))
41
+ return 'zIndex';
42
+ if (tokenPath.startsWith('font.') || tokenPath.startsWith('lineHeight.') || tokenPath.startsWith('typography.')) {
43
+ return 'typography';
44
+ }
45
+ if (tokenPath.startsWith('transition.'))
46
+ return 'motion';
47
+ if (tokenPath.startsWith('form.'))
48
+ return 'forms';
49
+ if (tokenPath.startsWith('link.'))
50
+ return 'links';
51
+ return 'other';
52
+ }
53
+ function groupFromPath(tokenPath) {
54
+ const parts = tokenPath.split('.');
55
+ if (parts.length <= 1) {
56
+ return tokenPath;
57
+ }
58
+ return parts.slice(0, -1).join('.');
59
+ }
60
+ function isPlainObject(value) {
61
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
62
+ }
63
+ function isDeprecated(node) {
64
+ return node.$deprecated === true || node.deprecated === true;
65
+ }
66
+ function readDocs(node) {
67
+ const extensions = node.$extensions;
68
+ if (!isPlainObject(extensions)) {
69
+ return undefined;
70
+ }
71
+ const docs = extensions[DOCS_NAMESPACE];
72
+ if (!isPlainObject(docs)) {
73
+ return undefined;
74
+ }
75
+ return docs;
76
+ }
77
+ function collectJsonFiles(dir, acc = []) {
78
+ if (!existsSync(dir)) {
79
+ return acc;
80
+ }
81
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
82
+ const full = join(dir, entry.name);
83
+ if (entry.isDirectory()) {
84
+ collectJsonFiles(full, acc);
85
+ }
86
+ else if (entry.name.endsWith('.json')) {
87
+ acc.push(full);
88
+ }
89
+ }
90
+ return acc;
91
+ }
92
+ function visit(node, pathSegments, inheritedType, layer, records) {
93
+ const type = typeof node.$type === 'string' ? node.$type : inheritedType;
94
+ if (Object.hasOwn(node, '$value')) {
95
+ const name = pathSegments.join('.');
96
+ const docs = readDocs(node);
97
+ records.push({
98
+ name,
99
+ css: toCssName(name),
100
+ value: node.$value,
101
+ type,
102
+ layer,
103
+ domain: domainFromPath(name),
104
+ group: groupFromPath(name),
105
+ description: typeof node.$description === 'string' ? node.$description : undefined,
106
+ deprecated: isDeprecated(node),
107
+ ...(docs ? { docs } : {}),
108
+ });
109
+ return;
110
+ }
111
+ for (const [key, child] of Object.entries(node)) {
112
+ if (key.startsWith('$') || !isPlainObject(child)) {
113
+ continue;
114
+ }
115
+ visit(child, [...pathSegments, key], type, layer, records);
116
+ }
117
+ }
118
+ export function flattenTokenFiles(tokensRoot) {
119
+ const records = [];
120
+ for (const filePath of collectJsonFiles(tokensRoot)) {
121
+ const document = JSON.parse(readFileSync(filePath, 'utf-8'));
122
+ if (!isPlainObject(document)) {
123
+ continue;
124
+ }
125
+ const layer = layerFromSource(tokensRoot, filePath);
126
+ visit(document, [], undefined, layer, records);
127
+ }
128
+ records.sort((left, right) => left.name.localeCompare(right.name));
129
+ return records;
130
+ }
131
+ export function writeTokenCatalog(docPath, tokensRoot = defaultTokensRoot()) {
132
+ const tokens = flattenTokenFiles(tokensRoot);
133
+ const catalog = {
134
+ generatedAt: new Date().toISOString(),
135
+ count: tokens.length,
136
+ tokens,
137
+ };
138
+ writeFileSync(join(docPath, 'design-tokens.json'), JSON.stringify(catalog, null, 2));
139
+ return catalog;
140
+ }
141
+ //# sourceMappingURL=build-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-catalog.js","sourceRoot":"","sources":["../../src/tokens/build-catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { type TokenCatalog, type TokenHit, type TokenLayer, type TokenRecord, type UsageTopic } from './types.js';
2
+ export declare function catalogPath(): string;
3
+ export declare function loadCatalog(path?: string): TokenCatalog;
4
+ export declare function resetCatalogCache(): void;
5
+ export interface SearchTokensInput {
6
+ query: string;
7
+ layer?: TokenLayer | 'all';
8
+ domain?: TokenRecord['domain'];
9
+ includeDeprecated?: boolean;
10
+ limit?: number;
11
+ }
12
+ export declare function searchTokens(input: SearchTokensInput, catalog?: TokenCatalog): {
13
+ query: string;
14
+ count: number;
15
+ tokens: TokenHit[];
16
+ };
17
+ export declare function getToken(nameOrCss: string, catalog?: TokenCatalog): TokenRecord | {
18
+ error: string;
19
+ };
20
+ export interface GetTokenGroupInput {
21
+ group: string;
22
+ includeDeprecated?: boolean;
23
+ }
24
+ export declare function getTokenGroup(input: GetTokenGroupInput, catalog?: TokenCatalog): {
25
+ group: string;
26
+ count: number;
27
+ tokens: TokenRecord[];
28
+ } | {
29
+ error: string;
30
+ };
31
+ export interface ListDesignTokensInput {
32
+ layer?: TokenLayer | 'all';
33
+ domain?: TokenRecord['domain'];
34
+ includeDeprecated?: boolean;
35
+ }
36
+ export declare function listDesignTokens(input?: ListDesignTokensInput, catalog?: TokenCatalog): {
37
+ layer: string;
38
+ count: number;
39
+ tokens: TokenHit[];
40
+ };
41
+ export declare function getTokenUsage(topic: string, catalog?: TokenCatalog): {
42
+ topic: UsageTopic;
43
+ chooseBy: string[];
44
+ notes: string;
45
+ tokens: TokenRecord[];
46
+ } | {
47
+ error: string;
48
+ };
49
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tokens/query.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AAUpB,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,WAAW,CAAC,IAAI,SAAgB,GAAG,YAAY,CAY9D;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAoGD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,eAAgB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,EAAE,CAAA;CAAE,CAiCpI;AAiBD,wBAAgB,QAAQ,CACtB,SAAS,EAAE,MAAM,EACjB,OAAO,eAAgB,GACtB,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAWjC;AAQD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,kBAAkB,EACzB,OAAO,eAAgB,GACtB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAiC7E;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,GAAE,qBAA0B,EACjC,OAAO,eAAgB,GACtB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,EAAE,CAAA;CAAE,CAkBtD;AAyDD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,OAAO,eAAgB,GAErB;IACE,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,GACD;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAkBpB"}