@smwb/ui-mcp-react 2.1.3 → 2.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 (130) hide show
  1. package/README.md +13 -1
  2. package/component-meta/base/icon/icon.json +4 -0
  3. package/component-meta/base/ripple/ripple.json +4 -0
  4. package/component-meta/clickAwayListener/clickAwayListener.json +4 -0
  5. package/component-meta/connects/rt/table/draggableHeader.draggableColumnHeader.json +4 -0
  6. package/component-meta/connects/rt/table/draggableHeader.draggableColumnHeaderWrapper.json +4 -0
  7. package/component-meta/connects/rt/table/headerCellRenderer.json +4 -0
  8. package/component-meta/connects/rt/table/table.json +4 -0
  9. package/component-meta/dataDisplay/accordion/accordion.json +4 -0
  10. package/component-meta/dataDisplay/assetGrid/assetGrid.json +77 -0
  11. package/component-meta/dataDisplay/avatar/avatar.avatarGroup.json +4 -0
  12. package/component-meta/dataDisplay/avatar/avatar.json +4 -0
  13. package/component-meta/dataDisplay/badge/badge.json +4 -0
  14. package/component-meta/dataDisplay/card/card.json +4 -0
  15. package/component-meta/dataDisplay/carousel/carousel.json +5 -0
  16. package/component-meta/dataDisplay/chat/chat.json +4 -0
  17. package/component-meta/dataDisplay/chat/chatAttachmentImage.json +5 -0
  18. package/component-meta/dataDisplay/chat/chatAttachments.json +4 -0
  19. package/component-meta/dataDisplay/chat/chatComposer.json +4 -0
  20. package/component-meta/dataDisplay/chat/chatHeader.json +4 -0
  21. package/component-meta/dataDisplay/chat/chatIconButton.json +4 -0
  22. package/component-meta/dataDisplay/chat/chatLayout.chatLayoutChat.json +4 -0
  23. package/component-meta/dataDisplay/chat/chatLayout.json +4 -0
  24. package/component-meta/dataDisplay/chat/chatMessageAvatar.json +4 -0
  25. package/component-meta/dataDisplay/chat/chatMessageBubble.json +4 -0
  26. package/component-meta/dataDisplay/chat/chatMessageIncoming.json +4 -0
  27. package/component-meta/dataDisplay/chat/chatMessageItem.json +4 -0
  28. package/component-meta/dataDisplay/chat/chatMessageOutgoing.json +4 -0
  29. package/component-meta/dataDisplay/chat/chatMessageSkeleton.json +4 -0
  30. package/component-meta/dataDisplay/chat/chatMessageStatus.json +4 -0
  31. package/component-meta/dataDisplay/chat/chatMessageSystem.json +4 -0
  32. package/component-meta/dataDisplay/chat/chatMessages.json +4 -0
  33. package/component-meta/dataDisplay/chat/chatOverlayLayout.chatOverlayLayoutChat.json +4 -0
  34. package/component-meta/dataDisplay/chat/chatOverlayLayout.json +4 -0
  35. package/component-meta/dataDisplay/chat/chatShell.json +5 -0
  36. package/component-meta/dataDisplay/chip/chip.json +4 -0
  37. package/component-meta/dataDisplay/chipGroup/chipGroup.json +62 -0
  38. package/component-meta/dataDisplay/expansionPanel/expansionPanel.json +5 -0
  39. package/component-meta/dataDisplay/imagesList/imagesList.json +4 -0
  40. package/component-meta/dataDisplay/imagesList/imagesListItem/imagesListItem.json +5 -0
  41. package/component-meta/dataDisplay/imagesList/imagesListItem/imagesListItemModal.json +5 -0
  42. package/component-meta/dataDisplay/lazyImage/lazyImage.json +56 -0
  43. package/component-meta/dataDisplay/list/list.json +4 -0
  44. package/component-meta/dataDisplay/list/listItem.json +4 -0
  45. package/component-meta/dataDisplay/table/table.json +4 -0
  46. package/component-meta/dataDisplay/table/tableBody.json +4 -0
  47. package/component-meta/dataDisplay/table/tableCell.json +4 -0
  48. package/component-meta/dataDisplay/table/tableHead.json +4 -0
  49. package/component-meta/dataDisplay/table/tableHeadCell.json +4 -0
  50. package/component-meta/dataDisplay/table/tablePagination/tablePagination.baseTablePagination.json +4 -0
  51. package/component-meta/dataDisplay/table/tablePagination/tablePagination.json +4 -0
  52. package/component-meta/dataDisplay/table/tableRow.json +4 -0
  53. package/component-meta/dataDisplay/thumbCard/thumbCard.json +83 -0
  54. package/component-meta/dataDisplay/treeView/treeView.json +4 -0
  55. package/component-meta/dataDisplay/typography/typography.json +4 -0
  56. package/component-meta/feedBack/message/message.json +4 -0
  57. package/component-meta/feedBack/modal/modal.content.json +4 -0
  58. package/component-meta/feedBack/modal/modal.footer.json +4 -0
  59. package/component-meta/feedBack/modal/modal.header.json +4 -0
  60. package/component-meta/feedBack/modal/modal.json +5 -0
  61. package/component-meta/feedBack/progressIndicator/progressIndicator.circularProgress.json +4 -0
  62. package/component-meta/feedBack/progressIndicator/progressIndicator.json +4 -0
  63. package/component-meta/feedBack/saveAssetDialog/saveAssetDialog.json +101 -0
  64. package/component-meta/feedBack/skeleton/skeleton.json +4 -0
  65. package/component-meta/feedBack/snackbar/snackbar.json +5 -0
  66. package/component-meta/feedBack/snackbar/snackbar.snackbarsProvider.json +4 -0
  67. package/component-meta/feedBack/tooltip/tooltip.json +5 -0
  68. package/component-meta/inputs/button/button.json +4 -0
  69. package/component-meta/inputs/buttonGroups/buttonGroup.json +4 -0
  70. package/component-meta/inputs/checkbox/checkbox.json +4 -0
  71. package/component-meta/inputs/datePicker/dataPickerDays.json +4 -0
  72. package/component-meta/inputs/datePicker/dataPickerHeader.json +4 -0
  73. package/component-meta/inputs/datePicker/dataPickerInput.json +4 -0
  74. package/component-meta/inputs/datePicker/datePicker.json +5 -0
  75. package/component-meta/inputs/datePicker/datePickerIconButton.json +4 -0
  76. package/component-meta/inputs/datePicker/datePickerList.json +4 -0
  77. package/component-meta/inputs/dateTimePicker/dateTimePicker.json +5 -0
  78. package/component-meta/inputs/dateTimePicker/dateTimePickerInput.json +4 -0
  79. package/component-meta/inputs/fileDrop/countPreview.json +4 -0
  80. package/component-meta/inputs/fileDrop/fileDrop.json +4 -0
  81. package/component-meta/inputs/fileDrop/preview.json +4 -0
  82. package/component-meta/inputs/fileDrop/previewWrapper.json +4 -0
  83. package/component-meta/inputs/fileInput/fileInput.json +4 -0
  84. package/component-meta/inputs/floatingButton/floatingButton.json +4 -0
  85. package/component-meta/inputs/radioButton/radioButton.json +4 -0
  86. package/component-meta/inputs/rating/rating.json +4 -0
  87. package/component-meta/inputs/selectField/dropdownMenu.json +4 -0
  88. package/component-meta/inputs/selectField/selectField.json +5 -0
  89. package/component-meta/inputs/slider/slider.json +4 -0
  90. package/component-meta/inputs/textField/textField.json +4 -0
  91. package/component-meta/inputs/textField/textFieldAdornment.json +4 -0
  92. package/component-meta/inputs/textField/textFieldWrapper.json +4 -0
  93. package/component-meta/inputs/timePicker/timePicker.json +5 -0
  94. package/component-meta/inputs/timePicker/timePickerColumns.json +4 -0
  95. package/component-meta/inputs/timePicker/timePickerInput.json +4 -0
  96. package/component-meta/inputs/timePicker/timePickerList.json +4 -0
  97. package/component-meta/inputs/toggle/toggle.json +4 -0
  98. package/component-meta/inputs/valueSlider/valueSlider.json +151 -0
  99. package/component-meta/layout/appLayout/appLayout.json +4 -0
  100. package/component-meta/layout/divider/divider.json +4 -0
  101. package/component-meta/layout/grid/grid.column.json +4 -0
  102. package/component-meta/layout/grid/grid.container.json +4 -0
  103. package/component-meta/layout/grid/grid.row.json +4 -0
  104. package/component-meta/layout/page/page.json +4 -0
  105. package/component-meta/layout/pageHeader/pageHeader.json +4 -0
  106. package/component-meta/layout/screenDivider/screenDivider.json +4 -0
  107. package/component-meta/layout/sheet/sheet.json +5 -0
  108. package/component-meta/layout/stack/stack.json +4 -0
  109. package/component-meta/navigation/appBar/appBar.json +4 -0
  110. package/component-meta/navigation/bottomBar/bottomBar.bottomBarMenuItem.json +4 -0
  111. package/component-meta/navigation/bottomBar/bottomBar.json +4 -0
  112. package/component-meta/navigation/breadcrumbs/breadcrumbs.json +4 -0
  113. package/component-meta/navigation/menu/menu.json +5 -0
  114. package/component-meta/navigation/menu/menuDivider.json +4 -0
  115. package/component-meta/navigation/menu/menuFloating.json +5 -0
  116. package/component-meta/navigation/menu/menuItem.json +4 -0
  117. package/component-meta/navigation/menu/menuItemIcon.json +4 -0
  118. package/component-meta/navigation/menu/menuItemText.json +4 -0
  119. package/component-meta/navigation/menu/menuList.json +4 -0
  120. package/component-meta/navigation/menu/menuSubmenu.json +4 -0
  121. package/component-meta/navigation/overflowMenu/overflowMenu.json +56 -0
  122. package/component-meta/navigation/pagination/pagination.json +4 -0
  123. package/component-meta/navigation/sidebar/sidebar.json +4 -0
  124. package/component-meta/navigation/sidebar/sidebar.menuItem.json +4 -0
  125. package/component-meta/navigation/stepper/stepper.json +4 -0
  126. package/component-meta/navigation/tabs/tab/tab.json +4 -0
  127. package/component-meta/navigation/tabs/tabs.json +4 -0
  128. package/componentMeta.mjs +4 -0
  129. package/package.json +3 -3
  130. package/server.mjs +3 -3
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "OverflowMenu",
3
+ "description": "One-shot kebab/overflow menu from an items array (trigger + floating Menu).",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal",
7
+ "note": "The trigger button renders on the server; the menu surface mounts on the client."
8
+ },
9
+ "styles": {
10
+ "base": [
11
+ "@smwb/ui-styles/less/foundation.less",
12
+ "@smwb/ui-styles/less/theme.less"
13
+ ],
14
+ "entries": [
15
+ "@smwb/ui-styles/less/components/overflowMenu/overflowMenu.entry.less"
16
+ ],
17
+ "dependencies": [
18
+ "@smwb/ui-styles/less/components/button/button.entry.less",
19
+ "@smwb/ui-styles/less/components/icon/icon.entry.less",
20
+ "@smwb/ui-styles/less/components/menu/menu.entry.less"
21
+ ],
22
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/overflowMenu/overflowMenu.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/button/button.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/icon/icon.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/menu/menu.entry.less\";"
23
+ },
24
+ "props": {
25
+ "items": {
26
+ "type": "OverflowMenuItem[]",
27
+ "required": true,
28
+ "description": "Breadcrumb or navigation items."
29
+ },
30
+ "icon": {
31
+ "type": "string",
32
+ "required": false,
33
+ "description": "Trigger icon name (default `more_vert`)."
34
+ },
35
+ "placement": {
36
+ "type": "Placement",
37
+ "required": false,
38
+ "description": "Preferred floating placement relative to the anchor."
39
+ },
40
+ "aria-label": {
41
+ "type": "string",
42
+ "required": false,
43
+ "description": "Accessible label when no visible title is present."
44
+ },
45
+ "disabled": {
46
+ "type": "boolean",
47
+ "required": false,
48
+ "description": "Whether the control is disabled and non-interactive."
49
+ },
50
+ "className": {
51
+ "type": "string",
52
+ "required": false,
53
+ "description": "Additional CSS class name(s) for the root element."
54
+ }
55
+ }
56
+ }
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Pagination",
3
3
  "description": "Page navigation control with previous and next actions.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "Omit<HTMLAttributes<HTMLElement>, \"onChange\">"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Sidebar",
3
3
  "description": "Vertical navigation sidebar with collapsible sections.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "React.HTMLAttributes<HTMLElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "MenuItem",
3
3
  "description": "Interactive item inside a menu list.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Stepper",
3
3
  "description": "Multi-step progress indicator with optional navigation.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "HTMLAttributes<HTMLDivElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Tab",
3
3
  "description": "Single selectable tab trigger.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "React.HTMLAttributes<HTMLButtonElement | HTMLAnchorElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Tabs",
3
3
  "description": "Tab list container controlling associated panels.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
package/componentMeta.mjs CHANGED
@@ -306,6 +306,7 @@ export function parseComponentMetaFile(absolutePath, relativePath) {
306
306
  id,
307
307
  name: parsed.name,
308
308
  description: parsed.description ?? "",
309
+ ssr: parsed.ssr,
309
310
  extends: parsed.extends,
310
311
  inheritedAttributes: parsed.inheritedAttributes,
311
312
  styles: parsed.styles,
@@ -349,6 +350,7 @@ export function searchComponents(catalog, query, limit = 10) {
349
350
  id: entry.id,
350
351
  name: entry.name,
351
352
  description: entry.description,
353
+ ssr: entry.ssr,
352
354
  propCount: entry.propNames.length,
353
355
  }));
354
356
  }
@@ -373,6 +375,7 @@ export function searchComponents(catalog, query, limit = 10) {
373
375
  id: entry.id,
374
376
  name: entry.name,
375
377
  description: entry.description,
378
+ ssr: entry.ssr,
376
379
  propCount: entry.propNames.length,
377
380
  score,
378
381
  matchReasons: reasons,
@@ -413,6 +416,7 @@ export function getComponentProps(catalog, nameOrId) {
413
416
  id: entry.id,
414
417
  name: entry.name,
415
418
  description: entry.description,
419
+ ssr: entry.ssr,
416
420
  extends: entry.extends,
417
421
  inheritedAttributes: entry.inheritedAttributes,
418
422
  styles: entry.styles,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smwb/ui-mcp-react",
3
- "version": "2.1.3",
3
+ "version": "2.3.0",
4
4
  "description": "Model Context Protocol server exposing the @smwb/ui-react (React) component catalog and customization guide.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -28,8 +28,8 @@
28
28
  "zod": "^4.4.3"
29
29
  },
30
30
  "devDependencies": {
31
- "@smwb/ui-react": "^2.1.3",
32
- "@smwb/ui-styles": "^1.0.3",
31
+ "@smwb/ui-react": "^2.3.0",
32
+ "@smwb/ui-styles": "^1.1.0",
33
33
  "glob": "^13.0.6",
34
34
  "typescript": "^6.0.3",
35
35
  "vitest": "^2.1.9"
package/server.mjs CHANGED
@@ -20,7 +20,7 @@ const server = new McpServer(
20
20
  },
21
21
  {
22
22
  instructions:
23
- "@smwb/ui-react component catalog and customization guide. Use search_components / get_component_props for API metadata, and search_customization / get_customization for theming and appearance options.",
23
+ "@smwb/ui-react component catalog and customization guide. Use search_components / get_component_props for API metadata, and search_customization / get_customization for theming and appearance options. Every component exposes an `ssr` field: `safe` (always true — nothing throws during renderToString), `rendering` (\"universal\" = emits static HTML on the server and hydrates; \"client\" = a pure overlay that renders nothing server-side and mounts via a portal after hydration), and an optional `note`.",
24
24
  }
25
25
  );
26
26
 
@@ -29,7 +29,7 @@ server.registerTool(
29
29
  {
30
30
  title: "Search @smwb/ui-react components",
31
31
  description:
32
- "Search the @smwb/ui-react component catalog by exact, partial, fuzzy, or multi-word queries across names, ids, descriptions, and prop names.",
32
+ "Search the @smwb/ui-react component catalog by exact, partial, fuzzy, or multi-word queries across names, ids, descriptions, and prop names. Each result includes its `ssr` classification (`rendering`: \"universal\" or \"client\").",
33
33
  inputSchema: z.object({
34
34
  query: z.string().describe("Search query, for example: button, chat, text field"),
35
35
  limit: z.number().int().min(1).max(50).optional().describe("Maximum number of matches to return"),
@@ -54,7 +54,7 @@ server.registerTool(
54
54
  {
55
55
  title: "Get @smwb/ui-react component props",
56
56
  description:
57
- "Return the full metadata document for a @smwb/ui-react component, including prop names, types, required flags, descriptions, and required Less imports (`styles.base`, `styles.entries`, `styles.dependencies`, `styles.importExample`).",
57
+ "Return the full metadata document for a @smwb/ui-react component, including prop names, types, required flags, descriptions, SSR classification (`ssr.safe`, `ssr.rendering`, `ssr.note`), and required Less imports (`styles.base`, `styles.entries`, `styles.dependencies`, `styles.importExample`).",
58
58
  inputSchema: z.object({
59
59
  nameOrId: z
60
60
  .string()